fix(insights): a11y + UX Pro Max audit — accessible list view, reduced-motion, focus, lazy-load
Accessibility (CRITIQUE per UI/UX Pro Max skill): - NetworkGraph Accessibility Grade D → added accessible List view alternative (toggle Graph/List with cluster→notes table, keyboard navigable) - aria-label text summary on graph container for screen readers - role=button + tabIndex + onKeyDown on bridge note cards (keyboard accessible) - focus-visible:ring on all interactive cards (isolated clusters, bridges, list items) UX (HIGH): - prefers-reduced-motion: whileHover disabled when user prefers reduced motion - cursor-pointer verified + focus-visible:ring-ochre on all clickable cards - Mobile sidebar: hamburger Menu button in header (dispatches open-mobile-sidebar) Performance (MEDIUM): - NetworkGraph lazy-loaded via next/dynamic (D3 ~200KB deferred, ssr:false) - Loading spinner shown while D3 chunk loads i18n: - listView, graphAriaLabel, listAriaLabel added to 15 locales
This commit is contained in:
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "مجدول",
|
||||
"lastSync": "آخر مزامنة"
|
||||
},
|
||||
"resetFocus": "إعادة ضبط التركيز"
|
||||
"resetFocus": "إعادة ضبط التركيز",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "Geplant",
|
||||
"lastSync": "Letzte Sync"
|
||||
},
|
||||
"resetFocus": "Fokus zurücksetzen"
|
||||
"resetFocus": "Fokus zurücksetzen",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3532,7 +3532,10 @@
|
||||
"scheduledCron": "Scheduled",
|
||||
"lastSync": "Last sync"
|
||||
},
|
||||
"resetFocus": "Reset focus"
|
||||
"resetFocus": "Reset focus",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
},
|
||||
"consent": {
|
||||
"banner": {
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "Programado",
|
||||
"lastSync": "Última sync"
|
||||
},
|
||||
"resetFocus": "Restablecer enfoque"
|
||||
"resetFocus": "Restablecer enfoque",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3041,6 +3041,9 @@
|
||||
"scheduledCron": "برنامهریزیشده",
|
||||
"lastSync": "آخرین همگامسازی"
|
||||
},
|
||||
"resetFocus": "بازنشانی تمرکز"
|
||||
"resetFocus": "بازنشانی تمرکز",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3536,7 +3536,10 @@
|
||||
"scheduledCron": "CRON planifié",
|
||||
"lastSync": "Dernière synchro"
|
||||
},
|
||||
"resetFocus": "Réinitialiser focus"
|
||||
"resetFocus": "Réinitialiser focus",
|
||||
"listView": "Liste",
|
||||
"graphAriaLabel": "Réseau sémantique : {clusters} thèmes, {notes} notes, {bridges} notes-ponts. Basculez en vue Liste pour une navigation accessible.",
|
||||
"listAriaLabel": "Liste accessible des clusters avec notes et connexions ponts"
|
||||
},
|
||||
"consent": {
|
||||
"banner": {
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "अनुसूचित",
|
||||
"lastSync": "अंतिम सिंक"
|
||||
},
|
||||
"resetFocus": "फोकस रीसेट करें"
|
||||
"resetFocus": "फोकस रीसेट करें",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "Programmato",
|
||||
"lastSync": "Ultima sync"
|
||||
},
|
||||
"resetFocus": "Reimposta focus"
|
||||
"resetFocus": "Reimposta focus",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "予定済み",
|
||||
"lastSync": "前回同期"
|
||||
},
|
||||
"resetFocus": "フォーカス解除"
|
||||
"resetFocus": "フォーカス解除",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "예약됨",
|
||||
"lastSync": "마지막 동기화"
|
||||
},
|
||||
"resetFocus": "포커스 해제"
|
||||
"resetFocus": "포커스 해제",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "Gepland",
|
||||
"lastSync": "Laatste sync"
|
||||
},
|
||||
"resetFocus": "Focus resetten"
|
||||
"resetFocus": "Focus resetten",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "Zaplanowano",
|
||||
"lastSync": "Ostatnia sync"
|
||||
},
|
||||
"resetFocus": "Resetuj fokus"
|
||||
"resetFocus": "Resetuj fokus",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "Programado",
|
||||
"lastSync": "Última sync"
|
||||
},
|
||||
"resetFocus": "Repor foco"
|
||||
"resetFocus": "Repor foco",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "Запланировано",
|
||||
"lastSync": "Последняя sync"
|
||||
},
|
||||
"resetFocus": "Сбросить фокус"
|
||||
"resetFocus": "Сбросить фокус",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3002,6 +3002,9 @@
|
||||
"scheduledCron": "已计划",
|
||||
"lastSync": "上次同步"
|
||||
},
|
||||
"resetFocus": "重置焦点"
|
||||
"resetFocus": "重置焦点",
|
||||
"listView": "List",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user