import type { DialogCallbacks } from "../../editor/commands/DialogCommand.js";
export type FormFieldType = "text" | "url" | "search" | "textarea" | "select" | "checkbox";
export interface FormFieldOption {
    value: string;
    label: string;
}
export interface FormFieldDef {
    name: string;
    label: string;
    type?: FormFieldType;
    required?: boolean;
    placeholder?: string;
    rows?: number;
    options?: FormFieldOption[];
    /** 静态默认值；若 props 中有同名字段则优先使用 props */
    defaultValue?: string | boolean;
    hidden?: boolean;
    className?: string;
}
/** 为声明式字段定义提供表单弹窗渲染、校验和结果转换的基类。 */
export declare abstract class FormDialog<TResult> {
    /**
     * 渲染前合并属性，例如补充字段默认值。
     *
     * @param props 调用方传入的原始弹窗属性。
     * @returns 供渲染表单使用的属性。
     */
    prepareProps(props: Record<string, unknown>): Record<string, unknown>;
    /** 获取可选的弹窗标题。 */
    get title(): string | undefined;
    /** 获取显示在表单顶部的可选提示文本。 */
    get hint(): string | undefined;
    /** 获取显示在表单顶部的可选帮助链接。 */
    get link(): {
        text: string;
        href: string;
    } | undefined;
    /** 获取提交按钮的显示文本。 */
    get submitText(): string;
    /** 获取附加到表单根元素的可选 CSS 类名。 */
    get className(): string | undefined;
    abstract readonly fields: FormFieldDef[];
    /**
     * 校验收集到的字段值。
     *
     * @param _raw 表单字段名与原始值的映射。
     * @returns 校验失败时的错误文本；成功时为 `null`。
     */
    validate(_raw: Record<string, string | boolean>): string | null;
    /**
     * 将已校验的表单值转换为弹窗结果。
     *
     * @param raw 表单字段名与原始值的映射。
     * @returns 可提交的结果；无法转换时为 `null`。
     */
    abstract toResult(raw: Record<string, string | boolean>): TResult | null;
    /**
     * 在表单挂载后执行可选的初始化逻辑。
     *
     * @param _form 已挂载的表单元素。
     * @param _props 合并后的弹窗属性。
     * @returns 可选的卸载清理函数。
     */
    onMount(_form: HTMLFormElement, _props: Record<string, unknown>): void | (() => void);
    /**
     * 在宿主节点中渲染表单，并返回销毁表单的清理函数。
     *
     * @param host 要挂载表单的宿主元素。
     * @param props 调用方传入的弹窗属性。
     * @param callbacks 提交和取消时调用的回调。
     * @returns 移除表单和事件监听的清理函数。
     */
    render(host: HTMLElement, props: Record<string, unknown>, callbacks: DialogCallbacks<TResult>): () => void;
    /**
     * 从表单控件读取字段值，并保留复选框的布尔语义。
     *
     * @param form 要读取的表单元素。
     * @returns 字段名到字符串或布尔值的映射。
     */
    private static readValues;
    /**
     * 按调用属性优先、字段静态默认值次之的顺序解析字段初始值。
     *
     * @param field 要解析初始值的字段定义。
     * @param props 合并后的弹窗属性。
     * @returns 字段初始值；不存在时为 `undefined`。
     */
    private resolveFieldValue;
    /**
     * 按字段定义创建表单控件并追加到容器。
     *
     * @param form 要追加字段的表单容器。
     * @param field 要渲染的字段定义。
     * @param props 用于填充字段初始值的弹窗属性。
     */
    private appendField;
}
//# sourceMappingURL=FormDialog.d.ts.map