@robot-admin/naive-ui-components 0.14.2 → 0.15.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 (255) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +130 -721
  3. package/README_EN.md +137 -658
  4. package/dist/C_ActionBar.css +57 -58
  5. package/dist/C_ActionBar2.cjs +1 -1
  6. package/dist/C_ActionBar2.js +1 -1
  7. package/dist/C_AntV.css +215 -222
  8. package/dist/C_AntV2.cjs +2 -2
  9. package/dist/C_AntV2.js +2 -2
  10. package/dist/C_AudioPlayer.css +11 -12
  11. package/dist/C_AvatarGroup.css +5 -6
  12. package/dist/C_Barcode.css +1 -1
  13. package/dist/C_Breadcrumb.css +15 -17
  14. package/dist/C_Breadcrumb2.cjs +1 -1
  15. package/dist/C_Breadcrumb2.js +1 -1
  16. package/dist/C_Captcha.css +45 -47
  17. package/dist/C_Captcha2.cjs +1 -1
  18. package/dist/C_Captcha2.js +1 -1
  19. package/dist/C_Cascade.css +2 -2
  20. package/dist/C_Chat.css +8 -8
  21. package/dist/C_City.css +6 -7
  22. package/dist/C_Code.css +14 -15
  23. package/dist/C_CollapsePanel.css +12 -13
  24. package/dist/C_ContextMenu.css +31 -31
  25. package/dist/C_Cron.css +272 -275
  26. package/dist/C_Date.css +1 -1
  27. package/dist/C_Draggable.css +10 -11
  28. package/dist/C_Editor.css +2 -2
  29. package/dist/C_FilePreview.css +193 -193
  30. package/dist/C_Form.base.css +607 -601
  31. package/dist/C_Form.cjs +1 -1
  32. package/dist/C_Form.css +609 -603
  33. package/dist/C_Form.d.cts +2 -2
  34. package/dist/C_Form.d.ts +2 -2
  35. package/dist/C_Form.js +1 -1
  36. package/dist/C_FormModal.cjs +1 -1
  37. package/dist/C_FormModal.css +14 -20
  38. package/dist/C_FormModal.js +1 -1
  39. package/dist/C_FormModal2.cjs +1 -1
  40. package/dist/C_FormModal2.js +1 -1
  41. package/dist/C_FormSearch.css +53 -55
  42. package/dist/C_FormSearch2.cjs +1 -1
  43. package/dist/C_FormSearch2.js +1 -1
  44. package/dist/C_FormulaEditor.css +314 -315
  45. package/dist/C_FullCalendar.css +14 -16
  46. package/dist/C_FullCalendar2.cjs +1 -1
  47. package/dist/C_FullCalendar2.js +1 -1
  48. package/dist/C_GlobalSearch.css +2 -2
  49. package/dist/C_Guide.css +14 -15
  50. package/dist/C_Icon.css +7 -8
  51. package/dist/C_ImageCropper.css +69 -69
  52. package/dist/C_Language.css +8 -8
  53. package/dist/C_Loading.css +20 -22
  54. package/dist/C_Loading2.cjs +1 -1
  55. package/dist/C_Loading2.js +1 -1
  56. package/dist/C_Login.css +130 -135
  57. package/dist/C_Login2.cjs +1 -1
  58. package/dist/C_Login2.js +1 -1
  59. package/dist/C_Map.css +22 -23
  60. package/dist/C_Markdown.css +2 -2
  61. package/dist/C_Menu.css +2 -5
  62. package/dist/C_Menu2.cjs +1 -1
  63. package/dist/C_Menu2.js +1 -1
  64. package/dist/C_NotificationCenter.css +300 -301
  65. package/dist/C_OrgChart.css +3 -3
  66. package/dist/C_PageLoading.css +35 -39
  67. package/dist/C_QRCode.css +5 -6
  68. package/dist/C_Signature.css +5 -6
  69. package/dist/C_Skeleton.css +6 -7
  70. package/dist/C_SplitPane.css +2 -2
  71. package/dist/C_Steps.css +2 -2
  72. package/dist/C_Table.base.css +1097 -870
  73. package/dist/C_Table.cjs +1 -1
  74. package/dist/C_Table.css +1101 -874
  75. package/dist/C_Table.d.cts +1 -1
  76. package/dist/C_Table.d.ts +1 -1
  77. package/dist/C_Table.js +1 -1
  78. package/dist/C_Tabs.css +2 -2
  79. package/dist/C_TagsView.css +72 -76
  80. package/dist/C_TagsView2.cjs +1 -1
  81. package/dist/C_TagsView2.js +1 -1
  82. package/dist/C_Theme.css +7 -8
  83. package/dist/C_Time.css +1 -1
  84. package/dist/C_Timeline.css +8 -8
  85. package/dist/C_Transfer.css +10 -11
  86. package/dist/C_Tree.css +16 -17
  87. package/dist/C_Upload.css +147 -148
  88. package/dist/C_VideoPlayer.css +280 -281
  89. package/dist/C_VtableGantt.css +2 -2
  90. package/dist/C_WaterFall.css +17 -18
  91. package/dist/C_WorkFlow.css +453 -457
  92. package/dist/C_WorkFlow2.cjs +1 -1
  93. package/dist/C_WorkFlow2.js +1 -1
  94. package/dist/Card.cjs +1 -0
  95. package/dist/Card.js +1 -0
  96. package/dist/Custom.cjs +1 -0
  97. package/dist/Custom.js +1 -0
  98. package/dist/Dynamic.cjs +1 -0
  99. package/dist/Dynamic.js +1 -0
  100. package/dist/Steps.cjs +1 -0
  101. package/dist/Steps.js +1 -0
  102. package/dist/Tabs.cjs +1 -0
  103. package/dist/Tabs.js +1 -0
  104. package/dist/cascader.cjs +1 -0
  105. package/dist/cascader.js +1 -0
  106. package/dist/color-picker.cjs +1 -0
  107. package/dist/color-picker.js +1 -0
  108. package/dist/constants.d.cts +1 -1
  109. package/dist/constants.d.ts +1 -1
  110. package/dist/constants3.d.cts +5 -5
  111. package/dist/constants3.d.ts +5 -5
  112. package/dist/constants4.d.cts +4 -4
  113. package/dist/constants4.d.ts +4 -4
  114. package/dist/constants5.d.cts +2 -2
  115. package/dist/constants5.d.ts +2 -2
  116. package/dist/context.cjs +1 -0
  117. package/dist/context.js +1 -0
  118. package/dist/contracts.d.cts +24 -0
  119. package/dist/contracts.d.ts +24 -0
  120. package/dist/createPageLoading.cjs +1 -1
  121. package/dist/createPageLoading.js +1 -1
  122. package/dist/data.cjs +1 -1
  123. package/dist/data.d.cts +9 -9
  124. package/dist/data.d.ts +9 -9
  125. package/dist/data.js +1 -1
  126. package/dist/date-picker.cjs +1 -0
  127. package/dist/date-picker.js +1 -0
  128. package/dist/feedback.cjs +1 -0
  129. package/dist/feedback.js +1 -0
  130. package/dist/helpers.cjs +1 -1
  131. package/dist/helpers.js +1 -1
  132. package/dist/index.cjs +1 -1
  133. package/dist/index.d.cts +6 -4
  134. package/dist/index.d.ts +6 -4
  135. package/dist/index.js +1 -1
  136. package/dist/index.vue.d.cts +4 -4
  137. package/dist/index.vue.d.ts +4 -4
  138. package/dist/index10.vue.d.cts +3 -3
  139. package/dist/index11.vue.d.ts +2 -2
  140. package/dist/index12.vue.d.cts +2 -2
  141. package/dist/index12.vue.d.ts +1 -1
  142. package/dist/index13.vue.d.cts +1 -1
  143. package/dist/index13.vue.d.ts +3 -3
  144. package/dist/index14.vue.d.cts +3 -3
  145. package/dist/index14.vue.d.ts +7 -7
  146. package/dist/index15.vue.d.cts +7 -7
  147. package/dist/index16.vue.d.ts +1 -1
  148. package/dist/index17.vue.d.cts +1 -1
  149. package/dist/index17.vue.d.ts +1 -1
  150. package/dist/index18.vue.d.cts +1 -1
  151. package/dist/index18.vue.d.ts +1 -1
  152. package/dist/index19.vue.d.cts +1 -1
  153. package/dist/index19.vue.d.ts +2 -9
  154. package/dist/index2.vue.d.cts +2 -2
  155. package/dist/index2.vue.d.ts +2 -2
  156. package/dist/index20.vue.d.cts +1 -1
  157. package/dist/index20.vue.d.ts +1 -1
  158. package/dist/index21.vue.d.cts +1 -1
  159. package/dist/index21.vue.d.ts +1 -1
  160. package/dist/index22.vue.d.cts +2 -2
  161. package/dist/index22.vue.d.ts +2 -2
  162. package/dist/index23.vue.d.cts +1 -1
  163. package/dist/index23.vue.d.ts +1 -1
  164. package/dist/index25.vue.d.cts +4 -4
  165. package/dist/index25.vue.d.ts +4 -4
  166. package/dist/index26.vue.d.cts +1 -1
  167. package/dist/index26.vue.d.ts +1 -1
  168. package/dist/index27.vue.d.cts +4 -4
  169. package/dist/index27.vue.d.ts +4 -4
  170. package/dist/index28.vue.d.cts +1 -1
  171. package/dist/index28.vue.d.ts +1 -1
  172. package/dist/index3.vue.d.cts +4 -4
  173. package/dist/index3.vue.d.ts +4 -4
  174. package/dist/index4.vue.d.cts +2 -9
  175. package/dist/index6.vue.d.ts +3 -3
  176. package/dist/index7.vue.d.cts +3 -3
  177. package/dist/index8.vue.d.ts +2 -2
  178. package/dist/index9.vue.d.cts +2 -2
  179. package/dist/index9.vue.d.ts +3 -3
  180. package/dist/mapUtils.d.cts +2 -2
  181. package/dist/mapUtils.d.ts +2 -2
  182. package/dist/presets.d.cts +8 -2
  183. package/dist/presets.d.ts +8 -2
  184. package/dist/rate.cjs +1 -0
  185. package/dist/rate.js +1 -0
  186. package/dist/slider.cjs +1 -0
  187. package/dist/slider.js +1 -0
  188. package/dist/style.css +10898 -10915
  189. package/dist/time-picker.cjs +1 -0
  190. package/dist/time-picker.js +1 -0
  191. package/dist/upload.cjs +1 -0
  192. package/dist/upload.js +1 -0
  193. package/dist/useActionTask.cjs +1 -0
  194. package/dist/useActionTask.js +1 -0
  195. package/dist/useCalendarEvents.d.cts +1 -1
  196. package/dist/useCalendarEvents.d.ts +1 -1
  197. package/dist/useCollapsePanel.d.cts +4 -4
  198. package/dist/useCollapsePanel.d.ts +4 -4
  199. package/dist/useComponentLocale.cjs +1 -0
  200. package/dist/useComponentLocale.js +1 -0
  201. package/dist/useCropperCore.d.cts +6 -6
  202. package/dist/useCropperCore.d.ts +6 -6
  203. package/dist/useDraggableLayout.d.cts +1 -1
  204. package/dist/useDraggableLayout.d.ts +1 -1
  205. package/dist/useDynamicFormState.cjs +1 -0
  206. package/dist/useDynamicFormState.d.cts +64 -40
  207. package/dist/useDynamicFormState.d.ts +64 -40
  208. package/dist/useDynamicFormState.js +1 -0
  209. package/dist/useEdgeInteraction.d.cts +3 -3
  210. package/dist/useEdgeInteraction.d.ts +3 -3
  211. package/dist/useGlobalSearch.d.cts +1 -1
  212. package/dist/useGlobalSearch.d.ts +1 -1
  213. package/dist/useQRCode.d.cts +2 -2
  214. package/dist/useQRCode.d.ts +2 -2
  215. package/dist/useSearchState.d.cts +15 -725
  216. package/dist/useSearchState.d.ts +15 -834
  217. package/dist/useSignatureHistory.d.cts +4 -4
  218. package/dist/useSignatureHistory.d.ts +4 -4
  219. package/dist/useSplitResize.d.cts +3 -3
  220. package/dist/useSplitResize.d.ts +3 -3
  221. package/dist/useTableQuery.cjs +3 -3
  222. package/dist/useTableQuery.d.cts +73 -34
  223. package/dist/useTableQuery.d.ts +73 -34
  224. package/dist/useTableQuery.js +3 -3
  225. package/dist/useTimeSelection.d.cts +1 -1
  226. package/dist/useTimeSelection.d.ts +1 -1
  227. package/dist/useTreeOperations.d.cts +5 -5
  228. package/dist/useTreeOperations.d.ts +5 -5
  229. package/dist/useWorkflowValidation.d.cts +3 -3
  230. package/dist/useWorkflowValidation.d.ts +3 -3
  231. package/dist/verification.d.cts +4 -4
  232. package/dist/verification.d.ts +4 -4
  233. package/docs/architecture.en.md +83 -0
  234. package/docs/architecture.md +83 -0
  235. package/docs/assets/README.md +47 -0
  236. package/docs/assets/naive-ui-components-banner.png +0 -0
  237. package/docs/assets/naive-ui-components-banner.svg +69 -0
  238. package/docs/assets/naive-ui-components-logo.png +0 -0
  239. package/docs/assets/naive-ui-components-logo.svg +22 -0
  240. package/docs/components.en.md +118 -0
  241. package/docs/components.md +118 -0
  242. package/docs/engineering.en.md +132 -0
  243. package/docs/engineering.md +133 -0
  244. package/docs/guides/usage.en.md +638 -0
  245. package/docs/guides/usage.md +699 -0
  246. package/docs/performance-0.15.0.md +20 -0
  247. package/docs/security-scan-2026-10-06.md +11 -0
  248. package/docs/security-scan-2026-10-18.md +16 -0
  249. package/package.json +35 -12
  250. package/dist/C_Form2.cjs +0 -1
  251. package/dist/C_Form2.js +0 -1
  252. package/dist/config.cjs +0 -1
  253. package/dist/config.d.cts +0 -33
  254. package/dist/config.d.ts +0 -33
  255. package/dist/config.js +0 -1
@@ -0,0 +1,20 @@
1
+ [← 项目首页](../README.md) · [开发与构建](./engineering.md)
2
+
3
+ # 常用组件消费体积 · 0.15.0
4
+
5
+ 同一台机器、同一依赖锁文件下,对本轮收敛前的 `df0f8d4` 与收敛后的构建产物分别创建最小 Vite 应用。每个应用只导入一个组件子路径及对应样式,包含 Vue 与 Naive UI,沿产物的静态导入图累计 JS gzip,动态块不计入首屏。
6
+
7
+ | 独立消费场景 | 收敛前 | 收敛后 | 变化 |
8
+ | ----------------------------- | --------: | --------: | -------: |
9
+ | C_Form,单个 input + base.css | 269.0 KiB | 171.9 KiB | −36.1% |
10
+ | C_Table,单行单列 + base.css | 336.2 KiB | 220.0 KiB | −34.6% |
11
+ | C_FormSearch,单个 input | 157.1 KiB | 157.7 KiB | +0.6 KiB |
12
+ | C_ActionBar,单个保存按钮 | 85.6 KiB | 86.0 KiB | +0.4 KiB |
13
+
14
+ 日期、时间、滑块、评分、级联、颜色与上传字段通过只使用 Naive 公开导出的独立模块加载;高级表单布局、内置编辑器和表格弹窗表单也延迟加载。基础表单与展示表格的首屏模块图没有这些低频控件,以及编辑器、Excel、截图、打印和 Word 解析依赖。使用相应功能时仍会加载其动态块;异步请求互斥、快照与生命周期保护为查询及动作入口增加了少量代码。
15
+
16
+ `bun run check:consumer-size` 在每次完整验证和发布前复建这四个场景,预算分别为 200、250、165、95 KiB,同时检查低频控件和重型依赖没有重新进入首屏。CSS 另由 `check:size` 检查;本轮还补齐了表格独立样式中的 ActionBar 依赖,保证使用侧无需全量样式兜底。
17
+
18
+ 测量环境:Node.js 24.19.0、Bun 1.4.2、Vite 8.2.2、Vue 3.5.42、Naive UI 2.45.3。仓库与 CI 的最低环境约定仍见 [开发文档](./engineering.md)。
19
+
20
+ 这些数据是独立构建的传输体积,不能相加估算同一应用的大小,也不代表真实浏览器的加载时延或交互帧率。组件行为通过逻辑测试、Happy DOM 真实挂载、SSR 与打包消费者检查验证;本记录不声称已完成全浏览器或最低 peer 的完整版本矩阵。
@@ -0,0 +1,11 @@
1
+ [← 项目首页](../README.md)
2
+
3
+ # 安全扫描记录 · 2026-10-06
4
+
5
+ > 本文保留当次维护记录,不代表当前依赖、远端 CI 或最新扫描状态。
6
+
7
+ `0.13.5` 的 npm 产物与已验证产物内容一致。随后安全扫描更新了开发工具和解析依赖的锁文件,并将仓库 overrides 中的 `@xmldom/xmldom`、`fast-uri` 固定到 `0.8.15`、`3.1.8`;这部分仓库维护不覆盖已经发布的 npm 产物。
8
+
9
+ 当次扫描仍报告 [braces](https://github.com/advisories/GHSA-vfj7-8cjw-p6xm) 和 [sprintf-js](https://github.com/advisories/GHSA-hp3w-g68c-fv3c) 两项上游尚无发布修复版本的告警,当次 `bun run check:audit` 非零退出。保留 CI 安全门禁和真实扫描结果;待上游发布修复后更新锁文件并复验。
10
+
11
+ 当次本机完整 `verify` 通过。同步后的 [GitHub CI](https://github.com/ChenyCHENYU/naive-ui-components/actions/runs/37463121552) 因账号 billing issue 未启动,不能将其写成远端验证通过;账号恢复后需重新运行。
@@ -0,0 +1,16 @@
1
+ [← 项目首页](../README.md) · [安全策略](../SECURITY.md)
2
+
3
+ # 依赖审计记录 · 2026-10-18
4
+
5
+ 本轮常用组件收敛没有升级运行依赖。冻结锁文件安装完成后,`bun run check:audit` 仍以状态 1 退出,报告此前已记录的两项告警:
6
+
7
+ | 依赖 | 级别 | 已核实的路径与公告 |
8
+ | ------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
9
+ | `braces@3.0.3` | high | lint-staged、Changesets、Sass 等开发工具的 micromatch 依赖;[深嵌套模式导致栈耗尽](https://github.com/advisories/GHSA-vfj7-8cjw-p6xm) |
10
+ | `sprintf-js@1.0.3` | moderate | mammoth 的 argparse 1.x,以及 Changesets 的 js-yaml 3.x / argparse 1.x;[无界精度参数导致拒绝服务](https://github.com/advisories/GHSA-hp3w-g68c-fv3c) |
11
+
12
+ 核查时官方尚未发布修复这两项公告的版本。直接升级 mammoth 也不能消除它的 argparse 1.x 依赖;未采用跨主版本强制 override、伪造版本或删除审计门禁。
13
+
14
+ 常用组件首屏消费构建没有包含 mammoth;检查当前 mammoth 文档转换入口,也未发现它加载 CLI 使用的 argparse。这些结果有助于界定使用路径,但不能证明整个依赖树不存在风险,更不代表审计通过。处理不可信文档、命令行输入和构建模式时,仍需遵守宿主应用的资源限制及安全边界。
15
+
16
+ `check:audit` 与功能性的 `verify` 是独立检查。仓库 CI 继续在 `verify` 前执行审计;现有告警会使审计步骤失败,本文不将远端 CI 标记为通过。待上游发布兼容修复版后,应更新锁文件并重新运行审计、功能验证和发布消费者检查。
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.14.2",
6
+ "version": "0.15.0",
7
7
  "description": "基于 Naive UI 的 Vue 3 组件库",
8
8
  "packageManager": "bun@1.3.14",
9
9
  "engines": {
@@ -16,20 +16,35 @@
16
16
  "types": "dist/index.d.ts",
17
17
  "exports": {
18
18
  ".": {
19
- "types": "./dist/index.d.ts",
20
- "import": "./dist/index.js",
21
- "require": "./dist/index.cjs"
19
+ "import": {
20
+ "types": "./dist/index.d.ts",
21
+ "default": "./dist/index.js"
22
+ },
23
+ "require": {
24
+ "types": "./dist/index.d.cts",
25
+ "default": "./dist/index.cjs"
26
+ }
22
27
  },
23
28
  "./style.css": "./dist/style.css",
24
29
  "./resolver": {
25
- "types": "./dist/resolver.d.ts",
26
- "import": "./dist/resolver.js",
27
- "require": "./dist/resolver.cjs"
30
+ "import": {
31
+ "types": "./dist/resolver.d.ts",
32
+ "default": "./dist/resolver.js"
33
+ },
34
+ "require": {
35
+ "types": "./dist/resolver.d.cts",
36
+ "default": "./dist/resolver.cjs"
37
+ }
28
38
  },
29
39
  "./C_*": {
30
- "types": "./dist/C_*.d.ts",
31
- "import": "./dist/C_*.js",
32
- "require": "./dist/C_*.cjs"
40
+ "import": {
41
+ "types": "./dist/C_*.d.ts",
42
+ "default": "./dist/C_*.js"
43
+ },
44
+ "require": {
45
+ "types": "./dist/C_*.d.cts",
46
+ "default": "./dist/C_*.cjs"
47
+ }
33
48
  },
34
49
  "./C_*/style.css": "./dist/C_*.css",
35
50
  "./C_Form/base.css": "./dist/C_Form.base.css",
@@ -44,6 +59,7 @@
44
59
  ],
45
60
  "files": [
46
61
  "dist",
62
+ "docs",
47
63
  "README.md",
48
64
  "README_EN.md",
49
65
  "CHANGELOG.md",
@@ -79,11 +95,13 @@
79
95
  "check:exports": "node scripts/check-export-conflicts.js",
80
96
  "check:dist": "node scripts/check-dist-entries.js",
81
97
  "check:size": "node scripts/check-size-budget.js",
98
+ "check:consumer-size": "node scripts/check-consumer-size.js",
82
99
  "check:audit": "bun audit",
83
100
  "check:package": "node scripts/check-package-contract.js",
84
101
  "check:quality": "node scripts/check-source-quality.js",
85
102
  "check:consumer-types": "vue-tsc --noEmit -p tests/consumer/tsconfig.json",
86
- "verify": "bun run lint:check && bun run type-check && bun run type-check:vue && bun run test && bun run check:exports && bun run check:package && bun run check:quality && bun run build && bun run check:consumer-types",
103
+ "check:consumer-contracts": "node scripts/check-consumer-contracts.js",
104
+ "verify": "bun run lint:check && bun run type-check && bun run type-check:vue && bun run test && bun run test:components && bun run type-check:components && bun run check:exports && bun run check:package && bun run check:quality && bun run build && bun run check:consumer-size && bun run check:consumer-types && bun run check:consumer-contracts",
87
105
  "prepublishOnly": "bun run verify",
88
106
  "release": "changeset publish",
89
107
  "changeset": "changeset",
@@ -95,7 +113,9 @@
95
113
  "lint:eslint": "eslint . --no-fix",
96
114
  "lint:staged": "lint-staged",
97
115
  "commitlint": "commitlint",
98
- "format": "prettier --write src/"
116
+ "format": "prettier --write src/",
117
+ "test:components": "vitest run --config vitest.config.ts",
118
+ "type-check:components": "vue-tsc --noEmit -p tests/components/tsconfig.json"
99
119
  },
100
120
  "peerDependencies": {
101
121
  "vue": "^3.5.0",
@@ -166,12 +186,14 @@
166
186
  "@vue/eslint-config-prettier": "^10.2.0",
167
187
  "@vue/eslint-config-typescript": "^14.9.0",
168
188
  "@vue/language-core": "^3.3.11",
189
+ "@vue/test-utils": "^2.5.1",
169
190
  "commitizen": "^4.3.2",
170
191
  "cz-customizable": "^7.5.4",
171
192
  "eslint": "^10.9.1",
172
193
  "eslint-plugin-jsdoc": "^62.9.0",
173
194
  "eslint-plugin-oxlint": "^1.80.0",
174
195
  "eslint-plugin-vue": "^10.10.0",
196
+ "happy-dom": "^20.14.5",
175
197
  "husky": "^9.1.7",
176
198
  "lint-staged": "^16.4.0",
177
199
  "naive-ui": "^2.45.3",
@@ -185,6 +207,7 @@
185
207
  "unplugin-vue": "^7.2.0",
186
208
  "unplugin-vue-components": "^31.1.0",
187
209
  "vite": "^8.2.2",
210
+ "vitest": "^4.1.11",
188
211
  "vue": "^3.5.42",
189
212
  "vue-tsc": "^3.3.11"
190
213
  },
package/dist/C_Form2.cjs DELETED
@@ -1 +0,0 @@
1
- require(`./chunk.cjs`);const e=require(`./config.cjs`),t=require(`./C_Icon2.cjs`),n=require(`./export-helper.cjs`),r=require(`./data.cjs`);let i=require(`vue`),a=require(`naive-ui`),o=require(`vue-draggable-plus`),s=require(`@robot-admin/form-validate`);const c=Symbol(`c-form-global-config`);function l(){return(0,i.getCurrentInstance)()?(0,i.inject)(c,{}):{}}function u(e,t){let n=e??{},r=(e,t)=>e||t?{...e,...t}:void 0;return{...t,...n,grid:r(t.grid,n.grid),inline:r(t.inline,n.inline),card:r(t.card,n.card),tabs:r(t.tabs,n.tabs),steps:r(t.steps,n.steps),dynamic:r(t.dynamic,n.dynamic),custom:r(t.custom,n.custom)}}const d={layout:`default`,labelPlacement:`left`,labelWidth:`auto`,size:`medium`,disabled:!1,readonly:!1,showActions:!0,validateOnChange:!1,preserveRemovedFields:!1,submitText:``,resetText:``,submitSuccessText:``,resetSuccessText:``,mode:`create`},f=[`steps`,`custom`];function p(e){return{...d,...e}}function m(e){return!(e.showActions===!1||f.includes(e.layout))}function h(e,t){let n=(0,i.ref)({}),a=(0,i.computed)(()=>o().length>0);function o(){let a=n.value,o=t?(0,i.toValue)(t):void 0,s=new Set(o??[...Object.keys(a),...Object.keys(e)]),c=[];for(let t of s)r.a(r.r(a,t),r.r(e,t))||c.push(t);return c}function s(t){return!r.a(r.r(n.value,t),r.r(e,t))}function c(){n.value=r.t(e)}function l(){return r.t(n.value)}return{isDirty:a,getChangedFields:o,isFieldDirty:s,markAsClean:c,getCleanModel:l}}const g=s.PRESET_RULES,_=s.NAIVE_COMBOS;function v(e=[]){return e.map(e=>{let t=`validate`in e&&typeof e.validate==`function`?(0,s.toNaiveRule)(e):e;return{...t,...Array.isArray(t.trigger)?{trigger:[...t.trigger]}:{}}})}function y(e,t){return v([{...s.BasicRules.required(e,[`input`,`change`,`blur`]),message:t}])[0]}const b={input:``,textarea:``,editor:``,select:null,datePicker:null,daterange:null,timePicker:null,cascader:null,colorPicker:null,checkbox:[],upload:[],radio:``,inputNumber:null,slider:null,rate:null,switch:!1};function x(e){return r.t((e.value===void 0?b[e.type]:e.value)??null)}function S(e){let t=new Set;e.forEach((e,n)=>{if(!e.prop?.trim())throw TypeError(`[C_Form] options[${n}].prop 不能为空`);if(t.has(e.prop))throw TypeError(`[C_Form] 字段 prop 重复: ${e.prop}`);t.add(e.prop)})}function C(t,n,a,o,s){let c=(0,i.reactive)({}),l=(0,i.reactive)({}),u=new Map,d=(0,i.ref)({}),f=(0,i.ref)({}),p=(0,i.ref)({}),m=(0,i.ref)(!1),g=new Map,_=!1,b,C=new Map,w=new Map,T=new Map,E=new Set,D=!1,O=!1,k=0,A=e.r(()=>n.value.feedback),{t:j}=e.i(()=>n.value.locale),{isDirty:M,getChangedFields:ee,isFieldDirty:te,markAsClean:N,getCleanModel:P}=h(c,()=>t.value.map(e=>e.prop));function F(e,t,r){if(!_)try{n.value.onError?n.value.onError(e,{source:t,field:r}):A.error(e instanceof Error?e.message:String(e),e)}catch{}}function I(e,t){if(!(_||!t))try{A[e](t)}catch{}}let L=(0,i.computed)(()=>t.value.filter(e=>{if(e.show===!1)return!1;if(!e.showWhen)return!0;try{return e.showWhen(c)}catch(t){return F(t,`callback`,e.prop),!1}}));function R(){O=!0;let e=++k;(0,i.nextTick)(()=>{e===k&&(O=!1)})}function z(){return r.t(c)}function ne(e){let n=e?r.t(e):{};return t.value.forEach(e=>{r.i(n,e.prop)||r.s(n,e.prop,x(e))}),n}function B(e){try{let t=v(e.rulesWhen?e.rulesWhen(c):e.rules);if(g.delete(e.prop),e.required&&!t.some(e=>e.required)){let n=e.label||e.prop;t.unshift(y(n,j(`form.required`,{label:n})))}if(e.crossFieldValidator){let n=e.crossFieldValidator;t.push({async validator(){let e=await n(c);if(e)throw Error(e)},trigger:[`change`,`blur`]})}if(t.length===0){delete l[e.prop];return}l[e.prop]=t.map(t=>({...t,key:e.prop}))}catch(t){delete l[e.prop],g.set(e.prop,t),F(t,`callback`,e.prop)}}function V(){t.value.forEach(e=>{(e.rulesWhen||e.crossFieldValidator)&&B(e)})}function re(e){E.forEach(t=>{e.has(t)||(u.delete(t),delete l[t],g.delete(t),delete d.value[t],delete f.value[t],delete p.value[t],w.get(t)?.abort(),w.delete(t),C.delete(t),T.delete(t),n.value.preserveRemovedFields||r.n(c,t))})}function H(e=!1){try{S(t.value);let n=new Set(t.value.map(e=>e.prop));re(n),t.value.forEach(e=>{r.i(c,e.prop)||r.s(c,e.prop,x(e)),B(e),e.asyncOptions&&T.get(e.prop)!==e.asyncOptions&&(T.set(e.prop,e.asyncOptions),(0,i.nextTick)(()=>W(e,`initialize`)))}),E=n,e&&(0,i.nextTick)(N)}catch(e){throw F(e,`initialize`),e}}function U(e){R(),r.o(c,ne(e)),V()}function ie(e,t,n){return n.signal.aborted||C.get(e)!==t}async function W(e,t){if(!e.asyncOptions)return;let{prop:n}=e,i=(C.get(n)??0)+1;C.set(n,i),w.get(n)?.abort();let a=new AbortController;w.set(n,a),f.value[n]=!0,delete p.value[n];try{let o=await e.asyncOptions(z(),{field:n,reason:t,signal:a.signal});if(ie(n,i,a))return;if(!Array.isArray(o))throw TypeError(`[C_Form] ${n}.asyncOptions 必须返回数组`);d.value[n]=r.t([...o])}catch(e){if(ie(n,i,a))return;p.value[n]=e,F(e,`async-options`,n)}finally{C.get(n)===i&&(f.value[n]=!1,w.delete(n))}}async function ae(e){let n=t.value.filter(t=>t.asyncOptions&&(!e||t.prop===e));if(e&&n.length===0)throw Error(`[C_Form] 未找到异步选项字段: ${e}`);await Promise.all(n.map(e=>W(e,`manual`)))}function G(){let e=t.value.filter(e=>e.valueWhen);if(e.length!==0){for(let t=0;t<=e.length;t+=1){let t=!1;for(let n of e)try{let e=n.valueWhen?.(c);e!==void 0&&!r.a(r.r(c,n.prop),e)&&(r.s(c,n.prop,r.t(e)),t=!0)}catch(e){F(e,`callback`,n.prop)}if(!t)return}F(Error(`[C_Form] valueWhen 存在循环依赖,已停止继续计算`),`callback`)}}function oe(e){let n=new Set(e);return t.value.filter(e=>!e.asyncOptions||!e.dependsOn?!1:(Array.isArray(e.dependsOn)?e.dependsOn:[e.dependsOn]).some(e=>n.has(e)))}function K(e){G(),V(),oe(e).forEach(e=>{W(e,`dependency`)}),n.value.validateOnChange&&(0,i.nextTick)(()=>{Y([...e]).catch(()=>void 0)})}function q(e){K([e])}function se(e,t){t?u.set(e,t):u.delete(e)}async function J(){if(!a.value)throw Error(`[C_Form] 表单引用不存在`);try{let e=L.value.find(e=>g.has(e.prop));if(e)throw g.get(e.prop);if(await a.value.validate(),_)throw Error(`[C_Form] 表单已卸载`);o(`validate-success`,z())}catch(e){throw _||o(`validate-error`,e),e}}async function Y(e){if(!a.value)throw Error(`[C_Form] 表单引用不存在`);let t=[...new Set(Array.isArray(e)?e:[e])],n=t.find(e=>g.has(e));if(n)throw g.get(n);let r=[],i=t.flatMap(e=>{let t=u.get(e);return t?[t.validate()]:(r.push(e),[])});r.length>0&&i.push(a.value.validate(void 0,e=>r.includes(String(e.key??``))));let o=(await Promise.allSettled(i)).filter(e=>e.status===`rejected`).map(e=>e.reason);if(o.length>0)throw o}function X(e){if(!e){a.value?.restoreValidation();return}(Array.isArray(e)?e:[e]).forEach(e=>u.get(e)?.restoreValidation())}async function Z(e){let n=t.value.filter(e).map(e=>e.prop);if(n.length===0)return!0;try{return await Y(n),!0}catch{return!1}}function ce(e){let t=n.value.steps?.steps?.[e]?.key;return t?Z(e=>e.layout?.step===t):Promise.resolve(!0)}function le(e){return Z(t=>t.layout?.tab===e)}function ue(){return Z(e=>!!e.layout?.dynamic)}function Q(e){return Z(t=>t.layout?.group===e)}function de(e){Object.entries(r.t(e)).forEach(([e,t])=>{r.s(c,e,t)}),K(Object.keys(e))}function $(){r.o(c,P()),X(),V(),I(`info`,n.value.resetSuccessText)}async function fe(e,t,n=!1){r.s(c,e,r.t(t)),q(e),n&&await Y(e)}function pe(e){return r.t(r.r(c,e))}async function me(e,t=!1){de(e),t&&await Y(Object.keys(e))}function he(){return _||m.value||n.value.disabled||n.value.readonly}async function ge(){if(he())return!1;let e=new AbortController;b=e,m.value=!0;try{if(await J(),e.signal.aborted)return!1;let t={model:z(),form:a.value};try{await n.value.onSubmit?.(t,{signal:e.signal})}catch(t){return e.signal.aborted||F(t,`submit`),!1}return e.signal.aborted?!1:(o(`submit`,t),I(`success`,n.value.submitSuccessText),!0)}catch{return!1}finally{b===e&&(b=void 0),m.value=!1}}function _e(){H(!0);let e=s?.value??(n.value.mode===`edit`?n.value.initialValues:void 0);e&&U(e),G(),(0,i.nextTick)(N)}return(0,i.watch)(t,()=>{let e=!D;e&&R(),H(e),D=!0},{deep:!0,immediate:!0}),s&&(0,i.watch)(s,e=>{e!==void 0&&!r.a(c,e)&&U(e)},{deep:!0,immediate:!0}),(0,i.watch)(()=>[n.value.mode,n.value.initialValues],([e,t])=>{s?.value!==void 0||e!==`edit`||!t||(U(t),(0,i.nextTick)(N))},{deep:!0}),(0,i.watch)(c,e=>{O||o(`update:modelValue`,r.t(e))},{deep:!0,flush:`post`}),(0,i.onScopeDispose)(()=>{_=!0,b?.abort(),w.forEach(e=>e.abort()),w.clear(),u.clear()}),{formModel:c,formRules:l,visibleOptions:L,initialize:_e,handleFieldChange:q,setFormItemRef:se,validate:J,validateField:Y,validateStep:ce,validateTab:le,validateDynamicFields:ue,validateCustomGroup:Q,clearValidation:X,getModel:z,setFields:de,resetFields:$,setFieldValue:fe,getFieldValue:pe,setFieldsValue:me,submit:ge,handleSubmit:ge,handleReset:$,isSubmitting:m,isDirty:M,getChangedFields:ee,isFieldDirty:te,markAsClean:N,asyncOptionsCache:d,asyncLoadingMap:f,asyncErrorMap:p,reloadOptions:ae}}function w(e,t,n){return e===void 0?t:typeof e==`function`?e(n):e}function T(e){return{input:t=>(0,i.h)(e.NInput,{...t}),textarea:t=>(0,i.h)(e.NInput,{...t,type:`textarea`}),inputNumber:t=>(0,i.h)(e.NInputNumber,{...t}),switch:t=>(0,i.h)(e.NSwitch,{...t}),slider:t=>(0,i.h)(e.NSlider,{...t}),rate:t=>(0,i.h)(e.NRate,{...t}),datePicker:t=>(0,i.h)(e.NDatePicker,{...t}),daterange:t=>(0,i.h)(e.NDatePicker,{...t,type:`daterange`}),timePicker:t=>(0,i.h)(e.NTimePicker,{...t}),cascader:t=>(0,i.h)(e.NCascader,{...t}),colorPicker:t=>(0,i.h)(e.NColorPicker,{...t}),select:(t,n)=>(0,i.h)(e.NSelect,{...t,options:n.children?.map(e=>({...e}))||[]}),checkbox:(t,n)=>(0,i.h)(e.NCheckboxGroup,{...t},{default:()=>(0,i.h)(e.NSpace,{},{default:()=>n.children?.map(t=>(0,i.h)(e.NCheckbox,{value:t.value,label:t.label,disabled:t.disabled,key:String(t.value)}))||[]})}),radio:(t,n)=>(0,i.h)(e.NRadioGroup,{...t},{default:()=>(0,i.h)(e.NSpace,{},{default:()=>n.children?.map(t=>(0,i.h)(e.NRadio,{value:t.value,disabled:t.disabled,key:String(t.value)},{default:()=>t.label}))||[]})}),upload:(t,n,r,a)=>{let o={...t},{value:s}=o,c=o[`onUpdate:value`];return delete o.value,delete o[`onUpdate:value`],(0,i.h)(e.NUpload,{...o,fileList:Array.isArray(s)?s:[],"onUpdate:fileList":e=>c?.(e)},{trigger:()=>a.slots?.uploadClick?.()||(0,i.h)(e.NButton,{type:`primary`},{default:()=>`选择文件`}),tip:()=>a.slots?.uploadTip?.()||null})},editor:(t,n)=>{let r={...t},{value:a}=r,o=r[`onUpdate:value`];return delete r.value,delete r[`onUpdate:value`],(0,i.h)(e.C_Editor,{...r,editorId:`editor-${n.prop}`,modelValue:typeof a==`string`?a:``,"onUpdate:modelValue":e=>o?.(e)})}}}const E={};function D(e,t){if(!e.trim())throw TypeError(`[C_Form] renderer type 不能为空`);if(typeof t!=`function`)throw TypeError(`[C_Form] renderer ${e} 必须是函数`);return E[e]=t,()=>O(e,t)}function O(e,t){return!E[e]||t&&E[e]!==t?!1:delete E[e]}const k=new Set([`select`,`checkbox`,`radio`,`cascader`]);function A(e){let{formModel:t,visibleOptions:n,config:a,handleFieldChange:o,componentMap:s,instanceSlots:c,asyncOptionsCache:l,asyncLoadingMap:u,renderers:d,setFormItemRef:f,onError:p}=e,m=s,h=T(m),g=e=>d?.value?.[e]??E[e]??h[e],_=e=>{let n={value:r.r(t,e.prop),"onUpdate:value":n=>{r.s(t,e.prop,n),o(e.prop)},disabled:w(e.disabled,a.value.disabled,t),readonly:w(e.readonly,a.value.readonly,t)};return e.type===`textarea`&&(n.type=`textarea`),e.placeholder&&(n.placeholder=e.placeholder),n};function v(e){let t=e.children??[];return Object.prototype.hasOwnProperty.call(l.value,e.prop)?l.value[e.prop]??[]:t}function y(e){return k.has(e.type)?{...e,children:v(e)}:e}function b(e,t){return e.type===`select`&&u.value[e.prop]&&(t.loading=!0),t}let x=e=>{try{let t=y(e),n=g(t.type);return n?n(b(t,(0,i.mergeProps)(t.attrs??{},_(t))),t,a.value,{slots:c,components:m}):(p?.(TypeError(`[C_Form] 未支持的组件类型: ${t.type}`),t.prop),null)}catch(t){return p?.(t,e.prop),null}};function S(e){if(e.label)return e.help?(0,i.h)(`span`,{style:`display:inline-flex;align-items:center;gap:4px`},[e.label,(0,i.h)(m.NTooltip,{trigger:`hover`},{trigger:()=>(0,i.h)(`span`,{style:`cursor:help;opacity:0.5;font-size:14px`,textContent:`ⓘ`}),default:()=>e.help})]):e.label}return{renderFormItem:x,formItems:(0,i.computed)(()=>n.value.map(e=>{let t=!!(e.required||e.rules?.some(e=>e.required)),n=S(e);return(0,i.h)(m.NFormItem,{label:typeof n==`string`?n:void 0,path:e.prop,key:e.prop,required:t,ref:t=>f?.(e.prop,t)},{...typeof n!=`string`&&n?{label:()=>n}:{},default:()=>x(e)})})),getBaseProps:_}}const j={class:`c-form-default`},M=(0,i.defineComponent)({__name:`index`,props:{formItems:{},layoutConfig:{},options:{}},setup(e){return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,j,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.formItems,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e),{key:e.key??t}))),128))]))}});var ee=n.t(M,[[`__scopeId`,`data-v-4313de0c`]]);const te=(0,i.defineComponent)({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},setup(e){let t=e,n=(0,i.computed)(()=>280),r=(0,i.computed)(()=>t.layoutConfig?.inline?.gap??16),a=(0,i.computed)(()=>16),o=(0,i.computed)(()=>{let e=t.layoutConfig?.inline?.align;return e===`start`||e===`end`?e:`center`}),s=(0,i.computed)(()=>{switch(o.value){case`start`:return`flex-start`;case`end`:return`flex-end`;default:return`center`}}),c=(0,i.computed)(()=>{switch(o.value){case`start`:return`flex-start`;case`end`:return`flex-end`;case`center`:return`center`;default:return`flex-start`}}),l=(0,i.computed)(()=>({display:`flex`,flexWrap:`wrap`,alignItems:s.value,justifyContent:c.value,gap:`${a.value}px ${r.value}px`,width:`100%`})),u=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`form-item-${t}`},d=e=>{let r=t.options?.[e]?.layout,i={width:`${n.value}px`,flexShrink:0,display:`flex`,flexDirection:`column`};return r?.width!==void 0&&(i.width=typeof r.width==`number`?`${r.width}px`:r.width),r?.style&&Object.assign(i,r.style),i};return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{class:`c-form-inline`,style:(0,i.normalizeStyle)(l.value)},[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.formItems,(e,t)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:u(e,t),class:`c-form-inline-item`,style:(0,i.normalizeStyle)(d(t))},[((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e)))],4))),128))],4))}});var N=n.t(te,[[`__scopeId`,`data-v-195d0124`]]);const P={class:`c-grid-layout`},F={class:`config-header`},I={class:`config-controls`},L={class:`config-label`},R={class:`item-wrapper`},z=(0,i.defineComponent)({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},setup(e,{expose:n}){let r=e,o=(0,i.reactive)({cols:24,gutter:16,responsive:!0}),s=(0,i.computed)(()=>r.layoutConfig?.grid||{}),c=(0,i.computed)(()=>s.value.showConfigPanel),l=(0,i.computed)(()=>s.value.showStats),u=(0,i.computed)(()=>({cols:c.value?o.cols:s.value.cols??24,gutter:c.value?o.gutter:s.value.gutter??16,responsive:c.value?o.responsive:s.value.responsive??!0})),d=(0,i.computed)(()=>({cols:u.value.cols,xGap:u.value.gutter,yGap:u.value.gutter,responsive:u.value.responsive?`screen`:`self`})),f=(0,i.computed)(()=>[{key:`cols`,label:`列数`,component:`NInputNumber`,value:(0,i.computed)({get:()=>o.cols,set:e=>o.cols=e}),props:{min:1,max:48,size:`small`}},{key:`gutter`,label:`间距`,component:`NInputNumber`,value:(0,i.computed)({get:()=>o.gutter,set:e=>o.gutter=e}),props:{min:0,max:48,size:`small`}},{key:`responsive`,label:`响应式`,component:`NSwitch`,value:(0,i.computed)({get:()=>o.responsive,set:e=>o.responsive=e}),props:{size:`small`}}]),p=(0,i.computed)(()=>`列数: ${u.value.cols} | 间距: ${u.value.gutter}px | 项目: ${r.formItems.length}个`),m=(e,t)=>String(e.key)||e.props?.path||`grid-item-${t}`,h=(e,t)=>{let n=r.options?.[e]?.layout;return n?.[t]??n?.grid?.[t]},g=()=>{let{cols:e}=u.value;return e<=12?e:e<=24?12:8},_=e=>{let t=h(e,`span`),n=h(e,`offset`),r=h(e,`suffix`);return{span:typeof t==`number`&&t>0&&t<=u.value.cols?t:g(),offset:typeof n==`number`&&n>=0&&n<u.value.cols?n:0,suffix:!!r}};return(0,i.watch)(s,e=>{e.cols!==void 0&&(o.cols=e.cols),e.gutter!==void 0&&(o.gutter=e.gutter),e.responsive!==void 0&&(o.responsive=e.responsive)},{immediate:!0}),n({updateGridConfig:e=>Object.assign(o,e),getCurrentConfig:()=>({...u.value}),getGridInfo:()=>({...u.value,itemCount:r.formItems.length})}),(n,r)=>{let o=a.NCard,s=a.NGridItem,u=a.NGrid,h=a.NAlert;return(0,i.openBlock)(),(0,i.createElementBlock)(`div`,P,[(0,i.createCommentVNode)(` 配置面板 `),c.value?((0,i.openBlock)(),(0,i.createBlock)(o,{key:0,size:`small`,bordered:!1,class:`config-panel`},{header:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,F,[(0,i.createVNode)(t.t,{name:`mdi:view-grid`,size:18}),r[0]||=(0,i.createElementVNode)(`span`,null,`网格配置`,-1)])]),default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,I,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(f.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.key,class:`config-item`},[(0,i.createElementVNode)(`span`,L,(0,i.toDisplayString)(e.label)+`:`,1),((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e.component),(0,i.mergeProps)({value:e.value,"onUpdate:value":t=>e.value=t},{ref_for:!0},e.props),null,16,[`value`,`onUpdate:value`]))]))),128))])]),_:1})):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createCommentVNode)(` 网格容器 `),(0,i.createVNode)(u,(0,i.mergeProps)(d.value,{class:`grid-container`}),{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.formItems,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)(s,(0,i.mergeProps)({key:m(e,t)},{ref_for:!0},_(t),{class:`grid-item`}),{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,R,[((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e)))])]),_:2},1040))),128))]),_:1},16),(0,i.createCommentVNode)(` 统计信息 `),l.value?((0,i.openBlock)(),(0,i.createBlock)(h,{key:1,type:`info`,"show-icon":!1,size:`small`,class:`grid-stats`},{header:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:`mdi:information-outline`,size:16}),r[1]||=(0,i.createTextVNode)(` 网格信息 `,-1)]),default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(` `+(0,i.toDisplayString)(p.value),1)]),_:1})):(0,i.createCommentVNode)(`v-if`,!0)])}}});var ne=n.t(z,[[`__scopeId`,`data-v-5debeeab`]]);const B={class:`c-form-card`},V={class:`flex items-center gap-2`},re={class:`config-controls`},H={class:`config-item`},U={class:`flex items-center gap-2`},ie={class:`text-xs min-w-12`},W={class:`config-item`},ae={class:`config-item`},G={class:`config-item`},oe={class:`flex items-center gap-3`},K={class:`card-header`},q={class:`header-info`},se={class:`header-text`},J={key:0},Y={class:`header-actions`},X={class:`field-stats`},Z={class:`card-content`},ce={key:0,class:`progress-section`},le={class:`action-content`},ue={class:`status-summary`},Q={class:`status-item`},de={class:`progress-display`},$={class:`text-sm min-w-12`},fe={class:`action-buttons`},pe=(0,i.defineComponent)({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},formData:{default:()=>({})}},setup(e){let n=e,r=(0,i.ref)(20),o=(0,i.ref)(!0),s=(0,i.ref)(!0),c=(0,i.ref)(!0),l=(0,i.ref)(`vertical`),u=(0,i.ref)({}),d=(0,i.computed)(()=>n.layoutConfig?.card?.groups||[]),f=(0,i.computed)(()=>d.value.length>0),p=(0,i.computed)(()=>n.layoutConfig?.card?.showLayoutConfig??!0),m=(0,i.computed)(()=>n.layoutConfig?.card?.showActionPanel??!0),h=(0,i.computed)(()=>f.value?`layout-${l.value}`:`layout-single`),g=(0,i.computed)(()=>{if(!f.value)return[];let e=new Map;return d.value.forEach(t=>{e.set(t.key,[])}),n.formItems.forEach((t,r)=>{let i=(n.options?.[r])?.layout?.group||d.value[0]?.key||`default`;e.has(i)||e.set(i,[]),e.get(i).push(t)}),d.value.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),_=(0,i.computed)(()=>{let e=Object.keys(u.value);return e.length>0&&e.every(e=>u.value[e])}),v=(0,i.computed)(()=>{if(!n.options||n.options.length===0)return 0;let e=n.options.filter(e=>{let t=n.formData?.[e.prop||``];return y(t)}).length;return Math.round(e/n.options.length*100)}),y=e=>e==null?!1:Array.isArray(e)?e.length>0:typeof e==`string`?e.trim()!==``:!0,b=e=>n.options?n.options.filter(t=>t.layout?.group===e.config.key).filter(e=>{let t=n.formData?.[e.prop||``];return y(t)}).length:0,x=e=>{if(e.items.length===0)return 0;let t=b(e);return Math.round(t/e.items.length*100)},S=e=>{let t={basic:`mdi:account`,contact:`mdi:phone`,preferences:`mdi:cog`,settings:`mdi:cog`,info:`mdi:information`,default:`mdi:form-select`};return t[e]||t.default},C=e=>{u.value[e]=!u.value[e]},w=()=>{let e=!_.value;d.value.forEach(t=>{u.value[t.key]=e})};return(0,i.onMounted)(()=>{let e=n.layoutConfig?.card;e?.direction&&(l.value=e.direction),e?.showProgress!==void 0&&(c.value=e.showProgress),d.value.forEach(e=>{u.value[e.key]=!1})}),(n,d)=>{let y=a.NSlider,T=a.NSwitch,E=a.NRadio,D=a.NRadioGroup,O=a.NCard,k=a.NBadge,A=a.NButton,j=a.NProgress;return(0,i.openBlock)(),(0,i.createElementBlock)(`div`,B,[(0,i.createCommentVNode)(` 布局配置面板 `),f.value&&p.value?((0,i.openBlock)(),(0,i.createBlock)(O,{key:0,class:`layout-config-panel`,bordered:!1},{header:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,V,[(0,i.createVNode)(t.t,{name:`mdi:cog`,size:18}),d[4]||=(0,i.createElementVNode)(`span`,null,`布局配置`,-1)])]),default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,re,[(0,i.createElementVNode)(`div`,H,[d[5]||=(0,i.createElementVNode)(`span`,null,`卡片间距`,-1),(0,i.createElementVNode)(`div`,U,[(0,i.createVNode)(y,{value:r.value,"onUpdate:value":d[0]||=e=>r.value=e,min:12,max:32,step:4,class:`w-24`},null,8,[`value`]),(0,i.createElementVNode)(`span`,ie,(0,i.toDisplayString)(r.value)+`px`,1)])]),(0,i.createElementVNode)(`div`,W,[d[6]||=(0,i.createElementVNode)(`span`,null,`显示图标`,-1),(0,i.createVNode)(T,{value:o.value,"onUpdate:value":d[1]||=e=>o.value=e,size:`small`},null,8,[`value`])]),(0,i.createElementVNode)(`div`,ae,[d[7]||=(0,i.createElementVNode)(`span`,null,`可折叠`,-1),(0,i.createVNode)(T,{value:s.value,"onUpdate:value":d[2]||=e=>s.value=e,size:`small`},null,8,[`value`])]),(0,i.createElementVNode)(`div`,G,[d[10]||=(0,i.createElementVNode)(`span`,null,`布局方向`,-1),(0,i.createVNode)(D,{value:l.value,"onUpdate:value":d[3]||=e=>l.value=e,size:`small`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)(E,{value:`vertical`},{default:(0,i.withCtx)(()=>[...d[8]||=[(0,i.createTextVNode)(`垂直`,-1)]]),_:1}),(0,i.createVNode)(E,{value:`horizontal`},{default:(0,i.withCtx)(()=>[...d[9]||=[(0,i.createTextVNode)(`水平`,-1)]]),_:1})]),_:1},8,[`value`])])])]),_:1})):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createCommentVNode)(` 表单内容区域 `),(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`form-content`,h.value]),style:(0,i.normalizeStyle)({gap:`${r.value}px`})},[(0,i.createCommentVNode)(` 无分组时的单卡片模式 `),f.value?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 有分组时的多卡片模式 `),((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(g.value,e=>((0,i.openBlock)(),(0,i.createBlock)(O,{key:e.config.key,class:(0,i.normalizeClass)([`group-card`,[`${e.config.key}-card`,{collapsed:s.value&&u.value[e.config.key]}]]),hoverable:``},{header:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,K,[(0,i.createElementVNode)(`div`,q,[o.value&&e.config.icon?((0,i.openBlock)(),(0,i.createBlock)(t.t,{key:0,name:e.config.icon,size:20,class:`card-icon`},null,8,[`name`])):o.value?((0,i.openBlock)(),(0,i.createBlock)(t.t,{key:1,name:S(e.config.key),size:20,class:`card-icon`},null,8,[`name`])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createElementVNode)(`div`,se,[(0,i.createElementVNode)(`h3`,null,(0,i.toDisplayString)(e.config.title),1),e.config.description?((0,i.openBlock)(),(0,i.createElementBlock)(`p`,J,(0,i.toDisplayString)(e.config.description),1)):(0,i.createCommentVNode)(`v-if`,!0)])]),(0,i.createElementVNode)(`div`,Y,[(0,i.createCommentVNode)(` 统计信息 `),(0,i.createElementVNode)(`div`,X,[(0,i.createVNode)(k,{value:e.items.length,type:`info`,"show-zero":``},null,8,[`value`]),(0,i.createVNode)(k,{value:`${b(e)}/${e.items.length}`,type:b(e)===e.items.length?`success`:`warning`},null,8,[`value`,`type`])]),(0,i.createCommentVNode)(` 折叠按钮 `),s.value?((0,i.openBlock)(),(0,i.createBlock)(A,{key:0,quaternary:``,circle:``,size:`small`,onClick:t=>C(e.config.key)},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:u.value[e.config.key]?`mdi:chevron-down`:`mdi:chevron-up`,size:18},null,8,[`name`])]),_:2},1032,[`onClick`])):(0,i.createCommentVNode)(`v-if`,!0)])])]),default:(0,i.withCtx)(()=>[(0,i.withDirectives)((0,i.createElementVNode)(`div`,Z,[(0,i.createCommentVNode)(` 进度指示器 `),c.value?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ce,[(0,i.createVNode)(j,{percentage:x(e),color:x(e)===100?`#52c41a`:`#1890ff`,"show-indicator":!1,class:`mb-4`},null,8,[`percentage`,`color`])])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createCommentVNode)(` 表单项 `),((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.items,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e),{key:e.key??t}))),128))],512),[[i.vShow,!u.value[e.config.key]]])]),_:2},1032,[`class`]))),128))],64)):((0,i.openBlock)(),(0,i.createBlock)(O,{key:0,class:`single-card`,hoverable:``},{header:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,oe,[o.value?((0,i.openBlock)(),(0,i.createBlock)(t.t,{key:0,name:`mdi:form-select`,size:18,style:{color:`#3b82f6`}})):(0,i.createCommentVNode)(`v-if`,!0),d[11]||=(0,i.createElementVNode)(`span`,null,`表单信息`,-1)])]),default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.formItems,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e),{key:e.key??t}))),128))]),_:1}))],6),(0,i.createCommentVNode)(` 统一操作面板 `),f.value&&m.value?((0,i.openBlock)(),(0,i.createBlock)(O,{key:1,class:`action-panel`,bordered:!1},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,le,[(0,i.createElementVNode)(`div`,ue,[(0,i.createElementVNode)(`div`,Q,[d[12]||=(0,i.createElementVNode)(`span`,{class:`label`},`完成进度:`,-1),(0,i.createElementVNode)(`div`,de,[(0,i.createVNode)(j,{percentage:v.value,"show-indicator":!1,color:v.value===100?`#52c41a`:`#1890ff`,class:`flex-1`},null,8,[`percentage`,`color`]),(0,i.createElementVNode)(`span`,$,(0,i.toDisplayString)(v.value)+`%`,1)])])]),(0,i.createElementVNode)(`div`,fe,[s.value?((0,i.openBlock)(),(0,i.createBlock)(A,{key:0,onClick:w},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:_.value?`mdi:unfold-more-horizontal`:`mdi:unfold-less-horizontal`,size:18},null,8,[`name`])]),default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(` `+(0,i.toDisplayString)(_.value?`展开全部`:`折叠全部`),1)]),_:1})):(0,i.createCommentVNode)(`v-if`,!0)])])]),_:1})):(0,i.createCommentVNode)(`v-if`,!0)])}}});var me=n.t(pe,[[`__scopeId`,`data-v-28320dd2`]]);const he={class:`c-form-tabs`},ge={key:0,class:`single-panel`},_e={class:`tabs-container`},ve={key:0,class:`tab-header`},ye={class:`tab-description`},be={class:`tab-form-items`},xe={key:0,class:`tabs-actions`},Se=(0,i.defineComponent)({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},beforeTabChange:{},validateTab:{}},emits:[`tab-change`,`tab-before-change`,`tab-validate`,`tab-close`,`tab-add`],setup(e,{expose:n,emit:r}){let o=e,s=r,c=(0,i.ref)(``),l=(0,i.reactive)({}),u=()=>({tabs:[],type:`line`,size:`medium`,placement:`top`,animated:!0,closable:!1,addable:!1,showTabHeader:!0,showActions:!1,showCount:!1,validateBeforeSwitch:!1,defaultTab:``}),d=(0,i.computed)(()=>{let e=u(),t=o.layoutConfig?.tabs||{};return{...e,...t}}),f=(0,i.computed)(()=>d.value.tabs.length>0),p=(0,i.computed)(()=>{if(!f.value)return[];let e=new Map;return d.value.tabs.forEach(t=>{e.set(t.key,[])}),o.formItems.forEach((t,n)=>{let r=(o.options?.[n])?.layout?.tab||d.value.tabs[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),d.value.tabs.map(t=>({config:t,items:e.get(t.key)||[]}))}),m=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?String(n.path):`tab-item-${t}`},h=async()=>{if(!c.value)return!0;try{let e=o.validateTab?await o.validateTab(c.value):!0;return s(`tab-validate`,c.value),l[c.value]=e,e}catch{return l[c.value]=!1,!1}},g=async e=>{if(!e||e===c.value)return!0;if(!p.value.some(t=>t.config.key===e))return!1;try{if(d.value.validateBeforeSwitch&&c.value&&!await h())return!1;if(c.value){if(await o.beforeTabChange?.(c.value,e)===!1)return!1;s(`tab-before-change`,c.value,e)}return c.value=e,s(`tab-change`,e,p.value.findIndex(t=>t.config.key===e)),!0}catch{return!1}},_=e=>{g(e)},v=e=>{s(`tab-close`,e)},y=()=>{s(`tab-add`)},b=()=>{if(!f.value||p.value.length===0)return;let{defaultTab:e}=d.value,t=e||p.value[0]?.config.key;t&&t!==c.value&&(c.value=t,(0,i.nextTick)(()=>{let e=p.value.findIndex(e=>e.config.key===t);e>=0&&s(`tab-change`,t,e)}))};return(0,i.onMounted)(()=>{b()}),(0,i.watch)((0,i.computed)(()=>d.value.tabs.map(e=>e.key).join(`,`)),()=>{c.value&&!d.value.tabs.some(e=>e.key===c.value)&&b()}),(0,i.watch)(()=>d.value.defaultTab,e=>{e&&e!==c.value&&g(e)}),n({switchToTab:g,validateCurrentTab:h,currentTab:(0,i.readonly)(c),totalTabs:(0,i.computed)(()=>p.value.length),tabsWithItems:(0,i.readonly)(p)}),(n,r)=>{let o=a.NBadge,s=a.NSpace,l=a.NEmpty,u=a.NTabPane,b=a.NTabs,x=a.NButton;return(0,i.openBlock)(),(0,i.createElementBlock)(`div`,he,[(0,i.createCommentVNode)(` 无标签配置时的单一面板模式 `),f.value?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 有标签配置时的分标签模式 `),(0,i.createElementVNode)(`div`,_e,[(0,i.createVNode)(b,{value:c.value,"onUpdate:value":[r[0]||=e=>c.value=e,_],type:d.value.type,size:d.value.size,placement:d.value.placement,animated:d.value.animated,closable:d.value.closable,addable:d.value.addable,class:`form-tabs`,onClose:v,onAdd:y},{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(p.value,e=>((0,i.openBlock)(),(0,i.createBlock)(u,{key:e.config.key,name:e.config.key,tab:e.config.title,disabled:e.config.disabled,closable:e.config.closable},{tab:(0,i.withCtx)(()=>[(0,i.createVNode)(s,{align:`center`,size:8},{default:(0,i.withCtx)(()=>[e.config.icon?((0,i.openBlock)(),(0,i.createBlock)(t.t,{key:0,name:e.config.icon,size:16,class:`tab-icon`},null,8,[`name`])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createElementVNode)(`span`,null,(0,i.toDisplayString)(e.config.title),1),d.value.showCount?((0,i.openBlock)(),(0,i.createBlock)(o,{key:1,value:e.items.length,max:99,show:e.items.length>0,type:`info`},null,8,[`value`,`show`])):(0,i.createCommentVNode)(`v-if`,!0)]),_:2},1024)]),default:(0,i.withCtx)(()=>[d.value.showTabHeader&&e.config.description?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ve,[(0,i.createElementVNode)(`p`,ye,(0,i.toDisplayString)(e.config.description),1)])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createElementVNode)(`div`,be,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.items,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e),{key:m(e,t)}))),128))]),e.items.length===0?((0,i.openBlock)(),(0,i.createBlock)(l,{key:1,description:`暂无表单项`,class:`tab-empty`})):(0,i.createCommentVNode)(`v-if`,!0)]),_:2},1032,[`name`,`tab`,`disabled`,`closable`]))),128))]),_:1},8,[`value`,`type`,`size`,`placement`,`animated`,`closable`,`addable`]),(0,i.createCommentVNode)(` 标签页操作按钮 `),d.value.showActions?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,xe,[(0,i.createVNode)(s,{justify:`space-between`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)(s,null,{default:(0,i.withCtx)(()=>[d.value.validateBeforeSwitch?((0,i.openBlock)(),(0,i.createBlock)(x,{key:0,type:`primary`,size:`small`,onClick:h},{default:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:`carbon:star-check`,size:14,style:{"margin-right":`4px`}}),r[1]||=(0,i.createTextVNode)(` 验证当前标签 `,-1)]),_:1})):(0,i.createCommentVNode)(`v-if`,!0)]),_:1}),(0,i.createVNode)(s,null,{default:(0,i.withCtx)(()=>[(0,i.renderSlot)(n.$slots,`tab-actions`,{currentTab:c.value,totalTabs:p.value.length,validateTab:h,switchToTab:g},void 0,!0)]),_:3})]),_:3})])):(0,i.createCommentVNode)(`v-if`,!0)])],2112)):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ge,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.formItems,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e),{key:m(e,t)}))),128))]))])}}});var Ce=n.t(Se,[[`__scopeId`,`data-v-cbd5e822`]]);const we={class:`c-form-steps`},Te={key:0,class:`single-panel`},Ee={key:0,class:`step-header`},De={class:`step-title`},Oe={key:0,class:`step-description`},ke={class:`step-form-items`},Ae={class:`steps-actions`},je=(0,i.defineComponent)({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},beforeStepChange:{},validateStep:{},submitting:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},emits:[`step-change`,`step-before-change`,`step-validate`],setup(e,{expose:n,emit:r}){let o=e,s=r,c=(0,i.ref)(0),l=(0,i.ref)(!1),u=(0,i.reactive)({}),d=(0,i.computed)(()=>{let e=o.layoutConfig?.steps||{};return{steps:e.steps||[],vertical:e.vertical||!1,size:e.size||`medium`,showStepHeader:e.showStepHeader!==!1,validateBeforeNext:e.validateBeforeNext||!1,prevButtonText:e.prevButtonText||`上一步`,nextButtonText:e.nextButtonText||`下一步`,defaultStep:e.defaultStep||0}}),f=(0,i.computed)(()=>d.value.steps.length>0),p=(0,i.computed)(()=>{if(!f.value)return[];let e=new Map;return d.value.steps.forEach(t=>{e.set(t.key,[])}),o.formItems.forEach((t,n)=>{let r=(o.options?.[n])?.layout?.step||d.value.steps[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),d.value.steps.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),m=(0,i.computed)(()=>{for(let e=0;e<=c.value;e++)if(u[e]===!1)return`error`;return`process`}),h=(0,i.computed)(()=>c.value===0),g=(0,i.computed)(()=>c.value===p.value.length-1),_=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`step-item-${t}`},v=async()=>{try{let e=o.validateStep?await o.validateStep(c.value):!0;return s(`step-validate`,c.value),u[c.value]=e,e}catch{return u[c.value]=!1,!1}},y=async(e,t=!1)=>{if(l.value||o.submitting||o.disabled||e<0||e>=p.value.length)return!1;if(e===c.value)return!0;try{return l.value=!0,t&&d.value.validateBeforeNext&&!await v()||await o.beforeStepChange?.(c.value,e)===!1?!1:(s(`step-before-change`,c.value,e),c.value=e,s(`step-change`,c.value,p.value[c.value].config.key),!0)}catch{return!1}finally{l.value=!1}},b=async()=>{await y(c.value+1,!0)},x=()=>{y(c.value-1)},S=async e=>{p.value[e]?.config.disabled||await y(e,e>c.value)},C=()=>{if(!f.value||p.value.length===0)return;let{defaultStep:e}=d.value;c.value=e>=0&&e<p.value.length&&!p.value[e]?.config.disabled?e:0};return(0,i.watch)((0,i.computed)(()=>d.value.steps.map(e=>e.key).join(`,`)),()=>{C()}),(0,i.onMounted)(()=>{C()}),n({nextStep:b,previousStep:x,goToStep:S,validateCurrentStep:v,currentStep:(0,i.readonly)(c),totalSteps:(0,i.computed)(()=>p.value.length)}),(n,r)=>{let o=a.NStep,s=a.NSteps,u=a.NCard,v=a.NButton,y=a.NSpace;return(0,i.openBlock)(),(0,i.createElementBlock)(`div`,we,[(0,i.createCommentVNode)(` 无步骤配置时的单一面板模式 `),f.value?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 有步骤配置时的分步骤模式 `),(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`steps-container`,{"is-vertical":d.value.vertical}])},[(0,i.createCommentVNode)(` 步骤指示器 `),(0,i.createVNode)(s,{current:c.value+1,status:m.value,size:d.value.size,vertical:d.value.vertical,class:`steps-indicator`},{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(p.value,t=>((0,i.openBlock)(),(0,i.createBlock)(o,{key:t.config.key,title:t.config.title,description:t.config.description,disabled:t.config.disabled||l.value||e.submitting||e.disabled},null,8,[`title`,`description`,`disabled`]))),128))]),_:1},8,[`current`,`status`,`size`,`vertical`]),(0,i.createCommentVNode)(` 步骤内容区域 `),(0,i.createVNode)(u,{class:`steps-content`,bordered:!1},{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(p.value,(e,t)=>(0,i.withDirectives)(((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.config.key,class:`step-panel`},[(0,i.createCommentVNode)(` 步骤标题和描述 `),d.value.showStepHeader?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ee,[(0,i.createElementVNode)(`h3`,De,(0,i.toDisplayString)(e.config.title),1),e.config.description?((0,i.openBlock)(),(0,i.createElementBlock)(`p`,Oe,(0,i.toDisplayString)(e.config.description),1)):(0,i.createCommentVNode)(`v-if`,!0)])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createCommentVNode)(` 步骤内的表单项 `),(0,i.createElementVNode)(`div`,ke,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.items,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e),{key:_(e,t)}))),128))])])),[[i.vShow,c.value===t]])),128))]),_:1}),(0,i.createCommentVNode)(` 步骤操作按钮 `),(0,i.createElementVNode)(`div`,Ae,[(0,i.createVNode)(y,{justify:`space-between`},{default:(0,i.withCtx)(()=>[c.value>0?((0,i.openBlock)(),(0,i.createBlock)(v,{key:0,disabled:l.value||e.submitting||e.disabled,onClick:x},{default:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:`mdi:chevron-left-first`,size:16,style:{"margin-right":`4px`}}),(0,i.createTextVNode)(` `+(0,i.toDisplayString)(d.value.prevButtonText),1)]),_:1},8,[`disabled`])):(0,i.createCommentVNode)(`v-if`,!0),r[0]||=(0,i.createElementVNode)(`div`,null,null,-1),(0,i.createVNode)(y,null,{default:(0,i.withCtx)(()=>[c.value<p.value.length-1?((0,i.openBlock)(),(0,i.createBlock)(v,{key:0,type:`primary`,loading:l.value,disabled:e.submitting||e.disabled,onClick:b},{default:(0,i.withCtx)(()=>[(0,i.createTextVNode)((0,i.toDisplayString)(d.value.nextButtonText)+` `,1),(0,i.createVNode)(t.t,{name:`mdi:chevron-right-last`,size:16,style:{"margin-left":`4px`}})]),_:1},8,[`loading`,`disabled`])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.renderSlot)(n.$slots,`step-actions`,{currentStep:c.value,totalSteps:p.value.length,isFirstStep:h.value,isLastStep:g.value,nextStep:b,previousStep:x,goToStep:S},void 0,!0)]),_:3})]),_:3})])],2)],2112)):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,Te,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.formItems,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e),{key:_(e,t)}))),128))]))])}}});var Me=n.t(je,[[`__scopeId`,`data-v-ee5e4509`]]);const Ne={maxFields:20,autoSave:!1,enableSort:!0,showControls:!0,showItemControls:!0},Pe=[{label:`文本输入`,value:`input`},{label:`数字输入`,value:`inputNumber`},{label:`多行文本`,value:`textarea`},{label:`下拉选择`,value:`select`},{label:`开关切换`,value:`switch`},{label:`评分组件`,value:`rate`}];function Fe(e,t){let n=t.label||`动态字段 ${e}`;return{...t,id:t.id?.trim()||`dynamic_field_${e}`,type:t.type||Pe[0].value,prop:t.prop?.trim()||`dynamic_${e}`,label:n,placeholder:t.placeholder||`请输入${n||`内容`}`,visible:t.visible??!0,removable:t.removable??!0,created:t.created??Date.now(),layout:t.layout||{span:12}}}const Ie=()=>{let e=(0,i.reactive)({config:{...Ne},baseFields:[],dynamicFields:[],hiddenFieldIds:new Set,fieldCounter:0,isInitialized:!1}),t=(0,i.computed)(()=>[...e.baseFields,...e.dynamicFields.map(t=>({...t,show:!e.hiddenFieldIds.has(t.prop)}))]),n=(0,i.computed)(()=>t.value.filter(e=>e.show!==!1)),r=(0,i.computed)(()=>e.dynamicFields.length),a=(0,i.computed)(()=>e.hiddenFieldIds.size),o=(0,i.computed)(()=>e.dynamicFields.length<e.config.maxFields),s=(0,i.computed)(()=>e.hiddenFieldIds.size===0),c=(n={})=>{if(!o.value)return null;e.fieldCounter++;let r=Fe(e.fieldCounter,n);return t.value.some(e=>e.prop===r.prop)?null:(e.dynamicFields.push(r),r)},l=t=>{if(e.dynamicFields.length===0)return null;let n=t??e.dynamicFields.length-1;if(n<0||n>=e.dynamicFields.length||e.dynamicFields[n]?.removable===!1)return null;let r=e.dynamicFields.splice(n,1)[0];return r&&e.hiddenFieldIds.delete(r.prop),r??null},u=()=>{let t=e.dynamicFields.length;return e.dynamicFields.forEach(t=>e.hiddenFieldIds.delete(t.prop)),e.dynamicFields.length=0,e.fieldCounter=0,t},d=n=>t.value.some(e=>e.prop===n)?(e.hiddenFieldIds.has(n)?e.hiddenFieldIds.delete(n):e.hiddenFieldIds.add(n),!e.hiddenFieldIds.has(n)):!1,f=()=>(s.value?e.dynamicFields.forEach(t=>{e.hiddenFieldIds.add(t.prop)}):e.hiddenFieldIds.clear(),s.value),p=t=>{let n={...t};n.maxFields!==void 0&&(n.maxFields=Math.max(0,Math.trunc(n.maxFields))),Object.assign(e.config,n)};return{state:(0,i.readonly)(e),allFields:t,visibleFields:n,dynamicFieldsCount:r,hiddenFieldsCount:a,canAddMoreFields:o,allVisible:s,FIELD_TYPE_OPTIONS:Pe,addField:c,removeField:l,clearDynamicFields:u,toggleFieldVisibility:d,toggleAllVisibility:f,updateConfig:p,exportConfig:()=>{let t={baseFields:e.baseFields,dynamicFields:e.dynamicFields,config:e.config,hiddenFields:Array.from(e.hiddenFieldIds),timestamp:Date.now()};return JSON.stringify(t,null,2)},initialize:(t,n={})=>{e.baseFields=[...t],e.dynamicFields.length=0,e.hiddenFieldIds.clear(),e.fieldCounter=0,Object.assign(e.config,Ne),p(n),e.isInitialized=!0}}},Le=Symbol(`dynamicFormState`),Re={class:`c-form-dynamic`},ze={key:0,class:`dynamic-controls`},Be={class:`max-fields-config`},Ve={class:`dynamic-stats`},He={class:`dynamic-controls-fallback`},Ue={class:`dynamic-form-items`},We=(0,i.defineComponent)({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},dynamicFormState:{default:null}},emits:[`field-add`,`field-remove`,`fields-clear`],setup(e,{expose:n,emit:r}){let o=e,s=r,c=(0,i.inject)(Le,null),l=(0,i.computed)(()=>o.dynamicFormState||c),u=(0,i.computed)(()=>!!l.value),d=(0,i.computed)(()=>o.layoutConfig?.dynamic?.grid?.cols??24),f=(0,i.computed)(()=>o.layoutConfig?.dynamic?.grid?.gutter??16),p=(0,i.computed)(()=>o.layoutConfig?.dynamic?.controls?.showControls!==!1),m=(0,i.computed)(()=>l.value?.state.config.maxFields??o.layoutConfig?.dynamic?.dynamic?.maxFields??50),h=(0,i.computed)(()=>l.value?.dynamicFieldsCount.value??0),g=(0,i.computed)(()=>l.value?.canAddMoreFields.value??!1),_=(0,i.computed)(()=>o.formItems.length),v=()=>{let e=l.value?.addField();e&&s(`field-add`,e)},y=()=>{let e=l.value?.removeField();e&&s(`field-remove`,e.prop)},b=()=>{(l.value?.clearDynamicFields()??0)>0&&s(`fields-clear`)},x=e=>{e!==null&&l.value?.updateConfig({maxFields:e})},S=(e,t)=>e.key?.toString()||e.props?.path?.toString()||`dynamic-item-${t}`,C=e=>{let t=o.options?.[e]?.layout?.span;return typeof t==`number`&&t>0&&t<=d.value?t:Math.min(12,d.value)},w=e=>{if(!l.value)return!1;let t=e.props?.path?.toString()||e.key?.toString()||``;return l.value.state.dynamicFields.some(e=>e.prop===t)};return n({addField:()=>l.value?.addField(),removeField:()=>l.value?.removeField(),clearAllDynamic:()=>l.value?.clearDynamicFields(),isDynamicStateAvailable:u,dynamicState:l}),(n,r)=>{let o=a.NBadge,s=a.NButton,c=a.NSpace,l=a.NInputNumber,T=a.NTag,E=a.NCard,D=a.NAlert,O=a.NGridItem,k=a.NGrid;return(0,i.openBlock)(),(0,i.createElementBlock)(`div`,Re,[(0,i.createCommentVNode)(` 动态控制面板 `),p.value&&u.value?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ze,[(0,i.createVNode)(E,{size:`small`,title:`动态表单控制`,bordered:!1},{"header-extra":(0,i.withCtx)(()=>[(0,i.createVNode)(o,{value:h.value,type:`warning`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:`mdi:layers`,size:16})]),_:1},8,[`value`])]),default:(0,i.withCtx)(()=>[(0,i.createVNode)(c,{justify:`space-between`,align:`center`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)(c,null,{default:(0,i.withCtx)(()=>[(0,i.createVNode)(s,{size:`small`,type:`primary`,disabled:!g.value,onClick:v},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:`mdi:plus`,size:14})]),default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(` 添加字段 (`+(0,i.toDisplayString)(h.value)+`/`+(0,i.toDisplayString)(m.value)+`) `,1)]),_:1},8,[`disabled`]),(0,i.createVNode)(s,{size:`small`,type:`warning`,disabled:h.value===0,onClick:y},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:`mdi:minus`,size:14})]),default:(0,i.withCtx)(()=>[r[0]||=(0,i.createTextVNode)(` 移除字段 `,-1)]),_:1},8,[`disabled`]),(0,i.createVNode)(s,{size:`small`,type:`error`,disabled:h.value===0,onClick:b},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:`mdi:delete-sweep`,size:14})]),default:(0,i.withCtx)(()=>[r[1]||=(0,i.createTextVNode)(` 清空动态 `,-1)]),_:1},8,[`disabled`])]),_:1}),(0,i.createCommentVNode)(` 最大字段数配置 `),(0,i.createElementVNode)(`div`,Be,[r[2]||=(0,i.createElementVNode)(`span`,null,`最大字段数:`,-1),(0,i.createVNode)(l,{value:m.value,"onUpdate:value":x,min:5,max:50,size:`small`,style:{width:`100px`}},null,8,[`value`])])]),_:1}),(0,i.createElementVNode)(`div`,Ve,[(0,i.createVNode)(c,null,{default:(0,i.withCtx)(()=>[(0,i.createVNode)(T,{type:`info`},{default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(`总字段: `+(0,i.toDisplayString)(_.value),1)]),_:1}),(0,i.createVNode)(T,{type:`warning`},{default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(`动态: `+(0,i.toDisplayString)(h.value),1)]),_:1})]),_:1})])]),_:1})])):p.value&&!u.value?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 状态不可用时的提示 `),(0,i.createElementVNode)(`div`,He,[(0,i.createVNode)(E,{size:`small`,title:`动态表单控制 (静态模式)`,bordered:!1},{default:(0,i.withCtx)(()=>[(0,i.createVNode)(D,{type:`info`,"show-icon":``},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(t.t,{name:`mdi:information-outline`,size:16})]),default:(0,i.withCtx)(()=>[r[3]||=(0,i.createTextVNode)(` 当前为静态模式,如需动态功能请在父组件中提供动态表单状态。 `,-1)]),_:1})]),_:1})])],2112)):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createCommentVNode)(` 表单项渲染区域 `),(0,i.createElementVNode)(`div`,Ue,[(0,i.createVNode)(k,{cols:d.value,"x-gap":f.value,"y-gap":f.value},{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.formItems,(e,t)=>((0,i.openBlock)(),(0,i.createBlock)(O,{key:S(e,t),span:C(t)},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`dynamic-item-wrapper`,{"is-dynamic-field":w(e)}])},[((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(e)))],2)]),_:2},1032,[`span`]))),128))]),_:1},8,[`cols`,`x-gap`,`y-gap`])])])}}});var Ge=n.t(We,[[`__scopeId`,`data-v-1779d19c`]]);const Ke={class:`custom-layout`},qe={class:`toolbar-content`},Je={class:`mode-section`},Ye={class:`stats-section`},Xe={class:`stat-item`},Ze={class:`stat-value`},Qe={class:`stat-item`},$e={class:`stat-value`},et={class:`actions-section`},tt={class:`design-tools`},nt={class:`tool-group`},rt={key:0,class:`canvas-hint`},it={class:`areas-container`},at={class:`area-header`},ot={class:`area-info`},st=[`onClick`],ct={class:`area-controls`},lt={class:`field-preview`},ut={class:`field-label`},dt={class:`field-type`},ft={key:0,class:`area-drop-zone`},pt={class:`field-name`},mt={class:`field-type-tag`},ht={key:0,class:`empty-layout`},gt={key:1,class:`form-container`},_t={class:`form-areas`},vt=(0,i.defineComponent)({__name:`index`,props:{options:{default:()=>[]},formItems:{default:()=>[]},formData:{default:()=>({})}},emits:[`fields-change`,`export-data`],setup(e,{emit:t}){let n=e,r=t,s=(0,i.ref)(!0),c=(0,i.ref)([]),l=(0,i.ref)([]),u=(0,i.ref)(``),d=(0,i.computed)(()=>n.options?.length>0?n.options:n.formItems?.map(e=>{let t=e.props;return{prop:t?.path||``,label:t?.label||t?.path||``,type:`input`,show:!0}}).filter(e=>e.prop)||[]),f=(0,i.computed)(()=>c.value.reduce((e,t)=>e+t.fields.length,0)),p=()=>`${Date.now()}-${Math.random().toString(36).substring(2,11)}`,m=e=>({input:`输入框`,select:`下拉框`,radio:`单选框`,checkbox:`复选框`,textarea:`文本域`,date:`日期`,number:`数字`})[e]||e,h=e=>n.formItems?.find(t=>t.props?.path===e.prop)||null,g=e=>{let t={id:p(),title:`${e===`horizontal`?`水平`:e===`vertical`?`垂直`:`网格`}区域`,type:e,fields:[]};c.value.push(t)},_=e=>{let t=c.value.findIndex(t=>t.id===e);t!==-1&&c.value.splice(t,1)},v=e=>({...e,id:`${e.prop}-${p()}`}),y=(e,t)=>{let n=c.value.find(t=>t.id===e);if(n){let e=n.fields.findIndex(e=>e.id===t);e!==-1&&n.fields.splice(e,1)}},b=()=>{let e=JSON.stringify(c.value,null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`layout-config-${Date.now()}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)},x=()=>{c.value=[]},S=()=>{r(`export-data`,{layout:c.value,formData:n.formData,timestamp:new Date().toISOString()})};return(0,i.watchEffect)(()=>{let e=new Set(c.value.flatMap(e=>e.fields.map(e=>e.prop)));l.value=d.value.filter(t=>!e.has(t.prop)).map(e=>({...e,id:e.prop}))}),(0,i.watch)(()=>c.value,()=>{r(`fields-change`,c.value.flatMap(e=>e.fields.map(e=>({...e,id:void 0}))))},{deep:!0}),(e,t)=>{let n=a.NButton,r=a.NButtonGroup,d=a.NCard,p=a.NInput,C=a.NTag,w=a.NEmpty;return(0,i.openBlock)(),(0,i.createElementBlock)(`div`,Ke,[(0,i.createCommentVNode)(` 顶部工具栏 `),(0,i.createVNode)(d,{bordered:!1,class:`toolbar-card`},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,qe,[(0,i.createCommentVNode)(` 模式切换 `),(0,i.createElementVNode)(`div`,Je,[t[12]||=(0,i.createElementVNode)(`span`,{class:`section-label`},`自定义模式:`,-1),(0,i.createVNode)(r,null,{default:(0,i.withCtx)(()=>[(0,i.createVNode)(n,{type:s.value?`primary`:`default`,onClick:t[0]||=e=>s.value=!0,size:`small`},{default:(0,i.withCtx)(()=>[...t[10]||=[(0,i.createTextVNode)(` 🎨 设计模式 `,-1)]]),_:1},8,[`type`]),(0,i.createVNode)(n,{type:s.value?`default`:`primary`,onClick:t[1]||=e=>s.value=!1,size:`small`},{default:(0,i.withCtx)(()=>[...t[11]||=[(0,i.createTextVNode)(` 📝 填写模式 `,-1)]]),_:1},8,[`type`])]),_:1})]),(0,i.createCommentVNode)(` 统计信息 `),(0,i.createElementVNode)(`div`,Ye,[(0,i.createElementVNode)(`div`,Xe,[(0,i.createElementVNode)(`div`,Ze,(0,i.toDisplayString)(c.value.length),1),t[13]||=(0,i.createElementVNode)(`div`,{class:`stat-label`},`自定义区域`,-1)]),(0,i.createElementVNode)(`div`,Qe,[(0,i.createElementVNode)(`div`,$e,(0,i.toDisplayString)(f.value),1),t[14]||=(0,i.createElementVNode)(`div`,{class:`stat-label`},`字段总数`,-1)])]),(0,i.createCommentVNode)(` 操作按钮 `),(0,i.createElementVNode)(`div`,et,[s.value?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:0},[(0,i.createVNode)(n,{secondary:``,onClick:b,size:`small`},{default:(0,i.withCtx)(()=>[...t[15]||=[(0,i.createTextVNode)(` 💾 保存布局 `,-1)]]),_:1}),(0,i.createVNode)(n,{secondary:``,onClick:x,size:`small`},{default:(0,i.withCtx)(()=>[...t[16]||=[(0,i.createTextVNode)(` 🔄 重置布局 `,-1)]]),_:1})],64)):((0,i.openBlock)(),(0,i.createBlock)(n,{key:1,secondary:``,onClick:S,size:`small`},{default:(0,i.withCtx)(()=>[...t[17]||=[(0,i.createTextVNode)(` 📊 导出数据 `,-1)]]),_:1}))])])]),_:1}),(0,i.createCommentVNode)(` 设计模式工具面板 `),s.value?((0,i.openBlock)(),(0,i.createBlock)(d,{key:0,class:`design-panel`,title:`🎨 设计工具`},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,tt,[(0,i.createElementVNode)(`div`,nt,[t[21]||=(0,i.createElementVNode)(`span`,{class:`group-label`},`添加区域:`,-1),(0,i.createVNode)(n,{onClick:t[2]||=e=>g(`horizontal`),size:`small`},{default:(0,i.withCtx)(()=>[...t[18]||=[(0,i.createTextVNode)(` ➡️ 水平区域 `,-1)]]),_:1}),(0,i.createVNode)(n,{onClick:t[3]||=e=>g(`vertical`),size:`small`},{default:(0,i.withCtx)(()=>[...t[19]||=[(0,i.createTextVNode)(` ⬇️ 垂直区域 `,-1)]]),_:1}),(0,i.createVNode)(n,{onClick:t[4]||=e=>g(`grid`),size:`small`},{default:(0,i.withCtx)(()=>[...t[20]||=[(0,i.createTextVNode)(` ⚏ 网格区域 `,-1)]]),_:1})])])]),_:1})):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createCommentVNode)(` 主画布区域 `),(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`layout-canvas`,{"design-mode":s.value}])},[(0,i.createCommentVNode)(` 设计模式 `),s.value?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:0},[c.value.length===0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,rt,[...t[22]||=[(0,i.createElementVNode)(`div`,{class:`hint-content`},[(0,i.createElementVNode)(`h3`,null,`🎨 开始自定义你的布局`),(0,i.createElementVNode)(`p`,null,`点击上方按钮添加区域`)],-1)]])):((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 区域列表 `),(0,i.createElementVNode)(`div`,it,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(c.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:(0,i.normalizeClass)([`custom-area`,`area-${e.type}`])},[(0,i.createElementVNode)(`div`,at,[(0,i.createElementVNode)(`div`,ot,[u.value===e.id?((0,i.openBlock)(),(0,i.createBlock)(p,{key:0,value:e.title,"onUpdate:value":t=>e.title=t,size:`small`,onBlur:t[5]||=e=>u.value=``,onKeyup:t[6]||=(0,i.withKeys)(e=>u.value=``,[`enter`]),class:`title-input`},null,8,[`value`,`onUpdate:value`])):((0,i.openBlock)(),(0,i.createElementBlock)(`span`,{key:1,class:`area-title`,onClick:t=>u.value=e.id},(0,i.toDisplayString)(e.title),9,st)),(0,i.createVNode)(C,{size:`small`},{default:(0,i.withCtx)(()=>[(0,i.createTextVNode)((0,i.toDisplayString)(e.fields.length)+` 字段`,1)]),_:2},1024)]),(0,i.createElementVNode)(`div`,ct,[(0,i.createVNode)(n,{text:``,onClick:t=>_(e.id),size:`tiny`,type:`error`,title:`删除区域`},{default:(0,i.withCtx)(()=>[...t[23]||=[(0,i.createTextVNode)(` 🗑️ `,-1)]]),_:1},8,[`onClick`])])]),(0,i.createCommentVNode)(` 字段容器(可拖入) `),(0,i.createVNode)((0,i.unref)(o.VueDraggable),{modelValue:e.fields,"onUpdate:modelValue":t=>e.fields=t,class:`area-fields`,group:{name:`form-fields`,pull:!0,put:!0},animation:200,"ghost-class":`field-ghost`,"item-key":`id`},{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.fields,r=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:r.id,class:`field-item`},[(0,i.createElementVNode)(`div`,lt,[t[25]||=(0,i.createElementVNode)(`span`,{class:`drag-handle`},`⠿`,-1),(0,i.createElementVNode)(`span`,ut,(0,i.toDisplayString)(r.label||r.prop),1),(0,i.createElementVNode)(`span`,dt,(0,i.toDisplayString)(m(r.type)),1),(0,i.createVNode)(n,{text:``,size:`tiny`,type:`error`,onClick:t=>y(e.id,r.id),title:`移出字段`},{default:(0,i.withCtx)(()=>[...t[24]||=[(0,i.createTextVNode)(` ✕ `,-1)]]),_:1},8,[`onClick`])])]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`]),e.fields.length===0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ft,` 从下方字段池拖拽字段到这里 `)):(0,i.createCommentVNode)(`v-if`,!0)],2))),128))])],2112)),(0,i.createCommentVNode)(` 字段池(可拖出) `),(0,i.createVNode)(d,{class:`field-pool`,title:`📦 可用字段`},{default:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(o.VueDraggable),{modelValue:l.value,"onUpdate:modelValue":t[7]||=e=>l.value=e,class:`pool-fields-grid`,group:{name:`form-fields`,pull:`clone`,put:!0},animation:200,sort:!1,"ghost-class":`field-ghost`,"item-key":`id`,clone:v},{default:(0,i.withCtx)(()=>[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(l.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:`pool-field`},[t[26]||=(0,i.createElementVNode)(`span`,{class:`drag-handle`},`⠿`,-1),(0,i.createElementVNode)(`span`,pt,(0,i.toDisplayString)(e.label||e.prop),1),(0,i.createElementVNode)(`span`,mt,(0,i.toDisplayString)(m(e.type)),1)]))),128))]),_:1},8,[`modelValue`])]),_:1})],64)):((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:1},[(0,i.createCommentVNode)(` 填写模式 `),c.value.length===0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,ht,[(0,i.createVNode)(w,{description:`尚未设计布局`},{extra:(0,i.withCtx)(()=>[(0,i.createVNode)(n,{onClick:t[8]||=e=>s.value=!0,type:`primary`},{default:(0,i.withCtx)(()=>[...t[27]||=[(0,i.createTextVNode)(` 🎨 开始设计 `,-1)]]),_:1})]),_:1})])):((0,i.openBlock)(),(0,i.createElementBlock)(`div`,gt,[(0,i.createElementVNode)(`div`,_t,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(c.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:e.id,class:(0,i.normalizeClass)([`form-area`,`area-${e.type}`])},[e.fields.length>0?((0,i.openBlock)(),(0,i.createBlock)(d,{key:0,title:e.title},{default:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,{class:(0,i.normalizeClass)([`area-form-items`,`layout-${e.type}`])},[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(e.fields,e=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(h(e)),{key:e.prop}))),128))],2)]),_:2},1032,[`title`])):((0,i.openBlock)(),(0,i.createBlock)(w,{key:1,description:`此区域暂无字段`,size:`small`},{extra:(0,i.withCtx)(()=>[(0,i.createVNode)(n,{onClick:t[9]||=e=>s.value=!0,size:`small`,secondary:``},{default:(0,i.withCtx)(()=>[...t[28]||=[(0,i.createTextVNode)(` 🎨 添加字段 `,-1)]]),_:1})]),_:1}))],2))),128))])]))],64))],2)])}}});var yt=n.t(vt,[[`__scopeId`,`data-v-858beb3e`]]);const bt=(0,i.defineComponent)({name:`C_Form`,__name:`index`,props:{options:{},modelValue:{},config:{default:()=>({})},renderers:{}},emits:[`submit`,`update:modelValue`,`validate-success`,`validate-error`],setup(t,{expose:n,emit:r}){let o=(0,i.defineAsyncComponent)(()=>Promise.resolve().then(()=>require(`./C_Editor.cjs`)).then(e=>e.C_Editor)),s={default:ee,inline:N,grid:ne,card:me,tabs:Ce,steps:Me,dynamic:Ge,custom:yt},c={NFormItem:a.NFormItem,NInput:a.NInput,NInputNumber:a.NInputNumber,NSwitch:a.NSwitch,NSlider:a.NSlider,NRate:a.NRate,NDatePicker:a.NDatePicker,NTimePicker:a.NTimePicker,NCascader:a.NCascader,NColorPicker:a.NColorPicker,NSelect:a.NSelect,NCheckboxGroup:a.NCheckboxGroup,NCheckbox:a.NCheckbox,NRadioGroup:a.NRadioGroup,NRadio:a.NRadio,NUpload:a.NUpload,NButton:a.NButton,NSpace:a.NSpace,NTooltip:a.NTooltip,C_Editor:o},d=t,f=r,h=l(),g=(0,i.computed)(()=>p(u(d.config,h))),{t:_}=e.i(()=>g.value.locale),v=(0,i.ref)(null),{formModel:y,formRules:b,visibleOptions:x,initialize:S,handleFieldChange:w,validate:T,validateField:E,validateStep:D,validateTab:O,validateDynamicFields:k,validateCustomGroup:j,clearValidation:M,getModel:te,setFields:P,resetFields:F,setFieldValue:I,getFieldValue:L,setFieldsValue:R,handleSubmit:z,handleReset:B,isDirty:V,getChangedFields:re,isFieldDirty:H,markAsClean:U,asyncOptionsCache:ie,asyncLoadingMap:W,asyncErrorMap:ae,reloadOptions:G,setFormItemRef:oe,isSubmitting:K,submit:q}=C((0,i.computed)(()=>d.options),g,v,f,(0,i.computed)(()=>d.modelValue)),se=(0,i.computed)(()=>y.value),J=()=>te(),Y=(0,i.computed)(()=>({form:v.value,model:se.value,validate:T,validateField:E,reset:F,setFields:P,getModel:J,clearValidation:M,submit:q,reloadOptions:G,submitting:K.value})),X=(0,i.getCurrentInstance)(),Z=()=>Object.keys(X?.slots??{}).filter(e=>![`action`,`action-extra`,`step-actions`].includes(e)),{formItems:ce}=A({formModel:y,visibleOptions:x,config:g,handleFieldChange:w,componentMap:c,instanceSlots:X?.slots,asyncOptionsCache:ie,asyncLoadingMap:W,renderers:(0,i.computed)(()=>d.renderers),setFormItemRef:oe,onError:(e,t)=>g.value.onError?.(e,{source:`render`,field:t})}),le=(0,i.computed)(()=>s[g.value.layout]||s.default),ue=(0,i.computed)(()=>({type:g.value.layout,grid:g.value.grid,inline:g.value.inline,card:g.value.card,tabs:g.value.tabs,steps:g.value.steps,dynamic:g.value.dynamic,custom:g.value.custom})),Q=(0,i.computed)(()=>m(g.value)),de=(0,i.computed)(()=>g.value.layout===`steps`?{beforeStepChange:ye,validateStep:be,submitting:K.value,disabled:g.value.disabled||g.value.readonly}:g.value.layout===`tabs`?{beforeTabChange:ge,validateTab:_e}:{}),$=(e,...t)=>{let n=g.value[e];if(typeof n==`function`)try{let e=n(...t);e instanceof Promise&&e.catch(e=>g.value.onError?.(e,{source:`callback`}))}catch(e){g.value.onError?.(e,{source:`callback`})}},fe=e=>{g.value.onFieldsChange?.(e)},pe=e=>{f(`validate-success`,e)},he=e=>{f(`validate-error`,e)},ge=async(e,t)=>{try{return await g.value.onTabBeforeChange?.(e,t)!==!1}catch(e){return g.value.onError?.(e,{source:`callback`}),!1}},_e=async e=>{let t=await O(e);return t&&g.value.onTabValidate?.(e),t},ve=(e,t)=>{g.value.onStepChange?.(e,t)},ye=async(e,t)=>{try{return await g.value.onStepBeforeChange?.(e,t)!==!1}catch(e){return g.value.onError?.(e,{source:`callback`}),!1}},be=async e=>{try{return await D(e)?(g.value.onStepValidate?.(e),!0):!1}catch{return!1}};return n({validate:T,validateField:E,validateStep:D,validateTab:O,validateDynamicFields:k,validateCustomGroup:j,clearValidation:M,getModel:te,setFields:P,resetFields:F,setFieldValue:I,getFieldValue:L,setFieldsValue:R,formRef:v,formModel:y,initialize:S,layoutType:(0,i.computed)(()=>g.value.layout),shouldShowDefaultActions:Q,isDirty:V,getChangedFields:re,isFieldDirty:H,markAsClean:U,asyncLoadingMap:W,asyncErrorMap:ae,reloadOptions:G,isSubmitting:K,submit:q}),(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NForm),(0,i.mergeProps)({ref_key:`formRef`,ref:v,model:(0,i.unref)(y),rules:(0,i.unref)(b),"validate-on-rule-change":!1,"label-placement":g.value.labelPlacement,"label-width":g.value.labelWidth,size:g.value.size,disabled:g.value.disabled,readonly:g.value.readonly},e.$attrs),{default:(0,i.withCtx)(()=>[(0,i.createCommentVNode)(` 布局组件渲染 `),((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(le.value),(0,i.mergeProps)({"form-items":(0,i.unref)(ce),"layout-config":ue.value,options:(0,i.unref)(x),"form-data":(0,i.unref)(y)},de.value,{onTabChange:t[0]||=(e,t)=>$(`onTabChange`,e,t),onStepChange:ve,onFieldAdd:t[1]||=e=>$(`onFieldAdd`,e),onFieldRemove:t[2]||=e=>$(`onFieldRemove`,e),onFieldToggle:t[3]||=(e,t)=>$(`onFieldToggle`,e,t),onFieldsClear:t[4]||=e=>$(`onFieldsClear`),onRenderModeChange:t[5]||=e=>$(`onRenderModeChange`,e),onGroupToggle:t[6]||=(e,t)=>$(`onGroupToggle`,e,t),onGroupReset:t[7]||=e=>$(`onGroupReset`,e),onValidateSuccess:pe,onValidateError:he,onFieldsChange:fe}),(0,i.createSlots)({"step-actions":(0,i.withCtx)(t=>[(0,i.renderSlot)(e.$slots,`step-actions`,(0,i.mergeProps)(t,{submit:(0,i.unref)(q),submitting:(0,i.unref)(K)}),()=>[t.isLastStep&&g.value.showActions?((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NButton),{key:0,type:`primary`,loading:(0,i.unref)(K),disabled:(0,i.unref)(K)||g.value.disabled||g.value.readonly,onClick:(0,i.unref)(q)},{default:(0,i.withCtx)(()=>[(0,i.createTextVNode)((0,i.toDisplayString)(g.value.submitText||(0,i.unref)(_)(`common.submit`)),1)]),_:1},8,[`loading`,`disabled`,`onClick`])):(0,i.createCommentVNode)(`v-if`,!0)],!0)]),_:2},[(0,i.renderList)(Z(),t=>({name:t,fn:(0,i.withCtx)(n=>[(0,i.renderSlot)(e.$slots,t,(0,i.normalizeProps)((0,i.guardReactiveProps)(n)),void 0,!0)])}))]),1040,[`form-items`,`layout-config`,`options`,`form-data`])),(0,i.createCommentVNode)(` 表单操作按钮区域(只在特定布局中显示) `),Q.value?((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NFormItem),{key:0,style:{"margin-top":`20px`}},{default:(0,i.withCtx)(()=>[(0,i.renderSlot)(e.$slots,`action`,(0,i.normalizeProps)((0,i.guardReactiveProps)(Y.value)),()=>[(0,i.createVNode)((0,i.unref)(a.NSpace),{justify:`end`,style:{width:`100%`}},{default:(0,i.withCtx)(()=>[(0,i.createVNode)((0,i.unref)(a.NButton),{disabled:(0,i.unref)(K)||g.value.disabled||g.value.readonly,onClick:(0,i.unref)(B)},{default:(0,i.withCtx)(()=>[(0,i.createTextVNode)((0,i.toDisplayString)(g.value.resetText||(0,i.unref)(_)(`common.reset`)),1)]),_:1},8,[`disabled`,`onClick`]),(0,i.renderSlot)(e.$slots,`action-extra`,(0,i.normalizeProps)((0,i.guardReactiveProps)(Y.value)),void 0,!0),(0,i.createVNode)((0,i.unref)(a.NButton),{type:`primary`,loading:(0,i.unref)(K),disabled:(0,i.unref)(K)||g.value.disabled||g.value.readonly,onClick:(0,i.unref)(z)},{default:(0,i.withCtx)(()=>[(0,i.createTextVNode)((0,i.toDisplayString)(g.value.submitText||(0,i.unref)(_)(`common.submit`)),1)]),_:1},8,[`loading`,`disabled`,`onClick`])]),_:3})],!0)]),_:3})):(0,i.createCommentVNode)(`v-if`,!0)]),_:3},16,[`model`,`rules`,`label-placement`,`label-width`,`size`,`disabled`,`readonly`]))}});var xt=n.t(bt,[[`__scopeId`,`data-v-6ce5207d`]]);Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return xt}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return l}});
package/dist/C_Form2.js DELETED
@@ -1 +0,0 @@
1
- import{i as e,r as t}from"./config.js";import{t as n}from"./C_Icon2.js";import{t as r}from"./export-helper.js";import{a as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./data.js";import{Fragment as d,computed as f,createBlock as p,createCommentVNode as m,createElementBlock as h,createElementVNode as g,createSlots as _,createTextVNode as v,createVNode as y,defineAsyncComponent as b,defineComponent as x,getCurrentInstance as S,guardReactiveProps as C,h as w,inject as T,mergeProps as E,nextTick as D,normalizeClass as O,normalizeProps as k,normalizeStyle as A,onMounted as j,onScopeDispose as ee,openBlock as M,reactive as N,readonly as P,ref as F,renderList as I,renderSlot as L,resolveComponent as te,resolveDynamicComponent as R,toDisplayString as z,toValue as B,unref as V,vShow as ne,watch as H,watchEffect as re,withCtx as U,withDirectives as W,withKeys as ie}from"vue";import{NAlert as ae,NBadge as G,NButton as K,NButtonGroup as oe,NCard as q,NCascader as se,NCheckbox as ce,NCheckboxGroup as le,NColorPicker as ue,NDatePicker as de,NEmpty as fe,NForm as pe,NFormItem as me,NGrid as he,NGridItem as J,NInput as ge,NInputNumber as Y,NProgress as _e,NRadio as ve,NRadioGroup as ye,NRate as be,NSelect as xe,NSlider as Se,NSpace as X,NStep as Ce,NSteps as we,NSwitch as Te,NTabPane as Ee,NTabs as Z,NTag as Q,NTimePicker as De,NTooltip as Oe,NUpload as ke}from"naive-ui";import{VueDraggable as Ae}from"vue-draggable-plus";import{BasicRules as je,NAIVE_COMBOS as Me,PRESET_RULES as Ne,SPEC_RULES as Pe,toNaiveRule as Fe}from"@robot-admin/form-validate";const Ie=Symbol(`c-form-global-config`);function Le(){return S()?T(Ie,{}):{}}function Re(e,t){let n=e??{},r=(e,t)=>e||t?{...e,...t}:void 0;return{...t,...n,grid:r(t.grid,n.grid),inline:r(t.inline,n.inline),card:r(t.card,n.card),tabs:r(t.tabs,n.tabs),steps:r(t.steps,n.steps),dynamic:r(t.dynamic,n.dynamic),custom:r(t.custom,n.custom)}}const ze={layout:`default`,labelPlacement:`left`,labelWidth:`auto`,size:`medium`,disabled:!1,readonly:!1,showActions:!0,validateOnChange:!1,preserveRemovedFields:!1,submitText:``,resetText:``,submitSuccessText:``,resetSuccessText:``,mode:`create`},Be=[`steps`,`custom`];function Ve(e){return{...ze,...e}}function He(e){return!(e.showActions===!1||Be.includes(e.layout))}function Ue(e,t){let n=F({}),r=f(()=>a().length>0);function a(){let r=n.value,a=t?B(t):void 0,o=new Set(a??[...Object.keys(r),...Object.keys(e)]),s=[];for(let t of o)i(c(r,t),c(e,t))||s.push(t);return s}function o(t){return!i(c(n.value,t),c(e,t))}function s(){n.value=u(e)}function l(){return u(n.value)}return{isDirty:r,getChangedFields:a,isFieldDirty:o,markAsClean:s,getCleanModel:l}}const $=Ne,We=Me;function Ge(e=[]){return e.map(e=>{let t=`validate`in e&&typeof e.validate==`function`?Fe(e):e;return{...t,...Array.isArray(t.trigger)?{trigger:[...t.trigger]}:{}}})}function Ke(e,t){return Ge([{...je.required(e,[`input`,`change`,`blur`]),message:t}])[0]}const qe={input:``,textarea:``,editor:``,select:null,datePicker:null,daterange:null,timePicker:null,cascader:null,colorPicker:null,checkbox:[],upload:[],radio:``,inputNumber:null,slider:null,rate:null,switch:!1};function Je(e){return u((e.value===void 0?qe[e.type]:e.value)??null)}function Ye(e){let t=new Set;e.forEach((e,n)=>{if(!e.prop?.trim())throw TypeError(`[C_Form] options[${n}].prop 不能为空`);if(t.has(e.prop))throw TypeError(`[C_Form] 字段 prop 重复: ${e.prop}`);t.add(e.prop)})}function Xe(n,r,d,p,m){let h=N({}),g=N({}),_=new Map,v=F({}),y=F({}),b=F({}),x=F(!1),S=new Map,C=!1,w,T=new Map,E=new Map,O=new Map,k=new Set,A=!1,j=!1,M=0,P=t(()=>r.value.feedback),{t:I}=e(()=>r.value.locale),{isDirty:L,getChangedFields:te,isFieldDirty:R,markAsClean:z,getCleanModel:B}=Ue(h,()=>n.value.map(e=>e.prop));function V(e,t,n){if(!C)try{r.value.onError?r.value.onError(e,{source:t,field:n}):P.error(e instanceof Error?e.message:String(e),e)}catch{}}function ne(e,t){if(!(C||!t))try{P[e](t)}catch{}}let re=f(()=>n.value.filter(e=>{if(e.show===!1)return!1;if(!e.showWhen)return!0;try{return e.showWhen(h)}catch(t){return V(t,`callback`,e.prop),!1}}));function U(){j=!0;let e=++M;D(()=>{e===M&&(j=!1)})}function W(){return u(h)}function ie(e){let t=e?u(e):{};return n.value.forEach(e=>{a(t,e.prop)||l(t,e.prop,Je(e))}),t}function ae(e){try{let t=Ge(e.rulesWhen?e.rulesWhen(h):e.rules);if(S.delete(e.prop),e.required&&!t.some(e=>e.required)){let n=e.label||e.prop;t.unshift(Ke(n,I(`form.required`,{label:n})))}if(e.crossFieldValidator){let n=e.crossFieldValidator;t.push({async validator(){let e=await n(h);if(e)throw Error(e)},trigger:[`change`,`blur`]})}if(t.length===0){delete g[e.prop];return}g[e.prop]=t.map(t=>({...t,key:e.prop}))}catch(t){delete g[e.prop],S.set(e.prop,t),V(t,`callback`,e.prop)}}function G(){n.value.forEach(e=>{(e.rulesWhen||e.crossFieldValidator)&&ae(e)})}function K(e){k.forEach(t=>{e.has(t)||(_.delete(t),delete g[t],S.delete(t),delete v.value[t],delete y.value[t],delete b.value[t],E.get(t)?.abort(),E.delete(t),T.delete(t),O.delete(t),r.value.preserveRemovedFields||o(h,t))})}function oe(e=!1){try{Ye(n.value);let t=new Set(n.value.map(e=>e.prop));K(t),n.value.forEach(e=>{a(h,e.prop)||l(h,e.prop,Je(e)),ae(e),e.asyncOptions&&O.get(e.prop)!==e.asyncOptions&&(O.set(e.prop,e.asyncOptions),D(()=>ce(e,`initialize`)))}),k=t,e&&D(z)}catch(e){throw V(e,`initialize`),e}}function q(e){U(),s(h,ie(e)),G()}function se(e,t,n){return n.signal.aborted||T.get(e)!==t}async function ce(e,t){if(!e.asyncOptions)return;let{prop:n}=e,r=(T.get(n)??0)+1;T.set(n,r),E.get(n)?.abort();let i=new AbortController;E.set(n,i),y.value[n]=!0,delete b.value[n];try{let a=await e.asyncOptions(W(),{field:n,reason:t,signal:i.signal});if(se(n,r,i))return;if(!Array.isArray(a))throw TypeError(`[C_Form] ${n}.asyncOptions 必须返回数组`);v.value[n]=u([...a])}catch(e){if(se(n,r,i))return;b.value[n]=e,V(e,`async-options`,n)}finally{T.get(n)===r&&(y.value[n]=!1,E.delete(n))}}async function le(e){let t=n.value.filter(t=>t.asyncOptions&&(!e||t.prop===e));if(e&&t.length===0)throw Error(`[C_Form] 未找到异步选项字段: ${e}`);await Promise.all(t.map(e=>ce(e,`manual`)))}function ue(){let e=n.value.filter(e=>e.valueWhen);if(e.length!==0){for(let t=0;t<=e.length;t+=1){let t=!1;for(let n of e)try{let e=n.valueWhen?.(h);e!==void 0&&!i(c(h,n.prop),e)&&(l(h,n.prop,u(e)),t=!0)}catch(e){V(e,`callback`,n.prop)}if(!t)return}V(Error(`[C_Form] valueWhen 存在循环依赖,已停止继续计算`),`callback`)}}function de(e){let t=new Set(e);return n.value.filter(e=>!e.asyncOptions||!e.dependsOn?!1:(Array.isArray(e.dependsOn)?e.dependsOn:[e.dependsOn]).some(e=>t.has(e)))}function fe(e){ue(),G(),de(e).forEach(e=>{ce(e,`dependency`)}),r.value.validateOnChange&&D(()=>{J([...e]).catch(()=>void 0)})}function pe(e){fe([e])}function me(e,t){t?_.set(e,t):_.delete(e)}async function he(){if(!d.value)throw Error(`[C_Form] 表单引用不存在`);try{let e=re.value.find(e=>S.has(e.prop));if(e)throw S.get(e.prop);if(await d.value.validate(),C)throw Error(`[C_Form] 表单已卸载`);p(`validate-success`,W())}catch(e){throw C||p(`validate-error`,e),e}}async function J(e){if(!d.value)throw Error(`[C_Form] 表单引用不存在`);let t=[...new Set(Array.isArray(e)?e:[e])],n=t.find(e=>S.has(e));if(n)throw S.get(n);let r=[],i=t.flatMap(e=>{let t=_.get(e);return t?[t.validate()]:(r.push(e),[])});r.length>0&&i.push(d.value.validate(void 0,e=>r.includes(String(e.key??``))));let a=(await Promise.allSettled(i)).filter(e=>e.status===`rejected`).map(e=>e.reason);if(a.length>0)throw a}function ge(e){if(!e){d.value?.restoreValidation();return}(Array.isArray(e)?e:[e]).forEach(e=>_.get(e)?.restoreValidation())}async function Y(e){let t=n.value.filter(e).map(e=>e.prop);if(t.length===0)return!0;try{return await J(t),!0}catch{return!1}}function _e(e){let t=r.value.steps?.steps?.[e]?.key;return t?Y(e=>e.layout?.step===t):Promise.resolve(!0)}function ve(e){return Y(t=>t.layout?.tab===e)}function ye(){return Y(e=>!!e.layout?.dynamic)}function be(e){return Y(t=>t.layout?.group===e)}function xe(e){Object.entries(u(e)).forEach(([e,t])=>{l(h,e,t)}),fe(Object.keys(e))}function Se(){s(h,B()),ge(),G(),ne(`info`,r.value.resetSuccessText)}async function X(e,t,n=!1){l(h,e,u(t)),pe(e),n&&await J(e)}function Ce(e){return u(c(h,e))}async function we(e,t=!1){xe(e),t&&await J(Object.keys(e))}function Te(){return C||x.value||r.value.disabled||r.value.readonly}async function Ee(){if(Te())return!1;let e=new AbortController;w=e,x.value=!0;try{if(await he(),e.signal.aborted)return!1;let t={model:W(),form:d.value};try{await r.value.onSubmit?.(t,{signal:e.signal})}catch(t){return e.signal.aborted||V(t,`submit`),!1}return e.signal.aborted?!1:(p(`submit`,t),ne(`success`,r.value.submitSuccessText),!0)}catch{return!1}finally{w===e&&(w=void 0),x.value=!1}}function Z(){oe(!0);let e=m?.value??(r.value.mode===`edit`?r.value.initialValues:void 0);e&&q(e),ue(),D(z)}return H(n,()=>{let e=!A;e&&U(),oe(e),A=!0},{deep:!0,immediate:!0}),m&&H(m,e=>{e!==void 0&&!i(h,e)&&q(e)},{deep:!0,immediate:!0}),H(()=>[r.value.mode,r.value.initialValues],([e,t])=>{m?.value!==void 0||e!==`edit`||!t||(q(t),D(z))},{deep:!0}),H(h,e=>{j||p(`update:modelValue`,u(e))},{deep:!0,flush:`post`}),ee(()=>{C=!0,w?.abort(),E.forEach(e=>e.abort()),E.clear(),_.clear()}),{formModel:h,formRules:g,visibleOptions:re,initialize:Z,handleFieldChange:pe,setFormItemRef:me,validate:he,validateField:J,validateStep:_e,validateTab:ve,validateDynamicFields:ye,validateCustomGroup:be,clearValidation:ge,getModel:W,setFields:xe,resetFields:Se,setFieldValue:X,getFieldValue:Ce,setFieldsValue:we,submit:Ee,handleSubmit:Ee,handleReset:Se,isSubmitting:x,isDirty:L,getChangedFields:te,isFieldDirty:R,markAsClean:z,asyncOptionsCache:v,asyncLoadingMap:y,asyncErrorMap:b,reloadOptions:le}}function Ze(e,t,n){return e===void 0?t:typeof e==`function`?e(n):e}function Qe(e){return{input:t=>w(e.NInput,{...t}),textarea:t=>w(e.NInput,{...t,type:`textarea`}),inputNumber:t=>w(e.NInputNumber,{...t}),switch:t=>w(e.NSwitch,{...t}),slider:t=>w(e.NSlider,{...t}),rate:t=>w(e.NRate,{...t}),datePicker:t=>w(e.NDatePicker,{...t}),daterange:t=>w(e.NDatePicker,{...t,type:`daterange`}),timePicker:t=>w(e.NTimePicker,{...t}),cascader:t=>w(e.NCascader,{...t}),colorPicker:t=>w(e.NColorPicker,{...t}),select:(t,n)=>w(e.NSelect,{...t,options:n.children?.map(e=>({...e}))||[]}),checkbox:(t,n)=>w(e.NCheckboxGroup,{...t},{default:()=>w(e.NSpace,{},{default:()=>n.children?.map(t=>w(e.NCheckbox,{value:t.value,label:t.label,disabled:t.disabled,key:String(t.value)}))||[]})}),radio:(t,n)=>w(e.NRadioGroup,{...t},{default:()=>w(e.NSpace,{},{default:()=>n.children?.map(t=>w(e.NRadio,{value:t.value,disabled:t.disabled,key:String(t.value)},{default:()=>t.label}))||[]})}),upload:(t,n,r,i)=>{let a={...t},{value:o}=a,s=a[`onUpdate:value`];return delete a.value,delete a[`onUpdate:value`],w(e.NUpload,{...a,fileList:Array.isArray(o)?o:[],"onUpdate:fileList":e=>s?.(e)},{trigger:()=>i.slots?.uploadClick?.()||w(e.NButton,{type:`primary`},{default:()=>`选择文件`}),tip:()=>i.slots?.uploadTip?.()||null})},editor:(t,n)=>{let r={...t},{value:i}=r,a=r[`onUpdate:value`];return delete r.value,delete r[`onUpdate:value`],w(e.C_Editor,{...r,editorId:`editor-${n.prop}`,modelValue:typeof i==`string`?i:``,"onUpdate:modelValue":e=>a?.(e)})}}}const $e={};function et(e,t){if(!e.trim())throw TypeError(`[C_Form] renderer type 不能为空`);if(typeof t!=`function`)throw TypeError(`[C_Form] renderer ${e} 必须是函数`);return $e[e]=t,()=>tt(e,t)}function tt(e,t){return!$e[e]||t&&$e[e]!==t?!1:delete $e[e]}const nt=new Set([`select`,`checkbox`,`radio`,`cascader`]);function rt(e){let{formModel:t,visibleOptions:n,config:r,handleFieldChange:i,componentMap:a,instanceSlots:o,asyncOptionsCache:s,asyncLoadingMap:u,renderers:d,setFormItemRef:p,onError:m}=e,h=a,g=Qe(h),_=e=>d?.value?.[e]??$e[e]??g[e],v=e=>{let n={value:c(t,e.prop),"onUpdate:value":n=>{l(t,e.prop,n),i(e.prop)},disabled:Ze(e.disabled,r.value.disabled,t),readonly:Ze(e.readonly,r.value.readonly,t)};return e.type===`textarea`&&(n.type=`textarea`),e.placeholder&&(n.placeholder=e.placeholder),n};function y(e){let t=e.children??[];return Object.prototype.hasOwnProperty.call(s.value,e.prop)?s.value[e.prop]??[]:t}function b(e){return nt.has(e.type)?{...e,children:y(e)}:e}function x(e,t){return e.type===`select`&&u.value[e.prop]&&(t.loading=!0),t}let S=e=>{try{let t=b(e),n=_(t.type);return n?n(x(t,E(t.attrs??{},v(t))),t,r.value,{slots:o,components:h}):(m?.(TypeError(`[C_Form] 未支持的组件类型: ${t.type}`),t.prop),null)}catch(t){return m?.(t,e.prop),null}};function C(e){if(e.label)return e.help?w(`span`,{style:`display:inline-flex;align-items:center;gap:4px`},[e.label,w(h.NTooltip,{trigger:`hover`},{trigger:()=>w(`span`,{style:`cursor:help;opacity:0.5;font-size:14px`,textContent:`ⓘ`}),default:()=>e.help})]):e.label}return{renderFormItem:S,formItems:f(()=>n.value.map(e=>{let t=!!(e.required||e.rules?.some(e=>e.required)),n=C(e);return w(h.NFormItem,{label:typeof n==`string`?n:void 0,path:e.prop,key:e.prop,required:t,ref:t=>p?.(e.prop,t)},{...typeof n!=`string`&&n?{label:()=>n}:{},default:()=>S(e)})})),getBaseProps:v}}const it={class:`c-form-default`};var at=r(x({__name:`index`,props:{formItems:{},layoutConfig:{},options:{}},setup(e){return(t,n)=>(M(),h(`div`,it,[(M(!0),h(d,null,I(e.formItems,(e,t)=>(M(),p(R(e),{key:e.key??t}))),128))]))}}),[[`__scopeId`,`data-v-4313de0c`]]),ot=r(x({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},setup(e){let t=e,n=f(()=>280),r=f(()=>t.layoutConfig?.inline?.gap??16),i=f(()=>16),a=f(()=>{let e=t.layoutConfig?.inline?.align;return e===`start`||e===`end`?e:`center`}),o=f(()=>{switch(a.value){case`start`:return`flex-start`;case`end`:return`flex-end`;default:return`center`}}),s=f(()=>{switch(a.value){case`start`:return`flex-start`;case`end`:return`flex-end`;case`center`:return`center`;default:return`flex-start`}}),c=f(()=>({display:`flex`,flexWrap:`wrap`,alignItems:o.value,justifyContent:s.value,gap:`${i.value}px ${r.value}px`,width:`100%`})),l=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`form-item-${t}`},u=e=>{let r=t.options?.[e]?.layout,i={width:`${n.value}px`,flexShrink:0,display:`flex`,flexDirection:`column`};return r?.width!==void 0&&(i.width=typeof r.width==`number`?`${r.width}px`:r.width),r?.style&&Object.assign(i,r.style),i};return(t,n)=>(M(),h(`div`,{class:`c-form-inline`,style:A(c.value)},[(M(!0),h(d,null,I(e.formItems,(e,t)=>(M(),h(`div`,{key:l(e,t),class:`c-form-inline-item`,style:A(u(t))},[(M(),p(R(e)))],4))),128))],4))}}),[[`__scopeId`,`data-v-195d0124`]]);const st={class:`c-grid-layout`},ct={class:`config-header`},lt={class:`config-controls`},ut={class:`config-label`},dt={class:`item-wrapper`};var ft=r(x({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},setup(e,{expose:t}){let r=e,i=N({cols:24,gutter:16,responsive:!0}),a=f(()=>r.layoutConfig?.grid||{}),o=f(()=>a.value.showConfigPanel),s=f(()=>a.value.showStats),c=f(()=>({cols:o.value?i.cols:a.value.cols??24,gutter:o.value?i.gutter:a.value.gutter??16,responsive:o.value?i.responsive:a.value.responsive??!0})),l=f(()=>({cols:c.value.cols,xGap:c.value.gutter,yGap:c.value.gutter,responsive:c.value.responsive?`screen`:`self`})),u=f(()=>[{key:`cols`,label:`列数`,component:`NInputNumber`,value:f({get:()=>i.cols,set:e=>i.cols=e}),props:{min:1,max:48,size:`small`}},{key:`gutter`,label:`间距`,component:`NInputNumber`,value:f({get:()=>i.gutter,set:e=>i.gutter=e}),props:{min:0,max:48,size:`small`}},{key:`responsive`,label:`响应式`,component:`NSwitch`,value:f({get:()=>i.responsive,set:e=>i.responsive=e}),props:{size:`small`}}]),_=f(()=>`列数: ${c.value.cols} | 间距: ${c.value.gutter}px | 项目: ${r.formItems.length}个`),b=(e,t)=>String(e.key)||e.props?.path||`grid-item-${t}`,x=(e,t)=>{let n=r.options?.[e]?.layout;return n?.[t]??n?.grid?.[t]},S=()=>{let{cols:e}=c.value;return e<=12?e:e<=24?12:8},C=e=>{let t=x(e,`span`),n=x(e,`offset`),r=x(e,`suffix`);return{span:typeof t==`number`&&t>0&&t<=c.value.cols?t:S(),offset:typeof n==`number`&&n>=0&&n<c.value.cols?n:0,suffix:!!r}};return H(a,e=>{e.cols!==void 0&&(i.cols=e.cols),e.gutter!==void 0&&(i.gutter=e.gutter),e.responsive!==void 0&&(i.responsive=e.responsive)},{immediate:!0}),t({updateGridConfig:e=>Object.assign(i,e),getCurrentConfig:()=>({...c.value}),getGridInfo:()=>({...c.value,itemCount:r.formItems.length})}),(t,r)=>{let i=q,a=J,c=he,f=ae;return M(),h(`div`,st,[m(` 配置面板 `),o.value?(M(),p(i,{key:0,size:`small`,bordered:!1,class:`config-panel`},{header:U(()=>[g(`div`,ct,[y(n,{name:`mdi:view-grid`,size:18}),r[0]||=g(`span`,null,`网格配置`,-1)])]),default:U(()=>[g(`div`,lt,[(M(!0),h(d,null,I(u.value,e=>(M(),h(`div`,{key:e.key,class:`config-item`},[g(`span`,ut,z(e.label)+`:`,1),(M(),p(R(e.component),E({value:e.value,"onUpdate:value":t=>e.value=t},{ref_for:!0},e.props),null,16,[`value`,`onUpdate:value`]))]))),128))])]),_:1})):m(`v-if`,!0),m(` 网格容器 `),y(c,E(l.value,{class:`grid-container`}),{default:U(()=>[(M(!0),h(d,null,I(e.formItems,(e,t)=>(M(),p(a,E({key:b(e,t)},{ref_for:!0},C(t),{class:`grid-item`}),{default:U(()=>[g(`div`,dt,[(M(),p(R(e)))])]),_:2},1040))),128))]),_:1},16),m(` 统计信息 `),s.value?(M(),p(f,{key:1,type:`info`,"show-icon":!1,size:`small`,class:`grid-stats`},{header:U(()=>[y(n,{name:`mdi:information-outline`,size:16}),r[1]||=v(` 网格信息 `,-1)]),default:U(()=>[v(` `+z(_.value),1)]),_:1})):m(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-5debeeab`]]);const pt={class:`c-form-card`},mt={class:`flex items-center gap-2`},ht={class:`config-controls`},gt={class:`config-item`},_t={class:`flex items-center gap-2`},vt={class:`text-xs min-w-12`},yt={class:`config-item`},bt={class:`config-item`},xt={class:`config-item`},St={class:`flex items-center gap-3`},Ct={class:`card-header`},wt={class:`header-info`},Tt={class:`header-text`},Et={key:0},Dt={class:`header-actions`},Ot={class:`field-stats`},kt={class:`card-content`},At={key:0,class:`progress-section`},jt={class:`action-content`},Mt={class:`status-summary`},Nt={class:`status-item`},Pt={class:`progress-display`},Ft={class:`text-sm min-w-12`},It={class:`action-buttons`};var Lt=r(x({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},formData:{default:()=>({})}},setup(e){let t=e,r=F(20),i=F(!0),a=F(!0),o=F(!0),s=F(`vertical`),c=F({}),l=f(()=>t.layoutConfig?.card?.groups||[]),u=f(()=>l.value.length>0),_=f(()=>t.layoutConfig?.card?.showLayoutConfig??!0),b=f(()=>t.layoutConfig?.card?.showActionPanel??!0),x=f(()=>u.value?`layout-${s.value}`:`layout-single`),S=f(()=>{if(!u.value)return[];let e=new Map;return l.value.forEach(t=>{e.set(t.key,[])}),t.formItems.forEach((n,r)=>{let i=(t.options?.[r])?.layout?.group||l.value[0]?.key||`default`;e.has(i)||e.set(i,[]),e.get(i).push(n)}),l.value.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),C=f(()=>{let e=Object.keys(c.value);return e.length>0&&e.every(e=>c.value[e])}),w=f(()=>{if(!t.options||t.options.length===0)return 0;let e=t.options.filter(e=>{let n=t.formData?.[e.prop||``];return T(n)}).length;return Math.round(e/t.options.length*100)}),T=e=>e==null?!1:Array.isArray(e)?e.length>0:typeof e==`string`?e.trim()!==``:!0,E=e=>t.options?t.options.filter(t=>t.layout?.group===e.config.key).filter(e=>{let n=t.formData?.[e.prop||``];return T(n)}).length:0,D=e=>{if(e.items.length===0)return 0;let t=E(e);return Math.round(t/e.items.length*100)},k=e=>{let t={basic:`mdi:account`,contact:`mdi:phone`,preferences:`mdi:cog`,settings:`mdi:cog`,info:`mdi:information`,default:`mdi:form-select`};return t[e]||t.default},ee=e=>{c.value[e]=!c.value[e]},N=()=>{let e=!C.value;l.value.forEach(t=>{c.value[t.key]=e})};return j(()=>{let e=t.layoutConfig?.card;e?.direction&&(s.value=e.direction),e?.showProgress!==void 0&&(o.value=e.showProgress),l.value.forEach(e=>{c.value[e.key]=!1})}),(t,l)=>{let f=Se,T=Te,j=ve,P=ye,F=q,L=G,te=K,B=_e;return M(),h(`div`,pt,[m(` 布局配置面板 `),u.value&&_.value?(M(),p(F,{key:0,class:`layout-config-panel`,bordered:!1},{header:U(()=>[g(`div`,mt,[y(n,{name:`mdi:cog`,size:18}),l[4]||=g(`span`,null,`布局配置`,-1)])]),default:U(()=>[g(`div`,ht,[g(`div`,gt,[l[5]||=g(`span`,null,`卡片间距`,-1),g(`div`,_t,[y(f,{value:r.value,"onUpdate:value":l[0]||=e=>r.value=e,min:12,max:32,step:4,class:`w-24`},null,8,[`value`]),g(`span`,vt,z(r.value)+`px`,1)])]),g(`div`,yt,[l[6]||=g(`span`,null,`显示图标`,-1),y(T,{value:i.value,"onUpdate:value":l[1]||=e=>i.value=e,size:`small`},null,8,[`value`])]),g(`div`,bt,[l[7]||=g(`span`,null,`可折叠`,-1),y(T,{value:a.value,"onUpdate:value":l[2]||=e=>a.value=e,size:`small`},null,8,[`value`])]),g(`div`,xt,[l[10]||=g(`span`,null,`布局方向`,-1),y(P,{value:s.value,"onUpdate:value":l[3]||=e=>s.value=e,size:`small`},{default:U(()=>[y(j,{value:`vertical`},{default:U(()=>[...l[8]||=[v(`垂直`,-1)]]),_:1}),y(j,{value:`horizontal`},{default:U(()=>[...l[9]||=[v(`水平`,-1)]]),_:1})]),_:1},8,[`value`])])])]),_:1})):m(`v-if`,!0),m(` 表单内容区域 `),g(`div`,{class:O([`form-content`,x.value]),style:A({gap:`${r.value}px`})},[m(` 无分组时的单卡片模式 `),u.value?(M(),h(d,{key:1},[m(` 有分组时的多卡片模式 `),(M(!0),h(d,null,I(S.value,e=>(M(),p(F,{key:e.config.key,class:O([`group-card`,[`${e.config.key}-card`,{collapsed:a.value&&c.value[e.config.key]}]]),hoverable:``},{header:U(()=>[g(`div`,Ct,[g(`div`,wt,[i.value&&e.config.icon?(M(),p(n,{key:0,name:e.config.icon,size:20,class:`card-icon`},null,8,[`name`])):i.value?(M(),p(n,{key:1,name:k(e.config.key),size:20,class:`card-icon`},null,8,[`name`])):m(`v-if`,!0),g(`div`,Tt,[g(`h3`,null,z(e.config.title),1),e.config.description?(M(),h(`p`,Et,z(e.config.description),1)):m(`v-if`,!0)])]),g(`div`,Dt,[m(` 统计信息 `),g(`div`,Ot,[y(L,{value:e.items.length,type:`info`,"show-zero":``},null,8,[`value`]),y(L,{value:`${E(e)}/${e.items.length}`,type:E(e)===e.items.length?`success`:`warning`},null,8,[`value`,`type`])]),m(` 折叠按钮 `),a.value?(M(),p(te,{key:0,quaternary:``,circle:``,size:`small`,onClick:t=>ee(e.config.key)},{icon:U(()=>[y(n,{name:c.value[e.config.key]?`mdi:chevron-down`:`mdi:chevron-up`,size:18},null,8,[`name`])]),_:2},1032,[`onClick`])):m(`v-if`,!0)])])]),default:U(()=>[W(g(`div`,kt,[m(` 进度指示器 `),o.value?(M(),h(`div`,At,[y(B,{percentage:D(e),color:D(e)===100?`#52c41a`:`#1890ff`,"show-indicator":!1,class:`mb-4`},null,8,[`percentage`,`color`])])):m(`v-if`,!0),m(` 表单项 `),(M(!0),h(d,null,I(e.items,(e,t)=>(M(),p(R(e),{key:e.key??t}))),128))],512),[[ne,!c.value[e.config.key]]])]),_:2},1032,[`class`]))),128))],64)):(M(),p(F,{key:0,class:`single-card`,hoverable:``},{header:U(()=>[g(`div`,St,[i.value?(M(),p(n,{key:0,name:`mdi:form-select`,size:18,style:{color:`#3b82f6`}})):m(`v-if`,!0),l[11]||=g(`span`,null,`表单信息`,-1)])]),default:U(()=>[(M(!0),h(d,null,I(e.formItems,(e,t)=>(M(),p(R(e),{key:e.key??t}))),128))]),_:1}))],6),m(` 统一操作面板 `),u.value&&b.value?(M(),p(F,{key:1,class:`action-panel`,bordered:!1},{default:U(()=>[g(`div`,jt,[g(`div`,Mt,[g(`div`,Nt,[l[12]||=g(`span`,{class:`label`},`完成进度:`,-1),g(`div`,Pt,[y(B,{percentage:w.value,"show-indicator":!1,color:w.value===100?`#52c41a`:`#1890ff`,class:`flex-1`},null,8,[`percentage`,`color`]),g(`span`,Ft,z(w.value)+`%`,1)])])]),g(`div`,It,[a.value?(M(),p(te,{key:0,onClick:N},{icon:U(()=>[y(n,{name:C.value?`mdi:unfold-more-horizontal`:`mdi:unfold-less-horizontal`,size:18},null,8,[`name`])]),default:U(()=>[v(` `+z(C.value?`展开全部`:`折叠全部`),1)]),_:1})):m(`v-if`,!0)])])]),_:1})):m(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-28320dd2`]]);const Rt={class:`c-form-tabs`},zt={key:0,class:`single-panel`},Bt={class:`tabs-container`},Vt={key:0,class:`tab-header`},Ht={class:`tab-description`},Ut={class:`tab-form-items`},Wt={key:0,class:`tabs-actions`};var Gt=r(x({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},beforeTabChange:{},validateTab:{}},emits:[`tab-change`,`tab-before-change`,`tab-validate`,`tab-close`,`tab-add`],setup(e,{expose:t,emit:r}){let i=e,a=r,o=F(``),s=N({}),c=()=>({tabs:[],type:`line`,size:`medium`,placement:`top`,animated:!0,closable:!1,addable:!1,showTabHeader:!0,showActions:!1,showCount:!1,validateBeforeSwitch:!1,defaultTab:``}),l=f(()=>{let e=c(),t=i.layoutConfig?.tabs||{};return{...e,...t}}),u=f(()=>l.value.tabs.length>0),_=f(()=>{if(!u.value)return[];let e=new Map;return l.value.tabs.forEach(t=>{e.set(t.key,[])}),i.formItems.forEach((t,n)=>{let r=(i.options?.[n])?.layout?.tab||l.value.tabs[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),l.value.tabs.map(t=>({config:t,items:e.get(t.key)||[]}))}),b=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?String(n.path):`tab-item-${t}`},x=async()=>{if(!o.value)return!0;try{let e=i.validateTab?await i.validateTab(o.value):!0;return a(`tab-validate`,o.value),s[o.value]=e,e}catch{return s[o.value]=!1,!1}},S=async e=>{if(!e||e===o.value)return!0;if(!_.value.some(t=>t.config.key===e))return!1;try{if(l.value.validateBeforeSwitch&&o.value&&!await x())return!1;if(o.value){if(await i.beforeTabChange?.(o.value,e)===!1)return!1;a(`tab-before-change`,o.value,e)}return o.value=e,a(`tab-change`,e,_.value.findIndex(t=>t.config.key===e)),!0}catch{return!1}},C=e=>{S(e)},w=e=>{a(`tab-close`,e)},T=()=>{a(`tab-add`)},E=()=>{if(!u.value||_.value.length===0)return;let{defaultTab:e}=l.value,t=e||_.value[0]?.config.key;t&&t!==o.value&&(o.value=t,D(()=>{let e=_.value.findIndex(e=>e.config.key===t);e>=0&&a(`tab-change`,t,e)}))};return j(()=>{E()}),H(f(()=>l.value.tabs.map(e=>e.key).join(`,`)),()=>{o.value&&!l.value.tabs.some(e=>e.key===o.value)&&E()}),H(()=>l.value.defaultTab,e=>{e&&e!==o.value&&S(e)}),t({switchToTab:S,validateCurrentTab:x,currentTab:P(o),totalTabs:f(()=>_.value.length),tabsWithItems:P(_)}),(t,r)=>{let i=G,a=X,s=fe,c=Ee,f=Z,E=K;return M(),h(`div`,Rt,[m(` 无标签配置时的单一面板模式 `),u.value?(M(),h(d,{key:1},[m(` 有标签配置时的分标签模式 `),g(`div`,Bt,[y(f,{value:o.value,"onUpdate:value":[r[0]||=e=>o.value=e,C],type:l.value.type,size:l.value.size,placement:l.value.placement,animated:l.value.animated,closable:l.value.closable,addable:l.value.addable,class:`form-tabs`,onClose:w,onAdd:T},{default:U(()=>[(M(!0),h(d,null,I(_.value,e=>(M(),p(c,{key:e.config.key,name:e.config.key,tab:e.config.title,disabled:e.config.disabled,closable:e.config.closable},{tab:U(()=>[y(a,{align:`center`,size:8},{default:U(()=>[e.config.icon?(M(),p(n,{key:0,name:e.config.icon,size:16,class:`tab-icon`},null,8,[`name`])):m(`v-if`,!0),g(`span`,null,z(e.config.title),1),l.value.showCount?(M(),p(i,{key:1,value:e.items.length,max:99,show:e.items.length>0,type:`info`},null,8,[`value`,`show`])):m(`v-if`,!0)]),_:2},1024)]),default:U(()=>[l.value.showTabHeader&&e.config.description?(M(),h(`div`,Vt,[g(`p`,Ht,z(e.config.description),1)])):m(`v-if`,!0),g(`div`,Ut,[(M(!0),h(d,null,I(e.items,(e,t)=>(M(),p(R(e),{key:b(e,t)}))),128))]),e.items.length===0?(M(),p(s,{key:1,description:`暂无表单项`,class:`tab-empty`})):m(`v-if`,!0)]),_:2},1032,[`name`,`tab`,`disabled`,`closable`]))),128))]),_:1},8,[`value`,`type`,`size`,`placement`,`animated`,`closable`,`addable`]),m(` 标签页操作按钮 `),l.value.showActions?(M(),h(`div`,Wt,[y(a,{justify:`space-between`},{default:U(()=>[y(a,null,{default:U(()=>[l.value.validateBeforeSwitch?(M(),p(E,{key:0,type:`primary`,size:`small`,onClick:x},{default:U(()=>[y(n,{name:`carbon:star-check`,size:14,style:{"margin-right":`4px`}}),r[1]||=v(` 验证当前标签 `,-1)]),_:1})):m(`v-if`,!0)]),_:1}),y(a,null,{default:U(()=>[L(t.$slots,`tab-actions`,{currentTab:o.value,totalTabs:_.value.length,validateTab:x,switchToTab:S},void 0,!0)]),_:3})]),_:3})])):m(`v-if`,!0)])],2112)):(M(),h(`div`,zt,[(M(!0),h(d,null,I(e.formItems,(e,t)=>(M(),p(R(e),{key:b(e,t)}))),128))]))])}}}),[[`__scopeId`,`data-v-cbd5e822`]]);const Kt={class:`c-form-steps`},qt={key:0,class:`single-panel`},Jt={key:0,class:`step-header`},Yt={class:`step-title`},Xt={key:0,class:`step-description`},Zt={class:`step-form-items`},Qt={class:`steps-actions`};var $t=r(x({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},beforeStepChange:{},validateStep:{},submitting:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},emits:[`step-change`,`step-before-change`,`step-validate`],setup(e,{expose:t,emit:r}){let i=e,a=r,o=F(0),s=F(!1),c=N({}),l=f(()=>{let e=i.layoutConfig?.steps||{};return{steps:e.steps||[],vertical:e.vertical||!1,size:e.size||`medium`,showStepHeader:e.showStepHeader!==!1,validateBeforeNext:e.validateBeforeNext||!1,prevButtonText:e.prevButtonText||`上一步`,nextButtonText:e.nextButtonText||`下一步`,defaultStep:e.defaultStep||0}}),u=f(()=>l.value.steps.length>0),_=f(()=>{if(!u.value)return[];let e=new Map;return l.value.steps.forEach(t=>{e.set(t.key,[])}),i.formItems.forEach((t,n)=>{let r=(i.options?.[n])?.layout?.step||l.value.steps[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),l.value.steps.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),b=f(()=>{for(let e=0;e<=o.value;e++)if(c[e]===!1)return`error`;return`process`}),x=f(()=>o.value===0),S=f(()=>o.value===_.value.length-1),C=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`step-item-${t}`},w=async()=>{try{let e=i.validateStep?await i.validateStep(o.value):!0;return a(`step-validate`,o.value),c[o.value]=e,e}catch{return c[o.value]=!1,!1}},T=async(e,t=!1)=>{if(s.value||i.submitting||i.disabled||e<0||e>=_.value.length)return!1;if(e===o.value)return!0;try{return s.value=!0,t&&l.value.validateBeforeNext&&!await w()||await i.beforeStepChange?.(o.value,e)===!1?!1:(a(`step-before-change`,o.value,e),o.value=e,a(`step-change`,o.value,_.value[o.value].config.key),!0)}catch{return!1}finally{s.value=!1}},E=async()=>{await T(o.value+1,!0)},D=()=>{T(o.value-1)},k=async e=>{_.value[e]?.config.disabled||await T(e,e>o.value)},A=()=>{if(!u.value||_.value.length===0)return;let{defaultStep:e}=l.value;o.value=e>=0&&e<_.value.length&&!_.value[e]?.config.disabled?e:0};return H(f(()=>l.value.steps.map(e=>e.key).join(`,`)),()=>{A()}),j(()=>{A()}),t({nextStep:E,previousStep:D,goToStep:k,validateCurrentStep:w,currentStep:P(o),totalSteps:f(()=>_.value.length)}),(t,r)=>{let i=Ce,a=we,c=q,f=K,w=X;return M(),h(`div`,Kt,[m(` 无步骤配置时的单一面板模式 `),u.value?(M(),h(d,{key:1},[m(` 有步骤配置时的分步骤模式 `),g(`div`,{class:O([`steps-container`,{"is-vertical":l.value.vertical}])},[m(` 步骤指示器 `),y(a,{current:o.value+1,status:b.value,size:l.value.size,vertical:l.value.vertical,class:`steps-indicator`},{default:U(()=>[(M(!0),h(d,null,I(_.value,t=>(M(),p(i,{key:t.config.key,title:t.config.title,description:t.config.description,disabled:t.config.disabled||s.value||e.submitting||e.disabled},null,8,[`title`,`description`,`disabled`]))),128))]),_:1},8,[`current`,`status`,`size`,`vertical`]),m(` 步骤内容区域 `),y(c,{class:`steps-content`,bordered:!1},{default:U(()=>[(M(!0),h(d,null,I(_.value,(e,t)=>W((M(),h(`div`,{key:e.config.key,class:`step-panel`},[m(` 步骤标题和描述 `),l.value.showStepHeader?(M(),h(`div`,Jt,[g(`h3`,Yt,z(e.config.title),1),e.config.description?(M(),h(`p`,Xt,z(e.config.description),1)):m(`v-if`,!0)])):m(`v-if`,!0),m(` 步骤内的表单项 `),g(`div`,Zt,[(M(!0),h(d,null,I(e.items,(e,t)=>(M(),p(R(e),{key:C(e,t)}))),128))])])),[[ne,o.value===t]])),128))]),_:1}),m(` 步骤操作按钮 `),g(`div`,Qt,[y(w,{justify:`space-between`},{default:U(()=>[o.value>0?(M(),p(f,{key:0,disabled:s.value||e.submitting||e.disabled,onClick:D},{default:U(()=>[y(n,{name:`mdi:chevron-left-first`,size:16,style:{"margin-right":`4px`}}),v(` `+z(l.value.prevButtonText),1)]),_:1},8,[`disabled`])):m(`v-if`,!0),r[0]||=g(`div`,null,null,-1),y(w,null,{default:U(()=>[o.value<_.value.length-1?(M(),p(f,{key:0,type:`primary`,loading:s.value,disabled:e.submitting||e.disabled,onClick:E},{default:U(()=>[v(z(l.value.nextButtonText)+` `,1),y(n,{name:`mdi:chevron-right-last`,size:16,style:{"margin-left":`4px`}})]),_:1},8,[`loading`,`disabled`])):m(`v-if`,!0),L(t.$slots,`step-actions`,{currentStep:o.value,totalSteps:_.value.length,isFirstStep:x.value,isLastStep:S.value,nextStep:E,previousStep:D,goToStep:k},void 0,!0)]),_:3})]),_:3})])],2)],2112)):(M(),h(`div`,qt,[(M(!0),h(d,null,I(e.formItems,(e,t)=>(M(),p(R(e),{key:C(e,t)}))),128))]))])}}}),[[`__scopeId`,`data-v-ee5e4509`]]);const en={maxFields:20,autoSave:!1,enableSort:!0,showControls:!0,showItemControls:!0},tn=[{label:`文本输入`,value:`input`},{label:`数字输入`,value:`inputNumber`},{label:`多行文本`,value:`textarea`},{label:`下拉选择`,value:`select`},{label:`开关切换`,value:`switch`},{label:`评分组件`,value:`rate`}];function nn(e,t){let n=t.label||`动态字段 ${e}`;return{...t,id:t.id?.trim()||`dynamic_field_${e}`,type:t.type||tn[0].value,prop:t.prop?.trim()||`dynamic_${e}`,label:n,placeholder:t.placeholder||`请输入${n||`内容`}`,visible:t.visible??!0,removable:t.removable??!0,created:t.created??Date.now(),layout:t.layout||{span:12}}}const rn=()=>{let e=N({config:{...en},baseFields:[],dynamicFields:[],hiddenFieldIds:new Set,fieldCounter:0,isInitialized:!1}),t=f(()=>[...e.baseFields,...e.dynamicFields.map(t=>({...t,show:!e.hiddenFieldIds.has(t.prop)}))]),n=f(()=>t.value.filter(e=>e.show!==!1)),r=f(()=>e.dynamicFields.length),i=f(()=>e.hiddenFieldIds.size),a=f(()=>e.dynamicFields.length<e.config.maxFields),o=f(()=>e.hiddenFieldIds.size===0),s=(n={})=>{if(!a.value)return null;e.fieldCounter++;let r=nn(e.fieldCounter,n);return t.value.some(e=>e.prop===r.prop)?null:(e.dynamicFields.push(r),r)},c=t=>{if(e.dynamicFields.length===0)return null;let n=t??e.dynamicFields.length-1;if(n<0||n>=e.dynamicFields.length||e.dynamicFields[n]?.removable===!1)return null;let r=e.dynamicFields.splice(n,1)[0];return r&&e.hiddenFieldIds.delete(r.prop),r??null},l=()=>{let t=e.dynamicFields.length;return e.dynamicFields.forEach(t=>e.hiddenFieldIds.delete(t.prop)),e.dynamicFields.length=0,e.fieldCounter=0,t},u=n=>t.value.some(e=>e.prop===n)?(e.hiddenFieldIds.has(n)?e.hiddenFieldIds.delete(n):e.hiddenFieldIds.add(n),!e.hiddenFieldIds.has(n)):!1,d=()=>(o.value?e.dynamicFields.forEach(t=>{e.hiddenFieldIds.add(t.prop)}):e.hiddenFieldIds.clear(),o.value),p=t=>{let n={...t};n.maxFields!==void 0&&(n.maxFields=Math.max(0,Math.trunc(n.maxFields))),Object.assign(e.config,n)};return{state:P(e),allFields:t,visibleFields:n,dynamicFieldsCount:r,hiddenFieldsCount:i,canAddMoreFields:a,allVisible:o,FIELD_TYPE_OPTIONS:tn,addField:s,removeField:c,clearDynamicFields:l,toggleFieldVisibility:u,toggleAllVisibility:d,updateConfig:p,exportConfig:()=>{let t={baseFields:e.baseFields,dynamicFields:e.dynamicFields,config:e.config,hiddenFields:Array.from(e.hiddenFieldIds),timestamp:Date.now()};return JSON.stringify(t,null,2)},initialize:(t,n={})=>{e.baseFields=[...t],e.dynamicFields.length=0,e.hiddenFieldIds.clear(),e.fieldCounter=0,Object.assign(e.config,en),p(n),e.isInitialized=!0}}},an=Symbol(`dynamicFormState`),on={class:`c-form-dynamic`},sn={key:0,class:`dynamic-controls`},cn={class:`max-fields-config`},ln={class:`dynamic-stats`},un={class:`dynamic-controls-fallback`},dn={class:`dynamic-form-items`};var fn=r(x({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},dynamicFormState:{default:null}},emits:[`field-add`,`field-remove`,`fields-clear`],setup(e,{expose:t,emit:r}){let i=e,a=r,o=T(an,null),s=f(()=>i.dynamicFormState||o),c=f(()=>!!s.value),l=f(()=>i.layoutConfig?.dynamic?.grid?.cols??24),u=f(()=>i.layoutConfig?.dynamic?.grid?.gutter??16),_=f(()=>i.layoutConfig?.dynamic?.controls?.showControls!==!1),b=f(()=>s.value?.state.config.maxFields??i.layoutConfig?.dynamic?.dynamic?.maxFields??50),x=f(()=>s.value?.dynamicFieldsCount.value??0),S=f(()=>s.value?.canAddMoreFields.value??!1),C=f(()=>i.formItems.length),w=()=>{let e=s.value?.addField();e&&a(`field-add`,e)},E=()=>{let e=s.value?.removeField();e&&a(`field-remove`,e.prop)},D=()=>{(s.value?.clearDynamicFields()??0)>0&&a(`fields-clear`)},k=e=>{e!==null&&s.value?.updateConfig({maxFields:e})},A=(e,t)=>e.key?.toString()||e.props?.path?.toString()||`dynamic-item-${t}`,j=e=>{let t=i.options?.[e]?.layout?.span;return typeof t==`number`&&t>0&&t<=l.value?t:Math.min(12,l.value)},ee=e=>{if(!s.value)return!1;let t=e.props?.path?.toString()||e.key?.toString()||``;return s.value.state.dynamicFields.some(e=>e.prop===t)};return t({addField:()=>s.value?.addField(),removeField:()=>s.value?.removeField(),clearAllDynamic:()=>s.value?.clearDynamicFields(),isDynamicStateAvailable:c,dynamicState:s}),(t,r)=>{let i=G,a=K,o=X,s=Y,f=Q,T=q,N=ae,P=J,F=he;return M(),h(`div`,on,[m(` 动态控制面板 `),_.value&&c.value?(M(),h(`div`,sn,[y(T,{size:`small`,title:`动态表单控制`,bordered:!1},{"header-extra":U(()=>[y(i,{value:x.value,type:`warning`},{default:U(()=>[y(n,{name:`mdi:layers`,size:16})]),_:1},8,[`value`])]),default:U(()=>[y(o,{justify:`space-between`,align:`center`},{default:U(()=>[y(o,null,{default:U(()=>[y(a,{size:`small`,type:`primary`,disabled:!S.value,onClick:w},{icon:U(()=>[y(n,{name:`mdi:plus`,size:14})]),default:U(()=>[v(` 添加字段 (`+z(x.value)+`/`+z(b.value)+`) `,1)]),_:1},8,[`disabled`]),y(a,{size:`small`,type:`warning`,disabled:x.value===0,onClick:E},{icon:U(()=>[y(n,{name:`mdi:minus`,size:14})]),default:U(()=>[r[0]||=v(` 移除字段 `,-1)]),_:1},8,[`disabled`]),y(a,{size:`small`,type:`error`,disabled:x.value===0,onClick:D},{icon:U(()=>[y(n,{name:`mdi:delete-sweep`,size:14})]),default:U(()=>[r[1]||=v(` 清空动态 `,-1)]),_:1},8,[`disabled`])]),_:1}),m(` 最大字段数配置 `),g(`div`,cn,[r[2]||=g(`span`,null,`最大字段数:`,-1),y(s,{value:b.value,"onUpdate:value":k,min:5,max:50,size:`small`,style:{width:`100px`}},null,8,[`value`])])]),_:1}),g(`div`,ln,[y(o,null,{default:U(()=>[y(f,{type:`info`},{default:U(()=>[v(`总字段: `+z(C.value),1)]),_:1}),y(f,{type:`warning`},{default:U(()=>[v(`动态: `+z(x.value),1)]),_:1})]),_:1})])]),_:1})])):_.value&&!c.value?(M(),h(d,{key:1},[m(` 状态不可用时的提示 `),g(`div`,un,[y(T,{size:`small`,title:`动态表单控制 (静态模式)`,bordered:!1},{default:U(()=>[y(N,{type:`info`,"show-icon":``},{icon:U(()=>[y(n,{name:`mdi:information-outline`,size:16})]),default:U(()=>[r[3]||=v(` 当前为静态模式,如需动态功能请在父组件中提供动态表单状态。 `,-1)]),_:1})]),_:1})])],2112)):m(`v-if`,!0),m(` 表单项渲染区域 `),g(`div`,dn,[y(F,{cols:l.value,"x-gap":u.value,"y-gap":u.value},{default:U(()=>[(M(!0),h(d,null,I(e.formItems,(e,t)=>(M(),p(P,{key:A(e,t),span:j(t)},{default:U(()=>[g(`div`,{class:O([`dynamic-item-wrapper`,{"is-dynamic-field":ee(e)}])},[(M(),p(R(e)))],2)]),_:2},1032,[`span`]))),128))]),_:1},8,[`cols`,`x-gap`,`y-gap`])])])}}}),[[`__scopeId`,`data-v-1779d19c`]]);const pn={class:`custom-layout`},mn={class:`toolbar-content`},hn={class:`mode-section`},gn={class:`stats-section`},_n={class:`stat-item`},vn={class:`stat-value`},yn={class:`stat-item`},bn={class:`stat-value`},xn={class:`actions-section`},Sn={class:`design-tools`},Cn={class:`tool-group`},wn={key:0,class:`canvas-hint`},Tn={class:`areas-container`},En={class:`area-header`},Dn={class:`area-info`},On=[`onClick`],kn={class:`area-controls`},An={class:`field-preview`},jn={class:`field-label`},Mn={class:`field-type`},Nn={key:0,class:`area-drop-zone`},Pn={class:`field-name`},Fn={class:`field-type-tag`},In={key:0,class:`empty-layout`},Ln={key:1,class:`form-container`},Rn={class:`form-areas`};var zn=r(x({__name:`index`,props:{options:{default:()=>[]},formItems:{default:()=>[]},formData:{default:()=>({})}},emits:[`fields-change`,`export-data`],setup(e,{emit:t}){let n=e,r=t,i=F(!0),a=F([]),o=F([]),s=F(``),c=f(()=>n.options?.length>0?n.options:n.formItems?.map(e=>{let t=e.props;return{prop:t?.path||``,label:t?.label||t?.path||``,type:`input`,show:!0}}).filter(e=>e.prop)||[]),l=f(()=>a.value.reduce((e,t)=>e+t.fields.length,0)),u=()=>`${Date.now()}-${Math.random().toString(36).substring(2,11)}`,_=e=>({input:`输入框`,select:`下拉框`,radio:`单选框`,checkbox:`复选框`,textarea:`文本域`,date:`日期`,number:`数字`})[e]||e,b=e=>n.formItems?.find(t=>t.props?.path===e.prop)||null,x=e=>{let t={id:u(),title:`${e===`horizontal`?`水平`:e===`vertical`?`垂直`:`网格`}区域`,type:e,fields:[]};a.value.push(t)},S=e=>{let t=a.value.findIndex(t=>t.id===e);t!==-1&&a.value.splice(t,1)},C=e=>({...e,id:`${e.prop}-${u()}`}),w=(e,t)=>{let n=a.value.find(t=>t.id===e);if(n){let e=n.fields.findIndex(e=>e.id===t);e!==-1&&n.fields.splice(e,1)}},T=()=>{let e=JSON.stringify(a.value,null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`layout-config-${Date.now()}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)},E=()=>{a.value=[]},D=()=>{r(`export-data`,{layout:a.value,formData:n.formData,timestamp:new Date().toISOString()})};return re(()=>{let e=new Set(a.value.flatMap(e=>e.fields.map(e=>e.prop)));o.value=c.value.filter(t=>!e.has(t.prop)).map(e=>({...e,id:e.prop}))}),H(()=>a.value,()=>{r(`fields-change`,a.value.flatMap(e=>e.fields.map(e=>({...e,id:void 0}))))},{deep:!0}),(e,t)=>{let n=K,r=oe,c=q,u=ge,f=Q,k=fe;return M(),h(`div`,pn,[m(` 顶部工具栏 `),y(c,{bordered:!1,class:`toolbar-card`},{default:U(()=>[g(`div`,mn,[m(` 模式切换 `),g(`div`,hn,[t[12]||=g(`span`,{class:`section-label`},`自定义模式:`,-1),y(r,null,{default:U(()=>[y(n,{type:i.value?`primary`:`default`,onClick:t[0]||=e=>i.value=!0,size:`small`},{default:U(()=>[...t[10]||=[v(` 🎨 设计模式 `,-1)]]),_:1},8,[`type`]),y(n,{type:i.value?`default`:`primary`,onClick:t[1]||=e=>i.value=!1,size:`small`},{default:U(()=>[...t[11]||=[v(` 📝 填写模式 `,-1)]]),_:1},8,[`type`])]),_:1})]),m(` 统计信息 `),g(`div`,gn,[g(`div`,_n,[g(`div`,vn,z(a.value.length),1),t[13]||=g(`div`,{class:`stat-label`},`自定义区域`,-1)]),g(`div`,yn,[g(`div`,bn,z(l.value),1),t[14]||=g(`div`,{class:`stat-label`},`字段总数`,-1)])]),m(` 操作按钮 `),g(`div`,xn,[i.value?(M(),h(d,{key:0},[y(n,{secondary:``,onClick:T,size:`small`},{default:U(()=>[...t[15]||=[v(` 💾 保存布局 `,-1)]]),_:1}),y(n,{secondary:``,onClick:E,size:`small`},{default:U(()=>[...t[16]||=[v(` 🔄 重置布局 `,-1)]]),_:1})],64)):(M(),p(n,{key:1,secondary:``,onClick:D,size:`small`},{default:U(()=>[...t[17]||=[v(` 📊 导出数据 `,-1)]]),_:1}))])])]),_:1}),m(` 设计模式工具面板 `),i.value?(M(),p(c,{key:0,class:`design-panel`,title:`🎨 设计工具`},{default:U(()=>[g(`div`,Sn,[g(`div`,Cn,[t[21]||=g(`span`,{class:`group-label`},`添加区域:`,-1),y(n,{onClick:t[2]||=e=>x(`horizontal`),size:`small`},{default:U(()=>[...t[18]||=[v(` ➡️ 水平区域 `,-1)]]),_:1}),y(n,{onClick:t[3]||=e=>x(`vertical`),size:`small`},{default:U(()=>[...t[19]||=[v(` ⬇️ 垂直区域 `,-1)]]),_:1}),y(n,{onClick:t[4]||=e=>x(`grid`),size:`small`},{default:U(()=>[...t[20]||=[v(` ⚏ 网格区域 `,-1)]]),_:1})])])]),_:1})):m(`v-if`,!0),m(` 主画布区域 `),g(`div`,{class:O([`layout-canvas`,{"design-mode":i.value}])},[m(` 设计模式 `),i.value?(M(),h(d,{key:0},[a.value.length===0?(M(),h(`div`,wn,[...t[22]||=[g(`div`,{class:`hint-content`},[g(`h3`,null,`🎨 开始自定义你的布局`),g(`p`,null,`点击上方按钮添加区域`)],-1)]])):(M(),h(d,{key:1},[m(` 区域列表 `),g(`div`,Tn,[(M(!0),h(d,null,I(a.value,e=>(M(),h(`div`,{key:e.id,class:O([`custom-area`,`area-${e.type}`])},[g(`div`,En,[g(`div`,Dn,[s.value===e.id?(M(),p(u,{key:0,value:e.title,"onUpdate:value":t=>e.title=t,size:`small`,onBlur:t[5]||=e=>s.value=``,onKeyup:t[6]||=ie(e=>s.value=``,[`enter`]),class:`title-input`},null,8,[`value`,`onUpdate:value`])):(M(),h(`span`,{key:1,class:`area-title`,onClick:t=>s.value=e.id},z(e.title),9,On)),y(f,{size:`small`},{default:U(()=>[v(z(e.fields.length)+` 字段`,1)]),_:2},1024)]),g(`div`,kn,[y(n,{text:``,onClick:t=>S(e.id),size:`tiny`,type:`error`,title:`删除区域`},{default:U(()=>[...t[23]||=[v(` 🗑️ `,-1)]]),_:1},8,[`onClick`])])]),m(` 字段容器(可拖入) `),y(V(Ae),{modelValue:e.fields,"onUpdate:modelValue":t=>e.fields=t,class:`area-fields`,group:{name:`form-fields`,pull:!0,put:!0},animation:200,"ghost-class":`field-ghost`,"item-key":`id`},{default:U(()=>[(M(!0),h(d,null,I(e.fields,r=>(M(),h(`div`,{key:r.id,class:`field-item`},[g(`div`,An,[t[25]||=g(`span`,{class:`drag-handle`},`⠿`,-1),g(`span`,jn,z(r.label||r.prop),1),g(`span`,Mn,z(_(r.type)),1),y(n,{text:``,size:`tiny`,type:`error`,onClick:t=>w(e.id,r.id),title:`移出字段`},{default:U(()=>[...t[24]||=[v(` ✕ `,-1)]]),_:1},8,[`onClick`])])]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`]),e.fields.length===0?(M(),h(`div`,Nn,` 从下方字段池拖拽字段到这里 `)):m(`v-if`,!0)],2))),128))])],2112)),m(` 字段池(可拖出) `),y(c,{class:`field-pool`,title:`📦 可用字段`},{default:U(()=>[y(V(Ae),{modelValue:o.value,"onUpdate:modelValue":t[7]||=e=>o.value=e,class:`pool-fields-grid`,group:{name:`form-fields`,pull:`clone`,put:!0},animation:200,sort:!1,"ghost-class":`field-ghost`,"item-key":`id`,clone:C},{default:U(()=>[(M(!0),h(d,null,I(o.value,e=>(M(),h(`div`,{key:e.id,class:`pool-field`},[t[26]||=g(`span`,{class:`drag-handle`},`⠿`,-1),g(`span`,Pn,z(e.label||e.prop),1),g(`span`,Fn,z(_(e.type)),1)]))),128))]),_:1},8,[`modelValue`])]),_:1})],64)):(M(),h(d,{key:1},[m(` 填写模式 `),a.value.length===0?(M(),h(`div`,In,[y(k,{description:`尚未设计布局`},{extra:U(()=>[y(n,{onClick:t[8]||=e=>i.value=!0,type:`primary`},{default:U(()=>[...t[27]||=[v(` 🎨 开始设计 `,-1)]]),_:1})]),_:1})])):(M(),h(`div`,Ln,[g(`div`,Rn,[(M(!0),h(d,null,I(a.value,e=>(M(),h(`div`,{key:e.id,class:O([`form-area`,`area-${e.type}`])},[e.fields.length>0?(M(),p(c,{key:0,title:e.title},{default:U(()=>[g(`div`,{class:O([`area-form-items`,`layout-${e.type}`])},[(M(!0),h(d,null,I(e.fields,e=>(M(),p(R(b(e)),{key:e.prop}))),128))],2)]),_:2},1032,[`title`])):(M(),p(k,{key:1,description:`此区域暂无字段`,size:`small`},{extra:U(()=>[y(n,{onClick:t[9]||=e=>i.value=!0,size:`small`,secondary:``},{default:U(()=>[...t[28]||=[v(` 🎨 添加字段 `,-1)]]),_:1})]),_:1}))],2))),128))])]))],64))],2)])}}}),[[`__scopeId`,`data-v-858beb3e`]]),Bn=r(x({name:`C_Form`,__name:`index`,props:{options:{},modelValue:{},config:{default:()=>({})},renderers:{}},emits:[`submit`,`update:modelValue`,`validate-success`,`validate-error`],setup(t,{expose:n,emit:r}){let i=b(()=>import(`./C_Editor.js`).then(e=>e.C_Editor)),a={default:at,inline:ot,grid:ft,card:Lt,tabs:Gt,steps:$t,dynamic:fn,custom:zn},o={NFormItem:me,NInput:ge,NInputNumber:Y,NSwitch:Te,NSlider:Se,NRate:be,NDatePicker:de,NTimePicker:De,NCascader:se,NColorPicker:ue,NSelect:xe,NCheckboxGroup:le,NCheckbox:ce,NRadioGroup:ye,NRadio:ve,NUpload:ke,NButton:K,NSpace:X,NTooltip:Oe,C_Editor:i},s=t,c=r,l=Le(),u=f(()=>Ve(Re(s.config,l))),{t:d}=e(()=>u.value.locale),h=F(null),{formModel:g,formRules:x,visibleOptions:w,initialize:T,handleFieldChange:D,validate:O,validateField:A,validateStep:j,validateTab:ee,validateDynamicFields:N,validateCustomGroup:P,clearValidation:te,getModel:B,setFields:ne,resetFields:H,setFieldValue:re,getFieldValue:W,setFieldsValue:ie,handleSubmit:ae,handleReset:G,isDirty:oe,getChangedFields:q,isFieldDirty:fe,markAsClean:he,asyncOptionsCache:J,asyncLoadingMap:_e,asyncErrorMap:Ce,reloadOptions:we,setFormItemRef:Ee,isSubmitting:Z,submit:Q}=Xe(f(()=>s.options),u,h,c,f(()=>s.modelValue)),Ae=f(()=>g.value),je=()=>B(),Me=f(()=>({form:h.value,model:Ae.value,validate:O,validateField:A,reset:H,setFields:ne,getModel:je,clearValidation:te,submit:Q,reloadOptions:we,submitting:Z.value})),Ne=S(),Pe=()=>Object.keys(Ne?.slots??{}).filter(e=>![`action`,`action-extra`,`step-actions`].includes(e)),{formItems:Fe}=rt({formModel:g,visibleOptions:w,config:u,handleFieldChange:D,componentMap:o,instanceSlots:Ne?.slots,asyncOptionsCache:J,asyncLoadingMap:_e,renderers:f(()=>s.renderers),setFormItemRef:Ee,onError:(e,t)=>u.value.onError?.(e,{source:`render`,field:t})}),Ie=f(()=>a[u.value.layout]||a.default),ze=f(()=>({type:u.value.layout,grid:u.value.grid,inline:u.value.inline,card:u.value.card,tabs:u.value.tabs,steps:u.value.steps,dynamic:u.value.dynamic,custom:u.value.custom})),Be=f(()=>He(u.value)),Ue=f(()=>u.value.layout===`steps`?{beforeStepChange:Ze,validateStep:Qe,submitting:Z.value,disabled:u.value.disabled||u.value.readonly}:u.value.layout===`tabs`?{beforeTabChange:qe,validateTab:Je}:{}),$=(e,...t)=>{let n=u.value[e];if(typeof n==`function`)try{let e=n(...t);e instanceof Promise&&e.catch(e=>u.value.onError?.(e,{source:`callback`}))}catch(e){u.value.onError?.(e,{source:`callback`})}},We=e=>{u.value.onFieldsChange?.(e)},Ge=e=>{c(`validate-success`,e)},Ke=e=>{c(`validate-error`,e)},qe=async(e,t)=>{try{return await u.value.onTabBeforeChange?.(e,t)!==!1}catch(e){return u.value.onError?.(e,{source:`callback`}),!1}},Je=async e=>{let t=await ee(e);return t&&u.value.onTabValidate?.(e),t},Ye=(e,t)=>{u.value.onStepChange?.(e,t)},Ze=async(e,t)=>{try{return await u.value.onStepBeforeChange?.(e,t)!==!1}catch(e){return u.value.onError?.(e,{source:`callback`}),!1}},Qe=async e=>{try{return await j(e)?(u.value.onStepValidate?.(e),!0):!1}catch{return!1}};return n({validate:O,validateField:A,validateStep:j,validateTab:ee,validateDynamicFields:N,validateCustomGroup:P,clearValidation:te,getModel:B,setFields:ne,resetFields:H,setFieldValue:re,getFieldValue:W,setFieldsValue:ie,formRef:h,formModel:g,initialize:T,layoutType:f(()=>u.value.layout),shouldShowDefaultActions:Be,isDirty:oe,getChangedFields:q,isFieldDirty:fe,markAsClean:he,asyncLoadingMap:_e,asyncErrorMap:Ce,reloadOptions:we,isSubmitting:Z,submit:Q}),(e,t)=>(M(),p(V(pe),E({ref_key:`formRef`,ref:h,model:V(g),rules:V(x),"validate-on-rule-change":!1,"label-placement":u.value.labelPlacement,"label-width":u.value.labelWidth,size:u.value.size,disabled:u.value.disabled,readonly:u.value.readonly},e.$attrs),{default:U(()=>[m(` 布局组件渲染 `),(M(),p(R(Ie.value),E({"form-items":V(Fe),"layout-config":ze.value,options:V(w),"form-data":V(g)},Ue.value,{onTabChange:t[0]||=(e,t)=>$(`onTabChange`,e,t),onStepChange:Ye,onFieldAdd:t[1]||=e=>$(`onFieldAdd`,e),onFieldRemove:t[2]||=e=>$(`onFieldRemove`,e),onFieldToggle:t[3]||=(e,t)=>$(`onFieldToggle`,e,t),onFieldsClear:t[4]||=e=>$(`onFieldsClear`),onRenderModeChange:t[5]||=e=>$(`onRenderModeChange`,e),onGroupToggle:t[6]||=(e,t)=>$(`onGroupToggle`,e,t),onGroupReset:t[7]||=e=>$(`onGroupReset`,e),onValidateSuccess:Ge,onValidateError:Ke,onFieldsChange:We}),_({"step-actions":U(t=>[L(e.$slots,`step-actions`,E(t,{submit:V(Q),submitting:V(Z)}),()=>[t.isLastStep&&u.value.showActions?(M(),p(V(K),{key:0,type:`primary`,loading:V(Z),disabled:V(Z)||u.value.disabled||u.value.readonly,onClick:V(Q)},{default:U(()=>[v(z(u.value.submitText||V(d)(`common.submit`)),1)]),_:1},8,[`loading`,`disabled`,`onClick`])):m(`v-if`,!0)],!0)]),_:2},[I(Pe(),t=>({name:t,fn:U(n=>[L(e.$slots,t,k(C(n)),void 0,!0)])}))]),1040,[`form-items`,`layout-config`,`options`,`form-data`])),m(` 表单操作按钮区域(只在特定布局中显示) `),Be.value?(M(),p(V(me),{key:0,style:{"margin-top":`20px`}},{default:U(()=>[L(e.$slots,`action`,k(C(Me.value)),()=>[y(V(X),{justify:`end`,style:{width:`100%`}},{default:U(()=>[y(V(K),{disabled:V(Z)||u.value.disabled||u.value.readonly,onClick:V(G)},{default:U(()=>[v(z(u.value.resetText||V(d)(`common.reset`)),1)]),_:1},8,[`disabled`,`onClick`]),L(e.$slots,`action-extra`,k(C(Me.value)),void 0,!0),y(V(K),{type:`primary`,loading:V(Z),disabled:V(Z)||u.value.disabled||u.value.readonly,onClick:V(ae)},{default:U(()=>[v(z(u.value.submitText||V(d)(`common.submit`)),1)]),_:1},8,[`loading`,`disabled`,`onClick`])]),_:3})],!0)]),_:3})):m(`v-if`,!0)]),_:3},16,[`model`,`rules`,`label-placement`,`label-width`,`size`,`disabled`,`readonly`]))}}),[[`__scopeId`,`data-v-6ce5207d`]]);export{Ve as _,et as a,Xe as c,Pe as d,Ue as f,Re as g,Be as h,rn as i,We as l,Ie as m,an as n,tt as o,ze as p,tn as r,rt as s,Bn as t,$ as u,He as v,Le as y};
package/dist/config.cjs DELETED
@@ -1 +0,0 @@
1
- require(`./chunk.cjs`);let e=require(`vue`),t=require(`naive-ui`);const n=Symbol(`robot-component-feedback`),r=Symbol(`robot-component-locale`),i={"common.confirm":`确定`,"common.cancel":`取消`,"common.save":`保存`,"common.submit":`提交`,"common.reset":`重置`,"common.retry":`重试`,"common.edit":`编辑`,"common.detail":`详情`,"common.delete":`删除`,"common.select":`选择`,"common.print":`打印`,"common.loading":`正在加载`,"table.loading":`正在加载数据`,"table.loadFailed":`数据加载失败`,"table.deleteTitle":`确认删除`,"table.deleteContent":`确定要删除这条记录吗?`,"table.deleteSuccess":`删除成功`,"table.deleteFailed":`删除失败`,"table.detailFailed":`获取详情失败`,"table.moreActions":`更多操作`,"table.actionFailed":`{action}失败`,"table.cancelSelection":`取消选择`,"table.columnSettings":`列设置`,"table.export":`导出`,"table.settings":`表格设置`,"table.selectedCount":`已选择 {count} 项`,"table.addRow":`增行`,"table.insertRow":`插行`,"table.deleteRow":`删除行`,"table.copyRow":`复制行`,"table.moveUp":`上移`,"table.moveDown":`下移`,"table.addRowSuccess":`添加行成功`,"table.insertRowSuccess":`插入行成功`,"table.deleteRowSuccess":`删除行成功`,"table.copyRowSuccess":`复制行成功`,"table.moveUpSuccess":`行已上移`,"table.moveDownSuccess":`行已下移`,"table.selectRowFirst":`请先选择一行数据`,"table.selectDeleteRowFirst":`请先选择要删除的行`,"table.selectCopyRowFirst":`请先选择要复制的行`,"table.firstRow":`已经是第一行`,"table.lastRow":`已经是最后一行`,"table.deleteRowContent":`确定要删除选中的行吗?此操作不可撤销。`,"table.confirmDeleteRow":`确认删除`,"table.printTargetMissing":`打印元素未找到`,"table.downloadTargetMissing":`下载元素未找到`,"table.invalidRowKeys":`表格存在 {count} 个缺失或重复的行键`,"form.required":`{label}不能为空`,"search.valueRequired":`请输入搜索内容,或选择筛选条件`,"search.failed":`搜索失败`,"captcha.trigger":`点击进行人机验证`,"captcha.verifying":`正在验证…`,"captcha.success":`验证成功`,"captcha.failed":`验证失败,请重试`,"captcha.reset":`重新验证`,"captcha.puzzleFailed":`拼图验证失败`,"captcha.verifyFailed":`服务端验证失败`,"captcha.loadFailed":`验证码加载失败`},a={"common.confirm":`Confirm`,"common.cancel":`Cancel`,"common.save":`Save`,"common.submit":`Submit`,"common.reset":`Reset`,"common.retry":`Retry`,"common.edit":`Edit`,"common.detail":`Details`,"common.delete":`Delete`,"common.select":`Select`,"common.print":`Print`,"common.loading":`Loading`,"table.loading":`Loading data`,"table.loadFailed":`Failed to load data`,"table.deleteTitle":`Confirm deletion`,"table.deleteContent":`Are you sure you want to delete this record?`,"table.deleteSuccess":`Deleted successfully`,"table.deleteFailed":`Delete failed`,"table.detailFailed":`Failed to load details`,"table.moreActions":`More actions`,"table.actionFailed":`{action} failed`,"table.cancelSelection":`Clear selection`,"table.columnSettings":`Column settings`,"table.export":`Export`,"table.settings":`Table settings`,"table.selectedCount":`{count} selected`,"table.addRow":`Add row`,"table.insertRow":`Insert row`,"table.deleteRow":`Delete row`,"table.copyRow":`Copy row`,"table.moveUp":`Move up`,"table.moveDown":`Move down`,"table.addRowSuccess":`Row added`,"table.insertRowSuccess":`Row inserted`,"table.deleteRowSuccess":`Row deleted`,"table.copyRowSuccess":`Row copied`,"table.moveUpSuccess":`Row moved up`,"table.moveDownSuccess":`Row moved down`,"table.selectRowFirst":`Select a row first`,"table.selectDeleteRowFirst":`Select a row to delete first`,"table.selectCopyRowFirst":`Select a row to copy first`,"table.firstRow":`This is already the first row`,"table.lastRow":`This is already the last row`,"table.deleteRowContent":`Are you sure you want to delete the selected row? This cannot be undone.`,"table.confirmDeleteRow":`Delete row`,"table.printTargetMissing":`Print target was not found`,"table.downloadTargetMissing":`Download target was not found`,"table.invalidRowKeys":`{count} table row keys are missing or duplicated`,"form.required":`{label} is required`,"search.valueRequired":`Enter a search term or choose a filter`,"search.failed":`Search failed`,"captcha.trigger":`Click to verify`,"captcha.verifying":`Verifying…`,"captcha.success":`Verified`,"captcha.failed":`Verification failed. Try again.`,"captcha.reset":`Verify again`,"captcha.puzzleFailed":`Puzzle verification failed`,"captcha.verifyFailed":`Server verification failed`,"captcha.loadFailed":`Failed to load captcha`},o=(e,t)=>t?e.replace(/\{([^{}]+)\}/g,(e,n)=>Object.prototype.hasOwnProperty.call(t,n)?String(t[n]):e):e;function s(t){let n=(0,e.getCurrentInstance)()?(0,e.inject)(r,{}):{};return{t:(r,s)=>{let c=(0,e.toValue)(t)??{},l=c.t??n.t;if(l)return l(r,s);let u=(c.locale??n.locale??`zh-CN`)===`en-US`?a:i;return o(c.messages?.[r]??n.messages?.[r]??u[r]??r,s)}}}function c(r){let i=(0,e.getCurrentInstance)(),a=i?(0,e.inject)(n,{}):{},o=null,s=null;if(i){try{o=(0,t.useMessage)()}catch{o=null}try{s=(0,t.useDialog)()}catch{s=null}}let c=()=>(0,e.toValue)(r)??a,l=(e,t,n)=>{let r=c()[e];r?r(t,n):o?.[e](t)};return{success:e=>l(`success`,e),error:(e,t)=>l(`error`,e,t),warning:e=>l(`warning`,e),info:e=>l(`info`,e),confirm:async e=>{let t=c().confirm;return t?await t(e)!==!1:s?new Promise(t=>{let n=!1,r=e=>{n||(n=!0,t(e))},i=e.type??`warning`;s[i]({title:e.title,content:e.content,positiveText:e.positiveText,negativeText:e.negativeText,onPositiveClick:()=>r(!0),onNegativeClick:()=>r(!1),onClose:()=>r(!1)})}):typeof window<`u`&&typeof window.confirm==`function`?window.confirm(`${e.title}\n${e.content}`):!1}}}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
package/dist/config.d.cts DELETED
@@ -1,33 +0,0 @@
1
- import { InjectionKey, MaybeRefOrGetter } from "vue";
2
-
3
- //#region src/config.d.ts
4
- interface ConfirmOptions {
5
- title: string;
6
- content: string;
7
- positiveText?: string;
8
- negativeText?: string;
9
- type?: 'warning' | 'error' | 'info' | 'success';
10
- }
11
- interface ComponentFeedback {
12
- success?: (message: string) => void;
13
- error?: (message: string, cause?: unknown) => void;
14
- warning?: (message: string) => void;
15
- info?: (message: string) => void;
16
- confirm?: (options: ConfirmOptions) => boolean | Promise<boolean>;
17
- }
18
- type ComponentLocaleName = 'zh-CN' | 'en-US';
19
- interface ComponentLocale {
20
- locale?: ComponentLocaleName;
21
- messages?: Record<string, string>;
22
- t?: (key: string, params?: Record<string, string | number>) => string;
23
- }
24
- declare const COMPONENT_FEEDBACK_KEY: InjectionKey<ComponentFeedback>;
25
- declare const COMPONENT_LOCALE_KEY: InjectionKey<ComponentLocale>;
26
- /** Resolve component messages from local, global, then built-in dictionaries. */
27
- declare function useComponentLocale(local?: MaybeRefOrGetter<ComponentLocale | undefined>): {
28
- t: (key: string, params?: Record<string, string | number>) => string;
29
- };
30
- /** Reuse Naive providers when present and safely degrade to injected/no-op feedback. */
31
- declare function useComponentFeedback(local?: MaybeRefOrGetter<ComponentFeedback | undefined>): Required<ComponentFeedback>;
32
- //#endregion
33
- export { ComponentLocaleName as a, useComponentLocale as c, ComponentLocale as i, COMPONENT_LOCALE_KEY as n, ConfirmOptions as o, ComponentFeedback as r, useComponentFeedback as s, COMPONENT_FEEDBACK_KEY as t };
package/dist/config.d.ts DELETED
@@ -1,33 +0,0 @@
1
- import { InjectionKey, MaybeRefOrGetter } from "vue";
2
-
3
- //#region src/config.d.ts
4
- interface ConfirmOptions {
5
- title: string;
6
- content: string;
7
- positiveText?: string;
8
- negativeText?: string;
9
- type?: 'warning' | 'error' | 'info' | 'success';
10
- }
11
- interface ComponentFeedback {
12
- success?: (message: string) => void;
13
- error?: (message: string, cause?: unknown) => void;
14
- warning?: (message: string) => void;
15
- info?: (message: string) => void;
16
- confirm?: (options: ConfirmOptions) => boolean | Promise<boolean>;
17
- }
18
- type ComponentLocaleName = 'zh-CN' | 'en-US';
19
- interface ComponentLocale {
20
- locale?: ComponentLocaleName;
21
- messages?: Record<string, string>;
22
- t?: (key: string, params?: Record<string, string | number>) => string;
23
- }
24
- declare const COMPONENT_FEEDBACK_KEY: InjectionKey<ComponentFeedback>;
25
- declare const COMPONENT_LOCALE_KEY: InjectionKey<ComponentLocale>;
26
- /** Resolve component messages from local, global, then built-in dictionaries. */
27
- declare function useComponentLocale(local?: MaybeRefOrGetter<ComponentLocale | undefined>): {
28
- t: (key: string, params?: Record<string, string | number>) => string;
29
- };
30
- /** Reuse Naive providers when present and safely degrade to injected/no-op feedback. */
31
- declare function useComponentFeedback(local?: MaybeRefOrGetter<ComponentFeedback | undefined>): Required<ComponentFeedback>;
32
- //#endregion
33
- export { ComponentLocaleName as a, useComponentLocale as c, ComponentLocale as i, COMPONENT_LOCALE_KEY as n, ConfirmOptions as o, ComponentFeedback as r, useComponentFeedback as s, COMPONENT_FEEDBACK_KEY as t };
package/dist/config.js DELETED
@@ -1 +0,0 @@
1
- import{getCurrentInstance as e,inject as t,toValue as n}from"vue";import{useDialog as r,useMessage as i}from"naive-ui";const a=Symbol(`robot-component-feedback`),o=Symbol(`robot-component-locale`),s={"common.confirm":`确定`,"common.cancel":`取消`,"common.save":`保存`,"common.submit":`提交`,"common.reset":`重置`,"common.retry":`重试`,"common.edit":`编辑`,"common.detail":`详情`,"common.delete":`删除`,"common.select":`选择`,"common.print":`打印`,"common.loading":`正在加载`,"table.loading":`正在加载数据`,"table.loadFailed":`数据加载失败`,"table.deleteTitle":`确认删除`,"table.deleteContent":`确定要删除这条记录吗?`,"table.deleteSuccess":`删除成功`,"table.deleteFailed":`删除失败`,"table.detailFailed":`获取详情失败`,"table.moreActions":`更多操作`,"table.actionFailed":`{action}失败`,"table.cancelSelection":`取消选择`,"table.columnSettings":`列设置`,"table.export":`导出`,"table.settings":`表格设置`,"table.selectedCount":`已选择 {count} 项`,"table.addRow":`增行`,"table.insertRow":`插行`,"table.deleteRow":`删除行`,"table.copyRow":`复制行`,"table.moveUp":`上移`,"table.moveDown":`下移`,"table.addRowSuccess":`添加行成功`,"table.insertRowSuccess":`插入行成功`,"table.deleteRowSuccess":`删除行成功`,"table.copyRowSuccess":`复制行成功`,"table.moveUpSuccess":`行已上移`,"table.moveDownSuccess":`行已下移`,"table.selectRowFirst":`请先选择一行数据`,"table.selectDeleteRowFirst":`请先选择要删除的行`,"table.selectCopyRowFirst":`请先选择要复制的行`,"table.firstRow":`已经是第一行`,"table.lastRow":`已经是最后一行`,"table.deleteRowContent":`确定要删除选中的行吗?此操作不可撤销。`,"table.confirmDeleteRow":`确认删除`,"table.printTargetMissing":`打印元素未找到`,"table.downloadTargetMissing":`下载元素未找到`,"table.invalidRowKeys":`表格存在 {count} 个缺失或重复的行键`,"form.required":`{label}不能为空`,"search.valueRequired":`请输入搜索内容,或选择筛选条件`,"search.failed":`搜索失败`,"captcha.trigger":`点击进行人机验证`,"captcha.verifying":`正在验证…`,"captcha.success":`验证成功`,"captcha.failed":`验证失败,请重试`,"captcha.reset":`重新验证`,"captcha.puzzleFailed":`拼图验证失败`,"captcha.verifyFailed":`服务端验证失败`,"captcha.loadFailed":`验证码加载失败`},c={"common.confirm":`Confirm`,"common.cancel":`Cancel`,"common.save":`Save`,"common.submit":`Submit`,"common.reset":`Reset`,"common.retry":`Retry`,"common.edit":`Edit`,"common.detail":`Details`,"common.delete":`Delete`,"common.select":`Select`,"common.print":`Print`,"common.loading":`Loading`,"table.loading":`Loading data`,"table.loadFailed":`Failed to load data`,"table.deleteTitle":`Confirm deletion`,"table.deleteContent":`Are you sure you want to delete this record?`,"table.deleteSuccess":`Deleted successfully`,"table.deleteFailed":`Delete failed`,"table.detailFailed":`Failed to load details`,"table.moreActions":`More actions`,"table.actionFailed":`{action} failed`,"table.cancelSelection":`Clear selection`,"table.columnSettings":`Column settings`,"table.export":`Export`,"table.settings":`Table settings`,"table.selectedCount":`{count} selected`,"table.addRow":`Add row`,"table.insertRow":`Insert row`,"table.deleteRow":`Delete row`,"table.copyRow":`Copy row`,"table.moveUp":`Move up`,"table.moveDown":`Move down`,"table.addRowSuccess":`Row added`,"table.insertRowSuccess":`Row inserted`,"table.deleteRowSuccess":`Row deleted`,"table.copyRowSuccess":`Row copied`,"table.moveUpSuccess":`Row moved up`,"table.moveDownSuccess":`Row moved down`,"table.selectRowFirst":`Select a row first`,"table.selectDeleteRowFirst":`Select a row to delete first`,"table.selectCopyRowFirst":`Select a row to copy first`,"table.firstRow":`This is already the first row`,"table.lastRow":`This is already the last row`,"table.deleteRowContent":`Are you sure you want to delete the selected row? This cannot be undone.`,"table.confirmDeleteRow":`Delete row`,"table.printTargetMissing":`Print target was not found`,"table.downloadTargetMissing":`Download target was not found`,"table.invalidRowKeys":`{count} table row keys are missing or duplicated`,"form.required":`{label} is required`,"search.valueRequired":`Enter a search term or choose a filter`,"search.failed":`Search failed`,"captcha.trigger":`Click to verify`,"captcha.verifying":`Verifying…`,"captcha.success":`Verified`,"captcha.failed":`Verification failed. Try again.`,"captcha.reset":`Verify again`,"captcha.puzzleFailed":`Puzzle verification failed`,"captcha.verifyFailed":`Server verification failed`,"captcha.loadFailed":`Failed to load captcha`},l=(e,t)=>t?e.replace(/\{([^{}]+)\}/g,(e,n)=>Object.prototype.hasOwnProperty.call(t,n)?String(t[n]):e):e;function u(r){let i=e()?t(o,{}):{};return{t:(e,t)=>{let a=n(r)??{},o=a.t??i.t;if(o)return o(e,t);let u=(a.locale??i.locale??`zh-CN`)===`en-US`?c:s;return l(a.messages?.[e]??i.messages?.[e]??u[e]??e,t)}}}function d(o){let s=e(),c=s?t(a,{}):{},l=null,u=null;if(s){try{l=i()}catch{l=null}try{u=r()}catch{u=null}}let d=()=>n(o)??c,f=(e,t,n)=>{let r=d()[e];r?r(t,n):l?.[e](t)};return{success:e=>f(`success`,e),error:(e,t)=>f(`error`,e,t),warning:e=>f(`warning`,e),info:e=>f(`info`,e),confirm:async e=>{let t=d().confirm;return t?await t(e)!==!1:u?new Promise(t=>{let n=!1,r=e=>{n||(n=!0,t(e))},i=e.type??`warning`;u[i]({title:e.title,content:e.content,positiveText:e.positiveText,negativeText:e.negativeText,onPositiveClick:()=>r(!0),onNegativeClick:()=>r(!1),onClose:()=>r(!1)})}):typeof window<`u`&&typeof window.confirm==`function`?window.confirm(`${e.title}\n${e.content}`):!1}}}export{u as i,o as n,d as r,a as t};