Fondations

04 — Ce qu'on copie depuis presentation-engine

Statut : fait · Phase : P1 · Mis à jour : 24/10/2026.

Source : the presentation-engine repository. Le code est commité en 4b86797. Seuls les fichiers de marque ne sont pas commités : ils sont copiés dans brand/ et versionnés ici. presentation-engine n'est pas modifié.

1. Méthode

  • Copie, pas git subtree. L'historique de presentation-engine est court (5 commits) et chaque fichier change de nom ou de package. On copie l'état 4b86797, et le dépôt d'origine est archivé en lecture seule. Le commit d'import cite le SHA source.
  • Un commit par package : feat(core): import from presentation-engine@<sha>, puis un commit de renommage, puis un commit d'adaptation à l'outillage (biome, tsdown, TS 6). Chaque commit doit passer pnpm check et les tests du package.
  • Renommages systématiques, appliqués au code, aux tests et à la doc :
AncienNouveau
@presentation/core / components / runtime / theme / cli / site-extension@recit/core / @recit/deck / @recit/deck/runtime / @recit/theme / @recit/cli / @recit/site-stories
commande presentationrecit
presentation.config.ts, defineConfigrecit.config.ts (ancien nom lu avec un avertissement de dépréciation), defineConfig
compileDeck, CompiledDeckcompileStory, Story (alias conservés)
presentationVitePlugin, presentationPluginrecitVitePlugin, recitPlugin
virtual:presentation-decksvirtual:recit-stories
PresentationEmbed, PresentationGalleryStoryEmbed, StoryGallery (anciens noms exportés en alias)
.site-presentation-wrapper.recit-wrapper
${file}.presentation-slide-N.jsx${file}.recit-scene-N.jsx
route /present/<slug>inchangée

2. Inventaire

2.1 Packages, à copier

SourceDestinationNotes
packages/core/src/parser/* (scanner, split-slides, frontmatter, markdown-ast, unified-pipeline)packages/core/src/parser/split-slides → split-scenes. Garder normalizeDirectiveFences (directives ::: imbriquées)
packages/core/src/compile/* (compile-deck, rehype-plugins, mdx)packages/core/src/compile/compileStory. Ajouter scene.id, scene.source, scene.attrs, scene.mdast (voir 02-architecture.md)
packages/core/src/config/* (schema, theme-css)packages/core/src/config/migrer la validation vers zod 4
packages/core/src/rules/* (accessibility, anti-overload, speech-time)packages/core/src/rules/—
packages/core/src/browser.ts, types/idementrée navigateur sans Shiki
packages/components/src/{slides,mdx/builtins.tsx} (sauf Cover, HtmlSlide)packages/components/src/composants génériques, réutilisés par tous les formats (03 §6, @recit/components)
packages/components/src/{deck,hooks,tools,animations,i18n.ts}, mdx/MdxSlide.tsx, slides/{Cover,HtmlSlide}.tsxpackages/formats/deck/src/propre au deck
packages/runtime/src/**packages/formats/deck/src/runtime/sous-chemin @recit/deck/runtime
packages/theme/src/*.css, index.tspackages/theme/src/site-compat.css reste ici
packages/cli/src/** (commands/, bundle/, config/, render/, templates/, assets.ts, diagnostics.ts, paths.ts, project.ts)packages/cli/src/commander. Ajouter les sous-commandes motion en phase vidéo
packages/site-extension/src/**, scripts/build-css.mjspackages/integrations/site-stories/adapter au framework de sites 0.93
packages/*/src/__tests__/**à côté de chaque source88 tests unitaires à garder verts

2.2 Site, exemples, tests et CI

SourceDestinationNotes
docs/recit.config.tsx (devient recit.config.ts), sidebar.ts, vite.config.ts, site.theme.css, tsconfig.jsonsites/docs/ (base de la config partagée @recit/site-kit)docs.recit.dev. Onglets : Documentation, Formats (deck, motion…), Components, Theme. Les démos partent sur sites/presentation
docs/pages/{documentation,components,theme}/** → sites/docs/pages/. docs/pages/demos/** et index.mdx → sites/presentation/pages/voir 07-domaines.mddéjà en anglais et en Lorem Ipsum. Remplacer « Presentation » par « Récit » dans les textes visibles
docs/src/components/* (Cards, Tutorial, SourceFile, ExampleHeader)packages/tools/site-kit/src/components/ (partagés par tous les sites)—
docs/public/logo-light.svg, logo-dark.svgremplacés par brand/logo/recit-*.svgvoir 01-assets.md
examples/{starter,tech-talk,showcase,pitch,course,mdx}examples/deck-{…}renommer les paquets recit-example-*
examples/site-integratedexamples/site-embedtest d'intégration du plugin
e2e/deck.e2e.ts, vitest.e2e.config.tse2e/recit/à aligner sur le playwright.config.ts racine du fork
.github/workflows/ci.ymljobs ajoutés à la CI du fork (fichier recit.yaml)lint, format, typecheck, test, build, e2e, limités aux projets Récit (nx affected)
Makefilenon copiéremplacé par des scripts racine recit:* et nx

2.3 Documents et marque

SourceDestinationNotes
idee.mdsites/plans/pages/archive/idee.mdhistorique du nom
FORK.mdadapté en NOTICE.md et UPSTREAM.md à la racine (phase 0 de la roadmap)remplacer « Presentation » par « Récit »
docs/_archives/* (spec Markdown, architecture, standards)sites/plans/pages/archive/à relire : la spec Markdown complète sert de base à sites/docs/pages/documentation/writing
proposal-*.png, docs/public/logo-proposals/recit/**brand/voir 01-assets.md

2.4 Ce qu'on ne copie pas

  • node_modules, .turbo, dist, pnpm-lock.yaml (régénéré par le fork), turbo.json, .oxlintrc.json, .oxfmtrc.json (le fork a déjà sa config, mais on y reporte l'exclusion **/*.mdx), .changeset/.
  • docs/undefined/, un dossier parasite produit par un build.
  • docs/dist/.
  • website/ : ancien site, non repris (remplacé par sites/*).
  • docs/public/logo-proposals/* hors recit/ (anciennes pistes), qui restent dans l'archive.

3. Adaptations obligatoires

  1. le framework de sites 0.86 → 0.93 :
    • relire les types de plugins exportés par @recit/site (packages/site/src/lib/core/plugins.ts) ;
    • vérifier getRoutes, getMdxComponents, handle.layout, l'API navigation (onglets, filter) et le format de logo.
  2. TS 6 et convention du fork : imports relatifs en .js, import type, types plutôt qu'interfaces, composants en fonctions anonymes. Adopter ces conventions pour les nouveaux fichiers. Pour le code importé, un passage biome suffit, sans réécriture manuelle.
  3. biome : corriger les erreurs. Désactiver localement (avec justification) les règles qui cassent le parseur, par exemple les regex du scanner.
  4. oxfmt : ajouter "**/*.mdx" aux ignorePatterns du fork, sans quoi oxfmt casse les pages MDX.
  5. Vite 8.1.5 (catalogue du fork) au lieu de ^8.3.5 : vérifier que recitVitePlugin n'utilise aucune API plus récente.
  6. Condition development dans les exports et resolve.conditions des sites et des exemples.
  7. Tests : intégrer au vitest.config.ts racine (projets @recit/core, @recit/deck…). Les e2e passent par le Playwright racine.

4. Critère de sortie

Depuis la racine du fork :

Code
pnpm install nx run-many -t build -p '@recit/*' 'sites/*' nx run-many -t test -p '@recit/*' pnpm check nx run docs:dev # docs.recit.dev en local, decks sur /present/<slug> nx run presentation:dev # presentation.recit.dev en local pnpm exec recit dev examples/deck-showcase/slides.md pnpm exec recit export --to pdf examples/deck-showcase/slides.md

On doit retrouver les 88 tests unitaires et les 7 e2e, et sites/docs + sites/presentation doivent reprendre visuellement presentation-engine/docs.