Ir para o conteúdo principal

Incorporação

Integrar o editor ou renderizador do Clepit em qualquer aplicação é direto: um contêiner DOM é o único ponto de controle.

Montando o editor

Dê um id ao elemento container, chame `Editor.create({ containerId, ... })`, guarde o `EditorAPI` retornado e chame `Editor.destroy(containerId)` na desmontagem.

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');

Renderizando saída somente leitura

Chame `Renderer.render({ containerId, data })`. O exemplo abaixo mostra o padrão React real do componente `DocsRenderer`: `useId` gera um id de container único e `useEffect` aciona a renderização.

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

Onde cada API roda

O Editor e o Renderer montam DOM vivo, então rodam no navegador: use effects ou a diretiva use client para eles. A saída de servidor não precisa deles: o renderBlocks desenha HTML pronto sem DOM algum, coberto abaixo.

Não chame Editor.create nem Renderer.render dentro de um componente de servidor; eles precisam de um document real. Para renderizar no servidor, use renderBlocks.

Renderização no servidor

O renderBlocks desenha o mesmo documento em uma string HTML pronta sem DOM, então o servidor envia marcação real: crawlers a leem e nada repinta na montagem. Sirva pageStylesheet() junto, e chame activateBlocks após a montagem.

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);
Usando React? O @clepit/react empacota exatamente este pipeline como ClepitContent, um componente server-first; veja a página React.

Independente de framework

O pacote principal @clepit/core é TypeScript puro, sem dependência de React. Seja usando React, Vue, Svelte, Angular ou TS/JS puro, todos usam a mesma API.