import type { ThemedToken } from 'shiki';
export type ShikiPreProperties = {
    class: string;
    style: string;
    tabindex: number;
};
/**
 * 代码 chunk 高亮结果
 *
 * @param lines 所有高亮行（包括稳定和不稳定）
 * @param recall 需要撤回的行数
 */
export interface HighlightChunkResult {
    lines: ThemedToken[][];
    recall: number;
}
/**
 * Shiki 代码高亮服务
 *
 * - 支持流式代码高亮。
 * - 优先使用 Worker 处理高亮请求。
 */
declare class ShikiStreamService {
    private highlighter;
    private tokenizerCache;
    constructor();
    /**
     * 判断是否正在使用主线程高亮。外部不要依赖这个方法来判断。
     */
    hasMainHighlighter(): boolean;
    /**
     * 确保 highlighter 已配置
     * @param language 语言
     * @param theme 主题
     */
    private ensureHighlighterConfigured;
    /**
     * 获取 Shiki 的 pre 标签属性
     *
     * 跑一个简单的 hast 结果，从中提取 properties 属性。
     * 如果有更加稳定的方法可以替换。
     * @param language 语言
     * @param theme 主题
     * @returns pre 标签属性
     */
    getShikiPreProperties(language: string, theme: string): Promise<ShikiPreProperties>;
    /**
     * 高亮代码 chunk，返回本次高亮的所有 ThemedToken 行
     *
     * 优先使用 Worker 处理，失败时回退到主线程处理。
     * 调用者需要自行处理撤回。
     * @param chunk 代码内容
     * @param language 语言
     * @param theme 主题
     * @param callerId 调用者ID，用于标识不同的组件实例
     * @returns ThemedToken 行
     */
    highlightCodeChunk(chunk: string, language: string, theme: string, callerId: string): Promise<HighlightChunkResult>;
    /**
     * 使用主线程处理代码高亮
     * @param chunk 代码内容
     * @param language 语言
     * @param theme 主题
     * @param callerId 调用者ID
     * @returns 高亮结果
     */
    private highlightWithMainThread;
    /**
     * 获取或创建 tokenizer
     * @param callerId 调用者ID
     * @param language 语言
     * @param theme 主题
     * @returns tokenizer 实例
     */
    private getStreamTokenizer;
    /**
     * 清理特定调用者的 tokenizers
     * @param callerId 调用者ID
     */
    cleanupTokenizers(callerId: string): void;
    /**
     * 销毁所有资源
     */
    dispose(): void;
}
export declare const shikiStreamService: ShikiStreamService;
export {};
