import QtQuick import QtQuick.Layouts import "../../../config" as Cfg Item { id: root readonly property var t: Cfg.Config.theme property string icon: "" property string label: "" property string value: "—" property color iconColor: t.accent property color dimColor: t.textDim property color textColor: t.textMain property bool showBar: false property int barPct: 0 // 0-100 property color barColor: iconColor property color trackColor: t.statsTrackColor implicitHeight: col.implicitHeight implicitWidth: col.implicitWidth ColumnLayout { id: col anchors { left: parent.left; right: parent.right } spacing: 5 RowLayout { Layout.fillWidth: true spacing: 10 Rectangle { width: 18; height: 18 radius: 4 color: Qt.alpha(root.iconColor, 0.15) Layout.alignment: Qt.AlignVCenter Text { anchors.centerIn: parent text: root.icon color: root.iconColor font.pixelSize: 12 font.weight: Font.Bold } } Text { text: root.label color: root.dimColor font.pixelSize: 12 font.weight: Font.Bold Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter } Text { text: root.value color: root.textColor font.pixelSize: 12 font.weight: Font.Bold Layout.alignment: Qt.AlignVCenter } } Rectangle { visible: root.showBar Layout.fillWidth: true height: 3 radius: 2 color: root.trackColor Rectangle { width: parent.width * Math.max(0, Math.min(root.barPct, 100)) / 100 height: parent.height radius: parent.radius color: root.barColor // smooth fill transitions on data refresh Behavior on width { NumberAnimation { duration: 800; easing.type: Easing.OutCubic } } Behavior on color { ColorAnimation { duration: 300 } } } } } }