v2 : correctifs QA — overlays posés, accueil jamais orphelin, finitions mobiles

- overlays Nuxt UI (UModal/USlideover) : géométrie posée en CSS
  (assets/css/overlays.css) — les utilitaires tailwind attendus par @nuxt/ui
  ne sont pas générés (UnoCSS ne scanne pas node_modules) : drawer mobile et
  modales de confirmation se rendaient hors écran
- a11y : title/description sur les 3 overlays (DialogTitle/Description
  rendus, warnings reka-ui éteints), fermeture du drawer ancrée et testée
- suppression du collectif actif : bascule sur un collectif restant —
  jamais d'accueil orphelin (test store ajouté, 343 vitest verts)
- observatoire : la route « transmis » entre dans les barres (base 100 %)
- overflows mobiles à zéro : formules KaTeX (défilement), table vigueur
  (défilement < 768px), pill cible (retour à la ligne), inputs decider et
  mandat (border-box)
- vérifié navigateur : drawer, modale, 14 routes sans débordement,
  zéro erreur console

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-08-11 20:11:54 +02:00
co-authored by Claude Fable 5
parent 38fd053e87
commit 3301b764f7
14 changed files with 194 additions and 9 deletions
+18
View File
@@ -572,6 +572,24 @@ describe('collective store', () => {
expect(second.issues.some(i => i.level === 'error' && i.message.includes('existe déjà'))).toBe(true)
})
it('switches to a remaining collective when the active one is removed', async () => {
const col = useCollectiveStore()
const first = await col.importJson(
JSON.stringify(buildTemplateBundle('blank', buildOpts(`reste-${crypto.randomUUID().slice(0, 8)}`))), true)
const second = await col.importJson(
JSON.stringify(buildTemplateBundle('blank', buildOpts(`actif-${crypto.randomUUID().slice(0, 8)}`))), true)
expect(col.activeId).toBe(second.state!.collective.id)
await col.removeCollective(second.state!.collective.id)
// Jamais d'accueil orphelin : le collectif restant devient l'actif.
expect(col.activeId).toBe(first.state!.collective.id)
expect(col.current?.collective.id).toBe(first.state!.collective.id)
await col.removeCollective(first.state!.collective.id)
expect(col.activeId).toBeNull()
expect(col.index.length).toBe(0)
})
it('resolves settings and the me profile from the active state', async () => {
const col = useCollectiveStore()
await col.createFromTemplate('commune', {