import { type CodeLanguageId, type CodeThemeId } from '../configs/code'; type HighlighterCore = { loadLanguage: (...langs: unknown[]) => Promise; loadTheme: (...themes: unknown[]) => Promise; getLoadedLanguages: () => string[]; getLoadedThemes: () => string[]; getLanguage: (...args: unknown[]) => unknown; setTheme: (...args: unknown[]) => unknown; codeToHtml: (code: string, options: { lang: string; theme: string; structure?: 'classic' | 'inline'; }) => string; codeToTokens: (code: string, options: { lang: string; theme: string; }) => { tokens: Array>; fg?: string; bg?: string; }; getTheme: (theme: string) => { bg: string; fg: string; }; }; export interface HighlightedCode { html: string; bg: string; fg: string; language: CodeLanguageId; theme: CodeThemeId; } export declare function getHighlighter(): Promise; /** Inner Shiki HTML with token spans + `\n` text nodes, no `.line` / `
`. */ export declare function toEditorHighlightHtml(shikiHtml: string, code: string): string; export type HighlightedToken = { content: string; color?: string; }; export type HighlightedTokens = { lines: HighlightedToken[][]; bg: string; fg: string; language: CodeLanguageId; theme: CodeThemeId; }; export declare function highlightCodeTokens(code: string, language: string, theme: string): Promise; export declare function highlightCodeBlock(code: string, language: string, theme: string): Promise; /** Warm Shiki + SnapDOM so the first on-slide raster is not a cold start. */ export declare function prefetchCodeRaster(language?: string, theme?: string): void; /** Load core + lang + theme. Safe to call before CodeMirror/Shiki highlighting. */ export declare function prepareHighlighter(language: string, theme: string): Promise<{ bg: string; fg: string; language: "bash" | "cpp" | "csharp" | "css" | "go" | "html" | "java" | "javascript" | "json" | "kotlin" | "markdown" | "php" | "plaintext" | "python" | "ruby" | "rust" | "sql" | "swift" | "typescript" | "vue" | "xml" | "yaml"; theme: "andromeeda" | "aurora-x" | "ayu-dark" | "ayu-mirage" | "catppuccin-frappe" | "catppuccin-latte" | "catppuccin-macchiato" | "catppuccin-mocha" | "dracula" | "github-dark" | "github-light" | "horizon" | "houston" | "kanagawa-wave" | "laserwave" | "material-theme-ocean" | "material-theme-palenight" | "min-dark" | "min-light" | "monokai" | "night-owl" | "nord" | "one-dark-pro" | "one-light" | "plastic" | "poimandres" | "rose-pine" | "rose-pine-moon" | "synthwave-84" | "tokyo-night" | "vesper" | "vitesse-dark" | "vitesse-light"; }>; /** * Sync inner HTML for tests / non-editor consumers. Call `prepareHighlighter` * first. Uses `structure: 'inline'` so the result round-trips through text. */ export declare function highlightEditorHtml(code: string, language: string, theme: string): string; export type CodeRasterInput = { code: string; language: string; theme: string; fontSize: number; showLineNumbers: boolean; }; /** Real gutter spans so SnapDOM does not depend on CSS counters. */ export declare function injectBoothLineNumbers(shikiHtml: string, showLineNumbers: boolean): string; export declare function codeElementToBoothHtml(el: CodeRasterInput): Promise; export declare function renderCodeElementPng(el: CodeRasterInput & { width: number; height: number; }): Promise; export {};