تخطَّ إلى المحتوى الرئيسي

الأدلة

التضمين

دمج محرر Clepit أو أداة العرض في أي تطبيق أمر بسيط: حاوية DOM هي وحدة التحكم الكاملة.

تركيب المحرر

أعطِ عنصر الحاوية معرِّفًا، استدعِ `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 })`. يوضح المثال أدناه نمط React الفعلي من مكوِّن `DocsRenderer`: يُنشئ `useId` معرِّف حاوية فريدًا ويُشغِّل `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} />;
};

أين تعمل كل واجهة

يقوم Editor وRenderer بتركيب DOM حي، لذا يعملان في المتصفح فقط: استخدم لهما التأثيرات أو توجيه use client. أما إخراج الخادم فلا يحتاجهما: يرسم renderBlocks ترميز HTML جاهزًا دون أي DOM، كما هو موضح أدناه.

لا تستدعِ Editor.create أو Renderer.render داخل مكوّن خادم؛ فهما يحتاجان document حقيقيًا. للرسم على الخادم استخدم renderBlocks بدلًا منهما.

العرض على الخادم

يرسم renderBlocks المستند نفسه إلى سلسلة HTML جاهزة دون DOM، فيرسل الخادم ترميزًا حقيقيًا: تقرؤه الزواحف ولا يُعاد رسم شيء عند التركيب. قدّم pageStylesheet() بجانبه، واستدعِ activateBlocks بعد التركيب.

TypeScript
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);
هل تستخدم React؟ تغلّف @clepit/react هذا المسار نفسه باسم ClepitContent، مكوّن يبدأ من الخادم؛ راجع صفحة React.

مستقل عن الإطار

حزمة @clepit/core الأساسية هي TypeScript خالصة، لا توجد تبعية على React. سواء استخدمت React أو Vue أو Svelte أو Angular أو TypeScript/JavaScript بسيطًا، جميعها تستخدم نفس الواجهة البرمجية.