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'état4b86797, 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 passerpnpm checket les tests du package. - Renommages systématiques, appliqués au code, aux tests et à la doc :
| Ancien | Nouveau |
|---|---|
@presentation/core / components / runtime / theme / cli / site-extension | @recit/core / @recit/deck / @recit/deck/runtime / @recit/theme / @recit/cli / @recit/site-stories |
commande presentation | recit |
presentation.config.ts, defineConfig | recit.config.ts (ancien nom lu avec un avertissement de dépréciation), defineConfig |
compileDeck, CompiledDeck | compileStory, Story (alias conservés) |
presentationVitePlugin, presentationPlugin | recitVitePlugin, recitPlugin |
virtual:presentation-decks | virtual:recit-stories |
PresentationEmbed, PresentationGallery | StoryEmbed, 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
| Source | Destination | Notes |
|---|---|---|
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/ | idem | entré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}.tsx | packages/formats/deck/src/ | propre au deck |
packages/runtime/src/** | packages/formats/deck/src/runtime/ | sous-chemin @recit/deck/runtime |
packages/theme/src/*.css, index.ts | packages/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.mjs | packages/integrations/site-stories/ | adapter au framework de sites 0.93 |
packages/*/src/__tests__/** | à côté de chaque source | 88 tests unitaires à garder verts |
2.2 Site, exemples, tests et CI
| Source | Destination | Notes |
|---|---|---|
docs/recit.config.tsx (devient recit.config.ts), sidebar.ts, vite.config.ts, site.theme.css, tsconfig.json | sites/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.md | dé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.svg | remplacés par brand/logo/recit-*.svg | voir 01-assets.md |
examples/{starter,tech-talk,showcase,pitch,course,mdx} | examples/deck-{…} | renommer les paquets recit-example-* |
examples/site-integrated | examples/site-embed | test d'intégration du plugin |
e2e/deck.e2e.ts, vitest.e2e.config.ts | e2e/recit/ | à aligner sur le playwright.config.ts racine du fork |
.github/workflows/ci.yml | jobs ajoutés à la CI du fork (fichier recit.yaml) | lint, format, typecheck, test, build, e2e, limités aux projets Récit (nx affected) |
Makefile | non copié | remplacé par des scripts racine recit:* et nx |
2.3 Documents et marque
| Source | Destination | Notes |
|---|---|---|
idee.md | sites/plans/pages/archive/idee.md | historique du nom |
FORK.md | adapté 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é parsites/*).docs/public/logo-proposals/*horsrecit/(anciennes pistes), qui restent dans l'archive.
3. Adaptations obligatoires
- 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'APInavigation(onglets,filter) et le format delogo.
- relire les types de plugins exportés par
- 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. - biome : corriger les erreurs. Désactiver localement (avec justification) les règles qui cassent le parseur, par exemple les regex du scanner.
- oxfmt : ajouter
"**/*.mdx"auxignorePatternsdu fork, sans quoi oxfmt casse les pages MDX. - Vite 8.1.5 (catalogue du fork) au lieu de
^8.3.5: vérifier querecitVitePluginn'utilise aucune API plus récente. - Condition
developmentdans lesexportsetresolve.conditionsdes sites et des exemples. - Tests : intégrer au
vitest.config.tsracine (projets@recit/core,@recit/deck…). Les e2e passent par le Playwright racine.
4. Critère de sortie
Depuis la racine du fork :
Code
On doit retrouver les 88 tests unitaires et les 7 e2e, et sites/docs + sites/presentation
doivent reprendre visuellement presentation-engine/docs.