import QtQuick import QtQuick.Layouts import ZShell.Services import qs.Components import qs.Helpers import qs.Config GridLayout { id: root anchors.left: parent.left anchors.margins: Appearance.padding.large anchors.right: parent.right columnSpacing: Appearance.spacing.large columns: 2 rowSpacing: Appearance.spacing.large rows: 1 ServiceRef { service: Memory } ServiceRef { service: Cpu } Resource { Layout.bottomMargin: Appearance.padding.large Layout.topMargin: Appearance.padding.large fgColor: DynamicColors.palette.m3primary icon: "memory" value: Cpu.percentage } Resource { Layout.bottomMargin: Appearance.padding.large Layout.topMargin: Appearance.padding.large fgColor: DynamicColors.palette.m3secondary icon: "memory_alt" value: Memory.percentage } component Resource: CustomRect { id: res required property color fgColor required property string icon required property real value Layout.fillWidth: true color: DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHigh, 2) implicitHeight: width radius: Appearance.rounding.large Behavior on value { Anim { duration: Appearance.anim.durations.large } } CircularProgress { id: circ anchors.fill: parent bgColor: DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHighest, 3) fgColor: res.fgColor padding: Appearance.padding.large * 3 strokeWidth: width < 200 ? Appearance.padding.smaller : Appearance.padding.normal value: res.value } MaterialIcon { id: icon anchors.centerIn: parent color: res.fgColor font.pointSize: (circ.arcRadius * 0.7) || 1 font.weight: 600 text: res.icon } } }