import { Node } from 'mdast';
import React from 'react';
import { Editor, NodeEntry } from 'slate';
import type { Plugin } from 'unified';
import { ElementProps, Elements } from './el';
import type { JinjaConfig } from './types';
/**
 * MarkdownRenderer 渲染模式下的插件配置。
 * 与 Slate 编辑器侧的 elements 并行，用于 HTML/React 渲染模式。
 */
export interface RendererPlugin {
    /** 用于 HTML/React 渲染模式的组件映射（tagName → Component） */
    rendererComponents?: Record<string, React.ComponentType<any>>;
    /** 自定义 rehype 插件 */
    rehypePlugins?: Plugin[];
    /** 自定义 remark 插件 */
    remarkPlugins?: Plugin[];
}
export type MarkdownEditorPlugin = {
    elements?: Record<string, React.ComponentType<ElementProps<any>>>;
    parseMarkdown?: {
        match: (node: Node) => boolean;
        convert: (node: Node) => Elements | NodeEntry<Text>;
    }[];
    toMarkdown?: {
        match: (node: Elements) => boolean;
        convert: (node: Elements) => Node;
    }[];
    withEditor?: (editor: Editor) => Editor;
    hotkeys?: Record<string, (editor: Editor) => void>;
    onPaste?: (text: string) => boolean;
    /** 启用 Jinja 能力（模板面板 + 语法高亮），与 props.jinja?.enable 二选一 */
    jinja?: true;
    /** 通过插件启用时的默认 Jinja 配置（当未传 props.jinja 时使用） */
    jinjaConfig?: JinjaConfig;
    /** MarkdownRenderer 渲染模式下的配置 */
    renderer?: RendererPlugin;
};
export declare const PluginContext: React.Context<MarkdownEditorPlugin[]>;
