config moved to c++ plugin, removed old qml + fileview implementation

This commit is contained in:
2026-08-13 02:25:26 +02:00
parent c29b91cd26
commit 3cd3209b28
341 changed files with 4851 additions and 3502 deletions
+17 -17
View File
@@ -1,5 +1,5 @@
import QtQuick
import qs.Config
import ZShell.Config
NumberAnimation {
enum Type {
@@ -23,41 +23,41 @@ NumberAnimation {
duration: {
if (type < Anim.StandardSmall || type > Anim.SlowEffects)
return Appearance.anim.durations.normal;
return Tokens.anim.durations.normal;
if (type === Anim.FastSpatial)
return Appearance.anim.durations.expressiveFastSpatial;
return Tokens.anim.durations.expressiveFastSpatial;
if (type === Anim.DefaultSpatial)
return Appearance.anim.durations.expressiveDefaultSpatial;
return Tokens.anim.durations.expressiveDefaultSpatial;
if (type === Anim.SlowSpatial)
return Appearance.anim.durations.large;
return Tokens.anim.durations.large;
if (type === Anim.FastEffects)
return Appearance.anim.durations.expressiveFastEffects;
return Tokens.anim.durations.expressiveFastEffects;
if (type === Anim.DefaultEffects)
return Appearance.anim.durations.expressiveEffects;
return Tokens.anim.durations.expressiveEffects;
if (type === Anim.SlowEffects)
return Appearance.anim.durations.expressiveSlowEffects;
return Tokens.anim.durations.expressiveSlowEffects;
const types = ["small", "normal", "large", "extraLarge"];
const idx = type % 4; // 0-7 are the 4 standard types
return Appearance.anim.durations[types[idx]];
return Tokens.anim.durations[types[idx]];
}
easing.bezierCurve: {
if (type === Anim.FastSpatial)
return Appearance.anim.curves.expressiveFastSpatial;
return Tokens.anim.curves.expressiveFastSpatial;
if (type === Anim.DefaultSpatial)
return Appearance.anim.curves.expressiveDefaultSpatial;
return Tokens.anim.curves.expressiveDefaultSpatial;
if (type === Anim.SlowSpatial)
return Appearance.anim.curves.expressiveSlowSpatial;
return Tokens.anim.curves.expressiveSlowSpatial;
if (type === Anim.FastEffects)
return Appearance.anim.curves.expressiveFastEffects;
return Tokens.anim.curves.expressiveFastEffects;
if (type === Anim.DefaultEffects)
return Appearance.anim.curves.expressiveDefaultEffects;
return Tokens.anim.curves.expressiveDefaultEffects;
if (type === Anim.SlowEffects)
return Appearance.anim.curves.expressiveSlowEffects;
return Tokens.anim.curves.expressiveSlowEffects;
if (type >= Anim.EmphasizedSmall && type <= Anim.EmphasizedExtraLarge)
return Appearance.anim.curves.emphasized;
return Appearance.anim.curves.standard;
return Tokens.anim.curves.emphasized;
return Tokens.anim.curves.standard;
}
}
+14 -13
View File
@@ -1,11 +1,12 @@
import QtQuick
import QtQuick.Templates
import qs.Config
import ZShell.Config
import qs.Services
Slider {
id: root
property color color: DynamicColors.palette.m3secondary
property color color: Colors.palette.m3secondary
required property string icon
property bool initialized: false
readonly property bool isHorizontal: orientation === Qt.Horizontal
@@ -22,9 +23,9 @@ Slider {
background: CustomRect {
id: groove
color: DynamicColors.layer(DynamicColors.palette.m3surfaceContainer, 2)
color: Colors.layer(Colors.palette.m3surfaceContainer, 2)
height: root.availableHeight
radius: Appearance.rounding.full
radius: Tokens.rounding.full
width: root.availableWidth
x: root.leftPadding
y: root.topPadding
@@ -65,8 +66,8 @@ Slider {
id: rect
anchors.fill: parent
color: DynamicColors.palette.m3inverseSurface
radius: Appearance.rounding.full
color: Colors.palette.m3inverseSurface
radius: Tokens.rounding.full
MouseArea {
id: handleInteraction
@@ -85,12 +86,12 @@ Slider {
function update(): void {
animate = !moving;
binding.when = moving;
font.pointSize = moving ? Appearance.font.size.small : Appearance.font.size.larger;
font.pointSize = moving ? Tokens.font.size.small : Tokens.font.size.larger;
font.family = moving ? Appearance.font.family.sans : Appearance.font.family.material;
}
anchors.centerIn: parent
color: DynamicColors.palette.m3inverseOnSurface
color: Colors.palette.m3inverseOnSurface
text: root.icon
onMovingChanged: anim.restart()
@@ -108,8 +109,8 @@ Slider {
id: anim
Anim {
duration: Appearance.anim.durations.normal / 2
easing.bezierCurve: Appearance.anim.curves.standardAccel
duration: Tokens.anim.durations.normal / 2
easing.bezierCurve: Tokens.anim.curves.standardAccel
property: "scale"
target: icon
to: 0
@@ -120,8 +121,8 @@ Slider {
}
Anim {
duration: Appearance.anim.durations.normal / 2
easing.bezierCurve: Appearance.anim.curves.standardDecel
duration: Tokens.anim.durations.normal / 2
easing.bezierCurve: Tokens.anim.curves.standardDecel
property: "scale"
target: icon
to: 1
@@ -132,7 +133,7 @@ Slider {
}
Behavior on value {
Anim {
duration: Appearance.anim.durations.large
duration: Tokens.anim.durations.large
}
}
+59 -4
View File
@@ -1,8 +1,63 @@
import QtQuick
import qs.Config
import ZShell.Config
ColorAnimation {
duration: MaterialEasing.standardTime
easing.bezierCurve: MaterialEasing.standard
easing.type: Easing.BezierSpline
enum Type {
StandardSmall = 0,
Standard,
StandardLarge,
StandardExtraLarge,
EmphasizedSmall,
Emphasized,
EmphasizedLarge,
EmphasizedExtraLarge,
FastSpatial,
DefaultSpatial,
SlowSpatial,
FastEffects,
DefaultEffects,
SlowEffects
}
property int type: CAnim.DefaultSpatial
duration: {
if (type < CAnim.StandardSmall || type > Anim.SlowEffects)
return Tokens.anim.durations.normal;
if (type === CAnim.FastSpatial)
return Tokens.anim.durations.expressiveFastSpatial;
if (type === CAnim.DefaultSpatial)
return Tokens.anim.durations.expressiveDefaultSpatial;
if (type === CAnim.SlowSpatial)
return Tokens.anim.durations.large;
if (type === CAnim.FastEffects)
return Tokens.anim.durations.expressiveFastEffects;
if (type === CAnim.DefaultEffects)
return Tokens.anim.durations.expressiveEffects;
if (type === CAnim.SlowEffects)
return Tokens.anim.durations.expressiveSlowEffects;
const types = ["small", "normal", "large", "extraLarge"];
const idx = type % 4;
return Tokens.anim.durations[types[idx]];
}
easing.bezierCurve: {
if (type === CAnim.FastSpatial)
return Tokens.anim.curves.expressiveFastSpatial;
if (type === CAnim.DefaultSpatial)
return Tokens.anim.curves.expressiveDefaultSpatial;
if (type === CAnim.SlowSpatial)
return Tokens.anim.curves.expressiveSlowSpatial;
if (type === CAnim.FastEffects)
return Tokens.anim.curves.expressiveFastEffects;
if (type === CAnim.DefaultEffects)
return Tokens.anim.curves.expressiveDefaultEffects;
if (type === CAnim.SlowEffects)
return Tokens.anim.curves.expressiveSlowEffects;
if (type >= CAnim.EmphasizedSmall && type <= Anim.EmphasizedExtraLarge)
return Tokens.anim.curves.emphasized;
return Tokens.anim.curves.standard;
}
}
+9 -8
View File
@@ -1,7 +1,8 @@
import qs.Config
import ZShell.Config
import ZShell.Internal
import QtQuick
import QtQuick.Templates
import qs.Services
BusyIndicator {
id: root
@@ -17,12 +18,12 @@ BusyIndicator {
}
property int animState
property color bgColour: DynamicColors.palette.m3secondaryContainer
property color fgColour: DynamicColors.palette.m3primary
property real implicitSize: Appearance.font.size.normal * 3
property color bgColour: Colors.palette.m3secondaryContainer
property color fgColour: Colors.palette.m3primary
property real implicitSize: Tokens.font.size.normal * 3
property real internalStrokeWidth: strokeWidth
readonly property alias progress: manager.progress
property real strokeWidth: Appearance.padding.small * 0.8
property real strokeWidth: Tokens.padding.small * 0.8
property alias type: manager.indeterminateAnimationType
implicitHeight: implicitSize
@@ -50,7 +51,7 @@ BusyIndicator {
}
transitions: Transition {
Anim {
duration: manager.completeEndDuration * Appearance.anim.durations.scale
duration: manager.completeEndDuration * Tokens.anim.durations.scale
properties: "opacity,internalStrokeWidth"
}
}
@@ -77,7 +78,7 @@ BusyIndicator {
}
NumberAnimation {
duration: manager.duration * Appearance.anim.durations.scale
duration: manager.duration * Tokens.anim.durations.scale
from: 0
loops: Animation.Infinite
property: "progress"
@@ -87,7 +88,7 @@ BusyIndicator {
}
NumberAnimation {
duration: manager.completeEndDuration * Appearance.anim.durations.scale
duration: manager.completeEndDuration * Tokens.anim.durations.scale
from: 0
property: "completeEndProgress"
running: root.animState === CircularIndicator.Completing
+10 -9
View File
@@ -1,19 +1,20 @@
import QtQuick
import QtQuick.Shapes
import qs.Config
import ZShell.Config
import qs.Services
Shape {
id: root
readonly property real arcRadius: (size - padding - strokeWidth) / 2
property color bgColour: DynamicColors.palette.m3secondaryContainer
property color fgColour: DynamicColors.palette.m3primary
property color bgColour: Colors.palette.m3secondaryContainer
property color fgColour: Colors.palette.m3primary
readonly property real gapAngle: ((spacing + strokeWidth) / (arcRadius || 1)) * (180 / Math.PI)
property int padding: 0
readonly property real size: Math.min(width, height)
property int spacing: Appearance.spacing.small
property int spacing: Tokens.spacing.small
property int startAngle: -90
property int strokeWidth: Appearance.padding.smaller
property int strokeWidth: Tokens.padding.smaller
readonly property real vValue: value || 1 / 360
property real value
@@ -21,14 +22,14 @@ Shape {
preferredRendererType: Shape.CurveRenderer
ShapePath {
capStyle: Appearance.rounding.scale === 0 ? ShapePath.SquareCap : ShapePath.RoundCap
capStyle: Tokens.rounding.scale === 0 ? ShapePath.SquareCap : ShapePath.RoundCap
fillColor: "transparent"
strokeColor: root.bgColour
strokeWidth: root.strokeWidth
Behavior on strokeColor {
CAnim {
duration: Appearance.anim.durations.large
duration: Tokens.anim.durations.large
}
}
@@ -43,14 +44,14 @@ Shape {
}
ShapePath {
capStyle: Appearance.rounding.scale === 0 ? ShapePath.SquareCap : ShapePath.RoundCap
capStyle: Tokens.rounding.scale === 0 ? ShapePath.SquareCap : ShapePath.RoundCap
fillColor: "transparent"
strokeColor: root.fgColour
strokeWidth: root.strokeWidth
Behavior on strokeColor {
CAnim {
duration: Appearance.anim.durations.large
duration: Tokens.anim.durations.large
}
}
+29 -28
View File
@@ -1,6 +1,7 @@
import QtQuick
import QtQuick.Layouts
import qs.Config
import ZShell.Config
import qs.Services
ColumnLayout {
id: root
@@ -15,26 +16,26 @@ ColumnLayout {
signal toggleRequested
Layout.fillWidth: true
spacing: Appearance.spacing.small
spacing: Tokens.spacing.small
Item {
id: sectionHeaderItem
Layout.fillWidth: true
Layout.preferredHeight: Math.max(titleRow.implicitHeight + Appearance.padding.normal * 2, 48)
Layout.preferredHeight: Math.max(titleRow.implicitHeight + Tokens.padding.normal * 2, 48)
RowLayout {
id: titleRow
anchors.left: parent.left
anchors.leftMargin: Appearance.padding.normal
anchors.leftMargin: Tokens.padding.normal
anchors.right: parent.right
anchors.rightMargin: Appearance.padding.normal
anchors.rightMargin: Tokens.padding.normal
anchors.verticalCenter: parent.verticalCenter
spacing: Appearance.spacing.normal
spacing: Tokens.spacing.normal
CustomText {
font.pointSize: Appearance.font.size.larger
font.pointSize: Tokens.font.size.larger
font.weight: 500
text: root.title
}
@@ -44,15 +45,15 @@ ColumnLayout {
}
MaterialIcon {
color: DynamicColors.palette.m3onSurfaceVariant
font.pointSize: Appearance.font.size.normal
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.normal
rotation: root.expanded ? 180 : 0
text: "expand_more"
Behavior on rotation {
Anim {
duration: Appearance.anim.durations.small
easing.bezierCurve: Appearance.anim.curves.standard
duration: Tokens.anim.durations.small
easing.bezierCurve: Tokens.anim.curves.standard
}
}
}
@@ -60,8 +61,8 @@ ColumnLayout {
StateLayer {
anchors.fill: parent
color: DynamicColors.palette.m3onSurface
radius: Appearance.rounding.normal
color: Colors.palette.m3onSurface
radius: Tokens.rounding.normal
showHoverBackground: false
onClicked: {
@@ -75,12 +76,12 @@ ColumnLayout {
id: contentWrapper
Layout.fillWidth: true
Layout.preferredHeight: root.expanded ? (contentColumn.implicitHeight + Appearance.spacing.small * 2) : 0
Layout.preferredHeight: root.expanded ? (contentColumn.implicitHeight + Tokens.spacing.small * 2) : 0
clip: true
Behavior on Layout.preferredHeight {
Anim {
easing.bezierCurve: Appearance.anim.curves.standard
easing.bezierCurve: Tokens.anim.curves.standard
}
}
@@ -88,14 +89,14 @@ ColumnLayout {
id: backgroundRect
anchors.fill: parent
color: DynamicColors.transparency.enabled ? DynamicColors.layer(DynamicColors.palette.m3surfaceContainer, root.nested ? 3 : 2) : (root.nested ? DynamicColors.palette.m3surfaceContainerHigh : DynamicColors.palette.m3surfaceContainer)
color: Colors.transparency.enabled ? Colors.layer(Colors.palette.m3surfaceContainer, root.nested ? 3 : 2) : (root.nested ? Colors.palette.m3surfaceContainerHigh : Colors.palette.m3surfaceContainer)
opacity: root.showBackground && root.expanded ? 1.0 : 0.0
radius: Appearance.rounding.normal
radius: Tokens.rounding.normal
visible: root.showBackground
Behavior on opacity {
Anim {
easing.bezierCurve: Appearance.anim.curves.standard
easing.bezierCurve: Tokens.anim.curves.standard
}
}
}
@@ -103,29 +104,29 @@ ColumnLayout {
ColumnLayout {
id: contentColumn
anchors.bottomMargin: Appearance.spacing.small
anchors.bottomMargin: Tokens.spacing.small
anchors.left: parent.left
anchors.leftMargin: Appearance.padding.normal
anchors.leftMargin: Tokens.padding.normal
anchors.right: parent.right
anchors.rightMargin: Appearance.padding.normal
anchors.rightMargin: Tokens.padding.normal
opacity: root.expanded ? 1.0 : 0.0
spacing: Appearance.spacing.small
y: Appearance.spacing.small
spacing: Tokens.spacing.small
y: Tokens.spacing.small
Behavior on opacity {
Anim {
easing.bezierCurve: Appearance.anim.curves.standard
easing.bezierCurve: Tokens.anim.curves.standard
}
}
CustomText {
id: descriptionText
Layout.bottomMargin: root.description !== "" ? Appearance.spacing.small : 0
Layout.bottomMargin: root.description !== "" ? Tokens.spacing.small : 0
Layout.fillWidth: true
Layout.topMargin: root.description !== "" ? Appearance.spacing.smaller : 0
color: DynamicColors.palette.m3onSurfaceVariant
font.pointSize: Appearance.font.size.small
Layout.topMargin: root.description !== "" ? Tokens.spacing.smaller : 0
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.small
text: root.description
visible: root.description !== ""
wrapMode: Text.Wrap
+5 -4
View File
@@ -1,7 +1,8 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Config
import ZShell.Config
import qs.Services
Item {
id: root
@@ -18,9 +19,9 @@ Item {
property real lastChromaticHue: 0
readonly property real radius: (Math.min(width, height) - handleSize) / 2
readonly property int segmentCount: 240
readonly property color thumbColor: DynamicColors.palette.m3inverseSurface
readonly property color thumbContentColor: DynamicColors.palette.m3inverseOnSurface
readonly property color trackColor: DynamicColors.layer(DynamicColors.palette.m3surfaceContainer, 2)
readonly property color thumbColor: Colors.palette.m3inverseSurface
readonly property color thumbContentColor: Colors.palette.m3inverseOnSurface
readonly property color trackColor: Colors.layer(Colors.palette.m3surfaceContainer, 2)
function hueToAngle(hue) {
return arcStartAngle + arcSweep * hue;
+10 -9
View File
@@ -1,13 +1,14 @@
import QtQuick
import QtQuick.Templates
import qs.Config
import ZShell.Config
import qs.Services
Slider {
id: root
property color nonPeakColor: DynamicColors.tPalette.m3primary
property color nonPeakColor: Colors.tPalette.m3primary
required property real peak
property color peakColor: DynamicColors.palette.m3primary
property color peakColor: Colors.palette.m3primary
background: Item {
CustomRect {
@@ -19,7 +20,7 @@ Slider {
bottomRightRadius: root.implicitHeight / 15
color: root.nonPeakColor
implicitWidth: root.handle.x - root.implicitHeight
radius: Appearance.rounding.full
radius: Tokens.rounding.full
topRightRadius: root.implicitHeight / 15
CustomRect {
@@ -29,7 +30,7 @@ Slider {
bottomRightRadius: root.implicitHeight / 15
color: root.peakColor
implicitWidth: parent.width * root.peak
radius: Appearance.rounding.full
radius: Tokens.rounding.full
topRightRadius: root.implicitHeight / 15
Behavior on implicitWidth {
@@ -47,18 +48,18 @@ Slider {
anchors.top: parent.top
anchors.topMargin: root.implicitHeight / 3
bottomLeftRadius: root.implicitHeight / 15
color: DynamicColors.tPalette.m3surfaceContainer
color: Colors.tPalette.m3surfaceContainer
implicitWidth: root.implicitWidth - root.handle.x - root.handle.implicitWidth - root.implicitHeight
radius: Appearance.rounding.full
radius: Tokens.rounding.full
topLeftRadius: root.implicitHeight / 15
}
}
handle: CustomRect {
anchors.verticalCenter: parent.verticalCenter
color: DynamicColors.palette.m3primary
color: Colors.palette.m3primary
implicitHeight: 15
implicitWidth: 5
radius: Appearance.rounding.full
radius: Tokens.rounding.full
x: root.visualPosition * root.availableWidth - implicitWidth / 2
MouseArea {
+5 -4
View File
@@ -1,13 +1,14 @@
import QtQuick
import QtQuick.Controls
import qs.Config
import ZShell.Config
import qs.Services
Button {
id: control
property color bgColor: DynamicColors.palette.m3primary
property int radius: Appearance.rounding.smallest / 2
property color textColor: DynamicColors.palette.m3onPrimary
property color bgColor: Colors.palette.m3primary
property int radius: Tokens.rounding.smallest / 2
property color textColor: Colors.palette.m3onPrimary
background: CustomRect {
color: control.bgColor
+6 -5
View File
@@ -1,6 +1,7 @@
import QtQuick
import QtQuick.Controls
import qs.Config
import ZShell.Config
import qs.Services
CheckBox {
id: control
@@ -18,14 +19,14 @@ CheckBox {
indicator: CustomRect {
// x: control.leftPadding
// y: parent.implicitHeight / 2 - implicitHeight / 2
border.color: control.checked ? DynamicColors.palette.m3primary : "transparent"
color: DynamicColors.palette.m3surfaceVariant
border.color: control.checked ? Colors.palette.m3primary : "transparent"
color: Colors.palette.m3surfaceVariant
implicitHeight: control.checkHeight
implicitWidth: control.checkWidth
radius: Appearance.rounding.smallest / 2
radius: Tokens.rounding.smallest / 2
CustomRect {
color: DynamicColors.palette.m3primary
color: Colors.palette.m3primary
implicitHeight: control.checkHeight - (y * 2)
implicitWidth: control.checkWidth - (x * 2)
radius: 3
+17 -16
View File
@@ -3,12 +3,13 @@ pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import qs.Config
import ZShell.Config
import qs.Services
ComboBox {
id: root
property int cornerRadius: Appearance.rounding.normal
property int cornerRadius: Tokens.rounding.normal
property int fieldHeight: 42
property bool filled: true
property real focusRingOpacity: 0.70
@@ -31,7 +32,7 @@ ComboBox {
id: container
anchors.fill: parent
color: DynamicColors.palette.m3surfaceVariant
color: Colors.palette.m3surfaceVariant
radius: root.cornerRadius
StateLayer {
@@ -49,7 +50,7 @@ ComboBox {
// Display text
CustomText {
Layout.fillWidth: true
color: root.enabled ? DynamicColors.palette.m3onSurface : DynamicColors.palette.m3onSurfaceVariant
color: root.enabled ? Colors.palette.m3onSurface : Colors.palette.m3onSurfaceVariant
elide: Text.ElideRight
font.pixelSize: 16
font.weight: Font.Medium
@@ -59,7 +60,7 @@ ComboBox {
// Indicator chevron (simple, replace with your icon system)
CustomText {
color: root.enabled ? DynamicColors.palette.m3onSurfaceVariant : DynamicColors.palette.m3onSurfaceVariant
color: root.enabled ? Colors.palette.m3onSurfaceVariant : Colors.palette.m3onSurfaceVariant
rotation: root.popup.visible ? 180 : 0
text: "▾"
transformOrigin: Item.Center
@@ -76,36 +77,36 @@ ComboBox {
popup: Popup {
id: p
implicitHeight: list.contentItem.height + Appearance.padding.small * 2
implicitHeight: list.contentItem.height + Tokens.padding.small * 2
implicitWidth: root.width
modal: true
popupType: root.preferPopupWindow ? Popup.Window : Popup.Item
y: -list.currentIndex * (root.menuRowHeight + Appearance.spacing.small) - Appearance.padding.small
y: -list.currentIndex * (root.menuRowHeight + Tokens.spacing.small) - Tokens.padding.small
background: CustomRect {
color: DynamicColors.palette.m3surface
color: Colors.palette.m3surface
radius: root.menuCornerRadius
}
contentItem: ListView {
id: list
anchors.bottomMargin: Appearance.padding.small
anchors.bottomMargin: Tokens.padding.small
anchors.fill: parent
anchors.topMargin: Appearance.padding.small
anchors.topMargin: Tokens.padding.small
clip: true
currentIndex: root.currentIndex
model: root.delegateModel
spacing: Appearance.spacing.small
spacing: Tokens.spacing.small
delegate: CustomRect {
required property int index
required property var modelData
anchors.horizontalCenter: parent.horizontalCenter
color: (index === root.currentIndex) ? DynamicColors.palette.m3primary : "transparent"
color: (index === root.currentIndex) ? Colors.palette.m3primary : "transparent"
implicitHeight: root.menuRowHeight
implicitWidth: p.implicitWidth - Appearance.padding.small * 2
radius: Appearance.rounding.normal - Appearance.padding.small
implicitWidth: p.implicitWidth - Tokens.padding.small * 2
radius: Tokens.rounding.normal - Tokens.padding.small
RowLayout {
anchors.fill: parent
@@ -113,7 +114,7 @@ ComboBox {
CustomText {
Layout.fillWidth: true
color: DynamicColors.palette.m3onSurface
color: Colors.palette.m3onSurface
elide: Text.ElideRight
font.pixelSize: 15
text: modelData
@@ -121,7 +122,7 @@ ComboBox {
}
CustomText {
color: DynamicColors.palette.m3onSurfaceVariant
color: Colors.palette.m3onSurfaceVariant
text: "✓"
verticalAlignment: Text.AlignVCenter
visible: index === root.currentIndex
+8 -7
View File
@@ -1,11 +1,12 @@
import QtQuick
import QtQuick.Templates
import qs.Config
import ZShell.Config
import qs.Services
RadioButton {
id: root
font.pointSize: Appearance.font.size.normal
font.pointSize: Tokens.font.size.normal
implicitHeight: Math.max(implicitIndicatorHeight, implicitContentHeight)
implicitWidth: implicitIndicatorWidth + implicitContentWidth + contentItem.anchors.leftMargin
@@ -20,12 +21,12 @@ RadioButton {
id: outerCircle
anchors.verticalCenter: parent.verticalCenter
border.color: root.checked ? DynamicColors.palette.m3primary : DynamicColors.palette.m3onSurfaceVariant
border.color: root.checked ? Colors.palette.m3primary : Colors.palette.m3onSurfaceVariant
border.width: 2
color: "transparent"
implicitHeight: 16
implicitWidth: 16
radius: Appearance.rounding.full
radius: Tokens.rounding.full
Behavior on border.color {
CAnim {
@@ -34,7 +35,7 @@ RadioButton {
StateLayer {
anchors.margins: -7
color: root.checked ? DynamicColors.palette.m3onSurface : DynamicColors.palette.m3primary
color: root.checked ? Colors.palette.m3onSurface : Colors.palette.m3primary
z: -1
onClicked: {
@@ -44,10 +45,10 @@ RadioButton {
CustomRect {
anchors.centerIn: parent
color: Qt.alpha(DynamicColors.palette.m3primary, root.checked ? 1 : 0)
color: Qt.alpha(Colors.palette.m3primary, root.checked ? 1 : 0)
implicitHeight: 8
implicitWidth: 8
radius: Appearance.rounding.full
radius: Tokens.rounding.full
}
}
}
+4 -3
View File
@@ -1,6 +1,7 @@
import qs.Config
import ZShell.Config
import QtQuick
import QtQuick.Templates
import qs.Services
ScrollBar {
id: root
@@ -17,7 +18,7 @@ ScrollBar {
contentItem: CustomRect {
anchors.left: parent.left
anchors.right: parent.right
color: DynamicColors.palette.m3secondary
color: Colors.palette.m3secondary
opacity: {
if (root.size === 1)
return 0;
@@ -29,7 +30,7 @@ ScrollBar {
return 0.6;
return 0;
}
radius: Appearance.rounding.full
radius: Tokens.rounding.full
Behavior on opacity {
Anim {
+14 -13
View File
@@ -5,14 +5,15 @@ import QtQuick.Templates
import ZShell.Components
import ZShell
import qs.Components
import qs.Config
import ZShell.Config
import qs.Services
Slider {
id: root
property bool animateWave
property color bgColor: enabled ? DynamicColors.palette.m3secondaryContainer : Qt.alpha(DynamicColors.palette.m3onSurface, 0.1)
property color fgColor: enabled ? DynamicColors.palette.m3primary : Qt.alpha(DynamicColors.palette.m3onSurface, 0.38)
property color bgColor: enabled ? Colors.palette.m3secondaryContainer : Qt.alpha(Colors.palette.m3onSurface, 0.1)
property color fgColor: enabled ? Colors.palette.m3primary : Qt.alpha(Colors.palette.m3onSurface, 0.38)
property real filledWidth
property real pos: visualPosition
property int waveDuration: 1000
@@ -31,15 +32,15 @@ Slider {
id: remaining
anchors.left: handle.right
anchors.leftMargin: Appearance.spacing.extraSmall
anchors.leftMargin: Tokens.spacing.extraSmall
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
bottomLeftRadius: Appearance.rounding.extraSmall / 2
bottomLeftRadius: Tokens.rounding.extraSmall / 2
color: root.bgColor
implicitHeight: parent.height * (parent.height <= 12 ? opacity : Math.min(opacity * 2, 1))
opacity: Math.min(width, 12) / 12
radius: Appearance.rounding.small
topLeftRadius: Appearance.rounding.extraSmall / 2
radius: Tokens.rounding.small
topLeftRadius: Tokens.rounding.extraSmall / 2
}
CustomRect {
@@ -50,14 +51,14 @@ Slider {
implicitHeight: 4 * remaining.opacity
implicitWidth: implicitHeight
opacity: remaining.opacity
radius: Appearance.rounding.full
radius: Tokens.rounding.full
}
CustomRect {
id: handle
anchors.left: filled.right
anchors.leftMargin: Appearance.spacing.extraSmall
anchors.leftMargin: Tokens.spacing.extraSmall
anchors.verticalCenter: parent.verticalCenter
color: root.fgColor
implicitHeight: {
@@ -66,7 +67,7 @@ Slider {
return parent.height * (mouse.pressed ? pressMult : mult);
}
implicitWidth: 4
radius: Appearance.rounding.full
radius: Tokens.rounding.full
Behavior on implicitHeight {
Anim {
@@ -88,12 +89,12 @@ Slider {
id: lineComp
CustomRect {
bottomRightRadius: Appearance.rounding.extraSmall / 2
bottomRightRadius: Tokens.rounding.extraSmall / 2
color: root.fgColor
implicitHeight: root.height
implicitWidth: root.filledWidth
radius: Appearance.rounding.small
topRightRadius: Appearance.rounding.extraSmall / 2
radius: Tokens.rounding.small
topRightRadius: Tokens.rounding.extraSmall / 2
}
}
+19 -18
View File
@@ -2,7 +2,8 @@ pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Layouts
import qs.Config
import ZShell.Config
import qs.Services
RowLayout {
id: root
@@ -17,7 +18,7 @@ RowLayout {
signal valueModified(value: real)
spacing: Appearance.spacing.small
spacing: Tokens.spacing.small
onValueChanged: {
if (!root.isEditing) {
@@ -28,18 +29,18 @@ RowLayout {
CustomTextField {
id: textField
color: root.enabled ? DynamicColors.palette.m3onSurface : Qt.alpha(DynamicColors.palette.m3onSurface, 0.5)
color: root.enabled ? Colors.palette.m3onSurface : Qt.alpha(Colors.palette.m3onSurface, 0.5)
implicitHeight: upButton.implicitHeight
inputMethodHints: Qt.ImhFormattedNumbersOnly
leftPadding: Appearance.padding.normal
padding: Appearance.padding.small
rightPadding: Appearance.padding.normal
leftPadding: Tokens.padding.normal
padding: Tokens.padding.small
rightPadding: Tokens.padding.normal
text: root.isEditing ? text : root.displayText
background: CustomRect {
color: root.enabled ? DynamicColors.tPalette.m3surfaceContainerHigh : DynamicColors.tPalette.m3surfaceContainerLow
color: root.enabled ? Colors.tPalette.m3surfaceContainerHigh : Colors.tPalette.m3surfaceContainerLow
implicitWidth: 100
radius: Appearance.rounding.full
radius: Tokens.rounding.full
}
validator: DoubleValidator {
bottom: root.min
@@ -86,15 +87,15 @@ RowLayout {
CustomRect {
id: upButton
color: root.enabled ? DynamicColors.palette.m3primary : DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHighest, 1)
implicitHeight: upIcon.implicitHeight + Appearance.padding.small * 2
color: root.enabled ? Colors.palette.m3primary : Colors.layer(Colors.palette.m3surfaceContainerHighest, 1)
implicitHeight: upIcon.implicitHeight + Tokens.padding.small * 2
implicitWidth: implicitHeight
radius: Appearance.rounding.full
radius: Tokens.rounding.full
StateLayer {
id: upState
color: DynamicColors.palette.m3onPrimary
color: Colors.palette.m3onPrimary
onClicked: {
let newValue = Math.min(root.max, root.value + root.step);
@@ -113,21 +114,21 @@ RowLayout {
id: upIcon
anchors.centerIn: parent
color: root.enabled ? DynamicColors.palette.m3onPrimary : Qt.alpha(DynamicColors.palette.m3onSurface, 0.5)
color: root.enabled ? Colors.palette.m3onPrimary : Qt.alpha(Colors.palette.m3onSurface, 0.5)
text: "keyboard_arrow_up"
}
}
CustomRect {
color: root.enabled ? DynamicColors.palette.m3primary : DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHighest, 1)
implicitHeight: downIcon.implicitHeight + Appearance.padding.small * 2
color: root.enabled ? Colors.palette.m3primary : Colors.layer(Colors.palette.m3surfaceContainerHighest, 1)
implicitHeight: downIcon.implicitHeight + Tokens.padding.small * 2
implicitWidth: implicitHeight
radius: Appearance.rounding.full
radius: Tokens.rounding.full
StateLayer {
id: downState
color: DynamicColors.palette.m3onPrimary
color: Colors.palette.m3onPrimary
onClicked: {
let newValue = Math.max(root.min, root.value - root.step);
@@ -146,7 +147,7 @@ RowLayout {
id: downIcon
anchors.centerIn: parent
color: root.enabled ? DynamicColors.palette.m3onPrimary : Qt.alpha(DynamicColors.palette.m3onSurface, 0.5)
color: root.enabled ? Colors.palette.m3onPrimary : Qt.alpha(Colors.palette.m3onSurface, 0.5)
text: "keyboard_arrow_down"
}
}
+16 -15
View File
@@ -1,6 +1,7 @@
import QtQuick
import QtQuick.Layouts
import qs.Config
import ZShell.Config
import qs.Services
Row {
id: root
@@ -11,15 +12,15 @@ Row {
}
property alias active: menu.active
property color colour: type == CustomSplitButton.Filled ? DynamicColors.palette.m3primary : DynamicColors.palette.m3secondaryContainer
property color colour: type == CustomSplitButton.Filled ? Colors.palette.m3primary : Colors.palette.m3secondaryContainer
property bool disabled
property color disabledColour: Qt.alpha(DynamicColors.palette.m3onSurface, 0.1)
property color disabledTextColour: Qt.alpha(DynamicColors.palette.m3onSurface, 0.38)
property color disabledColour: Qt.alpha(Colors.palette.m3onSurface, 0.1)
property color disabledTextColour: Qt.alpha(Colors.palette.m3onSurface, 0.38)
readonly property alias expandBtn: expandBtn
property alias expanded: menu.expanded
property string fallbackIcon
property string fallbackText
property real horizontalPadding: Appearance.padding.larger
property real horizontalPadding: Tokens.padding.larger
readonly property alias iconLabel: iconLabel
readonly property alias label: label
readonly property alias menu: menu
@@ -27,20 +28,20 @@ Row {
property bool menuOnTop
property real minLeftWidth
readonly property alias stateLayer: stateLayer
property color textColour: type == CustomSplitButton.Filled ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3onSecondaryContainer
property color textColour: type == CustomSplitButton.Filled ? Colors.palette.m3onPrimary : Colors.palette.m3onSecondaryContainer
readonly property alias textRow: textRow
property int type: CustomSplitButton.Filled
property real verticalPadding: Appearance.padding.small
property real verticalPadding: Tokens.padding.small
spacing: Math.floor(Appearance.spacing.extraSmall)
spacing: Math.floor(Tokens.spacing.extraSmall)
CustomRect {
bottomRightRadius: Appearance.rounding.small / 2
bottomRightRadius: Tokens.rounding.small / 2
color: root.disabled ? root.disabledColour : root.colour
implicitHeight: expandBtn.implicitHeight
implicitWidth: Math.max(root.minLeftWidth, textRow.implicitWidth + root.horizontalPadding * 2)
radius: implicitHeight / 2 * Math.min(1, Appearance.rounding.scale)
topRightRadius: Appearance.rounding.small / 2
radius: implicitHeight / 2 * Math.min(1, Tokens.rounding.scale)
topRightRadius: Tokens.rounding.small / 2
StateLayer {
id: stateLayer
@@ -58,7 +59,7 @@ Row {
anchors.centerIn: parent
anchors.horizontalCenterOffset: Math.floor(root.verticalPadding / 4)
spacing: Appearance.spacing.small
spacing: Tokens.spacing.small
MaterialIcon {
id: iconLabel
@@ -92,13 +93,13 @@ Row {
CustomRect {
id: expandBtn
property real rad: root.expanded ? implicitHeight / 2 * Math.min(1, Appearance.rounding.scale) : Appearance.rounding.small / 2
property real rad: root.expanded ? implicitHeight / 2 * Math.min(1, Tokens.rounding.scale) : Tokens.rounding.small / 2
bottomLeftRadius: rad
color: root.disabled ? root.disabledColour : root.colour
implicitHeight: expandIcon.implicitHeight + root.verticalPadding * 2
implicitWidth: implicitHeight
radius: implicitHeight / 2 * Math.min(1, Appearance.rounding.scale)
radius: implicitHeight / 2 * Math.min(1, Tokens.rounding.scale)
topLeftRadius: rad
Behavior on rad {
@@ -142,7 +143,7 @@ Row {
attachSideY: root.menuOnTop ? Menu.Top : Menu.Bottom
attachTo: expandBtn
marginY: Appearance.spacing.small * (root.menuOnTop ? -1 : 1)
marginY: Tokens.spacing.small * (root.menuOnTop ? -1 : 1)
thisSideY: root.menuOnTop ? Menu.Bottom : Menu.Top
}
}
+7 -6
View File
@@ -2,7 +2,8 @@ pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Layouts
import qs.Config
import ZShell.Config
import qs.Services
Item {
id: root
@@ -21,7 +22,7 @@ Item {
anchors.left: parent.left
anchors.right: parent.right
clip: false
implicitHeight: row.implicitHeight + Appearance.padding.smaller * 2
implicitHeight: row.implicitHeight + Tokens.padding.smaller * 2
opacity: shouldBeActive ? 1 : 0
scale: shouldBeActive ? 1 : 0.8
z: splitButton.menu.implicitHeight > 0 ? expandedZ : 1
@@ -39,15 +40,15 @@ Item {
id: row
anchors.left: parent.left
anchors.margins: Appearance.padding.small
anchors.margins: Tokens.padding.small
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
spacing: Appearance.spacing.normal
spacing: Tokens.spacing.normal
CustomText {
Layout.fillWidth: true
color: root.enabled ? DynamicColors.palette.m3onSurface : DynamicColors.palette.m3onSurfaceVariant
font.pointSize: Appearance.font.size.larger
color: root.enabled ? Colors.palette.m3onSurface : Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.larger
text: root.label
}
+15 -14
View File
@@ -1,7 +1,8 @@
import QtQuick
import QtQuick.Shapes
import QtQuick.Templates
import qs.Config
import ZShell.Config
import qs.Services
Switch {
id: root
@@ -12,20 +13,20 @@ Switch {
implicitWidth: implicitIndicatorWidth
indicator: CustomRect {
color: root.checked && root.enabled ? DynamicColors.palette.m3primary : DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHighest, root.cLayer)
implicitHeight: Appearance.font.size.medium + Appearance.padding.normal * 2
color: root.checked && root.enabled ? Colors.palette.m3primary : Colors.layer(Colors.palette.m3surfaceContainerHighest, root.cLayer)
implicitHeight: Tokens.font.size.medium + Tokens.padding.normal * 2
implicitWidth: implicitHeight * 1.7
radius: Appearance.rounding.full
radius: Tokens.rounding.full
CustomRect {
readonly property real nonAnimWidth: root.pressed ? implicitHeight * 1.2 : implicitHeight
anchors.verticalCenter: parent.verticalCenter
color: root.checked && root.enabled ? DynamicColors.palette.m3onPrimary : DynamicColors.layer(DynamicColors.palette.m3outline, root.cLayer + 1)
implicitHeight: parent.implicitHeight - Appearance.padding.extraSmall
color: root.checked && root.enabled ? Colors.palette.m3onPrimary : Colors.layer(Colors.palette.m3outline, root.cLayer + 1)
implicitHeight: parent.implicitHeight - Tokens.padding.extraSmall
implicitWidth: nonAnimWidth
radius: Appearance.rounding.full
x: root.checked ? parent.implicitWidth - nonAnimWidth - Appearance.padding.extraSmall / 2 : Appearance.padding.extraSmall / 2
radius: Tokens.rounding.full
x: root.checked ? parent.implicitWidth - nonAnimWidth - Tokens.padding.extraSmall / 2 : Tokens.padding.extraSmall / 2
Behavior on implicitWidth {
Anim {
@@ -40,7 +41,7 @@ Switch {
CustomRect {
anchors.fill: parent
color: root.checked && root.enabled ? DynamicColors.palette.m3primary : DynamicColors.palette.m3onSurface
color: root.checked && root.enabled ? Colors.palette.m3primary : Colors.palette.m3onSurface
opacity: root.pressed ? 0.1 : root.hovered ? 0.08 : 0
radius: parent.radius
@@ -91,7 +92,7 @@ Switch {
anchors.centerIn: parent
asynchronous: true
height: parent.implicitHeight - Appearance.padding.larger
height: parent.implicitHeight - Tokens.padding.larger
preferredRendererType: Shape.CurveRenderer
width: height
@@ -117,8 +118,8 @@ Switch {
fillColor: "transparent"
startX: icon.start1.x
startY: icon.start1.y
strokeColor: root.checked && root.enabled ? DynamicColors.palette.m3primary : DynamicColors.palette.m3surfaceContainerHighest
strokeWidth: Appearance.font.size.larger * 0.15
strokeColor: root.checked && root.enabled ? Colors.palette.m3primary : Colors.palette.m3surfaceContainerHighest
strokeWidth: Tokens.font.size.larger * 0.15
Behavior on strokeColor {
CAnim {
@@ -151,7 +152,7 @@ Switch {
}
component PropAnim: PropertyAnimation {
duration: Appearance.anim.durations.expressiveFastSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveFastSpatial
duration: Tokens.anim.durations.expressiveFastSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveFastSpatial
}
}
+6 -7
View File
@@ -1,7 +1,8 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Config
import ZShell.Config
import qs.Services
Text {
id: root
@@ -12,10 +13,10 @@ Text {
property string animateProp: "scale"
property real animateTo: 1
color: DynamicColors.palette.m3onSurface
font.family: Appearance.font.family.sans
font.pointSize: Appearance.font.size.normal
linkColor: DynamicColors.palette.m3onPrimaryFixedVariant
color: Colors.palette.m3onSurface
font.family: Config.appearance.font.family.sans
font.pointSize: Tokens.font.size.normal
linkColor: Colors.palette.m3onPrimaryFixedVariant
renderType: Text.NativeRendering
textFormat: Text.PlainText
@@ -28,7 +29,6 @@ Text {
SequentialAnimation {
Anim {
easing.bezierCurve: MaterialEasing.standardAccel
to: root.animateFrom
}
@@ -36,7 +36,6 @@ Text {
}
Anim {
easing.bezierCurve: MaterialEasing.standardDecel
to: root.animateTo
}
}
+8 -7
View File
@@ -2,17 +2,18 @@ pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Controls
import qs.Config
import ZShell.Config
import qs.Services
TextField {
id: root
background: null
color: DynamicColors.palette.m3onSurface
color: Colors.palette.m3onSurface
cursorVisible: !readOnly
font.family: Appearance.font.family.sans
font.pointSize: Appearance.font.size.smaller
placeholderTextColor: DynamicColors.palette.m3outline
font.pointSize: Tokens.font.size.smaller
placeholderTextColor: Colors.palette.m3outline
renderType: echoMode === TextField.Password ? TextField.QtRendering : TextField.NativeRendering
Behavior on color {
@@ -24,13 +25,13 @@ TextField {
property bool disableBlink
color: DynamicColors.palette.m3primary
color: Colors.palette.m3primary
implicitWidth: 2
radius: Appearance.rounding.normal
radius: Tokens.rounding.normal
Behavior on opacity {
Anim {
duration: Appearance.anim.durations.small
duration: Tokens.anim.durations.small
}
}
+4 -3
View File
@@ -1,11 +1,12 @@
import QtQuick
import QtQuick.Controls
import qs.Config
import ZShell.Config
import qs.Services
TextInput {
renderType: Text.NativeRendering
selectedTextColor: DynamicColors.palette.m3onSecondaryContainer
selectionColor: DynamicColors.tPalette.colSecondaryContainer
selectedTextColor: Colors.palette.m3onSecondaryContainer
selectionColor: Colors.tPalette.colSecondaryContainer
font {
family: Appearance?.font.family.sans ?? "sans-serif"
+5 -4
View File
@@ -1,6 +1,7 @@
import QtQuick
import qs.Components
import qs.Config
import ZShell.Config
import qs.Services
Item {
id: root
@@ -18,11 +19,11 @@ Item {
id: backgroundRectangle
clip: true
color: DynamicColors.tPalette.m3inverseSurface ?? "#3C4043"
color: Colors.tPalette.m3inverseSurface ?? "#3C4043"
implicitHeight: shown ? (tooltipTextObject.implicitHeight + 2 * root.verticalPadding) : 0
implicitWidth: shown ? (tooltipTextObject.implicitWidth + 2 * root.horizontalPadding) : 0
opacity: shown ? 1 : 0
radius: Appearance.rounding.smallest
radius: Tokens.rounding.smallest
Behavior on implicitHeight {
Anim {
@@ -46,7 +47,7 @@ Item {
id: tooltipTextObject
anchors.centerIn: parent
color: DynamicColors.palette.m3inverseOnSurface ?? "#FFFFFF"
color: Colors.palette.m3inverseOnSurface ?? "#FFFFFF"
text: root.text
wrapMode: Text.Wrap
}
+3 -2
View File
@@ -1,13 +1,14 @@
import QtQuick
import QtQuick.Effects
import qs.Config
import ZShell.Config
import qs.Services
RectangularShadow {
property real dp: [0, 1, 3, 6, 8, 12][level]
property int level
blur: (dp * 5) ** 0.7
color: Qt.alpha(DynamicColors.palette.m3shadow, 0.7)
color: Qt.alpha(Colors.palette.m3shadow, 0.7)
offset.y: dp / 2
spread: -dp * 0.3 + (dp * 0.1) ** 2
+7 -7
View File
@@ -1,27 +1,27 @@
import qs.Config
import ZShell.Config
import QtQuick
import qs.Services
CustomRect {
required property int extra
anchors.margins: 8
anchors.right: parent.right
color: DynamicColors.palette.m3tertiary
color: Colors.palette.m3tertiary
implicitHeight: count.implicitHeight + 4 * 2
implicitWidth: count.implicitWidth + 8 * 2
opacity: extra > 0 ? 1 : 0
radius: Appearance.rounding.smallest
radius: Tokens.rounding.smallest
scale: extra > 0 ? 1 : 0.5
Behavior on opacity {
Anim {
duration: MaterialEasing.expressiveEffectsTime
type: Anim.FastEffects
}
}
Behavior on scale {
Anim {
duration: MaterialEasing.expressiveEffectsTime
easing.bezierCurve: MaterialEasing.expressiveEffects
type: Anim.FastEffects
}
}
@@ -38,7 +38,7 @@ CustomRect {
anchors.centerIn: parent
animate: parent.opacity > 0
color: DynamicColors.palette.m3onTertiary
color: Colors.palette.m3onTertiary
text: qsTr("+%1").arg(parent.extra)
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
import QtQuick
import qs.Config
import ZShell.Config
BaseStyledSlider {
id: root
+1 -1
View File
@@ -1,5 +1,5 @@
import QtQuick
import qs.Config
import ZShell.Config
BaseStyledSlider {
id: root
+2 -2
View File
@@ -1,6 +1,6 @@
import QtQuick
import QtQuick.Controls
import qs.Config
import ZShell.Config
IconButton {
id: root
@@ -13,7 +13,7 @@ IconButton {
Behavior on opacity {
Anim {
duration: Appearance.anim.durations.small
duration: Tokens.anim.durations.small
}
}
Behavior on scale {
+11 -10
View File
@@ -1,5 +1,6 @@
import qs.Config
import ZShell.Config
import QtQuick
import qs.Services
CustomRect {
id: root
@@ -10,23 +11,23 @@ CustomRect {
Text
}
property color activeColour: type === IconButton.Filled ? DynamicColors.palette.m3primary : DynamicColors.palette.m3secondary
property color activeOnColour: type === IconButton.Filled ? DynamicColors.palette.m3onPrimary : type === IconButton.Tonal ? DynamicColors.palette.m3onSecondary : DynamicColors.palette.m3primary
property color activeColour: type === IconButton.Filled ? Colors.palette.m3primary : Colors.palette.m3secondary
property color activeOnColour: type === IconButton.Filled ? Colors.palette.m3onPrimary : type === IconButton.Tonal ? Colors.palette.m3onSecondary : Colors.palette.m3primary
property bool checked
property bool disabled
property color disabledColour: Qt.alpha(DynamicColors.palette.m3onSurface, 0.1)
property color disabledOnColour: Qt.alpha(DynamicColors.palette.m3onSurface, 0.38)
property color disabledColour: Qt.alpha(Colors.palette.m3onSurface, 0.1)
property color disabledOnColour: Qt.alpha(Colors.palette.m3onSurface, 0.38)
property alias font: label.font
property alias icon: label.text
property color inactiveColour: {
if (!toggle && type === IconButton.Filled)
return DynamicColors.palette.m3primary;
return type === IconButton.Filled ? DynamicColors.tPalette.m3surfaceContainer : DynamicColors.palette.m3secondaryContainer;
return Colors.palette.m3primary;
return type === IconButton.Filled ? Colors.tPalette.m3surfaceContainer : Colors.palette.m3secondaryContainer;
}
property color inactiveOnColour: {
if (!toggle && type === IconButton.Filled)
return DynamicColors.palette.m3onPrimary;
return type === IconButton.Tonal ? DynamicColors.palette.m3onSecondaryContainer : DynamicColors.palette.m3onSurfaceVariant;
return Colors.palette.m3onPrimary;
return type === IconButton.Tonal ? Colors.palette.m3onSecondaryContainer : Colors.palette.m3onSurfaceVariant;
}
property bool internalChecked
property alias label: label
@@ -41,7 +42,7 @@ CustomRect {
color: type === IconButton.Text ? "transparent" : disabled ? disabledColour : internalChecked ? activeColour : inactiveColour
implicitHeight: label.implicitHeight + padding * 2
implicitWidth: implicitHeight
radius: internalChecked ? 6 : (implicitHeight / 2 * Math.min(1, 1)) * Appearance.rounding.scale
radius: internalChecked ? 6 : (implicitHeight / 2 * Math.min(1, 1)) * Tokens.rounding.scale
Behavior on radius {
Anim {
+3 -2
View File
@@ -1,12 +1,13 @@
import QtQuick
import qs.Config
import ZShell.Config
import qs.Services
Item {
id: root
property alias anim: marqueeAnim
property bool animate: false
property color color: DynamicColors.palette.m3onSurface
property color color: Colors.palette.m3onSurface
property int fadeStrengthAnimMs: 180
property real fadeStrengthIdle: 0.0
property real fadeStrengthMoving: 1.0
+4 -3
View File
@@ -1,11 +1,12 @@
import qs.Config
import ZShell.Config
import qs.Services
CustomText {
property real fill
property int grade: DynamicColors.light ? 0 : -25
property int grade: Colors.light ? 0 : -25
font.family: "Material Symbols Rounded"
font.pointSize: Appearance.font.size.larger
font.pointSize: Tokens.font.size.larger
font.variableAxes: ({
FILL: fill.toFixed(1),
GRAD: grade,
+16 -15
View File
@@ -3,8 +3,9 @@ pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Layouts
import Quickshell
import qs.Config
import ZShell.Config
import qs.Drawers
import qs.Services
MouseArea {
id: root
@@ -60,7 +61,7 @@ MouseArea {
implicitHeight: column.implicitHeight + column.anchors.margins * 2
implicitWidth: Math.max(200, column.implicitWidth + column.anchors.margins * 2)
level: 2
radius: Appearance.rounding.medium
radius: Tokens.rounding.medium
x: {
watcher.transform;
const item = root.attachTo;
@@ -90,15 +91,15 @@ MouseArea {
CustomRect {
anchors.fill: parent
color: DynamicColors.palette.m3surfaceContainerLow
color: Colors.palette.m3surfaceContainerLow
radius: parent.radius
ColumnLayout {
id: column
anchors.fill: parent
anchors.margins: Appearance.padding.extraSmall
spacing: Appearance.spacing.extraSmall
anchors.margins: Tokens.padding.extraSmall
spacing: Tokens.spacing.extraSmall
Repeater {
id: repeater
@@ -113,10 +114,10 @@ MouseArea {
required property MenuItem modelData
Layout.fillWidth: true
color: Qt.alpha(DynamicColors.palette.m3tertiaryContainer, active ? 1 : 0)
implicitHeight: menuOptionRow.implicitHeight + Appearance.padding.larger * 2
implicitWidth: menuOptionRow.implicitWidth + Appearance.padding.larger * 2
radius: Appearance.rounding.small
color: Qt.alpha(Colors.palette.m3tertiaryContainer, active ? 1 : 0)
implicitHeight: menuOptionRow.implicitHeight + Tokens.padding.larger * 2
implicitWidth: menuOptionRow.implicitWidth + Tokens.padding.larger * 2
radius: Tokens.rounding.small
Behavior on radius {
Anim {
@@ -124,7 +125,7 @@ MouseArea {
}
StateLayer {
color: item.active ? DynamicColors.palette.m3onTertiaryContainer : DynamicColors.palette.m3onSurface
color: item.active ? Colors.palette.m3onTertiaryContainer : Colors.palette.m3onSurface
disabled: !root.expanded
onClicked: {
@@ -139,19 +140,19 @@ MouseArea {
id: menuOptionRow
anchors.fill: parent
anchors.margins: Appearance.padding.larger
spacing: Appearance.spacing.small
anchors.margins: Tokens.padding.larger
spacing: Tokens.spacing.small
MaterialIcon {
Layout.alignment: Qt.AlignVCenter
color: item.active ? DynamicColors.palette.m3onTertiaryContainer : DynamicColors.palette.m3onSurfaceVariant
color: item.active ? Colors.palette.m3onTertiaryContainer : Colors.palette.m3onSurfaceVariant
text: item.modelData.icon
}
CustomText {
Layout.alignment: Qt.AlignVCenter
Layout.fillWidth: true
color: item.active ? DynamicColors.palette.m3onTertiaryContainer : DynamicColors.palette.m3onSurface
color: item.active ? Colors.palette.m3onTertiaryContainer : Colors.palette.m3onSurface
text: item.modelData.text
}
@@ -162,7 +163,7 @@ MouseArea {
visible: active
sourceComponent: MaterialIcon {
color: item.active ? DynamicColors.palette.m3onTertiaryContainer : DynamicColors.palette.m3onSurfaceVariant
color: item.active ? Colors.palette.m3onTertiaryContainer : Colors.palette.m3onSurfaceVariant
text: item.modelData.trailingIcon
}
}
+7 -6
View File
@@ -1,6 +1,7 @@
import QtQuick
import QtQuick.Effects
import qs.Config
import ZShell.Config
import qs.Services
Elevation {
id: root
@@ -8,10 +9,10 @@ Elevation {
required property int currentIndex
property bool expanded
required property int from
property color insideTextColor: DynamicColors.palette.m3onPrimary
property color insideTextColor: Colors.palette.m3onPrimary
property int itemHeight
property int listHeight: 200
property color outsideTextColor: DynamicColors.palette.m3onSurfaceVariant
property color outsideTextColor: Colors.palette.m3onSurfaceVariant
readonly property var spinnerModel: root.range(root.from, root.to)
required property int to
property Item triggerItem
@@ -59,7 +60,7 @@ Elevation {
CustomText {
anchors.centerIn: parent
color: wrapper.delegateTextColor
font.pointSize: Appearance.font.size.large
font.pointSize: Tokens.font.size.large
text: wrapper.modelData
}
}
@@ -67,7 +68,7 @@ Elevation {
CustomClippingRect {
anchors.fill: parent
color: DynamicColors.palette.m3surfaceContainer
color: Colors.palette.m3surfaceContainer
radius: parent.radius
z: root.z
@@ -103,7 +104,7 @@ Elevation {
id: selectionRect
anchors.verticalCenter: parent.verticalCenter
color: DynamicColors.palette.m3primary
color: Colors.palette.m3primary
height: root.itemHeight
radius: root.itemHeight / 2
width: parent.width
+7 -6
View File
@@ -1,6 +1,7 @@
import QtQuick
import QtQuick.Layouts
import qs.Config
import ZShell.Config
import qs.Services
CustomRect {
id: root
@@ -13,9 +14,9 @@ CustomRect {
required property real value
Layout.fillWidth: true
color: DynamicColors.layer(DynamicColors.palette.m3surfaceContainer, 2)
implicitHeight: row.implicitHeight + Appearance.padding.large * 2
radius: Appearance.rounding.normal
color: Colors.layer(Colors.palette.m3surfaceContainer, 2)
implicitHeight: row.implicitHeight + Tokens.padding.large * 2
radius: Tokens.rounding.normal
Behavior on implicitHeight {
Anim {
@@ -26,10 +27,10 @@ CustomRect {
id: row
anchors.left: parent.left
anchors.margins: Appearance.padding.large
anchors.margins: Tokens.padding.large
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
spacing: Appearance.spacing.normal
spacing: Tokens.spacing.normal
CustomText {
Layout.fillWidth: true
+5 -4
View File
@@ -3,7 +3,8 @@ import QtQuick.Shapes
import ZShell
import ZShell.Components
import qs.Helpers
import qs.Config
import ZShell.Config
import qs.Services
MouseArea {
id: root
@@ -80,8 +81,8 @@ MouseArea {
id: rippleAnim
alwaysRunToEnd: true
duration: Appearance.anim.durations.expressiveSlowEffects * 2
easing.bezierCurve: Appearance.anim.curves.standard
duration: Tokens.anim.durations.expressiveSlowEffects * 2
easing.bezierCurve: Tokens.anim.curves.standard
property: "circleRadius"
target: root
to: root.endRadius
@@ -102,7 +103,7 @@ MouseArea {
anchors.fill: parent
bottomLeftRadius: root.parent?.bottomLeftRadius ?? radius ?? 0
bottomRightRadius: root.parent?.bottomRightRadius ?? radius ?? 0
color: DynamicColors.palette.m3onSurface
color: Colors.palette.m3onSurface
opacity: root.stateOpacity
// Pick up radius from parent if it has one (parent can be anything with radius props)
// qmllint disable missing-property
+36 -35
View File
@@ -2,7 +2,8 @@ import ZShell
import QtQuick
import QtQuick.Layouts
import qs.Components
import qs.Config
import ZShell.Config
import qs.Services
CustomRect {
id: root
@@ -12,27 +13,27 @@ CustomRect {
anchors.left: parent.left
anchors.right: parent.right
border.color: {
let colour = DynamicColors.palette.m3outlineVariant;
let colour = Colors.palette.m3outlineVariant;
if (root.modelData.type === Toast.Success)
colour = DynamicColors.palette.m3success;
colour = Colors.palette.m3success;
if (root.modelData.type === Toast.Warning)
colour = DynamicColors.palette.m3secondaryContainer;
colour = Colors.palette.m3secondaryContainer;
if (root.modelData.type === Toast.Error)
colour = DynamicColors.palette.m3error;
colour = Colors.palette.m3error;
return Qt.alpha(colour, 0.3);
}
border.width: 1
color: {
if (root.modelData.type === Toast.Success)
return DynamicColors.palette.m3successContainer;
return Colors.palette.m3successContainer;
if (root.modelData.type === Toast.Warning)
return DynamicColors.palette.m3secondary;
return Colors.palette.m3secondary;
if (root.modelData.type === Toast.Error)
return DynamicColors.palette.m3errorContainer;
return DynamicColors.palette.m3surface;
return Colors.palette.m3errorContainer;
return Colors.palette.m3surface;
}
implicitHeight: layout.implicitHeight + Appearance.padding.smaller * 2
radius: Appearance.rounding.normal
implicitHeight: layout.implicitHeight + Tokens.padding.smaller * 2
radius: Tokens.rounding.normal
Behavior on border.color {
CAnim {
@@ -51,24 +52,24 @@ CustomRect {
id: layout
anchors.fill: parent
anchors.leftMargin: Appearance.padding.normal
anchors.margins: Appearance.padding.smaller
anchors.rightMargin: Appearance.padding.normal
spacing: Appearance.spacing.normal
anchors.leftMargin: Tokens.padding.normal
anchors.margins: Tokens.padding.smaller
anchors.rightMargin: Tokens.padding.normal
spacing: Tokens.spacing.normal
CustomRect {
color: {
if (root.modelData.type === Toast.Success)
return DynamicColors.palette.m3success;
return Colors.palette.m3success;
if (root.modelData.type === Toast.Warning)
return DynamicColors.palette.m3secondaryContainer;
return Colors.palette.m3secondaryContainer;
if (root.modelData.type === Toast.Error)
return DynamicColors.palette.m3error;
return DynamicColors.palette.m3surfaceContainerHigh;
return Colors.palette.m3error;
return Colors.palette.m3surfaceContainerHigh;
}
implicitHeight: icon.implicitHeight + Appearance.padding.smaller * 2
implicitHeight: icon.implicitHeight + Tokens.padding.smaller * 2
implicitWidth: implicitHeight
radius: Appearance.rounding.normal
radius: Tokens.rounding.normal
MaterialIcon {
id: icon
@@ -76,14 +77,14 @@ CustomRect {
anchors.centerIn: parent
color: {
if (root.modelData.type === Toast.Success)
return DynamicColors.palette.m3onSuccess;
return Colors.palette.m3onSuccess;
if (root.modelData.type === Toast.Warning)
return DynamicColors.palette.m3onSecondaryContainer;
return Colors.palette.m3onSecondaryContainer;
if (root.modelData.type === Toast.Error)
return DynamicColors.palette.m3onError;
return DynamicColors.palette.m3onSurfaceVariant;
return Colors.palette.m3onError;
return Colors.palette.m3onSurfaceVariant;
}
font.pointSize: Math.round(Appearance.font.size.large * 1.2)
font.pointSize: Math.round(Tokens.font.size.large * 1.2)
text: root.modelData.icon
}
}
@@ -98,15 +99,15 @@ CustomRect {
Layout.fillWidth: true
color: {
if (root.modelData.type === Toast.Success)
return DynamicColors.palette.m3onSuccessContainer;
return Colors.palette.m3onSuccessContainer;
if (root.modelData.type === Toast.Warning)
return DynamicColors.palette.m3onSecondary;
return Colors.palette.m3onSecondary;
if (root.modelData.type === Toast.Error)
return DynamicColors.palette.m3onErrorContainer;
return DynamicColors.palette.m3onSurface;
return Colors.palette.m3onErrorContainer;
return Colors.palette.m3onSurface;
}
elide: Text.ElideRight
font.pointSize: Appearance.font.size.normal
font.pointSize: Tokens.font.size.normal
text: root.modelData.title
}
@@ -114,12 +115,12 @@ CustomRect {
Layout.fillWidth: true
color: {
if (root.modelData.type === Toast.Success)
return DynamicColors.palette.m3onSuccessContainer;
return Colors.palette.m3onSuccessContainer;
if (root.modelData.type === Toast.Warning)
return DynamicColors.palette.m3onSecondary;
return Colors.palette.m3onSecondary;
if (root.modelData.type === Toast.Error)
return DynamicColors.palette.m3onErrorContainer;
return DynamicColors.palette.m3onSurface;
return Colors.palette.m3onErrorContainer;
return Colors.palette.m3onSurface;
}
elide: Text.ElideRight
opacity: 0.8
+7 -7
View File
@@ -4,13 +4,13 @@ import ZShell
import Quickshell
import QtQuick
import qs.Components
import qs.Config
import ZShell.Config
Item {
id: root
property bool flag
readonly property int spacing: Appearance.spacing.small
readonly property int spacing: Tokens.spacing.small
implicitHeight: {
let h = -spacing;
@@ -21,7 +21,7 @@ Item {
}
return h;
}
implicitWidth: Config.utilities.sizes.toastWidth - Appearance.padding.normal * 2
implicitWidth: Config.utilities.sizes.toastWidth - Tokens.padding.normal * 2
Repeater {
id: repeater
@@ -81,8 +81,8 @@ Item {
Behavior on anchors.bottomMargin {
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
}
}
Behavior on opacity {
@@ -104,8 +104,8 @@ Item {
Anim {
id: initAnim
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
from: 0
properties: "opacity,scale"
target: toast