@robot-admin/naive-ui-components 0.3.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 (352) hide show
  1. package/README.md +257 -0
  2. package/dist/C_ActionBar-DWN-woTc.css.map +1 -0
  3. package/dist/C_ActionBar.cjs +5 -0
  4. package/dist/C_ActionBar.d.cts +2 -0
  5. package/dist/C_ActionBar.d.ts +2 -0
  6. package/dist/C_ActionBar.js +4 -0
  7. package/dist/C_ActionBar2.js +196 -0
  8. package/dist/C_ActionBar2.js.map +1 -0
  9. package/dist/C_AntV-AFKyK6hH.css.map +1 -0
  10. package/dist/C_AntV.cjs +8 -0
  11. package/dist/C_AntV.d.cts +2 -0
  12. package/dist/C_AntV.d.ts +2 -0
  13. package/dist/C_AntV.js +4 -0
  14. package/dist/C_AntV2.js +3150 -0
  15. package/dist/C_AntV2.js.map +1 -0
  16. package/dist/C_Barcode-P_EFj8dC.css.map +1 -0
  17. package/dist/C_Barcode.cjs +4 -0
  18. package/dist/C_Barcode.d.cts +2 -0
  19. package/dist/C_Barcode.d.ts +2 -0
  20. package/dist/C_Barcode.js +3 -0
  21. package/dist/C_Barcode2.js +68 -0
  22. package/dist/C_Barcode2.js.map +1 -0
  23. package/dist/C_Captcha-C-ef41xw.css.map +1 -0
  24. package/dist/C_Captcha.cjs +4 -0
  25. package/dist/C_Captcha.d.cts +2 -0
  26. package/dist/C_Captcha.d.ts +2 -0
  27. package/dist/C_Captcha.js +3 -0
  28. package/dist/C_Captcha2.js +155 -0
  29. package/dist/C_Captcha2.js.map +1 -0
  30. package/dist/C_Cascade-D9kNsjsV.css.map +1 -0
  31. package/dist/C_Cascade.cjs +4 -0
  32. package/dist/C_Cascade.d.cts +2 -0
  33. package/dist/C_Cascade.d.ts +2 -0
  34. package/dist/C_Cascade.js +3 -0
  35. package/dist/C_Cascade2.js +103 -0
  36. package/dist/C_Cascade2.js.map +1 -0
  37. package/dist/C_City-BCQ4ipiK.css.map +1 -0
  38. package/dist/C_City.cjs +4 -0
  39. package/dist/C_City.d.cts +2 -0
  40. package/dist/C_City.d.ts +2 -0
  41. package/dist/C_City.js +3 -0
  42. package/dist/C_City2.js +841 -0
  43. package/dist/C_City2.js.map +1 -0
  44. package/dist/C_Code-C9kvvEmO.css.map +1 -0
  45. package/dist/C_Code.cjs +5 -0
  46. package/dist/C_Code.d.cts +2 -0
  47. package/dist/C_Code.d.ts +2 -0
  48. package/dist/C_Code.js +4 -0
  49. package/dist/C_Code2.js +346 -0
  50. package/dist/C_Code2.js.map +1 -0
  51. package/dist/C_CollapsePanel-BUJHuYcU.css.map +1 -0
  52. package/dist/C_CollapsePanel.cjs +6 -0
  53. package/dist/C_CollapsePanel.d.cts +2 -0
  54. package/dist/C_CollapsePanel.d.ts +2 -0
  55. package/dist/C_CollapsePanel.js +4 -0
  56. package/dist/C_CollapsePanel2.js +319 -0
  57. package/dist/C_CollapsePanel2.js.map +1 -0
  58. package/dist/C_Cron-yx2Ob4Jl.css.map +1 -0
  59. package/dist/C_Cron.cjs +15 -0
  60. package/dist/C_Cron.d.cts +2 -0
  61. package/dist/C_Cron.d.ts +2 -0
  62. package/dist/C_Cron.js +4 -0
  63. package/dist/C_Cron2.js +1209 -0
  64. package/dist/C_Cron2.js.map +1 -0
  65. package/dist/C_Date.cjs +4 -0
  66. package/dist/C_Date.d.cts +2 -0
  67. package/dist/C_Date.d.ts +2 -0
  68. package/dist/C_Date.js +3 -0
  69. package/dist/C_Date2.js +219 -0
  70. package/dist/C_Date2.js.map +1 -0
  71. package/dist/C_Draggable-C483syRC.css.map +1 -0
  72. package/dist/C_Draggable.cjs +5 -0
  73. package/dist/C_Draggable.d.cts +2 -0
  74. package/dist/C_Draggable.d.ts +2 -0
  75. package/dist/C_Draggable.js +3 -0
  76. package/dist/C_Draggable2.js +295 -0
  77. package/dist/C_Draggable2.js.map +1 -0
  78. package/dist/C_Editor-Bp0SyIEw.css.map +1 -0
  79. package/dist/C_Editor.cjs +4 -0
  80. package/dist/C_Editor.d.cts +2 -0
  81. package/dist/C_Editor.d.ts +2 -0
  82. package/dist/C_Editor.js +3 -0
  83. package/dist/C_Editor2.js +160 -0
  84. package/dist/C_Editor2.js.map +1 -0
  85. package/dist/C_FilePreview-CPqvhoCy.css.map +1 -0
  86. package/dist/C_FilePreview.cjs +6 -0
  87. package/dist/C_FilePreview.d.cts +2 -0
  88. package/dist/C_FilePreview.d.ts +2 -0
  89. package/dist/C_FilePreview.js +3 -0
  90. package/dist/C_FilePreview2.js +1031 -0
  91. package/dist/C_FilePreview2.js.map +1 -0
  92. package/dist/C_Form-Jx7PY3sT.css.map +1 -0
  93. package/dist/C_Form.cjs +15 -0
  94. package/dist/C_Form.d.cts +2 -0
  95. package/dist/C_Form.d.ts +2 -0
  96. package/dist/C_Form.js +4 -0
  97. package/dist/C_Form2.js +2510 -0
  98. package/dist/C_Form2.js.map +1 -0
  99. package/dist/C_FormSearch-DvRgxlRn.css.map +1 -0
  100. package/dist/C_FormSearch.cjs +6 -0
  101. package/dist/C_FormSearch.d.cts +2 -0
  102. package/dist/C_FormSearch.d.ts +2 -0
  103. package/dist/C_FormSearch.js +3 -0
  104. package/dist/C_FormSearch2.js +356 -0
  105. package/dist/C_FormSearch2.js.map +1 -0
  106. package/dist/C_FormulaEditor-DtGkt4T_.css.map +1 -0
  107. package/dist/C_FormulaEditor.cjs +13 -0
  108. package/dist/C_FormulaEditor.d.cts +2 -0
  109. package/dist/C_FormulaEditor.d.ts +2 -0
  110. package/dist/C_FormulaEditor.js +4 -0
  111. package/dist/C_FormulaEditor2.js +1433 -0
  112. package/dist/C_FormulaEditor2.js.map +1 -0
  113. package/dist/C_FullCalendar-BF7H0YIx.css.map +1 -0
  114. package/dist/C_FullCalendar.cjs +9 -0
  115. package/dist/C_FullCalendar.d.cts +2 -0
  116. package/dist/C_FullCalendar.d.ts +2 -0
  117. package/dist/C_FullCalendar.js +3 -0
  118. package/dist/C_FullCalendar2.js +377 -0
  119. package/dist/C_FullCalendar2.js.map +1 -0
  120. package/dist/C_Guide.cjs +4 -0
  121. package/dist/C_Guide.d.cts +2 -0
  122. package/dist/C_Guide.d.ts +2 -0
  123. package/dist/C_Guide.js +3 -0
  124. package/dist/C_Guide2.js +58 -0
  125. package/dist/C_Guide2.js.map +1 -0
  126. package/dist/C_Icon.cjs +4 -0
  127. package/dist/C_Icon.d.cts +2 -0
  128. package/dist/C_Icon.d.ts +2 -0
  129. package/dist/C_Icon.js +3 -0
  130. package/dist/C_Icon2.js +286 -0
  131. package/dist/C_Icon2.js.map +1 -0
  132. package/dist/C_ImageCropper-BVJfUufl.css.map +1 -0
  133. package/dist/C_ImageCropper.cjs +6 -0
  134. package/dist/C_ImageCropper.d.cts +2 -0
  135. package/dist/C_ImageCropper.d.ts +2 -0
  136. package/dist/C_ImageCropper.js +4 -0
  137. package/dist/C_ImageCropper2.js +723 -0
  138. package/dist/C_ImageCropper2.js.map +1 -0
  139. package/dist/C_Language.cjs +4 -0
  140. package/dist/C_Language.d.cts +2 -0
  141. package/dist/C_Language.d.ts +2 -0
  142. package/dist/C_Language.js +3 -0
  143. package/dist/C_Language2.js +72 -0
  144. package/dist/C_Language2.js.map +1 -0
  145. package/dist/C_Map-DpzeuWdX.css.map +1 -0
  146. package/dist/C_Map.cjs +7 -0
  147. package/dist/C_Map.d.cts +2 -0
  148. package/dist/C_Map.d.ts +2 -0
  149. package/dist/C_Map.js +3 -0
  150. package/dist/C_Map2.js +199 -0
  151. package/dist/C_Map2.js.map +1 -0
  152. package/dist/C_Markdown-BEjxknqd.css.map +1 -0
  153. package/dist/C_Markdown.cjs +4 -0
  154. package/dist/C_Markdown.d.cts +2 -0
  155. package/dist/C_Markdown.d.ts +2 -0
  156. package/dist/C_Markdown.js +3 -0
  157. package/dist/C_Markdown2.js +186 -0
  158. package/dist/C_Markdown2.js.map +1 -0
  159. package/dist/C_NotificationCenter-0l3TY2Gn.css.map +1 -0
  160. package/dist/C_NotificationCenter.cjs +20 -0
  161. package/dist/C_NotificationCenter.d.cts +2 -0
  162. package/dist/C_NotificationCenter.d.ts +2 -0
  163. package/dist/C_NotificationCenter.js +4 -0
  164. package/dist/C_NotificationCenter2.js +1383 -0
  165. package/dist/C_NotificationCenter2.js.map +1 -0
  166. package/dist/C_Progress.cjs +4 -0
  167. package/dist/C_Progress.d.cts +2 -0
  168. package/dist/C_Progress.d.ts +2 -0
  169. package/dist/C_Progress.js +3 -0
  170. package/dist/C_Progress2.js +103 -0
  171. package/dist/C_Progress2.js.map +1 -0
  172. package/dist/C_QRCode-DbdiAIPg.css.map +1 -0
  173. package/dist/C_QRCode.cjs +5 -0
  174. package/dist/C_QRCode.d.cts +2 -0
  175. package/dist/C_QRCode.d.ts +2 -0
  176. package/dist/C_QRCode.js +3 -0
  177. package/dist/C_QRCode2.js +218 -0
  178. package/dist/C_QRCode2.js.map +1 -0
  179. package/dist/C_Signature-zhHCbra9.css.map +1 -0
  180. package/dist/C_Signature.cjs +8 -0
  181. package/dist/C_Signature.d.cts +2 -0
  182. package/dist/C_Signature.d.ts +2 -0
  183. package/dist/C_Signature.js +4 -0
  184. package/dist/C_Signature2.js +618 -0
  185. package/dist/C_Signature2.js.map +1 -0
  186. package/dist/C_SplitPane-C6sBsfKY.css.map +1 -0
  187. package/dist/C_SplitPane.cjs +6 -0
  188. package/dist/C_SplitPane.d.cts +2 -0
  189. package/dist/C_SplitPane.d.ts +2 -0
  190. package/dist/C_SplitPane.js +4 -0
  191. package/dist/C_SplitPane2.js +356 -0
  192. package/dist/C_SplitPane2.js.map +1 -0
  193. package/dist/C_Steps-CODHN5Hs.css.map +1 -0
  194. package/dist/C_Steps.cjs +4 -0
  195. package/dist/C_Steps.d.cts +2 -0
  196. package/dist/C_Steps.d.ts +2 -0
  197. package/dist/C_Steps.js +3 -0
  198. package/dist/C_Steps2.js +82 -0
  199. package/dist/C_Steps2.js.map +1 -0
  200. package/dist/C_Table-DSNsntmT.css.map +1 -0
  201. package/dist/C_Table.cjs +19 -0
  202. package/dist/C_Table.d.cts +2 -0
  203. package/dist/C_Table.d.ts +2 -0
  204. package/dist/C_Table.js +5 -0
  205. package/dist/C_Table2.js +3009 -0
  206. package/dist/C_Table2.js.map +1 -0
  207. package/dist/C_Theme.cjs +4 -0
  208. package/dist/C_Theme.d.cts +2 -0
  209. package/dist/C_Theme.d.ts +2 -0
  210. package/dist/C_Theme.js +3 -0
  211. package/dist/C_Theme2.js +60 -0
  212. package/dist/C_Theme2.js.map +1 -0
  213. package/dist/C_Time-BvZLYraL.css.map +1 -0
  214. package/dist/C_Time.cjs +5 -0
  215. package/dist/C_Time.d.cts +2 -0
  216. package/dist/C_Time.d.ts +2 -0
  217. package/dist/C_Time.js +3 -0
  218. package/dist/C_Time2.js +199 -0
  219. package/dist/C_Time2.js.map +1 -0
  220. package/dist/C_Tree-0GDv--jX.css.map +1 -0
  221. package/dist/C_Tree.cjs +7 -0
  222. package/dist/C_Tree.d.cts +2 -0
  223. package/dist/C_Tree.d.ts +2 -0
  224. package/dist/C_Tree.js +4 -0
  225. package/dist/C_Tree2.js +441 -0
  226. package/dist/C_Tree2.js.map +1 -0
  227. package/dist/C_Upload-BXd3YYLx.css.map +1 -0
  228. package/dist/C_Upload.cjs +12 -0
  229. package/dist/C_Upload.d.cts +2 -0
  230. package/dist/C_Upload.d.ts +2 -0
  231. package/dist/C_Upload.js +4 -0
  232. package/dist/C_Upload2.js +1388 -0
  233. package/dist/C_Upload2.js.map +1 -0
  234. package/dist/C_VideoPlayer-DYG3RL0Q.css.map +1 -0
  235. package/dist/C_VideoPlayer.cjs +23 -0
  236. package/dist/C_VideoPlayer.d.cts +2 -0
  237. package/dist/C_VideoPlayer.d.ts +2 -0
  238. package/dist/C_VideoPlayer.js +3 -0
  239. package/dist/C_VideoPlayer2.js +1932 -0
  240. package/dist/C_VideoPlayer2.js.map +1 -0
  241. package/dist/C_VtableGantt-fhItIiHE.css.map +1 -0
  242. package/dist/C_VtableGantt.cjs +6 -0
  243. package/dist/C_VtableGantt.d.cts +2 -0
  244. package/dist/C_VtableGantt.d.ts +2 -0
  245. package/dist/C_VtableGantt.js +4 -0
  246. package/dist/C_VtableGantt2.js +873 -0
  247. package/dist/C_VtableGantt2.js.map +1 -0
  248. package/dist/C_WaterFall-8sQDFXKg.css.map +1 -0
  249. package/dist/C_WaterFall.cjs +13 -0
  250. package/dist/C_WaterFall.d.cts +2 -0
  251. package/dist/C_WaterFall.d.ts +2 -0
  252. package/dist/C_WaterFall.js +3 -0
  253. package/dist/C_WaterFall2.js +365 -0
  254. package/dist/C_WaterFall2.js.map +1 -0
  255. package/dist/C_WorkFlow-J-dyIuh9.css.map +1 -0
  256. package/dist/C_WorkFlow.cjs +8 -0
  257. package/dist/C_WorkFlow.d.cts +2 -0
  258. package/dist/C_WorkFlow.d.ts +2 -0
  259. package/dist/C_WorkFlow.js +4 -0
  260. package/dist/C_WorkFlow2.js +1984 -0
  261. package/dist/C_WorkFlow2.js.map +1 -0
  262. package/dist/chunk.js +22 -0
  263. package/dist/city.js +4817 -0
  264. package/dist/city.js.map +1 -0
  265. package/dist/constants.d.ts +273 -0
  266. package/dist/constants.d.ts.map +1 -0
  267. package/dist/constants2.d.ts +178 -0
  268. package/dist/constants2.d.ts.map +1 -0
  269. package/dist/constants3.d.ts +475 -0
  270. package/dist/constants3.d.ts.map +1 -0
  271. package/dist/constants4.d.ts +430 -0
  272. package/dist/constants4.d.ts.map +1 -0
  273. package/dist/constants5.d.ts +4283 -0
  274. package/dist/constants5.d.ts.map +1 -0
  275. package/dist/data.d.ts +67 -0
  276. package/dist/data.d.ts.map +1 -0
  277. package/dist/export-helper.js +9 -0
  278. package/dist/index.cjs +409 -0
  279. package/dist/index.d.cts +96 -0
  280. package/dist/index.d.cts.map +1 -0
  281. package/dist/index.d.ts +103 -0
  282. package/dist/index.d.ts.map +1 -0
  283. package/dist/index.js +230 -0
  284. package/dist/index.js.map +1 -0
  285. package/dist/index.vue.d.ts +80 -0
  286. package/dist/index.vue.d.ts.map +1 -0
  287. package/dist/index10.vue.d.ts +72 -0
  288. package/dist/index10.vue.d.ts.map +1 -0
  289. package/dist/index11.vue.d.ts +26 -0
  290. package/dist/index11.vue.d.ts.map +1 -0
  291. package/dist/index12.vue.d.ts +81 -0
  292. package/dist/index12.vue.d.ts.map +1 -0
  293. package/dist/index13.vue.d.ts +55 -0
  294. package/dist/index13.vue.d.ts.map +1 -0
  295. package/dist/index14.vue.d.ts +33 -0
  296. package/dist/index14.vue.d.ts.map +1 -0
  297. package/dist/index15.vue.d.ts +18 -0
  298. package/dist/index15.vue.d.ts.map +1 -0
  299. package/dist/index16.vue.d.ts +662 -0
  300. package/dist/index16.vue.d.ts.map +1 -0
  301. package/dist/index2.vue.d.ts +38 -0
  302. package/dist/index2.vue.d.ts.map +1 -0
  303. package/dist/index3.vue.d.ts +45 -0
  304. package/dist/index3.vue.d.ts.map +1 -0
  305. package/dist/index4.vue.d.ts +31 -0
  306. package/dist/index4.vue.d.ts.map +1 -0
  307. package/dist/index5.vue.d.ts +35 -0
  308. package/dist/index5.vue.d.ts.map +1 -0
  309. package/dist/index6.vue.d.ts +48 -0
  310. package/dist/index6.vue.d.ts.map +1 -0
  311. package/dist/index7.vue.d.ts +56 -0
  312. package/dist/index7.vue.d.ts.map +1 -0
  313. package/dist/index8.vue.d.ts +41 -0
  314. package/dist/index8.vue.d.ts.map +1 -0
  315. package/dist/index9.vue.d.ts +30 -0
  316. package/dist/index9.vue.d.ts.map +1 -0
  317. package/dist/storage.js +31 -0
  318. package/dist/storage.js.map +1 -0
  319. package/dist/style.css +7725 -0
  320. package/dist/useCalendarEvents.d.ts +148 -0
  321. package/dist/useCalendarEvents.d.ts.map +1 -0
  322. package/dist/useCollapsePanel.d.ts +132 -0
  323. package/dist/useCollapsePanel.d.ts.map +1 -0
  324. package/dist/useCropperCore.d.ts +102 -0
  325. package/dist/useCropperCore.d.ts.map +1 -0
  326. package/dist/useDraggableLayout.d.ts +194 -0
  327. package/dist/useDraggableLayout.d.ts.map +1 -0
  328. package/dist/useDynamicFormState.d.ts +4248 -0
  329. package/dist/useDynamicFormState.d.ts.map +1 -0
  330. package/dist/useEdgeInteraction.d.ts +7614 -0
  331. package/dist/useEdgeInteraction.d.ts.map +1 -0
  332. package/dist/useFullscreen.d.ts +166 -0
  333. package/dist/useFullscreen.d.ts.map +1 -0
  334. package/dist/useInfiniteScroll.d.ts +169 -0
  335. package/dist/useInfiniteScroll.d.ts.map +1 -0
  336. package/dist/useModalEdit.d.ts +960 -0
  337. package/dist/useModalEdit.d.ts.map +1 -0
  338. package/dist/useQRCode.d.ts +87 -0
  339. package/dist/useQRCode.d.ts.map +1 -0
  340. package/dist/useSearchState.d.ts +180 -0
  341. package/dist/useSearchState.d.ts.map +1 -0
  342. package/dist/useSignatureHistory.d.ts +189 -0
  343. package/dist/useSignatureHistory.d.ts.map +1 -0
  344. package/dist/useSplitResize.d.ts +158 -0
  345. package/dist/useSplitResize.d.ts.map +1 -0
  346. package/dist/useTimeSelection.d.ts +105 -0
  347. package/dist/useTimeSelection.d.ts.map +1 -0
  348. package/dist/useTreeOperations.d.ts +183 -0
  349. package/dist/useTreeOperations.d.ts.map +1 -0
  350. package/dist/useWorkflowValidation.d.ts +1052 -0
  351. package/dist/useWorkflowValidation.d.ts.map +1 -0
  352. package/package.json +342 -0
package/README.md ADDED
@@ -0,0 +1,257 @@
1
+ # @agile-team/naive-ui-components
2
+
3
+ 基于 **Naive UI** 的 Vue 3 企业级组件库,从 Robot Admin 中提炼的 38 个高质量业务组件。
4
+
5
+ 支持 **全量注册**、**按需导入(Tree-Shaking)** 和 **子路径独立导入**,配合多入口构建输出 ESM / CJS / DTS,满足不同集成场景。
6
+
7
+ ## 📦 安装
8
+
9
+ ```bash
10
+ bun add @agile-team/naive-ui-components
11
+ ```
12
+
13
+ 必需的对等依赖:
14
+
15
+ ```bash
16
+ bun add vue@^3.5.0 naive-ui@^2.35.0
17
+ ```
18
+
19
+ ## 🚀 快速开始
20
+
21
+ ### 全局注册
22
+
23
+ ```typescript
24
+ import { createApp } from "vue";
25
+ import NaiveUIComponents from "@agile-team/naive-ui-components";
26
+ import "@agile-team/naive-ui-components/style.css";
27
+
28
+ const app = createApp(App);
29
+ app.use(NaiveUIComponents);
30
+ app.mount("#app");
31
+ ```
32
+
33
+ ### 按需导入(主入口 Tree-Shaking)
34
+
35
+ ```vue
36
+ <script setup lang="ts">
37
+ import { C_Icon, C_Table, C_Form } from "@agile-team/naive-ui-components";
38
+ import "@agile-team/naive-ui-components/style.css";
39
+ </script>
40
+ ```
41
+
42
+ ### 子路径独立导入(推荐,最小打包体积)
43
+
44
+ 每个组件都提供独立的子路径入口,仅加载目标组件的代码和类型:
45
+
46
+ ```vue
47
+ <script setup lang="ts">
48
+ import { C_Form } from "@agile-team/naive-ui-components/C_Form";
49
+ import { C_Table } from "@agile-team/naive-ui-components/C_Table";
50
+ import { C_Icon } from "@agile-team/naive-ui-components/C_Icon";
51
+ import "@agile-team/naive-ui-components/style.css";
52
+ </script>
53
+ ```
54
+
55
+ > 子路径导入提供完整的 TypeScript 类型支持(`.d.ts`),IDE 可自动补全 props / emits / slots。
56
+
57
+ ### Composables 单独使用
58
+
59
+ ```typescript
60
+ import {
61
+ useTableManager,
62
+ useFormState,
63
+ usePlayerCore,
64
+ } from "@agile-team/naive-ui-components";
65
+ ```
66
+
67
+ ## 📋 组件清单(38 个)
68
+
69
+ ### 基础组件
70
+
71
+ | 组件 | 说明 | 外部依赖 |
72
+ | ------------- | ---------------- | --------------------------- |
73
+ | `C_Icon` | Iconify 图标封装 | `@iconify/vue` |
74
+ | `C_Code` | 代码高亮显示 | `highlight.js` |
75
+ | `C_Barcode` | 条形码生成器 | `@chenfengyuan/vue-barcode` |
76
+ | `C_Captcha` | 拼图验证码 | `vue3-puzzle-vcode` |
77
+ | `C_Cascade` | 级联面板选择器 | - |
78
+ | `C_Guide` | 新手引导 | `driver.js` |
79
+ | `C_Progress` | 增强进度条 | - |
80
+ | `C_Steps` | 步骤条 | - |
81
+ | `C_ActionBar` | 操作按钮栏 | - |
82
+ | `C_Theme` | 主题切换器 | - |
83
+ | `C_Language` | 语言切换器 | - |
84
+ | `C_Date` | 日期选择器增强 | - |
85
+ | `C_City` | 省市区三级联动 | - |
86
+
87
+ ### 内容 & 编辑组件
88
+
89
+ | 组件 | 说明 | 外部依赖 |
90
+ | ----------------- | -------------------- | -------------------- |
91
+ | `C_Editor` | 富文本编辑器 | `@wangeditor/editor` |
92
+ | `C_Markdown` | Markdown 编辑器/预览 | `@kangc/v-md-editor` |
93
+ | `C_FormulaEditor` | 公式编辑器 | `expr-eval` |
94
+ | `C_Signature` | 电子签名 | - |
95
+ | `C_QRCode` | 二维码生成器 | `qrcode` |
96
+ | `C_ImageCropper` | 图片裁剪器 | `vue-cropper` |
97
+
98
+ ### 数据展示组件
99
+
100
+ | 组件 | 说明 | 外部依赖 |
101
+ | ---------------- | ----------------------------------------- | ------------------------------------ |
102
+ | `C_Table` | 高级数据表格(CRUD/行列编辑/动态行/打印) | `print-js`、`html2canvas` |
103
+ | `C_Map` | 地图组件(OSM/高德) | `leaflet` |
104
+ | `C_VtableGantt` | 甘特图 | `@visactor/vtable-gantt` |
105
+ | `C_AntV` | 图编辑器(ER/BPMN/UML) | `@antv/x6`、`html2canvas` |
106
+ | `C_WaterFall` | 瀑布流布局 | - |
107
+ | `C_FullCalendar` | 日历事件 | `@fullcalendar/*` |
108
+ | `C_VideoPlayer` | 视频播放器(HLS/字幕/书签/章节) | `xgplayer`、`xgplayer-hls` |
109
+ | `C_FilePreview` | 文件预览(PDF/Word/Excel) | `xlsx`、`mammoth`、`@tato30/vue-pdf` |
110
+
111
+ ### 表单 & 布局组件
112
+
113
+ | 组件 | 说明 | 外部依赖 |
114
+ | ----------------- | ------------------------------------------------- | ---------------------------- |
115
+ | `C_Form` | 动态表单引擎(Grid/Tabs/Steps/Card/Dynamic 布局) | `@robot-admin/form-validate` |
116
+ | `C_FormSearch` | 搜索表单 | - |
117
+ | `C_CollapsePanel` | 折叠面板 | - |
118
+ | `C_SplitPane` | 分割面板 | - |
119
+ | `C_Draggable` | 拖拽排序 | `vue-draggable-plus` |
120
+ | `C_Tree` | 高级树形控件 | - |
121
+ | `C_Time` | 时间选择器增强 | - |
122
+ | `C_Cron` | Cron 表达式编辑器 | - |
123
+
124
+ ### 流程 & 通知组件
125
+
126
+ | 组件 | 说明 | 外部依赖 |
127
+ | ---------------------- | ------------------------------------ | ---------------- |
128
+ | `C_WorkFlow` | 工作流编辑器(审批/抄送/条件节点) | `@vue-flow/core` |
129
+ | `C_NotificationCenter` | 通知中心(WebSocket/轮询) | - |
130
+ | `C_Upload` | 大文件上传(分片/断点续传/哈希校验) | `spark-md5` |
131
+
132
+ ## 🔌 可选依赖
133
+
134
+ 包含外部依赖的组件以 `optionalDependencies` 声明。**按需安装**:
135
+
136
+ ```bash
137
+ # 视频播放器
138
+ bun add xgplayer xgplayer-hls
139
+
140
+ # 图编辑器
141
+ bun add @antv/x6
142
+
143
+ # 工作流
144
+ bun add @vue-flow/core
145
+
146
+ # 文件预览
147
+ bun add xlsx mammoth @tato30/vue-pdf
148
+
149
+ # 表格打印
150
+ bun add print-js html2canvas
151
+
152
+ # 公式编辑器
153
+ bun add expr-eval
154
+ ```
155
+
156
+ ## 🏗️ 构建架构
157
+
158
+ ### 四阶段构建流水线
159
+
160
+ ```
161
+ bun run build
162
+ ├── 1. tsdown → 多入口打包(38 组件 ESM/CJS/DTS)
163
+ ├── 2. sass CLI → 编译 global.scss → global-scss.css
164
+ ├── 3. merge-css.js → 合并 SFC CSS + global SCSS → style.css
165
+ └── 4. gen-exports.js → 自动生成 package.json exports 映射
166
+ ```
167
+
168
+ ### 技术要点
169
+
170
+ - **构建引擎**:[tsdown](https://github.com/rolldown/tsdown)(基于 Rolldown),38 个独立入口并行编译
171
+ - **SCSS 处理**:自定义 `scssTransformPlugin` 在 Rolldown 管线内编译 SFC SCSS,独立 Sass CLI 编译全局样式
172
+ - **CSS 合并**:构建后将分散的 per-chunk CSS 与 `global-scss.css` 合并为单一 `style.css`
173
+ - **类型导出**:统一 `export *` barrel 模式,自动生成完整 `.d.ts`
174
+ - **子路径导出**:`gen-exports.js` 自动扫描 `dist/` 并写入 `package.json` 的 `exports` 字段
175
+ - **导出冲突检测**:`check-export-conflicts.js` 确保组件间无命名冲突
176
+
177
+ ### 输出产物
178
+
179
+ ```
180
+ dist/
181
+ ├── index.js / index.cjs / index.d.ts # 主入口
182
+ ├── C_Form.js / C_Form.cjs / C_Form.d.ts # 子路径入口(38 组件)
183
+ ├── style.css # 合并后的全量样式
184
+ └── [chunk].js # 共享代码块
185
+ ```
186
+
187
+ ## 🔧 开发
188
+
189
+ ```bash
190
+ bun install # 安装依赖
191
+ bun run dev # 开发模式(SCSS watch + tsdown watch)
192
+ bun run build # 完整构建
193
+ bun run build:scss # 仅编译全局 SCSS
194
+ bun run build:css # 仅合并 CSS
195
+ bun run build:exports # 仅生成 exports 映射
196
+ bun run check:exports # 检测导出命名冲突
197
+ bun run type-check # TypeScript 类型检查
198
+ ```
199
+
200
+ ### 项目结构
201
+
202
+ ```
203
+ naive-ui-components/
204
+ ├── src/
205
+ │ ├── index.ts # 库入口(全量注册 + export * barrel)
206
+ │ ├── styles/
207
+ │ │ ├── variables.scss # CSS 变量 (--c-*)
208
+ │ │ └── global.scss # 自动生成的全局样式聚合(@forward barrel)
209
+ │ ├── components/
210
+ │ │ └── C_[Name]/
211
+ │ │ ├── index.vue # 组件主文件
212
+ │ │ ├── index.ts # Barrel 导出
213
+ │ │ ├── index.scss # 组件样式
214
+ │ │ ├── types.ts # 类型定义
215
+ │ │ ├── constants.ts # 常量
216
+ │ │ ├── data.ts # 静态数据
217
+ │ │ ├── composables/ # 组合式函数
218
+ │ │ ├── components/ # 子组件
219
+ │ │ └── layouts/ # 布局变体(C_Form/C_AntV)
220
+ │ ├── plugins/ # highlight.js 等插件
221
+ │ └── utils/ # 工具函数
222
+ ├── scripts/
223
+ │ ├── gen-global-scss.js # 生成 global.scss(@forward barrel)
224
+ │ ├── watch-global-scss.js # 开发模式 SCSS 监听
225
+ │ ├── merge-css.js # 合并 CSS 产物
226
+ │ ├── gen-exports.js # 自动生成 package.json exports
227
+ │ └── check-export-conflicts.js # 导出命名冲突检测
228
+ ├── types/
229
+ │ └── env.d.ts # .vue / .scss 模块声明
230
+ ├── tsdown.config.ts # 构建配置(多入口 + SCSS 插件 + Vue 插件)
231
+ └── tsconfig.json
232
+ ```
233
+
234
+ ### 添加新组件
235
+
236
+ 1. 创建 `src/components/C_NewComponent/` 目录
237
+ 2. 编写 `index.vue`、`index.ts`(barrel)、`types.ts`
238
+ 3. 在 `src/index.ts` 中添加 `export * from './components/C_NewComponent'`
239
+ 4. 运行 `bun run build`—构建脚本会自动生成子路径入口和 exports 映射
240
+
241
+ ### 发布
242
+
243
+ ```bash
244
+ bun run release:patch # 0.3.0 → 0.3.1
245
+ bun run release:minor # 0.3.0 → 0.4.0
246
+ bun run release:major # 0.3.0 → 1.0.0
247
+ ```
248
+
249
+ ## 📄 许可证
250
+
251
+ MIT License
252
+
253
+ ## 🔗 相关链接
254
+
255
+ - [Robot Admin 文档](https://www.tzagileteam.com/robot/components/preface)
256
+ - [GitHub](https://github.com/ChenyCHENYU/naive-ui-components)
257
+ - [NPM](https://www.npmjs.com/package/@agile-team/naive-ui-components)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_ActionBar-DWN-woTc.css","names":[],"sources":["../src/components/C_ActionBar/index.vue?vue&type=style&index=0&scoped=991d8822&lang.scss"],"sourcesContent":["/* 通用操作按钮组件样式 */\n/* ================= 主容器 ================= */\n.c-action-bar[data-v-991d8822] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px;\n margin-bottom: 16px;\n background: var(--c-bg-card);\n border-radius: var(--c-radius);\n border: 1px solid var(--c-border);\n transition: all 0.3s ease;\n}\n.c-action-bar.is-align-left[data-v-991d8822] {\n justify-content: flex-start;\n}\n.c-action-bar.is-align-center[data-v-991d8822] {\n justify-content: center;\n}\n.c-action-bar.is-align-right[data-v-991d8822] {\n justify-content: flex-end;\n}\n.c-action-bar.is-align-space-between[data-v-991d8822] {\n justify-content: space-between;\n}\n.c-action-bar.is-align-space-around[data-v-991d8822] {\n justify-content: space-around;\n}\n.c-action-bar.is-compact[data-v-991d8822] {\n padding: 12px;\n margin-bottom: 12px;\n}\n.c-action-bar.is-inline[data-v-991d8822] {\n padding: 0;\n margin-bottom: 0;\n background: transparent;\n border: none;\n border-radius: 0;\n box-shadow: none;\n}\n.c-action-bar.is-wrap[data-v-991d8822] {\n flex-wrap: wrap;\n gap: 12px;\n}\n@media (max-width: 768px) {\n.c-action-bar[data-v-991d8822] {\n flex-direction: column;\n gap: 12px;\n}\n.c-action-bar .actions-group[data-v-991d8822] {\n width: 100%;\n justify-content: center;\n}\n}\n\n/* ================= 按钮组 ================= */\n.actions-group[data-v-991d8822] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: nowrap;\n}\n.actions-group.actions-left[data-v-991d8822] {\n justify-content: flex-start;\n}\n.actions-group.actions-right[data-v-991d8822] {\n justify-content: flex-end;\n}\n.c-action-bar.has-only-left.is-align-center .actions-group.actions-left[data-v-991d8822], .c-action-bar.has-only-right.is-align-center .actions-group.actions-right[data-v-991d8822] {\n width: 100%;\n justify-content: center;\n}\n.c-action-bar.has-only-left.is-align-space-between .actions-group.actions-left[data-v-991d8822], .c-action-bar.has-only-right.is-align-space-between .actions-group.actions-right[data-v-991d8822] {\n width: 100%;\n justify-content: space-between;\n}\n.c-action-bar.has-only-left.is-align-space-around .actions-group.actions-left[data-v-991d8822], .c-action-bar.has-only-right.is-align-space-around .actions-group.actions-right[data-v-991d8822] {\n width: 100%;\n justify-content: space-around;\n}\n.c-action-bar.has-only-left.is-align-right .actions-group.actions-left[data-v-991d8822] {\n width: 100%;\n justify-content: flex-end;\n}\n.c-action-bar.has-only-right.is-align-left .actions-group.actions-right[data-v-991d8822] {\n width: 100%;\n justify-content: flex-start;\n}\n.actions-group[data-v-991d8822] .n-button {\n transition: all 0.3s ease;\n font-weight: 500;\n}\n.actions-group[data-v-991d8822] .n-button .n-icon {\n transition: transform 0.3s ease;\n}\n.actions-group[data-v-991d8822] .n-button:hover:not(:disabled) {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n.actions-group[data-v-991d8822] .n-button:hover:not(:disabled) .n-icon {\n transform: scale(1.1);\n}\n.actions-group[data-v-991d8822] .n-button:active:not(:disabled) {\n transform: translateY(0);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n.actions-group[data-v-991d8822] .n-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.actions-group[data-v-991d8822] .n-button.n-button--loading {\n pointer-events: none;\n}\n.actions-group[data-v-991d8822] .n-button--primary-type:hover:not(:disabled) {\n box-shadow: 0 4px 12px rgba(24, 160, 88, 0.3);\n}\n.actions-group[data-v-991d8822] .n-button--info-type:hover:not(:disabled) {\n box-shadow: 0 4px 12px rgba(42, 148, 125, 0.3);\n}\n.actions-group[data-v-991d8822] .n-button--success-type:hover:not(:disabled) {\n box-shadow: 0 4px 12px rgba(99, 226, 183, 0.3);\n}\n.actions-group[data-v-991d8822] .n-button--warning-type:hover:not(:disabled) {\n box-shadow: 0 4px 12px rgba(240, 138, 0, 0.3);\n}\n.actions-group[data-v-991d8822] .n-button--error-type:hover:not(:disabled) {\n box-shadow: 0 4px 12px rgba(208, 48, 80, 0.3);\n}\n\n/* ================= 中间插槽区域 ================= */\n.actions-center[data-v-991d8822] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 0 24px;\n min-width: 0;\n}\n\n/* ================= 分隔线 ================= */\n.action-divider[data-v-991d8822] {\n margin: 0 8px !important;\n height: 20px;\n opacity: 0.3;\n transition: opacity 0.3s ease;\n}\n.action-divider[data-v-991d8822]:hover {\n opacity: 0.6;\n}\n\n/* ================= 下拉菜单优化 ================= */\n[data-v-991d8822] .n-dropdown-option {\n transition: all 0.2s ease;\n}\n[data-v-991d8822] .n-dropdown-option:hover {\n transform: translateX(4px);\n}\n[data-v-991d8822] .n-dropdown-option .n-icon {\n transition: transform 0.2s ease;\n}\n[data-v-991d8822] .n-dropdown-option:hover .n-icon {\n transform: scale(1.15);\n}\n\n/* ================= 加载动画 ================= */\n@keyframes button-loading-991d8822 {\n0% {\n opacity: 0.6;\n}\n50% {\n opacity: 1;\n}\n100% {\n opacity: 0.6;\n}\n}\n[data-v-991d8822] .n-button--loading {\n animation: button-loading-991d8822 1.5s ease-in-out infinite;\n}\n\n/* ================= Tooltip 样式 ================= */\n[data-v-991d8822] .n-tooltip .n-tooltip__content {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 4px;\n backdrop-filter: blur(8px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n/* ================= 暗黑模式适配 ================= */\nhtml.dark .c-action-bar[data-v-991d8822] {\n border-color: rgba(255, 255, 255, 0.09);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n}\nhtml.dark .actions-group[data-v-991d8822] .n-button:hover:not(:disabled) {\n box-shadow: 0 4px 12px rgba(255, 255, 255, 0.1);\n}\nhtml.dark .action-divider[data-v-991d8822] {\n opacity: 0.15;\n}\nhtml.dark .action-divider[data-v-991d8822]:hover {\n opacity: 0.4;\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1,5 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ require('./C_Icon.js');
3
+ const require_C_ActionBar = require('./C_ActionBar.js');
4
+
5
+ exports.C_ActionBar = require_C_ActionBar.C_ActionBar_default;
@@ -0,0 +1,2 @@
1
+ import { a as ActionDropdownItem, c as TableActionsEmits, i as ActionButtonType, l as TableActionsProps, n as ActionBarConfig, o as ActionGroupAlign, r as ActionButtonSize, s as ActionItem, t as _default } from "./index.vue.js";
2
+ export { type ActionBarConfig, type ActionButtonSize, type ActionButtonType, type ActionDropdownItem, type ActionGroupAlign, type ActionItem, _default as C_ActionBar, type TableActionsEmits, type TableActionsProps };
@@ -0,0 +1,2 @@
1
+ import { a as ActionDropdownItem, c as TableActionsEmits, i as ActionButtonType, l as TableActionsProps, n as ActionBarConfig, o as ActionGroupAlign, r as ActionButtonSize, s as ActionItem, t as _default } from "./index.vue.js";
2
+ export { type ActionBarConfig, type ActionButtonSize, type ActionButtonType, type ActionDropdownItem, type ActionGroupAlign, type ActionItem, _default as C_ActionBar, type TableActionsEmits, type TableActionsProps };
@@ -0,0 +1,4 @@
1
+ import "./C_Icon2.js";
2
+ import { t as C_ActionBar_default } from "./C_ActionBar2.js";
3
+
4
+ export { C_ActionBar_default as C_ActionBar };
@@ -0,0 +1,196 @@
1
+ import { t as C_Icon_default } from "./C_Icon2.js";
2
+ import { t as export_helper_default } from "./export-helper.js";
3
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, h, normalizeClass, normalizeStyle, openBlock, renderList, renderSlot, unref, withDirectives } from "vue";
4
+ import { NButton, NDivider, NDropdown, NTooltip } from "naive-ui";
5
+
6
+ //#region src/components/C_ActionBar/index.vue?vue&type=script&setup=true&lang.ts
7
+ const _hoisted_1 = {
8
+ key: 1,
9
+ class: "actions-center"
10
+ };
11
+ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
12
+ name: "C_ActionBar",
13
+ __name: "index",
14
+ props: {
15
+ actions: { default: () => [] },
16
+ leftActions: { default: () => [] },
17
+ rightActions: { default: () => [] },
18
+ config: { default: () => ({}) }
19
+ },
20
+ emits: ["action-click", "dropdown-click"],
21
+ setup(__props, { emit: __emit }) {
22
+ const props = __props;
23
+ const emit = __emit;
24
+ const defaultConfig = {
25
+ align: "left",
26
+ size: "medium",
27
+ gap: 8,
28
+ wrap: false,
29
+ showDivider: false,
30
+ dividerType: "vertical",
31
+ compact: false,
32
+ inline: true
33
+ };
34
+ const finalConfig = computed(() => ({
35
+ ...defaultConfig,
36
+ ...props.config
37
+ }));
38
+ const leftButtonList = computed(() => {
39
+ if (props.leftActions && props.leftActions.length > 0) return props.leftActions.filter((action) => shouldShowAction(action));
40
+ if (props.actions.length > 0) {
41
+ const hasRightActions = props.rightActions && props.rightActions.length > 0;
42
+ const hasRightGroup = props.actions.some((action) => action.group === "right");
43
+ if (!hasRightActions && !hasRightGroup) return props.actions.filter((action) => shouldShowAction(action));
44
+ return props.actions.filter((action) => action.group === "left" && shouldShowAction(action));
45
+ }
46
+ return [];
47
+ });
48
+ const rightButtonList = computed(() => {
49
+ if (props.rightActions && props.rightActions.length > 0) return props.rightActions.filter((action) => shouldShowAction(action));
50
+ return props.actions.filter((action) => action.group === "right" && shouldShowAction(action));
51
+ });
52
+ const shouldShowAction = (action) => {
53
+ if (action.show === void 0) return true;
54
+ return unref(action.show);
55
+ };
56
+ const isActionDisabled = (action) => {
57
+ return unref(action.disabled) || false;
58
+ };
59
+ const isActionLoading = (action) => {
60
+ return unref(action.loading) || false;
61
+ };
62
+ const handleActionClick = async (action) => {
63
+ if (action.dropdown && action.dropdown.length > 0) return;
64
+ emit("action-click", action);
65
+ if (action.onClick) await action.onClick();
66
+ };
67
+ const handleDropdownClick = async (item, action) => {
68
+ emit("dropdown-click", item, action);
69
+ if (item.onClick) await item.onClick();
70
+ };
71
+ const ActionButton = defineComponent({
72
+ name: "ActionButton",
73
+ props: { action: {
74
+ type: Object,
75
+ required: true
76
+ } },
77
+ emits: ["click", "dropdown-select"],
78
+ setup(props, { emit }) {
79
+ const action = computed(() => props.action);
80
+ const dropdownOptions = computed(() => {
81
+ if (!action.value.dropdown) return [];
82
+ return action.value.dropdown.filter((item) => {
83
+ if (item.show === void 0) return true;
84
+ return unref(item.show);
85
+ }).map((item) => ({
86
+ key: item.key,
87
+ label: item.label,
88
+ icon: item.icon ? () => h(C_Icon_default, {
89
+ name: item.icon,
90
+ size: 14
91
+ }) : void 0,
92
+ disabled: unref(item.disabled)
93
+ }));
94
+ });
95
+ const handleDropdownSelect = (key) => {
96
+ const item = action.value.dropdown?.find((d) => d.key === key);
97
+ if (item) emit("dropdown-select", item);
98
+ };
99
+ const createButtonVNode = (extraProps) => {
100
+ const button = h(NButton, {
101
+ type: action.value.type || "default",
102
+ size: action.value.size || finalConfig.value.size,
103
+ loading: isActionLoading(action.value),
104
+ disabled: isActionDisabled(action.value),
105
+ ...extraProps,
106
+ ...action.value.buttonProps
107
+ }, {
108
+ default: () => action.value.label,
109
+ icon: action.value.icon ? () => h(C_Icon_default, {
110
+ name: action.value.icon,
111
+ size: 16
112
+ }) : void 0
113
+ });
114
+ return action.value.directives && action.value.directives.length > 0 ? withDirectives(button, action.value.directives) : button;
115
+ };
116
+ const renderButton = () => {
117
+ const vnode = createButtonVNode({ onClick: () => emit("click") });
118
+ if (action.value.tooltip) return h(NTooltip, { placement: "top" }, {
119
+ trigger: () => vnode,
120
+ default: () => action.value.tooltip
121
+ });
122
+ return vnode;
123
+ };
124
+ const renderDropdownButton = () => {
125
+ const vnode = createButtonVNode();
126
+ return h(NDropdown, {
127
+ options: dropdownOptions.value,
128
+ onSelect: handleDropdownSelect
129
+ }, { default: () => vnode });
130
+ };
131
+ return () => {
132
+ if (action.value.dropdown && action.value.dropdown.length > 0) return renderDropdownButton();
133
+ return renderButton();
134
+ };
135
+ }
136
+ });
137
+ return (_ctx, _cache) => {
138
+ return openBlock(), createElementBlock("div", { class: normalizeClass(["c-action-bar", {
139
+ "is-compact": finalConfig.value.compact,
140
+ "is-inline": finalConfig.value.inline,
141
+ "is-wrap": finalConfig.value.wrap,
142
+ [`is-align-${finalConfig.value.align}`]: true,
143
+ "has-only-left": leftButtonList.value.length > 0 && rightButtonList.value.length === 0 && !_ctx.$slots.center,
144
+ "has-only-right": rightButtonList.value.length > 0 && leftButtonList.value.length === 0 && !_ctx.$slots.center
145
+ }]) }, [
146
+ leftButtonList.value.length > 0 ? (openBlock(), createElementBlock("div", {
147
+ key: 0,
148
+ class: "actions-group actions-left",
149
+ style: normalizeStyle({ gap: `${finalConfig.value.gap}px` })
150
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(leftButtonList.value, (action, index) => {
151
+ return openBlock(), createElementBlock(Fragment, { key: action.key || `left-${index}` }, [createVNode(unref(ActionButton), {
152
+ action,
153
+ onClick: ($event) => handleActionClick(action),
154
+ onDropdownSelect: (item) => handleDropdownClick(item, action)
155
+ }, null, 8, [
156
+ "action",
157
+ "onClick",
158
+ "onDropdownSelect"
159
+ ]), finalConfig.value.showDivider && index < leftButtonList.value.length - 1 && finalConfig.value.dividerType === "vertical" ? (openBlock(), createBlock(unref(NDivider), {
160
+ key: 0,
161
+ vertical: "",
162
+ class: "action-divider"
163
+ })) : createCommentVNode("v-if", true)], 64);
164
+ }), 128))], 4)) : createCommentVNode("v-if", true),
165
+ _ctx.$slots.center ? (openBlock(), createElementBlock("div", _hoisted_1, [renderSlot(_ctx.$slots, "center", {}, void 0, true)])) : createCommentVNode("v-if", true),
166
+ rightButtonList.value.length > 0 ? (openBlock(), createElementBlock("div", {
167
+ key: 2,
168
+ class: "actions-group actions-right",
169
+ style: normalizeStyle({ gap: `${finalConfig.value.gap}px` })
170
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(rightButtonList.value, (action, index) => {
171
+ return openBlock(), createElementBlock(Fragment, { key: action.key || `right-${index}` }, [createVNode(unref(ActionButton), {
172
+ action,
173
+ onClick: ($event) => handleActionClick(action),
174
+ onDropdownSelect: (item) => handleDropdownClick(item, action)
175
+ }, null, 8, [
176
+ "action",
177
+ "onClick",
178
+ "onDropdownSelect"
179
+ ]), finalConfig.value.showDivider && index < rightButtonList.value.length - 1 && finalConfig.value.dividerType === "vertical" ? (openBlock(), createBlock(unref(NDivider), {
180
+ key: 0,
181
+ vertical: "",
182
+ class: "action-divider"
183
+ })) : createCommentVNode("v-if", true)], 64);
184
+ }), 128))], 4)) : createCommentVNode("v-if", true)
185
+ ], 2);
186
+ };
187
+ }
188
+ });
189
+
190
+ //#endregion
191
+ //#region src/components/C_ActionBar/index.vue
192
+ var C_ActionBar_default = /* @__PURE__ */ export_helper_default(index_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-991d8822"]]);
193
+
194
+ //#endregion
195
+ export { C_ActionBar_default as t };
196
+ //# sourceMappingURL=C_ActionBar2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_ActionBar2.js","names":["$slots"],"sources":["../src/components/C_ActionBar/index.vue","../src/components/C_ActionBar/index.vue","../src/components/C_ActionBar/index.vue"],"sourcesContent":["<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2026-02-14\r\n * @Description: 通用操作按钮组件 - 配置化管理任何场景的按钮组\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2026 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div\r\n class=\"c-action-bar\"\r\n :class=\"{\r\n 'is-compact': finalConfig.compact,\r\n 'is-inline': finalConfig.inline,\r\n 'is-wrap': finalConfig.wrap,\r\n [`is-align-${finalConfig.align}`]: true,\r\n 'has-only-left':\r\n leftButtonList.length > 0 &&\r\n rightButtonList.length === 0 &&\r\n !$slots.center,\r\n 'has-only-right':\r\n rightButtonList.length > 0 &&\r\n leftButtonList.length === 0 &&\r\n !$slots.center,\r\n }\"\r\n >\r\n <div\r\n v-if=\"leftButtonList.length > 0\"\r\n class=\"actions-group actions-left\"\r\n :style=\"{ gap: `${finalConfig.gap}px` }\"\r\n >\r\n <template\r\n v-for=\"(action, index) in leftButtonList\"\r\n :key=\"action.key || `left-${index}`\"\r\n >\r\n <ActionButton\r\n :action=\"action\"\r\n @click=\"handleActionClick(action)\"\r\n @dropdown-select=\"(item) => handleDropdownClick(item, action)\"\r\n />\r\n <NDivider\r\n v-if=\"\r\n finalConfig.showDivider &&\r\n index < leftButtonList.length - 1 &&\r\n finalConfig.dividerType === 'vertical'\r\n \"\r\n vertical\r\n class=\"action-divider\"\r\n />\r\n </template>\r\n </div>\r\n\r\n <div v-if=\"$slots.center\" class=\"actions-center\">\r\n <slot name=\"center\" />\r\n </div>\r\n\r\n <div\r\n v-if=\"rightButtonList.length > 0\"\r\n class=\"actions-group actions-right\"\r\n :style=\"{ gap: `${finalConfig.gap}px` }\"\r\n >\r\n <template\r\n v-for=\"(action, index) in rightButtonList\"\r\n :key=\"action.key || `right-${index}`\"\r\n >\r\n <ActionButton\r\n :action=\"action\"\r\n @click=\"handleActionClick(action)\"\r\n @dropdown-select=\"(item) => handleDropdownClick(item, action)\"\r\n />\r\n <NDivider\r\n v-if=\"\r\n finalConfig.showDivider &&\r\n index < rightButtonList.length - 1 &&\r\n finalConfig.dividerType === 'vertical'\r\n \"\r\n vertical\r\n class=\"action-divider\"\r\n />\r\n </template>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, unref, h, withDirectives, defineComponent } from \"vue\";\r\nimport type { PropType } from \"vue\";\r\nimport { NButton, NTooltip, NDropdown, NDivider } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport type {\r\n ActionItem,\r\n ActionDropdownItem,\r\n ActionBarConfig,\r\n TableActionsProps,\r\n TableActionsEmits,\r\n} from \"./types\";\r\n\r\ndefineOptions({ name: \"C_ActionBar\" });\r\n\r\nconst props = withDefaults(defineProps<TableActionsProps>(), {\r\n actions: () => [],\r\n leftActions: () => [],\r\n rightActions: () => [],\r\n config: () => ({}),\r\n});\r\n\r\nconst emit = defineEmits<TableActionsEmits>();\r\n\r\nconst defaultConfig: Required<ActionBarConfig> = {\r\n align: \"left\",\r\n size: \"medium\",\r\n gap: 8,\r\n wrap: false,\r\n showDivider: false,\r\n dividerType: \"vertical\",\r\n compact: false,\r\n inline: true,\r\n};\r\n\r\nconst finalConfig = computed<Required<ActionBarConfig>>(() => ({\r\n ...defaultConfig,\r\n ...props.config,\r\n}));\r\n\r\nconst leftButtonList = computed<ActionItem[]>(() => {\r\n if (props.leftActions && props.leftActions.length > 0) {\r\n return props.leftActions.filter((action) => shouldShowAction(action));\r\n }\r\n if (props.actions.length > 0) {\r\n const hasRightActions = props.rightActions && props.rightActions.length > 0;\r\n const hasRightGroup = props.actions.some(\r\n (action) => action.group === \"right\",\r\n );\r\n if (!hasRightActions && !hasRightGroup) {\r\n return props.actions.filter((action) => shouldShowAction(action));\r\n }\r\n return props.actions.filter(\r\n (action) => action.group === \"left\" && shouldShowAction(action),\r\n );\r\n }\r\n return [];\r\n});\r\n\r\nconst rightButtonList = computed<ActionItem[]>(() => {\r\n if (props.rightActions && props.rightActions.length > 0) {\r\n return props.rightActions.filter((action) => shouldShowAction(action));\r\n }\r\n return props.actions.filter(\r\n (action) => action.group === \"right\" && shouldShowAction(action),\r\n );\r\n});\r\n\r\nconst shouldShowAction = (action: ActionItem): boolean => {\r\n if (action.show === undefined) return true;\r\n return unref(action.show);\r\n};\r\n\r\nconst isActionDisabled = (action: ActionItem): boolean => {\r\n return unref(action.disabled) || false;\r\n};\r\n\r\nconst isActionLoading = (action: ActionItem): boolean => {\r\n return unref(action.loading) || false;\r\n};\r\n\r\nconst handleActionClick = async (action: ActionItem) => {\r\n if (action.dropdown && action.dropdown.length > 0) return;\r\n emit(\"action-click\", action);\r\n if (action.onClick) {\r\n await action.onClick();\r\n }\r\n};\r\n\r\nconst handleDropdownClick = async (\r\n item: ActionDropdownItem,\r\n action: ActionItem,\r\n) => {\r\n emit(\"dropdown-click\", item, action);\r\n if (item.onClick) {\r\n await item.onClick();\r\n }\r\n};\r\n\r\nconst ActionButton = defineComponent({\r\n name: \"ActionButton\",\r\n props: {\r\n action: {\r\n type: Object as PropType<ActionItem>,\r\n required: true,\r\n },\r\n },\r\n emits: [\"click\", \"dropdown-select\"],\r\n setup(props, { emit }) {\r\n const action = computed(() => props.action);\r\n\r\n const dropdownOptions = computed(() => {\r\n if (!action.value.dropdown) return [];\r\n return action.value.dropdown\r\n .filter((item) => {\r\n if (item.show === undefined) return true;\r\n return unref(item.show);\r\n })\r\n .map((item) => ({\r\n key: item.key,\r\n label: item.label,\r\n icon: item.icon\r\n ? () => h(C_Icon, { name: item.icon, size: 14 })\r\n : undefined,\r\n disabled: unref(item.disabled),\r\n }));\r\n });\r\n\r\n const handleDropdownSelect = (key: string) => {\r\n const item = action.value.dropdown?.find((d) => d.key === key);\r\n if (item) {\r\n emit(\"dropdown-select\", item);\r\n }\r\n };\r\n\r\n const createButtonVNode = (extraProps?: Record<string, any>) => {\r\n const button = h(\r\n NButton,\r\n {\r\n type: action.value.type || \"default\",\r\n size: action.value.size || finalConfig.value.size,\r\n loading: isActionLoading(action.value),\r\n disabled: isActionDisabled(action.value),\r\n ...extraProps,\r\n ...action.value.buttonProps,\r\n },\r\n {\r\n default: () => action.value.label,\r\n icon: action.value.icon\r\n ? () => h(C_Icon, { name: action.value.icon, size: 16 })\r\n : undefined,\r\n },\r\n );\r\n\r\n return action.value.directives && action.value.directives.length > 0\r\n ? withDirectives(button, action.value.directives as any)\r\n : button;\r\n };\r\n\r\n const renderButton = () => {\r\n const vnode = createButtonVNode({ onClick: () => emit(\"click\") });\r\n if (action.value.tooltip) {\r\n return h(\r\n NTooltip,\r\n { placement: \"top\" },\r\n {\r\n trigger: () => vnode,\r\n default: () => action.value.tooltip,\r\n },\r\n );\r\n }\r\n return vnode;\r\n };\r\n\r\n const renderDropdownButton = () => {\r\n const vnode = createButtonVNode();\r\n return h(\r\n NDropdown,\r\n {\r\n options: dropdownOptions.value,\r\n onSelect: handleDropdownSelect,\r\n },\r\n {\r\n default: () => vnode,\r\n },\r\n );\r\n };\r\n\r\n return () => {\r\n if (action.value.dropdown && action.value.dropdown.length > 0) {\r\n return renderDropdownButton();\r\n }\r\n return renderButton();\r\n };\r\n },\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@use \"./index.scss\";\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2026-02-14\r\n * @Description: 通用操作按钮组件 - 配置化管理任何场景的按钮组\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2026 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div\r\n class=\"c-action-bar\"\r\n :class=\"{\r\n 'is-compact': finalConfig.compact,\r\n 'is-inline': finalConfig.inline,\r\n 'is-wrap': finalConfig.wrap,\r\n [`is-align-${finalConfig.align}`]: true,\r\n 'has-only-left':\r\n leftButtonList.length > 0 &&\r\n rightButtonList.length === 0 &&\r\n !$slots.center,\r\n 'has-only-right':\r\n rightButtonList.length > 0 &&\r\n leftButtonList.length === 0 &&\r\n !$slots.center,\r\n }\"\r\n >\r\n <div\r\n v-if=\"leftButtonList.length > 0\"\r\n class=\"actions-group actions-left\"\r\n :style=\"{ gap: `${finalConfig.gap}px` }\"\r\n >\r\n <template\r\n v-for=\"(action, index) in leftButtonList\"\r\n :key=\"action.key || `left-${index}`\"\r\n >\r\n <ActionButton\r\n :action=\"action\"\r\n @click=\"handleActionClick(action)\"\r\n @dropdown-select=\"(item) => handleDropdownClick(item, action)\"\r\n />\r\n <NDivider\r\n v-if=\"\r\n finalConfig.showDivider &&\r\n index < leftButtonList.length - 1 &&\r\n finalConfig.dividerType === 'vertical'\r\n \"\r\n vertical\r\n class=\"action-divider\"\r\n />\r\n </template>\r\n </div>\r\n\r\n <div v-if=\"$slots.center\" class=\"actions-center\">\r\n <slot name=\"center\" />\r\n </div>\r\n\r\n <div\r\n v-if=\"rightButtonList.length > 0\"\r\n class=\"actions-group actions-right\"\r\n :style=\"{ gap: `${finalConfig.gap}px` }\"\r\n >\r\n <template\r\n v-for=\"(action, index) in rightButtonList\"\r\n :key=\"action.key || `right-${index}`\"\r\n >\r\n <ActionButton\r\n :action=\"action\"\r\n @click=\"handleActionClick(action)\"\r\n @dropdown-select=\"(item) => handleDropdownClick(item, action)\"\r\n />\r\n <NDivider\r\n v-if=\"\r\n finalConfig.showDivider &&\r\n index < rightButtonList.length - 1 &&\r\n finalConfig.dividerType === 'vertical'\r\n \"\r\n vertical\r\n class=\"action-divider\"\r\n />\r\n </template>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, unref, h, withDirectives, defineComponent } from \"vue\";\r\nimport type { PropType } from \"vue\";\r\nimport { NButton, NTooltip, NDropdown, NDivider } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport type {\r\n ActionItem,\r\n ActionDropdownItem,\r\n ActionBarConfig,\r\n TableActionsProps,\r\n TableActionsEmits,\r\n} from \"./types\";\r\n\r\ndefineOptions({ name: \"C_ActionBar\" });\r\n\r\nconst props = withDefaults(defineProps<TableActionsProps>(), {\r\n actions: () => [],\r\n leftActions: () => [],\r\n rightActions: () => [],\r\n config: () => ({}),\r\n});\r\n\r\nconst emit = defineEmits<TableActionsEmits>();\r\n\r\nconst defaultConfig: Required<ActionBarConfig> = {\r\n align: \"left\",\r\n size: \"medium\",\r\n gap: 8,\r\n wrap: false,\r\n showDivider: false,\r\n dividerType: \"vertical\",\r\n compact: false,\r\n inline: true,\r\n};\r\n\r\nconst finalConfig = computed<Required<ActionBarConfig>>(() => ({\r\n ...defaultConfig,\r\n ...props.config,\r\n}));\r\n\r\nconst leftButtonList = computed<ActionItem[]>(() => {\r\n if (props.leftActions && props.leftActions.length > 0) {\r\n return props.leftActions.filter((action) => shouldShowAction(action));\r\n }\r\n if (props.actions.length > 0) {\r\n const hasRightActions = props.rightActions && props.rightActions.length > 0;\r\n const hasRightGroup = props.actions.some(\r\n (action) => action.group === \"right\",\r\n );\r\n if (!hasRightActions && !hasRightGroup) {\r\n return props.actions.filter((action) => shouldShowAction(action));\r\n }\r\n return props.actions.filter(\r\n (action) => action.group === \"left\" && shouldShowAction(action),\r\n );\r\n }\r\n return [];\r\n});\r\n\r\nconst rightButtonList = computed<ActionItem[]>(() => {\r\n if (props.rightActions && props.rightActions.length > 0) {\r\n return props.rightActions.filter((action) => shouldShowAction(action));\r\n }\r\n return props.actions.filter(\r\n (action) => action.group === \"right\" && shouldShowAction(action),\r\n );\r\n});\r\n\r\nconst shouldShowAction = (action: ActionItem): boolean => {\r\n if (action.show === undefined) return true;\r\n return unref(action.show);\r\n};\r\n\r\nconst isActionDisabled = (action: ActionItem): boolean => {\r\n return unref(action.disabled) || false;\r\n};\r\n\r\nconst isActionLoading = (action: ActionItem): boolean => {\r\n return unref(action.loading) || false;\r\n};\r\n\r\nconst handleActionClick = async (action: ActionItem) => {\r\n if (action.dropdown && action.dropdown.length > 0) return;\r\n emit(\"action-click\", action);\r\n if (action.onClick) {\r\n await action.onClick();\r\n }\r\n};\r\n\r\nconst handleDropdownClick = async (\r\n item: ActionDropdownItem,\r\n action: ActionItem,\r\n) => {\r\n emit(\"dropdown-click\", item, action);\r\n if (item.onClick) {\r\n await item.onClick();\r\n }\r\n};\r\n\r\nconst ActionButton = defineComponent({\r\n name: \"ActionButton\",\r\n props: {\r\n action: {\r\n type: Object as PropType<ActionItem>,\r\n required: true,\r\n },\r\n },\r\n emits: [\"click\", \"dropdown-select\"],\r\n setup(props, { emit }) {\r\n const action = computed(() => props.action);\r\n\r\n const dropdownOptions = computed(() => {\r\n if (!action.value.dropdown) return [];\r\n return action.value.dropdown\r\n .filter((item) => {\r\n if (item.show === undefined) return true;\r\n return unref(item.show);\r\n })\r\n .map((item) => ({\r\n key: item.key,\r\n label: item.label,\r\n icon: item.icon\r\n ? () => h(C_Icon, { name: item.icon, size: 14 })\r\n : undefined,\r\n disabled: unref(item.disabled),\r\n }));\r\n });\r\n\r\n const handleDropdownSelect = (key: string) => {\r\n const item = action.value.dropdown?.find((d) => d.key === key);\r\n if (item) {\r\n emit(\"dropdown-select\", item);\r\n }\r\n };\r\n\r\n const createButtonVNode = (extraProps?: Record<string, any>) => {\r\n const button = h(\r\n NButton,\r\n {\r\n type: action.value.type || \"default\",\r\n size: action.value.size || finalConfig.value.size,\r\n loading: isActionLoading(action.value),\r\n disabled: isActionDisabled(action.value),\r\n ...extraProps,\r\n ...action.value.buttonProps,\r\n },\r\n {\r\n default: () => action.value.label,\r\n icon: action.value.icon\r\n ? () => h(C_Icon, { name: action.value.icon, size: 16 })\r\n : undefined,\r\n },\r\n );\r\n\r\n return action.value.directives && action.value.directives.length > 0\r\n ? withDirectives(button, action.value.directives as any)\r\n : button;\r\n };\r\n\r\n const renderButton = () => {\r\n const vnode = createButtonVNode({ onClick: () => emit(\"click\") });\r\n if (action.value.tooltip) {\r\n return h(\r\n NTooltip,\r\n { placement: \"top\" },\r\n {\r\n trigger: () => vnode,\r\n default: () => action.value.tooltip,\r\n },\r\n );\r\n }\r\n return vnode;\r\n };\r\n\r\n const renderDropdownButton = () => {\r\n const vnode = createButtonVNode();\r\n return h(\r\n NDropdown,\r\n {\r\n options: dropdownOptions.value,\r\n onSelect: handleDropdownSelect,\r\n },\r\n {\r\n default: () => vnode,\r\n },\r\n );\r\n };\r\n\r\n return () => {\r\n if (action.value.dropdown && action.value.dropdown.length > 0) {\r\n return renderDropdownButton();\r\n }\r\n return renderButton();\r\n };\r\n },\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@use \"./index.scss\";\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2026-02-14\r\n * @Description: 通用操作按钮组件 - 配置化管理任何场景的按钮组\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2026 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div\r\n class=\"c-action-bar\"\r\n :class=\"{\r\n 'is-compact': finalConfig.compact,\r\n 'is-inline': finalConfig.inline,\r\n 'is-wrap': finalConfig.wrap,\r\n [`is-align-${finalConfig.align}`]: true,\r\n 'has-only-left':\r\n leftButtonList.length > 0 &&\r\n rightButtonList.length === 0 &&\r\n !$slots.center,\r\n 'has-only-right':\r\n rightButtonList.length > 0 &&\r\n leftButtonList.length === 0 &&\r\n !$slots.center,\r\n }\"\r\n >\r\n <div\r\n v-if=\"leftButtonList.length > 0\"\r\n class=\"actions-group actions-left\"\r\n :style=\"{ gap: `${finalConfig.gap}px` }\"\r\n >\r\n <template\r\n v-for=\"(action, index) in leftButtonList\"\r\n :key=\"action.key || `left-${index}`\"\r\n >\r\n <ActionButton\r\n :action=\"action\"\r\n @click=\"handleActionClick(action)\"\r\n @dropdown-select=\"(item) => handleDropdownClick(item, action)\"\r\n />\r\n <NDivider\r\n v-if=\"\r\n finalConfig.showDivider &&\r\n index < leftButtonList.length - 1 &&\r\n finalConfig.dividerType === 'vertical'\r\n \"\r\n vertical\r\n class=\"action-divider\"\r\n />\r\n </template>\r\n </div>\r\n\r\n <div v-if=\"$slots.center\" class=\"actions-center\">\r\n <slot name=\"center\" />\r\n </div>\r\n\r\n <div\r\n v-if=\"rightButtonList.length > 0\"\r\n class=\"actions-group actions-right\"\r\n :style=\"{ gap: `${finalConfig.gap}px` }\"\r\n >\r\n <template\r\n v-for=\"(action, index) in rightButtonList\"\r\n :key=\"action.key || `right-${index}`\"\r\n >\r\n <ActionButton\r\n :action=\"action\"\r\n @click=\"handleActionClick(action)\"\r\n @dropdown-select=\"(item) => handleDropdownClick(item, action)\"\r\n />\r\n <NDivider\r\n v-if=\"\r\n finalConfig.showDivider &&\r\n index < rightButtonList.length - 1 &&\r\n finalConfig.dividerType === 'vertical'\r\n \"\r\n vertical\r\n class=\"action-divider\"\r\n />\r\n </template>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, unref, h, withDirectives, defineComponent } from \"vue\";\r\nimport type { PropType } from \"vue\";\r\nimport { NButton, NTooltip, NDropdown, NDivider } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport type {\r\n ActionItem,\r\n ActionDropdownItem,\r\n ActionBarConfig,\r\n TableActionsProps,\r\n TableActionsEmits,\r\n} from \"./types\";\r\n\r\ndefineOptions({ name: \"C_ActionBar\" });\r\n\r\nconst props = withDefaults(defineProps<TableActionsProps>(), {\r\n actions: () => [],\r\n leftActions: () => [],\r\n rightActions: () => [],\r\n config: () => ({}),\r\n});\r\n\r\nconst emit = defineEmits<TableActionsEmits>();\r\n\r\nconst defaultConfig: Required<ActionBarConfig> = {\r\n align: \"left\",\r\n size: \"medium\",\r\n gap: 8,\r\n wrap: false,\r\n showDivider: false,\r\n dividerType: \"vertical\",\r\n compact: false,\r\n inline: true,\r\n};\r\n\r\nconst finalConfig = computed<Required<ActionBarConfig>>(() => ({\r\n ...defaultConfig,\r\n ...props.config,\r\n}));\r\n\r\nconst leftButtonList = computed<ActionItem[]>(() => {\r\n if (props.leftActions && props.leftActions.length > 0) {\r\n return props.leftActions.filter((action) => shouldShowAction(action));\r\n }\r\n if (props.actions.length > 0) {\r\n const hasRightActions = props.rightActions && props.rightActions.length > 0;\r\n const hasRightGroup = props.actions.some(\r\n (action) => action.group === \"right\",\r\n );\r\n if (!hasRightActions && !hasRightGroup) {\r\n return props.actions.filter((action) => shouldShowAction(action));\r\n }\r\n return props.actions.filter(\r\n (action) => action.group === \"left\" && shouldShowAction(action),\r\n );\r\n }\r\n return [];\r\n});\r\n\r\nconst rightButtonList = computed<ActionItem[]>(() => {\r\n if (props.rightActions && props.rightActions.length > 0) {\r\n return props.rightActions.filter((action) => shouldShowAction(action));\r\n }\r\n return props.actions.filter(\r\n (action) => action.group === \"right\" && shouldShowAction(action),\r\n );\r\n});\r\n\r\nconst shouldShowAction = (action: ActionItem): boolean => {\r\n if (action.show === undefined) return true;\r\n return unref(action.show);\r\n};\r\n\r\nconst isActionDisabled = (action: ActionItem): boolean => {\r\n return unref(action.disabled) || false;\r\n};\r\n\r\nconst isActionLoading = (action: ActionItem): boolean => {\r\n return unref(action.loading) || false;\r\n};\r\n\r\nconst handleActionClick = async (action: ActionItem) => {\r\n if (action.dropdown && action.dropdown.length > 0) return;\r\n emit(\"action-click\", action);\r\n if (action.onClick) {\r\n await action.onClick();\r\n }\r\n};\r\n\r\nconst handleDropdownClick = async (\r\n item: ActionDropdownItem,\r\n action: ActionItem,\r\n) => {\r\n emit(\"dropdown-click\", item, action);\r\n if (item.onClick) {\r\n await item.onClick();\r\n }\r\n};\r\n\r\nconst ActionButton = defineComponent({\r\n name: \"ActionButton\",\r\n props: {\r\n action: {\r\n type: Object as PropType<ActionItem>,\r\n required: true,\r\n },\r\n },\r\n emits: [\"click\", \"dropdown-select\"],\r\n setup(props, { emit }) {\r\n const action = computed(() => props.action);\r\n\r\n const dropdownOptions = computed(() => {\r\n if (!action.value.dropdown) return [];\r\n return action.value.dropdown\r\n .filter((item) => {\r\n if (item.show === undefined) return true;\r\n return unref(item.show);\r\n })\r\n .map((item) => ({\r\n key: item.key,\r\n label: item.label,\r\n icon: item.icon\r\n ? () => h(C_Icon, { name: item.icon, size: 14 })\r\n : undefined,\r\n disabled: unref(item.disabled),\r\n }));\r\n });\r\n\r\n const handleDropdownSelect = (key: string) => {\r\n const item = action.value.dropdown?.find((d) => d.key === key);\r\n if (item) {\r\n emit(\"dropdown-select\", item);\r\n }\r\n };\r\n\r\n const createButtonVNode = (extraProps?: Record<string, any>) => {\r\n const button = h(\r\n NButton,\r\n {\r\n type: action.value.type || \"default\",\r\n size: action.value.size || finalConfig.value.size,\r\n loading: isActionLoading(action.value),\r\n disabled: isActionDisabled(action.value),\r\n ...extraProps,\r\n ...action.value.buttonProps,\r\n },\r\n {\r\n default: () => action.value.label,\r\n icon: action.value.icon\r\n ? () => h(C_Icon, { name: action.value.icon, size: 16 })\r\n : undefined,\r\n },\r\n );\r\n\r\n return action.value.directives && action.value.directives.length > 0\r\n ? withDirectives(button, action.value.directives as any)\r\n : button;\r\n };\r\n\r\n const renderButton = () => {\r\n const vnode = createButtonVNode({ onClick: () => emit(\"click\") });\r\n if (action.value.tooltip) {\r\n return h(\r\n NTooltip,\r\n { placement: \"top\" },\r\n {\r\n trigger: () => vnode,\r\n default: () => action.value.tooltip,\r\n },\r\n );\r\n }\r\n return vnode;\r\n };\r\n\r\n const renderDropdownButton = () => {\r\n const vnode = createButtonVNode();\r\n return h(\r\n NDropdown,\r\n {\r\n options: dropdownOptions.value,\r\n onSelect: handleDropdownSelect,\r\n },\r\n {\r\n default: () => vnode,\r\n },\r\n );\r\n };\r\n\r\n return () => {\r\n if (action.value.dropdown && action.value.dropdown.length > 0) {\r\n return renderDropdownButton();\r\n }\r\n return renderButton();\r\n };\r\n },\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n@use \"./index.scss\";\r\n</style>\r\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_AntV-AFKyK6hH.css","names":[],"sources":["../src/components/C_AntV/layout/ER/index.vue?vue&type=style&index=0&scoped=c459e320&lang.scss","../src/components/C_AntV/layout/BPMN/index.vue?vue&type=style&index=0&scoped=7e956ab3&lang.scss","../src/components/C_AntV/layout/UML/components/UMLClassEditor.vue?vue&type=style&index=0&scoped=e4ff5cc2&lang.scss","../src/components/C_AntV/layout/UML/index.vue?vue&type=style&index=0&scoped=793e1533&lang.scss","../src/components/C_AntV/index.vue?vue&type=style&index=0&scoped=b03826d0&lang.css"],"sourcesContent":["/* ER 图布局样式 */\n/* AntV X6 图形编辑器公共样式 */\n/* 用于 ER、UML、BPMN 等布局的共享样式 */\n/* 通用布局容器 */\n/* 工具栏样式 */\n/* 图形容器样式 */\n/* 表单项样式 */\n/* 卡片样式 */\n/* 滚动条样式 */\n/* 编辑器容器样式 */\n.er-layout[data-v-c459e320] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 400px;\n}\n.er-layout .toolbar[data-v-c459e320] {\n padding: 12px;\n background: var(--n-color-embedded);\n border-bottom: 1px solid var(--c-border);\n flex-shrink: 0;\n}\n.er-layout .graph-container[data-v-c459e320] {\n flex: 1;\n position: relative;\n min-height: 300px;\n width: 100%;\n border: 1px solid var(--c-border);\n overflow: hidden;\n}\n.er-layout .graph-container[data-v-c459e320] .x6-graph,\n.er-layout .graph-container[data-v-c459e320] .x6-graph-svg {\n width: 100% !important;\n height: 100% !important;\n display: block;\n}\n.er-layout .graph-container[data-v-c459e320] .x6-graph-svg-stage {\n outline: none;\n}\n.er-layout .table-editor[data-v-c459e320] {\n height: 100%;\n overflow-y: auto;\n padding: 0 4px;\n}\n.er-layout .table-editor[data-v-c459e320]::-webkit-scrollbar {\n width: 6px;\n}\n.er-layout .table-editor[data-v-c459e320]::-webkit-scrollbar-thumb {\n background: var(--n-scrollbar-color);\n border-radius: 3px;\n}\n.er-layout .table-editor .fields-container[data-v-c459e320] {\n max-height: calc(100vh - 400px);\n overflow-y: auto;\n}\n.er-layout .table-editor .fields-container[data-v-c459e320]::-webkit-scrollbar {\n width: 6px;\n}\n.er-layout .table-editor .fields-container[data-v-c459e320]::-webkit-scrollbar-thumb {\n background: var(--n-scrollbar-color);\n border-radius: 3px;\n}\n.er-layout .table-editor .fields-container .field-card[data-v-c459e320] {\n margin-bottom: 16px;\n}\n.er-layout .table-editor .fields-container .field-card .field-header[data-v-c459e320] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 13px;\n font-weight: 500;\n}\n.er-layout .table-editor .fields-container .field-card[data-v-c459e320] .n-card-header {\n padding: 10px 16px 8px;\n}\n.er-layout .table-editor .fields-container .field-card[data-v-c459e320] .n-card__content {\n padding: 12px 16px 16px;\n}\n.er-layout .table-editor .fields-container[data-v-c459e320] .n-select {\n min-width: 140px;\n}\n.er-layout .table-editor .fields-container[data-v-c459e320] .n-select .n-select-menu {\n max-height: 200px;\n z-index: 9999;\n}\n.er-layout .table-editor .fields-container .n-form-item[data-v-c459e320] {\n margin-bottom: 8px;\n}\n.er-layout .table-editor .fields-container .n-form-item .n-form-item-label[data-v-c459e320] {\n font-size: 12px;\n color: #666;\n margin-bottom: 4px;\n white-space: nowrap;\n}\n.er-layout .table-editor .fields-container[data-v-c459e320] .n-input {\n min-width: 100px;\n}","/* BPMN 布局样式 */\n/* AntV X6 图形编辑器公共样式 */\n/* 用于 ER、UML、BPMN 等布局的共享样式 */\n/* 通用布局容器 */\n/* 工具栏样式 */\n/* 图形容器样式 */\n/* 表单项样式 */\n/* 卡片样式 */\n/* 滚动条样式 */\n/* 编辑器容器样式 */\n.bpmn-layout[data-v-7e956ab3] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 400px;\n background: var(--n-color-embedded);\n border-radius: 6px;\n overflow: hidden;\n}\n.bpmn-layout .top-toolbar[data-v-7e956ab3] {\n background: var(--c-bg-card);\n border-bottom: 1px solid var(--c-border);\n padding: 10px 16px;\n flex-shrink: 0;\n}\n.bpmn-layout .top-toolbar .toolbar-section[data-v-7e956ab3] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n.bpmn-layout .top-toolbar .toolbar-section .toolbar-group[data-v-7e956ab3] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.bpmn-layout .main-content[data-v-7e956ab3] {\n display: flex;\n flex: 1;\n height: 0;\n}\n.bpmn-layout .main-content .left-panel[data-v-7e956ab3] {\n width: 180px;\n background: var(--c-bg-card);\n border-right: 1px solid var(--c-border);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n}\n.bpmn-layout .main-content .left-panel .panel-title[data-v-7e956ab3] {\n padding: 16px;\n font-weight: 600;\n font-size: 14px;\n color: var(--c-text-1);\n border-bottom: 1px solid var(--c-border);\n}\n.bpmn-layout .main-content .left-panel .element-grid[data-v-7e956ab3] {\n padding: 16px 12px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item[data-v-7e956ab3] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 16px 8px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n color: var(--c-text-2);\n transition: all 0.2s ease;\n border: 1px solid transparent;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item[data-v-7e956ab3]:hover {\n background: rgba(24, 144, 255, 0.1);\n border-color: rgba(24, 144, 255, 0.4);\n color: var(--c-primary);\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item .element-icon[data-v-7e956ab3] {\n flex-shrink: 0;\n border: 2px solid var(--c-border);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item .element-icon.circle[data-v-7e956ab3] {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item .element-icon.rect[data-v-7e956ab3] {\n width: 32px;\n height: 20px;\n border-radius: 4px;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item .element-icon.diamond[data-v-7e956ab3] {\n width: 24px;\n height: 24px;\n transform: rotate(45deg);\n border-radius: 3px;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item .element-icon.start-event[data-v-7e956ab3] {\n border-color: #52c41a;\n background: #f6ffed;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item .element-icon.end-event[data-v-7e956ab3] {\n border-color: #ff4d4f;\n background: #fff2f0;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item .element-icon.activity[data-v-7e956ab3] {\n border-color: #1890ff;\n background: #e6f7ff;\n}\n.bpmn-layout .main-content .left-panel .element-grid .element-item .element-icon.gateway[data-v-7e956ab3] {\n border-color: #722ed1;\n background: #f9f0ff;\n}\n.bpmn-layout .main-content .graph-wrapper[data-v-7e956ab3] {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n.bpmn-layout .main-content .graph-wrapper .graph-container[data-v-7e956ab3] {\n flex: 1;\n position: relative;\n min-height: 300px;\n width: 100%;\n border: 1px solid var(--c-border);\n overflow: hidden;\n border-radius: 4px;\n}\n.bpmn-layout .main-content .graph-wrapper .graph-container[data-v-7e956ab3] .x6-graph,\n.bpmn-layout .main-content .graph-wrapper .graph-container[data-v-7e956ab3] .x6-graph-svg {\n width: 100% !important;\n height: 100% !important;\n display: block;\n}\n.bpmn-layout .main-content .graph-wrapper .graph-container[data-v-7e956ab3] .x6-graph-svg-stage {\n outline: none;\n}\n.n-drawer .property-panel[data-v-7e956ab3] {\n padding: 16px;\n}\n.n-drawer .property-panel .property-item[data-v-7e956ab3] {\n margin-bottom: 16px;\n}\n.n-drawer .property-panel .property-item .property-label[data-v-7e956ab3] {\n font-size: 14px;\n font-weight: 500;\n color: var(--c-text-1);\n margin-bottom: 8px;\n}\n.n-drawer .property-panel .form-actions[data-v-7e956ab3] {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--c-border);\n}",".class-editor[data-v-e4ff5cc2] {\n padding: 20px;\n height: calc(100vh - 60px);\n overflow-y: auto;\n}\n.section[data-v-e4ff5cc2] {\n max-height: 300px;\n overflow-y: auto;\n padding-right: 4px;\n}\n.section[data-v-e4ff5cc2]::-webkit-scrollbar {\n width: 6px;\n}\n.section[data-v-e4ff5cc2]::-webkit-scrollbar-thumb {\n background: #d4d4d4;\n border-radius: 3px;\n}\n.section-header[data-v-e4ff5cc2] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.item[data-v-e4ff5cc2] {\n margin-bottom: 8px;\n}\n.section .n-card[data-v-e4ff5cc2] {\n border: 1px solid #e8e8e8;\n}\n.section .n-card-header[data-v-e4ff5cc2] {\n padding: 8px 12px;\n background: #fafafa;\n border-bottom: 1px solid #e8e8e8;\n}\n.section .n-card__content[data-v-e4ff5cc2] {\n padding: 12px;\n}\n.section .n-form-item[data-v-e4ff5cc2] {\n margin-bottom: 0;\n}\n.section .n-form-item-label[data-v-e4ff5cc2] {\n font-size: 12px;\n margin-bottom: 4px;\n color: #666;\n}","/* UML 类图布局样式 */\n/* AntV X6 图形编辑器公共样式 */\n/* 用于 ER、UML、BPMN 等布局的共享样式 */\n/* 通用布局容器 */\n/* 工具栏样式 */\n/* 图形容器样式 */\n/* 表单项样式 */\n/* 卡片样式 */\n/* 滚动条样式 */\n/* 编辑器容器样式 */\n.uml-layout[data-v-793e1533] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 400px;\n}\n.uml-layout .toolbar[data-v-793e1533] {\n padding: 12px;\n background: var(--n-color-embedded);\n border-bottom: 1px solid var(--c-border);\n flex-shrink: 0;\n}\n.uml-layout .graph-container[data-v-793e1533] {\n flex: 1;\n position: relative;\n min-height: 300px;\n width: 100%;\n border: 1px solid var(--c-border);\n overflow: hidden;\n}\n.uml-layout .graph-container[data-v-793e1533] .x6-graph,\n.uml-layout .graph-container[data-v-793e1533] .x6-graph-svg {\n width: 100% !important;\n height: 100% !important;\n display: block;\n}\n.uml-layout .graph-container[data-v-793e1533] .x6-graph-svg-stage {\n outline: none;\n}\n\n/* 抽屉编辑器样式 - 使用单独的样式块避免 scoped 问题 */\n.class-editor[data-v-793e1533] {\n padding: 20px;\n height: calc(100vh - 60px);\n overflow-y: auto;\n}\n.class-editor[data-v-793e1533]::-webkit-scrollbar {\n width: 6px;\n}\n.class-editor[data-v-793e1533]::-webkit-scrollbar-thumb {\n background: var(--n-scrollbar-color);\n border-radius: 3px;\n}\n.class-editor .section[data-v-793e1533] {\n max-height: 300px;\n overflow-y: auto;\n padding-right: 4px;\n}\n.class-editor .section[data-v-793e1533]::-webkit-scrollbar {\n width: 6px;\n}\n.class-editor .section[data-v-793e1533]::-webkit-scrollbar-thumb {\n background: var(--n-scrollbar-color);\n border-radius: 3px;\n}\n.class-editor .section .item[data-v-793e1533] {\n margin-bottom: 8px;\n}\n.class-editor .section .n-card[data-v-793e1533] {\n border: 1px solid var(--c-border);\n}\n.class-editor .section .n-card .n-card-header[data-v-793e1533] {\n padding: 8px 12px;\n background: var(--n-color-embedded);\n border-bottom: 1px solid var(--c-border);\n}\n.class-editor .section .n-card .n-card__content[data-v-793e1533] {\n padding: 12px;\n}\n.class-editor .section .n-form-item[data-v-793e1533] {\n margin-bottom: 8px;\n}\n.class-editor .section .n-form-item .n-form-item-label[data-v-793e1533] {\n font-size: 12px;\n color: #666;\n margin-bottom: 4px;\n white-space: nowrap;\n}","\n.c-antv-container[data-v-b03826d0] {\r\n width: 100%;\r\n height: 100%;\n}\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA"}
@@ -0,0 +1,8 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ require('./C_Icon.js');
3
+ const require_C_AntV = require('./C_AntV.js');
4
+
5
+ exports.C_AntV = require_C_AntV.C_AntV_default;
6
+ exports.useEdgeInteraction = require_C_AntV.useEdgeInteraction;
7
+ exports.useGraphBase = require_C_AntV.useGraphBase;
8
+ exports.useGraphExport = require_C_AntV.useGraphExport;
@@ -0,0 +1,2 @@
1
+ import { A as SelectionConfig, C as KeyboardConfig, D as MouseWheelConfig, E as MinimapConfig, F as UMLClass, I as UMLDiagramData, L as UMLMethod, M as ThemeConfig, N as ToolbarAction, O as Position, P as UMLAttribute, R as UMLRelation, S as HistoryConfig, T as MenuItem, _ as ExportFormat, a as BPMNDiagramData, b as GraphExportOptions, c as ClipboardConfig, d as DiagramData, f as DiagramType, g as ERTable, h as ERRelation, i as _default, j as SnapshotConfig, k as ScrollerConfig, l as ConnectionConfig, m as ERField, n as useGraphExport, o as BPMNFlow, p as ERDiagramData, r as useGraphBase, s as BPMNNode, t as useEdgeInteraction, u as DiagramConfig, v as GraphConfig, w as LayoutOptions, x as GridConfig, y as GraphEvents, z as ValidationResult } from "./useEdgeInteraction.js";
2
+ export { type BPMNDiagramData, type BPMNFlow, type BPMNNode, _default as C_AntV, type ClipboardConfig, type ConnectionConfig, type DiagramConfig, type DiagramData, type DiagramType, type ERDiagramData, type ERField, type ERRelation, type ERTable, type ExportFormat, type GraphConfig, type GraphEvents, type GraphExportOptions, type GridConfig, type HistoryConfig, type KeyboardConfig, type LayoutOptions, type MenuItem, type MinimapConfig, type MouseWheelConfig, type Position, type ScrollerConfig, type SelectionConfig, type SnapshotConfig, type ThemeConfig, type ToolbarAction, type UMLAttribute, type UMLClass, type UMLDiagramData, type UMLMethod, type UMLRelation, type ValidationResult, useEdgeInteraction, useGraphBase, useGraphExport };
@@ -0,0 +1,2 @@
1
+ import { A as SelectionConfig, C as KeyboardConfig, D as MouseWheelConfig, E as MinimapConfig, F as UMLClass, I as UMLDiagramData, L as UMLMethod, M as ThemeConfig, N as ToolbarAction, O as Position, P as UMLAttribute, R as UMLRelation, S as HistoryConfig, T as MenuItem, _ as ExportFormat, a as BPMNDiagramData, b as GraphExportOptions, c as ClipboardConfig, d as DiagramData, f as DiagramType, g as ERTable, h as ERRelation, i as _default, j as SnapshotConfig, k as ScrollerConfig, l as ConnectionConfig, m as ERField, n as useGraphExport, o as BPMNFlow, p as ERDiagramData, r as useGraphBase, s as BPMNNode, t as useEdgeInteraction, u as DiagramConfig, v as GraphConfig, w as LayoutOptions, x as GridConfig, y as GraphEvents, z as ValidationResult } from "./useEdgeInteraction.js";
2
+ export { type BPMNDiagramData, type BPMNFlow, type BPMNNode, _default as C_AntV, type ClipboardConfig, type ConnectionConfig, type DiagramConfig, type DiagramData, type DiagramType, type ERDiagramData, type ERField, type ERRelation, type ERTable, type ExportFormat, type GraphConfig, type GraphEvents, type GraphExportOptions, type GridConfig, type HistoryConfig, type KeyboardConfig, type LayoutOptions, type MenuItem, type MinimapConfig, type MouseWheelConfig, type Position, type ScrollerConfig, type SelectionConfig, type SnapshotConfig, type ThemeConfig, type ToolbarAction, type UMLAttribute, type UMLClass, type UMLDiagramData, type UMLMethod, type UMLRelation, type ValidationResult, useEdgeInteraction, useGraphBase, useGraphExport };
package/dist/C_AntV.js ADDED
@@ -0,0 +1,4 @@
1
+ import "./C_Icon2.js";
2
+ import { i as useGraphBase, n as useEdgeInteraction, r as useGraphExport, t as C_AntV_default } from "./C_AntV2.js";
3
+
4
+ export { C_AntV_default as C_AntV, useEdgeInteraction, useGraphBase, useGraphExport };