@schemx/vue 1.0.0-next.3 → 1.0.0-next.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +288 -283
  2. package/dist/analyze.html +1 -1
  3. package/dist/bridge/fieldBridge.d.ts +5 -18
  4. package/dist/bridge/fieldBridge.d.ts.map +1 -1
  5. package/dist/bridge/formBridge.d.ts +8 -76
  6. package/dist/bridge/formBridge.d.ts.map +1 -1
  7. package/dist/bridge/formInstance.d.ts +18 -0
  8. package/dist/bridge/formInstance.d.ts.map +1 -0
  9. package/dist/bridge/helpers.d.ts +9 -1
  10. package/dist/bridge/helpers.d.ts.map +1 -1
  11. package/dist/bridge/index.d.ts +7 -5
  12. package/dist/bridge/index.d.ts.map +1 -1
  13. package/dist/bridge/types.d.ts +37 -77
  14. package/dist/bridge/types.d.ts.map +1 -1
  15. package/dist/bridge/viewSchemaBridge.d.ts +5 -0
  16. package/dist/bridge/viewSchemaBridge.d.ts.map +1 -0
  17. package/dist/components/Button/index.vue.d.ts +1 -1
  18. package/dist/components/Button/index.vue.d.ts.map +1 -1
  19. package/dist/components/Button/types.d.ts.map +1 -1
  20. package/dist/components/Col/index.d.ts +31 -0
  21. package/dist/components/Col/index.d.ts.map +1 -0
  22. package/dist/components/ConfigProvider/index.d.ts +78 -0
  23. package/dist/components/ConfigProvider/index.d.ts.map +1 -0
  24. package/dist/components/Dynamic/index.d.ts +46 -0
  25. package/dist/components/Dynamic/index.d.ts.map +1 -0
  26. package/dist/components/Field/index.d.ts +47 -0
  27. package/dist/components/Field/index.d.ts.map +1 -0
  28. package/dist/components/Field/slot.d.ts +40 -0
  29. package/dist/components/Field/slot.d.ts.map +1 -0
  30. package/dist/components/Group/index.d.ts +61 -0
  31. package/dist/components/Group/index.d.ts.map +1 -0
  32. package/dist/components/Group/slot.d.ts +34 -0
  33. package/dist/components/Group/slot.d.ts.map +1 -0
  34. package/dist/components/SchemaList/index.d.ts +58 -0
  35. package/dist/components/SchemaList/index.d.ts.map +1 -0
  36. package/dist/components/Wrapper/index.vue.d.ts +29 -0
  37. package/dist/components/Wrapper/index.vue.d.ts.map +1 -0
  38. package/dist/config/appConfig.d.ts +3 -3
  39. package/dist/config/appConfig.d.ts.map +1 -1
  40. package/dist/config/index.d.ts +2 -0
  41. package/dist/config/index.d.ts.map +1 -1
  42. package/dist/config/providerConfig.d.ts +22 -0
  43. package/dist/config/providerConfig.d.ts.map +1 -0
  44. package/dist/config/vueConfig.d.ts +12 -0
  45. package/dist/config/vueConfig.d.ts.map +1 -0
  46. package/dist/form.d.ts +4 -4
  47. package/dist/form.d.ts.map +1 -1
  48. package/dist/hocs/withRemoteOptions.d.ts.map +1 -1
  49. package/dist/hooks/index.d.ts +3 -3
  50. package/dist/hooks/index.d.ts.map +1 -1
  51. package/dist/hooks/provideFieldContext.d.ts +2 -2
  52. package/dist/hooks/provideFormContext.d.ts +13 -46
  53. package/dist/hooks/provideFormContext.d.ts.map +1 -1
  54. package/dist/hooks/useDictionary.d.ts.map +1 -1
  55. package/dist/hooks/useField.d.ts.map +1 -1
  56. package/dist/hooks/useForm.d.ts +2 -2
  57. package/dist/hooks/useForm.d.ts.map +1 -1
  58. package/dist/hooks/useFormSelector.d.ts +4 -0
  59. package/dist/hooks/useFormSelector.d.ts.map +1 -1
  60. package/dist/hooks/useViewSchemas.d.ts +2 -34
  61. package/dist/hooks/useViewSchemas.d.ts.map +1 -1
  62. package/dist/hooks/useWatch.d.ts.map +1 -1
  63. package/dist/index.cjs +1 -1
  64. package/dist/index.cjs.map +1 -1
  65. package/dist/index.d.ts +9 -4
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.mjs +1125 -521
  68. package/dist/index.mjs.map +1 -1
  69. package/dist/style.css +1 -1
  70. package/dist/types/dictionary.d.ts +1 -1
  71. package/dist/types/dictionary.d.ts.map +1 -1
  72. package/dist/types/field.d.ts +38 -2
  73. package/dist/types/field.d.ts.map +1 -1
  74. package/dist/types/form.d.ts +12 -7
  75. package/dist/types/form.d.ts.map +1 -1
  76. package/dist/types/index.d.ts +5 -4
  77. package/dist/types/index.d.ts.map +1 -1
  78. package/dist/types/layout.d.ts +26 -0
  79. package/dist/types/layout.d.ts.map +1 -0
  80. package/dist/utils/colProvider.d.ts +20 -0
  81. package/dist/utils/colProvider.d.ts.map +1 -0
  82. package/dist/utils/helpers.d.ts +4 -0
  83. package/dist/utils/helpers.d.ts.map +1 -1
  84. package/dist/utils/index.d.ts +2 -0
  85. package/dist/utils/index.d.ts.map +1 -1
  86. package/dist/utils/presetRuleProvider.d.ts +16 -0
  87. package/dist/utils/presetRuleProvider.d.ts.map +1 -0
  88. package/dist/utils/rendererProvider.d.ts.map +1 -1
  89. package/package.json +5 -6
  90. package/dist/bridge/formFacade.d.ts +0 -65
  91. package/dist/bridge/formFacade.d.ts.map +0 -1
  92. package/dist/components/FormGroup/index.d.ts +0 -16
  93. package/dist/components/FormGroup/index.d.ts.map +0 -1
  94. package/dist/components/FormItem/index.d.ts +0 -22
  95. package/dist/components/FormItem/index.d.ts.map +0 -1
  96. package/dist/components/FormItem/slot.d.ts +0 -48
  97. package/dist/components/FormItem/slot.d.ts.map +0 -1
  98. package/dist/utils/rulesProvider.d.ts +0 -16
  99. package/dist/utils/rulesProvider.d.ts.map +0 -1
package/README.md CHANGED
@@ -9,10 +9,10 @@
9
9
  ## 安装与样式
10
10
 
11
11
  ```bash
12
- pnpm add @schemx/vue @schemx/core vue
12
+ pnpm add @schemx/vue vue
13
13
  ```
14
14
 
15
- `@schemx/core` `vue` 是 `@schemx/vue` 的 peer dependencies,业务项目需要显式安装。
15
+ `@schemx/core` `@schemx/vue` 的运行时依赖,会随安装自动安装;`vue` 是 peer dependency,业务项目需要显式安装。若业务代码直接导入 `@schemx/core` 或其子路径,也应在项目中显式声明该包。
16
16
 
17
17
  ESM 入口 `@schemx/vue` 会通过入口模块自动加载基础样式,常规 Vite / Vue ESM 项目不需要再次导入 CSS。CommonJS 入口不会保留这条 CSS import;直接使用 CommonJS,或构建工具没有处理入口 CSS import 时,需要显式导入公开的样式子路径:
18
18
 
@@ -79,41 +79,47 @@ console.log(Schemx === schemxForm) // true
79
79
 
80
80
  `Schemx` 的公开 Props 类型为 Vue 层的 `SchemxFormProps<T>`,由 Core 表单选项和 Vue 专属 Props 组合而成。
81
81
 
82
- | Prop | 类型 | 默认值 | 说明 |
83
- | ------------------------ | ------------------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
84
- | `schemas` | `SchemxSchemasInput<T>` | `[]` | 表单 Schema;可传字段数组或 `createSchemas()` 返回的 Schema source,运行时缺省为空数组 |
85
- | `modelValue` | `T` | `{}` | `v-model` 的输入端;非空值参与初始快照,后续替换会同步到内部表单,字段变化会通过 `update:modelValue` 输出 |
86
- | `initialValues` | `T` | `{}` | 创建内部表单时的初始值,也是 `reset()` 的还原基准 |
87
- | `form` | `SchemxInstance<T>` | `undefined` | 外部表单实例;传入后组件不再创建实例,但仍会提供 Vue 上下文并同步 `schemas`;组件级回调不会写入该实例,`v-model` 仍监听实例变化 |
88
- | `rendererProps` | `SchemxRendererPropsMap<T>` | `undefined` | Renderer 类型设置静态默认 Props;字段 `componentProps` 与 Runtime 注入值优先 |
89
- | `rendererRegistry` | `RendererRegistry` | 全局 `rendererRegistry` | 当前表单使用的 Renderer Registry |
90
- | `defaultRendererType` | `SchemxRendererKey` | `undefined` | 创建内部表单且未传 `rendererRegistry` 时的默认 Renderer 类型;Vue 全局 Registry 存在时由该 Registry 的 fallback 决定 |
91
- | `validationRuleRegistry` | `ValidationRuleRegistry` | 全局 `validationRuleRegistry` | 当前表单使用的校验规则 Registry |
92
- | `validatorAdapters` | `readonly ValidationAdapterOption[]` | `[]` | 当前表单使用的第三方校验 adapter;创建内部 Form 时参与配置合并并传递给 Core |
93
- | `required` | `boolean` | `undefined` | 表单级必填默认值;字段自身配置优先,普通 `rules` 不会推导必填或显示星号 |
94
- | `readonly` | `boolean` | `undefined` | 表单级只读默认值;字段自身配置优先 |
95
- | `disabled` | `boolean` | `undefined` | 表单级禁用默认值;字段自身配置优先 |
96
- | `visible` | `boolean` | `undefined` | 表单级可见性默认值;字段自身配置优先,均未配置时为 `true` |
97
- | `labelIcon` | `string` | `undefined` | 表单级标签图标默认值;会进入字段 ViewSchema,具体是否渲染取决于适配组件 |
98
- | `labelAlign` | `"left" \| "center" \| "right"` | `undefined` | 表单级标签对齐默认值;字段自身配置优先,均未配置时为 `"left"` |
99
- | `labelPosition` | `"left" \| "top" \| "right"` | `undefined` | 表单级标签位置默认值;字段自身配置优先,均未配置时为 `"left"` |
100
- | `labelWidth` | `string` | `undefined` | 表单级标签宽度默认值;字段自身配置优先,均未配置时为 `"auto"` |
101
- | `contentAlign` | `"left" \| "center" \| "right"` | `undefined` | 表单级内容对齐默认值;用于解析 Renderer 的 `align`,字段自身配置优先 |
102
- | `validationTrigger` | `ValidationTrigger \| ValidationTrigger[]` | `undefined` | 表单级校验触发方式默认值;字段自身配置优先,均未配置时为 `"blur"` |
103
- | `colon` | `boolean` | `undefined` | 表单级标签冒号默认值;字段自身配置优先,均未配置时为 `true` |
104
- | `onFinish` | `(values: Readonly<T>) => void \| Promise<void>` | `undefined` | `submit()` 校验通过后的回调 Prop |
105
- | `onFinishFailed` | `(failure: ValidationFailure<T>) => void` | `undefined` | `submit()` 校验失败后的回调 Prop |
106
- | `onReset` | `() => void` | `undefined` | 内部表单完整 `reset()` 完成后的回调;不在 `resetFields()` 后触发 |
107
- | `onLoadingChange` | `(loading: boolean) => void` | `undefined` | 内部表单提交开始和结束时的回调 |
108
- | `onValuesChange` | `(changedValues, latestSnapshot) => void` | `undefined` | 字段值变化后的回调 Prop |
109
- | `onFieldsChange` | `(changedFields, allFields) => void` | `undefined` | 字段路径变化后的回调 Prop |
110
- | `onRuleError` | `CreateValidatorOptions<T>["onRuleError"]` | `undefined` | 规则解析异常回调;内部创建实例时当前不会透传,需在外部 `form` 实例上配置 |
111
- | `loading` | `boolean` | `undefined` | 覆盖内置操作区显示的提交状态,不改变 Core 的真实提交状态 |
112
- | `submitter` / `resetter` | `boolean \| SchemxFormActionConfig` | `undefined` | 控制内置提交 / 重置按钮;未配置时不渲染,设为 `false` 隐藏,配置可设置 `text` 和 `buttonProps` |
113
- | `class` | `string` | `""` | 添加到根 `.schemx` 元素的类名 |
114
- | `style` | `StyleValue` | `{}` | 绑定到根 `.schemx` 元素 |
115
-
116
- 上述 Schema 默认配置都会参与 core 的字段规范化,通常按字段配置 → 表单 Prop → core 固定默认值合并。Registry、默认 Renderer 和 `validatorAdapters` 则按表单显式配置 当前 App 安装配置 → Vue 模块级 Registry → Core 模块级配置 → Core 内置默认值解析。必填只能通过 `required: true` `RequiredOptions` 表达;普通 `rules` 只负责执行校验,不会显示必填星号。传入 `form` 时,`initialValues`、Registry 和所有表单回调都由外部实例的创建者配置;组件不会用同名 Props 重建或包装外部实例。
82
+ | Prop | 类型 | 默认值 | 说明 |
83
+ | ------------------------ | ------------------------------------------------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
84
+ | `schemas` | `SchemxSchemasInput<T>` | `[]` | 表单 Schema;可传字段数组或 `createSchemas()` 返回的 Schema source,运行时缺省为空数组 |
85
+ | `modelValue` | `T` | `{}` | `v-model` 的输入端;非空值参与初始快照,后续替换会同步到内部表单,字段变化会通过 `update:modelValue` 输出 |
86
+ | `initialValues` | `T` | `{}` | 创建内部表单时的初始值,也是 `reset()` 的还原基准 |
87
+ | `form` | `SchemxInstance<T>` | `undefined` | 外部表单实例;传入后组件不再创建实例,但仍会提供 Vue 上下文并同步 `schemas`;组件级回调不会写入该实例,`v-model` 仍监听实例变化 |
88
+ | `fieldRules` | `SchemxFieldRulesMap<T>` | `undefined` | 按字段路径配置的字段规则兜底;字段自身 `rules` 或动态规则优先 |
89
+ | `rendererProps` | `SchemxRendererPropsMap<T>` | `undefined` | Renderer 类型设置静态默认 Props;字段 `componentProps` 与 Runtime 注入值优先 |
90
+ | `rendererRegistry` | `RendererRegistry` | 全局 `rendererRegistry` | 当前表单使用的 Renderer Registry |
91
+ | `defaultRendererType` | `SchemxRendererKey` | `undefined` | 创建内部表单且未传 `rendererRegistry` 时的默认 Renderer 类型;Vue 全局 Registry 存在时由该 Registry 的 fallback 决定 |
92
+ | `presetRuleRegistry` | `PresetRuleRegistry` | 全局 `presetRuleRegistry` | 当前表单使用的预设规则 Registry |
93
+ | `validatorAdapters` | `readonly ValidationAdapterOption[]` | `[]` | 当前表单使用的第三方校验 adapter;创建内部 Form 时参与配置合并并传递给 Core |
94
+ | `required` | `RequiredConfig` | `undefined` | 表单级必填默认值;字段自身配置优先,普通 `rules` 不会推导必填或显示星号 |
95
+ | `readonly` | `boolean` | `undefined` | 表单级只读默认值;字段自身配置优先 |
96
+ | `disabled` | `boolean` | `undefined` | 表单级禁用默认值;字段自身配置优先 |
97
+ | `visible` | `boolean` | `true` | 表单级可见性默认值;字段自身配置优先 |
98
+ | `labelIcon` | `string` | `undefined` | 表单级标签图标默认值;会进入字段 ViewSchema,具体是否渲染取决于适配组件 |
99
+ | `labelAlign` | `"left" \| "center" \| "right"` | `undefined` | 表单级标签对齐默认值;字段自身配置优先,均未配置时为 `"left"` |
100
+ | `labelPosition` | `"left" \| "top" \| "right"` | `undefined` | 表单级标签位置默认值;字段自身配置优先,均未配置时为 `"left"` |
101
+ | `labelWidth` | `string` | `undefined` | 表单级标签宽度默认值;字段自身配置优先,均未配置时为 `"auto"` |
102
+ | `contentAlign` | `"left" \| "center" \| "right"` | `undefined` | 表单级内容对齐默认值;用于解析 Renderer 的 `align`,字段自身配置优先 |
103
+ | `validationTrigger` | `ValidationTrigger \| ValidationTrigger[]` | `["blur", "change"]` | 表单级校验触发方式默认值;字段自身配置优先 |
104
+ | `colon` | `boolean` | `undefined` | 表单级标签冒号默认值;字段自身配置优先,均未配置时为 `true` |
105
+ | `onFinish` | `(values: Readonly<T>) => void \| Promise<void>` | `undefined` | `submit()` 校验通过后的回调 Prop |
106
+ | `onFinishFailed` | `(failure: ValidationFailure<T>) => void` | `undefined` | `submit()` 校验失败后的回调 Prop |
107
+ | `onReset` | `() => void` | `undefined` | 内部表单完整 `reset()` 完成后的回调;不在 `resetFields()` 后触发 |
108
+ | `onLoadingChange` | `(loading: boolean) => void` | `undefined` | 内部表单提交开始和结束时的回调 |
109
+ | `onValuesChange` | `(changedValues, latestSnapshot) => void` | `undefined` | 字段值变化后的回调 Prop |
110
+ | `onFieldsChange` | `(changedFields, allFields) => void` | `undefined` | 字段路径变化后的回调 Prop |
111
+ | `onRuleError` | `FormCallbackOptions<T>["onRuleError"]` | `undefined` | 规则解析异常回调;内部创建实例时当前不会透传,需在外部 `form` 实例上配置 |
112
+ | `lifecycleHooks` | `FormLifecycleOptions["lifecycleHooks"]` | `undefined` | Runtime 生命周期钩子 |
113
+ | `schedulerOptions` | `SchedulerOptions` | `undefined` | Scheduler 时间片与 idle 队列配置 |
114
+ | `validationConcurrency` | `number` | `8` | 整表校验时同时运行的字段数 |
115
+ | `loading` | `boolean` | `undefined` | 覆盖内置操作区显示的提交状态,不改变 Core 的真实提交状态 |
116
+ | `submitter` / `resetter` | `boolean \| SchemxFormActionConfig` | `true` | 控制内置提交 / 重置按钮;默认渲染,设为 `false` 隐藏,配置可设置 `text` `buttonProps` |
117
+ | `class` | `string` | `""` | 添加到根 `.schemx` 元素的类名 |
118
+ | `style` | `StyleValue` | `{}` | 绑定到根 `.schemx` 元素 |
119
+
120
+ 上述 Schema 默认配置都会参与 core 的字段规范化,通常按字段配置 → 表单 Prop → core 固定默认值合并。Registry、默认 Renderer 和 `validatorAdapters` 则按表单显式配置 → 当前 App 安装配置 → Vue 模块级 Registry → Core 模块级配置 → Core 内置默认值解析。必填只能通过 `required: true` 或 `RequiredOptions` 表达;普通 `rules` 只负责执行校验,不会显示必填星号。传入 `form` 时,`initialValues`、Registry 和所有表单回调都由外部实例的创建者配置;组件不会用同名 Props 重建 Core Form,但会通过 Vue bridge 包装该实例,并同步 `schemas` 与组件声明的 schema 配置。
121
+
122
+ `ConfigProvider` 的 `schemaConfig` 和 `colComponent` 更新会同步到已挂载的内部 `<Schemx>`;Registry、校验 adapter 和默认 Renderer 类型仍在 Form 创建时解析。
117
123
 
118
124
  当未显式传入 `rendererRegistry` 时,Vue `useForm()` 会使用全局 Registry;该 Registry 默认以 `input` 作为 fallback。因此若要让 `<Schemx :default-renderer-type="...">` 生效,应传入独立 Registry,或直接对 Vue 导出的全局 Registry 调用 `setFallback()`。传入外部 `form` 时,Renderer 配置由该实例决定。
119
125
 
@@ -123,7 +129,9 @@ console.log(Schemx === schemxForm) // true
123
129
 
124
130
  - 创建内部实例时,非空 `modelValue` 会覆盖同名 `initialValues` 字段,作为初始快照。
125
131
  - 外部替换 `modelValue` 后,组件会调用 `setFieldsValue()` 同步内部表单。
132
+ - 传入外部 `form` 时,非空 `modelValue` 会在组件挂载时先写入该实例;空对象仍视为未提供。
126
133
  - 内部或外部 `form` 的字段变化都会发出 `update:modelValue`,值为最新表单快照;同步来自 `modelValue` 的变化不会重复发出该事件。
134
+ - 外部 `form` 上的组件级 Schema Prop 撤销后会回到 Core 默认值,不保证恢复外部实例挂载前的同名配置。
127
135
  - 传入外部 `form` 时,组件级 `onFinish`、`onFinishFailed`、`onValuesChange` 和 `onFieldsChange` 不会重新配置该实例;这些回调应在创建外部实例时配置。
128
136
  - 传入外部 `form` 时,`onReset` 与 `onLoadingChange` 同样不会重新配置该实例;请在创建该实例时传入回调。
129
137
  - `onFinish`、`onFinishFailed`、`onValuesChange` 和 `onFieldsChange` 是声明过的回调 Props,不在 `defineEmits` 的事件列表中。模板中的 `@finish` 等写法会按 Vue listener Prop 规则映射到这些 Props,但 TypeScript 用户更适合显式传回调。
@@ -140,22 +148,27 @@ console.log(Schemx === schemxForm) // true
140
148
 
141
149
  ### Slots
142
150
 
143
- `Schemx` 把收到的所有 Slots 继续传给每个 `FormItem`。字符串字段名直接参与 Slot 命名。数组路径目前存在两种不同的字符串化规则:整体字段 Slot Renderer 子 Slot 会先经过 `normalizeNameKey()`,用 `.` 连接;标签、前置、内容、后置和错误 Slot 则直接把数组插入模板字符串,使用 JavaScript 默认的逗号连接。这是当前实现差异,并非统一的命名约定。
144
-
145
- | Slot 名称 | Slot Props | 行为 |
146
- | ------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------- |
147
- | `{name}` | 当前字段的 `SchemxViewSchema` | 完全接管整个字段,不渲染默认 FormItem 结构;数组路径 `['user', 'name']` 对应 `user.name` |
148
- | `{name}Label` | 当前字段的 `SchemxViewSchema` | 替换标签区域;同一数组路径当前对应 `user,nameLabel` |
149
- | `{name}Before` | 当前字段的 `value` 与 Renderer Props | 渲染在 Renderer 前;同一数组路径当前对应 `user,nameBefore` |
150
- | `{name}Content` | 当前字段 Schema 字段及 `columnElement` | 替换控件内容区域;`columnElement` 是已经创建的 Renderer VNode;同一数组路径当前对应 `user,nameContent` |
151
- | `{name}After` | 当前字段的 `value` 与 Renderer Props | 渲染在 Renderer 后、错误区域前;同一数组路径当前对应 `user,nameAfter` |
152
- | `{name}Error` | 当前字段 Schema 字段及 `errors` | 替换错误区域;同一数组路径当前对应 `user,nameError` |
153
- | `{name}:{slotName}` | 原样传给 Renderer | 去掉 `{name}:` 前缀后作为 Renderer 命名 Slot;同一数组路径的前缀为 `user.name:`,例如 `user.name:prefix` |
154
- | `submitter` | `{ form, loading, disabled, submit }` | 替换内置提交按钮。 |
155
- | `resetter` | `{ form, loading, disabled, reset }` | 替换内置重置按钮。 |
151
+ `Schemx` 把收到的所有 Slots 继续传给每个 `Field` `Group`。嵌套字段名可直接作为 Slot 前缀,例如 `user.nameLabel`。
152
+
153
+ | Slot 名称 | Slot Props | 行为 |
154
+ | ------------------- | ------------------------------------- | -------------------------------------------------------------------------------------------------------- |
155
+ | `{name}` | `SchemxFieldSlotProps` | 替换 Field wrapper 内的默认内容;保留 wrapper、其 class/style 和透传属性 |
156
+ | `{name}Label` | `SchemxFieldSlotProps` | 替换标签区域 |
157
+ | `{name}Before` | `SchemxFieldSlotProps` | 渲染在 Renderer |
158
+ | `{name}Content` | `SchemxFieldContentSlotProps` | 替换控件内容区域;额外提供默认 Renderer `columnElement` |
159
+ | `{name}After` | `SchemxFieldSlotProps` | 渲染在 Renderer 后、错误区域前 |
160
+ | `{name}Error` | `SchemxFieldErrorSlotProps` | 替换错误区域;额外提供当前错误列表 `errors` |
161
+ | `{name}:{slotName}` | 原样传给 Renderer | 去掉 `{name}:` 前缀后作为 Renderer 命名 Slot;同一数组路径的前缀为 `user.name:`,例如 `user.name:prefix` |
162
+ | `{groupKey}Header` | `SchemxGroupSlotProps` | 替换分组 Header 内部内容;保留默认的无障碍与折叠容器 |
163
+ | `{groupKey}Label` | `SchemxGroupSlotProps` | 替换默认分组标题;保留默认折叠箭头 |
164
+ | `{groupKey}Content` | `SchemxGroupSlotProps` | 替换分组 Body 内的子字段布局 |
165
+ | `submitter` | `{ form, loading, disabled, submit }` | 替换内置提交按钮。 |
166
+ | `resetter` | `{ form, loading, disabled, reset }` | 替换内置重置按钮。 |
156
167
 
157
168
  字段名和 `Label` / `Before` / `Content` / `After` / `Error` 组合支持 camelCase 与 kebab-case 互查。子 Renderer Slot 的字段名前缀也支持这两种形式。
158
169
 
170
+ 字段 Slot 的规范公共参数为 `{ schema, componentProps, value, field, form }`;不再把 Schema 或 Renderer Props 展开到 Slot 参数顶层。这样区域专属参数始终清晰可辨:`Content` 增加 `columnElement`,`Error` 增加 `errors`。这些公开类型均可从 `@schemx/vue` 导入。
171
+
159
172
  ```vue
160
173
  <Schemx :schemas="schemas">
161
174
  <template #nicknameLabel="schema">
@@ -182,16 +195,19 @@ console.log(Schemx === schemxForm) // true
182
195
 
183
196
  ### 组件 ref 暴露实例
184
197
 
185
- 组件通过 `defineExpose` 暴露传入或内部创建的完整 `SchemxInstance<T>`。该接口当前共有 41 个成员:
198
+ 组件通过 `defineExpose` 暴露传入或内部创建的完整 `SchemxInstance<T>`:
186
199
 
187
- | 分类 | 成员 |
188
- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
189
- | 值与快照(9) | `getFieldValue`、`getFieldsValue`、`setFieldValue`、`setFieldsValue`、`getFieldSnapshot`、`getFieldsSnapshot`、`getInitialValue`、`getInitialValues`、`setInitialValues` |
190
- | touched 与 pending(6) | `isFieldTouched`、`setFieldTouched`、`getTouchedFields`、`setFieldPending`、`isFieldPending`、`getPendingFields` |
191
- | 重置、校验与提交(8) | `resetFields`、`reset`、`validateField`、`validate`、`getFieldErrors`、`setFieldErrors`、`clearFieldErrors`、`submit` |
192
- | 响应与 Schema(9) | `effect`、`batch`、`setSchemas`、`updateSchemas`、`updateFieldSchema`、`updateSchemaConfig`、`getViewSchemas`、`subscribeViewSchemas`、`waitForDependencies` |
193
- | Registry(8) | `getRenderer`、`registerRenderer`、`hasRenderer`、`getRule`、`registerRule`、`hasRule`、`setFieldRules`、`removeFieldRules` |
194
- | 生命周期(1) | `destroy` |
200
+ | 分类 | 成员 |
201
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
202
+ | | `getFieldValue`、`getFieldsValue`、`setFieldValue`、`setFieldsValue` |
203
+ | 快照与初始值 | `getFieldSnapshot`、`getFieldsSnapshot`、`getInitialValue`、`getInitialValues`、`setInitialValue`、`setInitialValues` |
204
+ | touched | `isFieldTouched`、`isFieldsTouched`、`setFieldTouched`、`setFieldsTouched`、`getTouchedFields` |
205
+ | pending 与 loading | `setFieldPending`、`setFieldsPending`、`isFieldPending`、`isFieldsPending`、`getPendingFields`、`isLoading` |
206
+ | 错误 | `getFieldErrors`、`getFieldsErrors`、`setFieldErrors`、`setFieldsErrors`、`clearFieldErrors`、`clearFieldsErrors`、`clearErrors` |
207
+ | 重置、校验与提交 | `resetField`、`resetFields`、`reset`、`validateField`、`validate`、`submit` |
208
+ | 响应与 Schema | `effect`、`batch`、`setSchemas`、`updateSchemas`、`updateSchemaConfig`、`getViewSchemas`、`subscribeViewSchemas`、`waitForDependencies` |
209
+ | Registry 与规则 | `getRenderer`、`registerRenderer`、`hasRenderer`、`getPresetRule`、`registerPresetRule`、`hasPresetRule`、`setFieldRules`、`setFieldsRules`、`removeFieldRules`、`removeFieldsRules` |
210
+ | 生命周期 | `destroy` |
195
211
 
196
212
  ```vue
197
213
  <script setup lang="ts">
@@ -244,12 +260,12 @@ app.use(Schemx, {
244
260
  schemaConfig: { showRequiredMark: false },
245
261
  defaultRendererType: "input",
246
262
  rendererRegistry,
247
- validationRuleRegistry,
263
+ presetRuleRegistry,
248
264
  validatorAdapters: [adapter],
249
265
  })
250
266
  ```
251
267
 
252
- 安装配置属于当前 Vue App;不同 App 可以使用不同的 Registry、字段默认值、默认 renderer 类型和校验 adapter,适用于多应用和 SSR 隔离场景。配置优先级为表单显式配置、当前 App 安装配置、Vue 包默认 Registry、Core 模块级配置、Core 内置默认值。`validatorAdapters` 按该顺序累积;同 ID adapter 需要通过 `{ adapter, override: true }` 显式覆盖。`app.use()` 不会调用 Core 的模块级 `configureSchemx()`;该 API 仍可作为 Vue 与直接 `createForm()` 的低优先级基线。可安装组件还挂载了静态属性 `Schemx.FormItem`;`FormGroup` 仅作为根入口命名导出,不是静态属性。
268
+ 安装配置属于当前 Vue App;不同 App 可以使用不同的 Registry、字段默认值、默认 renderer 类型和校验 adapter,适用于多应用和 SSR 隔离场景。配置优先级为表单显式配置、当前 App 安装配置、Vue 包默认 Registry、Core 模块级配置、Core 内置默认值。`validatorAdapters` 按该顺序累积;同 ID adapter 需要通过 `{ adapter, override: true }` 显式覆盖。`app.use()` 不会调用 Core 的模块级 `configureSchemx()`;该 API 仍可作为 Vue 与直接 `createForm()` 的低优先级基线。可安装组件还挂载了静态属性 `Schemx.Field`;`Group` 仅作为根入口命名导出,不是静态属性。
253
269
 
254
270
  `SchemxFormProps` 和 Vue 层 `FieldInstance` 也会从 `@schemx/vue` 根入口导出;业务代码通常仍可直接从组件或 Hook 调用处推导类型,不需要依赖深层路径。
255
271
 
@@ -300,7 +316,7 @@ const schemas: SchemxField<Values>[] = [
300
316
  | `labelIcon`、`labelAlign`、`labelPosition`、`labelWidth` | 否 | 标签展示配置 |
301
317
  | `contentAlign`、`colon` | 否 | 内容对齐和冒号配置 |
302
318
  | `validationTrigger` | 否 | `change`、`blur` 等校验触发时机 |
303
- | `onChange`、`onBlur` | 否 | 类型中存在的顶层回调;当前 Vue `FormItem` 不调用它们,Renderer 事件说明见后文 |
319
+ | `onChange`、`onBlur` | 否 | 类型中存在的顶层回调;当前 Vue `Field` 不调用它们,Renderer 事件说明见后文 |
304
320
  | `class`、`style` | 否 | Vue 通过声明合并增加,运行时分别应用到字段容器的 class 和内联 style,发布根声明会自动带入该 augmentation |
305
321
  | `key` | 否 | 框架字段;业务方通常不要设置 |
306
322
 
@@ -363,7 +379,7 @@ const dependency: SchemxField<Values> = {
363
379
 
364
380
  ```ts
365
381
  interface SchemxDictionary<T extends Values = Values, R = any> {
366
- api: (values: T, form: SchemxInstance<T>) => R | Promise<R>
382
+ api: (values: T, form: SchemxInstance<T>, signal?: AbortSignal) => R | Promise<R>
367
383
  formatter?: (res: Awaited<R>, form: SchemxInstance<T>) => any[] | Promise<any[]>
368
384
  dependsOn?: NamePath<T>[]
369
385
  shouldFetch?: (values: T) => boolean
@@ -452,7 +468,7 @@ function useDictionary<
452
468
  >(options: SchemxDictionary<TValues>, fieldName?: TName): UseDictionaryReturn
453
469
  ```
454
470
 
455
- `useDictionary` 必须在已经提供表单上下文的后代组件 `setup()` 中同步调用,例如 `Schemx` 的后代 Renderer。`fieldName` 只供 `resetOnDepsChange` 清空目标字段使用。通过 `WithRemoteOptions` 包装、且位于 `FormItem` 内的 Renderer 会自动从字段 Context 取得当前字段路径;直接调用 `useDictionary()` 或脱离 `FormItem` 使用 HOC 时,仍可显式传入该参数。
471
+ `useDictionary` 必须在已经提供表单上下文的后代组件 `setup()` 中同步调用,例如 `Schemx` 的后代 Renderer。`fieldName` 只供 `resetOnDepsChange` 清空目标字段使用。通过 `WithRemoteOptions` 包装、且位于 `Field` 内的 Renderer 会自动从字段 Context 取得当前字段路径;直接调用 `useDictionary()` 或脱离 `Field` 使用 HOC 时,仍可显式传入该参数。
456
472
 
457
473
  `UseDictionaryReturn` 的全部成员如下:
458
474
 
@@ -473,7 +489,7 @@ function useDictionary<
473
489
 
474
490
  ## 自定义 Renderer
475
491
 
476
- Renderer 是从 Registry 取出的普通 Vue 组件。`FormItem` 先展开 `schema.componentProps`,再注入或覆盖以下 Props:
492
+ Renderer 是从 Registry 取出的普通 Vue 组件。`Field` 先展开 `schema.componentProps`,再注入或覆盖以下 Props:
477
493
 
478
494
  | Prop / listener | 实际值与行为 |
479
495
  | ----------------------- | ------------------------------------------------------------------------------------------- |
@@ -486,11 +502,11 @@ Renderer 是从 Registry 取出的普通 Vue 组件。`FormItem` 先展开 `sche
486
502
  | `placeholder` | 当前 ViewSchema 的占位文本,覆盖 `componentProps.placeholder` |
487
503
  | `formItemProps` | 当前完整 ViewSchema,覆盖 `componentProps.formItemProps` |
488
504
 
489
- 其他 `componentProps`(例如 `options`、`readonlyPlaceholder`、`align` 和已经通过声明合并注册的组件专属 Props)原样透传。虽然 core 的 `SchemxBaseComponentProps` 声明了 `formInstance`,当前 Vue `FormItem` 不会自动注入它。
505
+ 其他 `componentProps`(例如 `options`、`readonlyPlaceholder`、`align` 和已经通过声明合并注册的组件专属 Props)原样透传。虽然 core 的 `SchemxBaseComponentProps` 声明了 `formInstance`,当前 Vue `Field` 不会自动注入它。
490
506
 
491
507
  当前也不会向普通 Renderer 自动注入 `fieldName`、字段校验 `error` / `errors` 或 `loading`。Renderer 如需当前字段路径或响应式状态,可调用 `useFieldContext()`;`WithRemoteOptions` 会自动使用该 Context 的字段路径处理 `resetOnDepsChange`,但不会把内部路径透传给被包装 Renderer。详见下一节。
492
508
 
493
- 注意:`componentProps.onChange`、`componentProps.onBlur` 会分别在框架注入的同名回调中调用。Schema 顶层的 `onChange`、`onBlur` 仍没有在 Vue `FormItem` 中接线;需要使用回调时应放在 `componentProps` 内。
509
+ 注意:`componentProps.onChange`、`componentProps.onBlur` 会分别在框架注入的同名回调中调用。Schema 顶层的 `onChange`、`onBlur` 仍没有在 Vue `Field` 中接线;需要使用回调时应放在 `componentProps` 内。
494
510
 
495
511
  ```vue
496
512
  <script setup lang="ts">
@@ -578,7 +594,7 @@ rendererRegistry.register("input", markRaw(InputRenderer))
578
594
 
579
595
  ```ts
580
596
  type SchemxWithDictionary<A, T extends Values = Values> = A & {
581
- dict?: SchemxDictionary<T>
597
+ dict?: SchemxDictionary<T> | SchemxDictionary<T>["api"]
582
598
  }
583
599
  ```
584
600
 
@@ -586,8 +602,8 @@ type SchemxWithDictionary<A, T extends Values = Values> = A & {
586
602
 
587
603
  `WithRemoteOptions(WrappedComponent)` 返回一个增强组件。增强组件声明并消费:
588
604
 
589
- - `dict?: SchemxDictionary`:存在时调用 `useDictionary(dict, fieldName)`。
590
- - `fieldName?: NamePath`:仅作为兼容回退。HOC 位于 `FormItem` 内时,默认从 `useFieldContext().name` 自动取得当前字段路径;显式值只用于脱离 `FormItem` 的独立使用,且不会继续传给被包装组件。
605
+ - `dict?: SchemxDictionary | SchemxDictionary["api"]`:存在时规范化后调用 `useDictionary(dict, fieldName)`。
606
+ - `fieldName?: NamePath`:仅作为兼容回退。HOC 位于 `Field` 内时,默认从 `useFieldContext().name` 自动取得当前字段路径;显式值只用于脱离 `Field` 的独立使用,且不会继续传给被包装组件。
591
607
 
592
608
  被包装组件实际收到所有其余 attrs、原始 `dict`,以及 HOC 决定的 `options` 和 `loading`:
593
609
 
@@ -721,10 +737,9 @@ componentProps: {
721
737
  | `useDictionary()` | 管理依赖字段的函数式选项来源 |
722
738
  | `useStableRef()` | 创建引用保持稳定的 `shallowRef` |
723
739
  | `useViewSchemas()` | 把 `subscribeViewSchemas()` 桥接为 Vue `shallowRef` |
724
- | `useFormSelector()` | 从共享表单值 Bridge 派生只读 Vue Ref |
725
- | `getCoreForm()` | 从 Vue Facade 取得原始 Core Form |
740
+ | `useFormSelector()` | 从共享表单值 Runtime 派生只读 Vue Ref |
726
741
 
727
- `useForm()` 只负责创建和销毁实例。如需让自定义组件树中的 `useField()`、`useDictionary()` 或 `FormItem` 找到实例,Provider 必须在 `setup()` 的同步调用栈中调用 `createFormContext(form)`;展示层还应调用 `createFormConfigContext({ schemaConfig })`。直接使用 `<Schemx>` 时,这两种上下文已经由组件提供。
742
+ `useForm()` 只负责创建和销毁实例。如需让自定义组件树中的 `useField()`、`useDictionary()` 或 `Field` 找到实例,Provider 必须在 `setup()` 的同步调用栈中调用 `createFormContext(form)`;展示层还应调用 `createFormConfigContext({ schemaConfig })`。直接使用 `<Schemx>` 时,这两种上下文已经由组件提供。
728
743
 
729
744
  ### 通用调用规则
730
745
 
@@ -738,7 +753,7 @@ function useForm<TValues extends Values = Values>(
738
753
  ): VueSchemxInstance<TValues>
739
754
  ```
740
755
 
741
- 源码中参数类型名为 `UseFormOptions<TValues>`,结构等同上面的 `CreateFormOptions`;`UseFormOptions` 未从根入口导出。`options` 可选,未传 Registry 时使用 Vue 全局 `rendererRegistry` 和 `validationRuleRegistry`。函数同步返回 `VueSchemxInstance<TValues>`:它与 `SchemxInstance<TValues>` 结构兼容,但 `getFieldValue()`、`getFieldErrors()`、`isFieldTouched()`、`isFieldPending()`、`getFieldsValue()` 和聚合状态读取可被 Vue effect 追踪。需要原始 Core 实例时使用 `getCoreForm(form)`。`useForm()` 不读取 Context,也**不会自动 `provide`**;当前 Vue effect scope 销毁时会释放 Bridge 并销毁 Form。非 Vue scope 场景应改用 Core `createForm()` 并自行销毁。
756
+ 源码中参数类型名为 `UseFormOptions<TValues>`,结构等同上面的 `CreateFormOptions`;`UseFormOptions` 未从根入口导出。`options` 可选,未传 Registry 时使用 Vue 全局 `rendererRegistry` 和 `presetRuleRegistry`。函数同步返回 `VueSchemxInstance<TValues>`:它与 `SchemxInstance<TValues>` 结构兼容,但 `getFieldValue()`、`getFieldErrors()`、`isFieldTouched()`、`isFieldPending()`、`getFieldsValue()` 和聚合状态读取可被 Vue effect 追踪。`useForm()` 不读取 Context,也**不会自动 `provide`**;当前 Vue effect scope 销毁时会释放 Runtime 并销毁 Form。非 Vue scope 场景应改用 Core `createForm()` 并自行销毁。
742
757
 
743
758
  ```ts
744
759
  import { createFormContext, useForm } from "@schemx/vue"
@@ -750,13 +765,13 @@ const form = useForm<ProfileValues>({ initialValues: { nickname: "" } })
750
765
  createFormContext(form)
751
766
  ```
752
767
 
753
- `useForm()` 除了补全 Vue 全局 Registry 外,会把 Core options 原样传给 `createForm()`。因此直接调用时,`modelValue` 会按 Core 规则覆盖同名 `initialValues` 并形成初始快照,`submit()` 也会等待直接传入的 `onFinish` Promise。前文 `modelValue` 不初始化、不持续反向同步,以及 `onFinish` Promise 不被等待的限制,只属于 `<Schemx>` 内部创建实例时的 Props 转换与回调包装,不属于 `useForm()` 本身。`defaultRendererType` 仍会受全局 Renderer Registry 已被补全的影响,见前文说明。
768
+ `useForm()` 除了补全 Vue 全局 Registry 外,会把 Core options 原样传给 `createForm()`。因此直接调用时,`initialValues` 会按 Core 规则形成初始快照,`submit()` 也会等待直接传入的 `onFinish` Promise。前文 `modelValue` 的初始化与同步行为,以及 `onFinish` Promise 不被等待的限制,只属于 `<Schemx>` 内部创建实例时的 Props 转换与回调包装,不属于 `useForm()` 本身。`defaultRendererType` 仍会受全局 Renderer Registry 已被补全的影响,见前文说明。
754
769
 
755
- ### Vue Facade 与共享 Bridge
770
+ ### Vue Instance 与共享 Runtime
756
771
 
757
- 同一 Core Form 始终复用一个 Facade;Vue Bridge 按需创建,并在存活期间由各个 Vue owner 共享。Facade 的写入、校验、提交、Schema 与 Registry 方法都委托原始 Core Form;仅常用状态读取会额外建立 Vue 依赖。`getFieldsValue()` 无参数时依赖全表值,传入路径时仅依赖这些字段。`getFieldSnapshot()`、`getFieldsSnapshot()`、`getInitialValue()` 与 `getInitialValues()` 保持 Core 的无依赖快照语义。
772
+ 同一 Core Form 始终复用一个 Instance 和一个内部 Runtime;响应式资源按需创建,并在存活期间由各个 Vue owner 共享。Instance 的写入、校验、提交、Schema 与 Registry 方法都委托原始 Core Form;仅常用状态读取会额外建立 Vue 依赖。`getFieldsValue()` 无参数时依赖全表值,传入路径时仅依赖这些字段。`getFieldSnapshot()`、`getFieldsSnapshot()`、`getInitialValue()` 与 `getInitialValues()` 保持 Core 的无依赖快照语义。
758
773
 
759
- `useFormSelector()` 和 `useField()` 复用这个 Bridge;前者返回 selector 结果的只读 Ref,后者复用字段 `value`、`errors`、`touched` 和 `pending` Ref。Bridge 通过 `@schemx/core/adapter` 的 `createFormStateAdapter()` 消费 Core `SnapshotSource`。最后一个 Vue owner 释放或手动调用 `form.destroy()` 后,Bridge 会停止订阅并释放这些快照来源。
774
+ `useFormSelector()` 和 `useField()` 复用这个 Runtime;前者返回 selector 结果的只读 Ref,后者复用字段 `value`、`errors`、`touched` 和 `pending` Ref。Runtime 通过 `@schemx/core/adapter` 的 `createFormStateAdapter()` 消费 Core `SnapshotSource`。最后一个 Vue owner 释放或手动调用 `form.destroy()` 后,Runtime 会停止订阅并释放这些快照来源。
760
775
 
761
776
  ### 3 组 Context API
762
777
 
@@ -781,11 +796,11 @@ function useFormConfigContext(): FormContextProps
781
796
 
782
797
  上面签名中的 `FieldInstance` 已从 `@schemx/vue` 根入口导出。`createFieldContext()` 当前只有 `TValues extends Values = Values`,**没有独立的 `TName` 泛型**;`field` 必须是 `useField()` 返回的 Vue 字段控制器,字段路径已由创建该返回值时的 `name` 捕获。调用方可以显式导入 `FieldInstance`,也可以依靠 `useField()` 推导参数。
783
798
 
784
- | Provider 签名 | Reader 签名 | 职责、所有权与缺失行为 |
785
- | --------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
786
- | `createFormContext<T>(form: SchemxInstance<T>): VueSchemxInstance<T>` | `useFormContext<T>(): VueSchemxInstance<T>` | 将 Core Form 或已有 Facade 归一化后提供 / 读取。Provider 只持有 Bridge,不销毁外部 Core Form;缺失时 Reader 抛出带 `createFormContext(form)` 指引的 `Error`。 |
787
- | `createFieldContext<TValues extends Values = Values>(field): void` | `useFieldContext(): FieldInstance<Values>` | 提供 / 读取 `useField()` 返回的字段控制器。Provider 不创建字段、不接管订阅;缺失时 Reader 抛出指向 `createFieldContext(field)` 的 `Error`。 |
788
- | `createFormConfigContext<T>(props: FormContextProps<T>): void` | `useFormConfigContext(): FormContextProps` | 提供 / 读取表单展示配置。Provider 不复制、不更新传入对象;缺失时 Reader 抛出带 `createFormConfigContext(props)` 指引的 `Error`。 |
799
+ | Provider 签名 | Reader 签名 | 职责、所有权与缺失行为 |
800
+ | --------------------------------------------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
801
+ | `createFormContext<T>(form: SchemxInstance<T>): VueSchemxInstance<T>` | `useFormContext<T>(): VueSchemxInstance<T>` | 将 Core Form 或已有 Instance 归一化后提供 / 读取。Provider 只持有 Runtime,不销毁外部 Core Form;缺失时 Reader 抛出带 `createFormContext(form)` 指引的 `Error`。 |
802
+ | `createFieldContext<TValues extends Values = Values>(field): void` | `useFieldContext(): FieldInstance<Values>` | 提供 / 读取 `useField()` 返回的字段控制器。Provider 不创建字段、不接管订阅;缺失时 Reader 抛出指向 `createFieldContext(field)` 的 `Error`。 |
803
+ | `createFormConfigContext<T>(props: FormContextProps<T>): void` | `useFormConfigContext(): FormContextProps` | 提供 / 读取表单展示配置。Provider 不复制、不更新传入对象;缺失时 Reader 抛出带 `createFormConfigContext(props)` 指引的 `Error`。 |
789
804
 
790
805
  ```ts
791
806
  import {
@@ -831,9 +846,9 @@ function useField<TValues extends Values = Values>(
831
846
  ): FieldInstance<TValues>
832
847
  ```
833
848
 
834
- Hook 从 `useFormContext()` 取得 Facade,为 `name` 创建 Core 字段控制器,并复用共享 Vue Field Bridge。它保留 Core `SchemxFieldInstance` 的全部成员,并增加 `value: Ref<FieldValue<...> | undefined>`、`errors: ComputedRef<readonly string[]>`、`dirty: ComputedRef<boolean>` 与 `pending: ComputedRef<boolean>`;`dirty` 读取字段 touched Ref。`getValue()`、`getErrors()`、`isTouched()` 和 `isPending()` 都读取对应 Vue Ref,`getValues()` 则通过 Facade 读取全表值。只有 `value` 可通过 `.value` 写入,其余三个 computed 状态只读。Core 方法的完整签名见 [Core 单字段控制器](../core#单字段控制器)。
849
+ Hook 从 `useFormContext()` 取得 Instance,为 `name` 创建 Core 字段控制器,并复用共享 Runtime 中的字段状态。它保留 Core `SchemxFieldInstance` 的全部成员,并增加 `value: Ref<FieldValue<...> | undefined>`、`errors: ComputedRef<readonly string[]>`、`dirty: ComputedRef<boolean>` 与 `pending: ComputedRef<boolean>`;`dirty` 读取字段 touched Ref。`getValue()`、`getErrors()`、`isTouched()` 和 `isPending()` 都读取对应 Vue Ref,`getValues()` 则通过 Instance 读取全表值。只有 `value` 可通过 `.value` 写入,其余三个 computed 状态只读。Core 方法的完整签名见 [Core Schema source、字段与监听](../core#schema-source字段与监听)。
835
850
 
836
- `useField()` 不缓存字段控制器对象;每次调用只创建轻量的 Core 控制器包装,并复用当前 Form Bridge 中按字段 `SnapshotSource` 缓存的字段 Ref。Bridge 以公开 `NamePath` 规范化结果复用字段;当前公开类型仅支持字符串路径。Form Bridge 由 `useForm()`、Form Context 和 `useFormSelector()` 等 Vue owner 的引用计数持有,最后一个 owner 释放或手动销毁后停止订阅。`FieldInstance` 可从 `@schemx/vue` 根入口导入;不需要依赖深层路径。
851
+ `useField()` 不缓存字段控制器对象;每次调用只创建轻量的 Core 控制器包装,并复用当前 Runtime 中按字段 `SnapshotSource` 缓存的字段 Ref。Runtime 由 `useForm()`、Form Context 和 `useFormSelector()` 等 Vue owner 的引用计数持有,最后一个 owner 释放或手动销毁后停止订阅。`FieldInstance` 可从 `@schemx/vue` 根入口导入;不需要依赖深层路径。
837
852
 
838
853
  ```ts
839
854
  import { createFieldContext, useField } from "@schemx/vue"
@@ -962,55 +977,53 @@ const viewSchemas = useViewSchemas(form)
962
977
  console.log(viewSchemas.value)
963
978
  ```
964
979
 
965
- ## FormItemFormGroup
980
+ ## FieldGroup
966
981
 
967
- ### `FormItem`
982
+ ### `Field`
968
983
 
969
- `FormItem` 只接受一个必填 Prop:
984
+ `Field` 只接受一个必填 Prop:
970
985
 
971
- | Prop | 类型 | 说明 |
972
- | -------- | --------------------- | ----------------------------------------------------------------- |
973
- | `schema` | `SchemxViewSchema<T>` | core 已解析完成的字段或分组 ViewSchema,不是原始 `SchemxField<T>` |
986
+ | Prop | 类型 | 说明 |
987
+ | -------- | -------------------------- | ----------------------------------------------------------- |
988
+ | `schema` | `SchemxViewFieldSchema<T>` | core 已解析完成的字段 ViewSchema,不是原始 `SchemxField<T>` |
974
989
 
975
- 传入分组 ViewSchema 时,`FormItem` 委托给 `FormGroup`;传入普通字段 ViewSchema 时,它创建字段控制器、提供字段上下文、查找 Renderer,并处理标签、内容、错误、校验触发和可见性。
990
+ `Field` 只处理普通字段 ViewSchema:它创建字段控制器、提供字段上下文、查找 Renderer,并处理标签、内容、错误、校验触发和可见性。`Schemx` 会在根级 ViewSchema 循环中直接区分并渲染 `Field` `Group`。
976
991
 
977
- 它支持与 `Schemx` 一致的动态 Slots:`{name}`、`{name}Label`、`{name}Content`、`{name}Error` 和 `{name}:{slotName}`。完整 Slot Props 见 [Schemx 组件的 Slots](#slots)。
992
+ 它支持与 `Schemx` 一致的动态 Slots:`{name}`、`{name}Label`、`{name}Before`、`{name}Content`、`{name}After`、`{name}Error` 和 `{name}:{slotName}`。完整 Slot Props 见 [Schemx 组件的 Slots](#slots)。
978
993
 
979
- `FormItem` 不能脱离上下文单独工作:普通字段至少需要祖先同步提供 `SchemxInstance` 和 `FormContextProps`,通常直接放在 `<Schemx>` 内部。若自定义 adapter 直接使用它,需要同时调用 `createFormContext(form)` 与 `createFormConfigContext(config)`。传给它的 Schema 应来自 `form.getViewSchemas()` 或 `useViewSchemas(form)`,不要把尚未编译的 dependency Schema 直接传入。
994
+ `Field` 不能脱离上下文单独工作:普通字段至少需要祖先同步提供 `SchemxInstance` 和 `FormContextProps`,通常直接放在 `<Schemx>` 内部。若自定义 adapter 直接使用它,需要同时调用 `createFormContext(form)` 与 `createFormConfigContext(config)`。传给它的 Schema 应来自 `form.getViewSchemas()` 或 `useViewSchemas(form)`,不要把尚未编译的 dependency Schema 直接传入。
980
995
 
981
- ### `FormGroup`
996
+ ### `Group`
982
997
 
983
- `FormGroup` 同样只有一个必填 Prop:
998
+ `Group` 同样只有一个必填 Prop:
984
999
 
985
1000
  | Prop | 类型 | 说明 |
986
1001
  | -------- | -------------------------- | --------------------------------------- |
987
1002
  | `schema` | `SchemxViewGroupSchema<T>` | 包含已解析 `children` 的分组 ViewSchema |
988
1003
 
989
- 它会把收到的全部 Slots 原样传给子级 `FormItem`。`collapsible` 控制标题是否可点击和通过 Enter / Space 切换;`disabled` 状态禁止折叠交互,`readonly` 状态仍允许浏览和折叠。组件支持受控与非受控折叠;从受控切换为非受控时会延续最后一次受控值。`destroyOnCollapse` 控制子级是否卸载,ARIA 关联 ID 优先使用 Core RuntimeNode ID,直接挂载组件时回退到 Vue 实例 ID,避免规范化后相同 key 发生冲突。
1004
+ 它会把收到的全部 Slots 原样传给子级 `Field` 或嵌套 `Group`,并支持 `{groupKey}Header`、`{groupKey}Label`、`{groupKey}Content` 三个分组自身 Slot。`Header` 替换 Header 内部内容,`Label` 替换标题,`Content` 替换 Body 内的默认子字段布局;三者都接收 `schema`、`collapsed`、`collapsible`、`disabled`、`readonly` 和 `toggle`。`collapsible` 控制标题是否可点击和通过 Enter / Space 切换;`disabled` 状态禁止折叠交互,`readonly` 状态仍允许浏览和折叠。组件支持受控与非受控折叠;从受控切换为非受控时会延续最后一次受控值。`destroyOnCollapse` 控制子级是否卸载,ARIA 关联 ID 优先使用 Core Node ID,直接挂载组件时回退到 Vue 实例 ID,避免规范化后相同 key 发生冲突。
1005
+
1006
+ `label` 为空时不渲染标题。Vue 源码的 `types/index.ts` 通过声明合并为分组 Schema 增加 `class` 和 `style`,发布声明入口会加载该增强;运行时将二者绑定到 `.schemx-group-wrapper` 外层容器。子级字段仍要求表单实例和展示配置上下文。
990
1007
 
991
- `label` 为空时不渲染标题。Vue 源码的 `types/index.ts` 通过声明合并为分组 Schema 增加 `class` `style`,发布声明入口会加载该增强;运行时将二者分别绑定到 `.schemx-group` 根元素。子级字段仍要求表单实例和展示配置上下文。
1008
+ `Field` `Group` 是构建自定义 Vue adapter 或重排 ViewSchemas 时的底层组件。一般业务表单优先使用 `<Schemx>`;只有在需要自定义整体布局、分区或容器时才直接组合这两个组件。
992
1009
 
993
- `FormItem` 和 `FormGroup` 是构建自定义 Vue adapter 或重排 ViewSchemas 时的底层组件。一般业务表单优先使用 `<Schemx>`;只有在需要自定义整体布局、分区或容器时才直接组合这两个组件。
1010
+ `class` 和 `style` 支持多来源合并。`Schemx` 根节点使用内部 `schemx` class 与组件 Props;Field 外层容器按“内部 class → 父级传入 class/style → Schema 的 `class`/`style`”合并;Group 外层容器按同样顺序合并。class 会全部保留,style 后面的来源覆盖前面的同名属性。Field Schema 样式作用于 `.schemx-field-wrapper`,Group Schema 样式作用于 `.schemx-group-wrapper`。
994
1011
 
995
1012
  ## Registry
996
1013
 
997
1014
  Vue 包自有 2 个模块级单例:
998
1015
 
999
- | 导出 | 真实类型 | 初始内容 | 与 `useForm()` 的关系 |
1000
- | ------------------------ | ------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------- |
1001
- | `rendererRegistry` | `RendererRegistry<SchemxRendererKey>` | 空 Registry,默认 renderer key 预设为 `"input"`;未注册 `input` 时仍无法取得组件。 | 未传 `options.rendererRegistry` 时使用该单例。 |
1002
- | `validationRuleRegistry` | `ValidationRuleRegistry` | 模块初始化时为空,只保存显式注册的命名规则;`required` 不会写入 Registry。 | 未传 `options.validationRuleRegistry` 时使用该单例。 |
1016
+ | 导出 | 真实类型 | 初始内容 | 与 `useForm()` 的关系 |
1017
+ | -------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------ |
1018
+ | `rendererRegistry` | `RendererRegistry<SchemxRendererKey>` | 空 Registry,默认 renderer key 预设为 `"input"`;未注册 `input` 时仍无法取得组件。 | 未传 `options.rendererRegistry` 时使用该单例。 |
1019
+ | `presetRuleRegistry` | `PresetRuleRegistry` | 模块初始化时为空,只保存显式注册的预设规则;`required` 不会写入 Registry。 | 未传 `options.presetRuleRegistry` 时使用该单例。 |
1003
1020
 
1004
- Renderer Registry 包含 `register`、`registerAll`、`get`、`resolve`、`has`、`unregister`、`keys`、`setFallback`、`getFallback`、`clear` 和 `size`;ValidationRuleRegistry 包含 `register`、`registerAll`、`get`、`resolve`、`has`、`unregister`、`keys`、`clear` 和 `size`。完整签名见 Core 的 [命名规则 Registry](../core#命名规则-registry) 与 [Renderer Registry](../core#renderer-registry) 章节。
1021
+ Renderer Registry 包含 `register`、`registerAll`、`get`、`resolve`、`has`、`unregister`、`keys`、`setFallback`、`getFallback`、`clear` 和 `size`;PresetRuleRegistry 包含 `register`、`registerAll`、`get`、`resolve`、`has`、`unregister`、`keys`、`clear` 和 `size`。完整签名见 Core 的 [校验](../core#校验) 与 [Renderer Registry](../core#renderer-registry) 章节。
1005
1022
 
1006
1023
  ```ts
1007
1024
  import { markRaw } from "vue"
1008
1025
 
1009
- import {
1010
- rendererRegistry,
1011
- validationRuleRegistry,
1012
- type StandardSchemaV1,
1013
- } from "@schemx/vue"
1026
+ import { rendererRegistry, presetRuleRegistry, type StandardSchemaV1 } from "@schemx/vue"
1014
1027
 
1015
1028
  import InputRenderer from "./InputRenderer.vue"
1016
1029
 
@@ -1027,24 +1040,20 @@ const phoneRule: StandardSchemaV1<string> = {
1027
1040
  },
1028
1041
  },
1029
1042
  }
1030
- validationRuleRegistry.register("phone", phoneRule)
1043
+ presetRuleRegistry.register("phone", phoneRule)
1031
1044
  ```
1032
1045
 
1033
1046
  全局 Registry 由所有表单共享。表单独立 Registry 则由 Core 工厂新建,并通过 `useForm()` 选项或 `<Schemx>` Props 传入:
1034
1047
 
1035
1048
  ```ts
1036
- import {
1037
- createRendererRegistry,
1038
- createValidationRuleRegistry,
1039
- useForm,
1040
- } from "@schemx/vue"
1049
+ import { createRendererRegistry, createPresetRuleRegistry, useForm } from "@schemx/vue"
1041
1050
 
1042
1051
  const renderers = createRendererRegistry("input")
1043
- const validators = createValidationRuleRegistry()
1044
- const form = useForm({ rendererRegistry: renderers, validationRuleRegistry: validators })
1052
+ const validators = createPresetRuleRegistry()
1053
+ const form = useForm({ rendererRegistry: renderers, presetRuleRegistry: validators })
1045
1054
  ```
1046
1055
 
1047
- `createRendererRegistry()` 和 `createValidationRuleRegistry()` 是 Core 传递导出,不是 Vue 自有 API。独立 ValidationRuleRegistry 创建时为空,只有调用方显式注册的命名规则;必填由字段的 `required` 配置处理。
1056
+ `createRendererRegistry()` 和 `createPresetRuleRegistry()` 是 Core 传递导出,不是 Vue 自有 API。独立 PresetRuleRegistry 创建时为空,只有调用方显式注册的预设规则;必填由字段的 `required` 配置处理。
1048
1057
 
1049
1058
  ## 类型参考
1050
1059
 
@@ -1072,176 +1081,172 @@ Vue 根入口自有以下公开类型:
1072
1081
 
1073
1082
  ### Vue 自有导出
1074
1083
 
1075
- | 分类 | 导出 | 用途 |
1076
- | --------------- | --------------------------------------- | --------------------------------------------- |
1077
- | 表单组件 | `schemxForm` | 可安装的表单组件;与 `default` 指向同一对象。 |
1078
- | 组件 | `FormItem` | 渲染字段或分组 ViewSchema。 |
1079
- | 组件 | `FormGroup` | 渲染分组 ViewSchema。 |
1080
- | HOC | `WithRemoteOptions` | 为 Renderer 接入 Dictionary。 |
1081
- | Registry | `rendererRegistry` | Vue 全局 Renderer Registry。 |
1082
- | Registry | `validationRuleRegistry` | Vue 全局 ValidationRuleRegistry |
1083
- | Hook | `useForm` | 创建并按 Vue scope 销毁表单。 |
1084
- | Context | `createFormContext` | 提供表单实例。 |
1085
- | Context | `useFormContext` | 读取表单实例。 |
1086
- | Hook | `useField` | 创建 Vue 字段控制器。 |
1087
- | Context | `createFieldContext` | 提供字段控制器。 |
1088
- | Context | `useFieldContext` | 读取字段控制器。 |
1089
- | Context | `createFormConfigContext` | 提供表单展示配置。 |
1090
- | Context | `useFormConfigContext` | 读取表单展示配置。 |
1091
- | Watch | `useWatch` | 统一分发 Vue Watch。 |
1092
- | Watch | `useWatchField` | 单字段 Vue Watch。 |
1093
- | Watch | `useWatchFields` | 多字段 Vue Watch。 |
1094
- | Watch | `useWatchAll` | 全表 Vue Watch。 |
1095
- | Dictionary | `useDictionary` | 管理函数式选项源。 |
1096
- | Vue 响应式 | `useStableRef` | 建立浅比较稳定 Ref。 |
1097
- | ViewSchema | `useViewSchemas` | 桥接 ViewSchemas 为 Ref。 |
1098
- | 默认导出 | `default` | `schemxForm` 严格相等。 |
1099
- | Context 类型 | `FormContextProps` | 表单展示 Context。 |
1100
- | Dictionary 类型 | `SchemxDictionary` | 函数式选项源配置。 |
1101
- | 插件类型 | `SchemxInstallOptions` | 当前 Vue App 的默认配置安装选项。 |
1102
- | Dictionary 类型 | `SchemxWithDictionary` | 为 Props 增加 `dict`。 |
1103
- | Dictionary 类型 | `UseDictionaryReturn` | `useDictionary()` 返回值。 |
1104
- | 表单类型 | `SchemxFormProps<TValues>` | `<Schemx>` 组件 Props 类型。 |
1105
- | 字段类型 | `FieldInstance<TValues>` | Vue Ref / Computed 桥接后的字段控制器类型。 |
1084
+ | 分类 | 导出 | 用途 |
1085
+ | --------------- | ----------------------------------- | --------------------------------------------- |
1086
+ | 表单组件 | `schemxForm` | 可安装的表单组件;与 `default` 指向同一对象。 |
1087
+ | 组件 | `Field` | 渲染字段 ViewSchema。 |
1088
+ | 组件 | `Group` | 渲染分组 ViewSchema。 |
1089
+ | HOC | `WithRemoteOptions` | 为 Renderer 接入 Dictionary。 |
1090
+ | Registry | `rendererRegistry` | Vue 全局 Renderer Registry。 |
1091
+ | Registry | `presetRuleRegistry` | Vue 全局 PresetRuleRegistry |
1092
+ | Hook | `useForm` | 创建并按 Vue scope 销毁表单。 |
1093
+ | Context | `createFormContext` | 提供表单实例。 |
1094
+ | Context | `useFormContext` | 读取表单实例。 |
1095
+ | Hook | `useField` | 创建 Vue 字段控制器。 |
1096
+ | Context | `createFieldContext` | 提供字段控制器。 |
1097
+ | Context | `useFieldContext` | 读取字段控制器。 |
1098
+ | Context | `createFormConfigContext` | 提供表单展示配置。 |
1099
+ | Context | `useFormConfigContext` | 读取表单展示配置。 |
1100
+ | Watch | `useWatch` | 统一分发 Vue Watch。 |
1101
+ | Watch | `useWatchField` | 单字段 Vue Watch。 |
1102
+ | Watch | `useWatchFields` | 多字段 Vue Watch。 |
1103
+ | Watch | `useWatchAll` | 全表 Vue Watch。 |
1104
+ | Dictionary | `useDictionary` | 管理函数式选项源。 |
1105
+ | Vue 响应式 | `useStableRef` | 建立浅比较稳定 Ref。 |
1106
+ | ViewSchema | `useViewSchemas` | 桥接 ViewSchemas 为 Ref。 |
1107
+ | Hook | `useFormSelector` | 从表单值派生只读 Vue Ref。 |
1108
+ | 默认导出 | `default` | `schemxForm` 严格相等。 |
1109
+ | Context 类型 | `FormContextProps` | 表单展示 Context。 |
1110
+ | Runtime 类型 | `VueSchemxInstance` | 可在 Vue effect 中追踪读取的 Form Instance。 |
1111
+ | Dictionary 类型 | `SchemxDictionary` | 函数式选项源配置。 |
1112
+ | 插件类型 | `SchemxInstallOptions` | 当前 Vue App 的默认配置安装选项。 |
1113
+ | Dictionary 类型 | `SchemxWithDictionary` | Props 增加 `dict`。 |
1114
+ | Dictionary 类型 | `UseDictionaryReturn` | `useDictionary()` 返回值。 |
1115
+ | 表单类型 | `SchemxFormProps<TValues>` | `<Schemx>` 组件 Props 类型。 |
1116
+ | 字段类型 | `FieldInstance<TValues>` | Vue Ref / Computed 桥接后的字段控制器类型。 |
1117
+ | Selector 类型 | `UseFormSelectorOptions<TSelected>` | `useFormSelector` 的比较和刷新配置。 |
1106
1118
 
1107
1119
  根入口没有名为 `SchemxForm` 的命名导出。
1108
1120
 
1109
1121
  ### Core 传递运行时值
1110
1122
 
1111
- | 分类 | 导出 | 用途 |
1112
- | ------------- | ------------------------------ | -------------------------------------------- |
1113
- | 表单 | `createForm` | 创建 Core 表单。 |
1114
- | 字段 | `createField` | 创建 Core 字段控制器。 |
1115
- | Schema source | `createSchemas` | 创建可更新 Schema source。 |
1116
- | Schema source | `isSchemxSchemas` | 判断 Schema source。 |
1117
- | Effect | `createSignalEffect` | 创建 Core signal effect。 |
1118
- | Effect | `runSignalUntracked` | 在不追踪 signal 依赖的上下文中执行函数。 |
1119
- | Watch | `createSignalWatch` | 监听 signal source 的变化。 |
1120
- | Watch | `createDebouncedSignalWatch` | 监听 signal source,并提供 debounce 控制器。 |
1121
- | 配置 | `configureSchemx` | 设置 Core 模块级默认配置。 |
1122
- | 配置 | `getGlobalSchemxConfig` | 读取 Core 模块级默认配置。 |
1123
- | 配置 | `mergeSchemxConfig` | 按优先级纯合并配置。 |
1124
- | 配置 | `resolveSchemxConfig` | 补齐 `schemaConfig` 默认值。 |
1125
- | 配置 | `mergeAndResolveSchemxConfig` | 合并配置并补齐默认值。 |
1126
- | 配置 | `defaultSchemxConfig` | Core 内置字段默认值。 |
1127
- | 配置 | `defaultSchemxConfigKeys` | 当前默认配置 key 集合。 |
1128
- | 配置 | `excludeSchemxConfigKeys` | 不参与字段默认配置的 key。 |
1129
- | 配置 | `schemaConfigKeys` | 兼容旧命名的默认配置 key |
1130
- | 配置 | `excludeSchemaConfigKeys` | 兼容旧命名的排除 key |
1131
- | Watch | `createWatch` | 分发 Core Watch。 |
1132
- | Watch | `createWatchField` | 单字段 Core Watch。 |
1133
- | Watch | `createWatchFields` | 多字段 Core Watch |
1134
- | Watch | `createWatchAll` | 全表 Core Watch |
1135
- | Registry | `createRendererRegistry` | 创建 Renderer Registry。 |
1136
- | Registry | `createValidationRuleRegistry` | 创建 ValidationRuleRegistry |
1137
- | Validator | `createValidator` | 创建底层 Validator |
1138
- | Schema 守卫 | `isBaseSchema` | 判断原始普通字段。 |
1139
- | Schema 守卫 | `isGroupSchema` | 判断原始 Group。 |
1140
- | Schema 守卫 | `isDependencySchema` | 判断原始 Dependency。 |
1141
- | Schema 守卫 | `isBaseResolvedSchema` | 判断解析后普通字段。 |
1142
- | Schema 守卫 | `isGroupResolvedSchema` | 判断解析后 Group。 |
1143
- | 路径 | `getByPath` | 读取嵌套路径。 |
1144
- | 路径 | `setByPath` | 写入嵌套路径。 |
1145
- | 路径 | `collectObjectPathsByLeaf` | 收集叶子路径。 |
1123
+ | 分类 | 导出 | 用途 |
1124
+ | ------------- | ----------------------------- | -------------------------------------------- |
1125
+ | 表单 | `createForm` | 创建 Core 表单。 |
1126
+ | 字段 | `createField` | 创建 Core 字段控制器。 |
1127
+ | Schema source | `createSchemas` | 创建可更新 Schema source。 |
1128
+ | Schema source | `isSchemxSchemas` | 判断 Schema source。 |
1129
+ | Effect | `createSignalEffect` | 创建 Core signal effect。 |
1130
+ | Effect | `runSignalUntracked` | 在不追踪 signal 依赖的上下文中执行函数。 |
1131
+ | Watch | `createSignalWatch` | 监听 signal source 的变化。 |
1132
+ | Watch | `createDebouncedSignalWatch` | 监听 signal source,并提供 debounce 控制器。 |
1133
+ | 配置 | `configureSchemx` | 设置 Core 模块级默认配置。 |
1134
+ | 配置 | `getGlobalSchemxConfig` | 读取 Core 模块级默认配置。 |
1135
+ | 配置 | `mergeSchemxConfig` | 按优先级纯合并配置。 |
1136
+ | 配置 | `resolveSchemxConfig` | 补齐 `schemaConfig` 默认值。 |
1137
+ | 配置 | `mergeAndResolveSchemxConfig` | 合并配置并补齐默认值。 |
1138
+ | 配置 | `defaultSchemxConfig` | Core 内置字段默认值。 |
1139
+ | 配置 | `defaultSchemxConfigKeys` | 当前默认配置 key 集合。 |
1140
+ | 配置 | `excludeSchemxConfigKeys` | 不参与字段默认配置的 key。 |
1141
+ | Watch | `createWatch` | 分发 Core Watch |
1142
+ | Watch | `createWatchField` | 单字段 Core Watch |
1143
+ | Watch | `createWatchFields` | 多字段 Core Watch。 |
1144
+ | Watch | `createWatchAll` | 全表 Core Watch。 |
1145
+ | Registry | `createRendererRegistry` | 创建 Renderer Registry |
1146
+ | Registry | `createPresetRuleRegistry` | 创建 PresetRuleRegistry |
1147
+ | Schema 守卫 | `isFieldSchema` | 判断原始普通字段。 |
1148
+ | Schema 守卫 | `isGroupSchema` | 判断原始 Group |
1149
+ | Schema 守卫 | `isDependencySchema` | 判断原始 Dependency |
1150
+ | 路径 | `getByPath` | 读取嵌套路径。 |
1151
+ | 路径 | `setByPath` | 写入嵌套路径。 |
1152
+ | 路径 | `collectObjectPathsByLeaf` | 收集叶子路径。 |
1146
1153
 
1147
1154
  ### Core 传递类型
1148
1155
 
1149
- | 分类 | 导出 | 用途 |
1150
- | ------------------ | -------------------------------- | ----------------------------------------- |
1151
- | Effect | `SignalEffectOptions` | signal effect 配置。 |
1152
- | Effect | `SignalEffectDispose` | signal effect 的 dispose 函数类型。 |
1153
- | Watch | `SignalWatchOptions` | signal watch 配置。 |
1154
- | Watch | `DebouncedSignalWatchOptions` | 带 debounce 的 signal watch 配置。 |
1155
- | Watch | `DebouncedSignalWatchControls` | 带 debounce 的 signal watch 控制器。 |
1156
- | Watch | `CreateWatchOptions` | Watch 选项。 |
1157
- | Watch | `CreateWatchReturn` | Watch 取消函数。 |
1158
- | Watch | `WatchFieldCallback` | 单字段 Watch callback。 |
1159
- | Watch | `WatchFieldsCallback` | 多字段 Watch callback。 |
1160
- | Watch | `WatchAllCallback` | 全表 Watch callback。 |
1161
- | 表单 | `CreateFormOptions` | Core 表单创建选项。 |
1162
- | 表单 | `FormSchemaOptions` | Schema、初始值和 `schemaConfig` 配置。 |
1163
- | 表单 | `FormRegistryOptions` | Renderer、Rule Registry 和 adapter 配置。 |
1164
- | 表单 | `FormCallbackOptions` | 提交、值变化和规则错误回调。 |
1165
- | 表单 | `FormLifecycleOptions` | Runtime 生命周期钩子。 |
1166
- | 表单 | `ResolvedCreateFormOptions` | 已归一化的 Form 创建配置。 |
1167
- | 表单 | `SchemxInstance` | Core 表单实例接口。 |
1168
- | 表单 | `SchemxGlobalContext` | Core 全局字段默认配置。 |
1169
- | Validator | `CreateValidatorOptions` | 规则执行异常回调配置。 |
1170
- | 基础 | `Values` | 表单值基础约束。 |
1171
- | 基础 | `Dynamic` | 静态值或同步 / 异步值函数。 |
1172
- | 路径 | `NamePath` | 类型安全字段路径。 |
1173
- | 路径 | `FieldValue` | 从路径提取字段值。 |
1174
- | 工具类型 | `DeepReadonly` | 深层只读类型。 |
1175
- | 工具类型 | `CSSProperties` | CSS 属性类型。 |
1176
- | Schema source | `SchemxSchemas` | 可更新 Schema source。 |
1177
- | Schema source | `SchemxSchemasInput` | Schema 数组或 source 联合。 |
1178
- | Schema source | `SchemxSchemasListener` | Schema source listener。 |
1179
- | 字段 | `SchemxFieldInstance` | Core 字段控制器。 |
1180
- | Schema | `SchemxBase` | 普通字段基础接口。 |
1181
- | Schema | `SchemxBaseField` | 按 Renderer key 分布的字段联合。 |
1182
- | Schema | `SchemxExactBaseField` | 保留具体 Renderer key 的字段类型。 |
1183
- | Schema | `SchemxGroupField` | 原始 Group Schema。 |
1184
- | Schema | `SchemxDependencyField` | 原始 Dependency Schema。 |
1185
- | Schema | `SchemxField` | 全部原始 Schema 联合。 |
1186
- | Schema | `SchemxResolvedField` | 解析后字段 / Group 联合。 |
1187
- | Schema | `SchemxBaseComponentProps` | Renderer 公共 Props。 |
1188
- | Schema | `SchemxComponentProps` | Renderer 专属与公共 Props。 |
1189
- | Schema | `SchemxFormItemProps` | 表单项字段配置。 |
1190
- | 扩展 | `SchemxFieldDefinition` | 普通字段声明合并接口。 |
1191
- | 扩展 | `SchemxGroupFieldDefinition` | Group 声明合并接口。 |
1192
- | 依赖 | `SchemxDependencies` | 字段动态依赖配置。 |
1193
- | 依赖 | `SchemxFieldDependencies` | 普通字段的动态属性与触发字段配置。 |
1194
- | 依赖 | `SchemxGroupDependencies` | Group 容器的动态状态配置。 |
1195
- | 依赖 | `SchemxDependencyDependencies` | Dependency 容器的动态状态配置。 |
1196
- | 依赖 | `SchemxContainerDependencies` | Group/Dependency 容器动态状态配置。 |
1197
- | 依赖 | `SchemxConditionFn` | 动态属性条件函数。 |
1198
- | 依赖 | `SchemxDependenciesStaticProps` | 依赖函数静态返回值映射。 |
1199
- | ViewSchema | `SchemxViewDebugMeta` | ViewSchema 诊断元数据。 |
1200
- | ViewSchema | `SchemxViewFieldSchema` | 字段渲染投影。 |
1201
- | ViewSchema | `SchemxViewGroupSchema` | Group 渲染投影。 |
1202
- | ViewSchema | `SchemxViewSchema` | 字段 / Group 投影联合。 |
1203
- | 配置 | `MergedSchemxConfig` | 已合并且补齐 `schemaConfig` 默认值。 |
1204
- | 配置 | `SchemxConfig` | Core 模块级和 Form/App 可继承配置。 |
1205
- | 配置 | `SchemxSchemaConfig` | 表单级字段默认展示与校验配置。 |
1206
- | 配置 | `SchemxConfigKey` | 当前默认配置 key 类型。 |
1207
- | 配置 | `ExcludeSchemxConfigKeys` | 排除配置 key 类型。 |
1208
- | Renderer | `SchemxRendererKey` | Renderer key 类型。 |
1209
- | Renderer | `SchemxRendererDefinition` | Renderer Props 声明合并接口。 |
1210
- | Renderer Registry | `RendererRegistry` | Renderer Registry 实例类型。 |
1211
- | Renderer Registry | `RegistryOptions` | 注册覆盖选项(renderer 与 rule 共享)。 |
1212
- | Renderer Registry | `RendererMap` | Renderer 批量映射。 |
1213
- | Validator | `Validator` | 底层 Validator 实例类型。 |
1214
- | Validator | `ValidationRule` | 原生规则接口。 |
1215
- | Validator | `ValidationRuleContext` | 原生规则执行上下文。 |
1216
- | Validator | `ValidationRuleIssue` | 单条规则产生的问题。 |
1217
- | Validator | `ValidationRuleResult` | 单条规则执行结果。 |
1218
- | Validator | `ValidationResult` | 校验成功 / 失败联合。 |
1219
- | Validator | `ValidationSuccess` | 校验成功结果。 |
1220
- | Validator | `ValidationFailure` | 普通校验失败结果。 |
1221
- | Validator | `ValidationCancelled` | 被更新校验或销毁操作中止的结果。 |
1222
- | Validator | `ValidationError` | 校验失败详情。 |
1223
- | Validator | `FieldValidationError` | 单字段错误。 |
1224
- | Validator | `FormValidationError` | 表单级错误。 |
1225
- | Validator | `AdapterRule` | 第三方 adapter 创建的品牌规则。 |
1226
- | Validator | `ValidationAdapterRule` | adapter 接收的第三方规则输入类型。 |
1227
- | Validator | `ValidationAdapterID` | adapter 的唯一标识类型。 |
1228
- | Validator | `ValidationAdapterV1` | 第三方校验 adapter 协议。 |
1229
- | Validator | `ValidationAdapter` | `ValidationAdapterV1` 的兼容别名。 |
1230
- | Validator | `ValidationAdapterRegistration` | adapter 注册及覆盖选项。 |
1231
- | Validator | `ValidationAdapterOption` | adapter 或带覆盖选项的注册项。 |
1232
- | Validator | `ValidationTrigger` | 校验触发时机。 |
1233
- | Validator | `StandardSchemaV1` | Standard Schema v1 协议。 |
1234
- | Rule | `ValidationRuleDefinition` | 自定义规则声明合并接口。 |
1235
- | Rule | `ValidationRuleName` | 声明合并推导的规则 key。 |
1236
- | Rule | `RequiredOptions` | 必填消息与空值判断配置。 |
1237
- | Rule | `RequiredRule` | 布尔必填开关或必填配置对象。 |
1238
- | Rule | `DefinedFieldValue` | 从表单值和路径提取已定义字段值。 |
1239
- | Rule | `FieldRule` | 单个字段规则联合类型。 |
1240
- | Rule | `FieldRules` | Standard Schema、内置或自定义规则。 |
1241
- | Validator Registry | `ValidationRuleRegistry` | ValidationRuleRegistry 实例类型。 |
1242
- | Validator Registry | `ValidationRuleFactoryContext` | 规则工厂接收的字段上下文。 |
1243
- | Validator Registry | `ValidationRuleFactory` | 按字段 Schema 生成规则的工厂。 |
1244
- | Validator Registry | `ValidationRuleEntry` | Standard Schema 或工厂联合。 |
1245
- | Validator Registry | `ValidationRuleMap` | 规则名到条目的批量映射。 |
1246
- | Validator Registry | `ValidationRuleRegistryChange` | Registry 变更事件。 |
1247
- | Validator Registry | `ValidationRuleRegistryListener` | Registry 变更监听器。 |
1156
+ | 分类 | 导出 | 用途 |
1157
+ | ------------------ | ------------------------------- | --------------------------------------------------------------------- |
1158
+ | Effect | `SignalEffectOptions` | signal effect 配置。 |
1159
+ | Effect | `SignalEffectDispose` | signal effect 的 dispose 函数类型。 |
1160
+ | Watch | `SignalWatchOptions` | signal watch 配置。 |
1161
+ | Watch | `DebouncedSignalWatchOptions` | 带 debounce 的 signal watch 配置。 |
1162
+ | Watch | `DebouncedSignalWatchControls` | 带 debounce 的 signal watch 控制器。 |
1163
+ | Watch | `CreateWatchOptions` | Watch 选项。 |
1164
+ | Watch | `CreateWatchReturn` | Watch 取消函数。 |
1165
+ | Watch | `WatchFieldCallback` | 单字段 Watch callback。 |
1166
+ | Watch | `WatchFieldsCallback` | 多字段 Watch callback。 |
1167
+ | Watch | `WatchAllCallback` | 全表 Watch callback。 |
1168
+ | 表单 | `CreateFormOptions` | Core 表单创建选项。 |
1169
+ | 表单 | `FormSchemaOptions` | Schema、初始值和 `schemaConfig` 配置。 |
1170
+ | 表单 | `FormRegistryOptions` | Renderer、Rule Registry 和 adapter 配置。 |
1171
+ | 表单 | `FormCallbackOptions` | 提交、值变化和规则错误回调。 |
1172
+ | 表单 | `FormLifecycleOptions` | Runtime 生命周期钩子。 |
1173
+ | 表单 | `ResolvedCreateFormOptions` | 已归一化的 Form 创建配置。 |
1174
+ | 表单 | `SchemxInstance` | Core 表单实例接口。 |
1175
+ | 基础 | `Values` | 表单值基础约束。 |
1176
+ | 基础 | `Dynamic` | 静态值或同步 / 异步值函数。 |
1177
+ | 路径 | `NamePath` | 类型安全字段路径。 |
1178
+ | 路径 | `FieldValue` | 从路径提取字段值。 |
1179
+ | 工具类型 | `DeepReadonly` | 深层只读类型。 |
1180
+ | 工具类型 | `CSSProperties` | CSS 属性类型。 |
1181
+ | Schema source | `SchemxSchemas` | 可更新 Schema source。 |
1182
+ | Schema source | `SchemxSchemasInput` | Schema 数组或 source 联合。 |
1183
+ | Schema source | `SchemxSchemasListener` | Schema source listener |
1184
+ | 字段 | `SchemxFieldInstance` | Core 字段控制器。 |
1185
+ | 字段数组 | `FieldArrayItemValue` | 数组字段行值类型。 |
1186
+ | 字段数组 | `FieldArrayPath` | 数组字段路径类型。 |
1187
+ | 表单 | `SchemxFormApi` | 传递给动态 Schema 回调的表单 API。 |
1188
+ | 表单 | `SchemxFieldRulesMap` | 按字段路径配置的规则映射。 |
1189
+ | Schema | `SchemxBase` | 普通字段基础接口。 |
1190
+ | Schema | `SchemxBaseField` | Renderer key 分布的字段联合。 |
1191
+ | Schema | `SchemxExactBaseField` | 保留具体 Renderer key 的字段类型。 |
1192
+ | Schema | `SchemxGroupField` | 原始 Group Schema|
1193
+ | Schema | `SchemxDependencyField` | 原始 Dependency Schema。 |
1194
+ | Schema | `SchemxField` | 全部原始 Schema 联合。 |
1195
+ | Schema | `SchemxBaseComponentProps` | Renderer 公共 Props。 |
1196
+ | Schema | `SchemxComponentProps` | Renderer 专属与公共 Props。 |
1197
+ | Schema | `SchemxFormItemProps` | Core 保留的字段展示 Props 类型(schema 属性名仍为 `formItemProps`)。 |
1198
+ | 扩展 | `SchemxFieldDefinition` | 普通字段声明合并接口。 |
1199
+ | 扩展 | `SchemxGroupFieldDefinition` | Group 声明合并接口。 |
1200
+ | 依赖 | `SchemxFieldDependencies` | 普通字段的动态属性与触发字段配置。 |
1201
+ | 依赖 | `SchemxGroupDependencies` | Group 容器的动态状态配置。 |
1202
+ | 依赖 | `SchemxDependencyDependencies` | Dependency 容器的动态状态配置。 |
1203
+ | 依赖 | `SchemxContainerDependencies` | Group/Dependency 容器动态状态配置。 |
1204
+ | 依赖 | `SchemxConditionFn` | 动态属性条件函数。 |
1205
+ | ViewSchema | `SchemxViewDebugMeta` | ViewSchema 诊断元数据。 |
1206
+ | ViewSchema | `SchemxViewFieldSchema` | 字段渲染投影。 |
1207
+ | ViewSchema | `SchemxViewGroupSchema` | Group 渲染投影。 |
1208
+ | ViewSchema | `SchemxViewSchema` | 字段 / Group 投影联合。 |
1209
+ | 配置 | `MergedSchemxConfig` | 已合并且补齐 `schemaConfig` 默认值。 |
1210
+ | 配置 | `SchemxConfig` | Core 模块级和 Form/App 可继承配置。 |
1211
+ | 配置 | `SchemxSchemaConfig` | 表单级字段默认展示与校验配置。 |
1212
+ | 配置 | `SchemxConfigKey` | 当前默认配置 key 类型。 |
1213
+ | 配置 | `ExcludeSchemxConfigKeys` | 排除配置 key 类型。 |
1214
+ | Renderer | `SchemxRendererKey` | Renderer key 类型。 |
1215
+ | Renderer | `SchemxRendererDefinition` | Renderer Props 声明合并接口。 |
1216
+ | Renderer Registry | `RendererRegistry` | Renderer Registry 实例类型。 |
1217
+ | Renderer Registry | `RegistryOptions` | 注册覆盖选项(renderer rule 共享)。 |
1218
+ | Renderer Registry | `RendererMap` | Renderer 批量映射。 |
1219
+ | Validator | `ValidationRule` | 原生规则接口。 |
1220
+ | Validator | `ValidationRuleContext` | 原生规则执行上下文。 |
1221
+ | Validator | `ValidationRuleIssue` | 单条规则产生的问题。 |
1222
+ | Validator | `ValidationRuleResult` | 单条规则执行结果。 |
1223
+ | Validator | `ValidationResult` | 校验成功 / 失败联合。 |
1224
+ | Validator | `ValidationSuccess` | 校验成功结果。 |
1225
+ | Validator | `ValidationFailure` | 普通校验失败结果。 |
1226
+ | Validator | `ValidationCancelled` | 被更新校验或销毁操作中止的结果。 |
1227
+ | Validator | `ValidationError` | 校验失败详情。 |
1228
+ | Validator | `FieldValidationError` | 单字段错误。 |
1229
+ | Validator | `FormValidationError` | 表单级错误。 |
1230
+ | Validator | `AdapterRule` | 第三方 adapter 创建的品牌规则。 |
1231
+ | Validator | `ValidationAdapterRule` | adapter 接收的第三方规则输入类型。 |
1232
+ | Validator | `ValidationAdapterID` | adapter 的唯一标识类型。 |
1233
+ | Validator | `ValidationAdapterV1` | 第三方校验 adapter 协议。 |
1234
+ | Validator | `ValidationAdapter` | `ValidationAdapterV1` 的兼容别名。 |
1235
+ | Validator | `ValidationAdapterRegistration` | adapter 注册及覆盖选项。 |
1236
+ | Validator | `ValidationAdapterOption` | adapter 或带覆盖选项的注册项。 |
1237
+ | Validator | `ValidationTrigger` | 校验触发时机。 |
1238
+ | Validator | `StandardSchemaV1` | Standard Schema v1 协议。 |
1239
+ | Rule | `PresetRuleDefinition` | 自定义规则声明合并接口。 |
1240
+ | Rule | `PresetRuleName` | 声明合并推导的规则 key。 |
1241
+ | Rule | `RequiredOptions` | 必填消息与空值判断配置。 |
1242
+ | Rule | `RequiredConfig` | 布尔必填开关或必填配置对象。 |
1243
+ | Rule | `DefinedFieldValue` | 从表单值和路径提取已定义字段值。 |
1244
+ | Rule | `FieldRule` | 单个字段规则联合类型。 |
1245
+ | Rule | `FieldRules` | Standard Schema、内置或自定义规则。 |
1246
+ | Validator Registry | `PresetRuleRegistry` | PresetRuleRegistry 实例类型。 |
1247
+ | Validator Registry | `PresetRuleFactoryContext` | 规则工厂接收的字段上下文。 |
1248
+ | Validator Registry | `PresetRuleFactory` | 按字段 Schema 生成规则的工厂。 |
1249
+ | Validator Registry | `PresetRuleEntry` | Standard Schema、原生规则或工厂联合。 |
1250
+ | Validator Registry | `PresetRuleMap` | 规则名到条目的批量映射。 |
1251
+ | Validator Registry | `PresetRuleRegistryChange` | Registry 变更事件。 |
1252
+ | Validator Registry | `PresetRuleRegistryListener` | Registry 变更监听器。 |