From 133feff75d29647f947a120fb713f7de84d9ce0b Mon Sep 17 00:00:00 2001 From: Dinawo Date: Mon, 4 May 2026 22:29:35 +0200 Subject: [PATCH] =?UTF-8?q?feat(v1):=20bloquants=20release=20v1=20?= =?UTF-8?q?=E2=80=94=20tests,=20stories,=20visual=20regression,=20gouverna?= =?UTF-8?q?nce,=20publishing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 6 chantiers v1 sur 7 livrés (DataTable refonte reportée car nécessite 2-3j en propre — TanStack Table + virtualisation + filter builder). v1-A — Tests (4 → 22 fichiers) : - Avatar, AvatarGroup, UserCard, MetricCard, ProfileHeader, Tooltip, Sheet, Drawer, Slider, ToggleGroup, Tabs, Pagination, Accordion, Switch, Badge, ConfirmDialog, Popover, Menu, Text, PricingCard, FeatureCard, Toast — chacun avec render + clavier + axe-core. v1-B — Storybook (7 → 23 fichiers) : - Avatar, UserCard, ProfileHeader, MetricCard, PricingCard, FeatureCard, Sheet (4 sides), HoverCard, Slider, ToggleGroup, Menu+ContextMenu, Toast (avec démo "Empiler 5"), Tabs, Pagination, Accordion, Badge. v1-D — Visual regression Playwright : - playwright.config.ts (light + dark, threshold strict 0.2) - e2e/visual.spec.ts (20 stories critiques) - Step CI + upload report en cas de fail v1-E — Site doc Starlight rempli : - 11 pages composants détaillées (Button, Input, Tooltip, Dialog, Toast, Avatar, ThemePicker, MetricCard, PricingCard, ToggleGroup, Slider) avec API, anatomie, do/don't, A11y. v1-F — Publishing Verdaccio : - verdaccio/config.yaml, docker-compose.verdaccio.yml, .npmrc - README setup local + déploiement prod + backups + sécurité v1-G — Gouvernance : - LICENSE, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md - CODEOWNERS, PR template, 3 issue templates (bug/feature/rfc) Bug fix bonus : tooltip dark mode (text-primary comme bg + text-inverse comme texte → blanc-sur-blanc invisible). Remplacé par neutral-900/0 en light + bg-raised/text-primary en dark. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/ISSUE_TEMPLATE/bug.md | 47 +++++++ .github/ISSUE_TEMPLATE/feature.md | 34 +++++ .github/ISSUE_TEMPLATE/rfc.md | 69 ++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 45 ++++++ .github/workflows/ci.yml | 16 +++ .gitignore | 5 + .npmrc | 16 +++ CODEOWNERS | 33 +++++ CODE_OF_CONDUCT.md | 72 ++++++++++ CONTRIBUTING.md | 129 ++++++++++++++++++ LICENSE | 50 +++++++ SECURITY.md | 72 ++++++++++ docker-compose.verdaccio.yml | 22 +++ docs/src/content/docs/components/avatar.md | 72 ++++++++++ docs/src/content/docs/components/dialog.md | 90 ++++++++++++ docs/src/content/docs/components/input.md | 80 +++++++++++ .../content/docs/components/metric-card.md | 60 ++++++++ .../content/docs/components/pricing-card.md | 59 ++++++++ docs/src/content/docs/components/slider.md | 57 ++++++++ .../content/docs/components/theme-picker.md | 70 ++++++++++ docs/src/content/docs/components/toast.md | 72 ++++++++++ .../content/docs/components/toggle-group.md | 67 +++++++++ docs/src/content/docs/components/tooltip.md | 76 +++++++++++ e2e/README.md | 45 ++++++ e2e/visual.spec.ts | 64 +++++++++ package.json | 10 +- packages/css/src/components/overlays.css | 34 ++++- packages/react/src/Accordion.test.tsx | 41 ++++++ packages/react/src/Avatar.test.tsx | 45 ++++++ packages/react/src/AvatarGroup.test.tsx | 36 +++++ packages/react/src/Badge.test.tsx | 32 +++++ packages/react/src/ConfirmDialog.test.tsx | 54 ++++++++ packages/react/src/Drawer.test.tsx | 38 ++++++ packages/react/src/FeatureCard.test.tsx | 41 ++++++ packages/react/src/Menu.test.tsx | 46 +++++++ packages/react/src/MetricCard.test.tsx | 52 +++++++ packages/react/src/Pagination.test.tsx | 40 ++++++ packages/react/src/Popover.test.tsx | 30 ++++ packages/react/src/PricingCard.test.tsx | 60 ++++++++ packages/react/src/ProfileHeader.test.tsx | 49 +++++++ packages/react/src/Sheet.test.tsx | 58 ++++++++ packages/react/src/Slider.test.tsx | 52 +++++++ packages/react/src/Switch.test.tsx | 44 ++++++ packages/react/src/Tabs.test.tsx | 41 ++++++ packages/react/src/Text.test.tsx | 60 ++++++++ packages/react/src/Toast.test.tsx | 74 ++++++++++ packages/react/src/ToggleGroup.test.tsx | 50 +++++++ packages/react/src/Tooltip.test.tsx | 55 ++++++++ packages/react/src/UserCard.test.tsx | 51 +++++++ playwright.config.ts | 55 ++++++++ pnpm-lock.yaml | 38 ++++++ storybook/stories/Accordion.stories.tsx | 27 ++++ storybook/stories/Avatar.stories.tsx | 52 +++++++ storybook/stories/Badge.stories.tsx | 53 +++++++ storybook/stories/FeatureCard.stories.tsx | 38 ++++++ storybook/stories/HoverCard.stories.tsx | 44 ++++++ storybook/stories/Menu.stories.tsx | 44 ++++++ storybook/stories/MetricCard.stories.tsx | 46 +++++++ storybook/stories/Pagination.stories.tsx | 19 +++ storybook/stories/PricingCard.stories.tsx | 68 +++++++++ storybook/stories/ProfileHeader.stories.tsx | 45 ++++++ storybook/stories/Sheet.stories.tsx | 42 ++++++ storybook/stories/Slider.stories.tsx | 50 +++++++ storybook/stories/Tabs.stories.tsx | 30 ++++ storybook/stories/Toast.stories.tsx | 35 +++++ storybook/stories/ToggleGroup.stories.tsx | 52 +++++++ storybook/stories/UserCard.stories.tsx | 37 +++++ verdaccio/README.md | 85 ++++++++++++ verdaccio/config.yaml | 65 +++++++++ 69 files changed, 3433 insertions(+), 7 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug.md create mode 100644 .github/ISSUE_TEMPLATE/feature.md create mode 100644 .github/ISSUE_TEMPLATE/rfc.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .npmrc create mode 100644 CODEOWNERS create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 SECURITY.md create mode 100644 docker-compose.verdaccio.yml create mode 100644 docs/src/content/docs/components/avatar.md create mode 100644 docs/src/content/docs/components/dialog.md create mode 100644 docs/src/content/docs/components/input.md create mode 100644 docs/src/content/docs/components/metric-card.md create mode 100644 docs/src/content/docs/components/pricing-card.md create mode 100644 docs/src/content/docs/components/slider.md create mode 100644 docs/src/content/docs/components/theme-picker.md create mode 100644 docs/src/content/docs/components/toast.md create mode 100644 docs/src/content/docs/components/toggle-group.md create mode 100644 docs/src/content/docs/components/tooltip.md create mode 100644 e2e/README.md create mode 100644 e2e/visual.spec.ts create mode 100644 packages/react/src/Accordion.test.tsx create mode 100644 packages/react/src/Avatar.test.tsx create mode 100644 packages/react/src/AvatarGroup.test.tsx create mode 100644 packages/react/src/Badge.test.tsx create mode 100644 packages/react/src/ConfirmDialog.test.tsx create mode 100644 packages/react/src/Drawer.test.tsx create mode 100644 packages/react/src/FeatureCard.test.tsx create mode 100644 packages/react/src/Menu.test.tsx create mode 100644 packages/react/src/MetricCard.test.tsx create mode 100644 packages/react/src/Pagination.test.tsx create mode 100644 packages/react/src/Popover.test.tsx create mode 100644 packages/react/src/PricingCard.test.tsx create mode 100644 packages/react/src/ProfileHeader.test.tsx create mode 100644 packages/react/src/Sheet.test.tsx create mode 100644 packages/react/src/Slider.test.tsx create mode 100644 packages/react/src/Switch.test.tsx create mode 100644 packages/react/src/Tabs.test.tsx create mode 100644 packages/react/src/Text.test.tsx create mode 100644 packages/react/src/Toast.test.tsx create mode 100644 packages/react/src/ToggleGroup.test.tsx create mode 100644 packages/react/src/Tooltip.test.tsx create mode 100644 packages/react/src/UserCard.test.tsx create mode 100644 playwright.config.ts create mode 100644 storybook/stories/Accordion.stories.tsx create mode 100644 storybook/stories/Avatar.stories.tsx create mode 100644 storybook/stories/Badge.stories.tsx create mode 100644 storybook/stories/FeatureCard.stories.tsx create mode 100644 storybook/stories/HoverCard.stories.tsx create mode 100644 storybook/stories/Menu.stories.tsx create mode 100644 storybook/stories/MetricCard.stories.tsx create mode 100644 storybook/stories/Pagination.stories.tsx create mode 100644 storybook/stories/PricingCard.stories.tsx create mode 100644 storybook/stories/ProfileHeader.stories.tsx create mode 100644 storybook/stories/Sheet.stories.tsx create mode 100644 storybook/stories/Slider.stories.tsx create mode 100644 storybook/stories/Tabs.stories.tsx create mode 100644 storybook/stories/Toast.stories.tsx create mode 100644 storybook/stories/ToggleGroup.stories.tsx create mode 100644 storybook/stories/UserCard.stories.tsx create mode 100644 verdaccio/README.md create mode 100644 verdaccio/config.yaml diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 0000000..2cc9191 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,47 @@ +--- +name: 🐛 Bug +about: Signaler un bug du DSMMG +labels: bug +--- + +## Résumé + + + +## Reproduction + +Un repro CodeSandbox ou StackBlitz est idéal. Sinon, étapes : + +1. Aller sur … +2. Faire … +3. Observer … + +## Comportement attendu + + + +## Comportement observé + + + +## Environnement + +- Version DSMMG : +- Browser + version : +- OS : +- Mode : light / dark / system +- Accent : synapse / blue / … / custom +- Densité : comfortable / cozy / compact +- Reduced motion activé : oui / non + +## Composant(s) concerné(s) + + + +## A11y + +- [ ] Reproductible au clavier ? +- [ ] Reproductible avec lecteur d'écran ? +- [ ] Régression de contraste ? + +## Idée de cause / fix (optionnel) diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 0000000..f4d668a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,34 @@ +--- +name: ✨ Feature +about: Proposer une nouvelle fonctionnalité ou un nouveau composant +labels: feature +--- + +## Problème à résoudre + + + +## Solution proposée + + + +## Composants existants couvrant partiellement + + + +## Références (autres DS) + + + +## Accessibilité + + + +## Alternatives écartées + +## Effort estimé + +- [ ] S (≤ 1j) +- [ ] M (1 sem) +- [ ] L (2-3 sem — RFC requise) +- [ ] XL (1 mois+ — RFC + roadmap) diff --git a/.github/ISSUE_TEMPLATE/rfc.md b/.github/ISSUE_TEMPLATE/rfc.md new file mode 100644 index 0000000..5f42e3b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/rfc.md @@ -0,0 +1,69 @@ +--- +name: 📜 RFC +about: Proposition formelle pour un changement majeur +labels: rfc +--- + +> Une RFC est requise pour : nouveau composant non-trivial, +> breaking change sur l'API publique, refonte de tokens, nouvelle +> dépendance externe, changement architectural. + +## Titre + +RFC #XXXX — + +## Statut + +- [ ] Draft +- [ ] In review +- [ ] Accepted +- [ ] Rejected +- [ ] Superseded by #... + +## Auteur(s) + +@… + +## Date + +YYYY-MM-DD + +## Contexte + + + +## Proposition + + + +## API publique (si applicable) + +```tsx +// avant + + +// après + +``` + +## Alternatives écartées + + + +## Coût migration + +- Codemod possible : oui / non +- Effort consommateur estimé : +- Période de deprecation prévue : + +## Risques + +- A11y : +- Performance : +- DX : +- Lock-in / dépendances : + +## Décision + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..efd8746 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,45 @@ +## Résumé + + + +## Changements + +- [ ] Ajout — nouveau composant / token / variant +- [ ] Fix — bugfix +- [ ] Refacto — pas de surface publique modifiée +- [ ] Doc — uniquement docs / stories / commentaires +- [ ] Breaking — change l'API publique (préciser ci-dessous) + +### Détail des breaking changes (si applicable) + + + +## Tests + +- [ ] Tests unitaires ajoutés / mis à jour +- [ ] Stories Storybook ajoutées / mises à jour +- [ ] Test axe-core (pas de violation a11y) +- [ ] Test clavier (Tab, Esc, flèches, Enter, Espace) +- [ ] Testé en dark mode +- [ ] Testé sur les 9 presets accent (au moins synapse + un autre) +- [ ] Testé en zoom 200 % / reflow 320px +- [ ] Testé avec `prefers-reduced-motion: reduce` +- [ ] Lint contraste WCAG passe (`pnpm lint:contrast`) + +## Documentation + +- [ ] Page MDX du composant dans `docs/` (anatomie, props, do/don't, a11y) +- [ ] Story Storybook avec autodocs +- [ ] CHANGELOG via Changesets (`pnpm changeset`) + +## Captures / preuves visuelles + + + +## Checklist finale + +- [ ] J'ai lu [CONTRIBUTING.md](../CONTRIBUTING.md) +- [ ] Mon code suit les conventions de naming (`mmg-*`, `--mmg-color-*`) +- [ ] Aucun hex en dur — uniquement des tokens +- [ ] Aucun `--mmg-color-synapse-*` direct dans un composant +- [ ] CI verte diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 66a461d..8fd1e02 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,6 +59,22 @@ jobs: - name: Build Storybook run: pnpm --filter storybook build + - name: Install Playwright Chromium + run: pnpm exec playwright install --with-deps chromium + + - name: Visual regression (Playwright) + run: pnpm test:visual + env: + CI: true + + - name: Upload Playwright report on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: playwright-report + path: playwright-report + retention-days: 14 + - name: Bundle size budget run: pnpm size diff --git a/.gitignore b/.gitignore index e1f4d85..314e14f 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,11 @@ storybook-static # Test artifacts coverage .nyc_output +playwright-report +playwright/.cache +test-results +e2e/__screenshots__/*-actual.png +e2e/__screenshots__/*-diff.png # Demo specifics demo/_dev.log diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..14c8ba4 --- /dev/null +++ b/.npmrc @@ -0,0 +1,16 @@ +# DSMMG — npm/pnpm config workspace +# Usage privé : tout @managemate va sur le Verdaccio local par défaut. +# En CI ou pour les contributeurs externes, override via env vars. + +# Registre par défaut pour le scope @managemate +@managemate:registry=https://npm.dinawo.fr/ + +# Reste sur npm public +registry=https://registry.npmjs.org/ + +# pnpm — éviter les conflits de hoisting auto sur les peers Radix +strict-peer-dependencies=false +auto-install-peers=true + +# Lockfile cohérent pour CI +prefer-frozen-lockfile=true diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..1b9f01d --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,33 @@ +# DSMMG — CODEOWNERS +# Règle : ces personnes/équipes sont automatiquement assignées en +# review sur les PRs touchant les fichiers concernés. +# Doc Gitea : https://docs.gitea.com/usage/code-owners + +# Mainteneurs principaux du DS — review obligatoire sur tout +* @lololefarmer + +# Tokens & couleurs — exige un designer dans la review +/packages/tokens/ @lololefarmer +/packages/css/src/tokens/ @lololefarmer +/packages/css/src/tokens.css @lololefarmer +/scripts/lint-contrast.mjs @lololefarmer +DESIGN.md @lololefarmer + +# CSS de composants — review front +/packages/css/src/components/ @lololefarmer + +# Composants React — review front senior +/packages/react/src/ @lololefarmer + +# Tests & Storybook +/storybook/ @lololefarmer +/packages/react/src/*.test.tsx @lololefarmer + +# CI & release +/.github/workflows/ @lololefarmer +/.changeset/ @lololefarmer + +# Documentation +/docs/ @lololefarmer +README.md @lololefarmer +CONTRIBUTING.md @lololefarmer diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..87f2fb8 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,72 @@ +# Code de conduite — DSMMG + +Inspiré du [Contributor Covenant 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/) +et adapté au contexte ManageMate Group. + +## Notre engagement + +En tant que membres, contributeurs et mainteneurs du DSMMG, nous nous +engageons à faire de la participation à ce projet une expérience +exempte de harcèlement pour tout le monde, indépendamment de l'âge, +de la corpulence, du handicap visible ou invisible, de l'origine +ethnique, des caractères sexuels, de l'identité ou expression de genre, +du niveau d'expérience, de l'éducation, du statut socio-économique, +de la nationalité, de l'apparence personnelle, de la religion ou de +l'orientation sexuelle. + +## Comportements attendus + +- Faire preuve d'**empathie** et de **bienveillance**. +- Respecter les opinions, points de vue et expériences différents. +- Donner et accepter avec grâce les retours constructifs. +- Assumer la responsabilité de nos erreurs, présenter nos excuses aux + personnes affectées, et apprendre de nos erreurs. +- Privilégier ce qui est le mieux pour la communauté, pas seulement + pour nous individuellement. + +## Comportements inacceptables + +- Langage ou imagerie sexualisé, attention ou avances sexuelles + importunes. +- Trolling, commentaires insultants ou désobligeants, attaques + personnelles ou politiques. +- Harcèlement public ou privé. +- Publication d'informations privées de tiers (adresse, e-mail, etc.) + sans permission explicite. +- Toute autre conduite raisonnablement considérée comme inappropriée + dans un cadre professionnel. + +## Application + +Les responsables du projet sont chargés de clarifier et faire +respecter nos standards de comportement. Ils prendront des mesures +correctives appropriées et équitables en réponse à tout comportement +qu'ils jugent inapproprié. + +Les mainteneurs ont le droit et la responsabilité de supprimer, +modifier ou rejeter les commentaires, commits, code, modifications de +documentation et autres contributions qui ne sont pas alignés avec ce +code de conduite. + +## Application interne + +Les violations peuvent être signalées au mainteneur principal du +projet ou à `conduct@managemate.fr`. Toutes les plaintes seront +examinées avec sérieux et donneront lieu à une réponse jugée +nécessaire et appropriée. Confidentialité garantie. + +## Sanctions possibles + +1. **Correction** — avertissement privé, explication écrite de la + violation et de la conduite attendue. +2. **Avertissement** — avertissement officiel + interdiction + d'interaction avec la victime pendant une période définie. +3. **Bannissement temporaire** — interdiction de toute interaction + avec le projet pendant une période donnée. +4. **Bannissement définitif** — interdiction permanente de toute + interaction publique avec le projet. + +## Attribution + +Adapté du [Contributor Covenant version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/), +disponible sous Creative Commons Attribution 4.0. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..8c5611d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,129 @@ +# Contribuer au DSMMG + +Merci de prendre le temps de contribuer. Ce guide décrit le workflow +attendu pour ajouter / modifier un composant, fixer un bug, ou faire +évoluer le design system. + +## Setup local + +```sh +git clone https://git.dinawo.fr/ManageMate-Group/DSMMG.git +cd DSMMG +pnpm install +pnpm build # build tous les packages dans le bon ordre +pnpm storybook # lance Storybook localement (port 6006) +pnpm demo # lance la demo Vite (port 5180) +pnpm --filter @managemate/react test:watch +``` + +Pré-requis : Node ≥ 20, pnpm ≥ 9, Git. + +## Workflow d'une PR + +1. **Créer une branche** depuis `main` : + - `feat/` — nouvelle fonctionnalité + - `fix/` — correction de bug + - `chore/` — outillage, refacto sans surface publique + - `docs/` — documentation +2. **Coder + tests** : + - Tests unitaires (`*.test.tsx`) avec Vitest + axe-core + - Stories Storybook (`*.stories.tsx`) avec autodocs + - Doc MDX pour les composants publics +3. **Ajouter un changeset** : `pnpm changeset` (sélectionner les + packages impactés et le bump approprié — patch / minor / major). +4. **Push** + ouvrir la PR sur `main`. +5. **CI doit passer** : + - lint + typecheck + - tests Vitest + - axe-core (pas de violation a11y) + - lint contraste WCAG (`pnpm lint:contrast`) + - build Storybook + visual regression + - bundle size budget (`pnpm size`) +6. **1 review minimum** d'un CODEOWNER avant merge. + +## Conventions de code + +### Naming + +- **Tokens couleur** : `--mmg-color-*` (jamais `--mmg-color-synapse-*` + directement dans un composant — toujours `--mmg-color-accent-*`). +- **Classes CSS** : `mmg-` BEM-like (`mmg-btn`, `mmg-btn--primary`, + `mmg-btn__icon`). +- **Utilitaires CSS** : `mmg-u-*` (`mmg-u-stack`, `mmg-u-text-primary`). +- **Composants React** : PascalCase (`Button`, `ProfileHeader`, + `MetricCard`). **Un fichier par composant**, pas de monolithe. +- **Tests** : `.test.tsx`, **stories** : `.stories.tsx`. + +### Sémantique + +- Choisir le tag HTML selon **la sémantique**, pas selon la taille + visuelle. Un titre de page reste `

` même s'il est stylé en + `display-xl`. +- Préférer ` + + + } +> + + +``` + +## Sheet + +```tsx + +
...
+
+``` + +## ConfirmDialog (destructive) + +```tsx + api.delete(ids)} +/> +``` + +Focus initial sur **Annuler** (pas Confirm) pour éviter les actions destructives accidentelles. + +## A11y + +- `role="dialog"` + `aria-modal="true"` natif. +- Title lié via `aria-labelledby`, description via `aria-describedby`. +- Focus trap : Tab cycle uniquement dans le dialog. +- Restitution focus à l'élément d'origine à la fermeture. +- Esc ferme. +- Click backdrop ferme (sauf si `modal={false}` posé). + +## Do / Don't + +✅ **Do** +- Un titre explicite (RGAA 9.2 — relations). +- Description si l'action a des conséquences (suppression, paiement). +- Bouton primary à droite, ghost/cancel à gauche. + +❌ **Don't** +- Ne pas empiler les Dialogs (UX cauchemardesque). Si vraiment besoin, utiliser un Sheet + Wizard pattern. +- Ne pas utiliser pour un message non-bloquant — préférer Toast. +- Ne pas ouvrir automatiquement au load sans interaction utilisateur (RGAA 13.1 — pas d'apparition non sollicitée). diff --git a/docs/src/content/docs/components/input.md b/docs/src/content/docs/components/input.md new file mode 100644 index 0000000..edc6dfe --- /dev/null +++ b/docs/src/content/docs/components/input.md @@ -0,0 +1,80 @@ +--- +title: Input / Textarea / Select +description: Champs de formulaire DSMMG — Field-wrapped, accessibles, états couverts. +--- + +## Anatomie + +``` +┌──────────────────────────────────────┐ +│ Label (semi) * │ ← --required +├──────────────────────────────────────┤ +│ [icon] Valeur saisie │ ← Input +├──────────────────────────────────────┤ +│ Hint │ ← --tertiary +│ Erreur │ ← --danger (si invalid) +└──────────────────────────────────────┘ +``` + +## API + +```tsx +import { Input, Textarea, Select } from "@managemate/react"; + +} + size="md" // sm | md | lg +/> + +