मुख्य सामग्री पर जाएँ

एम्बेडिंग

Clepit एडिटर या रेंडरर को किसी भी एप्लिकेशन में एकीकृत करना सीधा है: एक DOM कंटेनर ही पूरे नियंत्रण का केंद्र है।

एडिटर माउंट करना

Container एलिमेंट को एक 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` एक अनूठी container 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} />;
};

हर API कहाँ चलता है

Editor और Renderer लाइव DOM माउंट करते हैं, इसलिए वे केवल ब्राउज़र में चलते हैं: उनके लिए effects या use client निर्देश उपयोग करें। सर्वर आउटपुट को उनकी जरूरत नहीं: renderBlocks बिना किसी DOM के तैयार HTML बनाता है, नीचे देखें।

सर्वर कंपोनेंट के अंदर Editor.create या Renderer.render न बुलाएँ; इन्हें असली document चाहिए। सर्वर पर रेंडर करने के लिए इसके बजाय renderBlocks उपयोग करें।

सर्वर रेंडरिंग

renderBlocks उसी दस्तावेज़ को बिना DOM के तैयार HTML स्ट्रिंग में बनाता है, इसलिए सर्वर असली मार्कअप भेज सकता है: क्रॉलर उसे पढ़ते हैं और माउंट पर कुछ दोबारा पेंट नहीं होता। साथ में 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 या vanilla TS/JS उपयोग करें, सभी एक ही API का उपयोग करते हैं।