埋め込み
Clepit エディターまたはレンダラーをアプリに統合するのは簡単です: DOM コンテナが唯一の制御ポイントです。
エディターのマウント
コンテナ要素に id を付与し、`Editor.create({ containerId, ... })` を呼び出し、返された `EditorAPI` を保持して、破棄時に `Editor.destroy(containerId)` を呼び出します。
TypeScript
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');出力を読み取り専用でレンダリング
`Renderer.render({ containerId, data })` を呼び出します。以下の例は `DocsRenderer` コンポーネントの実際の React パターンを示しています: `useId` がユニークなコンテナ id を生成し、`useEffect` がレンダリングをトリガーします。
TSX
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} />;
};クライアントのみのレンダリング / SSR
Editor と Renderer はどちらも DOM 上で動作するため、ブラウザのみで実行されます: effects (`useEffect`) または `'use client'` ディレクティブを使用してください。SSR 中には動作しません。
`Editor.create` や `Renderer.render` を `useEffect` の外部またはサーバーコンポーネント内で呼び出さないでください。"document is not defined" エラーが発生します。
フレームワーク非依存
コア @clepit/core パッケージは純粋な TypeScript です。React への依存はありません。React、Vue、Svelte、Angular、あるいはバニラ TS/JS を使用しても、すべて同じ API を利用します。