/**
 * 链接与图片命令组。
 * 内联链接 / 引用式链接 / 引用定义；引用类命令从 ParserStore 读取已有定义供下拉选择。
 */
import type { EditorView } from "@codemirror/view";
import { FormDialog } from "../../../editor/dialog/FormDialog.js";
import { Command, type CommandContext } from "../../../editor/commands/Command";
import type { DialogCallbacks, DialogCapableCommand } from "../../../editor/commands/DialogCommand";
import type { DialogType } from "../../../editor/commands/dialogTypes";
import type { ParserStore } from "../../../transformer/core/ParserStore";
/** `link` / `image` 弹窗提交结果。 */
export interface LinkDialogResult {
    text: string;
    url: string;
    title?: string;
}
/** `linkReference` 弹窗提交结果。 */
export interface LinkReferenceDialogResult {
    text: string;
    refId: string;
}
/** `image` 弹窗提交结果。 */
export interface ImageDialogResult {
    text: string;
    url: string;
    title?: string;
    maxWidth?: string;
}
/** `linkRefDef` 弹窗提交结果。 */
export interface LinkRefDefDialogResult {
    label: string;
    url: string;
    title?: string;
}
interface LinkRefInfo {
    id: string;
    href: string;
    title: string;
}
/**
 * 将引用定义转为 Markdown。
 * @param data - 已校验的链接引用定义数据
 * @returns 可插入编辑器的引用定义行
 */
export declare function linkRefDefMarkdown(data: LinkRefDefDialogResult): string;
/**
 * 从 ParserStore 收集已有链接引用定义（键 ref_*）。
 * @param store - 最近一次渲染生成的可选 ParserStore
 * @returns 按标识排序的链接引用定义
 */
export declare function collectLinkRefs(store: ParserStore | null | undefined): LinkRefInfo[];
declare class LinkRefCommandImpl implements Command, DialogCapableCommand {
    readonly dialogType: DialogType;
    private readonly dialog;
    private readonly apply;
    private readonly buildProps;
    /**
     * 创建共享表单的链接引用命令。
     * @param dialogType - 要打开的弹窗类型
     * @param dialog - 负责收集链接数据的表单
     * @param apply - 将提交数据写入编辑器的函数
     * @param buildProps - 根据编辑器和已有定义构造弹窗属性的函数
     */
    constructor(dialogType: DialogType, dialog: FormDialog<LinkReferenceDialogResult | LinkRefDefDialogResult>, apply: (view: EditorView, data: LinkReferenceDialogResult | LinkRefDefDialogResult) => boolean, buildProps: (view: EditorView, linkRefs: LinkRefInfo[]) => Record<string, unknown>);
    renderDialog: (host: HTMLElement, props: Record<string, unknown>, callbacks: DialogCallbacks<LinkReferenceDialogResult | LinkRefDefDialogResult>) => () => void;
    /**
     * 收集已有定义，打开表单并应用链接引用编辑。
     * @param view - 要修改的 CodeMirror 编辑器实例
     * @param _payload - 未使用的命令参数
     * @param ctx - 提供事件总线和可选 ParserStore 的命令上下文
     * @returns 用户取消或缺少事件总线时返回 false
     */
    execute(view: EditorView, _payload: unknown, ctx: CommandContext): Promise<boolean>;
}
/**
 * `link` — 插入 Markdown 链接 `[text](url)`。
 */
export declare class LinkCommand implements Command, DialogCapableCommand {
    readonly dialogType: DialogType;
    renderDialog: (host: HTMLElement, props: Record<string, unknown>, callbacks: DialogCallbacks<LinkDialogResult>) => () => void;
    /**
     * 打开链接表单并用提交数据替换当前选区。
     * @param view - 要修改的 CodeMirror 编辑器实例
     * @param _payload - 未使用的命令参数
     * @param ctx - 提供事件总线的命令上下文
     * @returns 用户取消、URL 为空或缺少事件总线时返回 false
     */
    execute(view: EditorView, _payload: unknown, ctx: CommandContext): Promise<boolean>;
}
/**
 * `image` — 插入 Markdown 图片 `![alt](url)`。
 */
export declare class ImageCommand implements Command, DialogCapableCommand {
    readonly dialogType: DialogType;
    renderDialog: (host: HTMLElement, props: Record<string, unknown>, callbacks: DialogCallbacks<ImageDialogResult>) => () => void;
    /**
     * 打开图片表单并用提交数据替换当前选区。
     * @param view - 要修改的 CodeMirror 编辑器实例
     * @param _p - 未使用的命令参数
     * @param ctx - 提供事件总线的命令上下文
     * @returns 用户取消、URL 为空或缺少事件总线时返回 false
     */
    execute(view: EditorView, _p: unknown, ctx: CommandContext): Promise<boolean>;
}
/** `link` 命令实例 */
export declare const linkCommand: LinkCommand;
/** `image` 命令实例 */
export declare const imageCommand: ImageCommand;
/** `linkReference` — 插入引用式链接 `[text][ref]`，可选取已有引用定义。 */
export declare const linkReferenceCommand: LinkRefCommandImpl;
/** `linkRefDef` — 插入链接引用定义 `[id]: url "title"`。 */
export declare const linkRefDefCommand: LinkRefCommandImpl;
export {};
//# sourceMappingURL=LinkCommand.d.ts.map