import QtQuick import qs.config import qs.services SettingsPage { title: "Notifications & Focus" lede: "Control interruptions without losing useful history." SettingsCard { title: "Notifications" SettingRow { label: "Do Not Disturb" detail: "Keep notifications in the center but suppress banners" controlWidth: 48 SettingsToggle { anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter checked: Notifs.doNotDisturb onToggled: value => Notifs.doNotDisturb = value } } TextRow { label: "Notification history" detail: "Live notifications retained by Panama" value: `${Notifs.history.length} items` } ActionRow { label: "Clear notification history" detail: "Dismiss every item currently in the notification center" divider: false action: "Clear all" enabled: Notifs.history.length > 0 onTriggered: Notifs.dismissAll() } } SettingsCard { title: "Banner behavior" SliderRow { setting: "notificationTimeoutMs" } SliderRow { setting: "notificationTimeoutCriticalMs" zeroLabel: "Never" } SliderRow { setting: "notificationHistoryLimit" } SliderRow { setting: "maxVisibleToasts"; divider: false } } SettingsCard { title: "Focus sessions" subtitle: "A focus session binds quiet mode and Caffeine to the current workspace." SettingRow { id: durationRow label: "Default duration" detail: "Used by Super+Shift+F and Quick Settings" controlWidth: 264 Row { anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter spacing: 6 Repeater { model: [25, 45, 60, 90] SettingsButton { required property int modelData text: `${modelData}m` tone: DesktopPreferences.get("focusDurationMinutes") === modelData ? "accent" : "normal" onClicked: SystemSettings.commitPreference("focusDurationMinutes", modelData) } } } } SettingRow { label: FocusSession.active ? `Active on ${FocusSession.workspaceLabel}` : "No active focus session" detail: FocusSession.active ? `${FocusSession.remainingText} remaining` : "Start one without leaving Settings" divider: false controlWidth: 120 SettingsButton { anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter text: FocusSession.active ? "Show controls" : "Start focus" tone: FocusSession.active ? "normal" : "accent" onClicked: FocusSession.reveal() } } } }