pragma ComponentBehavior: Bound import Quickshell import QtQuick import qs.Components import qs.Helpers import qs.Config import qs.Daemons Item { id: root required property var drawing property bool expanded: true property real offsetScale: shouldBeActive ? 0 : 1 property bool pinned: false required property ShellScreen screen readonly property bool shouldBeActive: visibilities.isDrawing required property var visibilities function collapse(): void { if (pinned) return; expanded = false; } function expand(): void { expanded = true; } function toggleExpanded(): void { if (pinned) return; expanded = !expanded; } function togglePinned(): void { pinned = !pinned; } anchors.leftMargin: (-implicitWidth - 5) * offsetScale implicitHeight: content.implicitHeight implicitWidth: root.expanded ? content.implicitWidth : icon.implicitWidth opacity: 1 - offsetScale visible: offsetScale < 1 Behavior on implicitWidth { Anim { duration: Appearance.anim.durations.expressiveDefaultSpatial easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial } } Behavior on offsetScale { Anim { duration: Appearance.anim.durations.expressiveDefaultSpatial easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial } } onVisibleChanged: { if (!visible) root.expanded = true; } Loader { id: icon active: (root.shouldBeActive || root.visible) && opacity > 0 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter asynchronous: true opacity: root.expanded ? 0 : 1 Behavior on opacity { Anim { } } sourceComponent: MaterialIcon { font.pointSize: Appearance.font.size.larger text: "arrow_forward_ios" } } Loader { id: content active: (root.shouldBeActive || root.visible) && opacity > 0 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter asynchronous: true opacity: root.expanded ? 1 : 0 Behavior on opacity { Anim { } } sourceComponent: Content { drawing: root.drawing visibilities: root.visibilities wrapper: root } } }