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) <noreply@anthropic.com>
4.6 KiB
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
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
- Créer une branche depuis
main:feat/<name>— nouvelle fonctionnalitéfix/<name>— correction de bugchore/<name>— outillage, refacto sans surface publiquedocs/<name>— documentation
- Coder + tests :
- Tests unitaires (
*.test.tsx) avec Vitest + axe-core - Stories Storybook (
*.stories.tsx) avec autodocs - Doc MDX pour les composants publics
- Tests unitaires (
- Ajouter un changeset :
pnpm changeset(sélectionner les packages impactés et le bump approprié — patch / minor / major). - Push + ouvrir la PR sur
main. - 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)
- 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-<comp>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 :
<Component>.test.tsx, stories :<Component>.stories.tsx.
Sémantique
- Choisir le tag HTML selon la sémantique, pas selon la taille
visuelle. Un titre de page reste
<h1>même s'il est stylé endisplay-xl. - Préférer
<button>à<div onClick>. Préférer<a href>pour la navigation.
Accessibilité (non-négociable)
- Tester en clavier (Tab, Shift+Tab, Esc, flèches, Enter, Espace).
- Tester avec un lecteur d'écran si possible (NVDA / VoiceOver).
- Tester en zoom 200 % et reflow 320px.
- Tester avec
prefers-reduced-motionactivé. - Toute couleur d'info doit être redondée avec icône / texte / pattern (RGAA 9 — couleur seule interdite).
- Aucun
outline: nonesans focus visible alternatif. - Cible tactile ≥ 44×44 (WCAG SC 2.5.5).
Ajouter un nouveau composant
- Créer
packages/react/src/<Component>.tsx(un fichier, exports nommés, types exportés). - Si CSS dédié :
packages/css/src/components/<comp>.css+ l'importer danspackages/css/src/index.cssaveclayer(components). - Story :
storybook/stories/<Component>.stories.tsx— au minimum un default + variants + states (default/hover/focus/loading/empty/ error/disabled). - Tests :
packages/react/src/<Component>.test.tsx— render, axe, clavier, interactions critiques. - Doc MDX :
docs/src/content/docs/components/<component>.md— anatomie, props, do/don't, accessibilité. - Export dans
packages/react/src/index.tsx. - Changeset minor.
Un composant non documenté n'est pas livré.
RFC pour les changements majeurs
Voir RFC process. Une RFC est requise pour :
- nouveau composant non-trivial (DataTable v2, Calendar, Editor…)
- breaking change sur l'API publique
- refonte d'un token ou d'un groupe de tokens
- nouvelle dépendance externe
- changement architectural
Versioning (SemVer strict)
- major : breaking change sur l'API publique
- minor : addition non-breaking (nouveau composant, nouvelle prop)
- patch : bugfix, doc, perf interne sans surface publique
Les 4 packages versionnés (tokens, css, react, icons) sont
fixed (même version) — pas d'incompatibilités cross-package.
Code de conduite
Voir CODE_OF_CONDUCT.md. Toute communication toxique, harcèlement, ou comportement excluant entraîne l'exclusion du projet.
Sécurité
Les vulnérabilités doivent être signalées en privé. Voir SECURITY.md.
Licence
Tout contribution est faite sous la licence du projet (voir LICENSE). En soumettant une PR, vous accordez à ManageMate Group le droit d'utiliser votre contribution dans le cadre du DSMMG.