import { Form as _Form, Data, ExtendWithAny, DeepPartial } from '../../../shared/core';
import { Field } from '../types';
import { ComponentName } from '../constants';
import { FormInstance } from '../../../shared/ui';
/**
 * 表单实例类型
 *
 * @description 在 core Form 类型的基础上，将字段类型 F 绑定为本地 Field<ComponentName, D>，
 * 将底层表单实例 I 绑定为 Ant Design Vue 的 FormInstance，使 formRef 获得完整的类型提示。
 *
 * @template D - 表单数据类型
 * @template F - 字段配置类型，默认使用本地 Field 类型
 *
 * @property formData  - 响应式表单数据对象，可直接读写，支持深层路径如 `formData.address.city`
 * @property getFormData - 获取指定路径的表单数据，支持点号分隔的深层路径，如 `getFormData('address.city')`
 * @property setFormData - 设置表单数据，支持三种调用方式：<br>
 *   1. `setFormData(path, value)` - 设置指定路径的值<br>
 *   2. `setFormData(path, prev => newVal)` - 函数式更新<br>
 *   3. `setFormData({ ... })` - 批量覆盖整个表单
 * @property fields      - 字段配置数组（响应式 Ref），ProForm 根据此数组渲染表单字段
 * @property getField     - 获取字段配置，支持路径字符串（如 `'name'`）或查找函数（如 `f => f.label === '姓名'`）
 * @property setField     - 更新字段配置，默认合并模式（Object.assign），可通过 `{ updateType: 'rewrite' }` 覆盖
 * @property deleteField  - 删除字段配置，支持 `{ all: true }` 批量删除所有匹配项
 * @property appendField  - 在指定字段后追加新字段，传 `undefined` 则在末尾追加
 * @property prependField - 在指定字段前插入新字段，传 `undefined` 则在开头插入
 * @property getParentField - 获取指定字段的父级字段配置，用于嵌套字段场景
 * @property formRef      - 底层 Ant Design Vue Form 组件实例的响应式引用（Ref），可调用 `validate()`、`resetFields()` 等方法
 * @property setFormRef   - 设置底层 Form 组件实例，由 ProForm 内部自动调用，一般无需手动使用
 *
 * @example
 * ```ts
 * interface User { name: string; age: number }
 * const form: Form<User> = useForm({ name: '张三', age: 25 })
 *
 * form.formData.name           // 直接读写响应式数据
 * form.getFormData('name')     // 通过路径读取
 * form.setFormData('name', '李四')  // 更新数据
 * form.formRef.value?.validate()    // 访问底层 Form 实例
 * ```
 *
 * @public
 */
export type Form<D extends Data = Data, F extends Field<ComponentName, D> = Field<ComponentName, D>> = _Form<D, F, FormInstance>;
/**
 * 创建表单实例的 Hook
 *
 * @description 基于 `@qin-ui/pro-components-core` 的 `useForm`，将泛型参数绑定为 Ant Design Vue 的本地类型：
 * - 字段类型 F -> `Field<ComponentName, D>`（支持 Ant Design Vue 所有内置组件类型推导）
 * - 表单实例 -> Ant Design Vue 的 `FormInstance`（使 formRef 获得完整的类型提示）
 *
 * 表单实例组合了三个子模块的能力：
 * - **useFormData**：表单数据管理（响应式数据、读写、批量更新）
 * - **useFields**：字段配置管理（增删改查字段配置，支持嵌套）
 * - **useFormRef**：底层 Form 组件实例引用
 *
 * @template D - 表单数据类型
 *
 * @param {ExtendWithAny<DeepPartial<D>>} [initFormData] - 初始表单数据
 * @param {Field<ComponentName, D>[]} [initFields] - 初始字段配置数组
 * @param {boolean} [root=true] - 是否为根表单。设为 `false` 时尝试从父组件注入获取表单实例
 *
 * @returns {Form<D>} 表单实例，包含数据操作、字段操作和 ref 操作
 *
 * @example
 * ```ts
 * interface User { name: string; age: number }
 *
 * // 方式一：同时传入初始数据和字段
 * const form = useForm<User>(
 *   { name: '张三', age: 25 },
 *   [
 *     { path: 'name', label: '姓名', component: 'input' },
 *     { path: 'age', label: '年龄', component: 'input-number' },
 *   ],
 *   true
 * )
 *
 * // 方式二：仅设置 root 标识
 * const form = useForm<User>(true)
 *
 * // 使用
 * const { formData, formRef, fields, setFormData, getField } = form
 * setFormData('name', '李四')
 * await formRef.value?.validate()
 * ```
 *
 * @see {@link coreUseForm} 底层核心实现（来自 @qin-ui/pro-components-core）
 *
 * @public
 */
export declare function useForm<D extends Data = Data>(initFormData?: ExtendWithAny<DeepPartial<D>>, initFields?: Field<ComponentName, D>[], root?: boolean): Form<D, Field<ComponentName, D>>;
export declare function useForm<D extends Data = Data>(root?: boolean): Form<D, Field<ComponentName, D>>;
//# sourceMappingURL=useForm.d.ts.map