import { default as React } from 'react';
import { BaseEditor } from 'slate';
import { ReactEditor } from 'slate-react';
export interface RichTextEditorProps {
    /** 初始值 */
    initialValue?: CustomElement[];
    /** 主题样式 */
    styles?: RichTextStyles;
    /** 是否只读 */
    readOnly?: boolean;
    /** 占位符文本 */
    placeholder?: string;
    /** 最小高度 */
    minHeight?: string;
    /** 最大高度 */
    maxHeight?: string;
    /** 是否显示工具栏 */
    showToolbar?: boolean;
    /** 自定义工具栏 */
    customToolbar?: React.ReactNode;
    /** 编辑器变化回调 */
    onChange?: (value: CustomElement[]) => void;
    /** 编辑器焦点回调 */
    onFocus?: () => void;
    /** 编辑器失焦回调 */
    onBlur?: () => void;
    /** 自定义渲染元素 */
    renderElement?: (props: any) => JSX.Element;
    /** 自定义渲染叶子节点 */
    renderLeaf?: (props: any) => JSX.Element;
    /** 自定义样式 */
    className?: string;
    /** 自定义样式对象 */
    style?: React.CSSProperties;
}
export interface RichTextRendererProps {
    /** 要渲染的内容 */
    content: CustomElement[] | string;
    /** 主题样式 */
    styles?: RichTextStyles;
    /** 是否显示工具栏 */
    showToolbar?: boolean;
    /** 自定义工具栏 */
    customToolbar?: React.ReactNode;
    /** 自定义渲染元素 */
    renderElement?: (props: any) => JSX.Element;
    /** 自定义渲染叶子节点 */
    renderLeaf?: (props: any) => JSX.Element;
    /** 自定义样式 */
    className?: string;
    /** 自定义样式对象 */
    style?: React.CSSProperties;
}
export interface MarkdownRendererProps {
    /** Markdown文本内容 */
    content: string;
    /** 主题样式 */
    styles?: RichTextStyles;
    /** 是否转换为富文本后渲染 */
    convertToRichText?: boolean;
    /** 自定义样式 */
    className?: string;
    /** 自定义样式对象 */
    style?: React.CSSProperties;
}
export interface RichTextStyles {
    theme?: any;
    mode?: 'light' | 'dark';
    [key: string]: any;
}
export interface RichTextEvents {
    onChange?: (value: CustomElement[]) => void;
    onFocus?: () => void;
    onBlur?: () => void;
    onSelectionChange?: (selection: any) => void;
    onKeyDown?: (event: React.KeyboardEvent) => void;
    onPaste?: (event: React.ClipboardEvent) => void;
    onDrop?: (event: React.DragEvent) => void;
}
export interface ToolbarButton {
    /** 按钮类型 */
    type: string;
    /** 按钮图标 */
    icon: React.ReactNode;
    /** 按钮标题 */
    title: string;
    /** 是否激活 */
    isActive?: boolean;
    /** 点击回调 */
    onClick: () => void;
    /** 是否禁用 */
    disabled?: boolean;
}
export type CustomText = {
    text: string;
    bold?: boolean;
    italic?: boolean;
    underline?: boolean;
    code?: boolean;
    strikethrough?: boolean;
    link?: string;
    color?: string;
    backgroundColor?: string;
    /** 检索高亮标签（retrive-tag）行内标记 */
    retrive?: boolean;
};
export interface BaseElement {
    type: string;
    children: (CustomElement | CustomText)[];
    align?: 'left' | 'center' | 'right';
}
export interface ParagraphElement extends BaseElement {
    type: 'paragraph';
}
export interface HeadingOneElement extends BaseElement {
    type: 'heading-one';
}
export interface HeadingTwoElement extends BaseElement {
    type: 'heading-two';
}
export interface HeadingThreeElement extends BaseElement {
    type: 'heading-three';
}
export interface ListElement extends BaseElement {
    type: 'bulleted-list' | 'numbered-list';
}
export interface ListItemElement extends BaseElement {
    type: 'list-item';
}
export interface TableElement extends BaseElement {
    type: 'table';
}
export interface TableRowElement extends BaseElement {
    type: 'table-row';
}
export interface TableCellElement extends BaseElement {
    type: 'table-cell';
    header?: boolean;
}
export interface ImageElement extends BaseElement {
    type: 'image';
    url: string;
    alt?: string;
    width?: number;
    height?: number;
}
export interface IframeElement extends BaseElement {
    type: 'iframe';
    src: string;
    width?: string;
    height?: string;
    frameborder?: string;
    title?: string;
}
export interface CodeBlockElement extends BaseElement {
    type: 'code-block';
    language?: string;
}
export interface BlockQuoteElement extends BaseElement {
    type: 'block-quote';
}
export interface LinkElement extends BaseElement {
    type: 'link';
    url: string;
}
/**
 * 思考块元素类型，用于解析 <think>...</think>
 */
export interface ThinkElement extends BaseElement {
    type: 'think';
}
/**
 * 数据库表格元素类型，用于解析 <retrieve-sql-data id="...">
 */
export interface RetrieveSqlDataElement extends BaseElement {
    type: 'retrieve-sql-data';
    id: string;
}
/**
 * 模版输入字段元素类型
 * 用于在富文本中插入可编辑的模版输入框
 */
export interface TemplateInputElement extends BaseElement {
    type: 'template-input';
    /** 输入框的占位符文本 */
    placeholder?: string;
    /** 输入框的默认值 */
    defaultValue?: string;
    /** 输入框的当前值 */
    value?: string;
    /** 是否处于编辑状态 */
    isEditing?: boolean;
    /** 输入框的样式类型 */
    style?: 'blue' | 'green' | 'purple' | 'custom';
    /** 自定义样式 */
    customStyle?: {
        backgroundColor?: string;
        borderColor?: string;
        textColor?: string;
    };
}
/**
 * 模版元素类型
 * 用于在富文本中插入可编辑的模版输入块
 */
export interface TemplateElement extends BaseElement {
    type: 'template';
    /** 占位符文本 */
    placeholder: string;
    /** 当前值 */
    value: string;
    /** 样式类型 */
    style: 'blue' | 'green' | 'purple';
    /** 字段标识 */
    fieldId: string;
    /** 是否处于编辑状态 */
    isEditing?: boolean;
}
/**
 * 行内 LaTeX 公式节点
 * 2025-11-25 新增: 支持 KaTeX 行内渲染
 */
export interface LatexInlineElement extends BaseElement {
    type: 'latex-inline';
    /** LaTeX 公式原文 */
    formula: string;
}
/**
 * 块级 LaTeX 公式节点
 * 2025-11-25 新增: 支持 KaTeX 块级渲染
 */
export interface LatexBlockElement extends BaseElement {
    type: 'latex-block';
    /** LaTeX 公式原文 */
    formula: string;
}
export type CustomElement = ParagraphElement | HeadingOneElement | HeadingTwoElement | HeadingThreeElement | ListElement | ListItemElement | TableElement | TableRowElement | TableCellElement | ImageElement | IframeElement | CodeBlockElement | BlockQuoteElement | LinkElement | TemplateInputElement | TemplateElement | LatexInlineElement | LatexBlockElement | ThinkElement;
declare module 'slate' {
    interface CustomTypes {
        Editor: BaseEditor & ReactEditor;
        Element: CustomElement;
        Text: CustomText;
    }
}
export interface AdapterProps {
    /** 主题样式 */
    styles?: RichTextStyles;
    /** 事件回调 */
    events?: RichTextEvents;
    /** 自定义组件 */
    customComponents?: Record<string, React.ComponentType<any>>;
    /** 其他属性 */
    [key: string]: any;
}
export type MergedEventsEmit = (eventName: string, ...args: any[]) => void;
export type MergedCustomizeComponents = Record<string, React.ComponentType<any>>;
