feat(insights): UX gap closure — i18n, network graph, recalc panel, toasts
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 1m6s
CI / Deploy production (on server) (push) Has been skipped

Bugs fixes:
- network-graph.tsx: 2 strings hardcoded FR → props i18n (untitledLabel, resetFocusLabel)
- Panneau recalcul: clés i18n réutilisées avec mauvais sens → nouvelles clés recalcSystem.*
- 13 locales: section insightsView.* complète (67 clés × 13 = 871 traductions)

UX features:
- Hint /insights ≠ /graph (semanticGraphLegend + lien vers /graph)
- Toasts succès/échec/zéro-clusters après analyse (analysisSuccess/Failed/NoClusters)
- État vide différencié: emptyNeedMoreNotes si < 10 notes
- Tips contextuels sections Bridge Notes et Suggestions

Sprint:
- 4 epics marqués done (3,4,5,6 — toutes stories terminées)
- sprint-status.yaml last_updated corrigé
This commit is contained in:
Antigravity
2026-06-28 08:06:05 +00:00
parent 96e7902f01
commit b3fb46fc52
23 changed files with 1301 additions and 23 deletions

View File

@@ -31,6 +31,9 @@ interface NetworkGraphProps {
onNoteSelect: (id: string) => void
selectedClusterId?: string | null
onClusterSelect?: (id: string | null) => void
untitledLabel?: string
resetFocusLabel?: string
fitViewLabel?: string
}
export function NetworkGraph({
@@ -39,7 +42,10 @@ export function NetworkGraph({
bridgeNotes,
onNoteSelect,
selectedClusterId = null,
onClusterSelect
onClusterSelect,
untitledLabel = 'Untitled',
resetFocusLabel = 'Reset focus',
fitViewLabel = 'Fit view',
}: NetworkGraphProps) {
const svgRef = useRef<SVGSVGElement>(null)
const containerRef = useRef<HTMLDivElement>(null)
@@ -268,7 +274,7 @@ export function NetworkGraph({
.attr('fill', '#4b5563')
.attr('class', 'dark:fill-zinc-300 font-sans pointer-events-none')
.text(d => {
const title = d.title || 'Sans titre'
const title = d.title || untitledLabel
return title.length > 20 ? title.substring(0, 18) + '...' : title
})
@@ -368,7 +374,7 @@ export function NetworkGraph({
onClick={() => onClusterSelect?.(null)}
className="px-3 py-1.5 rounded-full border border-rose-200 bg-rose-50 dark:bg-rose-950/20 dark:border-rose-900/40 text-rose-500 text-[9px] font-bold uppercase tracking-wider hover:bg-rose-100 dark:hover:bg-rose-950/30 transition-all shadow-sm"
>
Réinitialiser focus
{resetFocusLabel}
</button>
)}
</div>