Démarrer
L'éditeur se monte dans un élément et prend la main dessus. Le document estnon contrôlé par conception : reconstruire la vue à chaque rendu détruirait le caret et l'historique, donc le contenu initial est lu une seule fois au montage et l'éditeur en est ensuite propriétaire.
Vanilla
Le chemin de référence : les liaisons de frameworks font exactement ceci.
import { Editor, createDoc } from '@nbe/core';
import { EditorView } from '@nbe/dom';
import '@nbe/dom/style.css';
const editor = new Editor({ doc: createDoc() });
const view = new EditorView(document.getElementById('app')!, editor);
// tout changement passe par ici
editor.on((change) => console.log(change.ops));React
import { BlockEditor } from '@nbe/react';
import '@nbe/dom/style.css';
export function App() {
return <BlockEditor onChange={(doc) => save(doc)} />;
}Le hook useEditor() est disponible si vous voulez fournir le conteneur vous-même ; il renvoie { editor, ref }.
Vue
<script setup lang="ts">
import { BlockEditor } from '@nbe/vue';
import '@nbe/dom/style.css';
</script>
<template>
<BlockEditor @change="save" />
</template>Svelte
La liaison Svelte est une action, pas un composant : c'est la forme idiomatique pour un élément dont un tiers possède le contenu.
<script lang="ts">
import { blockEditor } from '@nbe/svelte';
import '@nbe/dom/style.css';
</script>
<div use:blockEditor={{ onChange: save }}></div>Les trois liaisons ont exactement deux dépendances,@nbe/core et @nbe/dom, le framework restant une dépendance de pair. C'est vérifié en intégration continue : une troisième dépendance signifierait que la fonctionnalité appartient à la couche du dessous.