@qin-ui/antd-vue-pro 2.4.4 → 2.5.0

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 (90) hide show
  1. package/AI-CONTEXT.md +26 -2
  2. package/README.md +44 -37
  3. package/api.json +24 -9
  4. package/es/antd-vue-pro.css +15 -15
  5. package/es/components/component-provider/components/index.vue.d.ts +3 -3
  6. package/es/components/component-provider/components/index.vue.d.ts.map +1 -1
  7. package/es/components/component-provider/constants/index.d.ts +20 -4
  8. package/es/components/component-provider/constants/index.d.ts.map +1 -1
  9. package/es/components/component-provider/types/index.d.ts +8 -4
  10. package/es/components/component-provider/types/index.d.ts.map +1 -1
  11. package/es/components/form/components/BaseField/index.vue.d.ts +7 -1
  12. package/es/components/form/components/BaseField/index.vue.d.ts.map +1 -1
  13. package/es/components/form/components/BaseField/utils/index.d.ts +18 -0
  14. package/es/components/form/components/BaseField/utils/index.d.ts.map +1 -1
  15. package/es/components/form/components/BaseFormItem/index.vue.d.ts +3 -0
  16. package/es/components/form/components/BaseFormItem/index.vue.d.ts.map +1 -1
  17. package/es/components/form/components/ContainerFragment/index.vue.d.ts +1 -0
  18. package/es/components/form/components/ContainerFragment/index.vue.d.ts.map +1 -1
  19. package/es/components/form/components/ProForm/index.vue.d.ts.map +1 -1
  20. package/es/components/form/components/SlotComponent/index.vue.d.ts +1 -0
  21. package/es/components/form/components/SlotComponent/index.vue.d.ts.map +1 -1
  22. package/es/components/form/components/index.d.ts +4 -0
  23. package/es/components/form/components/index.d.ts.map +1 -1
  24. package/es/components/form/constants/index.d.ts.map +1 -1
  25. package/es/components/form/hooks/useFields.d.ts +2 -0
  26. package/es/components/form/hooks/useFields.d.ts.map +1 -1
  27. package/es/components/form/hooks/useGroupFieldAttrs.d.ts +10 -0
  28. package/es/components/form/hooks/useGroupFieldAttrs.d.ts.map +1 -1
  29. package/es/components/form/index.d.ts +2 -2
  30. package/es/components/form/index.d.ts.map +1 -1
  31. package/es/components/form/types/index.d.ts +75 -44
  32. package/es/components/form/types/index.d.ts.map +1 -1
  33. package/es/components/form/utils/fieldKey.d.ts +13 -0
  34. package/es/components/form/utils/fieldKey.d.ts.map +1 -0
  35. package/es/components/table/components/ColumnControl.vue.d.ts +3 -0
  36. package/es/components/table/components/ColumnControl.vue.d.ts.map +1 -1
  37. package/es/components/table/components/DefaultSearchFormContainer.vue.d.ts.map +1 -1
  38. package/es/components/table/components/DefaultTableContainer.vue.d.ts.map +1 -1
  39. package/es/components/table/components/ProTable.vue.d.ts +8 -1
  40. package/es/components/table/components/ProTable.vue.d.ts.map +1 -1
  41. package/es/components/table/components/SearchForm.vue.d.ts +10 -2
  42. package/es/components/table/components/SearchForm.vue.d.ts.map +1 -1
  43. package/es/components/table/components/SizeControl.vue.d.ts +7 -2
  44. package/es/components/table/components/SizeControl.vue.d.ts.map +1 -1
  45. package/es/components/table/hooks/useTable.d.ts.map +1 -1
  46. package/es/components/table/index.d.ts +4 -1
  47. package/es/components/table/index.d.ts.map +1 -1
  48. package/es/components/table/types/index.d.ts +14 -6
  49. package/es/components/table/types/index.d.ts.map +1 -1
  50. package/es/index.d.ts +8 -4
  51. package/es/index.d.ts.map +1 -1
  52. package/es/index.js +528 -343
  53. package/es/index.js.map +1 -1
  54. package/es/locale/index.d.ts +2 -0
  55. package/es/locale/index.d.ts.map +1 -1
  56. package/es/shared/core/index.d.ts +1 -1
  57. package/es/shared/core/index.d.ts.map +1 -1
  58. package/es/shared/ui/index.d.ts +15 -3
  59. package/es/shared/ui/index.d.ts.map +1 -1
  60. package/package.json +7 -4
  61. package/src/components/component-provider/components/index.vue +26 -12
  62. package/src/components/component-provider/constants/index.ts +33 -6
  63. package/src/components/component-provider/types/index.ts +17 -9
  64. package/src/components/form/components/BaseField/index.vue +48 -16
  65. package/src/components/form/components/BaseField/utils/index.ts +19 -1
  66. package/src/components/form/components/BaseFormItem/index.vue +65 -17
  67. package/src/components/form/components/ContainerFragment/index.vue +3 -1
  68. package/src/components/form/components/ProForm/index.vue +30 -18
  69. package/src/components/form/components/SlotComponent/index.vue +14 -4
  70. package/src/components/form/components/index.ts +8 -1
  71. package/src/components/form/constants/index.ts +3 -4
  72. package/src/components/form/hooks/useFields.ts +3 -1
  73. package/src/components/form/hooks/useGroupFieldAttrs.ts +34 -27
  74. package/src/components/form/index.ts +1 -3
  75. package/src/components/form/types/index.ts +79 -46
  76. package/src/components/form/utils/fieldKey.ts +27 -0
  77. package/src/components/table/components/ColumnControl.vue +21 -5
  78. package/src/components/table/components/DefaultSearchFormContainer.vue +5 -0
  79. package/src/components/table/components/DefaultTableContainer.vue +5 -0
  80. package/src/components/table/components/ProTable.vue +239 -66
  81. package/src/components/table/components/SearchForm.vue +58 -21
  82. package/src/components/table/components/SizeControl.vue +21 -1
  83. package/src/components/table/hooks/useTable.ts +1 -1
  84. package/src/components/table/index.ts +8 -3
  85. package/src/components/table/types/index.ts +15 -7
  86. package/src/index.ts +12 -5
  87. package/src/locale/index.ts +2 -0
  88. package/src/shared/core/index.ts +11 -0
  89. package/src/shared/ui/index.ts +22 -4
  90. package/tsconfig.json +22 -0
package/AI-CONTEXT.md CHANGED
@@ -43,7 +43,7 @@ import { ProForm, ProTable, useForm, useTable } from '@qin-ui/antd-vue-pro';
43
43
 
44
44
  ### 隐式默认行为(INJECT_CONFIG,易踩坑)
45
45
 
46
- 由 `ProComponentProvider` 注入,优先级低于 Field 配置。**不写也有这些默认值,需知晓以免行为与预期不符**;其中 `maxlength` / `max` / `min` / `controls` 属非中性默认(超长输入被静默截断、数值范围受限、步进按钮隐藏),业务要求更高时在 Field 或 `componentVars` 中显式覆盖:
46
+ 由 `ProComponentProvider` 注入,优先级低于 Field 配置。**不写也有这些默认值,需知晓以免行为与预期不符**;其中 `maxlength` / `max` / `min` / `controls` 属非中性默认(超长输入被静默截断、数值范围受限、步进按钮隐藏),业务要求更高时在 Field 或 `componentVars` 中显式覆盖。下表为**库内置默认**,项目 Provider 可能已按 key 覆盖部分值,最终以现场读取的实际配置为准(见「项目级覆盖层」):
47
47
 
48
48
  | component | 默认预设 |
49
49
  | :--------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -62,6 +62,24 @@ import { ProForm, ProTable, useForm, useTable } from '@qin-ui/antd-vue-pro';
62
62
  > `input-search` / `checkbox-group` / `radio-group` / `slider` / `tree-select` / `transfer` 无预设(`{}`)。
63
63
  > **占位符由 locale 兜底**:未显式设置 `placeholder` 时按组件类型自动生成(input 类 -> `input.placeholder`,select/cascader 类 -> `select.placeholder`),语言随宿主组件库自动切换。
64
64
 
65
+ ### 项目级覆盖层(写码前必查,实时生效)
66
+
67
+ 项目 `ProComponentProvider`(通常挂载在 App.vue 或布局组件)的配置介于 Field 属性与上表内置默认之间,优先级为 **Field 属性 > 项目 Provider > 内置默认**。
68
+
69
+ **硬规则:生成任何 Field / Column / ProForm / ProTable / SearchForm 代码前,先全局搜索项目源码(排除 node_modules),读取 Provider 实际配置:**
70
+
71
+ ```
72
+ 搜索: <ProComponentProvider 挂载点(通常在 App.vue / 布局 / Provider 包装组件)
73
+ 搜索: componentVars 项目覆盖的默认属性(input maxlength、select 配置等)
74
+ 搜索: componentMap 注册的自定义组件 / 接管的内置组件
75
+ 搜索: :locale= 覆盖的内置文案(查询/重置/展开/占位符等)
76
+ ```
77
+
78
+ - 配置值若抽离到独立文件(如 `:component-vars="providerVars"`),沿 import / 定义语句追到源头读取;
79
+ - `componentMap` 注册的 key 是合法的 `Field.component` 取值,应优先使用项目已注册组件,而非新写;
80
+ - 内置文案以项目 `locale` 覆盖为准,不硬编码默认文案;
81
+ - 全项目搜不到挂载点时,按上表内置默认工作。
82
+
65
83
  ### 内置文案(locale)
66
84
 
67
85
  内置文案(查询/重置/收起/展开/序号/分页总数/占位符等)走 locale 体系,默认跟随宿主 ant-design-vue 语言自动切换:
@@ -97,6 +115,8 @@ useForm(true | false) // 重载二:仅拿实例(roo
97
115
  | `form.deleteField` / `form.appendField` / `form.prependField` / `form.getParentField` | 字段增删查;均支持 `{all:true}`;`appendField(undefined, f)` 末尾追加、`prependField(undefined, f)` 开头插入,入参可为数组 |
98
116
  | `form.formRef` | 底层 ant Form 实例引用(Ref),`formRef.value?.validate()` / `.resetFields()` |
99
117
 
118
+ > `useFormData()` 在 `ProForm` 子树内承接**内部兜底实例**的数据 store;`<ProForm :form="form">` 时与 `form.formData` 非同源,需同源请用 `useForm(false)` 或直接用传入实例。
119
+
100
120
  ### useTable -- 表格实例
101
121
 
102
122
  ```ts
@@ -148,13 +168,15 @@ useTable({ columns, dataSource, pageParam, searchParam, searchFields });
148
168
 
149
169
  关键 prop:`table`(useTable 实例)、`search`(数据查询方法 `() => Promise`,ProTable 内部调用,非自动触发)、`addIndexColumn`、`immediateSearch`、`control`、`searchFormConfig`(含 `hidden`/`container`/`layout`/`expand`)、`tableContainer`。
150
170
 
171
+ Provider 注入面:`columns` / `dataSource` / `loading` 不可经 `componentVars['pro-table']` 配置(分别由 `:table` 实例与组件自身查询状态驱动),`form` 不可经 `componentVars['pro-form']` 配置(由显式 `:form` 实例驱动);传入不可注入键时在注入层静默忽略(类型面已限制,不输出告警)。`searchFormConfig` 的 `container` / `hidden` 由 ProTable 消费,不下发 `SearchForm`。
172
+
151
173
  **列控制(control)**:`control` 支持布尔值或 `{ sizeControl, columnControl }` 对象;`columnControl` 可为布尔值或 `ColumnControlConfig`:`labels`(列在下拉中的显示名映射,title 为 vnode 时必用)、`excludedKeys`(不在下拉出现、始终展示)、`disabledKeys`(显示但不可取消勾选)、`disableCheckAll`(禁用全选/取消全选)。列 key 取 `dataIndex` 路径或自定义 `key`。
152
174
 
153
175
  **数据流**:搜索->重置分页到第 1 页->调 `search()`;分页/排序变化->更新 `pageParam`->调 `search()`;重置->`resetQueryParams()`->调 `search()`。
154
176
 
155
177
  ### Column -- 列配置
156
178
 
157
- 继承 ant-design-vue `ColumnType`,所有原生列属性可用。新增:`dataIndex`(列数据路径,主用,支持 `'name'` / `'address.city'` / `['address','city']`)、`key`(辅助标识,优先级更低)、`hidden`(隐藏该列,配合列控制)。
179
+ 继承 ant-design-vue `ColumnType`,所有原生列属性可用。新增:`dataIndex`(列数据路径,主用,支持 `'name'` / `'address.city'` / `['address','city']`)、`key`(辅助标识,优先级更低)、`hidden`(隐藏该列,配合列控制;支持 `boolean` / `Ref` / `ComputedRef`,分组列子列递归生效)。
158
180
 
159
181
  ## 反模式
160
182
 
@@ -163,6 +185,7 @@ useTable({ columns, dataSource, pageParam, searchParam, searchFields });
163
185
  - ❌ 把 `span` 当输入控件属性。
164
186
  - ❌ 传 SFC 给 `component` 不用 `markRaw`。
165
187
  - ❌ 在 ProTable 上忘了传 `:search`,或期望它自动请求 -- 查询由你提供并驱动。
188
+ - ❌ 不读项目 `ProComponentProvider` 实际配置就写 Field/Column 属性 -- 默认值与组件映射可能已被项目覆盖。
166
189
 
167
190
  ## 按需深查
168
191
 
@@ -173,3 +196,4 @@ useTable({ columns, dataSource, pageParam, searchParam, searchFields });
173
196
  - `.agents/skills/antd-vue-pro/references/api.md` — 结构化 API 元数据
174
197
  - `node_modules/@qin-ui/antd-vue-pro/README.md` — 完整用法与进阶示例
175
198
  - ant-design-vue 组件属性查阅官方文档:https://antdv.com
199
+ - 项目注册了自定义 `componentMap` key 时,推荐补 `declare module` 环境类型声明(见 README 方式 3),使 `Field.component` 联合类型包含项目注册的 key
package/README.md CHANGED
@@ -190,6 +190,11 @@ ProComponentProvider 内置了一套默认属性预设,**即使不配置 `comp
190
190
 
191
191
  > `modelProp` 控制 v-model 绑定的属性名,默认 `'value'`(即 `v-model:value`)。`switch` 经预设绑定为 `checked`,通常无需手动设置。
192
192
  > `showTotal`(分页总计)与 `placeholder` 不在 INJECT_CONFIG 预设内,由 locale 体系提供,可在 Field / ProTable 配置中显式覆盖。
193
+ > `pro-table` 的 `columns` / `dataSource` / `loading` 与 `pro-form` 的 `form` 不参与 `componentVars` 注入:分别由 `:table` 实例(`useTable`)、组件自身查询状态与显式 `:form` 实例驱动;传入时在注入层静默忽略(类型面已限制,不输出告警)。
194
+
195
+ #### 与 AI 编码工具协作
196
+
197
+ 属性优先级为 **Field 配置 > Provider 注入(含项目在 `componentVars` / `componentMap` / `locale` 上的覆盖)> 内置默认**。包内 AI 上下文(`AI-CONTEXT.md`)已要求 AI 在生成任何 Field / Column 代码前,先搜索并读取项目 `ProComponentProvider` 的实际配置。执行一次 `npx @qin-ui/antd-vue-pro init-ai` 即可让该规则进入项目 `AGENTS.md`,此后项目配置变更无需任何操作,AI 每次会话都读取最新源码。
193
198
 
194
199
  ---
195
200
 
@@ -217,16 +222,16 @@ ProComponentProvider 内置了一套默认属性预设,**即使不配置 `comp
217
222
 
218
223
  #### Props
219
224
 
220
- | 参数名 | 说明 | 类型 | 默认值 |
221
- | :----------------- | :-------------------------------------------------------- | :------------------------------------- | :------ |
222
- | `table` | 由 `useTable` 返回的表格实例 | `Table` | - |
223
- | `search` | 触发表格查询的回调函数,需返回 Promise 或直接返回查询数据 | `(params: any) => Promise<any> \| any` | - |
224
- | `addIndexColumn` | 是否自动在表格首列插入序号列 | `boolean` | `false` |
225
- | `immediateSearch` | 表格挂载时(onMounted)是否立即触发一次 `search` 查询 | `boolean` | `false` |
226
- | `control` | 是否在表格右上角工具栏中展示尺寸调节和列动态显示控制按钮 | `boolean` | `true` |
227
- | `searchFormConfig` | 查询表单的布局配置参数 | `SearchFormConfig` | - |
228
- | `tableContainer` | 表格的外部包裹容器,默认为 false | `Component \| false` | - |
229
- | `...` | 其余参数继承自 Ant Design Vue `a-table` 的原生属性 | `TableProps` | - |
225
+ | 参数名 | 说明 | 类型 | 默认值 |
226
+ | :----------------- | :---------------------------------------------------------------- | :----------------------- | :---------------------- |
227
+ | `table` | 由 `useTable` 返回的表格实例 | `Table` | - |
228
+ | `search` | 触发表格查询的回调函数,无入参;返回 Promise 时由组件接管 loading | `() => Promise<unknown>` | - |
229
+ | `addIndexColumn` | 是否自动在表格首列插入序号列 | `boolean` | `true` |
230
+ | `immediateSearch` | 表格挂载时(onMounted)是否立即触发一次 `search` 查询 | `boolean` | `false` |
231
+ | `control` | 是否在表格右上角工具栏中展示尺寸调节和列动态显示控制按钮 | `boolean` | `true` |
232
+ | `searchFormConfig` | 查询表单的布局配置参数 | `SearchFormConfig` | - |
233
+ | `tableContainer` | 表格的外部包裹容器,默认包裹;传 `false` 关闭包裹 | `Component \| false` | `DefaultTableContainer` |
234
+ | `...` | 其余参数继承自 Ant Design Vue `a-table` 的原生属性 | `TableProps` | - |
230
235
 
231
236
  #### Slots
232
237
 
@@ -297,6 +302,8 @@ const form = useForm<D>(initFormData?, initFields?, root?)
297
302
  | `prependField(path, field)` | 在指定字段前插入新字段(入参可为数组);`undefined` 在开头插入;`{all:true}` 所有匹配前插入 | `(path, field, opts?) => void` |
298
303
  | `getParentField(path, opts?)` | 查找父级字段配置;`{all:true}` 返回所有匹配的父级字段 | `(path, opts?) => Field` |
299
304
 
305
+ > **`useFormData()` 的取值边界**:`ProForm` 在 setup 期会创建一个内部兜底表单实例,`useFormData()`(在 `ProForm` 子树内不传参调用)承接的是**该兜底实例**的数据 store;因此 `<ProForm :form="form">` 场景下 `useFormData().formData` 与 `form.formData` **不是同一对象**,两处写入互不相通。需要与传入实例同源时,请改用 `useForm(false)`(复用注入的表单代理)或直接使用传入的 `form` 实例。未传 `:form` 时两条通路指向同一实例。
306
+
300
307
  ---
301
308
 
302
309
  ### 2. `useTable`
@@ -334,11 +341,11 @@ const table = useTable<D, T>({
334
341
 
335
342
  `columns` 数组中每一项为 `Column<T>` 类型,**继承 ant-design-vue `ColumnType`**,因此所有原生列属性(`title` / `width` / `fixed` / `align` / `customRender` / `ellipsis` 等)均可用。在此基础上新增:
336
343
 
337
- | 属性 | 说明 | 类型 | 默认值 |
338
- | :---------- | :---------------------------------------------------------------------------------------- | :------------------- | :------ |
339
- | `dataIndex` | 列数据路径(主要字段),类型安全,支持 `'name'` / `'address.city'` / `['address','city']` | `string \| string[]` | - |
340
- | `key` | 列字段标识(辅助),仅当 `dataIndex` 无法满足时使用,匹配优先级低于 `dataIndex` | `string` | - |
341
- | `hidden` | 是否隐藏该列(配合列动态控制) | `boolean` | `false` |
344
+ | 属性 | 说明 | 类型 | 默认值 |
345
+ | :---------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------ | :------ |
346
+ | `dataIndex` | 列数据路径(主要字段),类型安全,支持 `'name'` / `'address.city'` / `['address','city']` | `string \| string[]` | - |
347
+ | `key` | 列字段标识(辅助),仅当 `dataIndex` 无法满足时使用,匹配优先级低于 `dataIndex` | `string` | - |
348
+ | `hidden` | 是否隐藏该列(配合列动态控制),支持 `Ref` / `ComputedRef` 响应式,分组列子列递归生效 | `boolean \| Ref<boolean> \| ComputedRef<boolean>` | `false` |
342
349
 
343
350
  ---
344
351
 
@@ -348,28 +355,28 @@ const table = useTable<D, T>({
348
355
 
349
356
  ### 公共基础属性
350
357
 
351
- | 属性名 | 说明 | 类型 | 默认值 |
352
- | :------------------- | :---------------------------------------------------------------------------- | :---------------------------- | :-------- |
353
- | `path` | 字段标识,需对应数据对象 `formData` 的 key,支持多级嵌套,例如 `address.city` | `string` | - |
354
- | `label` | 字段中文标签,支持字符串或直接传入 VNode 组件进行自定义 | `string \| Component \| Slot` | - |
355
- | `component` | 调用的表单项组件的类型,支持内置类型键名或直接传入自定义 Vue 组件 | `string \| Component` | `'input'` |
356
- | `hidden` | 字段是否被隐藏(在 DOM 中彻底不渲染,但数据保留),支持 Ref/Computed 响应式 | `boolean \| Ref<boolean>` | `false` |
357
- | `disabled` | 组件的禁用状态,支持 Ref/Computed 响应式 | `boolean \| Ref<boolean>` | `false` |
358
- | `rules` | 字段数据校验规则,遵循 ant-design-vue Form 校验格式 | `Rule[]` | - |
359
- | `span` | 栅格占位宽度(在 ProForm 开启 `grid` 网格布局后有效) | `number` | - |
360
- | `formItemStyle` | 挂载在外部 `a-form-item` 节点上的额外 CSS 样式属性 | `CSSProperties` | - |
361
- | `formItemClass` | 挂载在外部 `a-form-item` 节点上的自定义类名 | `string` | - |
362
- | `formItemContainer` | 针对该表单项的最外层 DOM 包裹组件 | `Component` | - |
363
- | `formItemDataAttrs` | 附加在 `a-form-item` DOM 节点上的自定义 data 属性 | `Record<string, string>` | - |
364
- | `componentStyle` | 直接传递给内部表单输入组件的额外 CSS 样式属性 | `CSSProperties` | - |
365
- | `componentClass` | 直接传递给内部表单输入组件的自定义类名 | `string` | - |
366
- | `componentContainer` | 针对表单输入组件的包裹组件(位于 FormItem 与组件之间) | `Component` | - |
367
- | `componentDataAttrs` | 附加在内部输入组件 DOM 节点上的自定义 data 属性 | `Record<string, string>` | - |
368
- | `slots` | 该表单项的插槽自定义内容,包含 formItem 插槽或组件插槽 | `Record<string, Slot>` | - |
369
- | `valueFormatter` | 字段值转换处理器,可在输入更新或提取数据时做 get/set 转换 | `ValueFormatter` | - |
370
- | `modelProp` | 双向绑定的数据属性名称(当使用自定义组件且非 value 绑定时) | `string` | `'value'` |
371
- | `fields` | 嵌套子表单项的 Schema 数组配置(用于分组或复杂嵌套表单) | `Field[]` | - |
372
- | `grid` | 针对当前嵌套子表单项所使用的网格布局参数(仅当有 `fields` 时有效) | `boolean \| GridProps` | - |
358
+ | 属性名 | 说明 | 类型 | 默认值 |
359
+ | :------------------- | :-------------------------------------------------------------------------------------------------------- | :------------------------------------------------ | :-------- |
360
+ | `path` | 字段标识,需对应数据对象 `formData` 的 key,支持多级嵌套,例如 `address.city` | `string` | - |
361
+ | `label` | 字段中文标签,支持字符串或直接传入 VNode 组件进行自定义 | `string \| Component \| Slot` | - |
362
+ | `component` | 调用的表单项组件的类型,支持内置类型键名或直接传入自定义 Vue 组件 | `string \| Component` | `'input'` |
363
+ | `hidden` | 字段是否被隐藏(在 DOM 中彻底不渲染,但数据保留),支持 Ref/Computed 响应式 | `boolean \| Ref<boolean> \| ComputedRef<boolean>` | `false` |
364
+ | `disabled` | 组件的禁用状态,支持 Ref/Computed 响应式 | `boolean \| Ref<boolean> \| ComputedRef<boolean>` | `false` |
365
+ | `rules` | 字段数据校验规则,遵循 ant-design-vue Form 校验格式 | `Rule[]` | - |
366
+ | `span` | 栅格占位宽度(在 ProForm 开启 `grid` 网格布局后有效) | `number` | - |
367
+ | `formItemStyle` | 挂载在外部 `a-form-item` 节点上的额外 CSS 样式属性 | `StyleValue` | - |
368
+ | `formItemClass` | 挂载在外部 `a-form-item` 节点上的自定义类名 | `ClassValue` | - |
369
+ | `formItemContainer` | 针对该表单项的最外层 DOM 包裹组件 | `Component` | - |
370
+ | `formItemDataAttrs` | 附加在 `a-form-item` DOM 节点上的自定义 data 属性 | `Record<string, string>` | - |
371
+ | `componentStyle` | 直接传递给内部表单输入组件的额外 CSS 样式属性 | `StyleValue` | - |
372
+ | `componentClass` | 直接传递给内部表单输入组件的自定义类名 | `ClassValue` | - |
373
+ | `componentContainer` | 针对表单输入组件的包裹组件(位于 FormItem 与组件之间) | `Component` | - |
374
+ | `componentDataAttrs` | 附加在内部输入组件 DOM 节点上的自定义 data 属性 | `Record<string, string>` | - |
375
+ | `slots` | 该表单项的插槽自定义内容,包含 formItem 插槽或组件插槽(`label` 插槽与字段 `label` 同时存在时由插槽渲染) | `Record<string, Slot>` | - |
376
+ | `valueFormatter` | 字段值转换处理器,可在输入更新或提取数据时做 get/set 转换 | `ValueFormatter` | - |
377
+ | `modelProp` | 双向绑定的数据属性名称(当使用自定义组件且非 value 绑定时) | `string` | `'value'` |
378
+ | `fields` | 嵌套子表单项的 Schema 数组配置(用于分组或复杂嵌套表单) | `Field[]` | - |
379
+ | `grid` | 针对当前嵌套子表单项所使用的网格布局参数(仅当有 `fields` 时有效) | `boolean \| GridProps` | - |
373
380
 
374
381
  #### `valueFormatter` 字段值转换
375
382
 
package/api.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-08-30T08:26:02.951Z",
2
+ "generatedAt": "2026-10-26T06:22:36.645Z",
3
3
  "name": "@qin-ui/antd-vue-pro",
4
4
  "api": [
5
5
  {
@@ -7,7 +7,7 @@
7
7
  "type": "component",
8
8
  "package": "@qin-ui/antd-vue-pro",
9
9
  "signature": "<ProComponentProvider>",
10
- "description": "@qin-ui/antd-vue-pro 全局配置提供者组件\n用于在组件树的顶层配置所有子组件的全局默认属性。\n支持配置 ProForm、ProTable、ProFormItem 以及所有内置组件的默认属性。",
10
+ "description": "全局配置提供者组件\n用于在组件树的顶层配置所有子组件的全局默认属性。\n支持配置 ProForm、ProTable、ProFormItem 以及所有内置组件的默认属性。",
11
11
  "params": [
12
12
  {
13
13
  "name": "componentVars",
@@ -51,7 +51,7 @@
51
51
  "type": "component",
52
52
  "package": "@qin-ui/antd-vue-pro",
53
53
  "signature": "<ProForm>",
54
- "description": "@qin-ui/antd-vue-pro 配置驱动表单组件\n架构设计说明 (Architecture Overview)\n[ 数据层 (Core) ] => [ 绑定层 (ProForm) ] => [ 渲染层 (BaseFormItem / BaseField) ]\n1. 数据隔离:ProForm 本身不负责存储和管理表单状态,所有核心状态(formData, fields, 校验规则)\n均交由底层的 `useForm`(@qin-ui/pro-components-core)驱动。\n2. 上下文透传:通过 `provide` 将核心状态下发给子组件。\n3. 递归渲染:网格布局和具体字段的解析交由 `<BaseFormItem>` 递归完成。\n通过配置驱动的方式快速构建表单,支持:\n- 字段联动(通过 setField、watch 等实现)\n- 嵌套字段(通过 fields 递归配置)\n- 自定义组件(通过 component 属性和 custom 类型)\n- 网格布局(通过 grid 属性)\n- 动态插槽(以字段 path 命名的插槽)\n- 全局配置注入(通过 ProComponentProvider)",
54
+ "description": "配置驱动表单组件\n架构设计说明 (Architecture Overview)\n[ 数据层 (Core) ] => [ 绑定层 (ProForm) ] => [ 渲染层 (BaseFormItem / BaseField) ]\n1. 数据隔离:ProForm 本身不负责存储和管理表单状态,所有核心状态(formData, fields, 校验规则)\n均交由底层的 `useForm`(@qin-ui/pro-components-core)驱动。\n2. 上下文透传:通过 `provide` 将核心状态下发给子组件。\n3. 递归渲染:网格布局和具体字段的解析交由 `<BaseFormItem>` 递归完成。\n通过配置驱动的方式快速构建表单,支持:\n- 字段联动(通过 setField、watch 等实现)\n- 嵌套字段(通过 fields 递归配置)\n- 自定义组件(通过 component 属性和 custom 类型)\n- 网格布局(通过 grid 属性)\n- 动态插槽(以字段 path 命名的插槽)\n- 全局配置注入(通过 ProComponentProvider)",
55
55
  "params": [
56
56
  {
57
57
  "name": "form",
@@ -63,7 +63,7 @@
63
63
  "name": "grid",
64
64
  "type": "boolean | GridProps",
65
65
  "optional": true,
66
- "description": "是否启用网格布局 (默认 false)"
66
+ "description": "是否启用网格布局;未提供时回退 Provider 注入的 `grid` 配置"
67
67
  },
68
68
  {
69
69
  "name": "...attrs",
@@ -86,13 +86,13 @@
86
86
  "type": "component",
87
87
  "package": "@qin-ui/antd-vue-pro",
88
88
  "signature": "<SlotComponent>",
89
- "description": "插槽渲染辅助组件。用于在表单或表格的自定义插槽中动态渲染外部传入的 VNode、渲染函数或静态字符串。"
89
+ "description": "插槽渲染辅助组件。用于在表单或表格的自定义插槽中动态渲染外部传入的 VNode、渲染函数、组件定义对象或静态字符串。"
90
90
  },
91
91
  {
92
92
  "name": "ComponentMap",
93
93
  "type": "interface",
94
94
  "package": "@qin-ui/antd-vue-pro",
95
- "signature": "export interface ComponentMap {}",
95
+ "signature": "export interface ComponentMap {} // eslint-disable-line @typescript-eslint/no-empty-object-type",
96
96
  "description": "组件映射扩展接口\n暴露给外部扩充自定义组件类型的接口。\n用户可通过 TypeScript 的声明合并(module augmentation)添加自定义组件。",
97
97
  "examples": [
98
98
  "```ts\n// 在项目中任意 .d.ts 文件中\ndeclare module '@qin-ui/antd-vue-pro' {\ninterface ComponentMap {\n'my-custom-input': typeof MyCustomInput;\n'my-editor': typeof MyRichTextEditor;\n}\n}\n```"
@@ -113,7 +113,7 @@
113
113
  "type": "function",
114
114
  "package": "@qin-ui/antd-vue-pro",
115
115
  "signature": "export function useFields<D extends Data = Data>(\n initFields?: Fields<D>\n): UseFieldsReturn<D, Field<ComponentName, D>, FormItemInstance>;",
116
- "description": "字段配置管理 Hook\n基于 `@qin-ui/pro-components-core` 的 `useFields`,将泛型参数绑定为 Ant Design Vue 的本地类型:\n- 字段类型 F -> `Field<ComponentName, D>`(支持 Ant Design Vue 组件类型推导)\n- FormItem 实例 -> Ant Design Vue 的 `FormItemInstance`\n提供对字段配置数组的增删改查操作,支持:\n- 通过路径字符串或查找函数定位字段\n- 深层嵌套字段的遍历和匹配\n- 字段配置的合并/覆盖更新\n- 字段的添加、插入、删除\n- 父级字段查找\n- `fields` - 字段配置数组(响应式 Ref\\<F[]\\>)\n- `getField(path)` - 获取字段配置,支持路径字符串或查找函数\n- `setField(path, field, options?)` - 更新字段配置,默认合并模式\n- `deleteField(path, options?)` - 删除字段配置\n- `appendField(path, field, options?)` - 在指定字段后追加\n- `prependField(path, field, options?)` - 在指定字段前插入\n- `getParentField(path, options?)` - 获取父级字段配置",
116
+ "description": "字段配置管理 Hook\n基于 `@qin-ui/pro-components-core` 的 `useFields`,将泛型参数绑定为 Ant Design Vue 的本地类型:\n- 字段类型 F -> `Field<ComponentName, D>`(支持 Ant Design Vue 组件类型推导)\n- FormItem 实例 -> Ant Design Vue 的 `FormItemInstance`\n提供对字段配置数组的增删改查操作,支持:\n- 通过路径字符串或查找函数定位字段\n- 深层嵌套字段的遍历和匹配\n- 字段配置的合并/覆盖更新\n- 字段的添加、插入、删除\n- 父级字段查找\n字段标识按 `name`、`path` 的顺序取首个非 `null` / `undefined` 的值。\n- `fields` - 字段配置数组(响应式 Ref\\<F[]\\>)\n- `getField(path)` - 获取字段配置,支持路径字符串或查找函数\n- `setField(path, field, options?)` - 更新字段配置,默认合并模式\n- `deleteField(path, options?)` - 删除字段配置\n- `appendField(path, field, options?)` - 在指定字段后追加\n- `prependField(path, field, options?)` - 在指定字段前插入\n- `getParentField(path, options?)` - 获取父级字段配置",
117
117
  "params": [
118
118
  {
119
119
  "name": "initFields",
@@ -208,7 +208,7 @@
208
208
  "name": "Field",
209
209
  "type": "type",
210
210
  "package": "@qin-ui/antd-vue-pro",
211
- "signature": "export type Field<\n C extends ComponentName = ComponentName,\n D extends Data = Data,\n> = FieldTypeMap<D>[C] | WithFields<D>;",
211
+ "signature": "export type Field<\n C extends ComponentName = ComponentName,\n D extends Data = Data,\n> = (FieldTypeMap<D>[C] | WithFields<D>) & AdditionalMethods<FormItemInstance>;",
212
212
  "description": "字段配置类型,包含所有字段属性和响应式支持",
213
213
  "typeParams": [
214
214
  {
@@ -308,7 +308,7 @@
308
308
  "type": "type",
309
309
  "package": "@qin-ui/antd-vue-pro",
310
310
  "signature": "export type Column<D extends Data = Data> = Omit<\n ColumnType,\n 'dataIndex' | 'key'\n> &",
311
- "description": "继承 Ant Design Vue 的 ColumnType 列类型,并添加:\n- 类型安全的 dataIndex(基于泛型 D 推导路径),优先使用\n- key 作为辅助标识,当 dataIndex 不满足需求时使用\n- hidden 属性用于控制列显隐\n- 所有 Ant Design Vue 原生的列属性依然可用(title、width、fixed、align 等)",
311
+ "description": "表格列配置类型\n继承 Ant Design Vue 的 ColumnType 列类型,并添加:\n- 类型安全的 dataIndex(基于泛型 D 推导路径),优先使用\n- key 作为辅助标识,当 dataIndex 不满足需求时使用\n- hidden 属性用于控制列显隐\n- 所有 Ant Design Vue 原生的列属性依然可用(title、width、fixed、align 等)",
312
312
  "typeParams": [
313
313
  {
314
314
  "name": "D"
@@ -317,6 +317,21 @@
317
317
  "examples": [
318
318
  "```ts\ninterface User { name: string; age: number }\n\nconst columns: Columns<User> = [\n{\n// dataIndex 是主要字段,关联数据源中对应字段路径\ndataIndex: 'name',\ntitle: '姓名',\nwidth: 120,\n},\n{\ndataIndex: 'age',\ntitle: '年龄',\nwidth: 80,\n},\n]\n```"
319
319
  ]
320
+ },
321
+ {
322
+ "name": "Columns",
323
+ "type": "type",
324
+ "package": "@qin-ui/antd-vue-pro",
325
+ "signature": "export type Columns<D extends Data = Data> = Array<Column<D>>;",
326
+ "description": "表格列配置数组类型",
327
+ "typeParams": [
328
+ {
329
+ "name": "D"
330
+ }
331
+ ],
332
+ "examples": [
333
+ "```ts\nconst columns: Columns<User> = [\n{ dataIndex: 'name', title: '姓名' },\n{ dataIndex: 'age', title: '年龄' },\n]\n```"
334
+ ]
320
335
  }
321
336
  ]
322
337
  }
@@ -1,58 +1,58 @@
1
- .pro-table_search-form[data-v-66c80dec] [class*='-form-item'] {
1
+ .pro-table_search-form[data-v-bf6cca54] [class*='-form-item'] {
2
2
  margin: 0;
3
3
  }
4
- .pro-table_search-form_expand-toggle-button[data-v-66c80dec] {
4
+ .pro-table_search-form_expand-toggle-button[data-v-bf6cca54] {
5
5
  display: flex;
6
6
  align-items: center;
7
7
  padding: 0;
8
8
  padding-left: 4px;
9
9
  }
10
- .pro-table_search-form .transition[data-v-66c80dec] {
10
+ .pro-table_search-form .transition[data-v-bf6cca54] {
11
11
  transition: all 0.25s;
12
12
  }
13
- .pro-table_search-form-container[data-v-c385cd54] {
13
+ .pro-table_search-form-container[data-v-570a1898] {
14
14
  margin-bottom: 24px;
15
15
  padding: 24px;
16
16
  }
17
- .pro-table_table-container[data-v-ac3cdb51] {
17
+ .pro-table_table-container[data-v-e5c97b2f] {
18
18
  flex: 1;
19
19
  padding: 24px 24px 0;
20
20
  }
21
- .pro-table_size-control_button[data-v-2ac95d3b] {
21
+ .pro-table_size-control_button[data-v-950f061f] {
22
22
  display: flex;
23
23
  align-items: center;
24
24
  padding-right: 12px;
25
25
  padding-left: 12px;
26
26
  }
27
- .pro-table_size-control_button[data-v-2ac95d3b] svg {
27
+ .pro-table_size-control_button[data-v-950f061f] svg {
28
28
  transform: scale(1.3);
29
29
  }
30
- .pro-table_column-control_button[data-v-f3a7a234] {
30
+ .pro-table_column-control_button[data-v-58650608] {
31
31
  display: flex;
32
32
  align-items: center;
33
33
  padding-right: 12px;
34
34
  padding-left: 12px;
35
35
  }
36
- .pro-table_column-control_button[data-v-f3a7a234] svg {
36
+ .pro-table_column-control_button[data-v-58650608] svg {
37
37
  transform: scale(1.2, 1.4);
38
38
  }
39
- .pro-table_header[data-v-1e72e302] {
39
+ .pro-table_header[data-v-e7753db3] {
40
40
  display: flex;
41
41
  align-items: center;
42
42
  justify-content: flex-end;
43
43
  }
44
- .pro-table_header[data-v-1e72e302]:empty {
44
+ .pro-table_header[data-v-e7753db3]:empty {
45
45
  display: none;
46
46
  }
47
- .pro-table_header + .pro-table_header_content[data-v-1e72e302] {
47
+ .pro-table_header + .pro-table_header_content[data-v-e7753db3] {
48
48
  margin-top: 16px;
49
49
  }
50
- .pro-table_header_button-bar[data-v-1e72e302] {
50
+ .pro-table_header_button-bar[data-v-e7753db3] {
51
51
  flex: 1;
52
52
  }
53
- .pro-table_header_toolbar[data-v-1e72e302] {
53
+ .pro-table_header_toolbar[data-v-e7753db3] {
54
54
  margin-left: 12px;
55
55
  }
56
- .pro-table[data-v-1e72e302] [class*='-pagination'] [class*='-pagination-total-text'] {
56
+ .pro-table[data-v-e7753db3] [class*='-pagination'] [class*='-pagination-total-text'] {
57
57
  flex: 1;
58
58
  }
@@ -4,19 +4,19 @@ import { ProLocale } from '../../../locale';
4
4
  type ComponentMap = Partial<Record<ComponentName, any>>;
5
5
  type Props = {
6
6
  /**
7
- * @description 组件全局配置
7
+ * 组件全局配置
8
8
  * 可配置所有内置组件和 Pro 组件的默认属性
9
9
  * @example { 'input': { placeholder: '请输入' }, 'pro-form': { grid: { gutter: 24 } } }
10
10
  */
11
11
  componentVars?: ComponentVars;
12
12
  /**
13
- * @description 自定义组件映射
13
+ * 自定义组件映射
14
14
  * 用于替换或扩展内置组件,传入的组件会覆盖默认的同名组件
15
15
  * @example { 'input': MyCustomInput, 'select': MyCustomSelect }
16
16
  */
17
17
  componentMap?: ComponentMap;
18
18
  /**
19
- * @description 内置文案覆盖
19
+ * 内置文案覆盖
20
20
  * 可覆盖任意 locale 文案(如查询/重置/序号/占位符等),
21
21
  * 未覆盖的文案默认跟随宿主组件库语言自动切换
22
22
  * @example { 'table.query': '搜索' }
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/component-provider/components/index.vue"],"names":[],"mappings":"AAgIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEpE,KAAK,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AAOxD,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CAC7B,CAAC;AA8DF,iBAAS,cAAc;WAoBT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AASD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;YAlGV,OAAO,CAAC,SAAS,CAAC;mBAbX,aAAa;kBAMd,YAAY;6EAgH3B,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/component-provider/components/index.vue"],"names":[],"mappings":"AAkLA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEpE,KAAK,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AAOxD,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CAC7B,CAAC;AA0EF,iBAAS,cAAc;WAoBT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AASD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;YA9GV,OAAO,CAAC,SAAS,CAAC;mBAbX,aAAa;kBAMd,YAAY;6EA4H3B,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,16 +1,32 @@
1
1
  import { RequiredComponentVars } from '../types';
2
2
  import { InjectionKey, Component, ComputedRef } from 'vue';
3
+ /** 自定义组件映射的注入 key:ProComponentProvider 注入,BaseField 解析组件时优先取用 */
3
4
  export declare const INJECT_COMPONENTS: InjectionKey<ComputedRef<Partial<Record<string, Component>> | undefined> | Partial<Record<string, Component>>>;
5
+ /** 全量 componentVars 注入通道:运行期新增的自定义组件键由此读取(按组件名取配置) */
6
+ export declare const INJECT_COMPONENT_VARS: InjectionKey<ComputedRef<Record<string, any> | undefined> | Record<string, any>>;
7
+ /** 单个组件名的注入配置:注入 key、默认值与不接受 Provider 注入的键 */
4
8
  export type InjectConfigEntry<T = any> = {
5
9
  injectionKey: InjectionKey<T>;
6
10
  default: T;
11
+ /** 不接受 Provider 注入的键,注入层静默剔除 */
12
+ ignoreProps?: readonly string[];
7
13
  };
14
+ /** 内置组件名的注入配置表:每个组件名对应一份默认值,Provider 注入值与之合并 */
8
15
  export declare const INJECT_CONFIG: {
9
- [key in keyof RequiredComponentVars]: {
10
- injectionKey: InjectionKey<RequiredComponentVars[key]>;
11
- default: RequiredComponentVars[key];
12
- };
16
+ [key in keyof RequiredComponentVars]: InjectConfigEntry<RequiredComponentVars[key]>;
13
17
  };
18
+ /**
19
+ * 按组件名取注入配置
20
+ * @description 先查内置配置表,再查动态登记的通道
21
+ * @param key - 组件名(含 `date-picker.month` 等子类型段)
22
+ * @returns 对应注入配置,未登记时为 `undefined`
23
+ */
14
24
  export declare const getInjectConfig: (key: string) => InjectConfigEntry | undefined;
25
+ /**
26
+ * 按组件名取注入配置,未登记时补建
27
+ * @description 补建的通道使用独立的 Symbol 注入 key 与空默认值,同一组件名重复调用返回同一配置
28
+ * @param key - 组件名
29
+ * @returns 已存在或新建的注入配置
30
+ */
15
31
  export declare const ensureInjectConfig: (key: string) => InjectConfigEntry;
16
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/component-provider/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAMhE,eAAO,MAAM,iBAAiB,EAAE,YAAY,CACxC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,GAC3D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CACP,CAAC;AAEhC,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,GAAG,IAAI;IACvC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE;KACzB,GAAG,IAAI,MAAM,qBAAqB,GAAG;QACpC,YAAY,EAAE,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;KACrC;CAyHF,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,iBAAiB,GAAG,SAKjE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,iBAShD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/component-provider/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAMvC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,EAAE,YAAY,CACxC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,GAC3D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CACP,CAAC;AAEhC,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAC9C,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACxC,CAAC;AAE7B,8CAA8C;AAC9C,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,GAAG,IAAI;IACvC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,gCAAgC;IAChC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,aAAa,EAAE;KACzB,GAAG,IAAI,MAAM,qBAAqB,GAAG,iBAAiB,CACrD,qBAAqB,CAAC,GAAG,CAAC,CAC3B;CA6HF,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,iBAAiB,GAAG,SAKjE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,iBAShD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { GridItemProps, FormItemProps, TableProps } from '../../../shared/ui';
2
2
  import { Base, Grid } from '../../form/types';
3
- import { ProFormProps } from '../../form';
3
+ import { ProFormProps } from '../../form/components';
4
4
  import { ProTableProps } from '../../table';
5
5
  import { AllowedComponentProps } from 'vue';
6
6
  import { GetComponentType, ComponentName } from '../../form/constants';
@@ -8,7 +8,7 @@ import { ComponentProps } from 'vue-component-type-helpers';
8
8
  type PP<T extends Record<string, any>> = Partial<T & AllowedComponentProps>;
9
9
  type FP<T extends Record<string, any>> = Partial<T & Pick<Base, 'valueFormatter' | 'componentContainer' | 'modelProp'> & AllowedComponentProps>;
10
10
  /**
11
- * @qin-ui/antd-vue-pro 全局配置变量类型
11
+ * 全局配置变量类型
12
12
  *
13
13
  * @description 定义可通过 ProComponentProvider 配置的所有组件默认属性。
14
14
  * 支持配置表单、表格、表单项以及所有内置组件的默认属性。
@@ -32,8 +32,12 @@ type FP<T extends Record<string, any>> = Partial<T & Pick<Base, 'valueFormatter'
32
32
  * ```
33
33
  */
34
34
  export type RequiredComponentVars = {
35
- /** ProTable 全局默认属性 */
36
- 'pro-table': PP<TableProps & Pick<ProTableProps, 'control' | 'searchFormConfig' | 'immediateSearch' | 'addIndexColumn' | 'tableContainer'>>;
35
+ /**
36
+ * ProTable 全局默认属性
37
+ *
38
+ * @description `columns` / `dataSource` / `loading` 不参与全局注入:三者分别由 `:table` 实例(`useTable`)与组件自身查询状态驱动。
39
+ */
40
+ 'pro-table': PP<Omit<TableProps, 'loading' | 'columns' | 'dataSource'> & Pick<ProTableProps, 'control' | 'searchFormConfig' | 'immediateSearch' | 'addIndexColumn' | 'tableContainer'>>;
37
41
  /** ProForm 全局默认属性,grid 必须为 GridProps 对象而非 boolean */
38
42
  'pro-form': PP<Omit<ProFormProps, 'form' | 'grid'> & {
39
43
  grid: Exclude<Grid, undefined | boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/component-provider/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,KAAK,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC;AAE5E,KAAK,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,OAAO,CAC9C,CAAC,GACC,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,WAAW,CAAC,GACjE,qBAAqB,CACxB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,sBAAsB;IACtB,WAAW,EAAE,EAAE,CACb,UAAU,GACR,IAAI,CACF,aAAa,EACX,SAAS,GACT,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,CACnB,CACJ,CAAC;IACF,qDAAqD;IACrD,UAAU,EAAE,EAAE,CACZ,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;KAC1C,CACF,CAAC;IACF,yBAAyB;IACzB,eAAe,EAAE,EAAE,CACjB,aAAa,GACX,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,GACtE,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAClC,CAAC;IAEF,+BAA+B;IAC/B,kBAAkB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACxE,+BAA+B;IAC/B,kBAAkB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACxE,gCAAgC;IAChC,mBAAmB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACzE,+BAA+B;IAC/B,kBAAkB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACxE,kCAAkC;IAClC,qBAAqB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAC5E,GAAG;KAED,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,EAAE,CACzC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CACpC;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/component-provider/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,KAAK,CAAC;AAEjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,KAAK,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC;AAE5E,KAAK,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,OAAO,CAC9C,CAAC,GACC,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,WAAW,CAAC,GACjE,qBAAqB,CACxB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;OAIG;IACH,WAAW,EAAE,EAAE,CACb,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,GACpD,IAAI,CACF,aAAa,EACX,SAAS,GACT,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,CACnB,CACJ,CAAC;IACF,qDAAqD;IACrD,UAAU,EAAE,EAAE,CACZ,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;KAC1C,CACF,CAAC;IACF,yBAAyB;IACzB,eAAe,EAAE,EAAE,CACjB,aAAa,GACX,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,GACtE,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAClC,CAAC;IAEF,+BAA+B;IAC/B,kBAAkB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACxE,+BAA+B;IAC/B,kBAAkB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACxE,gCAAgC;IAChC,mBAAmB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACzE,+BAA+B;IAC/B,kBAAkB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACxE,kCAAkC;IAClC,qBAAqB,EAAE,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAC5E,GAAG;KAED,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,EAAE,CACzC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CACpC;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC"}
@@ -1,12 +1,18 @@
1
1
  import { Component } from 'vue';
2
2
  type Props = {
3
+ /** 组件名或组件对象 */
3
4
  component?: string | Component;
5
+ /** 字段路径,用于绑定表单数据 */
4
6
  path?: string;
5
7
  };
6
8
  declare const _default: import('vue').DefineComponent<Props, {
7
9
  getComponentRef: () => any;
8
10
  getComponentComputedProps: () => any;
9
- }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
11
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
12
+ "field-value-change": (value: unknown) => any;
13
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
14
+ "onField-value-change"?: ((value: unknown) => any) | undefined;
15
+ }>, {
10
16
  path: string;
11
17
  component: string | Component;
12
18
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/components/BaseField/index.vue"],"names":[],"mappings":"AAwOA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,KAAK,CAAC;AAmBb,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;;;qCAiJ6D,GAAG;;UAlJzD,MAAM;eADD,MAAM,GAAG,SAAS;;;;AA8PhC,wBASG"}
1
+ {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/components/BaseField/index.vue"],"names":[],"mappings":"AAwQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EACL,KAAK,SAAS,EAMf,MAAM,KAAK,CAAC;AA8Bb,KAAK,KAAK,GAAG;IACX,eAAe;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;;;qCAqK6D,GAAG;;;;;;UAtKzD,MAAM;eAFD,MAAM,GAAG,SAAS;;;;AAoRhC,wBAUG"}
@@ -1,6 +1,24 @@
1
1
  import { Field } from '../../../types';
2
2
  type LocaleT = (key: string, params?: Record<string, string | number>) => string;
3
+ /**
4
+ * 解析字段的 Provider 默认属性
5
+ *
6
+ * @description 仅字符串组件名取注入值(含 `date-picker` 子类型段);组件对象无注入配置,返回空对象。
7
+ * `date-picker` 不拼接 `picker` 段,其子类型预设由注入 key 在 BaseField 内单独解析
8
+ *
9
+ * @param field - 字段配置项
10
+ * @param injectProps - 该组件名对应的 Provider 注入默认值
11
+ * @param t - 翻译函数,用于兜底占位符文案
12
+ * @returns 合并占位符兜底后的初始属性
13
+ */
3
14
  export declare const getInitProps: (field: Field, injectProps: Record<string, any> | undefined, t: LocaleT) => Record<string, any>;
15
+ /**
16
+ * 输出未识别组件名的告警
17
+ *
18
+ * @description 按组件名去重,同一名称仅告警一次
19
+ *
20
+ * @param name - 未识别的组件名
21
+ */
4
22
  export declare function warnUnknownComponent(name: string): void;
5
23
  export {};
6
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/components/BaseField/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,KAAK,OAAO,GAAG,CACb,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KACrC,MAAM,CAAC;AAuBZ,eAAO,MAAM,YAAY,GACvB,OAAO,KAAK,EACZ,aAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAK,EACrC,GAAG,OAAO,KACT,MAAM,CAAC,MAAM,EAAE,GAAG,CAQpB,CAAC;AAKF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,QAMhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/components/BaseField/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,KAAK,OAAO,GAAG,CACb,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KACrC,MAAM,CAAC;AAuBZ;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,KAAK,EACZ,aAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAK,EACrC,GAAG,OAAO,KACT,MAAM,CAAC,MAAM,EAAE,GAAG,CAQpB,CAAC;AAKF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,QAMhD"}
@@ -1,7 +1,10 @@
1
1
  import { Fields, Grid } from '../../types';
2
2
  type Props = {
3
+ /** 是否启用网格布局 */
3
4
  grid?: Grid;
5
+ /** 字段配置数组 */
4
6
  fields?: Fields;
7
+ /** 是否禁用所有子字段 */
5
8
  disabled?: boolean;
6
9
  };
7
10
  declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/components/BaseFormItem/index.vue"],"names":[],"mappings":"AAyMA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAOhD,KAAK,KAAK,GAAG;IACX,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;cADW,OAAO;YADT,MAAM;UADR,IAAI;;AA0Ob,wBAOG"}
1
+ {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/components/BaseFormItem/index.vue"],"names":[],"mappings":"AA0PA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAShD,KAAK,KAAK,GAAG;IACX,eAAe;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;cADW,OAAO;YAFT,MAAM;UAFR,IAAI;;AAiSb,wBAOG"}
@@ -1,5 +1,6 @@
1
1
  import { ContainerComponent } from '../../types';
2
2
  type Props = {
3
+ /** 容器组件,未提供时不渲染包裹层 */
3
4
  component?: ContainerComponent;
4
5
  };
5
6
  declare function __VLS_template(): {
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/components/ContainerFragment/index.vue"],"names":[],"mappings":"AA4BA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,KAAK,KAAK,GAAG;IACX,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAcF,iBAAS,cAAc;WAoCT,OAAO,IAA6B;;yBAZrB,GAAG;yBACH,GAAG;;;;EAgB/B;AASD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;eAlEP,kBAAkB;6EAyE9B,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/components/ContainerFragment/index.vue"],"names":[],"mappings":"AA8BA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,KAAK,KAAK,GAAG;IACX,sBAAsB;IACtB,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAcF,iBAAS,cAAc;WAoCT,OAAO,IAA6B;;yBAZrB,GAAG;yBACH,GAAG;;;;EAgB/B;AASD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;eAlEP,kBAAkB;6EAyE9B,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}