import QtQuick import QtQuick.Layouts import QtQuick.Shapes import qs.Components import ZShell.Config import qs.Services RowLayout { id: root property color accentColor: warning ? Colors.palette.m3error : mainColor property real animatedPercentage: 0 readonly property real arcStartAngle: 0.75 * Math.PI readonly property real arcSweep: 1.5 * Math.PI property string icon required property color iconColor required property color mainColor required property double percentage property bool shown: true property color usageColor: warning ? Colors.palette.m3error : mainColor property bool warning: percentage * 100 >= warningThreshold property int warningThreshold: 80 percentage: 0 spacing: Tokens.spacing.smaller Behavior on animatedPercentage { Anim { } } Component.onCompleted: animatedPercentage = percentage onPercentageChanged: { const next = percentage; if (Math.abs(next - animatedPercentage) >= 0.05) animatedPercentage = next; } MaterialIcon { id: icon Layout.preferredWidth: 16 color: root.iconColor font.pointSize: Tokens.font.size.larger text: root.icon } CustomClippingRect { Layout.preferredHeight: root.height - Tokens.padding.small Layout.preferredWidth: 4 color: Colors.layer(Colors.palette.m3surfaceContainerHigh, 2) radius: Tokens.rounding.full CustomRect { id: fill anchors.bottom: parent.bottom anchors.left: parent.left anchors.right: parent.right color: root.mainColor implicitHeight: Math.ceil(root.percentage * parent.height) // Behavior on implicitHeight { // Anim { // } // } } } }