Zum Hauptinhalt springen

Themes

Clepit-Themes werden über CSS-Variablen gesteuert. Setzen Sie theme: "auto" | "light" | "dark" oder übergeben Sie explizite themeOverrides.

theme

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

Die Voreinstellung auto folgt dem Farbschema des Betriebssystems über prefers-color-scheme und wechselt bei Änderungen live.

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

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

ThemeTokens

Alle 22 Tokens sind optional. Alles, was Sie weglassen, fällt auf die ausgewählte Voreinstellung zurück.

TokenSteuert
bgHaupthintergrundfarbe des Editors / Renderers
surfaceSekundäre Oberfläche: Befehlspanele, Modus-Leisten-Header
surface2Tertiäre Oberfläche: Hover-Menü-Hintergründe
textPrimäre Textfarbe
textMutedSekundärer Text: Beschriftungen, Fallback-Absätze
textSubtleSubtiler Text: gedämpfte Elemente, Datummarkierungen
borderPrimäre Rahmenfarbe
borderSubtleSubtile Rahmenlinie: nicht hervorgehobene Trennlinien
primaryPrimäre Markenfarbe: Schaltflächen, Ankerlinks
primaryHoverPrimäre Hover-Farbe: Hover/Fokus-Zustand des Buttons
primaryBgAbgetönter primärer Hintergrund: Fokusringe
markerTexthervorhebungsfarbe: Marker-Inline-Tool
selectionBgTextauswahl-Hintergrund
blockHighlightBgAktiver Block-Hintergrund
successErfolgs-Zustand Text-/Symbolfarbe
successBgAbgetönter Erfolgs-Hintergrund: Benachrichtigungsfelder
warningWarn-Zustand Text-/Symbolfarbe
warningBgAbgetönter Warn-Hintergrund
errorFehler-Zustand Text-/Symbolfarbe
errorBgAbgetönter Fehler-Hintergrund
infoInfo-Zustand Text-/Symbolfarbe
infoBgAbgetönter Info-Hintergrund
codeBgHintergrund des Codeblocks.
codeTextStandard-Textfarbe in Codeblöcken.
codeBorderRahmen des Codeblocks.
codeGutterFarbe der Zeilennummern-Leiste.
codeSelectionBgHintergrund ausgewählten Texts in Codeblöcken.
codeCommentSyntaxfarbe für Kommentare.
codeKeywordSyntaxfarbe für Schlüsselwörter.
codeStringSyntaxfarbe für Strings.
codeNumberSyntaxfarbe für Zahlen.
codeFunctionSyntaxfarbe für Funktionsnamen.
codeTypeSyntaxfarbe für Typnamen.
codePunctuationSyntaxfarbe für Interpunktion.

themeOverrides

Überschreiben Sie eine beliebige Teilmenge von Tokens. Der Editor injiziert sie als CSS-Variablen, die auf seinen Container beschränkt sind.

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

Benutzerdefinierte CSS-Eigenschaften

Jeder Token wird einer --clepit-*-Variable zugeordnet, die auf den Editor-Container beschränkt ist. Sie können sie aus Ihrem eigenen Stylesheet lesen oder erweitern.

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

Pro-Block styles und classNames

RendererConfig.styles leitet Framework-unabhängige CSS-Eigenschaften direkt in das Wurzelelement der Komponente weiter. RendererConfig.classNames fügt zusätzliche CSS-Klassen hinzu, ohne eingebaute Stile zu berühren. Beides kann kombiniert werden.

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

Abonnieren Sie Token-Änderungen zur Laufzeit. Nützlich, um die umgebende Benutzeroberfläche mit Theme-Wechseln des Editors zu synchronisieren.

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();
Das Bereitstellen von themeOverrides pro Einbindung ermöglicht es derselben App, mehrere unterschiedlich gestaltete Editoren auf derselben Seite auszuliefern.