# Règles de Développement UI - Projet SaaS ## 0. Scope v0.503 (priorité absolue) - **Référence** : `docs/V0_503_RELEASE_SCOPE.md` et `docs/SCOPE_CONTROL.md` - Avant toute modification : vérifier si le changement est **dans le scope v0.503** - **Autorisé v0.503** : à définir (voir V0_503_RELEASE_SCOPE.md) - **Interdit** : nouvelles routes/pages hors scope, nouvelles dépendances (sauf correctif sécurité) - En cas de doute : ne pas ajouter. Créer une issue pour une version ultérieure. ## 1. Standards Tailwind & Layout - **Interdiction formelle** d'utiliser des valeurs arbitraires (ex: `w-[300px]`, `gap-[7px]`, `rounded-[12px]`, `shadow-[...]`) pour les espacements, tailles, rayons ou ombres sans justification (voir exceptions dans `apps/web/docs/DESIGN_TOKENS.md`). - Utilise exclusivement l'échelle de spacing native de Tailwind ou les **Layout Primitives** définies dans `apps/web/src/index.css` : - `max-w-layout-content` (1600px) - `min-h-layout-main` (calc(100vh - 4rem)) - `min-h-layout-page` (600px) - `min-h-layout-page-sm` (400px) - `min-h-layout-story` (192px, pour les stories) - Référence unique : **DESIGN_TOKENS.md** et **APP_SHELL.md** dans `apps/web/docs/` pour layout, espacements, ombres, typo, transitions. ## 2. Cycle de Vie des Composants (Storybook-First) - Toute modification d'UI doit d'abord être validée dans sa **Story**. - Chaque composant "Feature" doit obligatoirement posséder les états suivants dans sa Story : - `Loading` (utilisant des Skeletons) - `Error` (état de repli) - `Empty` (si liste ou data) - Référence toujours le `docs/STORYBOOK_CONTRACT.md` avant de créer une story. - N'importer jamais les providers applicatifs dans les stories ; utiliser le décorateur global (StorybookDecorator). ## 3. Modularité & IA-Friendliness - Si un composant dépasse **300 lignes**, il DOIT être découpé en sous-composants atomiques. - Les composants doivent être "purs" : la logique de fetch doit être mockée via MSW dans `apps/web/src/mocks/handlers.ts`. - Lors de l'ajout d'une nouvelle fonctionnalité qui appelle l'API, ajouter le handler correspondant dans `handlers.ts` sans qu'on te le demande. ## 4. Audit & Qualité - Avant de finaliser une tâche, lance `npm run test:storybook` (depuis `apps/web`) après build + serve sur 6007 pour garantir 0 erreur réseau/console. ## 5. Tests visuels et valeurs arbitraires - **Commandes visuelles** (depuis `apps/web`) : `npm run visual:capture` (capture écrans → `visual-tests/current/`), `npm run visual:compare` (diff vs baselines), `npm run visual:update` (mise à jour des baselines). Procédure détaillée dans `apps/web/visual-tests/README.md`. - **Rapport des valeurs arbitraires** : `node scripts/report-arbitrary-values.mjs` (optionnel `--json` ou `--dir src/features`) pour lister les patterns à migrer ; pas de remplacement automatique sans revue. - **Nouvelle page full layout** : suivre `apps/web/docs/FULL_LAYOUT_PAGE.md` (route, story, MSW, viewport).