// SPDX-FileCopyrightText: 2021-2025 Devin Lin // SPDX-License-Identifier: GPL-2.0-or-later import QtQuick import QtQuick.Layouts import org.kde.kirigami as Kirigami import org.kde.plasma.plasmoid import org.kde.plasma.private.mobileshell as MobileShell import org.kde.plasma.private.mobileshell.state as MobileShellState import org.kde.plasma.private.mobileshell.windowplugin as WindowPlugin Item { id: root // The full intended height of the status panel. required property real statusPanelHeight // Whether the background should be transparent, with content using a complementary theme on top. required property bool transparentBackground // Request the panel itself to reapply settings (ex. for updating touch area). signal updatePanelPropertiesRequested() Kirigami.Theme.colorSet: transparentBackground ? Kirigami.Theme.Complementary : Kirigami.Theme.Header Kirigami.Theme.inherit: false property real offset: 0 MobileShell.StatusBar { id: topPanel anchors.fill: parent showSecondRow: false showTime: !MobileShellState.LockscreenDBusClient.lockscreenActive // Don't show time on the lockscreen, since we already have a massive clock showDropShadow: root.transparentBackground backgroundColor: { if (root.transparentBackground) { return "transparent"; } if (state == "default") { return Kirigami.Theme.backgroundColor; } else { return Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.95); } } transform: [ Translate { y: root.offset } ] } states: [ State { // Default panel state, which is shown in the UI. name: "default" PropertyChanges { target: root; offset: 0 } }, State { // Panel is forced to be visible and overlaid over content (will be automatically hidden after a duration). name: "visible" PropertyChanges { target: root; offset: 0 } }, State { // Panel is hidden and requires a gesture to be shown. name: "hidden" PropertyChanges { target: root; offset: -root.statusPanelHeight } } ] transitions: Transition { SequentialAnimation { ParallelAnimation { PropertyAnimation { properties: "offset" easing.type: root.state === "hidden" ? Easing.InExpo : Easing.OutExpo duration: Kirigami.Units.longDuration } } ScriptAction { script: { root.updatePanelPropertiesRequested(); } } } } }