Aller au contenu principal

Installation

Choisissez votre framework ci-dessous. Les quatre chemins montent le même moteur, le même rendu DOM et la même feuille de style — tout vient de @dataflow-animator/core, et chaque liaison n'est qu'une fine couche au-dessus de son appel à mountPlayer.

La feuille de style n'est pas optionnelle

Aucune liaison n'embarque de CSS : vous importez toujours @dataflow-animator/core/styles.css, exactement une fois, n'importe où dans votre application. Sans elle, le balisage se monte et se mesure, mais rien n'a de taille, de couleur ni de transition — vous obtenez une boîte vide silencieuse.

Installer et utiliser​

npm install @dataflow-animator/react @dataflow-animator/core

react et react-dom (≥ 18) sont attendus en peerDependencies. Le cœur arrive tout seul, en dépendance ; installez-le explicitement quand même, puisque vous importez sa feuille de style par son nom.

import { DataFlowPlayer } from '@dataflow-animator/react';
import '@dataflow-animator/core/styles.css';

const spec = {
direction: 'left-to-right',
nodes: [
{ id: 'browser', type: 'laptop', text: 'Navigateur', lane: 1 },
{ id: 'api', type: 'server', text: 'API', lane: 2 },
],
packets: [
{
id: 'req',
kind: 'http_packet',
packet_content: { header: 'GET /users' },
},
],
timeline: [{ type: 'move', object: 'req', from: 'browser', to: 'api' }],
};

export default function Example() {
return <DataFlowPlayer spec={spec} />;
}
Vue, Svelte, Astro, Rails, Django…

Tout ce qui rend une balise HTML peut utiliser l'élément personnalisé — c'est tout son intérêt. Voir Paquets et liaisons pour la comparaison complète des quatre surfaces.

Dans Docusaurus​

Importez le CSS une seule fois dans src/css/custom.css puis utilisez le composant dans n'importe quel fichier MDX :

src/css/custom.css
@import '@dataflow-animator/core/styles.css';
docs/mon-article.mdx
import { DataFlowPlayer } from '@dataflow-animator/react';

<DataFlowPlayer spec={spec} mode="auto" />

Le thème auto (défaut) suit prefers-color-scheme ET un ancêtre [data-theme] (convention Docusaurus), donc le composant se synchronise automatiquement avec le bouton de thème de l'hôte.

Dans Next.js (App Router)​

Le composant utilise useState/useEffect : marquez le fichier appelant comme client component.

app/exemple/page.tsx
'use client';

import { DataFlowPlayer } from '@dataflow-animator/react';
import '@dataflow-animator/core/styles.css';

export default function Page() {
return <DataFlowPlayer spec={spec} />;
}

Depuis un CDN, sans étape de build​

Il n'existe volontairement aucun bundle autonome : en livrer un reviendrait à livrer une seconde copie du moteur, ce que ce découpage cherche précisément à éviter. Un CDN qui réécrit les spécificateurs de modules nus (esm.sh, jspm) se suffit à lui-même :

<link
rel="stylesheet"
href="https://esm.sh/@dataflow-animator/core/styles.css"
/>
<script type="module">
import 'https://esm.sh/@dataflow-animator/element';
</script>

<dataflow-player id="player" height="420"></dataflow-player>
<script type="module">
document.getElementById('player').spec = {
/* … */
};
</script>

Une import map fonctionne aussi, et garde une seule copie du cœur pour tous les modules qui la demandent — la recette est dans le README de l'élément.

Auto-complétion JSON dans VS Code​

Ajoutez cette configuration dans .vscode/settings.json pour activer l'auto-complétion et la validation inline sur tous vos fichiers *.dataflow.json :

.vscode/settings.json
{
"json.schemas": [
{
"fileMatch": ["*.dataflow.json"],
"url": "./node_modules/@dataflow-animator/core/schema.json"
}
]
}

Le même chemin fonctionne avec n'importe quel validateur compatible JSON Schema draft-07 (Ajv, ajv-cli, etc.). Si vous hébergez le schéma publiquement, il peut également être référencé depuis le JSON Schema Store.

SSR et hydratation​

Le lecteur ne rend aucun balisage côté serveur, quelle que soit la liaison. Il monte un moteur de rendu DOM framework-agnostique dans un effet client : le HTML statique ne contient qu'un emplacement aux bonnes dimensions, et le diagramme apparaît à l'hydratation. Aucune divergence d'hydratation possible — il n'y a rien à faire correspondre — et importer l'un de ces paquets côté serveur reste sûr : rien ne touche au DOM au niveau module.

Ce que cela coûte : une page prérendue affiche un emplacement à la place du diagramme. En React, cet emplacement n'est pas vide — il porte un indicateur de chargement, révélé seulement si l'attente dure assez longtemps pour mériter d'être signalée (la révélation est temporisée en CSS : une hydratation rapide ne fait rien clignoter). Son texte est la clé loading de labels.

Passez fallback pour y mettre le vôtre à la place — une image d'aperçu, une légende, un squelette. Il remplace entièrement l'indicateur :

<DataFlowPlayer spec={spec} fallback={<img src="/diagram.png" alt="…" />} />

NodeView se comporte de la même façon. <dataflow-player> et <dfa-player> sont client-only au même sens : ils ne rendent rien tant qu'ils n'ont pas atteint un navigateur, donc placez une image d'aperçu ou une légende autour de la balise s'il vous faut du contenu statique.