Penyematan
Mengintegrasikan editor atau renderer Clepit ke dalam aplikasi apa pun sangatlah mudah: satu kontainer DOM adalah satu-satunya titik kendali.
Memasang editor
Berikan id pada elemen kontainer, panggil `Editor.create({ containerId, ... })`, simpan `EditorAPI` yang dikembalikan, dan panggil `Editor.destroy(containerId)` saat pembersihan.
import { Editor } from '@clepit/core';
import type { EditorAPI } from '@clepit/core';
// 1. Give your container a stable id
// <div id="my-editor"></div>
// 2. Create the editor and hold the returned API
const editor: EditorAPI = Editor.create({
containerId: 'my-editor',
minHeight: 400,
placeholder: 'Start writing...',
theme: 'auto',
onChange: data => console.log(data),
onReady: () => console.log('Editor ready'),
});
// 3. Extract content any time
const data = editor.data.extract();
// 4. Destroy on teardown (e.g. component unmount)
Editor.destroy('my-editor');Merender output secara read-only
Panggil `Renderer.render({ containerId, data })`. Contoh di bawah menunjukkan pola React nyata dari komponen `DocsRenderer`: `useId` menghasilkan id kontainer unik dan `useEffect` memicu render.
import { Renderer } from '@clepit/core';
import type { EditorData } from '@clepit/core';
import { useEffect, useId } from 'react';
type Props = { content: EditorData };
const ReadOnlyView = ({ content }: Props) => {
// useId produces a stable, unique id per component instance
const containerId = useId().replace(/[^a-z0-9]/gi, '');
useEffect(() => {
Renderer.render({
containerId,
data: content,
margins: { bottom: 0, top: 0 },
});
}, [containerId, content]);
return <div id={containerId} />;
};Di mana tiap API berjalan
Editor dan Renderer memasang DOM hidup, jadi keduanya berjalan di peramban: gunakan effects atau direktif use client untuk mereka. Keluaran server tidak membutuhkannya: renderBlocks menggambar HTML jadi tanpa DOM sama sekali, dibahas di bawah.
Render di server
renderBlocks menggambar dokumen yang sama menjadi string HTML jadi tanpa DOM, sehingga server dapat mengirim markup asli: crawler membacanya dan tidak ada yang digambar ulang saat mount. Sajikan pageStylesheet() bersamanya, dan panggil activateBlocks setelah mount.
import { activateBlocks, pageStylesheet, renderBlocks } from '@clepit/core';
// On the server: finished HTML, no DOM needed
const html = renderBlocks(doc.blocks);
const css = pageStylesheet();
// In the browser, after mount: wire the interactive blocks
const dispose = activateBlocks(container, doc.blocks);Tidak bergantung pada framework
Paket inti @clepit/core adalah TypeScript murni, tanpa ketergantungan React. Baik menggunakan React, Vue, Svelte, Angular, maupun vanilla TS/JS, semuanya menggunakan API yang sama.