Ir para o conteúdo principal

Configuração

EditorConfig e RendererConfig são os pontos de entrada para toda personalização. Passe um deles para Editor.create() ou Renderer.render() respectivamente. Apenas containerId (e data para o renderer) são obrigatórios; todas as outras opções têm padrões seguros.

EditorConfig

Passe EditorConfig como único argumento para Editor.create(). O containerId obrigatório deve corresponder a um id de elemento DOM existente.

OpçãoTipoObrigatórioDescrição
containerIdstringSimID do elemento DOM que hospedará o editor. Deve existir no DOM antes de Editor.create() ser chamado.
maxHeightnumberNãoAltura máxima do editor em pixels. Defina como 0 (o padrão) para sem limite de altura.
minHeightnumberNãoAltura mínima do editor em pixels. Padrão é 300.
onChange(data: EditorData) => voidNãoCallback acionado sempre que o documento muda. Recebe o snapshot completo do EditorData.
onReady() => voidNãoCallback acionado uma vez que o editor está completamente inicializado e pronto para aceitar chamadas de API.
placeholderstringNãoTexto de espaço reservado exibido quando o editor está vazio. Padrão é 'Start writing...'.
initialDataEditorDataNãoEditorData pré-preenchida para carregar quando o editor monta.
initialView'edit' | 'preview' | 'json'NãoModo de exibição inicial. Um dos valores: edit, preview, json. Padrão é 'edit'.
allowJsonViewEditingbooleanNãoQuando true, a visualização JSON é editável e as alterações se propagam de volta ao documento. Padrão é false.
marginsBlockMarginsNãoMargem superior e inferior global (em pixels) aplicada a cada bloco. Configurações por bloco têm precedência.
stylesEditorStylesNãoObjeto EditorStyles para personalização CSS detalhada do chrome do editor (barras de ferramentas, diálogos, controles).
classNamesEditorClassNamesNãoObjeto EditorClassNames para anexar nomes de classes CSS a elementos do chrome do editor.
imageUploaderUploadFunctionNãoFunção assíncrona que carrega um arquivo de imagem e retorna uma string de URL pública.
audioUploaderUploadFunctionNãoFunção assíncrona que carrega um arquivo de áudio e retorna uma string de URL pública.
videoUploaderUploadFunctionNãoFunção assíncrona que carrega um arquivo de vídeo e retorna uma string de URL pública.
theme'auto' | 'light' | 'dark'NãoEsquema de cores. Um dos valores: auto (segue o sistema), light, dark. Padrão é auto.
themeOverrides{ light?: ThemeTokens; dark?: ThemeTokens }NãoSubstituições de token por modo. Forneça mapas de tokens light e/ou dark para personalizar cores sem substituir o tema completo.
TypeScript
import { Editor } from '@clepit/core';

const editor = Editor.create({
  containerId: 'editor',
  minHeight: 400,
  placeholder: 'Start writing...',
  theme: 'auto',
  onChange: data => console.log(data),
  onReady: () => console.log('Editor ready'),
  imageUploader: async file => {
    const form = new FormData();
    form.append('file', file);
    const res = await fetch('/api/upload', { body: form, method: 'POST' });
    const { url } = await res.json();
    return url;
  },
});

RendererConfig

Passe RendererConfig como único argumento para Renderer.render(). Tanto containerId quanto data são obrigatórios.

OpçãoTipoObrigatórioDescrição
containerIdstringSimID do elemento DOM onde o output renderizado será injetado.
dataEditorDataSimO documento EditorData a ser renderizado. Obrigatório.
marginsBlockMarginsNãoMargem superior e inferior global (em pixels) aplicada a cada bloco renderizado.
stylesBlockStylesNãoMapa BlockStyles para personalização CSS por tipo de bloco do output renderizado.
classNamesBlockClassNamesNãoMapa BlockClassNames para nomes de classes CSS por tipo de bloco no output renderizado.
editorClassNamesEditorClassNamesNãoEditorClassNames passados para blocos que renderizam componentes interativos (ex. classNames de tooltip para parágrafos).
configsPartial<BlockTypeOutputConfigs>NãoMapa parcial de objetos OutputConfig por bloco. Cada entrada pode definir margens no nível de bloco e nomes de classes de tooltip.
theme'auto' | 'light' | 'dark'NãoEsquema de cores. Um dos valores: auto, light, dark.
themeOverrides{ light?: ThemeTokens; dark?: ThemeTokens }NãoSubstituições de token por modo para o output renderizado.
TypeScript
import { Renderer } from '@clepit/core';
import type { EditorData } from '@clepit/core';

const data: EditorData = await fetch('/api/content/123').then(r => r.json());

Renderer.render({
  containerId: 'output',
  data,
  theme: 'auto',
  margins: { bottom: 16, top: 16 },
});

Estilização no nível de bloco

Tanto EditorConfig quanto RendererConfig aceitam styles, classNames e configs indexados por tipo de bloco. Use-os para substituições direcionadas; consulte a página Themes para a referência completa por token.

TypeScript
import { Editor, Renderer } from '@clepit/core';
import type { BlockStyles, BlockClassNames, EditorStyles } from '@clepit/core';

const editorStyles: EditorStyles = {
  blockToolbar: { container: { borderRadius: '8px' } },
};

const blockStyles: BlockStyles = {
  header: { h1: { fontFamily: 'Georgia, serif' } },
  paragraph: { lineHeight: '1.75' },
  table: { cell: { padding: '8px 12px' } },
};

const blockClassNames: BlockClassNames = {
  paragraph: 'prose-paragraph',
  header: { h1: 'prose-h1', h2: 'prose-h2' },
  alert: { info: 'alert-info', error: 'alert-error' },
};

Editor.create({
  containerId: 'editor',
  styles: editorStyles,
});

Renderer.render({
  containerId: 'output',
  data,
  styles: blockStyles,
  classNames: blockClassNames,
});