feat(v1): bloquants release v1 — tests, stories, visual regression, gouvernance, publishing
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>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: 🐛 Bug
|
||||
about: Signaler un bug du DSMMG
|
||||
labels: bug
|
||||
---
|
||||
|
||||
## Résumé
|
||||
|
||||
<!-- 1-2 phrases. -->
|
||||
|
||||
## Reproduction
|
||||
|
||||
Un repro CodeSandbox ou StackBlitz est idéal. Sinon, étapes :
|
||||
|
||||
1. Aller sur …
|
||||
2. Faire …
|
||||
3. Observer …
|
||||
|
||||
## Comportement attendu
|
||||
|
||||
<!-- Ce qui devrait se passer. -->
|
||||
|
||||
## Comportement observé
|
||||
|
||||
<!-- Ce qui se passe vraiment. Joindre captures / vidéos / logs console. -->
|
||||
|
||||
## Environnement
|
||||
|
||||
- Version DSMMG : <!-- ex. 0.2.0 -->
|
||||
- Browser + version : <!-- ex. Chrome 130, Firefox 132, Safari 18 -->
|
||||
- OS : <!-- ex. Windows 11, macOS 14, iOS 17 -->
|
||||
- Mode : light / dark / system
|
||||
- Accent : synapse / blue / … / custom
|
||||
- Densité : comfortable / cozy / compact
|
||||
- Reduced motion activé : oui / non
|
||||
|
||||
## Composant(s) concerné(s)
|
||||
|
||||
<!-- Button, DataTable, Tooltip, etc. -->
|
||||
|
||||
## A11y
|
||||
|
||||
- [ ] Reproductible au clavier ?
|
||||
- [ ] Reproductible avec lecteur d'écran ?
|
||||
- [ ] Régression de contraste ?
|
||||
|
||||
## Idée de cause / fix (optionnel)
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
name: ✨ Feature
|
||||
about: Proposer une nouvelle fonctionnalité ou un nouveau composant
|
||||
labels: feature
|
||||
---
|
||||
|
||||
## Problème à résoudre
|
||||
|
||||
<!-- Quel besoin produit ? Quelle douleur actuelle ? -->
|
||||
|
||||
## Solution proposée
|
||||
|
||||
<!-- Décrire l'API, les variants, les cas d'usage. -->
|
||||
|
||||
## Composants existants couvrant partiellement
|
||||
|
||||
<!-- Y a-t-il un composant existant proche ? -->
|
||||
|
||||
## Références (autres DS)
|
||||
|
||||
<!-- Comment Radix / shadcn / Linear / Vercel / Stripe / Atlassian DS / IBM Carbon le font ? -->
|
||||
|
||||
## Accessibilité
|
||||
|
||||
<!-- Considérations a11y : ARIA roles, keyboard nav, contraste, RTL. -->
|
||||
|
||||
## Alternatives écartées
|
||||
|
||||
## Effort estimé
|
||||
|
||||
- [ ] S (≤ 1j)
|
||||
- [ ] M (1 sem)
|
||||
- [ ] L (2-3 sem — RFC requise)
|
||||
- [ ] XL (1 mois+ — RFC + roadmap)
|
||||
@@ -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 — <!-- titre court -->
|
||||
|
||||
## Statut
|
||||
|
||||
- [ ] Draft
|
||||
- [ ] In review
|
||||
- [ ] Accepted
|
||||
- [ ] Rejected
|
||||
- [ ] Superseded by #...
|
||||
|
||||
## Auteur(s)
|
||||
|
||||
@…
|
||||
|
||||
## Date
|
||||
|
||||
YYYY-MM-DD
|
||||
|
||||
## Contexte
|
||||
|
||||
<!-- Pourquoi cette RFC ? Quel problème résout-elle ? Données utilisateur,
|
||||
contraintes business, contraintes techniques. -->
|
||||
|
||||
## Proposition
|
||||
|
||||
<!-- La solution proposée. Code, schémas, exemples. -->
|
||||
|
||||
## API publique (si applicable)
|
||||
|
||||
```tsx
|
||||
// avant
|
||||
<OldComponent prop="x" />
|
||||
|
||||
// après
|
||||
<NewComponent variant="x" />
|
||||
```
|
||||
|
||||
## Alternatives écartées
|
||||
|
||||
<!-- Ce qu'on a considéré et pourquoi on l'a écarté. -->
|
||||
|
||||
## 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
|
||||
|
||||
<!-- À remplir après discussion. Date + résumé des arguments. -->
|
||||
@@ -0,0 +1,45 @@
|
||||
## Résumé
|
||||
|
||||
<!-- 1-2 phrases. Le "pourquoi" plus que le "quoi" — le diff montre déjà le quoi. -->
|
||||
|
||||
## 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)
|
||||
|
||||
<!-- Lister précisément ce qui change, avec exemples avant/après. -->
|
||||
|
||||
## 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
|
||||
|
||||
<!-- Avant / après si modification visuelle. -->
|
||||
|
||||
## 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
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user