diff --git a/.github/agents/frontend-accessibility.agent.md b/.github/agents/frontend-accessibility.agent.md index c568da277..89e161f10 100644 --- a/.github/agents/frontend-accessibility.agent.md +++ b/.github/agents/frontend-accessibility.agent.md @@ -1,12 +1,14 @@ --- description: "Use when working on Vue 3 frontend code with a focus on accessibility, WCAG compliance, ARIA attributes, keyboard navigation, screen reader support, semantic HTML, color contrast, UX patterns, user flows, interaction design, form usability, empty states, loading states, error states, Tailwind CSS, design systems, @nethesis/vue-components, Pinia, Pinia Colada, defineQuery, useMutation, valibot schemas, or auditing UI components for a11y or UX issues. Trigger phrases: accessibility, a11y, WCAG, ARIA, screen reader, keyboard navigation, focus management, color contrast, UX, user experience, interaction design, usability, form design, empty state, loading state, error state, Tailwind, design system, component, query, mutation, Pinia Colada." name: "Frontend & Accessibility Specialist" -tools: [read, edit, search, todo, execute, web] +tools: [read, edit, search, todo, execute, web, mcp_figma_get_design_context, mcp_figma_get_screenshot, mcp_figma_search_design_system, mcp_figma_get_metadata, mcp_figma_get_code_connect_suggestions, mcp_figma_add_code_connect_map] commands: - name: a11y-fix description: Audit and fix WCAG accessibility issues in a Vue component or view - name: design-check description: Verify a Vue component or view aligns with the design system conventions + - name: design-review + description: Compare a Vue component against its Figma design and audit for design system alignment and accessibility compliance --- You are a senior frontend engineer and UX/design-system specialist with deep expertise in Vue 3, TypeScript, Tailwind CSS v4, Pinia Colada, and the `@nethesis/vue-components` library. You also hold strong accessibility knowledge (WCAG 2.1/2.2 AA, ARIA patterns, keyboard navigation). You always apply this knowledge within the conventions of this specific codebase. @@ -254,3 +256,26 @@ Checklist: - [ ] All user-visible strings use `$t()` / `t()` — no hardcoded text - [ ] New keys added only to `src/i18n/en/translation.json`, `snake_case`, correct domain namespace - [ ] License header present; ` + + diff --git a/frontend/src/components/alerts/AlertNotificationsPanel.vue b/frontend/src/components/alerts/AlertNotificationsPanel.vue new file mode 100644 index 000000000..69b435443 --- /dev/null +++ b/frontend/src/components/alerts/AlertNotificationsPanel.vue @@ -0,0 +1,12 @@ + + + + + diff --git a/frontend/src/components/alerts/AlertsTable.vue b/frontend/src/components/alerts/AlertsTable.vue new file mode 100644 index 000000000..2dabaccc8 --- /dev/null +++ b/frontend/src/components/alerts/AlertsTable.vue @@ -0,0 +1,425 @@ + + + + + diff --git a/frontend/src/components/alerts/MuteAlertDrawer.vue b/frontend/src/components/alerts/MuteAlertDrawer.vue new file mode 100644 index 000000000..71a126b34 --- /dev/null +++ b/frontend/src/components/alerts/MuteAlertDrawer.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/frontend/src/components/shell/SideMenu.vue b/frontend/src/components/shell/SideMenu.vue index 9bf6b7c7e..599731309 100644 --- a/frontend/src/components/shell/SideMenu.vue +++ b/frontend/src/components/shell/SideMenu.vue @@ -21,7 +21,7 @@ import { faBuilding as fasBuilding, faUserGroup as fasUserGroup, faServer as fasServer, - faBell, + faWarning, } from '@fortawesome/free-solid-svg-icons' import { faGridOne as fasGridOne } from '@nethesis/nethesis-solid-svg-icons' import { @@ -74,6 +74,15 @@ const navigation = computed(() => { }) } + if (loginStore.isOwner) { + menuItems.push({ + name: 'alerts.alerts_title', + to: 'alerts', + solidIcon: faWarning, + lightIcon: faWarning, + }) + } + if (canReadApplications()) { menuItems.push({ name: 'applications.title', @@ -119,15 +128,6 @@ const navigation = computed(() => { }) } - if (loginStore.isOwner) { - menuItems.push({ - name: 'alerting.alerting_title', - to: 'alerting', - solidIcon: faBell, - lightIcon: faBell, - }) - } - return menuItems }) diff --git a/frontend/src/components/systems/DisableSystemAlertSilenceModal.vue b/frontend/src/components/systems/DisableSystemAlertSilenceModal.vue deleted file mode 100644 index 4e7fb928d..000000000 --- a/frontend/src/components/systems/DisableSystemAlertSilenceModal.vue +++ /dev/null @@ -1,125 +0,0 @@ - - - - - diff --git a/frontend/src/components/systems/SilenceSystemAlertModal.vue b/frontend/src/components/systems/SilenceSystemAlertModal.vue deleted file mode 100644 index 79bf486c5..000000000 --- a/frontend/src/components/systems/SilenceSystemAlertModal.vue +++ /dev/null @@ -1,145 +0,0 @@ - - - - - diff --git a/frontend/src/components/systems/SystemActiveAlertsCard.vue b/frontend/src/components/systems/SystemActiveAlertsCard.vue deleted file mode 100644 index b2528cdb5..000000000 --- a/frontend/src/components/systems/SystemActiveAlertsCard.vue +++ /dev/null @@ -1,429 +0,0 @@ - - - - - diff --git a/frontend/src/components/systems/SystemAlertHistoryPanel.vue b/frontend/src/components/systems/SystemAlertHistoryPanel.vue deleted file mode 100644 index cbedf88b6..000000000 --- a/frontend/src/components/systems/SystemAlertHistoryPanel.vue +++ /dev/null @@ -1,189 +0,0 @@ - - - - - diff --git a/frontend/src/components/systems/SystemAlertSilencesCard.vue b/frontend/src/components/systems/SystemAlertSilencesCard.vue deleted file mode 100644 index 3f29bba42..000000000 --- a/frontend/src/components/systems/SystemAlertSilencesCard.vue +++ /dev/null @@ -1,259 +0,0 @@ - - - - - diff --git a/frontend/src/components/systems/SystemBackupsPanel.vue b/frontend/src/components/systems/SystemBackupsPanel.vue index fd0c6f805..0949d46dd 100644 --- a/frontend/src/components/systems/SystemBackupsPanel.vue +++ b/frontend/src/components/systems/SystemBackupsPanel.vue @@ -6,20 +6,18 @@ diff --git a/frontend/src/components/systems/SystemStatusCard.vue b/frontend/src/components/systems/SystemStatusCard.vue index 5a1e44121..0e4412ec3 100644 --- a/frontend/src/components/systems/SystemStatusCard.vue +++ b/frontend/src/components/systems/SystemStatusCard.vue @@ -35,7 +35,7 @@ const { state: latestInventory } = useLatestInventory() const { state: activeAlerts } = useSystemActiveAlerts() const { state: systemBackups } = useSystemBackups() -const activeAlertsCount = computed(() => activeAlerts.value.data?.length ?? 0) +const activeAlertsCount = computed(() => activeAlerts.value?.data?.alerts?.length ?? 0) const backupsCount = computed(() => systemBackups.value.data?.backups?.length ?? 0) const hasActiveAlerts = computed(() => activeAlertsCount.value > 0) const hasBackups = computed(() => backupsCount.value > 0) @@ -193,7 +193,7 @@ const timezone = computed(() => {