import QtQuick import "../services" as S import NovaStats as NS Row { id: root spacing: 6 visible: (NS.ModulesService.lockNotifications ?? true) && _notifGroups.length > 0 readonly property var _notifGroups: { const notifs = S.NotifService.list.filter(n => n.state !== "dismissed"); const groups = {}; for (const n of notifs) { const key = n.appName || "unknown"; if (!groups[key]) groups[key] = { resolvedIcon: "", name: n.appName, count: 0 }; if (!groups[key].resolvedIcon && n.resolvedIcon) groups[key].resolvedIcon = n.resolvedIcon; groups[key].count++; } return Object.values(groups); } Repeater { model: root._notifGroups delegate: Rectangle { id: _pill required property var modelData width: _pillRow.implicitWidth + 12 height: 24 radius: 12 color: Qt.rgba(NS.ThemeService.base01.r, NS.ThemeService.base01.g, NS.ThemeService.base01.b, 0.7) border.color: Qt.rgba(NS.ThemeService.base03.r, NS.ThemeService.base03.g, NS.ThemeService.base03.b, 0.3) border.width: 1 HoverHandler { id: _pillHover } // App name tooltip Text { anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.top anchors.bottomMargin: 4 text: _pill.modelData.name || "" color: NS.ThemeService.base04 font.pixelSize: NS.ThemeService.fontSize - 2 font.family: NS.ThemeService.fontFamily visible: _pillHover.hovered && text !== "" } Row { id: _pillRow anchors.centerIn: parent spacing: 4 Image { anchors.verticalCenter: parent.verticalCenter width: 14 height: 14 source: _pill.modelData.resolvedIcon || "" sourceSize: Qt.size(14, 14) visible: source !== "" } Text { anchors.verticalCenter: parent.verticalCenter text: _pill.modelData.count > 1 ? _pill.modelData.count.toString() : "" color: NS.ThemeService.base04 font.pixelSize: NS.ThemeService.fontSize - 2 font.family: NS.ThemeService.fontFamily visible: _pill.modelData.count > 1 } } } } }