feat(frontend): Spectrum UX port — Tabs + AlertBanner + BackLink + compact tables (sprint 11) #13
Reference in New Issue
Block a user
Delete Branch "sprint/11-spectrum-ux"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
/home/user/Documents/01_Projects/spectrumfaite via workflow (4 lecteurs parallèles + synthèse adversariale). Verdict : Spectrum n'a pas de design system (Tailwind raw + violet ramp, recipes inlinées 30× partout). Mimic est structurellement meilleur — on n'absorbe pas la philosophie Spectrum, on extrait 4 patterns isolés qui survivent au brutalisme.Tabs,useHashTab,AlertBanner,BackLink), 1 page refactorée en 3 tabs (EngagementDetailPage), 1 changement de densité table global (32px row), 4 amendments DESIGN.md additives, CHANGELOG.md entrée.transition-*, zéroshadow-*,rounded-nonepartout sauf status pills +.tab-count-pill(exception documentée). Hairline 1px borders only. Primary#024ad8Electric Blue intouchée.Tabswired complet WAI-ARIA (role="tablist"+role="tab"+aria-selected+aria-controls+aria-labelledby+ arrow-key nav).AlertBannerrole="alert"(error/warn) vsrole="status"(success/info) —aria-livecorrect par implication.history.replaceState(pas de pushState, pas d'anchor-jump scroll).Test plan
tsc --noEmitclean.eslint --max-warnings=0clean.Comment tester en local
Scénarios :
Schedule(par défaut),Description,Simulations. Count pill sur "Simulations" = nombre exact de simulations. Click un tab → URL devient…#description(sans push d'history entry — Back doit toujours mener à la liste d'engagements en 1 clic).…#simulations, refresh la page → tab Simulations reste actif. Colle…#nonsense→ tu vois rien actif (silent fallback), idéalement default fallback dans une future itération.role="tab"+aria-selected, le panel actif arole="tabpanel"+aria-labelledbypointant vers le tab actif.done, le bandeau "Simulation complétée…" est désormais un<AlertBanner variant="success">. Sur une simulation SOC-blocked en mode RT, le bandeau "Cette simulation est en cours de review SOC…" est un<AlertBanner variant="warn">. Plus de markupbg-fog/bg-cloudhand-rollé.← Back to engagements/← Back to {engagement name}/← Back to templates. Tous les 3 sont des<BackLink>(caption-md text-graphite, hover-instant text-primary).Fichiers livrés
frontend/src/hooks/useHashTab.tshistory.replaceState, cleanup listenerfrontend/src/components/Tabs.tsx<Tabs items activeId onChange>complet WAI-ARIA + arrow-key navfrontend/src/components/AlertBanner.tsxfrontend/src/components/BackLink.tsx<Link>React Router + ArrowLeft Lucide size=14frontend/src/styles/index.cssfrontend/src/pages/EngagementDetailPage.tsxTabIdunion typed) + BackLinkfrontend/src/pages/SimulationFormPage.tsx<AlertBanner>+ back-link →<BackLink>frontend/src/pages/TemplateFormPage.tsx<BackLink>frontend/src/pages/EngagementsListPage.tsx.table-compactappliedfrontend/src/pages/TemplatesListPage.tsx.table-compactappliedfrontend/src/pages/UsersAdminPage.tsx.table-compactapplied + commentaire intention sur reset-password rowfrontend/src/components/SimulationList.tsx.table-compactappliedfrontend/tests/hooks/useHashTab.test.tsxfrontend/tests/components/Tabs.test.tsxfrontend/tests/components/AlertBanner.test.tsxfrontend/tests/components/BackLink.test.tsxDESIGN.mdCHANGELOG.mdDécisions verrouillées
Patterns explicitement rejetés depuis Spectrum
spectrum-700(contrainte hard : primary stays#024ad8)shadow-md/lg/xlsur cards/modals (Mimic forbid)rounded/rounded-lg/rounded-fullsur chrome (Mimic =rounded-nonepartout sauf pills + avatars)transition-*(Mimic = hover instantané)hover:-translate-y-0.5 hover:shadow-lg)Commits
🤖 Generated with Claude Code
Tabs: Schedule (default) / Description / Simulations, wired via useHashTab('schedule'). Count pill on Simulations tab. BackLink replaces hand-rolled Link. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>