@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
@@ -0,0 +1,441 @@
1
+ import { t as C_Icon_default } from "./C_Icon2.js";
2
+ import { t as export_helper_default } from "./export-helper.js";
3
+ import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, h, isRef, openBlock, ref, renderSlot, toDisplayString, unref, withCtx } from "vue";
4
+ import { NButton, NInput, NPopconfirm, NSpace, NTag, NTree } from "naive-ui";
5
+
6
+ //#region src/components/C_Tree/data.ts
7
+ const presetConfigs = {
8
+ menu: {
9
+ draggable: true,
10
+ showLine: true,
11
+ iconConfig: { typeMap: {
12
+ directory: "mdi:folder",
13
+ menu: "mdi:file-document",
14
+ button: "mdi:button-cursor"
15
+ } },
16
+ actions: [
17
+ {
18
+ key: "add",
19
+ text: "新增子菜单",
20
+ icon: "mdi:plus",
21
+ type: "primary"
22
+ },
23
+ {
24
+ key: "edit",
25
+ text: "编辑",
26
+ icon: "mdi:pencil",
27
+ type: "info"
28
+ },
29
+ {
30
+ key: "delete",
31
+ text: "删除",
32
+ icon: "mdi:delete",
33
+ type: "error",
34
+ confirm: "确认删除该菜单吗?"
35
+ }
36
+ ]
37
+ },
38
+ file: {
39
+ draggable: false,
40
+ showLine: false,
41
+ iconConfig: { typeMap: {
42
+ folder: "mdi:folder",
43
+ file: "mdi:file-document",
44
+ image: "mdi:file-image",
45
+ video: "mdi:file-video",
46
+ audio: "mdi:file-music"
47
+ } },
48
+ actions: [
49
+ {
50
+ key: "open",
51
+ text: "打开",
52
+ icon: "mdi:folder-open",
53
+ type: "primary"
54
+ },
55
+ {
56
+ key: "rename",
57
+ text: "重命名",
58
+ icon: "mdi:rename-box",
59
+ type: "info"
60
+ },
61
+ {
62
+ key: "delete",
63
+ text: "删除",
64
+ icon: "mdi:delete",
65
+ type: "error",
66
+ confirm: "确认删除该文件吗?"
67
+ }
68
+ ]
69
+ },
70
+ org: {
71
+ draggable: false,
72
+ showLine: true,
73
+ iconConfig: { typeMap: {
74
+ department: "mdi:domain",
75
+ user: "mdi:account",
76
+ manager: "mdi:account-tie"
77
+ } },
78
+ actions: [{
79
+ key: "add",
80
+ text: "新增下级",
81
+ icon: "mdi:plus",
82
+ type: "primary"
83
+ }, {
84
+ key: "edit",
85
+ text: "编辑",
86
+ icon: "mdi:pencil",
87
+ type: "info"
88
+ }]
89
+ },
90
+ custom: {}
91
+ };
92
+
93
+ //#endregion
94
+ //#region src/components/C_Tree/composables/useTreeOperations.ts
95
+ function useTreeOperations(props, emit) {
96
+ const internalSearchPattern = ref("");
97
+ const expandedKeys = ref(props.defaultExpandedKeys ?? []);
98
+ const selectedKeys = ref(props.defaultSelectedKeys ?? []);
99
+ const isAllExpanded = ref(props.defaultExpandAll ?? false);
100
+ const keyField = computed(() => props.keyField ?? "id");
101
+ const labelField = computed(() => props.labelField ?? "name");
102
+ const childrenField = computed(() => props.childrenField ?? "children");
103
+ const iconField = computed(() => props.iconField ?? "icon");
104
+ const mergedConfig = computed(() => {
105
+ const preset = presetConfigs[props.mode ?? "custom"] || {};
106
+ return {
107
+ ...preset,
108
+ ...props,
109
+ iconConfig: {
110
+ ...preset.iconConfig,
111
+ ...props.iconConfig
112
+ },
113
+ actions: props.actions?.length ? props.actions : preset.actions || []
114
+ };
115
+ });
116
+ const treeData = computed(() => props.data);
117
+ const currentSearchPattern = computed(() => props.searchPattern || internalSearchPattern.value);
118
+ const selectedNode = computed(() => {
119
+ if (selectedKeys.value.length === 0) return null;
120
+ const findNode = (nodes, id) => {
121
+ for (const node of nodes) {
122
+ if (node[keyField.value] === id) return node;
123
+ if (node[childrenField.value]) {
124
+ const found = findNode(node[childrenField.value], id);
125
+ if (found) return found;
126
+ }
127
+ }
128
+ return null;
129
+ };
130
+ return findNode(props.data, selectedKeys.value[0]);
131
+ });
132
+ const getAllKeys = (nodes) => {
133
+ const keys = [];
134
+ nodes.forEach((node) => {
135
+ keys.push(node[keyField.value]);
136
+ if (node[childrenField.value]) keys.push(...getAllKeys(node[childrenField.value]));
137
+ });
138
+ return keys;
139
+ };
140
+ const getNodeIcon = (node) => {
141
+ const config = mergedConfig.value.iconConfig;
142
+ if (node[iconField.value]) return node[iconField.value];
143
+ if (node.type && config.typeMap?.[node.type]) return config.typeMap[node.type];
144
+ return config.default || "mdi:circle-outline";
145
+ };
146
+ const getNodeIconColor = (node) => {
147
+ const config = mergedConfig.value.iconConfig;
148
+ if (node.type && config.colorMap?.[node.type]) return config.colorMap[node.type];
149
+ return "currentColor";
150
+ };
151
+ const renderPrefix = ({ option }) => {
152
+ const node = option;
153
+ return h(C_Icon_default, {
154
+ name: getNodeIcon(node),
155
+ size: 18,
156
+ color: getNodeIconColor(node),
157
+ class: "mr-3 flex-shrink-0"
158
+ });
159
+ };
160
+ const renderLabel = ({ option }) => {
161
+ const node = option;
162
+ const statusTags = props.statusConfigs?.map((config) => {
163
+ const value = node[config.field];
164
+ const statusConfig = config.values[value];
165
+ if (!statusConfig?.text) return null;
166
+ return h(NTag, {
167
+ type: statusConfig.type,
168
+ size: "small",
169
+ class: "ml-2",
170
+ style: { fontSize: "12px" }
171
+ }, { default: () => statusConfig.text });
172
+ }).filter(Boolean) || [];
173
+ return h("div", {
174
+ class: "flex items-center flex-1 min-w-0 py-1",
175
+ style: { lineHeight: "1.5" }
176
+ }, [h("span", { class: "mr-3 font-medium text-sm" }, node[labelField.value]), ...statusTags]);
177
+ };
178
+ const renderSuffix = ({ option }) => {
179
+ const node = option;
180
+ const actionButtons = (mergedConfig.value.actions || []).filter((action) => !action.show || action.show(node)).map((action) => {
181
+ const buttonProps = {
182
+ size: "tiny",
183
+ type: action.type || "default",
184
+ secondary: true,
185
+ style: {
186
+ padding: "4px 6px",
187
+ minWidth: "24px",
188
+ height: "24px"
189
+ },
190
+ onClick: (e) => {
191
+ e.stopPropagation();
192
+ handleNodeAction(action.key, node);
193
+ }
194
+ };
195
+ const iconEl = h(C_Icon_default, {
196
+ name: action.icon,
197
+ size: 12,
198
+ title: action.text
199
+ });
200
+ if (action.confirm) return h(NPopconfirm, { onPositiveClick: () => handleNodeAction(action.key, node) }, {
201
+ trigger: () => h(NButton, {
202
+ ...buttonProps,
203
+ onClick: (e) => e.stopPropagation()
204
+ }, { icon: () => iconEl }),
205
+ default: () => action.confirm
206
+ });
207
+ return h(NButton, buttonProps, { icon: () => iconEl });
208
+ });
209
+ return h("div", {
210
+ class: "tree-actions",
211
+ style: {
212
+ display: "flex",
213
+ alignItems: "center",
214
+ marginLeft: "8px",
215
+ opacity: "0",
216
+ transition: "opacity 0.2s ease"
217
+ }
218
+ }, [h(NSpace, { size: 4 }, { default: () => actionButtons })]);
219
+ };
220
+ const toggleExpandAll = () => {
221
+ if (isAllExpanded.value) {
222
+ expandedKeys.value = [];
223
+ isAllExpanded.value = false;
224
+ } else {
225
+ expandedKeys.value = getAllKeys(props.data);
226
+ isAllExpanded.value = true;
227
+ }
228
+ };
229
+ const handleExpandedKeysChange = (keys) => {
230
+ expandedKeys.value = keys;
231
+ isAllExpanded.value = keys.length === getAllKeys(props.data).length;
232
+ };
233
+ const handleSelectedKeysChange = (keys) => {
234
+ selectedKeys.value = keys;
235
+ emit("node-select", selectedNode.value, keys);
236
+ };
237
+ const handleDrop = (info) => emit("node-drop", info);
238
+ const handleNodeAction = (action, node) => {
239
+ if (action === "add") emit("add", node);
240
+ else emit("node-action", action, node);
241
+ };
242
+ const handleAdd = () => emit("add");
243
+ const handleRefresh = () => emit("refresh");
244
+ return {
245
+ internalSearchPattern,
246
+ expandedKeys,
247
+ selectedKeys,
248
+ isAllExpanded,
249
+ treeData,
250
+ currentSearchPattern,
251
+ renderPrefix,
252
+ renderLabel,
253
+ renderSuffix,
254
+ toggleExpandAll,
255
+ handleExpandedKeysChange,
256
+ handleSelectedKeysChange,
257
+ handleDrop,
258
+ handleAdd,
259
+ handleRefresh,
260
+ expose: {
261
+ expandAll: () => {
262
+ expandedKeys.value = getAllKeys(props.data);
263
+ isAllExpanded.value = true;
264
+ },
265
+ collapseAll: () => {
266
+ expandedKeys.value = [];
267
+ isAllExpanded.value = false;
268
+ },
269
+ selectNode: (key) => {
270
+ selectedKeys.value = [key];
271
+ },
272
+ getSelectedNode: () => selectedNode.value,
273
+ expandedKeys,
274
+ selectedKeys
275
+ }
276
+ };
277
+ }
278
+
279
+ //#endregion
280
+ //#region src/components/C_Tree/index.vue?vue&type=script&setup=true&lang.ts
281
+ const _hoisted_1 = { class: "c-tree" };
282
+ const _hoisted_2 = {
283
+ key: 0,
284
+ class: "c-tree-toolbar"
285
+ };
286
+ const _hoisted_3 = { class: "toolbar-left" };
287
+ const _hoisted_4 = { class: "toolbar-right" };
288
+ const _hoisted_5 = { class: "c-tree-container" };
289
+ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
290
+ name: "C_Tree",
291
+ __name: "index",
292
+ props: {
293
+ data: {},
294
+ mode: { default: "custom" },
295
+ keyField: { default: "id" },
296
+ labelField: { default: "name" },
297
+ childrenField: { default: "children" },
298
+ searchPattern: { default: "" },
299
+ searchable: {
300
+ type: Boolean,
301
+ default: true
302
+ },
303
+ searchPlaceholder: { default: "搜索..." },
304
+ draggable: {
305
+ type: Boolean,
306
+ default: false
307
+ },
308
+ showLine: {
309
+ type: Boolean,
310
+ default: true
311
+ },
312
+ showToolbar: {
313
+ type: Boolean,
314
+ default: true
315
+ },
316
+ addable: {
317
+ type: Boolean,
318
+ default: true
319
+ },
320
+ addText: { default: "新增" },
321
+ refreshable: {
322
+ type: Boolean,
323
+ default: true
324
+ },
325
+ iconField: { default: "icon" },
326
+ iconConfig: { default: () => ({
327
+ default: "mdi:circle-outline",
328
+ typeMap: {},
329
+ colorMap: {}
330
+ }) },
331
+ statusConfigs: { default: () => [] },
332
+ actions: { default: () => [] },
333
+ defaultExpandAll: {
334
+ type: Boolean,
335
+ default: false
336
+ },
337
+ defaultExpandedKeys: { default: () => [] },
338
+ defaultSelectedKeys: { default: () => [] }
339
+ },
340
+ emits: [
341
+ "node-select",
342
+ "node-action",
343
+ "node-drop",
344
+ "add",
345
+ "refresh"
346
+ ],
347
+ setup(__props, { expose: __expose, emit: __emit }) {
348
+ const { internalSearchPattern, expandedKeys, selectedKeys, isAllExpanded, treeData, currentSearchPattern, renderPrefix, renderLabel, renderSuffix, toggleExpandAll, handleExpandedKeysChange, handleSelectedKeysChange, handleDrop, handleAdd, handleRefresh, expose } = useTreeOperations(__props, __emit);
349
+ __expose(expose);
350
+ return (_ctx, _cache) => {
351
+ return openBlock(), createElementBlock("div", _hoisted_1, [_ctx.showToolbar ? (openBlock(), createElementBlock("div", _hoisted_2, [createElementVNode("div", _hoisted_3, [_ctx.searchable ? (openBlock(), createBlock(unref(NInput), {
352
+ key: 0,
353
+ value: unref(internalSearchPattern),
354
+ "onUpdate:value": _cache[0] || (_cache[0] = ($event) => isRef(internalSearchPattern) ? internalSearchPattern.value = $event : null),
355
+ placeholder: _ctx.searchPlaceholder,
356
+ clearable: "",
357
+ class: "search-input"
358
+ }, {
359
+ prefix: withCtx(() => [createVNode(C_Icon_default, {
360
+ name: "mdi:magnify",
361
+ size: 16
362
+ })]),
363
+ _: 1
364
+ }, 8, ["value", "placeholder"])) : createCommentVNode("v-if", true)]), createElementVNode("div", _hoisted_4, [renderSlot(_ctx.$slots, "toolbar-actions", {}, () => [
365
+ _ctx.addable ? (openBlock(), createBlock(unref(NButton), {
366
+ key: 0,
367
+ type: "primary",
368
+ onClick: _cache[1] || (_cache[1] = ($event) => unref(handleAdd)())
369
+ }, {
370
+ icon: withCtx(() => [createVNode(C_Icon_default, {
371
+ name: "mdi:plus",
372
+ size: 16
373
+ })]),
374
+ default: withCtx(() => [createTextVNode(" " + toDisplayString(_ctx.addText), 1)]),
375
+ _: 1
376
+ })) : createCommentVNode("v-if", true),
377
+ createVNode(unref(NButton), { onClick: unref(toggleExpandAll) }, {
378
+ icon: withCtx(() => [createVNode(C_Icon_default, {
379
+ name: "mdi:file-tree",
380
+ size: 16
381
+ })]),
382
+ default: withCtx(() => [createTextVNode(" " + toDisplayString(unref(isAllExpanded) ? "收起全部" : "展开全部"), 1)]),
383
+ _: 1
384
+ }, 8, ["onClick"]),
385
+ _ctx.refreshable ? (openBlock(), createBlock(unref(NButton), {
386
+ key: 1,
387
+ onClick: unref(handleRefresh)
388
+ }, {
389
+ icon: withCtx(() => [createVNode(C_Icon_default, {
390
+ name: "mdi:refresh",
391
+ size: 16
392
+ })]),
393
+ default: withCtx(() => [_cache[2] || (_cache[2] = createTextVNode(" 刷新 ", -1))]),
394
+ _: 1,
395
+ __: [2]
396
+ }, 8, ["onClick"])) : createCommentVNode("v-if", true)
397
+ ], true)])])) : createCommentVNode("v-if", true), createElementVNode("div", _hoisted_5, [createVNode(unref(NTree), {
398
+ data: unref(treeData),
399
+ pattern: unref(currentSearchPattern),
400
+ "expanded-keys": unref(expandedKeys),
401
+ "selected-keys": unref(selectedKeys),
402
+ draggable: _ctx.draggable,
403
+ "show-line": _ctx.showLine,
404
+ "render-prefix": unref(renderPrefix),
405
+ "render-suffix": unref(renderSuffix),
406
+ "render-label": unref(renderLabel),
407
+ "key-field": _ctx.keyField,
408
+ "label-field": _ctx.labelField,
409
+ "children-field": _ctx.childrenField,
410
+ "onUpdate:expandedKeys": unref(handleExpandedKeysChange),
411
+ "onUpdate:selectedKeys": unref(handleSelectedKeysChange),
412
+ onDrop: unref(handleDrop),
413
+ class: "tree-instance"
414
+ }, null, 8, [
415
+ "data",
416
+ "pattern",
417
+ "expanded-keys",
418
+ "selected-keys",
419
+ "draggable",
420
+ "show-line",
421
+ "render-prefix",
422
+ "render-suffix",
423
+ "render-label",
424
+ "key-field",
425
+ "label-field",
426
+ "children-field",
427
+ "onUpdate:expandedKeys",
428
+ "onUpdate:selectedKeys",
429
+ "onDrop"
430
+ ])])]);
431
+ };
432
+ }
433
+ });
434
+
435
+ //#endregion
436
+ //#region src/components/C_Tree/index.vue
437
+ var C_Tree_default = /* @__PURE__ */ export_helper_default(index_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-ecf2afc2"]]);
438
+
439
+ //#endregion
440
+ export { useTreeOperations as n, presetConfigs as r, C_Tree_default as t };
441
+ //# sourceMappingURL=C_Tree2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_Tree2.js","names":["C_Icon","showToolbar","searchable","searchPlaceholder","addable","addText","refreshable","draggable","showLine","keyField","labelField","childrenField"],"sources":["../src/components/C_Tree/data.ts","../src/components/C_Tree/composables/useTreeOperations.ts","../src/components/C_Tree/index.vue","../src/components/C_Tree/index.vue","../src/components/C_Tree/index.vue"],"sourcesContent":["import type { TreeMode, TreeProps } from \"./types\";\r\n\r\nexport const presetConfigs: Record<TreeMode, Partial<TreeProps>> = {\r\n menu: {\r\n draggable: true,\r\n showLine: true,\r\n iconConfig: {\r\n typeMap: {\r\n directory: \"mdi:folder\",\r\n menu: \"mdi:file-document\",\r\n button: \"mdi:button-cursor\",\r\n },\r\n },\r\n actions: [\r\n { key: \"add\", text: \"新增子菜单\", icon: \"mdi:plus\", type: \"primary\" },\r\n { key: \"edit\", text: \"编辑\", icon: \"mdi:pencil\", type: \"info\" },\r\n {\r\n key: \"delete\",\r\n text: \"删除\",\r\n icon: \"mdi:delete\",\r\n type: \"error\",\r\n confirm: \"确认删除该菜单吗?\",\r\n },\r\n ],\r\n },\r\n file: {\r\n draggable: false,\r\n showLine: false,\r\n iconConfig: {\r\n typeMap: {\r\n folder: \"mdi:folder\",\r\n file: \"mdi:file-document\",\r\n image: \"mdi:file-image\",\r\n video: \"mdi:file-video\",\r\n audio: \"mdi:file-music\",\r\n },\r\n },\r\n actions: [\r\n { key: \"open\", text: \"打开\", icon: \"mdi:folder-open\", type: \"primary\" },\r\n { key: \"rename\", text: \"重命名\", icon: \"mdi:rename-box\", type: \"info\" },\r\n {\r\n key: \"delete\",\r\n text: \"删除\",\r\n icon: \"mdi:delete\",\r\n type: \"error\",\r\n confirm: \"确认删除该文件吗?\",\r\n },\r\n ],\r\n },\r\n org: {\r\n draggable: false,\r\n showLine: true,\r\n iconConfig: {\r\n typeMap: {\r\n department: \"mdi:domain\",\r\n user: \"mdi:account\",\r\n manager: \"mdi:account-tie\",\r\n },\r\n },\r\n actions: [\r\n { key: \"add\", text: \"新增下级\", icon: \"mdi:plus\", type: \"primary\" },\r\n { key: \"edit\", text: \"编辑\", icon: \"mdi:pencil\", type: \"info\" },\r\n ],\r\n },\r\n custom: {},\r\n};\r\n","import { ref, computed, h } from \"vue\";\r\nimport { NTag, NButton, NPopconfirm, NSpace } from \"naive-ui\";\r\nimport C_Icon from \"../../C_Icon/index.vue\";\r\nimport { presetConfigs } from \"../data\";\r\nimport type {\r\n TreeOption,\r\n TreeNodeData,\r\n TreeProps,\r\n TreeExpose,\r\n DropInfo,\r\n} from \"../types\";\r\n\r\ntype EmitFn = {\r\n (\r\n event: \"node-select\",\r\n node: TreeNodeData | null,\r\n selectedKeys: (string | number)[],\r\n ): void;\r\n (event: \"node-action\", action: string, node: TreeNodeData): void;\r\n (event: \"node-drop\", info: DropInfo): void;\r\n (event: \"add\", parentNode?: TreeNodeData): void;\r\n (event: \"refresh\"): void;\r\n};\r\n\r\nexport function useTreeOperations(props: TreeProps, emit: EmitFn) {\r\n const internalSearchPattern = ref(\"\");\r\n const expandedKeys = ref<(string | number)[]>(\r\n props.defaultExpandedKeys ?? [],\r\n );\r\n const selectedKeys = ref<(string | number)[]>(\r\n props.defaultSelectedKeys ?? [],\r\n );\r\n const isAllExpanded = ref(props.defaultExpandAll ?? false);\r\n\r\n const keyField = computed(() => props.keyField ?? \"id\");\r\n const labelField = computed(() => props.labelField ?? \"name\");\r\n const childrenField = computed(() => props.childrenField ?? \"children\");\r\n const iconField = computed(() => props.iconField ?? \"icon\");\r\n\r\n const mergedConfig = computed(() => {\r\n const preset = presetConfigs[props.mode ?? \"custom\"] || {};\r\n return {\r\n ...preset,\r\n ...props,\r\n iconConfig: { ...preset.iconConfig, ...props.iconConfig },\r\n actions: props.actions?.length ? props.actions : preset.actions || [],\r\n };\r\n });\r\n\r\n const treeData = computed((): TreeOption[] => props.data as TreeOption[]);\r\n\r\n const currentSearchPattern = computed(\r\n () => props.searchPattern || internalSearchPattern.value,\r\n );\r\n\r\n const selectedNode = computed((): TreeNodeData | null => {\r\n if (selectedKeys.value.length === 0) return null;\r\n const findNode = (\r\n nodes: TreeNodeData[],\r\n id: string | number,\r\n ): TreeNodeData | null => {\r\n for (const node of nodes) {\r\n if (node[keyField.value] === id) return node;\r\n if (node[childrenField.value]) {\r\n const found = findNode(node[childrenField.value], id);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n return findNode(props.data, selectedKeys.value[0]);\r\n });\r\n\r\n const getAllKeys = (nodes: TreeNodeData[]): (string | number)[] => {\r\n const keys: (string | number)[] = [];\r\n nodes.forEach((node) => {\r\n keys.push(node[keyField.value]);\r\n if (node[childrenField.value]) {\r\n keys.push(...getAllKeys(node[childrenField.value]));\r\n }\r\n });\r\n return keys;\r\n };\r\n\r\n const getNodeIcon = (node: TreeNodeData): string => {\r\n const config = mergedConfig.value.iconConfig!;\r\n if (node[iconField.value]) return node[iconField.value];\r\n if (node.type && config.typeMap?.[node.type])\r\n return config.typeMap[node.type];\r\n return config.default || \"mdi:circle-outline\";\r\n };\r\n\r\n const getNodeIconColor = (node: TreeNodeData): string => {\r\n const config = mergedConfig.value.iconConfig!;\r\n if (node.type && config.colorMap?.[node.type])\r\n return config.colorMap[node.type];\r\n return \"currentColor\";\r\n };\r\n\r\n const renderPrefix = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n return h(C_Icon, {\r\n name: getNodeIcon(node),\r\n size: 18,\r\n color: getNodeIconColor(node),\r\n class: \"mr-3 flex-shrink-0\",\r\n });\r\n };\r\n\r\n const renderLabel = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n const statusTags =\r\n props.statusConfigs\r\n ?.map((config) => {\r\n const value = node[config.field];\r\n const statusConfig = config.values[value];\r\n if (!statusConfig?.text) return null;\r\n return h(\r\n NTag,\r\n {\r\n type: statusConfig.type,\r\n size: \"small\",\r\n class: \"ml-2\",\r\n style: { fontSize: \"12px\" },\r\n },\r\n { default: () => statusConfig.text },\r\n );\r\n })\r\n .filter(Boolean) || [];\r\n\r\n return h(\r\n \"div\",\r\n {\r\n class: \"flex items-center flex-1 min-w-0 py-1\",\r\n style: { lineHeight: \"1.5\" },\r\n },\r\n [\r\n h(\r\n \"span\",\r\n { class: \"mr-3 font-medium text-sm\" },\r\n node[labelField.value],\r\n ),\r\n ...statusTags,\r\n ],\r\n );\r\n };\r\n\r\n const renderSuffix = ({ option }: { option: TreeOption }) => {\r\n const node = option as TreeNodeData;\r\n const actions = mergedConfig.value.actions || [];\r\n\r\n const actionButtons = actions\r\n .filter((action) => !action.show || action.show(node))\r\n .map((action) => {\r\n const buttonProps = {\r\n size: \"tiny\" as const,\r\n type: action.type || (\"default\" as const),\r\n secondary: true,\r\n style: { padding: \"4px 6px\", minWidth: \"24px\", height: \"24px\" },\r\n onClick: (e: Event) => {\r\n e.stopPropagation();\r\n handleNodeAction(action.key, node);\r\n },\r\n };\r\n const iconEl = h(C_Icon, {\r\n name: action.icon,\r\n size: 12,\r\n title: action.text,\r\n });\r\n\r\n if (action.confirm) {\r\n return h(\r\n NPopconfirm,\r\n { onPositiveClick: () => handleNodeAction(action.key, node) },\r\n {\r\n trigger: () =>\r\n h(\r\n NButton,\r\n {\r\n ...buttonProps,\r\n onClick: (e: Event) => e.stopPropagation(),\r\n },\r\n { icon: () => iconEl },\r\n ),\r\n default: () => action.confirm,\r\n },\r\n );\r\n }\r\n return h(NButton, buttonProps, { icon: () => iconEl });\r\n });\r\n\r\n return h(\r\n \"div\",\r\n {\r\n class: \"tree-actions\",\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginLeft: \"8px\",\r\n opacity: \"0\",\r\n transition: \"opacity 0.2s ease\",\r\n },\r\n },\r\n [h(NSpace, { size: 4 }, { default: () => actionButtons })],\r\n );\r\n };\r\n\r\n const toggleExpandAll = (): void => {\r\n if (isAllExpanded.value) {\r\n expandedKeys.value = [];\r\n isAllExpanded.value = false;\r\n } else {\r\n expandedKeys.value = getAllKeys(props.data);\r\n isAllExpanded.value = true;\r\n }\r\n };\r\n\r\n const handleExpandedKeysChange = (keys: (string | number)[]): void => {\r\n expandedKeys.value = keys;\r\n isAllExpanded.value = keys.length === getAllKeys(props.data).length;\r\n };\r\n\r\n const handleSelectedKeysChange = (keys: (string | number)[]): void => {\r\n selectedKeys.value = keys;\r\n emit(\"node-select\", selectedNode.value, keys);\r\n };\r\n\r\n const handleDrop = (info: DropInfo): void => emit(\"node-drop\", info);\r\n\r\n const handleNodeAction = (action: string, node: TreeNodeData): void => {\r\n if (action === \"add\") {\r\n emit(\"add\", node);\r\n } else {\r\n emit(\"node-action\", action, node);\r\n }\r\n };\r\n\r\n const handleAdd = (): void => emit(\"add\");\r\n const handleRefresh = (): void => emit(\"refresh\");\r\n\r\n const expose: TreeExpose = {\r\n expandAll: () => {\r\n expandedKeys.value = getAllKeys(props.data);\r\n isAllExpanded.value = true;\r\n },\r\n collapseAll: () => {\r\n expandedKeys.value = [];\r\n isAllExpanded.value = false;\r\n },\r\n selectNode: (key: string | number) => {\r\n selectedKeys.value = [key];\r\n },\r\n getSelectedNode: () => selectedNode.value,\r\n expandedKeys,\r\n selectedKeys,\r\n };\r\n\r\n return {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n };\r\n}\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-27\r\n * @Description: 树型组件 — 薄 UI 壳,逻辑由 useTreeOperations 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-tree\">\r\n <div v-if=\"showToolbar\" class=\"c-tree-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <NInput\r\n v-if=\"searchable\"\r\n v-model:value=\"internalSearchPattern\"\r\n :placeholder=\"searchPlaceholder\"\r\n clearable\r\n class=\"search-input\"\r\n >\r\n <template #prefix>\r\n <C_Icon name=\"mdi:magnify\" :size=\"16\" />\r\n </template>\r\n </NInput>\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-actions\">\r\n <NButton v-if=\"addable\" type=\"primary\" @click=\"handleAdd()\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:plus\" :size=\"16\" />\r\n </template>\r\n {{ addText }}\r\n </NButton>\r\n <NButton @click=\"toggleExpandAll\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:file-tree\" :size=\"16\" />\r\n </template>\r\n {{ isAllExpanded ? \"收起全部\" : \"展开全部\" }}\r\n </NButton>\r\n <NButton v-if=\"refreshable\" @click=\"handleRefresh\">\r\n <template #icon>\r\n <C_Icon name=\"mdi:refresh\" :size=\"16\" />\r\n </template>\r\n 刷新\r\n </NButton>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-tree-container\">\r\n <NTree\r\n :data=\"treeData\"\r\n :pattern=\"currentSearchPattern\"\r\n :expanded-keys=\"expandedKeys\"\r\n :selected-keys=\"selectedKeys\"\r\n :draggable=\"draggable\"\r\n :show-line=\"showLine\"\r\n :render-prefix=\"renderPrefix\"\r\n :render-suffix=\"renderSuffix\"\r\n :render-label=\"renderLabel\"\r\n :key-field=\"keyField\"\r\n :label-field=\"labelField\"\r\n :children-field=\"childrenField\"\r\n @update:expanded-keys=\"handleExpandedKeysChange\"\r\n @update:selected-keys=\"handleSelectedKeysChange\"\r\n @drop=\"handleDrop\"\r\n class=\"tree-instance\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NInput, NButton, NTree } from \"naive-ui\";\r\nimport C_Icon from \"../C_Icon/index.vue\";\r\nimport { useTreeOperations } from \"./composables/useTreeOperations\";\r\nimport type { TreeProps, TreeEmits, TreeExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_Tree\" });\r\n\r\nconst props = withDefaults(defineProps<TreeProps>(), {\r\n mode: \"custom\",\r\n keyField: \"id\",\r\n labelField: \"name\",\r\n childrenField: \"children\",\r\n searchPattern: \"\",\r\n searchable: true,\r\n searchPlaceholder: \"搜索...\",\r\n draggable: false,\r\n showLine: true,\r\n showToolbar: true,\r\n addable: true,\r\n addText: \"新增\",\r\n refreshable: true,\r\n iconField: \"icon\",\r\n iconConfig: () => ({\r\n default: \"mdi:circle-outline\",\r\n typeMap: {},\r\n colorMap: {},\r\n }),\r\n statusConfigs: () => [],\r\n actions: () => [],\r\n defaultExpandAll: false,\r\n defaultExpandedKeys: () => [],\r\n defaultSelectedKeys: () => [],\r\n});\r\n\r\nconst emit = defineEmits<TreeEmits>();\r\n\r\nconst {\r\n internalSearchPattern,\r\n expandedKeys,\r\n selectedKeys,\r\n isAllExpanded,\r\n treeData,\r\n currentSearchPattern,\r\n renderPrefix,\r\n renderLabel,\r\n renderSuffix,\r\n toggleExpandAll,\r\n handleExpandedKeysChange,\r\n handleSelectedKeysChange,\r\n handleDrop,\r\n handleAdd,\r\n handleRefresh,\r\n expose,\r\n} = useTreeOperations(props, emit);\r\n\r\ndefineExpose<TreeExpose>(expose);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n@use \"./index.scss\";\r\n</style>\r\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_Upload-BXd3YYLx.css","names":[],"sources":["../src/components/C_Upload/components/UploadArea.vue?vue&type=style&index=0&scoped=2e419e04&lang.scss","../src/components/C_Upload/components/FileList.vue?vue&type=style&index=0&scoped=8e4ad054&lang.scss","../src/components/C_Upload/components/ImagePreview.vue?vue&type=style&index=0&scoped=76efbe9c&lang.scss","../src/components/C_Upload/index.vue?vue&type=style&index=0&scoped=adade9f9&lang.scss"],"sourcesContent":[".upload-area[data-v-2e419e04] {\n position: relative;\n box-sizing: border-box;\n padding: 32px 24px;\n border: 2px dashed var(--border-color);\n border-radius: 10px;\n cursor: pointer;\n background: var(--card-color);\n transition: all 0.25s ease;\n text-align: center;\n}\n.upload-area[data-v-2e419e04]:hover:not(.upload-area--disabled) {\n border-color: var(--primary-color);\n background: color-mix(in srgb, var(--primary-color) 4%, var(--card-color));\n}\n.upload-area--drag-over[data-v-2e419e04] {\n border-color: var(--primary-color);\n border-style: solid;\n background: color-mix(in srgb, var(--primary-color) 8%, var(--card-color));\n}\n.upload-area--drag-over .upload-area__icon[data-v-2e419e04] {\n color: var(--primary-color);\n transform: scale(1.1);\n}\n.upload-area--disabled[data-v-2e419e04] {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.upload-area__input[data-v-2e419e04] {\n display: none;\n}\n.upload-area__default[data-v-2e419e04] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n}\n.upload-area__icon[data-v-2e419e04] {\n font-size: 48px;\n color: var(--text-color-3);\n transition: all 0.25s ease;\n}\n.upload-area__text[data-v-2e419e04] {\n font-size: 14px;\n color: var(--text-color-2);\n line-height: 1.6;\n}\n.upload-area__text kbd[data-v-2e419e04] {\n padding: 1px 5px;\n font-size: 12px;\n border: 1px solid var(--border-color);\n border-radius: 3px;\n background: var(--body-color);\n}\n.upload-area__tip[data-v-2e419e04] {\n font-size: 12px;\n color: var(--text-color-4);\n}",".file-list[data-v-8e4ad054] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 12px;\n}\n.file-list__item[data-v-8e4ad054] {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--border-color);\n background: var(--card-color);\n transition: all 0.25s ease;\n}\n.file-list__item[data-v-8e4ad054]:hover {\n border-color: color-mix(in srgb, var(--primary-color) 40%, var(--border-color));\n box-shadow: 0 1px 6px rgba(0, 0, 0, 0.04);\n}\n.file-list__item--error[data-v-8e4ad054] {\n border-color: var(--error-color);\n background: color-mix(in srgb, var(--error-color) 4%, var(--card-color));\n}\n.file-list__item--success[data-v-8e4ad054], .file-list__item--instant[data-v-8e4ad054] {\n border-color: color-mix(in srgb, var(--success-color) 30%, var(--border-color));\n}\n.file-list__thumb[data-v-8e4ad054] {\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n border-radius: 6px;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--body-color);\n}\n.file-list__thumb-img[data-v-8e4ad054] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.file-list__thumb-icon[data-v-8e4ad054] {\n font-size: 22px;\n color: var(--text-color-3);\n}\n.file-list__info[data-v-8e4ad054] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.file-list__name[data-v-8e4ad054] {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-color-1);\n}\n.file-list__meta[data-v-8e4ad054] {\n display: flex;\n gap: 8px;\n align-items: center;\n font-size: 12px;\n}\n.file-list__size[data-v-8e4ad054] {\n color: var(--text-color-3);\n}\n.file-list__instant[data-v-8e4ad054] {\n font-size: 14px;\n}\n.file-list__chunk-info[data-v-8e4ad054] {\n font-size: 11px;\n color: var(--text-color-4);\n}\n.file-list__error[data-v-8e4ad054] {\n font-size: 12px;\n color: var(--error-color);\n}\n.file-list__actions[data-v-8e4ad054] {\n flex-shrink: 0;\n display: flex;\n gap: 4px;\n align-items: center;\n}\n\n/* ─── 过渡动画 ─────────────────────────────── */\n.file-list-enter-active[data-v-8e4ad054],\n.file-list-leave-active[data-v-8e4ad054] {\n transition: all 0.3s ease;\n}\n.file-list-enter-from[data-v-8e4ad054] {\n opacity: 0;\n transform: translateX(-20px);\n}\n.file-list-leave-to[data-v-8e4ad054] {\n opacity: 0;\n transform: translateX(20px);\n}\n.file-list-move[data-v-8e4ad054] {\n transition: transform 0.3s ease;\n}",".image-preview[data-v-76efbe9c] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));\n gap: 10px;\n margin-top: 12px;\n /* 上传中始终显示遮罩 */\n}\n.image-preview__item[data-v-76efbe9c] {\n position: relative;\n aspect-ratio: 1;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--body-color);\n}\n.image-preview__item--error[data-v-76efbe9c] {\n border-color: var(--error-color);\n}\n.image-preview__item--success[data-v-76efbe9c], .image-preview__item--instant[data-v-76efbe9c] {\n border-color: color-mix(in srgb, var(--success-color) 30%, var(--border-color));\n}\n.image-preview__item:hover .image-preview__overlay[data-v-76efbe9c] {\n opacity: 1;\n}\n.image-preview__img[data-v-76efbe9c] {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.image-preview__overlay[data-v-76efbe9c] {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n background: rgba(0, 0, 0, 0.45);\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n.image-preview__item--uploading .image-preview__overlay[data-v-76efbe9c], .image-preview__item--hashing .image-preview__overlay[data-v-76efbe9c], .image-preview__item--error .image-preview__overlay[data-v-76efbe9c] {\n opacity: 1;\n}\n.image-preview__progress[data-v-76efbe9c] .n-progress {\n --n-fill-color: #fff;\n}\n.image-preview__status-icon[data-v-76efbe9c] {\n font-size: 28px;\n}\n.image-preview__status-icon--success[data-v-76efbe9c] {\n color: var(--success-color);\n}\n.image-preview__status-icon--error[data-v-76efbe9c] {\n color: var(--error-color);\n}\n.image-preview__actions[data-v-76efbe9c] {\n display: flex;\n gap: 6px;\n}\n.image-preview__name[data-v-76efbe9c] {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 2px 6px;\n font-size: 11px;\n color: #fff;\n background: linear-gradient(transparent, rgba(0, 0, 0, 0.6));\n text-align: center;\n}",".c-upload[data-v-adade9f9] {\n width: 100%;\n}\n.c-upload__total-progress[data-v-adade9f9] {\n margin-top: 12px;\n padding: 8px 12px;\n border-radius: 8px;\n background: var(--body-color);\n border: 1px solid var(--border-color);\n}\n.c-upload__total-label[data-v-adade9f9] {\n display: flex;\n justify-content: space-between;\n margin-bottom: 6px;\n font-size: 12px;\n color: var(--text-color-3);\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;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1,12 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ require('./C_Icon.js');
3
+ const require_C_Upload = require('./C_Upload.js');
4
+
5
+ exports.C_Upload = require_C_Upload.C_Upload_default;
6
+ exports.formatFileSize = require_C_Upload.formatFileSize;
7
+ exports.getFileIcon = require_C_Upload.getFileIcon;
8
+ exports.useChunkUpload = require_C_Upload.useChunkUpload;
9
+ exports.useDragDrop = require_C_Upload.useDragDrop;
10
+ exports.useFileHash = require_C_Upload.useFileHash;
11
+ exports.useUploadCore = require_C_Upload.useUploadCore;
12
+ exports.useUploadQueue = require_C_Upload.useUploadQueue;
@@ -0,0 +1,2 @@
1
+ import { _ as UploadFileStatus, a as useFileHash, b as UploadedChunksQueryFn, c as _default, d as InstantCheckFn, f as MergeChunksFn, g as UploadFileItem, h as UploadExpose, i as useChunkUpload, l as ChunkProgress, m as UploadEmits, n as getFileIcon, o as useDragDrop, p as UploadChunk, r as useUploadQueue, s as useUploadCore, t as formatFileSize, u as CustomUploadRequest, v as UploadProps, y as UploadRequestOptions } from "./constants4.js";
2
+ export { _default as C_Upload, type ChunkProgress, type CustomUploadRequest, type InstantCheckFn, type MergeChunksFn, type UploadChunk, type UploadEmits, type UploadExpose, type UploadFileItem, type UploadFileStatus, type UploadProps, type UploadRequestOptions, type UploadedChunksQueryFn, formatFileSize, getFileIcon, useChunkUpload, useDragDrop, useFileHash, useUploadCore, useUploadQueue };
@@ -0,0 +1,2 @@
1
+ import { _ as UploadFileStatus, a as useFileHash, b as UploadedChunksQueryFn, c as _default, d as InstantCheckFn, f as MergeChunksFn, g as UploadFileItem, h as UploadExpose, i as useChunkUpload, l as ChunkProgress, m as UploadEmits, n as getFileIcon, o as useDragDrop, p as UploadChunk, r as useUploadQueue, s as useUploadCore, t as formatFileSize, u as CustomUploadRequest, v as UploadProps, y as UploadRequestOptions } from "./constants4.js";
2
+ export { _default as C_Upload, type ChunkProgress, type CustomUploadRequest, type InstantCheckFn, type MergeChunksFn, type UploadChunk, type UploadEmits, type UploadExpose, type UploadFileItem, type UploadFileStatus, type UploadProps, type UploadRequestOptions, type UploadedChunksQueryFn, formatFileSize, getFileIcon, useChunkUpload, useDragDrop, useFileHash, useUploadCore, useUploadQueue };
@@ -0,0 +1,4 @@
1
+ import "./C_Icon2.js";
2
+ import { a as useChunkUpload, c as getFileIcon, i as useUploadQueue, n as useDragDrop, o as useFileHash, r as useUploadCore, s as formatFileSize, t as C_Upload_default } from "./C_Upload2.js";
3
+
4
+ export { C_Upload_default as C_Upload, formatFileSize, getFileIcon, useChunkUpload, useDragDrop, useFileHash, useUploadCore, useUploadQueue };