মূল কন্টেন্টে যান

এম্বেডিং

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} />;
};

কোন 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 ব্যবহার করে।