@robot-admin/naive-ui-components 0.22.0 → 0.23.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 (321) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +9 -5
  3. package/README_EN.md +9 -5
  4. package/dist/C_ActionBar.d.cts +2 -1
  5. package/dist/C_ActionBar.d.ts +2 -1
  6. package/dist/C_AntV2.cjs +3 -3
  7. package/dist/C_AntV2.js +3 -3
  8. package/dist/C_BatchResult.cjs +1 -0
  9. package/dist/C_BatchResult.css +32 -0
  10. package/dist/C_BatchResult.d.cts +2 -0
  11. package/dist/C_BatchResult.d.ts +2 -0
  12. package/dist/C_BatchResult.js +1 -0
  13. package/dist/C_BatchResult2.cjs +1 -0
  14. package/dist/C_BatchResult2.js +1 -0
  15. package/dist/C_Breadcrumb.d.cts +2 -2
  16. package/dist/C_Breadcrumb.d.ts +1 -1
  17. package/dist/C_Captcha.d.ts +2 -0
  18. package/dist/C_Cascade.d.cts +1 -1
  19. package/dist/C_Cascade.d.ts +1 -1
  20. package/dist/C_Chat.d.cts +1 -1
  21. package/dist/C_Chat.d.ts +1 -1
  22. package/dist/C_City.d.cts +1 -1
  23. package/dist/C_City.d.ts +1 -1
  24. package/dist/C_Code.d.cts +1 -1
  25. package/dist/C_Code.d.ts +1 -1
  26. package/dist/C_ContextMenu.d.cts +1 -1
  27. package/dist/C_ContextMenu.d.ts +1 -1
  28. package/dist/C_DataPicker.cjs +1 -0
  29. package/dist/C_DataPicker.css +54 -0
  30. package/dist/C_DataPicker.d.cts +2 -0
  31. package/dist/C_DataPicker.d.ts +5 -0
  32. package/dist/C_DataPicker.js +1 -0
  33. package/dist/C_DataPicker2.cjs +1 -0
  34. package/dist/C_DataPicker2.js +1 -0
  35. package/dist/C_Date.d.cts +1 -1
  36. package/dist/C_Date.d.ts +1 -1
  37. package/dist/C_Density.cjs +1 -0
  38. package/dist/C_Density.css +1 -0
  39. package/dist/C_Density.d.cts +3 -0
  40. package/dist/C_Density.d.ts +3 -0
  41. package/dist/C_Density.js +1 -0
  42. package/dist/C_Density2.cjs +1 -0
  43. package/dist/C_Density2.js +1 -0
  44. package/dist/C_Editor.d.cts +1 -1
  45. package/dist/C_Editor.d.ts +1 -1
  46. package/dist/C_ErrorSummary.cjs +1 -0
  47. package/dist/C_ErrorSummary.css +29 -0
  48. package/dist/C_ErrorSummary.d.cts +3 -0
  49. package/dist/C_ErrorSummary.d.ts +3 -0
  50. package/dist/C_ErrorSummary.js +1 -0
  51. package/dist/C_ErrorSummary2.cjs +1 -0
  52. package/dist/C_ErrorSummary2.js +1 -0
  53. package/dist/C_Form.base.css +150 -148
  54. package/dist/C_Form.cjs +1 -1
  55. package/dist/C_Form.css +151 -253
  56. package/dist/C_Form.d.cts +3 -1
  57. package/dist/C_Form.d.ts +19 -1
  58. package/dist/C_Form.js +1 -1
  59. package/dist/C_FormModal.css +11 -12
  60. package/dist/C_FormModal.d.cts +1 -1
  61. package/dist/C_FormModal.d.ts +18 -2
  62. package/dist/C_FormModal2.cjs +1 -1
  63. package/dist/C_FormModal2.js +1 -1
  64. package/dist/C_FormSearch.cjs +1 -1
  65. package/dist/C_FormSearch.css +128 -56
  66. package/dist/C_FormSearch.d.cts +3 -3
  67. package/dist/C_FormSearch.d.ts +5 -3
  68. package/dist/C_FormSearch.js +1 -1
  69. package/dist/C_FormulaEditor.d.cts +1 -1
  70. package/dist/C_FormulaEditor.d.ts +1 -1
  71. package/dist/C_Guide.d.cts +1 -1
  72. package/dist/C_Guide.d.ts +1 -1
  73. package/dist/C_Icon.d.cts +1 -1
  74. package/dist/C_Icon.d.ts +1 -1
  75. package/dist/C_Language.d.cts +1 -1
  76. package/dist/C_Language.d.ts +1 -1
  77. package/dist/C_Loading.d.cts +1 -1
  78. package/dist/C_Loading.d.ts +1 -1
  79. package/dist/C_Login.d.cts +1 -1
  80. package/dist/C_Login.d.ts +4 -1
  81. package/dist/C_Markdown.d.cts +1 -1
  82. package/dist/C_Markdown.d.ts +1 -1
  83. package/dist/C_Menu.d.cts +2 -2
  84. package/dist/C_Menu.d.ts +1 -1
  85. package/dist/C_OrgChart.d.cts +1 -1
  86. package/dist/C_OrgChart.d.ts +1 -1
  87. package/dist/C_Progress.d.cts +1 -1
  88. package/dist/C_Progress.d.ts +1 -1
  89. package/dist/C_SectionNav.cjs +1 -0
  90. package/dist/C_SectionNav.css +46 -0
  91. package/dist/C_SectionNav.d.cts +2 -0
  92. package/dist/C_SectionNav.d.ts +2 -0
  93. package/dist/C_SectionNav.js +1 -0
  94. package/dist/C_SectionNav2.cjs +1 -0
  95. package/dist/C_SectionNav2.js +1 -0
  96. package/dist/C_Skeleton.d.cts +1 -1
  97. package/dist/C_Skeleton.d.ts +1 -1
  98. package/dist/C_Steps.d.cts +1 -1
  99. package/dist/C_Steps.d.ts +1 -1
  100. package/dist/C_Table.base.css +258 -256
  101. package/dist/C_Table.cjs +1 -1
  102. package/dist/C_Table.css +109 -1283
  103. package/dist/C_Table.d.cts +2 -1
  104. package/dist/C_Table.d.ts +11 -7
  105. package/dist/C_Table.js +1 -1
  106. package/dist/C_Table2.cjs +3 -0
  107. package/dist/C_Table2.js +3 -0
  108. package/dist/C_Tabs.cjs +1 -1
  109. package/dist/C_Tabs.d.cts +1 -1
  110. package/dist/C_Tabs.d.ts +1 -1
  111. package/dist/C_Tabs.js +1 -1
  112. package/dist/C_TagsView.d.cts +1 -1
  113. package/dist/C_Theme.d.cts +1 -1
  114. package/dist/C_Theme.d.ts +1 -1
  115. package/dist/C_Timeline.d.cts +1 -1
  116. package/dist/C_Timeline.d.ts +1 -1
  117. package/dist/C_Transfer.d.cts +1 -1
  118. package/dist/C_Transfer.d.ts +1 -1
  119. package/dist/C_Tree.d.cts +1 -1
  120. package/dist/C_Tree.d.ts +10 -6
  121. package/dist/C_Upload.d.cts +1 -1
  122. package/dist/C_Upload.d.ts +1 -1
  123. package/dist/C_WorkFlow2.cjs +1 -1
  124. package/dist/C_WorkFlow2.js +1 -1
  125. package/dist/Card.cjs +1 -1
  126. package/dist/Card.js +1 -1
  127. package/dist/Steps.cjs +1 -1
  128. package/dist/Steps.js +1 -1
  129. package/dist/Tabs.cjs +1 -1
  130. package/dist/Tabs.js +1 -1
  131. package/dist/batchPatch.cjs +1 -0
  132. package/dist/batchPatch.d.cts +26 -0
  133. package/dist/batchPatch.d.ts +26 -0
  134. package/dist/batchPatch.js +1 -0
  135. package/dist/config.cjs +1 -1
  136. package/dist/config.d.cts +7 -1
  137. package/dist/config.d.ts +7 -1
  138. package/dist/config.js +1 -1
  139. package/dist/config2.d.ts +14 -0
  140. package/dist/constants.d.cts +3 -3
  141. package/dist/constants.d.ts +3 -3
  142. package/dist/constants2.d.cts +402 -173
  143. package/dist/constants2.d.ts +402 -173
  144. package/dist/constants3.d.cts +3 -3
  145. package/dist/constants3.d.ts +3 -3
  146. package/dist/constants4.d.cts +173 -402
  147. package/dist/constants4.d.ts +173 -402
  148. package/dist/constants5.d.cts +2 -2
  149. package/dist/constants5.d.ts +2 -2
  150. package/dist/data.cjs +1 -1
  151. package/dist/data.d.cts +5 -108
  152. package/dist/data.d.ts +5 -108
  153. package/dist/data.js +1 -1
  154. package/dist/data2.cjs +1 -1
  155. package/dist/data2.d.cts +108 -0
  156. package/dist/data2.d.ts +108 -0
  157. package/dist/data2.js +1 -1
  158. package/dist/data3.cjs +1 -0
  159. package/dist/data3.js +1 -0
  160. package/dist/dateRange.d.cts +108 -13
  161. package/dist/dateRange.d.ts +108 -13
  162. package/dist/density.cjs +1 -1
  163. package/dist/density.js +1 -1
  164. package/dist/dictionary.cjs +1 -0
  165. package/dist/dictionary.d.cts +38 -0
  166. package/dist/dictionary.d.ts +38 -0
  167. package/dist/dictionary.js +1 -0
  168. package/dist/helpers.cjs +1 -1
  169. package/dist/helpers.js +1 -1
  170. package/dist/index.cjs +1 -1
  171. package/dist/index.d.cts +65 -53
  172. package/dist/index.d.ts +73 -57
  173. package/dist/index.js +1 -1
  174. package/dist/index.vue.d.cts +1 -1
  175. package/dist/index.vue.d.ts +1 -1
  176. package/dist/index10.vue.d.cts +37 -80
  177. package/dist/index10.vue.d.ts +77 -53
  178. package/dist/index11.vue.d.cts +77 -53
  179. package/dist/index11.vue.d.ts +1117 -45
  180. package/dist/index12.vue.d.cts +1117 -45
  181. package/dist/index12.vue.d.ts +17 -128
  182. package/dist/index13.vue.d.cts +17 -128
  183. package/dist/index13.vue.d.ts +57 -53
  184. package/dist/index14.vue.d.cts +57 -53
  185. package/dist/index14.vue.d.ts +16 -25
  186. package/dist/index15.vue.d.cts +16 -25
  187. package/dist/index15.vue.d.ts +52 -12
  188. package/dist/index16.vue.d.cts +52 -12
  189. package/dist/index16.vue.d.ts +13 -129
  190. package/dist/index17.vue.d.cts +13 -129
  191. package/dist/index17.vue.d.ts +123 -74
  192. package/dist/index18.vue.d.cts +123 -74
  193. package/dist/index18.vue.d.ts +48 -71
  194. package/dist/index19.vue.d.cts +40 -91
  195. package/dist/index19.vue.d.ts +36 -96
  196. package/dist/index2.vue.d.cts +2 -2
  197. package/dist/index2.vue.d.ts +2 -2
  198. package/dist/index20.vue.d.cts +38 -47
  199. package/dist/index20.vue.d.ts +13 -48
  200. package/dist/index21.vue.d.cts +12 -96
  201. package/dist/index21.vue.d.ts +25 -95
  202. package/dist/index22.vue.d.cts +20 -32
  203. package/dist/index22.vue.d.ts +75 -37
  204. package/dist/index23.vue.d.cts +77 -13
  205. package/dist/index23.vue.d.ts +71 -13
  206. package/dist/index24.vue.d.cts +2 -2
  207. package/dist/index24.vue.d.ts +1 -1
  208. package/dist/index25.vue.d.cts +116 -90
  209. package/dist/index25.vue.d.ts +116 -90
  210. package/dist/index26.vue.d.cts +94 -59
  211. package/dist/index26.vue.d.ts +94 -59
  212. package/dist/index27.vue.d.cts +75 -0
  213. package/dist/index27.vue.d.ts +75 -0
  214. package/dist/index28.vue.d.cts +103 -0
  215. package/dist/index28.vue.d.ts +103 -0
  216. package/dist/index29.vue.d.cts +105 -0
  217. package/dist/index29.vue.d.ts +105 -0
  218. package/dist/index3.vue.d.cts +4 -4
  219. package/dist/index3.vue.d.ts +4 -4
  220. package/dist/index30.vue.d.cts +28 -0
  221. package/dist/index30.vue.d.ts +28 -0
  222. package/dist/index4.vue.d.cts +19 -128
  223. package/dist/index4.vue.d.ts +17 -34
  224. package/dist/index5.vue.d.cts +127 -35
  225. package/dist/index5.vue.d.ts +30 -19
  226. package/dist/index6.vue.d.cts +30 -19
  227. package/dist/index6.vue.d.ts +22 -118
  228. package/dist/index7.vue.d.cts +22 -118
  229. package/dist/index7.vue.d.ts +112 -18
  230. package/dist/index8.vue.d.cts +112 -18
  231. package/dist/index8.vue.d.ts +24 -35
  232. package/dist/index9.vue.d.cts +24 -35
  233. package/dist/index9.vue.d.ts +37 -80
  234. package/dist/mapUtils.d.cts +4 -4
  235. package/dist/mapUtils.d.ts +4 -4
  236. package/dist/numberCodec.cjs +1 -0
  237. package/dist/numberCodec.d.cts +25 -0
  238. package/dist/numberCodec.d.ts +25 -0
  239. package/dist/numberCodec.js +1 -0
  240. package/dist/observer.cjs +1 -0
  241. package/dist/observer.js +1 -0
  242. package/dist/presets.d.cts +3 -66
  243. package/dist/presets.d.ts +3 -66
  244. package/dist/resolver.cjs +1 -1
  245. package/dist/resolver.d.cts +1 -1
  246. package/dist/resolver.d.ts +1 -1
  247. package/dist/resolver.js +1 -1
  248. package/dist/serializeSearch.cjs +1 -0
  249. package/dist/serializeSearch.js +1 -0
  250. package/dist/style.css +561 -322
  251. package/dist/types.d.cts +60 -103
  252. package/dist/types.d.ts +62 -52
  253. package/dist/types2.d.cts +104 -51
  254. package/dist/types2.d.ts +56 -0
  255. package/dist/types3.d.cts +56 -0
  256. package/dist/useCalendarEvents.d.cts +1 -1
  257. package/dist/useCalendarEvents.d.ts +1 -1
  258. package/dist/useCollapsePanel.d.cts +6 -6
  259. package/dist/useCollapsePanel.d.ts +6 -6
  260. package/dist/useComponentLocale.cjs +1 -1
  261. package/dist/useComponentLocale.js +1 -1
  262. package/dist/useCropperCore.d.cts +13 -13
  263. package/dist/useCropperCore.d.ts +13 -13
  264. package/dist/useDataResource.cjs +1 -0
  265. package/dist/useDataResource.js +1 -0
  266. package/dist/useDictionary.cjs +1 -0
  267. package/dist/useDictionary.js +1 -0
  268. package/dist/useDynamicFormState.d.cts +959 -582
  269. package/dist/useDynamicFormState.d.ts +951 -584
  270. package/dist/useEdgeInteraction.d.cts +3 -3
  271. package/dist/useEdgeInteraction.d.ts +3 -3
  272. package/dist/useFormArray.cjs +1 -0
  273. package/dist/useFormArray.d.cts +69 -0
  274. package/dist/useFormArray.d.ts +69 -0
  275. package/dist/useFormArray.js +1 -0
  276. package/dist/useFormConfig.cjs +1 -0
  277. package/dist/useFormConfig.d.cts +590 -0
  278. package/dist/useFormConfig.d.ts +590 -0
  279. package/dist/useFormConfig.js +1 -0
  280. package/dist/useFullscreen.d.cts +3 -3
  281. package/dist/useFullscreen.d.ts +3 -3
  282. package/dist/useGridWidth.cjs +1 -0
  283. package/dist/useGridWidth.js +1 -0
  284. package/dist/useInfiniteScroll.d.cts +2 -2
  285. package/dist/useInfiniteScroll.d.ts +2 -2
  286. package/dist/useQRCode.d.cts +3 -3
  287. package/dist/useQRCode.d.ts +3 -3
  288. package/dist/useSignatureHistory.d.cts +4 -4
  289. package/dist/useSignatureHistory.d.ts +4 -4
  290. package/dist/useSplitResize.d.cts +5 -5
  291. package/dist/useSplitResize.d.ts +5 -5
  292. package/dist/useTableGlobalConfig.cjs +1 -0
  293. package/dist/useTableGlobalConfig.js +1 -0
  294. package/dist/useTableQuery.cjs +1 -3
  295. package/dist/useTableQuery.js +1 -3
  296. package/dist/useWorkflowValidation.d.cts +6 -6
  297. package/dist/useWorkflowValidation.d.ts +6 -6
  298. package/dist/validation.cjs +1 -0
  299. package/dist/validation.d.cts +18 -0
  300. package/dist/validation.d.ts +18 -0
  301. package/dist/validation.js +1 -0
  302. package/dist/verification.d.cts +4 -4
  303. package/dist/verification.d.ts +4 -4
  304. package/dist/workflows.cjs +1 -0
  305. package/dist/workflows.d.cts +2 -0
  306. package/dist/workflows.d.ts +2 -0
  307. package/dist/workflows.js +1 -0
  308. package/docs/components.en.md +13 -1
  309. package/docs/components.md +13 -1
  310. package/docs/guides/batch-results.md +47 -0
  311. package/docs/guides/data-picker.md +65 -0
  312. package/docs/guides/data-workflows.md +123 -0
  313. package/docs/guides/form-density.en.md +56 -3
  314. package/docs/guides/form-density.md +56 -3
  315. package/docs/guides/search-workflows.md +164 -0
  316. package/docs/guides/usage.en.md +1 -1
  317. package/package.json +21 -1
  318. package/dist/C_FormSearch2.cjs +0 -1
  319. package/dist/C_FormSearch2.js +0 -1
  320. package/dist/useTableQuery.d.cts +0 -1957
  321. package/dist/useTableQuery.d.ts +0 -1957
@@ -1,581 +1,13 @@
1
1
  import { n as ComponentLocale, t as ComponentFeedback } from "./contracts.js";
2
- import { t as ComponentDensity } from "./density.js";
2
+ import { D as FormSlots, E as FormRecord, F as LayoutType, L as OptionItem, S as FormInstance, T as FormOption, a as ResolvedFormConfig, f as ComponentType, g as DynamicFormController, n as FormConfig, w as FormModel, z as SubmitEventPayload } from "./useFormConfig.js";
3
+ import { n as DictionaryOption } from "./dictionary.js";
4
+ import { n as ResolvedComponentDensity, t as ComponentDensity } from "./density.js";
5
+ import { $ as FormatterConfig, A as UseTableActionsOptions, B as ExpandConfig, D as TableRowKey, F as ColumnDragConfig, G as ToolbarConfig, H as SelectionConfig, K as TreeConfig, L as DisplayConfig, M as UseTableExpandOptions, N as UseTableExpandReturn, O as TableRowKeyIssue, P as BatchActionsConfig, R as EditConfig, S as TableColumn, U as SummaryConfig, V as ResolvedConfig, W as TableConfig, X as ExportConfig, b as SimpleTableActions, d as DataRecord, f as EditMode, g as ParentChildLinkMode, h as PaginationConfig, ht as DynamicRowsReturn, j as UseTableActionsReturn, k as TableRuntimeProps, mt as DynamicRowsOptions, ot as CrossPageSelectionConfig, q as VirtualScrollConfig, ut as RowDragConfig, w as TableInstance, x as StrictTableColumn, z as ErrorConfig } from "./index11.vue.js";
3
6
  import * as vue from "vue";
4
- import { CSSProperties, Component, ComputedRef, DeepReadonly, InjectionKey, MaybeRefOrGetter, Ref, ShallowRef, Slots, VNode } from "vue";
5
- import { FormInst, FormItemInst, FormItemRule, FormRules } from "naive-ui";
6
- import { NAIVE_COMBOS, NaiveRule, PRESET_RULES, RuleSpec, RuleSpec as RuleSpec$1, SPEC_RULES } from "@robot-admin/form-validate";
7
+ import { App, Component, ComputedRef, InjectionKey, MaybeRefOrGetter, Ref, ShallowRef, Slots, VNode, VNodeChild } from "vue";
8
+ import { DataTableColumn, DataTableRowKey, FormInst, FormItemInst, FormRules, PaginationProps, TreeInst, TreeOption, TreeProps } from "naive-ui";
9
+ import { HLJSApi } from "highlight.js";
7
10
 
8
- //#region src/components/C_Form/utils/formValidation.d.ts
9
- /** 原生规则、验证库规则和框架无关规则均可直接作为字段配置。 */
10
- type FormValidationRule = FormItemRule | NaiveRule | RuleSpec;
11
- //#endregion
12
- //#region src/components/C_Form/types.d.ts
13
- type MaybePromise<T> = T | Promise<T>;
14
- type FormRecord = Record<string, unknown>;
15
- type AtomicFormValue = string | number | boolean | bigint | symbol | null | undefined | Date | RegExp | File | Blob;
16
- /**
17
- * 最多展开五次子模型,保留六层字段路径及递归业务模型支持。
18
- * 每层引用独立别名,避免 TypeScript 5.8 方差检查递归路径自身时栈溢出。
19
- */
20
- type FieldPathChild<T> = NonNullable<T> extends AtomicFormValue ? never : NonNullable<T> extends readonly (infer Item)[] ? NonNullable<Item> extends AtomicFormValue ? never : NonNullable<Item> extends object ? NonNullable<Item> : never : NonNullable<T> extends object ? NonNullable<T> : never;
21
- type FieldPathStep<T extends object, Children extends { [K in keyof T]: string }> = { [K in Extract<keyof T, string>]: NonNullable<T[K]> extends AtomicFormValue ? K : NonNullable<T[K]> extends readonly (infer Item)[] ? NonNullable<Item> extends AtomicFormValue ? K | `${K}.${number}` : NonNullable<Item> extends object ? K | `${K}.${number}` | `${K}.${number}.${Children[K]}` : K : NonNullable<T[K]> extends object ? K | `${K}.${Children[K]}` : K }[Extract<keyof T, string>];
22
- type NestedFieldPath0<T extends object> = Extract<keyof T, string>;
23
- type NestedFieldPath1<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath0<FieldPathChild<T[K]>> }>;
24
- type NestedFieldPath2<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath1<FieldPathChild<T[K]>> }>;
25
- type NestedFieldPath3<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath2<FieldPathChild<T[K]>> }>;
26
- type NestedFieldPath4<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath3<FieldPathChild<T[K]>> }>;
27
- type NestedFieldPath5<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath4<FieldPathChild<T[K]>> }>;
28
- type FieldPath<T extends object = FormRecord> = keyof T extends never ? string : string extends keyof T ? string : NestedFieldPath5<T>;
29
- type NestedFieldPathValue<T, P extends string> = T extends readonly (infer Item)[] ? P extends `${number}.${infer Rest}` ? NestedFieldPathValue<NonNullable<Item>, Rest> : P extends `${number}` ? Item : unknown : P extends keyof T ? T[P] : P extends `${infer K}.${infer Rest}` ? K extends keyof T ? NestedFieldPathValue<NonNullable<T[K]>, Rest> : unknown : unknown;
30
- type FieldPathValue<T extends object, P extends string> = NestedFieldPathValue<T, P>;
31
- /**
32
- * 表单模式
33
- * @description create = 新建(空白表单),edit = 编辑(回填已有数据 + 脏检查)
34
- */
35
- type FormMode = 'create' | 'edit';
36
- /**
37
- * 支持的布局类型
38
- * @description 定义表单支持的所有布局模式
39
- */
40
- type LayoutType = 'default' | 'inline' | 'grid' | 'card' | 'tabs' | 'steps' | 'dynamic' | 'custom';
41
- /**
42
- * 标签位置类型
43
- * @description 表单标签的显示位置
44
- */
45
- type LabelPlacement = 'left' | 'top';
46
- /**
47
- * 支持的表单控件类型
48
- * @description 所有支持的表单输入控件类型
49
- */
50
- type ComponentType = 'input' | 'textarea' | 'inputNumber' | 'select' | 'checkbox' | 'radio' | 'switch' | 'slider' | 'rate' | 'datePicker' | 'daterange' | 'timePicker' | 'cascader' | 'colorPicker' | 'upload' | 'editor';
51
- /**
52
- * 选项项接口
53
- * @description 用于 select、checkbox、radio 等组件的选项配置
54
- */
55
- interface OptionItem {
56
- value: string | number | boolean;
57
- label: string;
58
- disabled?: boolean;
59
- [key: string]: unknown;
60
- }
61
- interface AsyncOptionsContext {
62
- field: string;
63
- reason: 'initialize' | 'dependency' | 'manual';
64
- signal: AbortSignal;
65
- }
66
- interface FormErrorContext {
67
- source: 'initialize' | 'async-options' | 'callback' | 'render' | 'submit';
68
- field?: string;
69
- }
70
- /** 组件卸载时取消当前提交,业务请求可直接使用 signal。 */
71
- interface FormSubmitContext {
72
- signal: AbortSignal;
73
- }
74
- /**
75
- * 标签页配置接口
76
- * @description 用于标签页布局的单个标签页配置
77
- */
78
- interface TabConfig {
79
- key: string;
80
- title: string;
81
- description?: string;
82
- disabled?: boolean;
83
- icon?: string;
84
- closable?: boolean;
85
- }
86
- /**
87
- * 步骤配置接口
88
- * @description 用于步骤布局的单个步骤配置
89
- */
90
- interface StepConfig {
91
- key: string;
92
- title: string;
93
- description?: string;
94
- disabled?: boolean;
95
- icon?: string;
96
- required?: boolean;
97
- }
98
- /**
99
- * 分组配置接口
100
- * @description 用于卡片布局和自定义布局的分组配置
101
- */
102
- interface GroupConfig {
103
- key: string;
104
- title: string;
105
- description?: string;
106
- icon?: string;
107
- color?: string;
108
- collapsible?: boolean;
109
- collapsed?: boolean;
110
- defaultExpanded?: boolean;
111
- }
112
- /**
113
- * 动态字段配置接口
114
- * @description 用于动态布局的字段配置
115
- */
116
- interface DynamicFieldConfig {
117
- id: string;
118
- type: ComponentType | string;
119
- prop: string;
120
- label: string;
121
- visible: boolean;
122
- removable: boolean;
123
- created: number;
124
- placeholder?: string;
125
- layout?: {
126
- span?: number;
127
- };
128
- rules?: readonly FormValidationRule[];
129
- }
130
- /**
131
- * 表单项布局配置
132
- * @description 单个表单项的布局相关配置
133
- */
134
- interface ItemLayoutConfig {
135
- span?: number;
136
- offset?: number;
137
- width?: string | number;
138
- group?: string;
139
- tab?: string;
140
- step?: string;
141
- dynamic?: boolean;
142
- customRender?: boolean;
143
- enhanced?: boolean;
144
- class?: string;
145
- style?: CSSProperties | Record<string, unknown>;
146
- hidden?: boolean;
147
- suffix?: boolean;
148
- /** Legacy nested grid attributes; top-level layout values take precedence. */
149
- grid?: {
150
- span?: number;
151
- offset?: number;
152
- suffix?: boolean;
153
- };
154
- }
155
- /**
156
- * 网格布局配置
157
- * @description 网格布局的详细配置选项
158
- */
159
- interface GridLayoutConfig {
160
- cols?: number;
161
- gutter?: number;
162
- yGutter?: number;
163
- xGap?: number;
164
- yGap?: number;
165
- responsive?: boolean;
166
- showConfigPanel?: boolean;
167
- showStats?: boolean;
168
- }
169
- /**
170
- * 内联布局配置
171
- * @description 内联布局的详细配置选项
172
- */
173
- interface InlineLayoutConfig {
174
- gap?: number;
175
- rowGap?: number;
176
- itemWidth?: number;
177
- align?: 'start' | 'center' | 'end' | 'baseline' | 'stretch';
178
- wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
179
- }
180
- /**
181
- * 卡片布局配置
182
- * @description 卡片布局的详细配置选项
183
- */
184
- interface CardLayoutConfig {
185
- groups?: GroupConfig[];
186
- spacing?: number;
187
- bordered?: boolean;
188
- direction?: 'vertical' | 'horizontal';
189
- showLayoutConfig?: boolean;
190
- showActionPanel?: boolean;
191
- showProgress?: boolean;
192
- }
193
- /**
194
- * 标签页布局配置
195
- * @description 标签页布局的详细配置选项
196
- */
197
- interface TabsLayoutConfig {
198
- tabs?: TabConfig[];
199
- type?: 'line' | 'card' | 'segment';
200
- size?: 'small' | 'medium' | 'large';
201
- placement?: 'top' | 'right' | 'bottom' | 'left';
202
- defaultTab?: string;
203
- animated?: boolean;
204
- closable?: boolean;
205
- addable?: boolean;
206
- showTabHeader?: boolean;
207
- showActions?: boolean;
208
- showCount?: boolean;
209
- validateBeforeSwitch?: boolean;
210
- }
211
- /**
212
- * 步骤布局配置
213
- * @description 步骤布局的详细配置选项
214
- */
215
- interface StepsLayoutConfig {
216
- steps?: StepConfig[];
217
- vertical?: boolean;
218
- size?: 'small' | 'medium';
219
- defaultStep?: number;
220
- showStepHeader?: boolean;
221
- validateBeforeNext?: boolean;
222
- prevButtonText?: string;
223
- nextButtonText?: string;
224
- }
225
- /**
226
- * 动态布局配置
227
- * @description 动态布局的详细配置选项
228
- */
229
- interface DynamicLayoutConfig {
230
- grid?: {
231
- cols?: number;
232
- gutter?: number;
233
- };
234
- controls?: {
235
- showControls?: boolean;
236
- showItemControls?: boolean;
237
- showStats?: boolean;
238
- };
239
- dynamic?: {
240
- allowAdd?: boolean;
241
- allowRemove?: boolean;
242
- allowToggle?: boolean;
243
- maxFields?: number;
244
- };
245
- }
246
- /**
247
- * 自定义渲染布局配置
248
- * @description 自定义渲染布局的详细配置选项
249
- */
250
- interface CustomLayoutConfig {
251
- groups?: GroupConfig[];
252
- rendering?: {
253
- mode?: 'basic' | 'enhanced';
254
- animations?: boolean;
255
- tooltips?: boolean;
256
- };
257
- display?: {
258
- showIntro?: boolean;
259
- showModeSwitch?: boolean;
260
- showGroupActions?: boolean;
261
- showStats?: boolean;
262
- };
263
- }
264
- /**
265
- * 完整布局配置
266
- * @description 包含所有布局类型的配置选项
267
- */
268
- interface LayoutConfig {
269
- type?: LayoutType;
270
- grid?: GridLayoutConfig;
271
- inline?: InlineLayoutConfig;
272
- card?: CardLayoutConfig;
273
- tabs?: TabsLayoutConfig;
274
- steps?: StepsLayoutConfig;
275
- dynamic?: DynamicLayoutConfig;
276
- custom?: CustomLayoutConfig;
277
- }
278
- /**
279
- * 表单配置项接口
280
- * @description 单个表单项的完整配置
281
- */
282
- interface FormOptionBase<T extends object> {
283
- id?: string;
284
- type: ComponentType | string;
285
- label?: string;
286
- placeholder?: string;
287
- rules?: readonly FormValidationRule[];
288
- attrs?: Record<string, unknown>;
289
- children?: OptionItem[];
290
- show?: boolean;
291
- layout?: ItemLayoutConfig;
292
- help?: string;
293
- required?: boolean;
294
- dependsOn?: FieldPath<T> | FieldPath<T>[];
295
- showWhen?: (formModel: FormModel<T>) => boolean;
296
- /** 字段级禁用(优先级高于全局 config.disabled) */
297
- disabled?: boolean | ((formModel: FormModel<T>) => boolean);
298
- /** 字段级只读(优先级高于全局 config.readonly) */
299
- readonly?: boolean | ((formModel: FormModel<T>) => boolean);
300
- /** 异步数据源:select / cascader / checkbox / radio 的远程选项加载 */
301
- asyncOptions?: (formModel: FormModel<T>, context?: AsyncOptionsContext) => Promise<readonly OptionItem[]>;
302
- /** 联动校验规则:根据表单数据动态返回校验规则 */
303
- rulesWhen?: (formModel: FormModel<T>) => readonly FormValidationRule[];
304
- /** 跨字段校验:需要引用多个字段值的验证函数,返回错误消息或 null */
305
- crossFieldValidator?: (formModel: FormModel<T>) => MaybePromise<string | null>;
306
- }
307
- /** 字段名与初值、联动返回值关联;未声明业务模型时保持动态表单的宽松契约。 */
308
- type FormOption<T extends object = FormRecord> = FormOptionBase<T> & { [P in FieldPath<T>]: {
309
- prop: P;
310
- value?: FieldPathValue<T, P>; /** 联动赋值:其他字段变化时自动计算本字段的值。 */
311
- valueWhen?: (formModel: FormModel<T>) => FieldPathValue<T, P>;
312
- } }[FieldPath<T>];
313
- /**
314
- * 表单提交事件参数
315
- */
316
- interface SubmitEventPayload<T extends object = FormRecord> {
317
- model: FormModel<T>;
318
- form: FormInst;
319
- }
320
- /**
321
- * C_Form 组件实例暴露的方法
322
- * @description 表单组件实例对外暴露的所有方法
323
- */
324
- interface FormInstance<T extends object = FormRecord> {
325
- validate(): Promise<void>;
326
- validateField(field: FieldPath<T> | FieldPath<T>[]): Promise<void>;
327
- validateStep(step: number | string): Promise<boolean>;
328
- validateTab(tabKey: string): Promise<boolean>;
329
- validateDynamicFields(): Promise<boolean>;
330
- validateCustomGroup(groupKey: string): Promise<boolean>;
331
- clearValidation(field?: FieldPath<T> | FieldPath<T>[]): void;
332
- getModel(): FormModel<T>;
333
- setFields(fields: Partial<FormModel<T>>): void;
334
- resetFields(): void;
335
- setFieldValue<P extends FieldPath<T>>(field: P, value: FieldPathValue<T, P>, shouldValidate?: boolean): Promise<void>;
336
- getFieldValue<P extends FieldPath<T>>(field: P): FieldPathValue<T, P>;
337
- setFieldsValue(fields: Partial<FormModel<T>>, shouldValidate?: boolean): Promise<void>;
338
- formRef: FormInst | null;
339
- formModel: FormModel<T>;
340
- initialize(): void;
341
- layoutType: LayoutType;
342
- shouldShowDefaultActions: boolean;
343
- /** 表单是否被修改过 */
344
- isDirty: boolean;
345
- /** 获取被修改的字段列表 */
346
- getChangedFields(): FieldPath<T>[];
347
- /** 检查某字段是否被修改 */
348
- isFieldDirty(field: FieldPath<T>): boolean;
349
- /** 将当前值设为初始快照(常用于编辑模式加载数据后) */
350
- markAsClean(): void;
351
- /** 字段异步选项的 loading 状态 */
352
- asyncLoadingMap: Record<string, boolean>;
353
- /** 字段异步选项加载错误 */
354
- asyncErrorMap: Record<string, unknown>;
355
- /** 重新加载全部或指定字段的异步选项 */
356
- reloadOptions(field?: FieldPath<T>): Promise<void>;
357
- /** 是否正在提交 */
358
- isSubmitting: boolean;
359
- /** 验证并提交,成功返回 true */
360
- submit(): Promise<boolean>;
361
- }
362
- /** C_Form 默认操作区插槽参数。 */
363
- interface FormActionSlotProps<T extends object = FormRecord> {
364
- form: FormInst | null;
365
- model: FormModel<T>;
366
- validate: FormInstance<T>['validate'];
367
- validateField: FormInstance<T>['validateField'];
368
- reset: FormInstance<T>['resetFields'];
369
- setFields: FormInstance<T>['setFields'];
370
- getModel: FormInstance<T>['getModel'];
371
- clearValidation: FormInstance<T>['clearValidation'];
372
- submit: FormInstance<T>['submit'];
373
- reloadOptions: FormInstance<T>['reloadOptions'];
374
- submitting: boolean;
375
- }
376
- /** Tabs 布局操作区插槽参数。 */
377
- interface FormTabActionsSlotProps {
378
- currentTab: string;
379
- totalTabs: number;
380
- validateTab: () => Promise<boolean>;
381
- switchToTab: (targetTab: string) => Promise<boolean>;
382
- }
383
- /** Steps 布局操作区插槽参数。 */
384
- interface FormStepActionsSlotProps {
385
- currentStep: number;
386
- totalSteps: number;
387
- isFirstStep: boolean;
388
- isLastStep: boolean;
389
- nextStep: () => Promise<void>;
390
- previousStep: () => void;
391
- goToStep: (stepIndex: number) => Promise<void>;
392
- /** Validate and submit the complete form, including fields in other steps. */
393
- submit: () => Promise<boolean>;
394
- submitting: boolean;
395
- }
396
- /** C_Form 对外公开的具名插槽。 */
397
- interface FormSlots<T extends object = FormRecord> {
398
- /** Field-specific named slots are intentionally open-ended. */
399
- [slotName: string]: ((props: any) => unknown) | undefined;
400
- action?: (props: FormActionSlotProps<T>) => unknown;
401
- /** 增加业务按钮,保留组件默认的提交、重置和加载管理。 */
402
- 'action-extra'?: (props: FormActionSlotProps<T>) => unknown;
403
- 'tab-actions'?: (props: FormTabActionsSlotProps) => unknown;
404
- 'step-actions'?: (props: FormStepActionsSlotProps) => unknown;
405
- }
406
- /**
407
- * 表单数据模型类型(泛型)
408
- */
409
- type FormModel<T extends object = FormRecord> = T;
410
- /**
411
- * 渲染模式类型
412
- */
413
- type RenderMode = 'basic' | 'enhanced';
414
- /**
415
- * 动态表单配置接口
416
- */
417
- interface DynamicFormConfig {
418
- maxFields: number;
419
- autoSave: boolean;
420
- enableSort: boolean;
421
- showControls: boolean;
422
- showItemControls: boolean;
423
- }
424
- /**
425
- * 动态表单状态接口
426
- */
427
- interface DynamicFormState {
428
- config: DynamicFormConfig;
429
- baseFields: FormOption[];
430
- dynamicFields: DynamicFieldConfig[];
431
- hiddenFieldIds: Set<string>;
432
- fieldCounter: number;
433
- isInitialized: boolean;
434
- }
435
- /**
436
- * 动态表单状态控制器
437
- * @description 为组合式函数提供稳定的公共返回类型,避免声明文件泄漏依赖库内部类型
438
- */
439
- interface DynamicFormController {
440
- state: DeepReadonly<DynamicFormState>;
441
- allFields: ComputedRef<FormOption[]>;
442
- visibleFields: ComputedRef<FormOption[]>;
443
- dynamicFieldsCount: ComputedRef<number>;
444
- hiddenFieldsCount: ComputedRef<number>;
445
- canAddMoreFields: ComputedRef<boolean>;
446
- allVisible: ComputedRef<boolean>;
447
- FIELD_TYPE_OPTIONS: ReadonlyArray<{
448
- label: string;
449
- value: ComponentType;
450
- }>;
451
- addField(config?: Partial<DynamicFieldConfig>): DynamicFieldConfig | null;
452
- removeField(index?: number): DynamicFieldConfig | null;
453
- clearDynamicFields(): number;
454
- toggleFieldVisibility(fieldId: string): boolean;
455
- toggleAllVisibility(): boolean;
456
- updateConfig(config: Partial<DynamicFormConfig>): void;
457
- exportConfig(): string;
458
- initialize(baseFields: FormOption[], config?: Partial<DynamicFormConfig>): void;
459
- }
460
- //#endregion
461
- //#region src/components/C_Form/composables/useFormConfig.d.ts
462
- /** 布局回调事件 — 替代原先 16 个 emit 中的纯透传事件 */
463
- interface LayoutCallbacks<T extends object = FormRecord> {
464
- onTabChange?: (tabKey: string, tabIndex: number) => void;
465
- onTabBeforeChange?: (currentTab: string, targetTab: string) => MaybePromise<boolean | void>;
466
- onTabValidate?: (tabKey: string) => void;
467
- onStepChange?: (stepIndex: number, stepKey: string) => void;
468
- onStepBeforeChange?: (currentStep: number, targetStep: number) => MaybePromise<boolean | void>;
469
- onStepValidate?: (stepIndex: number) => void;
470
- onFieldAdd?: (fieldConfig: DynamicFieldConfig) => void;
471
- onFieldRemove?: (fieldId: string) => void;
472
- onFieldToggle?: (fieldId: string, visible: boolean) => void;
473
- onFieldsClear?: () => void;
474
- onRenderModeChange?: (mode: RenderMode) => void;
475
- onGroupToggle?: (groupKey: string, collapsed: boolean) => void;
476
- onGroupReset?: (groupKey: string) => void;
477
- onFieldsChange?: (fields: FormOption<T>[]) => void;
478
- onSubmit?: (payload: SubmitEventPayload<T>, context?: FormSubmitContext) => unknown;
479
- onError?: (error: unknown, context: FormErrorContext) => void;
480
- }
481
- /**
482
- * C_Form 统一配置接口
483
- * @description 收拢原先 13 个分散 Props 为 1 个 config 对象
484
- * 默认值均在 FORM_DEFAULTS 中集中管理
485
- */
486
- interface FormConfig<T extends object = FormRecord> extends LayoutCallbacks<T> {
487
- feedback?: ComponentFeedback;
488
- locale?: ComponentLocale;
489
- /** 布局类型,默认 'default' */
490
- layout?: LayoutType;
491
- /** 标签位置,默认 'left' */
492
- labelPlacement?: LabelPlacement;
493
- /** 标签宽度,默认 'auto' */
494
- labelWidth?: string | number;
495
- /** 尺寸,默认 'medium' */
496
- size?: 'small' | 'medium' | 'large';
497
- /** 与表格、搜索表单一致的密度;显式 size 和布局间距优先。 */
498
- density?: ComponentDensity;
499
- /** 禁用整个表单,默认 false */
500
- disabled?: boolean;
501
- /** 只读,默认 false */
502
- readonly?: boolean;
503
- /** 显示默认提交/重置按钮,默认 true */
504
- showActions?: boolean;
505
- /** 值变化时自动校验,默认 false */
506
- validateOnChange?: boolean;
507
- /** 动态移除配置项后是否保留其模型值,默认 false */
508
- preserveRemovedFields?: boolean;
509
- /** 默认提交按钮文案 */
510
- submitText?: string;
511
- /** 默认重置按钮文案 */
512
- resetText?: string;
513
- /** 提交完成后的提示;默认不显示,由业务明确配置。 */
514
- submitSuccessText?: string;
515
- /** 重置完成后的提示;默认不显示。 */
516
- resetSuccessText?: string;
517
- /** 表单模式:create = 新建(默认),edit = 编辑(配合 initialValues 实现回填 + 脏检查) */
518
- mode?: FormMode;
519
- /** 编辑模式初始值:设置后自动作为脏检查基准 */
520
- initialValues?: Partial<T>;
521
- grid?: GridLayoutConfig;
522
- inline?: InlineLayoutConfig;
523
- card?: CardLayoutConfig;
524
- tabs?: TabsLayoutConfig;
525
- steps?: StepsLayoutConfig;
526
- dynamic?: DynamicLayoutConfig;
527
- custom?: CustomLayoutConfig;
528
- }
529
- /** Application-level C_Form defaults injection key. */
530
- declare const FORM_GLOBAL_CONFIG_KEY: InjectionKey<FormConfig>;
531
- /** Read application-level C_Form defaults without requiring a provider. */
532
- declare function useFormGlobalConfig(): FormConfig;
533
- /** Merge nested layout sections while preserving local-over-global precedence. */
534
- declare function mergeFormConfig(local: FormConfig | undefined, global: FormConfig): FormConfig;
535
- /** 解析后的配置(所有必填字段均已设置默认值) */
536
- interface ResolvedFormConfig extends Required<Omit<FormConfig, keyof LayoutCallbacks | 'grid' | 'inline' | 'card' | 'tabs' | 'steps' | 'dynamic' | 'custom' | 'initialValues' | 'feedback' | 'locale'>> {
537
- grid?: GridLayoutConfig;
538
- inline?: InlineLayoutConfig;
539
- card?: CardLayoutConfig;
540
- tabs?: TabsLayoutConfig;
541
- steps?: StepsLayoutConfig;
542
- dynamic?: DynamicLayoutConfig;
543
- custom?: CustomLayoutConfig;
544
- onTabChange?: LayoutCallbacks['onTabChange'];
545
- onTabBeforeChange?: LayoutCallbacks['onTabBeforeChange'];
546
- onTabValidate?: LayoutCallbacks['onTabValidate'];
547
- onStepChange?: LayoutCallbacks['onStepChange'];
548
- onStepBeforeChange?: LayoutCallbacks['onStepBeforeChange'];
549
- onStepValidate?: LayoutCallbacks['onStepValidate'];
550
- onFieldAdd?: LayoutCallbacks['onFieldAdd'];
551
- onFieldRemove?: LayoutCallbacks['onFieldRemove'];
552
- onFieldToggle?: LayoutCallbacks['onFieldToggle'];
553
- onFieldsClear?: LayoutCallbacks['onFieldsClear'];
554
- onRenderModeChange?: LayoutCallbacks['onRenderModeChange'];
555
- onGroupToggle?: LayoutCallbacks['onGroupToggle'];
556
- onGroupReset?: LayoutCallbacks['onGroupReset'];
557
- onFieldsChange?: LayoutCallbacks['onFieldsChange'];
558
- onSubmit?: LayoutCallbacks['onSubmit'];
559
- onError?: LayoutCallbacks['onError'];
560
- initialValues?: Record<string, any>;
561
- feedback?: ComponentFeedback;
562
- locale?: ComponentLocale;
563
- }
564
- declare const FORM_DEFAULTS: ResolvedFormConfig;
565
- /** 拥有自身控制按钮的布局(不显示默认操作按钮) */
566
- declare const LAYOUTS_WITH_OWN_CONTROLS: readonly LayoutType[];
567
- /**
568
- * 解析 FormConfig,合并默认值
569
- * @param config - 用户传入的配置(可选)
570
- * @returns 具有完整默认值的 ResolvedFormConfig
571
- */
572
- declare function resolveFormConfig(config?: FormConfig): ResolvedFormConfig;
573
- /**
574
- * 计算是否显示默认操作按钮
575
- * @param resolved - 已解析的配置
576
- */
577
- declare function shouldShowActions(resolved: ResolvedFormConfig): boolean;
578
- //#endregion
579
11
  //#region src/components/C_Form/composables/useFormRenderer.d.ts
580
12
  type ComponentMap = Record<string, Component>;
581
13
  type RendererProps = Record<string, unknown> & {
@@ -604,6 +36,8 @@ interface UseFormRendererOptions {
604
36
  instanceSlots?: Readonly<Slots>;
605
37
  asyncOptionsCache: Ref<Record<string, OptionItem[]>>;
606
38
  asyncLoadingMap: Ref<Record<string, boolean>>;
39
+ getDictionaryOptions?: (field: string) => readonly DictionaryOption[];
40
+ isDictionaryLoading?: (field: string) => boolean;
607
41
  renderers?: ComputedRef<Record<string, FormRenderer> | undefined>;
608
42
  /** Overrides application injection. An isolated registry never reads legacy globals. */
609
43
  registry?: FormRendererRegistry;
@@ -638,22 +72,23 @@ declare function useFormRenderer(opts: UseFormRendererOptions): {
638
72
  };
639
73
  //#endregion
640
74
  //#region src/components/C_Form/index.vue.d.ts
641
- declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
642
- props: vue.PublicProps & __VLS_PrettifyLocal<{
75
+ declare const __VLS_export$3: <T extends object = FormRecord>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$3<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
76
+ props: vue.PublicProps & __VLS_PrettifyLocal$3<{
643
77
  /** 字段配置数组 */options: FormOption<T>[]; /** 双向绑定表单数据 */
644
78
  modelValue?: FormModel<T>; /** 统一配置对象(收拢原先 13 个分散 Props) */
645
79
  config?: FormConfig<T>; /** 当前表单实例的自定义渲染器,不污染全局注册表 */
646
80
  renderers?: Record<string, FormRenderer>;
647
81
  } & {
648
- "onUpdate:modelValue"?: ((model: T) => any) | undefined;
649
82
  onSubmit?: ((payload: SubmitEventPayload<T>) => any) | undefined;
650
- "onValidate-success"?: ((model: T) => any) | undefined;
83
+ "onUpdate:modelValue"?: ((model: T) => any) | undefined;
651
84
  "onValidate-error"?: ((errors: unknown) => any) | undefined;
85
+ "onValidate-success"?: ((model: T) => any) | undefined;
652
86
  }> & (typeof globalThis extends {
653
87
  __VLS_PROPS_FALLBACK: infer P;
654
88
  } ? P : {});
655
89
  expose: (exposed: vue.ShallowUnwrapRef<{
656
90
  validate: () => Promise<void>;
91
+ revealField: (field: string) => Promise<boolean>;
657
92
  validateField: (field: string | string[]) => Promise<void>;
658
93
  validateStep: (step: number | string) => Promise<boolean>;
659
94
  validateTab: (tabKey: string) => Promise<boolean>;
@@ -683,12 +118,12 @@ declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNull
683
118
  }>) => void;
684
119
  attrs: any;
685
120
  slots: FormSlots<T>;
686
- emit: ((evt: "update:modelValue", model: T) => void) & ((evt: "submit", payload: SubmitEventPayload<T>) => void) & ((evt: "validate-success", model: T) => void) & ((evt: "validate-error", errors: unknown) => void);
121
+ emit: ((evt: "submit", payload: SubmitEventPayload<T>) => void) & ((evt: "update:modelValue", model: T) => void) & ((evt: "validate-error", errors: unknown) => void) & ((evt: "validate-success", model: T) => void);
687
122
  }>) => vue.VNode & {
688
123
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
689
124
  };
690
- declare const _default: typeof __VLS_export;
691
- type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
125
+ declare const _default$3: typeof __VLS_export$3;
126
+ type __VLS_PrettifyLocal$3<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
692
127
  //#endregion
693
128
  //#region src/components/C_Form/helpers.d.ts
694
129
  /** Preserve business-model field inference without changing the component API. */
@@ -719,6 +154,935 @@ interface UseCFormReturn<T extends object> {
719
154
  /** Small binding helper for the common controlled C_Form setup. */
720
155
  declare function useCForm<T extends object>(setup: UseCFormOptions<T>): UseCFormReturn<T>;
721
156
  //#endregion
157
+ //#region src/plugins/highlight.d.ts
158
+ interface HighlightPluginOptions {
159
+ autoDetect?: boolean;
160
+ extraLanguages?: string[];
161
+ /** Explicit compatibility bridge; restored when the owning app unmounts. */
162
+ exposeToWindow?: boolean;
163
+ /** Enable lifecycle diagnostics through the supplied logger. */
164
+ debug?: boolean;
165
+ logger?: Pick<Console, 'info' | 'warn' | 'error'>;
166
+ onError?: (error: unknown, context: {
167
+ source: 'language-loader';
168
+ language: string;
169
+ }) => void;
170
+ }
171
+ interface HighlightAPI {
172
+ getHljs: () => HLJSApi;
173
+ loadLanguage: (language: string) => Promise<boolean>;
174
+ loadLanguages: (languages: string[]) => Promise<string[]>;
175
+ getLoadedLanguages: () => string[];
176
+ }
177
+ /** Create an independent highlighter, including its language registry and loaders. */
178
+ declare function createHighlight(options?: HighlightPluginOptions): HighlightAPI;
179
+ /** Reuse the current app's highlighter or create a standalone, isolated one. */
180
+ declare function useHighlight(options?: HighlightPluginOptions): HighlightAPI;
181
+ /**
182
+ * * @description 安装 highlight.js 插件到 Vue 应用
183
+ * ? @param app - Vue 应用实例
184
+ * ? @param options - 插件配置选项
185
+ * ! @return 应用独立的 highlight API
186
+ */
187
+ declare function setupHighlight(app: App, options?: HighlightPluginOptions): HighlightAPI;
188
+ //#endregion
189
+ //#region src/components/C_Table/index.vue.d.ts
190
+ declare const __VLS_export$2: <T extends object = DataRecord, C = unknown>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$2<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
191
+ props: vue.PublicProps & __VLS_PrettifyLocal$2<TableRuntimeProps<T, C> & {
192
+ onCancel?: ((rowData: T, rowIndex: number) => any) | undefined;
193
+ onSave?: ((rowData: T, rowIndex: number, columnKey?: string | undefined) => any) | undefined;
194
+ "onPagination-change"?: ((page: number, pageSize: number) => any) | undefined;
195
+ "onRow-delete"?: ((deletedRow: T, index: number) => any) | undefined;
196
+ "onBatch-action-error"?: ((error: unknown, actionKey: string) => any) | undefined;
197
+ "onRow-key-error"?: ((issues: TableRowKeyIssue<T>[]) => any) | undefined;
198
+ "onRow-add"?: ((newRow: T) => any) | undefined;
199
+ "onRow-copy"?: ((originalRow: T, newRow: T) => any) | undefined;
200
+ "onRow-move"?: ((row: T, fromIndex: number, toIndex: number) => any) | undefined;
201
+ "onRow-selection-change"?: ((selectedKey: DataTableRowKey | null, selectedRow: T | null) => any) | undefined;
202
+ "onView-detail"?: ((data: T) => any) | undefined;
203
+ "onColumn-change"?: ((columns: TableColumn<T>[]) => any) | undefined;
204
+ "onExpand-change"?: ((expandedKeys: DataTableRowKey[], row?: T | undefined, expanded?: boolean | undefined) => any) | undefined;
205
+ "onSelection-change"?: ((checkedKeys: DataTableRowKey[], checkedRows: T[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]> | undefined) => any) | undefined;
206
+ "onChild-selection-change"?: ((parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: C[]) => any) | undefined;
207
+ "onParent-child-link-change"?: ((parentKey: DataTableRowKey, shouldSelect: boolean) => any) | undefined;
208
+ "onUpdate:data"?: ((data: T[]) => any) | undefined;
209
+ "onEdit-error"?: ((error: unknown) => any) | undefined;
210
+ }> & (typeof globalThis extends {
211
+ __VLS_PROPS_FALLBACK: infer P;
212
+ } ? P : {});
213
+ expose: (exposed: vue.ShallowUnwrapRef<TableInstance<T, C>>) => void;
214
+ attrs: any;
215
+ slots: {
216
+ 'toolbar-left'?: (props: {}) => any;
217
+ } & {
218
+ 'toolbar-right'?: (props: {}) => any;
219
+ } & {
220
+ error?: (props: {
221
+ error: ErrorConfig;
222
+ }) => any;
223
+ } & {
224
+ loading?: (props: {}) => any;
225
+ };
226
+ emit: ((evt: "cancel", rowData: T, rowIndex: number) => void) & ((evt: "save", rowData: T, rowIndex: number, columnKey?: string | undefined) => void) & ((evt: "pagination-change", page: number, pageSize: number) => void) & ((evt: "row-delete", deletedRow: T, index: number) => void) & ((evt: "batch-action-error", error: unknown, actionKey: string) => void) & ((evt: "row-key-error", issues: TableRowKeyIssue<T>[]) => void) & ((evt: "row-add", newRow: T) => void) & ((evt: "row-copy", originalRow: T, newRow: T) => void) & ((evt: "row-move", row: T, fromIndex: number, toIndex: number) => void) & ((evt: "row-selection-change", selectedKey: DataTableRowKey | null, selectedRow: T | null) => void) & ((evt: "view-detail", data: T) => void) & ((evt: "column-change", columns: TableColumn<T>[]) => void) & ((evt: "expand-change", expandedKeys: DataTableRowKey[], row?: T | undefined, expanded?: boolean | undefined) => void) & ((evt: "selection-change", checkedKeys: DataTableRowKey[], checkedRows: T[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]> | undefined) => void) & ((evt: "child-selection-change", parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: C[]) => void) & ((evt: "parent-child-link-change", parentKey: DataTableRowKey, shouldSelect: boolean) => void) & ((evt: "update:data", data: T[]) => void) & ((evt: "edit-error", error: unknown) => void);
227
+ }>) => vue.VNode & {
228
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
229
+ };
230
+ declare const _default$2: typeof __VLS_export$2;
231
+ type __VLS_PrettifyLocal$2<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
232
+ //#endregion
233
+ //#region src/components/C_Table/helpers.d.ts
234
+ /** Type-safe identity helper that rejects misspelled business field keys. */
235
+ declare function defineTableColumns<T extends object>(columns: StrictTableColumn<T>[]): StrictTableColumn<T>[];
236
+ /** Preserve row types across edit, action, summary and batch callbacks. */
237
+ declare function defineTableConfig<T extends object, C = unknown>(config: TableConfig<T, C>): TableConfig<T, C>;
238
+ /** Find missing and duplicate row keys before stateful table features consume them. */
239
+ declare function validateTableRowKeys<T extends object>(data: readonly T[], rowKey: (row: T) => DataTableRowKey | null | undefined): TableRowKeyIssue<T>[];
240
+ //#endregion
241
+ //#region src/components/C_Table/composables/useTableColumns.d.ts
242
+ /** useTableColumns 中对 tableManager 的最小依赖接口 */
243
+ interface TableManagerRef {
244
+ editStates: {
245
+ cellEdit: {
246
+ isSaving?: Ref<boolean>;
247
+ isEditingCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
248
+ getEditingCellValue: (rowKey: DataTableRowKey, columnKey: string) => unknown;
249
+ updateEditingCellValue: (rowKey: DataTableRowKey, columnKey: string, value: unknown) => void;
250
+ saveEditCell: () => Promise<unknown>;
251
+ cancelEditCell: () => void;
252
+ startEditCell: (rowKey: DataTableRowKey, columnKey: string) => void;
253
+ };
254
+ rowEdit: {
255
+ isSaving?: Ref<boolean>;
256
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
257
+ getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
258
+ updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
259
+ };
260
+ };
261
+ dynamicRowsState?: {
262
+ enhanceColumns: (columns: TableColumn[]) => TableColumn[];
263
+ } | null;
264
+ expandState?: {
265
+ getTableColumns: (originalColumns: TableColumn[]) => DataTableColumn[];
266
+ } | null;
267
+ }
268
+ interface UseTableColumnsOptions {
269
+ /** 原始列配置 */
270
+ rawColumns: ComputedRef<TableColumn[]>;
271
+ /** 统一配置 */
272
+ config: ComputedRef<ResolvedConfig>;
273
+ /** 默认列宽 */
274
+ columnWidth: number;
275
+ /** 区分使用侧显式统一列宽与内部默认值,不把默认值强加给弹性业务列。 */
276
+ columnWidthExplicit?: boolean;
277
+ /** 用户设定的 scrollX */
278
+ scrollX?: number | string;
279
+ /** 行键获取函数 */
280
+ rowKey: (row: DataRecord) => DataTableRowKey;
281
+ /** 表格管理器 */
282
+ tableManager: TableManagerRef;
283
+ /** 操作列渲染函数 */
284
+ actionsRenderer: (row: DataRecord, index: number) => VNodeChild;
285
+ /** 编辑模式检查器 */
286
+ editModeChecker: ComputedRef<{
287
+ isNonEditable: (column: TableColumn) => boolean;
288
+ isRowEditMode: () => boolean;
289
+ isCellEditMode: () => boolean;
290
+ }>;
291
+ /** 是否渲染操作列 */
292
+ showActionsColumn: ComputedRef<boolean>;
293
+ }
294
+ interface UseTableColumnsReturn {
295
+ reactiveColumns: Ref<TableColumn[]>;
296
+ showSettingsPanel: Ref<boolean>;
297
+ computedColumns: ComputedRef<DataTableColumn[]>;
298
+ computedScrollX: ComputedRef<number | string | undefined>;
299
+ getDictionaryLabel: (column: TableColumn, value: unknown) => string;
300
+ handleColumnChange: (columns: TableColumn[]) => void;
301
+ }
302
+ /**
303
+ * 表格列处理引擎
304
+ */
305
+ declare function useTableColumns(options: UseTableColumnsOptions): UseTableColumnsReturn;
306
+ //#endregion
307
+ //#region src/components/C_Table/composables/useRowEdit.d.ts
308
+ /** 行级校验错误 */
309
+ interface RowValidationError {
310
+ field: string;
311
+ message: string;
312
+ }
313
+ /**
314
+ * 行编辑配置选项
315
+ */
316
+ interface RowEditOptions {
317
+ data: () => DataRecord[];
318
+ rowKey: (row: DataRecord) => DataTableRowKey;
319
+ onSave?: (rowData: DataRecord, rowIndex: number, originalKey?: DataTableRowKey) => unknown;
320
+ onCancel?: (rowData: DataRecord, rowIndex: number) => unknown;
321
+ /** 列配置(用于提取校验规则) */
322
+ columns?: () => TableColumn[];
323
+ }
324
+ /**
325
+ * 可编辑行组合函数,提供表格整行的编辑功能
326
+ */
327
+ declare function useRowEdit(options: RowEditOptions): {
328
+ editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
329
+ editingData: vue.Ref<Record<string, DataRecord>, Record<string, DataRecord>>;
330
+ isSaving: vue.Ref<boolean, boolean>;
331
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
332
+ startEditRow: (rowKey: DataTableRowKey) => boolean;
333
+ cancelEditRow: () => Promise<void>;
334
+ saveEditRow: () => Promise<{
335
+ updatedData: DataRecord;
336
+ rowIndex: number;
337
+ } | undefined>;
338
+ validateRow: () => Promise<boolean>;
339
+ validationErrors: vue.Ref<{
340
+ field: string;
341
+ message: string;
342
+ }[], RowValidationError[] | {
343
+ field: string;
344
+ message: string;
345
+ }[]>;
346
+ getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
347
+ updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
348
+ findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
349
+ invalidate: () => void;
350
+ };
351
+ //#endregion
352
+ //#region src/components/C_Table/composables/useTableManager.d.ts
353
+ /**
354
+ * 表格管理器配置接口
355
+ */
356
+ interface TableManagerConfig {
357
+ feedback?: ComponentFeedback;
358
+ locale?: ComponentLocale;
359
+ editable: boolean;
360
+ editMode: string;
361
+ showRowActions: boolean;
362
+ modalTitle: string;
363
+ modalWidth: number;
364
+ onEditSave?: (rowData: DataRecord, rowIndex: number, columnKey?: string) => unknown;
365
+ onEditCancel?: (rowData: DataRecord, rowIndex: number) => unknown;
366
+ onEditError?: (error: unknown) => void;
367
+ expandable: boolean;
368
+ defaultExpandedKeys?: DataTableRowKey[];
369
+ onLoadExpandData?: (row: DataRecord) => Promise<any[]> | any[];
370
+ onExpandError?: (error: unknown, row: DataRecord) => void;
371
+ renderExpandContent?: unknown;
372
+ rowExpandable?: (row: DataRecord) => boolean;
373
+ enableSelection: boolean;
374
+ defaultCheckedKeys?: DataTableRowKey[];
375
+ rowCheckable?: (row: DataRecord) => boolean;
376
+ maxSelection?: number;
377
+ enableChildSelection: boolean;
378
+ childRowCheckable?: (childRow: DataRecord, parentRow: DataRecord) => boolean;
379
+ enableParentChildLink: boolean;
380
+ parentChildLinkMode: ParentChildLinkMode;
381
+ dynamicRows?: DynamicRowsOptions<DataRecord>;
382
+ treeEnabled?: boolean;
383
+ treeChildrenKey?: string;
384
+ }
385
+ /**
386
+ * 表格管理器参数接口
387
+ */
388
+ interface TableManagerParams {
389
+ config: MaybeRefOrGetter<TableManagerConfig>;
390
+ data: () => DataRecord[];
391
+ rowKey: (row: DataRecord) => DataTableRowKey;
392
+ emit: (...args: any[]) => unknown;
393
+ /** 列配置(用于编辑校验) */
394
+ columns?: () => TableColumn[];
395
+ /** UI 壳提供加载内容,状态引擎保持可独立调用。 */
396
+ renderLoading?: () => VNodeChild;
397
+ /** String row-key field inherited by dynamic row creation; explicit dynamicRows.rowKey wins. */
398
+ rowKeyField?: MaybeRefOrGetter<string | undefined>;
399
+ }
400
+ /**
401
+ * 事件处理器接口
402
+ */
403
+ interface EventHandlers {
404
+ onSave: (rowData: DataRecord, rowIndex: number, columnKey?: string, originalKey?: DataTableRowKey) => Promise<void>;
405
+ onCancel: (rowData: DataRecord, rowIndex: number) => Promise<void>;
406
+ onExpandChange: (keys: DataTableRowKey[], row?: DataRecord, expanded?: boolean) => void;
407
+ onSelectionChange: (checkedKeys: DataTableRowKey[], checkedRows: DataRecord[], childSelections: Map<DataTableRowKey, DataTableRowKey[]>) => void;
408
+ onChildSelectionChange: (parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: DataRecord[]) => void;
409
+ onRowChange: (data: DataRecord[]) => void;
410
+ onRowSelectionChange: (selectedKey: DataTableRowKey | null, selectedRow: DataRecord | null) => void;
411
+ onRowAdd: (newRow: DataRecord) => void;
412
+ onRowDelete: (deletedRow: DataRecord, index: number) => void;
413
+ onRowCopy: (originalRow: DataRecord, newRow: DataRecord) => void;
414
+ onRowMove: (row: DataRecord, fromIndex: number, toIndex: number) => void;
415
+ }
416
+ /**
417
+ * 表格统一状态管理器
418
+ */
419
+ declare function useTableManager(params: TableManagerParams): {
420
+ editStates: {
421
+ rowEdit: {
422
+ editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
423
+ editingData: vue.Ref<Record<string, DataRecord>, Record<string, DataRecord>>;
424
+ isSaving: vue.Ref<boolean, boolean>;
425
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
426
+ startEditRow: (rowKey: DataTableRowKey) => boolean;
427
+ cancelEditRow: () => Promise<void>;
428
+ saveEditRow: () => Promise<{
429
+ updatedData: DataRecord;
430
+ rowIndex: number;
431
+ } | undefined>;
432
+ validateRow: () => Promise<boolean>;
433
+ validationErrors: vue.Ref<{
434
+ field: string;
435
+ message: string;
436
+ }[], RowValidationError[] | {
437
+ field: string;
438
+ message: string;
439
+ }[]>;
440
+ getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
441
+ updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
442
+ findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
443
+ invalidate: () => void;
444
+ };
445
+ cellEdit: {
446
+ editingCell: vue.Ref<{
447
+ rowKey: DataTableRowKey | null;
448
+ columnKey: string | null;
449
+ }, {
450
+ rowKey: DataTableRowKey | null;
451
+ columnKey: string | null;
452
+ } | {
453
+ rowKey: DataTableRowKey | null;
454
+ columnKey: string | null;
455
+ }>;
456
+ editingData: vue.Ref<Record<string, unknown>, Record<string, unknown>>;
457
+ isSaving: vue.Ref<boolean, boolean>;
458
+ isEditingCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
459
+ startEditCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
460
+ saveEditCell: () => Promise<{
461
+ updatedData: {
462
+ [x: string]: unknown;
463
+ };
464
+ rowIndex: number;
465
+ columnKey: string;
466
+ } | undefined>;
467
+ cancelEditCell: () => void;
468
+ validateCell: () => Promise<boolean>;
469
+ cellValidationError: vue.Ref<string | null, string | null>;
470
+ getEditingCellValue: (rowKey: DataTableRowKey, columnKey: string) => unknown;
471
+ updateEditingCellValue: (rowKey: DataTableRowKey, columnKey: string, value: unknown) => void;
472
+ findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
473
+ invalidate: () => void;
474
+ };
475
+ modalEdit: {
476
+ isModalVisible: vue.Ref<boolean, boolean>;
477
+ isSaving: vue.Ref<boolean, boolean>;
478
+ editingData: vue.Ref<DataRecord, DataRecord>;
479
+ editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
480
+ editingRowIndex: vue.ComputedRef<number>;
481
+ startEdit: (rowKey: DataTableRowKey, sourceData?: DataRecord | undefined) => boolean;
482
+ saveEdit: (formData?: DataRecord | undefined) => Promise<{
483
+ updatedData: any;
484
+ rowIndex: number;
485
+ } | undefined>;
486
+ cancelEdit: () => Promise<boolean>;
487
+ updateEditingData: (data: DataRecord) => boolean;
488
+ resetEditingState: () => boolean;
489
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
490
+ getEditingRowData: (rowKey: DataTableRowKey) => any;
491
+ invalidate: () => void;
492
+ };
493
+ };
494
+ expandState: UseTableExpandReturn<DataRecord, DataRecord>;
495
+ dynamicRowsState: DynamicRowsReturn<DataRecord>;
496
+ stateManager: {
497
+ edit: {
498
+ /** 开始编辑 */start(rowKey: DataTableRowKey, columnKey?: string): void; /** 取消编辑 */
499
+ cancel(): void; /** 保存编辑 */
500
+ save(): Promise<void>; /** 是否正在编辑 */
501
+ isEditing(rowKey: DataTableRowKey, columnKey?: string): boolean; /** 获取当前编辑数据 */
502
+ getEditingData(): DataRecord | null | undefined;
503
+ };
504
+ expand: {
505
+ /** 展开行 */row(rowKey: DataTableRowKey): Promise<void>; /** 折叠行 */
506
+ collapse(rowKey: DataTableRowKey): void; /** 展开折叠切换 */
507
+ toggle(rowKey: DataTableRowKey): Promise<void>; /** 展开所有行 */
508
+ all(): Promise<void>; /** 折叠所有行 */
509
+ collapseAll(): void; /** 检查行是否已展开 */
510
+ isExpanded(rowKey: DataTableRowKey): boolean;
511
+ };
512
+ selection: {
513
+ /** 选择指定行 */select(rowKey: DataTableRowKey): void; /** 取消选择指定行 */
514
+ unselect(rowKey: DataTableRowKey): void; /** 选择所有行 */
515
+ all(): void; /** 清除所有行选择 */
516
+ clear(): void; /** 检查行是否已选择 */
517
+ isSelected(rowKey: DataTableRowKey): boolean; /** 获取所有已选择的行数据 */
518
+ getSelected(): DataRecord[];
519
+ };
520
+ childSelection: {
521
+ /** 选择指定父行下的子行 */select(parentKey: DataTableRowKey, childKey: DataTableRowKey): void; /** 取消选择指定父行下的子行 */
522
+ unselect(parentKey: DataTableRowKey, childKey: DataTableRowKey): void; /** 选择指定父行下的所有子行 */
523
+ selectAll(parentKey: DataTableRowKey): void; /** 清除指定父行下的所有子行选择 */
524
+ clear(parentKey: DataTableRowKey): void; /** 获取指定父行下所有已选择的子行数据 */
525
+ getSelected(parentKey: DataTableRowKey): DataRecord[];
526
+ };
527
+ dynamicRows: {
528
+ /** 添加行 */add(): void; /** 插入行 */
529
+ insert(): void; /** 删除行 */
530
+ delete(): void; /** 复制行 */
531
+ copy(): void; /** 上移动态行 */
532
+ moveUp(): void; /** 下移动态行 */
533
+ moveDown(): void; /** 清空动态行数据 */
534
+ clearSelection(): void; /** 获取当前选中的动态行数据 */
535
+ getSelected(): DataRecord | null; /** 打印表格 */
536
+ print(elementRef?: HTMLElement): Promise<void>; /** 导出表格数据 */
537
+ download(elementRef?: HTMLElement, filename?: string): Promise<void>;
538
+ }; /** 清除所有选择 */
539
+ clearAllSelections(): void;
540
+ };
541
+ expandedKeys: vue.ComputedRef<DataTableRowKey[]>;
542
+ checkedKeys: vue.ComputedRef<DataTableRowKey[]>;
543
+ eventHandlers: EventHandlers;
544
+ };
545
+ //#endregion
546
+ //#region src/components/C_Table/composables/useTableExpand.d.ts
547
+ /**
548
+ *
549
+ */
550
+ declare function useTableExpand<T extends object = DataRecord, C = DataRecord>(options: UseTableExpandOptions<T, C>): UseTableExpandReturn<T, C>;
551
+ //#endregion
552
+ //#region src/components/C_Table/composables/useTableActions.d.ts
553
+ /**
554
+ * 表格操作Hook
555
+ */
556
+ declare function useTableActions<T extends object = DataRecord>(options: UseTableActionsOptions<T>): UseTableActionsReturn<T>;
557
+ //#endregion
558
+ //#region src/components/C_Table/composables/usePagination.d.ts
559
+ interface UsePaginationOptions<T extends object = DataRecord> {
560
+ /** 数据源 - 支持函数、Ref 或 ComputedRef */
561
+ data: (() => T[]) | Ref<T[]> | ComputedRef<T[]>;
562
+ /** 分页配置 */
563
+ config: Ref<PaginationConfig | null> | ComputedRef<PaginationConfig | null>;
564
+ /** 事件触发器 */
565
+ emit?: (event: 'pagination-change', page: number, pageSize: number) => void;
566
+ }
567
+ interface UsePaginationReturn<T extends object = DataRecord> {
568
+ currentPage: Ref<number>;
569
+ currentPageSize: Ref<number>;
570
+ paginatedData: ComputedRef<T[]>;
571
+ paginationConfig: ComputedRef<PaginationProps | null>;
572
+ handlePageChange: (page: number) => void;
573
+ handlePageSizeChange: (pageSize: number) => void;
574
+ resetToFirstPage: () => void;
575
+ getTotalPages: () => number;
576
+ }
577
+ /** Local and remote pagination with stable controlled-state synchronization. */
578
+ declare function usePagination<T extends object = DataRecord>(options: UsePaginationOptions<T>): UsePaginationReturn<T>;
579
+ //#endregion
580
+ //#region src/components/C_Table/composables/useCellEdit.d.ts
581
+ /**
582
+ * 单元格编辑配置选项
583
+ */
584
+ interface CellEditOptions {
585
+ data: () => DataRecord[];
586
+ rowKey: (row: DataRecord) => DataTableRowKey;
587
+ onSave?: (rowData: DataRecord, rowIndex: number, columnKey: string, originalKey?: DataTableRowKey) => unknown;
588
+ /** 列配置(用于提取校验规则) */
589
+ columns?: () => TableColumn[];
590
+ }
591
+ /**
592
+ * 可编辑单元格组合函数,提供表格单元格的编辑功能
593
+ */
594
+ declare function useCellEdit(options: CellEditOptions): {
595
+ editingCell: vue.Ref<{
596
+ rowKey: DataTableRowKey | null;
597
+ columnKey: string | null;
598
+ }, {
599
+ rowKey: DataTableRowKey | null;
600
+ columnKey: string | null;
601
+ } | {
602
+ rowKey: DataTableRowKey | null;
603
+ columnKey: string | null;
604
+ }>;
605
+ editingData: vue.Ref<Record<string, unknown>, Record<string, unknown>>;
606
+ isSaving: vue.Ref<boolean, boolean>;
607
+ isEditingCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
608
+ startEditCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
609
+ saveEditCell: () => Promise<{
610
+ updatedData: {
611
+ [x: string]: unknown;
612
+ };
613
+ rowIndex: number;
614
+ columnKey: string;
615
+ } | undefined>;
616
+ cancelEditCell: () => void;
617
+ validateCell: () => Promise<boolean>;
618
+ cellValidationError: vue.Ref<string | null, string | null>;
619
+ getEditingCellValue: (rowKey: DataTableRowKey, columnKey: string) => unknown;
620
+ updateEditingCellValue: (rowKey: DataTableRowKey, columnKey: string, value: unknown) => void;
621
+ findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
622
+ invalidate: () => void;
623
+ };
624
+ //#endregion
625
+ //#region node_modules/@vue/shared/dist/shared.d.ts
626
+ type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
627
+ //#endregion
628
+ //#region src/components/C_Table/composables/useModalEdit.d.ts
629
+ interface ModalEditOptions<T extends object = DataRecord> {
630
+ data: () => T[];
631
+ rowKey: (row: T) => DataTableRowKey;
632
+ onSave?: (editingData: T, rowIndex: number, originalKey?: DataTableRowKey) => unknown;
633
+ onCancel?: (originalData: T, rowIndex: number) => unknown;
634
+ }
635
+ /** Modal edit state with lossless snapshots and retry-safe async saves. */
636
+ declare function useModalEdit<T extends object = DataRecord>(options: ModalEditOptions<T>): {
637
+ isModalVisible: vue.Ref<boolean, boolean>;
638
+ isSaving: vue.Ref<boolean, boolean>;
639
+ editingData: [T] extends [vue.Ref<any, any>] ? IfAny<T, vue.Ref<T, T>, T> : vue.Ref<vue.UnwrapRef<T>, T | vue.UnwrapRef<T>>;
640
+ editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
641
+ editingRowIndex: vue.ComputedRef<number>;
642
+ startEdit: (rowKey: DataTableRowKey, sourceData?: T) => boolean;
643
+ saveEdit: (formData?: T) => Promise<{
644
+ updatedData: any;
645
+ rowIndex: number;
646
+ } | undefined>;
647
+ cancelEdit: () => Promise<boolean>;
648
+ updateEditingData: (data: T) => boolean;
649
+ resetEditingState: () => boolean;
650
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
651
+ getEditingRowData: (rowKey: DataTableRowKey) => any;
652
+ invalidate: () => void;
653
+ };
654
+ //#endregion
655
+ //#region src/components/C_Table/composables/useTableQuery.d.ts
656
+ interface TableQueryContext<Q> {
657
+ page: number;
658
+ pageSize: number;
659
+ query: Readonly<Q>;
660
+ signal: AbortSignal;
661
+ }
662
+ interface TableQueryResult<T extends object> {
663
+ data: readonly T[];
664
+ total: number;
665
+ }
666
+ interface UseTableQueryOptions<T extends object, Q extends object> {
667
+ request: (context: TableQueryContext<Q>) => Promise<TableQueryResult<T>>;
668
+ initialQuery: Q;
669
+ columns?: MaybeRefOrGetter<TableColumn<T>[] | undefined>;
670
+ config?: MaybeRefOrGetter<TableConfig<T> | undefined>;
671
+ rowKey?: TableRowKey<T>;
672
+ initialPage?: number;
673
+ pageSize?: number;
674
+ immediate?: boolean;
675
+ onError?: (error: unknown) => void;
676
+ onSuccess?: (result: TableQueryResult<T>) => void;
677
+ }
678
+ /**
679
+ * Remote table controller with latest-request-wins cancellation and ready-to-bind props.
680
+ */
681
+ declare function useTableQuery<T extends object, Q extends object = Record<string, unknown>>(options: UseTableQueryOptions<T, Q>): {
682
+ data: vue.ShallowRef<T[], T[]>;
683
+ loading: vue.Ref<boolean, boolean>;
684
+ error: vue.ShallowRef<unknown, unknown>;
685
+ total: vue.Ref<number, number>;
686
+ page: vue.Ref<number, number>;
687
+ pageSize: vue.Ref<number, number>;
688
+ query: vue.Ref<any, any> extends Q ? Q extends Q & vue.Ref<any, any> ? IfAny<Q, vue.ShallowRef<Q, Q>, Q> : vue.ShallowRef<Q, Q> : vue.ShallowRef<Q, Q>;
689
+ tableProps: vue.ComputedRef<{
690
+ data: T[];
691
+ loading: boolean;
692
+ columns: TableColumn<T>[] | undefined;
693
+ rowKey: TableRowKey<T>;
694
+ config: {
695
+ pagination: {
696
+ enabled: true;
697
+ remote: true;
698
+ page: number;
699
+ pageSize: number;
700
+ total: number;
701
+ showSizePicker?: boolean;
702
+ showQuickJumper?: boolean;
703
+ pageSizes?: number[];
704
+ simple?: boolean;
705
+ size?: "small" | "medium" | "large";
706
+ };
707
+ density?: ComponentDensity;
708
+ feedback?: ComponentFeedback;
709
+ locale?: ComponentLocale;
710
+ validateRowKeys?: boolean;
711
+ edit?: boolean | EditMode | EditConfig<T> | undefined;
712
+ actions?: SimpleTableActions<T> | undefined;
713
+ expand?: boolean | ExpandConfig<T, unknown> | undefined;
714
+ selection?: boolean | SelectionConfig<T, unknown> | undefined;
715
+ dynamicRows?: DynamicRowsOptions<T> | (string extends keyof T ? boolean : false) | undefined;
716
+ toolbar?: ToolbarConfig;
717
+ display?: DisplayConfig;
718
+ virtualScroll?: VirtualScrollConfig | boolean;
719
+ summary?: SummaryConfig<T> | undefined;
720
+ columnDrag?: ColumnDragConfig | boolean;
721
+ tree?: TreeConfig | boolean;
722
+ rowDrag?: RowDragConfig | boolean;
723
+ crossPageSelection?: CrossPageSelectionConfig | boolean;
724
+ export?: ExportConfig;
725
+ persistKey?: string;
726
+ formatterConfig?: FormatterConfig;
727
+ error?: ErrorConfig;
728
+ batchActions?: BatchActionsConfig<T> | undefined;
729
+ };
730
+ }>;
731
+ execute: () => Promise<boolean>;
732
+ reload: () => Promise<boolean>;
733
+ setQuery: (next: Partial<Q> | ((current: Readonly<Q>) => Q), reload?: boolean) => Promise<boolean>;
734
+ resetQuery: (reload?: boolean) => Promise<boolean>;
735
+ handlePaginationChange: (nextPage: number, nextPageSize: number) => Promise<boolean>;
736
+ bindings: vue.ComputedRef<{
737
+ onPaginationChange: (nextPage: number, nextPageSize: number) => Promise<boolean>;
738
+ data: T[];
739
+ loading: boolean;
740
+ columns: TableColumn<T>[] | undefined;
741
+ rowKey: TableRowKey<T>;
742
+ config: {
743
+ pagination: {
744
+ enabled: true;
745
+ remote: true;
746
+ page: number;
747
+ pageSize: number;
748
+ total: number;
749
+ showSizePicker?: boolean;
750
+ showQuickJumper?: boolean;
751
+ pageSizes?: number[];
752
+ simple?: boolean;
753
+ size?: "small" | "medium" | "large";
754
+ };
755
+ density?: ComponentDensity;
756
+ feedback?: ComponentFeedback;
757
+ locale?: ComponentLocale;
758
+ validateRowKeys?: boolean;
759
+ edit?: boolean | EditMode | EditConfig<T> | undefined;
760
+ actions?: SimpleTableActions<T> | undefined;
761
+ expand?: boolean | ExpandConfig<T, unknown> | undefined;
762
+ selection?: boolean | SelectionConfig<T, unknown> | undefined;
763
+ dynamicRows?: DynamicRowsOptions<T> | (string extends keyof T ? boolean : false) | undefined;
764
+ toolbar?: ToolbarConfig;
765
+ display?: DisplayConfig;
766
+ virtualScroll?: VirtualScrollConfig | boolean;
767
+ summary?: SummaryConfig<T> | undefined;
768
+ columnDrag?: ColumnDragConfig | boolean;
769
+ tree?: TreeConfig | boolean;
770
+ rowDrag?: RowDragConfig | boolean;
771
+ crossPageSelection?: CrossPageSelectionConfig | boolean;
772
+ export?: ExportConfig;
773
+ persistKey?: string;
774
+ formatterConfig?: FormatterConfig;
775
+ error?: ErrorConfig;
776
+ batchActions?: BatchActionsConfig<T> | undefined;
777
+ };
778
+ }>;
779
+ cancel: () => void;
780
+ };
781
+ //#endregion
782
+ //#region src/components/C_Tree/types.d.ts
783
+ type TreeKey = string | number;
784
+ type TreeMode = 'menu' | 'file' | 'org' | 'custom';
785
+ type StatusType = 'success' | 'warning' | 'error' | 'info';
786
+ type ButtonType = 'primary' | 'info' | 'warning' | 'error' | 'default';
787
+ /** Custom fields are allowed; keyField/labelField select the actual identity and label. */
788
+ interface TreeOption$1 extends TreeOption {
789
+ id?: TreeKey;
790
+ children?: TreeOption$1[];
791
+ }
792
+ interface TreeNodeData extends TreeOption$1 {
793
+ name?: string;
794
+ type?: string;
795
+ children?: TreeNodeData[];
796
+ }
797
+ interface DropInfo<T extends object = TreeOption$1> {
798
+ node: T;
799
+ dragNode: T;
800
+ dropPosition: 'before' | 'inside' | 'after';
801
+ event: DragEvent;
802
+ }
803
+ interface StatusConfig {
804
+ field: string;
805
+ values: Record<string | number, {
806
+ text: string;
807
+ type: StatusType;
808
+ }>;
809
+ }
810
+ interface ActionConfig<T extends object = TreeNodeData> {
811
+ key: string;
812
+ text: string;
813
+ icon: string;
814
+ type?: ButtonType;
815
+ show?: (node: T) => boolean;
816
+ confirm?: string;
817
+ }
818
+ interface IconConfig {
819
+ default?: string;
820
+ typeMap?: Record<string, string>;
821
+ colorMap?: Record<string, string>;
822
+ }
823
+ type MaybeArray<T> = T | T[];
824
+ type TreeUpdateHandler<T extends object, A extends TreeUpdateMeta['action']> = (keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T, A>) => void;
825
+ type TreeDragHandler<T extends object> = (info: {
826
+ node: T;
827
+ event: DragEvent;
828
+ }) => void;
829
+ /** 原生功能保持透传,涉及节点的回调由数据源推导业务类型。 */
830
+ type TreeNativeProps<T extends object = TreeNodeData> = Omit<TreeProps, 'data' | 'filter' | 'onLoad' | 'getChildren' | 'renderLabel' | 'renderPrefix' | 'renderSuffix' | 'renderSwitcherIcon' | 'nodeProps' | 'allowDrop' | 'checkOnClick' | 'overrideDefaultNodeClickBehavior' | 'onDrop' | 'onDragenter' | 'onDragleave' | 'onDragend' | 'onDragstart' | 'onDragover' | 'onUpdateExpandedKeys' | 'onUpdate:expandedKeys' | 'onUpdateSelectedKeys' | 'onUpdate:selectedKeys' | 'onUpdateCheckedKeys' | 'onUpdate:checkedKeys' | 'onUpdateIndeterminateKeys' | 'onUpdate:indeterminateKeys'> & {
831
+ filter?: (pattern: string, node: T) => boolean;
832
+ onLoad?: (node: T) => Promise<unknown>;
833
+ getChildren?: (node: T) => unknown;
834
+ renderLabel?: (context: TreeRenderContext<T>) => VNodeChild;
835
+ renderPrefix?: (context: TreeRenderContext<T>) => VNodeChild;
836
+ renderSuffix?: (context: TreeRenderContext<T>) => VNodeChild;
837
+ renderSwitcherIcon?: (context: {
838
+ expanded: boolean;
839
+ selected: boolean;
840
+ option: T;
841
+ }) => VNodeChild;
842
+ nodeProps?: (context: {
843
+ option: T;
844
+ }) => ReturnType<NonNullable<TreeProps['nodeProps']>>;
845
+ allowDrop?: (info: {
846
+ dropPosition: DropInfo['dropPosition'];
847
+ node: T;
848
+ phase: 'drag' | 'drop';
849
+ }) => boolean;
850
+ checkOnClick?: boolean | ((node: T) => boolean);
851
+ overrideDefaultNodeClickBehavior?: (info: {
852
+ option: T;
853
+ }) => ReturnType<NonNullable<TreeProps['overrideDefaultNodeClickBehavior']>>;
854
+ onDrop?: MaybeArray<(info: DropInfo<T>) => void>;
855
+ onDragenter?: MaybeArray<TreeDragHandler<T>>;
856
+ onDragleave?: MaybeArray<TreeDragHandler<T>>;
857
+ onDragend?: MaybeArray<TreeDragHandler<T>>;
858
+ onDragstart?: MaybeArray<TreeDragHandler<T>>;
859
+ onDragover?: MaybeArray<TreeDragHandler<T>>;
860
+ onUpdateExpandedKeys?: MaybeArray<TreeUpdateHandler<T, 'expand' | 'collapse' | 'filter'>>;
861
+ 'onUpdate:expandedKeys'?: MaybeArray<TreeUpdateHandler<T, 'expand' | 'collapse' | 'filter'>>;
862
+ onUpdateSelectedKeys?: MaybeArray<TreeUpdateHandler<T, 'select' | 'unselect'>>;
863
+ 'onUpdate:selectedKeys'?: MaybeArray<TreeUpdateHandler<T, 'select' | 'unselect'>>;
864
+ onUpdateCheckedKeys?: MaybeArray<TreeUpdateHandler<T, 'check' | 'uncheck'>>;
865
+ 'onUpdate:checkedKeys'?: MaybeArray<TreeUpdateHandler<T, 'check' | 'uncheck'>>;
866
+ onUpdateIndeterminateKeys?: MaybeArray<(keys: TreeKey[], options: Array<T | null>) => void>;
867
+ 'onUpdate:indeterminateKeys'?: MaybeArray<(keys: TreeKey[], options: Array<T | null>) => void>;
868
+ };
869
+ interface TreeRenderContext<T extends object = TreeOption$1> {
870
+ option: T;
871
+ checked: boolean;
872
+ selected: boolean;
873
+ }
874
+ interface TreeUpdateMeta<T extends object = TreeOption$1, A extends 'select' | 'unselect' | 'check' | 'uncheck' | 'expand' | 'collapse' | 'filter' = 'select' | 'unselect' | 'check' | 'uncheck' | 'expand' | 'collapse' | 'filter'> {
875
+ node: T | null;
876
+ action: A;
877
+ }
878
+ interface TreeProps$1<T extends object = TreeNodeData> {
879
+ /** Business interfaces need no string index signature; fields are selected by config. */
880
+ data: readonly T[];
881
+ mode?: TreeMode;
882
+ /** Native tree capabilities; explicit wrapper props have priority. */
883
+ treeProps?: TreeNativeProps<T>;
884
+ density?: ComponentDensity;
885
+ keyField?: string;
886
+ labelField?: string;
887
+ childrenField?: string;
888
+ searchPattern?: string;
889
+ searchable?: boolean;
890
+ searchPlaceholder?: string;
891
+ draggable?: boolean;
892
+ showLine?: boolean;
893
+ showToolbar?: boolean;
894
+ addable?: boolean;
895
+ addText?: string;
896
+ refreshable?: boolean;
897
+ iconField?: string;
898
+ iconConfig?: IconConfig;
899
+ statusConfigs?: StatusConfig[];
900
+ actions?: ActionConfig<T>[];
901
+ defaultExpandAll?: boolean;
902
+ defaultExpandedKeys?: TreeKey[];
903
+ defaultSelectedKeys?: TreeKey[];
904
+ defaultCheckedKeys?: TreeKey[];
905
+ expandedKeys?: TreeKey[];
906
+ selectedKeys?: TreeKey[];
907
+ checkedKeys?: TreeKey[];
908
+ }
909
+ interface TreeExpose<T extends object = TreeNodeData> {
910
+ expandAll: () => void;
911
+ collapseAll: () => void;
912
+ selectNode: (key: TreeKey) => void;
913
+ clearSelection: () => void;
914
+ setCheckedKeys: (keys: TreeKey[]) => void;
915
+ clearChecked: () => void;
916
+ getSelectedNode: () => T | null;
917
+ getCheckedData: () => {
918
+ keys: TreeKey[];
919
+ options: Array<T | null>;
920
+ };
921
+ getIndeterminateData: () => {
922
+ keys: TreeKey[];
923
+ options: Array<T | null>;
924
+ };
925
+ scrollTo: TreeInst['scrollTo'];
926
+ /** Vue 公开实例会解包顶层 Ref;这些属性直接读取数组。 */
927
+ expandedKeys: TreeKey[];
928
+ selectedKeys: TreeKey[];
929
+ checkedKeys: TreeKey[];
930
+ }
931
+ interface TreeEmits<T extends object = TreeNodeData> {
932
+ 'update:searchPattern': [pattern: string];
933
+ 'update:expandedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
934
+ 'update:selectedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
935
+ 'update:checkedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
936
+ 'node-select': [node: T | null, selectedKeys: TreeKey[]];
937
+ 'node-action': [action: string, node: T];
938
+ 'node-drop': [info: DropInfo<T>];
939
+ 'load-error': [error: unknown, node: T];
940
+ add: [parentNode?: T];
941
+ refresh: [];
942
+ }
943
+ interface TreeSlots<T extends object = TreeOption$1> {
944
+ 'toolbar-actions'?: () => VNodeChild;
945
+ label?: (context: TreeRenderContext<T>) => VNodeChild;
946
+ prefix?: (context: TreeRenderContext<T>) => VNodeChild;
947
+ suffix?: (context: TreeRenderContext<T>) => VNodeChild;
948
+ empty?: () => VNodeChild;
949
+ }
950
+ //#endregion
951
+ //#region src/components/C_Tree/index.vue.d.ts
952
+ declare const __VLS_export$1: <T extends object = TreeNodeData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$1<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
953
+ props: vue.PublicProps & __VLS_PrettifyLocal$1<TreeProps$1<T> & {
954
+ onRefresh?: (() => any) | undefined;
955
+ onAdd?: ((parentNode?: T | undefined) => any) | undefined;
956
+ "onLoad-error"?: ((error: unknown, node: T) => any) | undefined;
957
+ "onUpdate:expandedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
958
+ "onNode-drop"?: ((info: DropInfo<T>) => any) | undefined;
959
+ "onUpdate:searchPattern"?: ((pattern: string) => any) | undefined;
960
+ "onUpdate:selectedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
961
+ "onUpdate:checkedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
962
+ "onNode-select"?: ((node: T | null, selectedKeys: TreeKey[]) => any) | undefined;
963
+ "onNode-action"?: ((action: string, node: T) => any) | undefined;
964
+ }> & (typeof globalThis extends {
965
+ __VLS_PROPS_FALLBACK: infer P;
966
+ } ? P : {});
967
+ expose: (exposed: vue.ShallowUnwrapRef<Omit<TreeExpose<T>, "selectedKeys" | "expandedKeys" | "checkedKeys"> & {
968
+ expandedKeys: vue.Ref<TreeKey[]>;
969
+ selectedKeys: vue.Ref<TreeKey[]>;
970
+ checkedKeys: vue.Ref<TreeKey[]>;
971
+ }>) => void;
972
+ attrs: any;
973
+ slots: TreeSlots<T>;
974
+ emit: ((evt: "refresh") => void) & ((evt: "add", parentNode?: T | undefined) => void) & ((evt: "load-error", error: unknown, node: T) => void) & ((evt: "update:expandedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "node-drop", info: DropInfo<T>) => void) & ((evt: "update:searchPattern", pattern: string) => void) & ((evt: "update:selectedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "update:checkedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "node-select", node: T | null, selectedKeys: TreeKey[]) => void) & ((evt: "node-action", action: string, node: T) => void);
975
+ }>) => vue.VNode & {
976
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
977
+ };
978
+ declare const _default$1: typeof __VLS_export$1;
979
+ type __VLS_PrettifyLocal$1<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
980
+ //#endregion
981
+ //#region src/components/C_Tree/data.d.ts
982
+ declare const presetConfigs: Record<TreeMode, Partial<Omit<TreeProps$1, 'data' | 'treeProps' | 'actions'>> & {
983
+ actions?: Omit<ActionConfig, 'show'>[];
984
+ }>;
985
+ //#endregion
986
+ //#region src/components/C_Tree/composables/useTreeOperations.d.ts
987
+ type EmitFn$1<T extends object> = <E extends keyof TreeEmits<T>>(event: E, ...args: TreeEmits<T>[E]) => void;
988
+ /** State coordination only; checking, filtering, keyboard and loading stay native. */
989
+ declare function useTreeOperations<T extends object = TreeNodeData>(props: TreeProps$1<T>, emit: EmitFn$1<T>, slots?: TreeSlots<T>): {
990
+ internalSearchPattern: Ref<string, string>;
991
+ expandedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
992
+ selectedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
993
+ checkedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
994
+ isAllExpanded: vue.ComputedRef<boolean>;
995
+ treeData: vue.ComputedRef<readonly T[]>;
996
+ currentSearchPattern: vue.WritableComputedRef<string, string>;
997
+ renderPrefix: (info: TreeRenderContext<T>) => any;
998
+ renderLabel: (info: TreeRenderContext<T>) => string | number | boolean | void | vue.VNode<vue.RendererNode, vue.RendererElement, {
999
+ [key: string]: any;
1000
+ }> | vue.VNodeArrayChildren | null;
1001
+ renderSuffix: (info: TreeRenderContext<T>) => any;
1002
+ treeBindings: vue.ComputedRef<TreeProps>;
1003
+ treeRef: vue.ShallowRef<TreeInst | undefined, TreeInst | undefined>;
1004
+ density: vue.ComputedRef<ResolvedComponentDensity>;
1005
+ toggleExpandAll: () => void;
1006
+ handleExpandedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
1007
+ handleSelectedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
1008
+ handleCheckedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
1009
+ handleDrop: (info: DropInfo<T>) => void;
1010
+ handleAdd: () => void;
1011
+ handleRefresh: () => void;
1012
+ expose: Omit<TreeExpose<T>, "selectedKeys" | "expandedKeys" | "checkedKeys"> & {
1013
+ expandedKeys: Ref<TreeKey[]>;
1014
+ selectedKeys: Ref<TreeKey[]>;
1015
+ checkedKeys: Ref<TreeKey[]>;
1016
+ };
1017
+ };
1018
+ //#endregion
1019
+ //#region src/components/C_FormModal/types.d.ts
1020
+ type FormModalMode = 'create' | 'edit';
1021
+ /**
1022
+ * Structural editor contract. It intentionally does not depend on request-core,
1023
+ * so any headless CRUD implementation can drive the modal.
1024
+ */
1025
+ interface FormModalEditor<T extends object = FormRecord> {
1026
+ visible: Ref<boolean>;
1027
+ mode: Ref<FormModalMode>;
1028
+ model: Ref<T | null>;
1029
+ title: Ref<string>;
1030
+ loading: Ref<boolean> | ComputedRef<boolean>;
1031
+ setModel(model: T): void;
1032
+ close(): void;
1033
+ submit(model?: T): Promise<boolean>;
1034
+ }
1035
+ interface FormModalProps<T extends object = FormRecord> {
1036
+ editor: FormModalEditor<T>;
1037
+ options: FormOption<T>[];
1038
+ config?: FormConfig<T>;
1039
+ width?: number | string;
1040
+ createText?: string;
1041
+ saveText?: string;
1042
+ cancelText?: string;
1043
+ closable?: boolean;
1044
+ maskClosable?: boolean;
1045
+ closeOnEsc?: boolean;
1046
+ }
1047
+ interface FormModalEmits<T extends object = FormRecord> {
1048
+ submit: [payload: SubmitEventPayload<T>, saved: boolean];
1049
+ close: [];
1050
+ }
1051
+ //#endregion
1052
+ //#region src/components/C_FormModal/index.vue.d.ts
1053
+ declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
1054
+ props: vue.PublicProps & __VLS_PrettifyLocal<FormModalProps<T> & {
1055
+ onSubmit?: ((payload: SubmitEventPayload<T>, saved: boolean) => any) | undefined;
1056
+ onClose?: (() => any) | undefined;
1057
+ }> & (typeof globalThis extends {
1058
+ __VLS_PROPS_FALLBACK: infer P;
1059
+ } ? P : {});
1060
+ expose: (exposed: {}) => void;
1061
+ attrs: any;
1062
+ slots: {
1063
+ [x: string]: ((props: any) => any) | undefined;
1064
+ };
1065
+ emit: ((evt: "submit", payload: SubmitEventPayload<T>, saved: boolean) => void) & ((evt: "close") => void);
1066
+ }>) => vue.VNode & {
1067
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
1068
+ };
1069
+ declare const _default: typeof __VLS_export;
1070
+ type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
1071
+ //#endregion
1072
+ //#region src/utils/storage.d.ts
1073
+ /** SSR-safe localStorage helpers. Storage failures never break component state. */
1074
+ /** Store a value. Returns false when storage is unavailable or full. */
1075
+ declare function setItem<T>(key: string, value: T): boolean;
1076
+ /** Read and safely deserialize a value. */
1077
+ declare function getItem<T = unknown>(key: string): T | null;
1078
+ /** Remove one value. Returns whether the storage operation was available. */
1079
+ declare function removeItem(key: string): boolean;
1080
+ /**
1081
+ * Clear localStorage for backward compatibility.
1082
+ * Prefer `removeItem` in components so unrelated application data is preserved.
1083
+ */
1084
+ declare function removeAllItem(): boolean;
1085
+ //#endregion
722
1086
  //#region src/components/C_Form/composables/useFormState.d.ts
723
1087
  type FormEmit = {
724
1088
  (event: 'update:modelValue', model: FormModel): void;
@@ -733,7 +1097,8 @@ declare function useFormState(options: ComputedRef<FormOption[]>, config: Comput
733
1097
  visibleOptions: ComputedRef<FormOption[]>;
734
1098
  initialize: () => void;
735
1099
  handleFieldChange: (field: string) => void;
736
- setFormItemRef: (field: string, instance: FormItemInst | null) => void;
1100
+ setFormItemRef: (field: string, instance: FormItemInst | null) => void; /** 复用 Naive 表单项的实例引用;不把 DOM 查找扩散到 document。 */
1101
+ getFormItemElement: (field: string) => HTMLElement | null;
737
1102
  validate: () => Promise<void>;
738
1103
  validateField: (field: string | string[]) => Promise<void>;
739
1104
  validateStep: (step: number | string) => Promise<boolean>;
@@ -758,6 +1123,8 @@ declare function useFormState(options: ComputedRef<FormOption[]>, config: Comput
758
1123
  asyncOptionsCache: Ref<Record<string, OptionItem[]>, Record<string, OptionItem[]>>;
759
1124
  asyncLoadingMap: Ref<Record<string, boolean>, Record<string, boolean>>;
760
1125
  asyncErrorMap: Ref<Record<string, unknown>, Record<string, unknown>>;
1126
+ getDictionaryOptions: (key: string) => readonly DictionaryOption[];
1127
+ isDictionaryLoading: (key: string) => boolean;
761
1128
  reloadOptions: (field?: string) => Promise<void>;
762
1129
  };
763
1130
  //#endregion
@@ -817,4 +1184,4 @@ type DynamicFormStateType = DynamicFormController;
817
1184
  */
818
1185
  declare const DYNAMIC_FORM_STATE_KEY: unique symbol;
819
1186
  //#endregion
820
- export { FormStepActionsSlotProps as $, ResolvedFormConfig as A, DynamicFormConfig as B, unregisterRenderer as C, FormConfig as D, FORM_GLOBAL_CONFIG_KEY as E, AsyncOptionsContext as F, FormActionSlotProps as G, DynamicFormState as H, CardLayoutConfig as I, FormMode as J, FormErrorContext as K, ComponentType as L, resolveFormConfig as M, shouldShowActions as N, LAYOUTS_WITH_OWN_CONTROLS as O, useFormGlobalConfig as P, FormSlots as Q, CustomLayoutConfig as R, registerRenderer as S, FORM_DEFAULTS as T, FieldPath as U, DynamicFormController as V, FieldPathValue as W, FormOption as X, FormModel as Y, FormRecord as Z, FormRendererContext as _, UseFormDirtyReturn as a, LayoutConfig as at, UseFormRendererOptions as b, UseCFormOptions as c, OptionItem as ct, defineFormOptions as d, TabsLayoutConfig as dt, FormSubmitContext as et, useCForm as f, FormValidationRule as ft, FormRenderer as g, SPEC_RULES as gt, FORM_RENDERER_REGISTRY_KEY as h, RuleSpec$1 as ht, useDynamicFormState as i, LabelPlacement as it, mergeFormConfig as j, LayoutCallbacks as k, UseCFormReturn as l, StepsLayoutConfig as lt, ComponentMap as m, PRESET_RULES as mt, DynamicFormStateType as n, GridLayoutConfig as nt, useFormDirty as o, LayoutType as ot, _default as p, NAIVE_COMBOS as pt, FormInstance as q, FIELD_TYPE_OPTIONS as r, InlineLayoutConfig as rt, useFormState as s, MaybePromise as st, DYNAMIC_FORM_STATE_KEY as t, FormTabActionsSlotProps as tt, defineFormConfig as u, SubmitEventPayload as ut, FormRendererRegistry as v, useFormRenderer as w, createFormRendererRegistry as x, RendererProps as y, DynamicFieldConfig as z };
1187
+ export { HighlightAPI as $, TreeNativeProps as A, useTableQuery as B, IconConfig as C, TreeExpose as D, TreeEmits as E, TreeSlots as F, useTableExpand as G, useCellEdit as H, TreeUpdateMeta as I, useTableColumns as J, useTableManager as K, TableQueryContext as L, TreeOption$1 as M, TreeProps$1 as N, TreeKey as O, TreeRenderContext as P, _default$2 as Q, TableQueryResult as R, DropInfo as S, StatusType as T, usePagination as U, useModalEdit as V, useTableActions as W, defineTableConfig as X, defineTableColumns as Y, validateTableRowKeys as Z, useTreeOperations as _, createFormRendererRegistry as _t, UseFormDirtyReturn as a, UseCFormReturn as at, ActionConfig as b, useFormRenderer as bt, getItem as c, useCForm as ct, setItem as d, FORM_RENDERER_REGISTRY_KEY as dt, HighlightPluginOptions as et, _default as f, FormRenderer as ft, FormModalProps as g, UseFormRendererOptions as gt, FormModalMode as h, RendererProps as ht, useDynamicFormState as i, UseCFormOptions as it, TreeNodeData as j, TreeMode as k, removeAllItem as l, _default$3 as lt, FormModalEmits as m, FormRendererRegistry as mt, DynamicFormStateType as n, setupHighlight as nt, useFormDirty as o, defineFormConfig as ot, FormModalEditor as p, FormRendererContext as pt, useRowEdit as q, FIELD_TYPE_OPTIONS as r, useHighlight as rt, useFormState as s, defineFormOptions as st, DYNAMIC_FORM_STATE_KEY as t, createHighlight as tt, removeItem as u, ComponentMap as ut, presetConfigs as v, registerRenderer as vt, StatusConfig as w, ButtonType as x, _default$1 as y, unregisterRenderer as yt, UseTableQueryOptions as z };