1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-30 08:22:51 -05:00

standardize some opacity colors

This commit is contained in:
bbedward
2025-07-25 18:19:22 -04:00
parent 1157b0336f
commit d28df49f18
37 changed files with 205 additions and 148 deletions

View File

@@ -358,6 +358,50 @@ Singleton {
property color warning: "#FF9800" property color warning: "#FF9800"
property color info: "#2196F3" property color info: "#2196F3"
property color error: "#F2B8B5" property color error: "#F2B8B5"
// Common alpha color variants for consistency
// Primary colors with alpha
property color primaryHover: Qt.rgba(primary.r, primary.g, primary.b, 0.12)
property color primaryHoverLight: Qt.rgba(primary.r, primary.g, primary.b, 0.08)
property color primaryPressed: Qt.rgba(primary.r, primary.g, primary.b, 0.16)
property color primarySelected: Qt.rgba(primary.r, primary.g, primary.b, 0.3)
property color primaryBackground: Qt.rgba(primary.r, primary.g, primary.b, 0.04)
// Secondary colors with alpha
property color secondaryHover: Qt.rgba(secondary.r, secondary.g, secondary.b, 0.08)
// Surface colors with alpha
property color surfaceHover: Qt.rgba(surfaceVariant.r, surfaceVariant.g, surfaceVariant.b, 0.08)
property color surfacePressed: Qt.rgba(surfaceVariant.r, surfaceVariant.g, surfaceVariant.b, 0.12)
property color surfaceSelected: Qt.rgba(surfaceVariant.r, surfaceVariant.g, surfaceVariant.b, 0.15)
property color surfaceLight: Qt.rgba(surfaceVariant.r, surfaceVariant.g, surfaceVariant.b, 0.1)
property color surfaceVariantAlpha: Qt.rgba(surfaceVariant.r, surfaceVariant.g, surfaceVariant.b, 0.2)
property color surfaceTextHover: Qt.rgba(surfaceText.r, surfaceText.g, surfaceText.b, 0.08)
property color surfaceTextPressed: Qt.rgba(surfaceText.r, surfaceText.g, surfaceText.b, 0.12)
property color surfaceTextAlpha: Qt.rgba(surfaceText.r, surfaceText.g, surfaceText.b, 0.3)
property color surfaceTextLight: Qt.rgba(surfaceText.r, surfaceText.g, surfaceText.b, 0.06)
property color surfaceTextMedium: Qt.rgba(surfaceText.r, surfaceText.g, surfaceText.b, 0.7)
// Outline colors with alpha
property color outlineLight: Qt.rgba(outline.r, outline.g, outline.b, 0.05)
property color outlineMedium: Qt.rgba(outline.r, outline.g, outline.b, 0.08)
property color outlineStrong: Qt.rgba(outline.r, outline.g, outline.b, 0.12)
property color outlineSelected: Qt.rgba(outline.r, outline.g, outline.b, 0.2)
property color outlineHeavy: Qt.rgba(outline.r, outline.g, outline.b, 0.3)
property color outlineButton: Qt.rgba(outline.r, outline.g, outline.b, 0.5)
// Error colors with alpha
property color errorHover: Qt.rgba(error.r, error.g, error.b, 0.12)
property color errorPressed: Qt.rgba(error.r, error.g, error.b, 0.9)
// Warning colors with alpha
property color warningHover: Qt.rgba(warning.r, warning.g, warning.b, 0.12)
// Shadow colors
property color shadowLight: Qt.rgba(0, 0, 0, 0.05)
property color shadowMedium: Qt.rgba(0, 0, 0, 0.08)
property color shadowDark: Qt.rgba(0, 0, 0, 0.1)
property color shadowStrong: Qt.rgba(0, 0, 0, 0.3)
property int shortDuration: 150 property int shortDuration: 150
property int mediumDuration: 300 property int mediumDuration: 300
property int longDuration: 500 property int longDuration: 500

View File

@@ -121,7 +121,7 @@ DankModal {
keyboardFocus: "ondemand" keyboardFocus: "ondemand"
backgroundColor: Theme.popupBackground() backgroundColor: Theme.popupBackground()
cornerRadius: Theme.cornerRadiusLarge cornerRadius: Theme.cornerRadiusLarge
borderColor: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) borderColor: Theme.outlineMedium
borderWidth: 1 borderWidth: 1
enableShadow: true enableShadow: true
onBackgroundClicked: { onBackgroundClicked: {
@@ -175,7 +175,7 @@ DankModal {
width: 100 width: 100
height: 40 height: 40
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: cancelClearButton.containsMouse ? Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.12) : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.3) color: cancelClearButton.containsMouse ? Theme.surfaceTextPressed : Theme.surfaceVariantAlpha
StyledText { StyledText {
text: "Cancel" text: "Cancel"
@@ -200,7 +200,7 @@ DankModal {
width: 100 width: 100
height: 40 height: 40
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: confirmClearButton.containsMouse ? Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.9) : Theme.error color: confirmClearButton.containsMouse ? Theme.errorPressed : Theme.error
StyledText { StyledText {
text: "Clear All" text: "Clear All"
@@ -375,7 +375,7 @@ DankModal {
iconName: "delete_sweep" iconName: "delete_sweep"
iconSize: Theme.iconSize iconSize: Theme.iconSize
iconColor: Theme.error iconColor: Theme.error
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) hoverColor: Theme.errorHover
onClicked: { onClicked: {
showClearConfirmation = true; showClearConfirmation = true;
} }
@@ -385,7 +385,7 @@ DankModal {
iconName: "close" iconName: "close"
iconSize: Theme.iconSize - 4 iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText iconColor: Theme.surfaceText
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) hoverColor: Theme.errorHover
onClicked: hide() onClicked: hide()
} }
} }
@@ -420,8 +420,8 @@ DankModal {
width: parent.width width: parent.width
height: parent.height - 110 height: parent.height - 110
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.1) color: Theme.surfaceLight
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.05) border.color: Theme.outlineLight
border.width: 1 border.width: 1
clip: true clip: true
@@ -455,8 +455,8 @@ DankModal {
width: clipboardListView.width width: clipboardListView.width
height: Math.max(60, contentText.contentHeight + Theme.spacingL) height: Math.max(60, contentText.contentHeight + Theme.spacingL)
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: mouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.04) color: mouseArea.containsMouse ? Theme.primaryHover : Theme.primaryBackground
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12) border.color: Theme.outlineStrong
border.width: 1 border.width: 1
Row { Row {
@@ -470,7 +470,7 @@ DankModal {
width: 24 width: 24
height: 24 height: 24
radius: 12 radius: 12
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.2) color: Theme.primarySelected
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
StyledText { StyledText {
@@ -553,7 +553,7 @@ DankModal {
iconName: "close" iconName: "close"
iconSize: Theme.iconSize - 6 iconSize: Theme.iconSize - 6
iconColor: Theme.error iconColor: Theme.error
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) hoverColor: Theme.errorHover
onClicked: { onClicked: {
console.log("Delete clicked for entry:", model.entry); console.log("Delete clicked for entry:", model.entry);
deleteEntry(model.entry); deleteEntry(model.entry);

View File

@@ -34,7 +34,7 @@ PanelWindow {
property var animationEasing: Theme.emphasizedEasing property var animationEasing: Theme.emphasizedEasing
// Styling // Styling
property color backgroundColor: Theme.surfaceContainer property color backgroundColor: Theme.surfaceContainer
property color borderColor: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) property color borderColor: Theme.outlineMedium
property real borderWidth: 1 property real borderWidth: 1
property real cornerRadius: Theme.cornerRadiusLarge property real cornerRadius: Theme.cornerRadiusLarge
property bool enableShadow: false property bool enableShadow: false
@@ -201,7 +201,7 @@ PanelWindow {
shadowHorizontalOffset: 0 shadowHorizontalOffset: 0
shadowVerticalOffset: 8 shadowVerticalOffset: 8
shadowBlur: 1 shadowBlur: 1
shadowColor: Qt.rgba(0, 0, 0, 0.3) shadowColor: Theme.shadowStrong
shadowOpacity: 0.3 shadowOpacity: 0.3
} }

View File

@@ -148,7 +148,7 @@ DankModal {
iconName: "close" iconName: "close"
iconSize: Theme.iconSize - 4 iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText iconColor: Theme.surfaceText
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) hoverColor: Theme.errorHover
onClicked: fileBrowserModal.visible = false onClicked: fileBrowserModal.visible = false
anchors.right: parent.right anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter

View File

@@ -71,7 +71,7 @@ DankModal {
StyledText { StyledText {
text: "Details for \"" + networkSSID + "\"" text: "Details for \"" + networkSSID + "\""
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7) color: Theme.surfaceTextMedium
width: parent.width width: parent.width
elide: Text.ElideRight elide: Text.ElideRight
} }
@@ -82,7 +82,7 @@ DankModal {
iconName: "close" iconName: "close"
iconSize: Theme.iconSize - 4 iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText iconColor: Theme.surfaceText
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) hoverColor: Theme.errorHover
onClicked: { onClicked: {
root.hideDialog(); root.hideDialog();
} }
@@ -108,8 +108,8 @@ DankModal {
width: parent.width width: parent.width
height: Math.max(parent.parent.height, detailsText.contentHeight + Theme.spacingM * 2) height: Math.max(parent.parent.height, detailsText.contentHeight + Theme.spacingM * 2)
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.08) color: Theme.surfaceHover
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12) border.color: Theme.outlineStrong
border.width: 1 border.width: 1
StyledText { StyledText {

View File

@@ -108,7 +108,7 @@ DankModal {
width: 120 width: 120
height: 40 height: 40
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: cancelButton.containsMouse ? Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.12) : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.3) color: cancelButton.containsMouse ? Theme.surfaceTextPressed : Theme.surfaceVariantAlpha
StyledText { StyledText {
text: "Cancel" text: "Cancel"

View File

@@ -98,7 +98,7 @@ DankModal {
iconName: "close" iconName: "close"
iconSize: Theme.iconSize - 4 iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText iconColor: Theme.surfaceText
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) hoverColor: Theme.errorHover
onClicked: processListModal.hide() onClicked: processListModal.hide()
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
} }
@@ -107,9 +107,9 @@ DankModal {
Rectangle { Rectangle {
Layout.fillWidth: true Layout.fillWidth: true
height: 52 height: 52
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.15) color: Theme.surfaceSelected
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.06) border.color: Theme.outlineLight
border.width: 1 border.width: 1
Row { Row {
@@ -124,7 +124,7 @@ DankModal {
width: (parent.width - (tabNames.length - 1) * 2) / tabNames.length width: (parent.width - (tabNames.length - 1) * 2) / tabNames.length
height: 44 height: 44
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: currentTab === index ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : (tabMouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : "transparent") color: currentTab === index ? Theme.primaryPressed : (tabMouseArea.containsMouse ? Theme.primaryHoverLight : "transparent")
border.color: currentTab === index ? Theme.primary : "transparent" border.color: currentTab === index ? Theme.primary : "transparent"
border.width: currentTab === index ? 1 : 0 border.width: currentTab === index ? 1 : 0
@@ -212,8 +212,8 @@ DankModal {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.1) color: Theme.surfaceLight
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.05) border.color: Theme.outlineLight
border.width: 1 border.width: 1
Loader { Loader {

View File

@@ -71,7 +71,7 @@ DankModal {
iconName: "close" iconName: "close"
iconSize: Theme.iconSize - 4 iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText iconColor: Theme.surfaceText
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) hoverColor: Theme.errorHover
onClicked: settingsModal.settingsVisible = false onClicked: settingsModal.settingsVisible = false
} }

View File

@@ -41,7 +41,7 @@ DankModal {
keyboardFocus: "ondemand" keyboardFocus: "ondemand"
backgroundColor: Theme.popupBackground() backgroundColor: Theme.popupBackground()
cornerRadius: Theme.cornerRadiusXLarge cornerRadius: Theme.cornerRadiusXLarge
borderColor: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) borderColor: Theme.outlineMedium
borderWidth: 1 borderWidth: 1
enableShadow: true enableShadow: true
onVisibleChanged: { onVisibleChanged: {
@@ -132,8 +132,8 @@ DankModal {
width: parent.width width: parent.width
height: categorySelector.height + Theme.spacingM * 2 height: categorySelector.height + Theme.spacingM * 2
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.2) color: Theme.surfaceVariantAlpha
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) border.color: Theme.outlineMedium
border.width: 1 border.width: 1
visible: appLauncher.categories.length > 1 || appLauncher.model.count > 0 visible: appLauncher.categories.length > 1 || appLauncher.model.count > 0
@@ -162,7 +162,7 @@ DankModal {
height: 56 height: 56
cornerRadius: Theme.cornerRadiusLarge cornerRadius: Theme.cornerRadiusLarge
backgroundColor: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, Theme.getContentBackgroundAlpha() * 0.7) backgroundColor: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, Theme.getContentBackgroundAlpha() * 0.7)
normalBorderColor: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) normalBorderColor: Theme.outlineMedium
focusedBorderColor: Theme.primary focusedBorderColor: Theme.primary
leftIconName: "search" leftIconName: "search"
leftIconSize: Theme.iconSize leftIconSize: Theme.iconSize
@@ -220,8 +220,8 @@ DankModal {
width: 36 width: 36
height: 36 height: 36
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: appLauncher.viewMode === "list" ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : listViewArea.containsMouse ? Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.08) : "transparent" color: appLauncher.viewMode === "list" ? Theme.primaryHover : listViewArea.containsMouse ? Theme.surfaceHover : "transparent"
border.color: appLauncher.viewMode === "list" ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.3) : "transparent" border.color: appLauncher.viewMode === "list" ? Theme.primarySelected : "transparent"
border.width: 1 border.width: 1
DankIcon { DankIcon {
@@ -249,8 +249,8 @@ DankModal {
width: 36 width: 36
height: 36 height: 36
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: appLauncher.viewMode === "grid" ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : gridViewArea.containsMouse ? Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.08) : "transparent" color: appLauncher.viewMode === "grid" ? Theme.primaryHover : gridViewArea.containsMouse ? Theme.surfaceHover : "transparent"
border.color: appLauncher.viewMode === "grid" ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.3) : "transparent" border.color: appLauncher.viewMode === "grid" ? Theme.primarySelected : "transparent"
border.width: 1 border.width: 1
DankIcon { DankIcon {
@@ -283,8 +283,8 @@ DankModal {
width: parent.width width: parent.width
height: parent.height - y height: parent.height - y
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.1) color: Theme.surfaceLight
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.05) border.color: Theme.outlineLight
border.width: 1 border.width: 1
DankListView { DankListView {

View File

@@ -66,7 +66,7 @@ DankModal {
StyledText { StyledText {
text: "Enter password for \"" + wifiPasswordSSID + "\"" text: "Enter password for \"" + wifiPasswordSSID + "\""
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7) color: Theme.surfaceTextMedium
width: parent.width width: parent.width
elide: Text.ElideRight elide: Text.ElideRight
} }
@@ -77,7 +77,7 @@ DankModal {
iconName: "close" iconName: "close"
iconSize: Theme.iconSize - 4 iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText iconColor: Theme.surfaceText
hoverColor: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) hoverColor: Theme.errorHover
onClicked: { onClicked: {
wifiPasswordModalVisible = false; wifiPasswordModalVisible = false;
wifiPasswordInput = ""; wifiPasswordInput = "";
@@ -91,8 +91,8 @@ DankModal {
width: parent.width width: parent.width
height: 50 height: 50
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.08) color: Theme.surfaceHover
border.color: passwordInput.activeFocus ? Theme.primary : Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12) border.color: passwordInput.activeFocus ? Theme.primary : Theme.outlineStrong
border.width: passwordInput.activeFocus ? 2 : 1 border.width: passwordInput.activeFocus ? 2 : 1
DankTextField { DankTextField {
@@ -146,7 +146,7 @@ DankModal {
height: 20 height: 20
radius: 4 radius: 4
color: checked ? Theme.primary : "transparent" color: checked ? Theme.primary : "transparent"
border.color: checked ? Theme.primary : Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.5) border.color: checked ? Theme.primary : Theme.outlineButton
border.width: 2 border.width: 2
DankIcon { DankIcon {
@@ -191,8 +191,8 @@ DankModal {
width: Math.max(70, cancelText.contentWidth + Theme.spacingM * 2) width: Math.max(70, cancelText.contentWidth + Theme.spacingM * 2)
height: 36 height: 36
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: cancelArea.containsMouse ? Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) : "transparent" color: cancelArea.containsMouse ? Theme.surfaceTextHover : "transparent"
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) border.color: Theme.surfaceVariantAlpha
border.width: 1 border.width: 1
StyledText { StyledText {

View File

@@ -338,12 +338,8 @@ PanelWindow {
buttonSize: 20 buttonSize: 20
z: 15 z: 15
onClicked: { onClicked: {
if (modelData.latestNotification.notification.transient) { for (const notif of modelData.notifications) {
NotificationService.dismissGroup(modelData.key); notif.popup = false;
} else {
for (const notif of modelData.notifications) {
notif.popup = false;
}
} }
} }
} }
@@ -424,12 +420,8 @@ PanelWindow {
buttonSize: 20 buttonSize: 20
z: 15 z: 15
onClicked: { onClicked: {
if (modelData.latestNotification.notification.transient) { for (const notif of modelData.notifications) {
NotificationService.dismissGroup(modelData.key); notif.popup = false;
} else {
for (const notif of modelData.notifications) {
notif.popup = false;
}
} }
} }
} }
@@ -667,12 +659,8 @@ PanelWindow {
} }
onClicked: { onClicked: {
if (modelData.latestNotification.notification.transient) { for (const notif of modelData.notifications) {
NotificationService.dismissGroup(modelData.key); notif.popup = false;
} else {
for (const notif of modelData.notifications) {
notif.popup = false;
}
} }
} }
} }

View File

@@ -14,7 +14,7 @@ Rectangle {
width: BatteryService.batteryAvailable ? 70 : 40 width: BatteryService.batteryAvailable ? 70 : 40
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: batteryArea.containsMouse || batteryPopupVisible ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08) color: batteryArea.containsMouse || batteryPopupVisible ? Theme.primaryPressed : Theme.secondaryHover
visible: true visible: true
Row { Row {
@@ -99,7 +99,7 @@ Rectangle {
height: tooltipText.contentHeight + Theme.spacingS * 2 height: tooltipText.contentHeight + Theme.spacingS * 2
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Theme.surfaceContainer color: Theme.surfaceContainer
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) border.color: Theme.surfaceVariantAlpha
border.width: 1 border.width: 1
visible: batteryArea.containsMouse && !batteryPopupVisible visible: batteryArea.containsMouse && !batteryPopupVisible
anchors.bottom: parent.top anchors.bottom: parent.top

View File

@@ -95,7 +95,7 @@ PanelWindow {
sourceComponent: Rectangle { sourceComponent: Rectangle {
color: Theme.popupBackground() color: Theme.popupBackground()
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) border.color: Theme.outlineMedium
border.width: 1 border.width: 1
// Material 3 elevation with multiple layers // Material 3 elevation with multiple layers
@@ -114,7 +114,7 @@ PanelWindow {
anchors.margins: -2 anchors.margins: -2
color: "transparent" color: "transparent"
radius: parent.radius + 2 radius: parent.radius + 2
border.color: Qt.rgba(0, 0, 0, 0.08) border.color: Theme.shadowMedium
border.width: 1 border.width: 1
z: -2 z: -2
} }
@@ -122,7 +122,7 @@ PanelWindow {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
color: "transparent" color: "transparent"
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12) border.color: Theme.outlineStrong
border.width: 1 border.width: 1
radius: parent.radius radius: parent.radius
z: -1 z: -1
@@ -161,7 +161,7 @@ PanelWindow {
width: 32 width: 32
height: 32 height: 32
radius: 16 radius: 16
color: closeBatteryArea.containsMouse ? Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) : "transparent" color: closeBatteryArea.containsMouse ? Theme.errorHover : "transparent"
DankIcon { DankIcon {
anchors.centerIn: parent anchors.centerIn: parent
@@ -188,7 +188,7 @@ PanelWindow {
height: 80 height: 80
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, Theme.getContentBackgroundAlpha() * 0.4) color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, Theme.getContentBackgroundAlpha() * 0.4)
border.color: BatteryService.isCharging ? Theme.primary : (BatteryService.isLowBattery ? Theme.error : Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08)) border.color: BatteryService.isCharging ? Theme.primary : (BatteryService.isLowBattery ? Theme.error : Theme.outlineMedium)
border.width: BatteryService.isCharging || BatteryService.isLowBattery ? 2 : 1 border.width: BatteryService.isCharging || BatteryService.isLowBattery ? 2 : 1
visible: BatteryService.batteryAvailable visible: BatteryService.batteryAvailable
@@ -262,7 +262,7 @@ PanelWindow {
return ""; return "";
} }
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7) color: Theme.surfaceTextMedium
visible: text.length > 0 visible: text.length > 0
} }
@@ -278,7 +278,7 @@ PanelWindow {
height: 80 height: 80
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, Theme.getContentBackgroundAlpha() * 0.4) color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, Theme.getContentBackgroundAlpha() * 0.4)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) border.color: Theme.outlineMedium
border.width: 1 border.width: 1
visible: !BatteryService.batteryAvailable visible: !BatteryService.batteryAvailable
@@ -307,7 +307,7 @@ PanelWindow {
Text { Text {
text: "Power profile management is available" text: "Power profile management is available"
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7) color: Theme.surfaceTextMedium
} }
} }
@@ -341,7 +341,7 @@ PanelWindow {
Text { Text {
text: "Health" text: "Health"
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7) color: Theme.surfaceTextMedium
font.weight: Font.Medium font.weight: Font.Medium
} }
@@ -367,7 +367,7 @@ PanelWindow {
Text { Text {
text: "Capacity" text: "Capacity"
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7) color: Theme.surfaceTextMedium
font.weight: Font.Medium font.weight: Font.Medium
} }
@@ -407,8 +407,8 @@ PanelWindow {
width: parent.width width: parent.width
height: 50 height: 50
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: profileArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : (root.isActiveProfile(modelData) ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.1)) color: profileArea.containsMouse ? Theme.primaryHoverLight : (root.isActiveProfile(modelData) ? Theme.primaryPressed : Theme.surfaceLight)
border.color: root.isActiveProfile(modelData) ? Theme.primary : Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.05) border.color: root.isActiveProfile(modelData) ? Theme.primary : Theme.outlineLight
border.width: root.isActiveProfile(modelData) ? 2 : 1 border.width: root.isActiveProfile(modelData) ? 2 : 1
Row { Row {
@@ -438,7 +438,7 @@ PanelWindow {
Text { Text {
text: Theme.getPowerProfileDescription(modelData) text: Theme.getPowerProfileDescription(modelData)
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7) color: Theme.surfaceTextMedium
} }
} }
@@ -469,8 +469,8 @@ PanelWindow {
width: parent.width width: parent.width
height: 60 height: 60
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.12) color: Theme.errorHover
border.color: Qt.rgba(Theme.error.r, Theme.error.g, Theme.error.b, 0.3) border.color: Theme.primarySelected
border.width: 1 border.width: 1
visible: (typeof PowerProfiles !== "undefined") && PowerProfiles.degradationReason !== PerformanceDegradationReason.None visible: (typeof PowerProfiles !== "undefined") && PowerProfiles.degradationReason !== PerformanceDegradationReason.None

View File

@@ -13,7 +13,7 @@ Rectangle {
width: clockRow.implicitWidth + Theme.spacingS * 2 width: clockRow.implicitWidth + Theme.spacingS * 2
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: clockMouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) color: clockMouseArea.containsMouse ? Theme.primaryHover : Theme.surfaceTextHover
Component.onCompleted: { Component.onCompleted: {
root.currentDate = systemClock.date; root.currentDate = systemClock.date;
} }
@@ -35,7 +35,7 @@ Rectangle {
Text { Text {
text: "•" text: "•"
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.5) color: Theme.outlineButton
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
visible: !compactMode visible: !compactMode
} }

View File

@@ -29,7 +29,7 @@ Rectangle {
width: Math.max(80, controlIndicators.implicitWidth + Theme.spacingS * 2) width: Math.max(80, controlIndicators.implicitWidth + Theme.spacingS * 2)
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: controlCenterArea.containsMouse || root.isActive ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08) color: controlCenterArea.containsMouse || root.isActive ? Theme.primaryPressed : Theme.secondaryHover
Row { Row {
id: controlIndicators id: controlIndicators
@@ -48,7 +48,7 @@ Rectangle {
return "wifi_off"; return "wifi_off";
} }
size: Theme.iconSize - 8 size: Theme.iconSize - 8
color: NetworkService.networkStatus !== "disconnected" ? Theme.primary : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.5) color: NetworkService.networkStatus !== "disconnected" ? Theme.primary : Theme.outlineButton
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
visible: true visible: true
} }
@@ -57,7 +57,7 @@ Rectangle {
DankIcon { DankIcon {
name: "bluetooth" name: "bluetooth"
size: Theme.iconSize - 8 size: Theme.iconSize - 8
color: BluetoothService.enabled ? Theme.primary : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.5) color: BluetoothService.enabled ? Theme.primary : Theme.outlineButton
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
visible: BluetoothService.available && BluetoothService.enabled visible: BluetoothService.available && BluetoothService.enabled
} }

View File

@@ -15,7 +15,7 @@ Rectangle {
width: 55 width: 55
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: cpuArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08) color: cpuArea.containsMouse ? Theme.primaryPressed : Theme.secondaryHover
Component.onCompleted: { Component.onCompleted: {
SysMonitorService.addRef(); SysMonitorService.addRef();
} }

View File

@@ -14,7 +14,7 @@ Rectangle {
width: compactMode ? Math.min(baseWidth, maxCompactWidth) : Math.min(baseWidth, maxNormalWidth) width: compactMode ? Math.min(baseWidth, maxCompactWidth) : Math.min(baseWidth, maxNormalWidth)
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: mouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) color: mouseArea.containsMouse ? Theme.primaryHover : Theme.surfaceTextHover
clip: true clip: true
visible: FocusedWindowService.niriAvailable && (FocusedWindowService.focusedAppName || FocusedWindowService.focusedWindowTitle) visible: FocusedWindowService.niriAvailable && (FocusedWindowService.focusedAppName || FocusedWindowService.focusedWindowTitle)
@@ -40,7 +40,7 @@ Rectangle {
Text { Text {
text: "•" text: "•"
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.5) color: Theme.outlineButton
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
visible: appText.text && titleText.text visible: appText.text && titleText.text
} }

View File

@@ -13,7 +13,7 @@ Rectangle {
width: 40 width: 40
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: launcherArea.containsMouse || isActive ? Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.12) : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) color: launcherArea.containsMouse || isActive ? Theme.surfaceTextPressed : Theme.surfaceTextHover
SystemLogo { SystemLogo {
visible: Prefs.useOSLogo visible: Prefs.useOSLogo

View File

@@ -18,7 +18,7 @@ Rectangle {
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) color: Theme.surfaceTextHover
states: [ states: [
State { State {
name: "shown" name: "shown"
@@ -144,7 +144,7 @@ Rectangle {
height: 20 height: 20
radius: 10 radius: 10
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
color: prevArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : "transparent" color: prevArea.containsMouse ? Theme.primaryHover : "transparent"
visible: root.playerAvailable visible: root.playerAvailable
opacity: (activePlayer && activePlayer.canGoPrevious) ? 1 : 0.3 opacity: (activePlayer && activePlayer.canGoPrevious) ? 1 : 0.3
@@ -175,7 +175,7 @@ Rectangle {
height: 24 height: 24
radius: 12 radius: 12
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
color: activePlayer && activePlayer.playbackState === 1 ? Theme.primary : Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) color: activePlayer && activePlayer.playbackState === 1 ? Theme.primary : Theme.primaryHover
visible: root.playerAvailable visible: root.playerAvailable
opacity: activePlayer ? 1 : 0.3 opacity: activePlayer ? 1 : 0.3
@@ -204,7 +204,7 @@ Rectangle {
height: 20 height: 20
radius: 10 radius: 10
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
color: nextArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : "transparent" color: nextArea.containsMouse ? Theme.primaryHover : "transparent"
visible: playerAvailable visible: playerAvailable
opacity: (activePlayer && activePlayer.canGoNext) ? 1 : 0.3 opacity: (activePlayer && activePlayer.canGoNext) ? 1 : 0.3

View File

@@ -13,7 +13,7 @@ Rectangle {
width: 40 width: 40
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: notificationArea.containsMouse || root.isActive ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08) color: notificationArea.containsMouse || root.isActive ? Theme.primaryPressed : Theme.secondaryHover
DankIcon { DankIcon {
anchors.centerIn: parent anchors.centerIn: parent

View File

@@ -15,7 +15,7 @@ Rectangle {
width: 55 width: 55
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: ramArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08) color: ramArea.containsMouse ? Theme.primaryPressed : Theme.secondaryHover
Component.onCompleted: { Component.onCompleted: {
SysMonitorService.addRef(); SysMonitorService.addRef();
} }

View File

@@ -10,7 +10,7 @@ Rectangle {
width: Math.max(40, systemTrayRow.implicitWidth + Theme.spacingS * 2) width: Math.max(40, systemTrayRow.implicitWidth + Theme.spacingS * 2)
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08) color: Theme.secondaryHover
visible: systemTrayRow.children.length > 0 visible: systemTrayRow.children.length > 0
Row { Row {
@@ -43,7 +43,7 @@ Rectangle {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
radius: Theme.cornerRadiusSmall radius: Theme.cornerRadiusSmall
color: trayItemArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : "transparent" color: trayItemArea.containsMouse ? Theme.primaryHover : "transparent"
Behavior on color { Behavior on color {
enabled: trayItemArea.containsMouse !== undefined enabled: trayItemArea.containsMouse !== undefined

View File

@@ -36,7 +36,7 @@ PanelWindow {
height: Math.max(60, menuList.contentHeight + Theme.spacingS * 2) height: Math.max(60, menuList.contentHeight + Theme.spacingS * 2)
color: Theme.popupBackground() color: Theme.popupBackground()
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) border.color: Theme.outlineMedium
border.width: 1 border.width: 1
// Material 3 animations // Material 3 animations
opacity: showContextMenu ? 1 : 0 opacity: showContextMenu ? 1 : 0
@@ -98,7 +98,7 @@ PanelWindow {
width: ListView.view.width width: ListView.view.width
height: modelData.isSeparator ? 5 : 28 height: modelData.isSeparator ? 5 : 28
radius: modelData.isSeparator ? 0 : Theme.cornerRadiusSmall radius: modelData.isSeparator ? 0 : Theme.cornerRadiusSmall
color: modelData.isSeparator ? "transparent" : (menuItemArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : "transparent") color: modelData.isSeparator ? "transparent" : (menuItemArea.containsMouse ? Theme.primaryHover : "transparent")
// Separator line // Separator line
Rectangle { Rectangle {
@@ -106,7 +106,7 @@ PanelWindow {
anchors.centerIn: parent anchors.centerIn: parent
width: parent.width - Theme.spacingS * 2 width: parent.width - Theme.spacingS * 2
height: 1 height: 1
color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) color: Theme.surfaceVariantAlpha
} }
// Menu item content // Menu item content

View File

@@ -68,7 +68,7 @@ PanelWindow {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
color: "transparent" color: "transparent"
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) border.color: Theme.outlineMedium
border.width: 1 border.width: 1
radius: parent.radius radius: parent.radius
} }
@@ -236,7 +236,7 @@ PanelWindow {
width: 40 width: 40
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: clipboardArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08) color: clipboardArea.containsMouse ? Theme.primaryHover : Theme.secondaryHover
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
visible: Prefs.showClipboard visible: Prefs.showClipboard

View File

@@ -12,7 +12,7 @@ Rectangle {
width: visible ? Math.min(100, weatherRow.implicitWidth + Theme.spacingS * 2) : 0 width: visible ? Math.min(100, weatherRow.implicitWidth + Theme.spacingS * 2) : 0
height: 30 height: 30
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: weatherArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) color: weatherArea.containsMouse ? Theme.primaryHover : Theme.surfaceTextHover
Ref { Ref {
service: WeatherService service: WeatherService

View File

@@ -56,7 +56,7 @@ Rectangle {
width: Prefs.showWorkspacePadding ? Math.max(120, workspaceRow.implicitWidth + Theme.spacingL * 2) : workspaceRow.implicitWidth + Theme.spacingL * 2 width: Prefs.showWorkspacePadding ? Math.max(120, workspaceRow.implicitWidth + Theme.spacingL * 2) : workspaceRow.implicitWidth + Theme.spacingL * 2
height: 30 height: 30
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08) color: Theme.surfaceTextHover
visible: NiriService.niriAvailable visible: NiriService.niriAvailable
Connections { Connections {
@@ -108,7 +108,7 @@ Rectangle {
width: isActive ? Theme.spacingXL + Theme.spacingM : Theme.spacingL + Theme.spacingXS width: isActive ? Theme.spacingXL + Theme.spacingM : Theme.spacingL + Theme.spacingXS
height: Theme.spacingL height: Theme.spacingL
radius: height / 2 radius: height / 2
color: isActive ? Theme.primary : isPlaceholder ? Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.06) : isHovered ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.5) : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.3) color: isActive ? Theme.primary : isPlaceholder ? Theme.surfaceTextLight : isHovered ? Theme.outlineButton : Theme.surfaceTextAlpha
MouseArea { MouseArea {
id: mouseArea id: mouseArea
@@ -129,7 +129,7 @@ Rectangle {
visible: Prefs.showWorkspaceIndex visible: Prefs.showWorkspaceIndex
anchors.centerIn: parent anchors.centerIn: parent
text: isPlaceholder ? sequentialNumber : sequentialNumber text: isPlaceholder ? sequentialNumber : sequentialNumber
color: isPlaceholder ? Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.3) : Theme.surfaceText color: isPlaceholder ? Theme.surfaceTextAlpha : Theme.surfaceText
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
font.bold: isActive && !isPlaceholder font.bold: isActive && !isPlaceholder
} }

View File

@@ -10,7 +10,8 @@ Singleton {
id: root id: root
readonly property list<NotifWrapper> notifications: [] readonly property list<NotifWrapper> notifications: []
readonly property list<NotifWrapper> popups: notifications.filter(n => n.popup) readonly property list<NotifWrapper> allWrappers: []
readonly property list<NotifWrapper> popups: allWrappers.filter(n => n.popup)
// Android 16-style grouped notifications // Android 16-style grouped notifications
readonly property var groupedNotifications: getGroupedNotifications() readonly property var groupedNotifications: getGroupedNotifications()
@@ -38,23 +39,29 @@ Singleton {
inlineReplySupported: true inlineReplySupported: true
onNotification: notif => { onNotification: notif => {
console.log("=== RAW NOTIFICATION DATA ===");
console.log("appName:", notif.appName);
console.log("summary:", notif.summary);
console.log("body:", notif.body);
console.log("appIcon:", notif.appIcon);
console.log("image:", notif.image);
console.log("urgency:", notif.urgency);
console.log("hasInlineReply:", notif.hasInlineReply);
console.log("=============================");
notif.tracked = true; notif.tracked = true;
const wrapper = notifComponent.createObject(root, { const wrapper = notifComponent.createObject(root, {
popup: !notif.transient, // Transient notifications show as popups but don't persist popup: true, // Always show as popup initially
notification: notif notification: notif
}); });
if (wrapper) { if (wrapper) {
const groupKey = getGroupKey(wrapper); const groupKey = getGroupKey(wrapper);
// Only add to notifications list if not transient root.allWrappers.push(wrapper);
if (!notif.transient) { root.notifications.push(wrapper);
root.notifications.push(wrapper); addToPersistentStorage(wrapper);
addToPersistentStorage(wrapper);
}
} }
} }
} }
@@ -65,7 +72,16 @@ Singleton {
property bool popup: false property bool popup: false
Component.onCompleted: { Component.onCompleted: {
popup = !root.popupsDisabled && !notification.transient; popup = !root.popupsDisabled;
}
readonly property Timer timer: Timer {
interval: 5000
repeat: false
running: wrapper.popup
onTriggered: {
wrapper.popup = false;
}
} }
readonly property date time: new Date() readonly property date time: new Date()
readonly property string timeStr: { readonly property string timeStr: {
@@ -113,23 +129,24 @@ Singleton {
target: wrapper.notification.Retainable target: wrapper.notification.Retainable
function onDropped(): void { function onDropped(): void {
const index = root.notifications.indexOf(wrapper); const notifIndex = root.notifications.indexOf(wrapper);
if (index !== -1) { const allIndex = root.allWrappers.indexOf(wrapper);
// Get the group key before removing the notification
if (allIndex !== -1) {
root.allWrappers.splice(allIndex, 1);
}
if (notifIndex !== -1) {
const groupKey = getGroupKey(wrapper); const groupKey = getGroupKey(wrapper);
root.notifications.splice(index, 1); root.notifications.splice(notifIndex, 1);
// Check if this group now has no notifications left or only 1 left
const remainingInGroup = root.notifications.filter(n => getGroupKey(n) === groupKey); const remainingInGroup = root.notifications.filter(n => getGroupKey(n) === groupKey);
if (remainingInGroup.length === 0) { if (remainingInGroup.length === 0) {
// Immediately clear expansion state for empty group
clearGroupExpansionState(groupKey); clearGroupExpansionState(groupKey);
} else if (remainingInGroup.length === 1) { } else if (remainingInGroup.length === 1) {
// Collapse groups that only have 1 notification left
clearGroupExpansionState(groupKey); clearGroupExpansionState(groupKey);
} }
// Clean up all expansion states
cleanupExpansionStates(); cleanupExpansionStates();
} }
} }
@@ -168,7 +185,7 @@ Singleton {
function disablePopups(disable) { function disablePopups(disable) {
popupsDisabled = disable; popupsDisabled = disable;
if (disable) { if (disable) {
for (const notif of root.notifications) { for (const notif of root.allWrappers) {
notif.popup = false; notif.popup = false;
} }
} }
@@ -271,6 +288,12 @@ Singleton {
for (const notif of group.notifications) { for (const notif of group.notifications) {
notif.notification.dismiss(); notif.notification.dismiss();
} }
} else {
for (const notif of allWrappers) {
if (getGroupKey(notif) === groupKey) {
notif.notification.dismiss();
}
}
} }
} }

View File

@@ -8,7 +8,7 @@ StyledRect {
property string iconName: "" property string iconName: ""
property int iconSize: Theme.iconSize - 4 property int iconSize: Theme.iconSize - 4
property color iconColor: Theme.surfaceText property color iconColor: Theme.surfaceText
property color hoverColor: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) property color hoverColor: Theme.primaryHover
property color backgroundColor: "transparent" property color backgroundColor: "transparent"
property bool circular: true property bool circular: true
property int buttonSize: 32 property int buttonSize: 32

View File

@@ -17,7 +17,7 @@ Rectangle {
width: parent.width width: parent.width
height: 60 height: 60
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.08) color: Theme.surfaceHover
onVisibleChanged: { onVisibleChanged: {
if (!visible && dropdownMenu.visible) if (!visible && dropdownMenu.visible)
dropdownMenu.close(); dropdownMenu.close();
@@ -59,8 +59,8 @@ Rectangle {
anchors.rightMargin: Theme.spacingM anchors.rightMargin: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
radius: Theme.cornerRadiusSmall radius: Theme.cornerRadiusSmall
color: dropdownArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : Theme.contentBackground() color: dropdownArea.containsMouse ? Theme.primaryHover : Theme.contentBackground()
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) border.color: Theme.surfaceVariantAlpha
border.width: 1 border.width: 1
MouseArea { MouseArea {
@@ -141,7 +141,7 @@ Rectangle {
contentItem: Rectangle { contentItem: Rectangle {
color: Qt.rgba(Theme.surfaceContainer.r, Theme.surfaceContainer.g, Theme.surfaceContainer.b, 1) color: Qt.rgba(Theme.surfaceContainer.r, Theme.surfaceContainer.g, Theme.surfaceContainer.b, 1)
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.3) border.color: Theme.primarySelected
border.width: 1 border.width: 1
radius: Theme.cornerRadiusSmall radius: Theme.cornerRadiusSmall
@@ -158,7 +158,7 @@ Rectangle {
width: ListView.view.width width: ListView.view.width
height: 32 height: 32
radius: Theme.cornerRadiusSmall radius: Theme.cornerRadiusSmall
color: optionArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : "transparent" color: optionArea.containsMouse ? Theme.primaryHoverLight : "transparent"
Row { Row {
anchors.left: parent.left anchors.left: parent.left

View File

@@ -69,8 +69,8 @@ ScrollView {
width: grid.cellWidth - cellPadding width: grid.cellWidth - cellPadding
height: grid.cellHeight - cellPadding height: grid.cellHeight - cellPadding
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: currentIndex === index ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : mouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.03) color: currentIndex === index ? Theme.primaryPressed : mouseArea.containsMouse ? Theme.primaryHoverLight : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.03)
border.color: currentIndex === index ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.3) : Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) border.color: currentIndex === index ? Theme.primarySelected : Theme.outlineMedium
border.width: currentIndex === index ? 2 : 1 border.width: currentIndex === index ? 2 : 1
Column { Column {
@@ -97,10 +97,10 @@ ScrollView {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
visible: !iconImg.visible visible: !iconImg.visible
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1) color: Theme.surfaceLight
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
border.width: 1 border.width: 1
border.color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.2) border.color: Theme.primarySelected
Text { Text {
anchors.centerIn: parent anchors.centerIn: parent

View File

@@ -58,8 +58,8 @@ ScrollView {
width: list.width width: list.width
height: itemHeight height: itemHeight
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
color: ListView.isCurrentItem ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : mouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.03) color: ListView.isCurrentItem ? Theme.primaryPressed : mouseArea.containsMouse ? Theme.primaryHoverLight : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.03)
border.color: ListView.isCurrentItem ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.3) : Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) border.color: ListView.isCurrentItem ? Theme.primarySelected : Theme.outlineMedium
border.width: ListView.isCurrentItem ? 2 : 1 border.width: ListView.isCurrentItem ? 2 : 1
Row { Row {
@@ -85,10 +85,10 @@ ScrollView {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
visible: !iconImg.visible visible: !iconImg.visible
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1) color: Theme.surfaceLight
radius: Theme.cornerRadiusLarge radius: Theme.cornerRadiusLarge
border.width: 1 border.width: 1
border.color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.2) border.color: Theme.primarySelected
Text { Text {
anchors.centerIn: parent anchors.centerIn: parent

View File

@@ -144,7 +144,7 @@ Item {
placeholderText: root.placeholderText placeholderText: root.placeholderText
text: root.currentLocation text: root.currentLocation
backgroundColor: Theme.surfaceVariant backgroundColor: Theme.surfaceVariant
normalBorderColor: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.3) normalBorderColor: Theme.primarySelected
focusedBorderColor: Theme.primary focusedBorderColor: Theme.primary
onTextEdited: { onTextEdited: {
if (root._internalChange) if (root._internalChange)
@@ -226,7 +226,7 @@ Item {
y: searchInputField.height y: searchInputField.height
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Theme.popupBackground() color: Theme.popupBackground()
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.3) border.color: Theme.primarySelected
border.width: 1 border.width: 1
visible: locationInput.getActiveFocus() && locationInput.text.length > 2 && (searchResultsModel.count > 0 || root.isLoading) visible: locationInput.getActiveFocus() && locationInput.text.length > 2 && (searchResultsModel.count > 0 || root.isLoading)
@@ -262,7 +262,7 @@ Item {
width: searchResultsList.width width: searchResultsList.width
height: 36 height: 36
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: resultMouseArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.1) : "transparent" color: resultMouseArea.containsMouse ? Theme.surfaceLight : "transparent"
Row { Row {
anchors.fill: parent anchors.fill: parent

View File

@@ -42,7 +42,7 @@ Item {
width: parent.width - (leftIconWidth + rightIconWidth + (slider.leftIcon.length > 0 ? Theme.spacingM : 0) + (slider.rightIcon.length > 0 ? Theme.spacingM : 0)) width: parent.width - (leftIconWidth + rightIconWidth + (slider.leftIcon.length > 0 ? Theme.spacingM : 0) + (slider.rightIcon.length > 0 ? Theme.spacingM : 0))
height: 6 height: 6
radius: 3 radius: 3
color: slider.enabled ? Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.3) : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.1) color: slider.enabled ? Theme.surfaceVariantAlpha : Theme.surfaceLight
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
StyledRect { StyledRect {
@@ -82,7 +82,7 @@ Item {
height: parent.height + 4 height: parent.height + 4
radius: width / 2 radius: width / 2
color: "transparent" color: "transparent"
border.color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.3) border.color: Theme.primarySelected
border.width: 2 border.width: 2
visible: sliderMouseArea.containsMouse && slider.enabled visible: sliderMouseArea.containsMouse && slider.enabled
} }

View File

@@ -34,7 +34,7 @@ Item {
width: tabBar.equalWidthTabs ? (tabBar.width - tabBar.spacing * (tabCount - 1)) / tabCount : contentRow.implicitWidth + Theme.spacingM * 2 width: tabBar.equalWidthTabs ? (tabBar.width - tabBar.spacing * (tabCount - 1)) / tabCount : contentRow.implicitWidth + Theme.spacingM * 2
height: tabBar.tabHeight height: tabBar.tabHeight
radius: Theme.cornerRadiusSmall radius: Theme.cornerRadiusSmall
color: isActive ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.16) : tabArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : "transparent" color: isActive ? Theme.primaryPressed : tabArea.containsMouse ? Theme.primaryHoverLight : "transparent"
Row { Row {
id: contentRow id: contentRow

View File

@@ -28,8 +28,8 @@ StyledRect {
// Custom properties // Custom properties
property color backgroundColor: Qt.rgba(Theme.surfaceContainer.r, Theme.surfaceContainer.g, Theme.surfaceContainer.b, 0.9) property color backgroundColor: Qt.rgba(Theme.surfaceContainer.r, Theme.surfaceContainer.g, Theme.surfaceContainer.b, 0.9)
property color focusedBorderColor: Theme.primary property color focusedBorderColor: Theme.primary
property color normalBorderColor: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12) property color normalBorderColor: Theme.outlineStrong
property color placeholderColor: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.5) property color placeholderColor: Theme.outlineButton
property int borderWidth: 1 property int borderWidth: 1
property int focusedBorderWidth: 2 property int focusedBorderWidth: 2
property real cornerRadius: Theme.cornerRadius property real cornerRadius: Theme.cornerRadius
@@ -160,7 +160,7 @@ StyledRect {
width: 24 width: 24
height: 24 height: 24
radius: 12 radius: 12
color: clearArea.containsMouse ? Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12) : "transparent" color: clearArea.containsMouse ? Theme.outlineStrong : "transparent"
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: Theme.spacingM anchors.rightMargin: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter

View File

@@ -22,7 +22,7 @@ Item {
anchors.fill: parent anchors.fill: parent
radius: toggle.text ? Theme.cornerRadius : 0 radius: toggle.text ? Theme.cornerRadius : 0
color: toggle.text ? Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.08) : "transparent" color: toggle.text ? Theme.surfaceHover : "transparent"
visible: toggle.text visible: toggle.text
StateLayer { StateLayer {
@@ -85,7 +85,7 @@ Item {
anchors.rightMargin: toggle.text ? Theme.spacingM : 0 anchors.rightMargin: toggle.text ? Theme.spacingM : 0
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
radius: height / 2 radius: height / 2
color: (toggle.checked && toggle.enabled) ? Theme.primary : Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.3) color: (toggle.checked && toggle.enabled) ? Theme.primary : Theme.surfaceVariantAlpha
opacity: toggle.toggling ? 0.6 : (toggle.enabled ? 1 : 0.4) opacity: toggle.toggling ? 0.6 : (toggle.enabled ? 1 : 0.4)
StyledRect { StyledRect {

View File

@@ -67,6 +67,8 @@ sleep 0.5
notify-send -h string:desktop-entry:org.gnome.Nautilus -i folder-downloads "Files" "document.pdf downloaded" notify-send -h string:desktop-entry:org.gnome.Nautilus -i folder-downloads "Files" "document.pdf downloaded"
sleep 2 sleep 2
# notify-send --hint=boolean:resident:true "Resident Test" "Click an action - I should stay visible!" --action="Test Action" --action="Close Me"
echo "" echo ""
echo "✅ Notification tests completed!" echo "✅ Notification tests completed!"
echo "" echo ""
@@ -81,4 +83,4 @@ echo ""
echo "🎯 Check your notification popup and notification center to see the results!" echo "🎯 Check your notification popup and notification center to see the results!"
echo "" echo ""
echo "Note: Some icons may show as fallback (checkerboard) if icon themes aren't installed." echo "Note: Some icons may show as fallback (checkerboard) if icon themes aren't installed."
echo "To install more icons: sudo pacman -S papirus-icon-theme adwaita-icon-theme" echo "To install more icons: sudo pacman -S papirus-icon-theme adwaita-icon-theme"