Перейти к основному содержанию

Темы

Темы Clepit управляются CSS-переменными. Задайте theme: "auto" | "light" | "dark" или передайте явные themeOverrides.

theme

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

Предустановка auto следует цветовой схеме операционной системы через prefers-color-scheme и переключается в реальном времени при изменении.

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

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

ThemeTokens

Все 22 токена необязательны. Всё, что вы опустите, возвращается к выбранной предустановке.

ТокенУправляет
bgОсновной фон редактора / рендерера
surfaceВторичная поверхность: командные панели, заголовки строки режима
surface2Третичная поверхность: фоны меню при наведении
textОсновной цвет текста
textMutedВторичный текст: метки, запасные абзацы
textSubtleТонкий текст: тусклые элементы, маркеры дат
borderОсновной цвет рамки
borderSubtleТонкая рамка: разделители без акцента
primaryОсновной цвет бренда: кнопки, якорные ссылки
primaryHoverОсновной цвет при наведении: состояние hover/focus кнопки
primaryBgТонированный основной фон: кольца фокуса
markerЦвет выделения текста: встроенный инструмент маркера
selectionBgФон выделения текста
blockHighlightBgФон активного блока
successЦвет текста/иконки состояния успеха
successBgТонированный фон успеха: информационные блоки
warningЦвет текста/иконки состояния предупреждения
warningBgТонированный фон предупреждения
errorЦвет текста/иконки состояния ошибки
errorBgТонированный фон ошибки
infoЦвет текста/иконки информационного состояния
infoBgТонированный информационный фон
codeBgФон блока кода.
codeTextЦвет текста по умолчанию в блоках кода.
codeBorderРамка блока кода.
codeGutterЦвет полосы номеров строк.
codeSelectionBgФон выделенного текста в блоках кода.
codeCommentЦвет синтаксиса для комментариев.
codeKeywordЦвет синтаксиса для ключевых слов.
codeStringЦвет синтаксиса для строк.
codeNumberЦвет синтаксиса для чисел.
codeFunctionЦвет синтаксиса для имён функций.
codeTypeЦвет синтаксиса для имён типов.
codePunctuationЦвет синтаксиса для знаков препинания.

themeOverrides

Переопределите любое подмножество токенов. Редактор внедряет их как CSS-переменные, ограниченные его контейнером.

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

Пользовательские свойства CSS

Каждый токен сопоставляется с переменной --clepit-*, ограниченной контейнером редактора. Вы можете читать или расширять их из собственной таблицы стилей.

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 и classNames для каждого блока

RendererConfig.styles передаёт CSS-свойства, не зависящие от фреймворка, напрямую в корневой элемент компонента. RendererConfig.classNames добавляет дополнительные CSS-классы, не затрагивая встроенные стили. Оба могут использоваться вместе.

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

Подпишитесь на изменения токенов во время выполнения. Полезно для синхронизации окружающего интерфейса с переключением темы редактора.

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();
Передача themeOverrides для каждого монтирования позволяет одному приложению размещать несколько по-разному оформленных редакторов на одной странице.