FSHSP-125 Storybook embarqué : le projet consommateur a sa propre doc - #45
Merged
Conversation
Un projet en sources copiées possédait son code mais aucune doc : il lui restait un Storybook hébergé qui décrit nos composants, pas ses copies éditées. `--with-storybook` pose désormais, à côté de chaque composant, sa story et sa page MDX, plus la chaîne qui les alimente — `docs.config.mjs` et le bloc `<ConfigTable>` — pour que les tables « Theming » lisent les `.scss` du projet et décrivent ses valeurs. Les imports suivent les copies, comme pour les sources. Le MDX passe par une réécriture propre : elle ignore les blocs de code, qui sont des exemples destinés au lecteur et non des imports à résoudre — les réécrire produirait des chemins relatifs faux, dépendants d'un fichier que nous ne connaissons pas. `docs.config.mjs` est copié tel quel et reconnaît seul sa disposition, monorepo ou projet consommateur : un seul script à maintenir. Désactivé par défaut, parce que sans Storybook installé ce sont des fichiers qui importent des packages absents. Le choix est retenu dans `ui-kit.json`, d'où `update` le relit — sans quoi une mise à jour poserait de la doc chez qui n'en veut pas. La configuration Storybook elle-même reste à poser. Vérifié sur un arbre consommateur complet : 53 composants copiés, 53 MDX compilés par le loader de Storybook, 55 composants relevés par la chaîne de doc, aucun import du kit résiduel.
…mer project
La phase 1 posait la doc des composants sans de quoi la lire. `ng add
--with-storybook` écrit maintenant la configuration : `storybook/` (main,
preview, thème du manager, sélecteur de marque, pages Foundations,
Spécifications et Configuration), les cibles `angular.json`, les
devDependencies et les scripts npm. Un `npm run storybook` suffit ensuite.
Deux natures de fichier, deux provenances. Ce qui vaut tel quel des deux
côtés est copié depuis ce dépôt via les assets, donc reste en phase sans
recopie manuelle ; ce qui doit diverger — globs, couplages de la preview,
marque du manager, tsconfig — est un scaffold écrit pour le consommateur.
`restore-component-metadata.ts` ne part pas : il répare les annotations que
le linker retire du package compilé, et là-bas les stories visent des
sources. Le bloc `ui-image` de la preview n'est écrit que si le composant a
été copié, sinon la preview entière tomberait sur un import mort.
Les liens `parameters.design` vers notre Figma sont retirés à la copie
(décision produit) : le consommateur n'y a pas accès, l'onglet Design
n'ouvrirait qu'une porte fermée.
Quatre pièges levés en montant un vrai projet Angular 22 de zéro, tous
invisibles sur un arbre virtuel :
- le CLI reformate à Prettier ce qu'un schematic écrit, et `{/* … */}` en
ressort en `{/_ … _/}` : l'en-tête de traçabilité des MDX passe par un
`export const`, qui traverse ce formatage sans dommage ;
- `@storybook/angular` réclame des peers qu'un projet moderne n'a plus
(`build-angular`, `platform-browser-dynamic`, `animations`) — sans elles
au package.json, npm résout un majeur antérieur et l'install échoue ;
- le builder Storybook valide les assets du `browserTarget` contre son
schéma, qui exige `output` — `ng new` ne l'écrit plus ;
- `Colors.mdx` importe `tokens.manifest.json` : les chemins du monorepo sont
réadressés, et `tokens:build` est chaîné avant le build plutôt que laissé
au `postinstall`.
Vérifié de bout en bout : `ng new` puis un seul `ng add --with-storybook
--all`, `npm run build-storybook` réussi, 579 stories et 64 pages indexées,
tables Theming résolues sur les SCSS du projet et API renseignée par Compodoc.
L'option faisait double emploi avec l'écran qui s'ouvre deux secondes plus tard : la sélection s'y coche à la barre d'espace, `a` prend tout, `i` inverse. Elle était de surcroît le seul chemin cassé de la commande — le CLI Angular transmettait une chaîne là où le schéma attend un tableau, et `ng add --components=ui-button` s'arrêtait sur « Data path "/components" must be array ». Une option qui n'apporte rien et ne marche pas ne se répare pas, elle s'enlève. `--all` reste, pour l'installation non interactive. `--components` reste sur `ng generate …:add`, où l'usage scripté a du sens. Les deux README décrivent maintenant les touches du prompt, puisque c'est désormais par là que passe une sélection partielle.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Un projet en sources copiées possédait son code mais aucune doc : il lui restait un Storybook hébergé qui décrit nos composants, pas ses copies éditées.
ng add @4sh/ui-kit-schematics --with-storybooklui donne le sien.Ce qui est posé
storybook/(main, preview, thème du manager, sélecteur de marque, pages Foundations / Spécifications / Configuration), ciblesangular.json, devDependencies, scripts npm.scripts/docs.config.mjset le bloc<ConfigTable>.Deux choses font que cette doc appartient au projet. Les tables Theming sont lues sur ses propres
.scssau build : elles décrivent ses valeurs, rebranding compris. Et les globs couvrent toutsrc/app/shared/components/**— une story écrite à côté d'un composant maison apparaît sans toucher à la configuration.Désactivé par défaut : sans Storybook, story et MDX sont deux fichiers qui importent des packages absents. Le choix est retenu dans
ui-kit.json, etupdates'y tient.Décisions
Introduction,NpmPackageetOverviewparlent du kit lui-même et restent ici.--componentsretiré deng add: le prompt qui s'ouvre deux secondes plus tard fait le même travail à la barre d'espace, et c'était le seul chemin cassé de la commande (le CLI transmettait une chaîne là où le schéma attend un tableau). L'option reste surng generate …:add, pour l'usage scripté.Quatre pièges levés en montant un vrai projet
Aucun n'était visible sur un arbre virtuel :
{/* … */}en ressort en{/_ … _/}, MDX invalide, et l'indexeur Storybook refusait les 53 pages. L'en-tête de traçabilité passe par unexport const.@storybook/angularréclame des peers qu'un projet Angular moderne n'a plus (build-angular,platform-browser-dynamic,animations) : sans elles aupackage.json, npm résout un majeur antérieur et l'install échoue.animationsest le plus retors — le build passe, et c'est au premier rendu que tout s'arrête.outputsur les assets dubrowserTarget, queng newn'écrit plus.Colors.mdximportetokens.manifest.json: chemins du monorepo réadressés, ettokens:buildchaîné avant le build plutôt que laissé aupostinstall.Vérification
ng newsur Angular 22, puis un seulng add --with-storybook --all, puisnpm run build-storybook: build réussi, 579 stories et 64 pages indexées. Rendu contrôlé dans le navigateur — la story s'affiche, l'onglet API est renseigné par Compodoc, la table Theming résout ses valeurs sur les SCSS du projet (44px, 16px), la page Colors lit le manifeste de tokens du projet.Reste à trancher (hors périmètre)
ui-icon.mdximportent@4sh/ui-kit, un package que le consommateur n'a pas : c'est de la prose à reprendre côté kit, pas un import à résoudre.🤖 Generated with Claude Code