import * as monaco from 'monaco-editor';

/**
 * 配置 Monaco Editor Worker
 * 必须在创建编辑器之前调用
 *
 * 使用 Vite 的 ?worker 导入方式，这是官方推荐的最佳实践
 * Vite 会自动处理 Worker 的打包和路径，无需手动配置
 */
export declare function configureMonacoWorkers(): void;

/**
 * 创建 Slide DSL 编辑器实例
 *
 * @param container - 容器元素
 * @param options - 编辑器选项
 * @returns Monaco Editor 实例
 */
export declare function createSlideDSLEditor(container: HTMLElement, options?: SlideDSLEditorOptions): monaco.editor.IStandaloneCodeEditor;

/**
 * 注册 Slide DSL 语言到 Monaco Editor
 */
export declare function registerSlideDSLLanguage(): void;

/**
 * 设置编辑器主题
 *
 * @param editor - 编辑器实例
 * @param theme - 主题名称
 */
export declare function setEditorTheme(editor: monaco.editor.IStandaloneCodeEditor, theme: 'vs' | 'vs-dark' | 'hc-black'): void;

/**
 * 编辑器配置选项
 */
export declare interface SlideDSLEditorOptions {
    /** 初始内容 */
    value?: string;
    /** 主题 */
    theme?: 'vs' | 'vs-dark' | 'hc-black';
    /** 字体大小 */
    fontSize?: number;
    /** 是否显示行号 */
    lineNumbers?: 'on' | 'off' | 'relative' | 'interval';
    /** 是否显示小地图 */
    minimap?: {
        enabled: boolean;
    };
    /** 是否自动换行 */
    wordWrap?: 'on' | 'off' | 'wordWrapColumn' | 'bounded';
    /** 是否只读 */
    readOnly?: boolean;
    /** 是否自动布局 */
    automaticLayout?: boolean;
    /** 内容变化回调 */
    onChange?: (value: string) => void;
}

/**
 * Slide DSL 的 Monarch 语法定义
 */
export declare const slideDSLMonarchDefinition: {
    keywords: string[];
    typeKeywords: string[];
    operators: string[];
    symbols: RegExp;
    escapes: RegExp;
    digits: RegExp;
    tokenizer: {
        root: ((string | RegExp)[] | (RegExp | {
            cases: {
                '@keywords': string;
                '@typeKeywords': string;
                '@default': string;
            };
        })[] | {
            include: string;
        } | (RegExp | {
            token: string;
            bracket: string;
            next: string;
        })[] | (RegExp | {
            cases: {
                '@operators': string;
                '@default': string;
            };
        })[])[];
        string_double: ((string | RegExp)[] | (RegExp | {
            token: string;
            bracket: string;
            next: string;
        })[])[];
        string_single: ((string | RegExp)[] | (RegExp | {
            token: string;
            bracket: string;
            next: string;
        })[])[];
        whitespace: (string | RegExp)[][];
        comment: (string | RegExp)[][];
    };
};

/**
 * 更新编辑器内容
 *
 * @param editor - 编辑器实例
 * @param value - 新内容
 */
export declare function updateEditorValue(editor: monaco.editor.IStandaloneCodeEditor, value: string): void;

export { }
