Ir para o conteúdo principal

Temas

Os temas do Clepit são controlados por variáveis CSS. Defina theme: "auto" | "light" | "dark", ou passe themeOverrides explícitos.

theme

TypeScript
// EditorConfig / RendererConfig
theme?: 'auto' | 'light' | 'dark'

A predefinição auto segue o esquema de cores do sistema operacional via prefers-color-scheme e alterna em tempo real na mudança.

TypeScript
import { Editor } from '@clepit/core';

Editor.create({ containerId: 'editor', theme: 'auto' });

ThemeTokens

Todos os 22 tokens são opcionais. Qualquer um que você omitir volta para a predefinição selecionada.

TokenControla
bgFundo principal do editor / renderizador
surfaceSuperfície secundária: painéis de comando, cabeçalhos da barra de modo
surface2Superfície terciária: fundos de menus de hover
textCor de texto principal
textMutedTexto secundário: rótulos, parágrafos de fallback
textSubtleTexto sutil: elementos esmaecidos, marcadores de data
borderCor de borda principal
borderSubtleBorda sutil: divisores sem ênfase
primaryCor da marca principal: botões, links de âncora
primaryHoverCor de hover principal: estado hover/focus do botão
primaryBgFundo primário tingido: anéis de foco
markerCor de realce de texto: ferramenta inline marcador
selectionBgFundo de seleção de texto
blockHighlightBgFundo do bloco ativo
successCor de texto/ícone do estado de sucesso
successBgFundo tingido de sucesso: caixas de notificação
warningCor de texto/ícone do estado de aviso
warningBgFundo tingido de aviso
errorCor de texto/ícone do estado de erro
errorBgFundo tingido de erro
infoCor de texto/ícone do estado informativo
infoBgFundo tingido informativo
codeBgFundo do bloco de código.
codeTextCor padrão do texto dentro de blocos de código.
codeBorderBorda do bloco de código.
codeGutterCor da calha dos números de linha.
codeSelectionBgFundo do texto selecionado em blocos de código.
codeCommentCor de sintaxe para comentários.
codeKeywordCor de sintaxe para palavras-chave.
codeStringCor de sintaxe para strings.
codeNumberCor de sintaxe para números.
codeFunctionCor de sintaxe para nomes de funções.
codeTypeCor de sintaxe para nomes de tipos.
codePunctuationCor de sintaxe para pontuação.

themeOverrides

Substitua qualquer subconjunto de tokens. O editor os injeta como variáveis CSS com escopo no seu contêiner.

TypeScript
// themeOverrides accepts separate light and dark token sets.
// Both keys are optional — omit one to use the preset for that mode.
Editor.create({
  containerId: 'editor',
  theme: 'auto',
  themeOverrides: {
    light: {
      primary: '#5b5bff',
      primaryHover: '#4747e6',
      bg: '#ffffff',
      text: '#0a0a0a',
    },
    dark: {
      primary: '#7c7cff',
      primaryHover: '#9494ff',
      bg: '#161b22',
      text: 'rgba(240, 246, 252, 0.92)',
    },
  },
});

Propriedades personalizadas de CSS

Cada token é mapeado para uma variável --clepit-* com escopo no contêiner do editor. Você pode lê-los ou estendê-los a partir da sua própria folha de estilo.

CSS
/* Every ThemeToken maps to a --clepit-* CSS variable.
   Variables are scoped to .clepit-editor, .clepit-renderer-content, and body[data-clepit-theme]. */

--clepit-bg
--clepit-surface
--clepit-surface-2
--clepit-text
--clepit-text-muted
--clepit-text-subtle
--clepit-border
--clepit-border-subtle
--clepit-primary
--clepit-primary-hover
--clepit-primary-bg
--clepit-marker
--clepit-selection-bg
--clepit-block-highlight-bg
--clepit-success
--clepit-success-bg
--clepit-warning
--clepit-warning-bg
--clepit-error
--clepit-error-bg
--clepit-info
--clepit-info-bg
--clepit-code-bg
--clepit-code-text
--clepit-code-border
--clepit-code-gutter
--clepit-code-selection-bg
--clepit-code-comment
--clepit-code-keyword
--clepit-code-string
--clepit-code-number
--clepit-code-function
--clepit-code-type
--clepit-code-punctuation
CSS
#editor {
  color: var(--clepit-text);
  background: var(--clepit-bg);
  --my-surface: var(--clepit-surface-2);
  border: 1px solid var(--clepit-border);
}

styles e classNames por bloco

RendererConfig.styles transfere propriedades CSS independentes de framework diretamente para o elemento raiz do componente. RendererConfig.classNames adiciona classes CSS extras sem tocar nos estilos embutidos. Ambos podem ser combinados.

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

const styles: BlockStyles = {
  // alert block — keyed by variant
  alert: {
    error: { borderRadius: '8px', padding: '12px 16px' },
    info: { borderRadius: '8px', padding: '12px 16px' },
  },
  // header block — keyed by level
  header: {
    h1: { fontFamily: 'Georgia, serif' },
    h2: { fontFamily: 'Georgia, serif' },
  },
  // paragraph block — flat CSSProperties
  paragraph: { lineHeight: '1.75' },
  // table block — sub-element keys
  table: { cell: { padding: '8px 12px' } },
  // code block — sub-element keys
  code: { container: { borderRadius: '6px' } },
};

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

Renderer.create({ containerId: 'output', data, styles, classNames });

StyleManager.subscribe

Inscreva-se nas alterações de tokens em tempo de execução. Útil para sincronizar a interface ao redor com as trocas de tema do editor.

TypeScript
import { StyleManager } from '@clepit/core';

const unsubscribe = StyleManager.subscribe(theme => {
  // theme is 'light' | 'dark' — sync surrounding UI
  document.documentElement.setAttribute('data-theme', theme);
});

// later — clean up when the component unmounts
unsubscribe();
Fornecer themeOverrides por montagem permite que o mesmo app entregue vários editores com temas diferentes na mesma página.