@robot-admin/naive-ui-components 0.6.20 → 0.6.21

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 (273) hide show
  1. package/CHANGELOG.md +48 -48
  2. package/README.md +277 -277
  3. package/dist/C_ActionBar-jZPsiXtT.css.map +1 -0
  4. package/dist/C_ActionBar-nnfbZCea.css.map +1 -0
  5. package/dist/C_ActionBar.css +47 -47
  6. package/dist/C_ActionBar.js.map +1 -1
  7. package/dist/C_ActionBar2.js +1 -1
  8. package/dist/C_ActionBar2.js.map +1 -1
  9. package/dist/{C_AntV-BY8jqqmi.css.map → C_AntV-A3NXx_sF.css.map} +1 -1
  10. package/dist/{C_AntV-BbkHc-_a.css.map → C_AntV-D2Zp2qQF.css.map} +1 -1
  11. package/dist/C_AntV.css +78 -78
  12. package/dist/C_AntV.js.map +1 -1
  13. package/dist/C_AntV2.js +2 -2
  14. package/dist/C_AntV2.js.map +1 -1
  15. package/dist/{C_AudioPlayer-DKRIGhi7.css.map → C_AudioPlayer-CXl4yP_m.css.map} +1 -1
  16. package/dist/{C_AudioPlayer-DlB6eNsa.css.map → C_AudioPlayer-CcBtt71m.css.map} +1 -1
  17. package/dist/C_AudioPlayer.css +47 -47
  18. package/dist/C_AudioPlayer.js.map +1 -1
  19. package/dist/C_AudioPlayer2.js +1 -1
  20. package/dist/C_AudioPlayer2.js.map +1 -1
  21. package/dist/{C_AvatarGroup-D02zci-i.css.map → C_AvatarGroup-CtPhfH9h.css.map} +1 -1
  22. package/dist/{C_AvatarGroup-DatHaUlY.css.map → C_AvatarGroup-M1dNPH3E.css.map} +1 -1
  23. package/dist/C_AvatarGroup.css +21 -21
  24. package/dist/C_AvatarGroup.js.map +1 -1
  25. package/dist/C_AvatarGroup2.js +1 -1
  26. package/dist/C_AvatarGroup2.js.map +1 -1
  27. package/dist/{C_Barcode-DYDRDe2O.css.map → C_Barcode-DjTmDkbQ.css.map} +1 -1
  28. package/dist/{C_Barcode-muJdc_O4.css.map → C_Barcode-Do1Ozsmh.css.map} +1 -1
  29. package/dist/C_Barcode.css +7 -7
  30. package/dist/C_Barcode.js.map +1 -1
  31. package/dist/C_Barcode2.js +1 -1
  32. package/dist/C_Barcode2.js.map +1 -1
  33. package/dist/C_Breadcrumb.js.map +1 -1
  34. package/dist/C_Breadcrumb2.js.map +1 -1
  35. package/dist/{C_Captcha-9_hk6VmY.css.map → C_Captcha-CZmAETly.css.map} +1 -1
  36. package/dist/{C_Captcha-MtASlJ0f.css.map → C_Captcha-Ccq3DMrR.css.map} +1 -1
  37. package/dist/C_Captcha.css +19 -19
  38. package/dist/C_Captcha.js.map +1 -1
  39. package/dist/C_Captcha2.js +1 -1
  40. package/dist/C_Captcha2.js.map +1 -1
  41. package/dist/{C_Chat-CcjZdAwu.css.map → C_Chat-CcdWgVE8.css.map} +1 -1
  42. package/dist/{C_Chat-Diq7tyWU.css.map → C_Chat-Cx0woEEe.css.map} +1 -1
  43. package/dist/C_Chat.css +65 -65
  44. package/dist/C_Chat.js.map +1 -1
  45. package/dist/C_Chat2.js +1 -1
  46. package/dist/C_Chat2.js.map +1 -1
  47. package/dist/{C_City-Bam08Qv3.css.map → C_City-Cv5BESaN.css.map} +1 -1
  48. package/dist/{C_City-Bb3W-KaN.css.map → C_City-DNKv4MpH.css.map} +1 -1
  49. package/dist/C_City.css +29 -29
  50. package/dist/C_City.js.map +1 -1
  51. package/dist/C_City2.js +1 -1
  52. package/dist/C_City2.js.map +1 -1
  53. package/dist/C_Code-DPZlNSxL.css.map +1 -0
  54. package/dist/C_Code-avZjAnHD.css.map +1 -0
  55. package/dist/C_Code.css +3 -3
  56. package/dist/C_Code.js.map +1 -1
  57. package/dist/C_Code2.js +1 -1
  58. package/dist/C_Code2.js.map +1 -1
  59. package/dist/{C_CollapsePanel-BCmTFuDz.css.map → C_CollapsePanel-B18ryXwh.css.map} +1 -1
  60. package/dist/{C_CollapsePanel-Bxnh4Zy-.css.map → C_CollapsePanel-BiGoiHgh.css.map} +1 -1
  61. package/dist/C_CollapsePanel.css +35 -35
  62. package/dist/C_CollapsePanel.js.map +1 -1
  63. package/dist/C_CollapsePanel2.js +1 -1
  64. package/dist/C_CollapsePanel2.js.map +1 -1
  65. package/dist/{C_ContextMenu-B3Cgz_wJ.css.map → C_ContextMenu-CCsCeI39.css.map} +1 -1
  66. package/dist/{C_ContextMenu-u1LixF3_.css.map → C_ContextMenu-DOTBeltf.css.map} +1 -1
  67. package/dist/C_ContextMenu.css +17 -17
  68. package/dist/C_ContextMenu.js.map +1 -1
  69. package/dist/C_ContextMenu2.js +1 -1
  70. package/dist/C_ContextMenu2.js.map +1 -1
  71. package/dist/{C_Cron-Civir5-I.css.map → C_Cron-C0-8b5af.css.map} +1 -1
  72. package/dist/{C_Cron-iw3qpMsy.css.map → C_Cron-DqHQ92LN.css.map} +1 -1
  73. package/dist/C_Cron.css +37 -37
  74. package/dist/C_Cron.js.map +1 -1
  75. package/dist/C_Cron2.js +1 -1
  76. package/dist/C_Cron2.js.map +1 -1
  77. package/dist/C_Date.js.map +1 -1
  78. package/dist/C_Date2.js.map +1 -1
  79. package/dist/{C_Draggable-BCjIvIwT.css.map → C_Draggable-Bq6o0qXn.css.map} +1 -1
  80. package/dist/{C_Draggable-DwkSlCOS.css.map → C_Draggable-r6nhx3yM.css.map} +1 -1
  81. package/dist/C_Draggable.css +46 -46
  82. package/dist/C_Draggable.js.map +1 -1
  83. package/dist/C_Draggable2.js +1 -1
  84. package/dist/C_Draggable2.js.map +1 -1
  85. package/dist/{C_FilePreview-BhcbiXsV.css.map → C_FilePreview-BVarVvnD.css.map} +1 -1
  86. package/dist/{C_FilePreview-DJudcIbW.css.map → C_FilePreview-DHGlV4OR.css.map} +1 -1
  87. package/dist/C_FilePreview.css +91 -91
  88. package/dist/C_FilePreview.js.map +1 -1
  89. package/dist/C_FilePreview2.js +1 -1
  90. package/dist/C_FilePreview2.js.map +1 -1
  91. package/dist/{C_Form-BtcAPIRi.css.map → C_Form-BciQUPpS.css.map} +1 -1
  92. package/dist/{C_Form-D_gwQ7hC.css.map → C_Form-CKHvXL3O.css.map} +1 -1
  93. package/dist/C_Form.css +222 -222
  94. package/dist/C_Form.js.map +1 -1
  95. package/dist/C_Form2.js +1 -1
  96. package/dist/C_Form2.js.map +1 -1
  97. package/dist/{C_FormSearch-Bi4XYjjk.css.map → C_FormSearch-Bmd2CmG6.css.map} +1 -1
  98. package/dist/{C_FormSearch-DUGOoX0u.css.map → C_FormSearch-DBNtnjaL.css.map} +1 -1
  99. package/dist/C_FormSearch.css +45 -45
  100. package/dist/C_FormSearch.js.map +1 -1
  101. package/dist/C_FormSearch2.js +1 -1
  102. package/dist/C_FormSearch2.js.map +1 -1
  103. package/dist/{C_FormulaEditor-CJk3SSUJ.css.map → C_FormulaEditor-3WG2vtQl.css.map} +1 -1
  104. package/dist/{C_FormulaEditor-Cy7mjfVO.css.map → C_FormulaEditor-Cm0CokN5.css.map} +1 -1
  105. package/dist/C_FormulaEditor.css +78 -78
  106. package/dist/C_FormulaEditor.js.map +1 -1
  107. package/dist/C_FormulaEditor2.js +1 -1
  108. package/dist/C_FormulaEditor2.js.map +1 -1
  109. package/dist/C_FullCalendar-1U4VlG7X.css.map +1 -0
  110. package/dist/C_FullCalendar-DLUdCtqf.css.map +1 -0
  111. package/dist/C_FullCalendar.css +3 -3
  112. package/dist/C_FullCalendar.js.map +1 -1
  113. package/dist/C_FullCalendar2.js +1 -1
  114. package/dist/C_FullCalendar2.js.map +1 -1
  115. package/dist/C_Icon.js.map +1 -1
  116. package/dist/C_Icon2.js.map +1 -1
  117. package/dist/{C_ImageCropper-BqZpkZfU.css.map → C_ImageCropper-D3L2-J_J.css.map} +1 -1
  118. package/dist/{C_ImageCropper-CylwGuzS.css.map → C_ImageCropper-DrmUlaLi.css.map} +1 -1
  119. package/dist/C_ImageCropper.css +10 -10
  120. package/dist/C_ImageCropper.js.map +1 -1
  121. package/dist/C_ImageCropper2.js +1 -1
  122. package/dist/C_ImageCropper2.js.map +1 -1
  123. package/dist/C_Language.js.map +1 -1
  124. package/dist/C_Language2.js.map +1 -1
  125. package/dist/{C_Login-BkdnkBKX.css.map → C_Login-Cst_W1XC.css.map} +1 -1
  126. package/dist/{C_Login-VkMM6OJ2.css.map → C_Login-DWZ_6K1x.css.map} +1 -1
  127. package/dist/C_Login.css +72 -72
  128. package/dist/C_Login.js.map +1 -1
  129. package/dist/C_Login2.js +1 -1
  130. package/dist/C_Login2.js.map +1 -1
  131. package/dist/{C_Map-DNnBcY70.css.map → C_Map-BCJmDnJT.css.map} +1 -1
  132. package/dist/{C_Map-LEXIx6zM.css.map → C_Map-WUMXSAfy.css.map} +1 -1
  133. package/dist/C_Map.css +4 -4
  134. package/dist/C_Map.js.map +1 -1
  135. package/dist/C_Map2.js +1 -1
  136. package/dist/C_Map2.js.map +1 -1
  137. package/dist/{C_Markdown-Kujzx1qG.css.map → C_Markdown-7iBnLDtL.css.map} +1 -1
  138. package/dist/{C_Markdown-YCAmBbNF.css.map → C_Markdown-BbTvdFCl.css.map} +1 -1
  139. package/dist/C_Markdown.css +33 -33
  140. package/dist/C_Markdown.js.map +1 -1
  141. package/dist/C_Markdown2.js +1 -1
  142. package/dist/C_Markdown2.js.map +1 -1
  143. package/dist/{C_QRCode-CFNTda_1.css.map → C_QRCode-DMxSyogU.css.map} +1 -1
  144. package/dist/{C_QRCode-CmWr9lK-.css.map → C_QRCode-G7fiAkm4.css.map} +1 -1
  145. package/dist/C_QRCode.css +9 -9
  146. package/dist/C_QRCode.js.map +1 -1
  147. package/dist/C_QRCode2.js +1 -1
  148. package/dist/C_QRCode2.js.map +1 -1
  149. package/dist/{C_Signature-PN4GOLRX.css.map → C_Signature-B5fFz6RD.css.map} +1 -1
  150. package/dist/{C_Signature-fWQqGIZ-.css.map → C_Signature-es-ZNPzr.css.map} +1 -1
  151. package/dist/C_Signature.css +14 -14
  152. package/dist/C_Signature.js.map +1 -1
  153. package/dist/C_Signature2.js +1 -1
  154. package/dist/C_Signature2.js.map +1 -1
  155. package/dist/{C_SplitPane-BOwr1C7K.css.map → C_SplitPane-Br2eK8IG.css.map} +1 -1
  156. package/dist/{C_SplitPane-N-a_D-7F.css.map → C_SplitPane-DuyzUhKB.css.map} +1 -1
  157. package/dist/C_SplitPane.css +31 -31
  158. package/dist/C_SplitPane.js.map +1 -1
  159. package/dist/C_SplitPane2.js +1 -1
  160. package/dist/C_SplitPane2.js.map +1 -1
  161. package/dist/C_Steps-BHYNJI1l.css.map +1 -0
  162. package/dist/C_Steps-DY7vl-4I.css.map +1 -0
  163. package/dist/C_Steps.css +38 -38
  164. package/dist/C_Steps.js.map +1 -1
  165. package/dist/C_Steps2.js +1 -1
  166. package/dist/C_Steps2.js.map +1 -1
  167. package/dist/{C_Table-BV1wUw6f.css.map → C_Table-vZlcgH6x.css.map} +1 -1
  168. package/dist/{C_Table-LlJ-JEdm.css.map → C_Table-wzAO43l0.css.map} +1 -1
  169. package/dist/C_Table.css +93 -93
  170. package/dist/C_Table.js.map +1 -1
  171. package/dist/C_Table2.js +1 -1
  172. package/dist/C_Table2.js.map +1 -1
  173. package/dist/{C_TagsView-DX3LecK1.css.map → C_TagsView-BsutyC3U.css.map} +1 -1
  174. package/dist/{C_TagsView-DqOTa8bL.css.map → C_TagsView-Crm7yWg9.css.map} +1 -1
  175. package/dist/C_TagsView.css +36 -36
  176. package/dist/C_TagsView.js.map +1 -1
  177. package/dist/C_TagsView2.js +1 -1
  178. package/dist/C_TagsView2.js.map +1 -1
  179. package/dist/C_Time-Bd_e1YDN.css.map +1 -0
  180. package/dist/C_Time-CKb_fwdm.css.map +1 -0
  181. package/dist/C_Time.css +5 -5
  182. package/dist/C_Time.js.map +1 -1
  183. package/dist/C_Time2.js +1 -1
  184. package/dist/C_Time2.js.map +1 -1
  185. package/dist/{C_Timeline-BIvw3f41.css.map → C_Timeline-CGTFTMX0.css.map} +1 -1
  186. package/dist/{C_Timeline-VsDfCv4Q.css.map → C_Timeline-DxKyvKer.css.map} +1 -1
  187. package/dist/C_Timeline.css +42 -42
  188. package/dist/C_Timeline.js.map +1 -1
  189. package/dist/C_Timeline2.js +1 -1
  190. package/dist/C_Timeline2.js.map +1 -1
  191. package/dist/{C_Transfer-BOB6OBqS.css.map → C_Transfer-CCEqnC-v.css.map} +1 -1
  192. package/dist/{C_Transfer-Dpq7ezWC.css.map → C_Transfer-CStPm4NP.css.map} +1 -1
  193. package/dist/C_Transfer.css +31 -31
  194. package/dist/C_Transfer.js.map +1 -1
  195. package/dist/C_Transfer2.js +1 -1
  196. package/dist/C_Transfer2.js.map +1 -1
  197. package/dist/{C_Tree-D98nX9qT.css.map → C_Tree-B-Le4hjQ.css.map} +1 -1
  198. package/dist/{C_Tree-ulfm7b-P.css.map → C_Tree-DnGc_MPb.css.map} +1 -1
  199. package/dist/C_Tree.css +33 -33
  200. package/dist/C_Tree.js.map +1 -1
  201. package/dist/C_Tree2.js +1 -1
  202. package/dist/C_Tree2.js.map +1 -1
  203. package/dist/{C_VideoPlayer-4J96tKfK.css.map → C_VideoPlayer-Cdgv4Zq0.css.map} +1 -1
  204. package/dist/{C_VideoPlayer-D35seHkm.css.map → C_VideoPlayer-rm0MODUv.css.map} +1 -1
  205. package/dist/C_VideoPlayer.css +13 -13
  206. package/dist/C_VideoPlayer.js.map +1 -1
  207. package/dist/C_VideoPlayer2.js +1 -1
  208. package/dist/C_VideoPlayer2.js.map +1 -1
  209. package/dist/{C_VtableGantt-C2lxFmWg.css.map → C_VtableGantt-BpY-Rng3.css.map} +1 -1
  210. package/dist/{C_VtableGantt-Dwnkw_WL.css.map → C_VtableGantt-DB87-jdS.css.map} +1 -1
  211. package/dist/C_VtableGantt.css +15 -15
  212. package/dist/C_VtableGantt.js.map +1 -1
  213. package/dist/C_VtableGantt2.js +1 -1
  214. package/dist/C_VtableGantt2.js.map +1 -1
  215. package/dist/{C_WorkFlow-2hJfvvTK.css.map → C_WorkFlow-7F6op6qN.css.map} +1 -1
  216. package/dist/{C_WorkFlow-DHoNjl8-.css.map → C_WorkFlow-Cy3HWA6A.css.map} +1 -1
  217. package/dist/C_WorkFlow.css +108 -108
  218. package/dist/C_WorkFlow.js.map +1 -1
  219. package/dist/C_WorkFlow2.js +1 -1
  220. package/dist/C_WorkFlow2.js.map +1 -1
  221. package/dist/constants.d.ts +2 -2
  222. package/dist/constants2.d.ts +1 -1
  223. package/dist/constants3.d.ts +1 -1
  224. package/dist/constants4.d.ts +5 -5
  225. package/dist/data.d.ts +1 -1
  226. package/dist/index.cjs.map +1 -1
  227. package/dist/index.js.map +1 -1
  228. package/dist/index10.vue.d.ts +1 -1
  229. package/dist/index11.vue.d.ts +4 -4
  230. package/dist/index12.vue.d.ts +1 -1
  231. package/dist/index13.vue.d.ts +2 -2
  232. package/dist/index15.vue.d.ts +3 -3
  233. package/dist/index17.vue.d.ts +1 -1
  234. package/dist/index18.vue.d.ts +3 -3
  235. package/dist/index2.vue.d.ts +1 -1
  236. package/dist/index20.vue.d.ts +2 -2
  237. package/dist/index21.vue.d.ts +1 -1
  238. package/dist/index24.vue.d.ts +1 -1
  239. package/dist/index26.vue.d.ts +3 -3
  240. package/dist/index3.vue.d.ts +2 -2
  241. package/dist/index4.vue.d.ts +5 -5
  242. package/dist/index6.vue.d.ts +3 -3
  243. package/dist/index8.vue.d.ts +1 -1
  244. package/dist/menuAdapter.js.map +1 -1
  245. package/dist/resolver.cjs.map +1 -1
  246. package/dist/resolver.js.map +1 -1
  247. package/dist/style.css +1512 -1512
  248. package/dist/useCalendarEvents.d.ts +1 -1
  249. package/dist/useCollapsePanel.d.ts +3 -1
  250. package/dist/useCropperCore.d.ts +5 -5
  251. package/dist/useDraggableLayout.d.ts +9 -9
  252. package/dist/useDynamicFormState.d.ts +4 -4
  253. package/dist/useEdgeInteraction.d.ts +1 -1
  254. package/dist/useFullscreen.d.ts +2 -2
  255. package/dist/useInfiniteScroll.d.ts +3 -3
  256. package/dist/useModalEdit.d.ts +3 -3
  257. package/dist/useQRCode.d.ts +3 -3
  258. package/dist/useSignatureHistory.d.ts +1 -1
  259. package/dist/useSplitResize.d.ts +5 -5
  260. package/dist/useTimeSelection.d.ts +3 -3
  261. package/dist/useTreeOperations.d.ts +6 -6
  262. package/dist/useWorkflowValidation.d.ts +2 -2
  263. package/package.json +1 -1
  264. package/dist/C_ActionBar-DYG0Yf3A.css.map +0 -1
  265. package/dist/C_ActionBar-MAjRhqcI.css.map +0 -1
  266. package/dist/C_Code-BFi5xxnM.css.map +0 -1
  267. package/dist/C_Code-CZ7yfnri.css.map +0 -1
  268. package/dist/C_FullCalendar-BQA0OjGB.css.map +0 -1
  269. package/dist/C_FullCalendar-ChJUosAi.css.map +0 -1
  270. package/dist/C_Steps-Bk1krgiR.css.map +0 -1
  271. package/dist/C_Steps-Dn2CMpy1.css.map +0 -1
  272. package/dist/C_Time-BzyQVvTS.css.map +0 -1
  273. package/dist/C_Time-DmpKLQHc.css.map +0 -1
@@ -118,12 +118,12 @@ declare const __VLS_export: vue.DefineComponent<CronProps, {
118
118
  onChange?: ((value: string) => any) | undefined;
119
119
  "onValidation-change"?: ((result: CronValidation) => any) | undefined;
120
120
  }>, {
121
- height: string | number;
122
121
  modelValue: string;
123
122
  disabled: boolean;
123
+ height: string | number;
124
+ showPreview: boolean;
124
125
  previewCount: number;
125
126
  showTemplates: boolean;
126
- showPreview: boolean;
127
127
  showSecond: boolean;
128
128
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
129
129
  declare const _default: typeof __VLS_export;
@@ -120,10 +120,10 @@ declare const __VLS_export: vue.DefineComponent<FormulaEditorProps, FormulaEdito
120
120
  onChange?: ((value: string) => any) | undefined;
121
121
  "onValidation-change"?: ((result: FormulaValidation) => any) | undefined;
122
122
  }>, {
123
- height: string | number;
124
123
  modelValue: string;
125
124
  placeholder: string;
126
125
  disabled: boolean;
126
+ height: string | number;
127
127
  showPreview: boolean;
128
128
  variables: FormulaVariable[];
129
129
  functions: FormulaFunction[];
@@ -168,8 +168,8 @@ declare const __VLS_export: vue.DefineComponent<NotificationCenterProps, Notific
168
168
  onNewMessage?: ((message: NotificationMessage) => any) | undefined;
169
169
  onNavigate?: ((url: string) => any) | undefined;
170
170
  }>, {
171
- storageKey: string;
172
171
  pageSize: number;
172
+ storageKey: string;
173
173
  desktopNotification: boolean;
174
174
  maxBadgeCount: number;
175
175
  pollingInterval: number;
@@ -196,32 +196,32 @@ type __VLS_Slots = {} & {
196
196
  area?: (props: typeof __VLS_11) => any;
197
197
  };
198
198
  declare const __VLS_base: vue.DefineComponent<UploadProps, UploadExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
199
- error: (file: UploadFileItem, error: Error) => any;
200
199
  change: (fileList: UploadFileItem[]) => any;
201
200
  success: (file: UploadFileItem, response: any) => any;
201
+ error: (file: UploadFileItem, error: Error) => any;
202
202
  progress: (file: UploadFileItem, percent: number) => any;
203
203
  remove: (file: UploadFileItem) => any;
204
204
  finish: (fileList: UploadFileItem[]) => any;
205
205
  exceed: (files: File[], fileList: UploadFileItem[]) => any;
206
206
  }, string, vue.PublicProps, Readonly<UploadProps> & Readonly<{
207
- onError?: ((file: UploadFileItem, error: Error) => any) | undefined;
208
207
  onChange?: ((fileList: UploadFileItem[]) => any) | undefined;
209
208
  onSuccess?: ((file: UploadFileItem, response: any) => any) | undefined;
209
+ onError?: ((file: UploadFileItem, error: Error) => any) | undefined;
210
210
  onProgress?: ((file: UploadFileItem, percent: number) => any) | undefined;
211
211
  onRemove?: ((file: UploadFileItem) => any) | undefined;
212
212
  onFinish?: ((fileList: UploadFileItem[]) => any) | undefined;
213
213
  onExceed?: ((files: File[], fileList: UploadFileItem[]) => any) | undefined;
214
214
  }>, {
215
- data: Record<string, any>;
216
215
  disabled: boolean;
217
216
  multiple: boolean;
218
- draggable: boolean;
217
+ data: Record<string, any>;
218
+ maxSize: number;
219
219
  action: string;
220
220
  headers: Record<string, string>;
221
221
  directory: boolean;
222
222
  accept: string;
223
- maxSize: number;
224
223
  maxCount: number;
224
+ draggable: boolean;
225
225
  pasteable: boolean;
226
226
  chunked: boolean;
227
227
  chunkSize: number;
package/dist/data.d.ts CHANGED
@@ -23,10 +23,10 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
23
23
  onMarkerClick?: ((marker: MapMarker$1, event: any) => any) | undefined;
24
24
  }>, {
25
25
  height: string;
26
+ zoom: number;
26
27
  center: [number, number];
27
28
  markers: MapMarker$1[];
28
29
  amapKey: string;
29
- zoom: number;
30
30
  mapType: "osm" | "amap";
31
31
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
32
32
  declare const _default: typeof __VLS_export;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["hljs","javascript","typescript","json","xml","css","bash","yaml","markdown","java","csharp","go","python","C_Code","C_Icon","C_Upload","C_Barcode","C_Captcha","C_Cascade","C_Guide","C_Progress","C_Steps","C_ActionBar","C_Theme","C_Language","C_Date","C_Editor","C_Markdown","C_Map","C_City","C_VtableGantt","C_Signature","C_SplitPane","C_CollapsePanel","C_Time","C_FormSearch","C_Tree","C_QRCode","C_ImageCropper","C_Draggable","C_WaterFall","C_FullCalendar","C_NotificationCenter","C_Cron","C_FormulaEditor","C_AntV","C_VideoPlayer","C_FilePreview","C_WorkFlow","C_Form","C_Table","C_GlobalSearch","C_Menu","C_Breadcrumb","C_TagsView","C_AudioPlayer","C_AvatarGroup","C_Chat","C_ContextMenu","C_Login","C_Timeline","C_Transfer"],"sources":["../src/plugins/highlight.ts","../src/index.ts"],"sourcesContent":["\n\nimport type { App } from 'vue'\nimport type { HLJSApi, LanguageFn } from 'highlight.js'\nimport hljs from 'highlight.js/lib/core'\n\n// 导入默认主题样式\nimport 'highlight.js/styles/github.css'\n\n// 默认支持的语言包(常用语言预加载)\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport json from 'highlight.js/lib/languages/json'\nimport xml from 'highlight.js/lib/languages/xml' // HTML\nimport css from 'highlight.js/lib/languages/css'\nimport bash from 'highlight.js/lib/languages/bash'\nimport yaml from 'highlight.js/lib/languages/yaml'\nimport markdown from 'highlight.js/lib/languages/markdown'\nimport java from 'highlight.js/lib/languages/java'\nimport csharp from 'highlight.js/lib/languages/csharp'\nimport go from 'highlight.js/lib/languages/go'\nimport python from 'highlight.js/lib/languages/python'\n\n// 可选语言包映射(懒加载)\nconst OPTIONAL_LANGUAGES: Record<\n string,\n () => Promise<{ default: LanguageFn }>\n> = {\n cpp: () => import('highlight.js/lib/languages/cpp'),\n c: () => import('highlight.js/lib/languages/c'),\n php: () => import('highlight.js/lib/languages/php'),\n ruby: () => import('highlight.js/lib/languages/ruby'),\n rust: () => import('highlight.js/lib/languages/rust'),\n swift: () => import('highlight.js/lib/languages/swift'),\n kotlin: () => import('highlight.js/lib/languages/kotlin'),\n scss: () => import('highlight.js/lib/languages/scss'),\n less: () => import('highlight.js/lib/languages/less'),\n sql: () => import('highlight.js/lib/languages/sql'),\n dockerfile: () => import('highlight.js/lib/languages/dockerfile'),\n powershell: () => import('highlight.js/lib/languages/powershell'),\n}\n\n// 插件配置选项\nexport interface HighlightPluginOptions {\n autoDetect?: boolean\n extraLanguages?: string[]\n}\n\n// 状态管理\nconst loadedLanguages = new Set<string>()\nconst hlJsInstance: HLJSApi = hljs\n\n/**\n * * @description 注册语言包到 highlight.js 实例\n * ? @param name - 语言名称\n * ? @param languageFn - 语言定义函数\n * ! @return void\n */\nfunction registerLanguage(name: string, languageFn: LanguageFn): void {\n hlJsInstance.registerLanguage(name, languageFn)\n loadedLanguages.add(name)\n}\n\n/**\n * * @description 初始化核心配置,注册默认语言包\n * ? @param options - 插件配置选项\n * ! @return void\n */\nfunction initializeCore(options: HighlightPluginOptions): void {\n // 注册默认语言包\n const defaultLanguages = [\n ['javascript', javascript],\n ['typescript', typescript],\n ['json', json],\n ['html', xml],\n ['xml', xml],\n ['css', css],\n ['bash', bash],\n ['shell', bash],\n ['yaml', yaml],\n ['yml', yaml],\n ['markdown', markdown],\n ['java', java],\n ['csharp', csharp],\n ['go', go],\n ['python', python],\n ] as const\n\n defaultLanguages.forEach(([name, langFn]) => {\n registerLanguage(name, langFn)\n })\n\n // 配置 highlight.js\n hlJsInstance.configure({\n ignoreUnescapedHTML: true,\n languages: options.autoDetect ? undefined : [],\n })\n\n // 预加载额外语言\n if (options.extraLanguages?.length) {\n loadLanguages(options.extraLanguages)\n }\n}\n\n/**\n * * @description 批量加载多个语言包\n * ? @param languages - 要加载的语言名称数组\n * ! @return Promise<string[]> 成功加载的语言名称数组\n */\nasync function loadLanguages(languages: string[]): Promise<string[]> {\n const loadPromises = languages.map(lang => loadLanguage(lang))\n const results = await Promise.allSettled(loadPromises)\n\n return results\n .map((result, index) =>\n result.status === 'fulfilled' ? languages[index] : null\n )\n .filter(Boolean) as string[]\n}\n\n/**\n * * @description 动态加载单个语言包\n * ? @param language - 要加载的语言名称\n * ! @return Promise<boolean> 是否加载成功\n */\nasync function loadLanguage(language: string): Promise<boolean> {\n if (loadedLanguages.has(language)) {\n return true\n }\n\n const loader = OPTIONAL_LANGUAGES[language.toLowerCase()]\n if (!loader) {\n console.warn(`[HighlightPlugin] Language '${language}' not supported`)\n return false\n }\n\n try {\n const languageModule = await loader()\n registerLanguage(language, languageModule.default)\n console.log(`[HighlightPlugin] Language '${language}' loaded successfully`)\n return true\n } catch (error) {\n console.error(\n `[HighlightPlugin] Failed to load language '${language}':`,\n error\n )\n return false\n }\n}\n\n/**\n * * @description 获取 highlight 功能的 API 接口\n * ! @return highlight API 对象,包含所有可用方法\n */\nexport const useHighlight = () => {\n return {\n // 核心方法\n getHljs: () => hlJsInstance,\n\n // 语言管理\n loadLanguage: (language: string) => loadLanguage(language),\n loadLanguages: (languages: string[]) => loadLanguages(languages),\n getLoadedLanguages: () => Array.from(loadedLanguages),\n }\n}\n\n/**\n * * @description 安装 highlight.js 插件到 Vue 应用\n * ? @param app - Vue 应用实例\n * ? @param options - 插件配置选项\n * ! @return void\n */\nexport function setupHighlight(app: App, options: HighlightPluginOptions = {}) {\n const pluginOptions: HighlightPluginOptions = {\n autoDetect: false,\n extraLanguages: [],\n ...options,\n }\n\n // 初始化核心配置\n initializeCore(pluginOptions)\n\n // 挂载到全局\n if (typeof window !== 'undefined') {\n window.hljs = hlJsInstance\n }\n\n // 提供给 Vue 应用\n const highlightAPI = useHighlight()\n app.provide('highlightManager', highlightAPI)\n app.config.globalProperties.$highlight = highlightAPI\n\n console.log('[HighlightPlugin] 🎨 highlight.js plugin installed successfully')\n}\n\n// 导出默认配置\nexport const defaultHighlightOptions: HighlightPluginOptions = {\n autoDetect: false,\n extraLanguages: [],\n}\n\n// 类型声明\ndeclare global {\n interface Window {\n hljs: HLJSApi\n }\n}\n","import type { App, Component } from 'vue'\n\n// ====== 全局样式由 sass CLI 编译到 dist/style.css,不再通过 JS 导入 ======\n\n// ====== 组件导入(仅用于 install 全量注册) ======\nimport { C_Code } from './components/C_Code'\nimport { C_Icon } from './components/C_Icon'\nimport { C_Upload } from './components/C_Upload'\nimport { C_Barcode } from './components/C_Barcode'\nimport { C_Captcha } from './components/C_Captcha'\nimport { C_Cascade } from './components/C_Cascade'\nimport { C_Guide } from './components/C_Guide'\nimport { C_Progress } from './components/C_Progress'\nimport { C_Steps } from './components/C_Steps'\nimport { C_ActionBar } from './components/C_ActionBar'\nimport { C_Theme } from './components/C_Theme'\nimport { C_Language } from './components/C_Language'\nimport { C_Date } from './components/C_Date'\nimport { C_Editor } from './components/C_Editor'\nimport { C_Markdown } from './components/C_Markdown'\nimport { C_Map } from './components/C_Map'\nimport { C_City } from './components/C_City'\nimport { C_VtableGantt } from './components/C_VtableGantt'\nimport { C_Signature } from './components/C_Signature'\nimport { C_SplitPane } from './components/C_SplitPane'\nimport { C_CollapsePanel } from './components/C_CollapsePanel'\nimport { C_Time } from './components/C_Time'\nimport { C_FormSearch } from './components/C_FormSearch'\nimport { C_Tree } from './components/C_Tree'\nimport { C_QRCode } from './components/C_QRCode'\nimport { C_ImageCropper } from './components/C_ImageCropper'\nimport { C_Draggable } from './components/C_Draggable'\nimport { C_WaterFall } from './components/C_WaterFall'\nimport { C_FullCalendar } from './components/C_FullCalendar'\nimport { C_NotificationCenter } from './components/C_NotificationCenter'\nimport { C_Cron } from './components/C_Cron'\nimport { C_FormulaEditor } from './components/C_FormulaEditor'\nimport { C_AntV } from './components/C_AntV'\nimport { C_VideoPlayer } from './components/C_VideoPlayer'\nimport { C_FilePreview } from './components/C_FilePreview'\nimport { C_WorkFlow } from './components/C_WorkFlow'\nimport { C_Form } from './components/C_Form'\nimport { C_Table } from './components/C_Table'\nimport { C_GlobalSearch } from './components/C_GlobalSearch'\nimport { C_Menu } from './components/C_Menu'\nimport { C_Breadcrumb } from './components/C_Breadcrumb'\nimport { C_TagsView } from './components/C_TagsView'\nimport { C_AudioPlayer } from './components/C_AudioPlayer'\nimport { C_AvatarGroup } from './components/C_AvatarGroup'\nimport { C_Chat } from './components/C_Chat'\nimport { C_ContextMenu } from './components/C_ContextMenu'\nimport { C_Login } from './components/C_Login'\nimport { C_Timeline } from './components/C_Timeline'\nimport { C_Transfer } from './components/C_Transfer'\n\n// ====== 插件 ======\nimport { setupHighlight, useHighlight } from './plugins/highlight'\n\n// ====== 安装选项 ======\nexport interface ComponentLibOptions {\n highlight?: import('./plugins/highlight').HighlightPluginOptions\n}\n\n// ====== 组件列表(全量注册使用) ======\nconst components: Component[] = [\n C_Code,\n C_Icon,\n C_Upload,\n C_Barcode,\n C_Captcha,\n C_Cascade,\n C_Guide,\n C_Progress,\n C_Steps,\n C_ActionBar,\n C_Theme,\n C_Language,\n C_Date,\n C_Editor,\n C_Markdown,\n C_Map,\n C_City,\n C_VtableGantt,\n C_Signature,\n C_SplitPane,\n C_CollapsePanel,\n C_Time,\n C_FormSearch,\n C_Tree,\n C_QRCode,\n C_ImageCropper,\n C_Draggable,\n C_WaterFall,\n C_FullCalendar,\n C_NotificationCenter,\n C_Cron,\n C_FormulaEditor,\n C_AntV,\n C_VideoPlayer,\n C_FilePreview,\n C_WorkFlow,\n C_Form,\n C_Table,\n C_GlobalSearch,\n C_Menu,\n C_Breadcrumb,\n C_TagsView,\n C_AudioPlayer,\n C_AvatarGroup,\n C_Chat,\n C_ContextMenu,\n C_Login,\n C_Timeline,\n C_Transfer,\n]\n\n// ====== Barrel Re-exports:所有组件 + composables + types + constants ======\nexport * from './components/C_Code'\nexport * from './components/C_Icon'\nexport * from './components/C_Upload'\nexport * from './components/C_Barcode'\nexport * from './components/C_Captcha'\nexport * from './components/C_Cascade'\nexport * from './components/C_Guide'\nexport * from './components/C_Progress'\nexport * from './components/C_Steps'\nexport * from './components/C_ActionBar'\nexport * from './components/C_Theme'\nexport * from './components/C_Language'\nexport * from './components/C_Date'\nexport * from './components/C_Editor'\nexport * from './components/C_Markdown'\nexport * from './components/C_Map'\nexport * from './components/C_City'\nexport * from './components/C_VtableGantt'\nexport * from './components/C_Signature'\nexport * from './components/C_SplitPane'\nexport * from './components/C_CollapsePanel'\nexport * from './components/C_Time'\nexport * from './components/C_FormSearch'\nexport * from './components/C_Tree'\nexport * from './components/C_QRCode'\nexport * from './components/C_ImageCropper'\nexport * from './components/C_Draggable'\nexport * from './components/C_WaterFall'\nexport * from './components/C_FullCalendar'\nexport * from './components/C_NotificationCenter'\nexport * from './components/C_Cron'\nexport * from './components/C_FormulaEditor'\nexport * from './components/C_AntV'\nexport * from './components/C_VideoPlayer'\nexport * from './components/C_FilePreview'\nexport * from './components/C_WorkFlow'\nexport * from './components/C_Form'\nexport * from './components/C_Table'\nexport * from './components/C_GlobalSearch'\nexport * from './components/C_Menu'\nexport * from './components/C_Breadcrumb'\nexport * from './components/C_TagsView'\nexport * from './components/C_AudioPlayer'\nexport * from './components/C_AvatarGroup'\nexport * from './components/C_Chat'\nexport * from './components/C_ContextMenu'\nexport * from './components/C_Login'\nexport * from './components/C_Timeline'\nexport * from './components/C_Transfer'\n\n// ====== 共享类型 + 适配器 ======\nexport * from './components/_shared'\n\n// ====== 工具函数(不属于任何组件的公共工具) ======\nexport { setItem, getItem, removeItem, removeAllItem } from './utils/storage'\n\n// ====== 插件导出 ======\nexport { setupHighlight, useHighlight }\nexport type { HighlightPluginOptions } from './plugins/highlight'\n\n// ====== 全量安装 ======\nconst install = (app: App, options: ComponentLibOptions = {}) => {\n components.forEach(component => {\n const name =\n (component as any).__name || (component as any).name || 'UnknownComponent'\n app.component(name, component)\n })\n\n if (options.highlight !== undefined) {\n setupHighlight(app, options.highlight)\n }\n}\n\nexport default {\n install,\n} satisfies { install: (app: App, options?: ComponentLibOptions) => void }\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["hljs","javascript","typescript","json","xml","css","bash","yaml","markdown","java","csharp","go","python","C_Code","C_Icon","C_Upload","C_Barcode","C_Captcha","C_Cascade","C_Guide","C_Progress","C_Steps","C_ActionBar","C_Theme","C_Language","C_Date","C_Editor","C_Markdown","C_Map","C_City","C_VtableGantt","C_Signature","C_SplitPane","C_CollapsePanel","C_Time","C_FormSearch","C_Tree","C_QRCode","C_ImageCropper","C_Draggable","C_WaterFall","C_FullCalendar","C_NotificationCenter","C_Cron","C_FormulaEditor","C_AntV","C_VideoPlayer","C_FilePreview","C_WorkFlow","C_Form","C_Table","C_GlobalSearch","C_Menu","C_Breadcrumb","C_TagsView","C_AudioPlayer","C_AvatarGroup","C_Chat","C_ContextMenu","C_Login","C_Timeline","C_Transfer"],"sources":["../src/plugins/highlight.ts","../src/index.ts"],"sourcesContent":["\r\n\r\nimport type { App } from 'vue'\r\nimport type { HLJSApi, LanguageFn } from 'highlight.js'\r\nimport hljs from 'highlight.js/lib/core'\r\n\r\n// 导入默认主题样式\r\nimport 'highlight.js/styles/github.css'\r\n\r\n// 默认支持的语言包(常用语言预加载)\r\nimport javascript from 'highlight.js/lib/languages/javascript'\r\nimport typescript from 'highlight.js/lib/languages/typescript'\r\nimport json from 'highlight.js/lib/languages/json'\r\nimport xml from 'highlight.js/lib/languages/xml' // HTML\r\nimport css from 'highlight.js/lib/languages/css'\r\nimport bash from 'highlight.js/lib/languages/bash'\r\nimport yaml from 'highlight.js/lib/languages/yaml'\r\nimport markdown from 'highlight.js/lib/languages/markdown'\r\nimport java from 'highlight.js/lib/languages/java'\r\nimport csharp from 'highlight.js/lib/languages/csharp'\r\nimport go from 'highlight.js/lib/languages/go'\r\nimport python from 'highlight.js/lib/languages/python'\r\n\r\n// 可选语言包映射(懒加载)\r\nconst OPTIONAL_LANGUAGES: Record<\r\n string,\r\n () => Promise<{ default: LanguageFn }>\r\n> = {\r\n cpp: () => import('highlight.js/lib/languages/cpp'),\r\n c: () => import('highlight.js/lib/languages/c'),\r\n php: () => import('highlight.js/lib/languages/php'),\r\n ruby: () => import('highlight.js/lib/languages/ruby'),\r\n rust: () => import('highlight.js/lib/languages/rust'),\r\n swift: () => import('highlight.js/lib/languages/swift'),\r\n kotlin: () => import('highlight.js/lib/languages/kotlin'),\r\n scss: () => import('highlight.js/lib/languages/scss'),\r\n less: () => import('highlight.js/lib/languages/less'),\r\n sql: () => import('highlight.js/lib/languages/sql'),\r\n dockerfile: () => import('highlight.js/lib/languages/dockerfile'),\r\n powershell: () => import('highlight.js/lib/languages/powershell'),\r\n}\r\n\r\n// 插件配置选项\r\nexport interface HighlightPluginOptions {\r\n autoDetect?: boolean\r\n extraLanguages?: string[]\r\n}\r\n\r\n// 状态管理\r\nconst loadedLanguages = new Set<string>()\r\nconst hlJsInstance: HLJSApi = hljs\r\n\r\n/**\r\n * * @description 注册语言包到 highlight.js 实例\r\n * ? @param name - 语言名称\r\n * ? @param languageFn - 语言定义函数\r\n * ! @return void\r\n */\r\nfunction registerLanguage(name: string, languageFn: LanguageFn): void {\r\n hlJsInstance.registerLanguage(name, languageFn)\r\n loadedLanguages.add(name)\r\n}\r\n\r\n/**\r\n * * @description 初始化核心配置,注册默认语言包\r\n * ? @param options - 插件配置选项\r\n * ! @return void\r\n */\r\nfunction initializeCore(options: HighlightPluginOptions): void {\r\n // 注册默认语言包\r\n const defaultLanguages = [\r\n ['javascript', javascript],\r\n ['typescript', typescript],\r\n ['json', json],\r\n ['html', xml],\r\n ['xml', xml],\r\n ['css', css],\r\n ['bash', bash],\r\n ['shell', bash],\r\n ['yaml', yaml],\r\n ['yml', yaml],\r\n ['markdown', markdown],\r\n ['java', java],\r\n ['csharp', csharp],\r\n ['go', go],\r\n ['python', python],\r\n ] as const\r\n\r\n defaultLanguages.forEach(([name, langFn]) => {\r\n registerLanguage(name, langFn)\r\n })\r\n\r\n // 配置 highlight.js\r\n hlJsInstance.configure({\r\n ignoreUnescapedHTML: true,\r\n languages: options.autoDetect ? undefined : [],\r\n })\r\n\r\n // 预加载额外语言\r\n if (options.extraLanguages?.length) {\r\n loadLanguages(options.extraLanguages)\r\n }\r\n}\r\n\r\n/**\r\n * * @description 批量加载多个语言包\r\n * ? @param languages - 要加载的语言名称数组\r\n * ! @return Promise<string[]> 成功加载的语言名称数组\r\n */\r\nasync function loadLanguages(languages: string[]): Promise<string[]> {\r\n const loadPromises = languages.map(lang => loadLanguage(lang))\r\n const results = await Promise.allSettled(loadPromises)\r\n\r\n return results\r\n .map((result, index) =>\r\n result.status === 'fulfilled' ? languages[index] : null\r\n )\r\n .filter(Boolean) as string[]\r\n}\r\n\r\n/**\r\n * * @description 动态加载单个语言包\r\n * ? @param language - 要加载的语言名称\r\n * ! @return Promise<boolean> 是否加载成功\r\n */\r\nasync function loadLanguage(language: string): Promise<boolean> {\r\n if (loadedLanguages.has(language)) {\r\n return true\r\n }\r\n\r\n const loader = OPTIONAL_LANGUAGES[language.toLowerCase()]\r\n if (!loader) {\r\n console.warn(`[HighlightPlugin] Language '${language}' not supported`)\r\n return false\r\n }\r\n\r\n try {\r\n const languageModule = await loader()\r\n registerLanguage(language, languageModule.default)\r\n console.log(`[HighlightPlugin] Language '${language}' loaded successfully`)\r\n return true\r\n } catch (error) {\r\n console.error(\r\n `[HighlightPlugin] Failed to load language '${language}':`,\r\n error\r\n )\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * * @description 获取 highlight 功能的 API 接口\r\n * ! @return highlight API 对象,包含所有可用方法\r\n */\r\nexport const useHighlight = () => {\r\n return {\r\n // 核心方法\r\n getHljs: () => hlJsInstance,\r\n\r\n // 语言管理\r\n loadLanguage: (language: string) => loadLanguage(language),\r\n loadLanguages: (languages: string[]) => loadLanguages(languages),\r\n getLoadedLanguages: () => Array.from(loadedLanguages),\r\n }\r\n}\r\n\r\n/**\r\n * * @description 安装 highlight.js 插件到 Vue 应用\r\n * ? @param app - Vue 应用实例\r\n * ? @param options - 插件配置选项\r\n * ! @return void\r\n */\r\nexport function setupHighlight(app: App, options: HighlightPluginOptions = {}) {\r\n const pluginOptions: HighlightPluginOptions = {\r\n autoDetect: false,\r\n extraLanguages: [],\r\n ...options,\r\n }\r\n\r\n // 初始化核心配置\r\n initializeCore(pluginOptions)\r\n\r\n // 挂载到全局\r\n if (typeof window !== 'undefined') {\r\n window.hljs = hlJsInstance\r\n }\r\n\r\n // 提供给 Vue 应用\r\n const highlightAPI = useHighlight()\r\n app.provide('highlightManager', highlightAPI)\r\n app.config.globalProperties.$highlight = highlightAPI\r\n\r\n console.log('[HighlightPlugin] 🎨 highlight.js plugin installed successfully')\r\n}\r\n\r\n// 导出默认配置\r\nexport const defaultHighlightOptions: HighlightPluginOptions = {\r\n autoDetect: false,\r\n extraLanguages: [],\r\n}\r\n\r\n// 类型声明\r\ndeclare global {\r\n interface Window {\r\n hljs: HLJSApi\r\n }\r\n}\r\n","import type { App, Component } from 'vue'\r\n\r\n// ====== 全局样式由 sass CLI 编译到 dist/style.css,不再通过 JS 导入 ======\r\n\r\n// ====== 组件导入(仅用于 install 全量注册) ======\r\nimport { C_Code } from './components/C_Code'\r\nimport { C_Icon } from './components/C_Icon'\r\nimport { C_Upload } from './components/C_Upload'\r\nimport { C_Barcode } from './components/C_Barcode'\r\nimport { C_Captcha } from './components/C_Captcha'\r\nimport { C_Cascade } from './components/C_Cascade'\r\nimport { C_Guide } from './components/C_Guide'\r\nimport { C_Progress } from './components/C_Progress'\r\nimport { C_Steps } from './components/C_Steps'\r\nimport { C_ActionBar } from './components/C_ActionBar'\r\nimport { C_Theme } from './components/C_Theme'\r\nimport { C_Language } from './components/C_Language'\r\nimport { C_Date } from './components/C_Date'\r\nimport { C_Editor } from './components/C_Editor'\r\nimport { C_Markdown } from './components/C_Markdown'\r\nimport { C_Map } from './components/C_Map'\r\nimport { C_City } from './components/C_City'\r\nimport { C_VtableGantt } from './components/C_VtableGantt'\r\nimport { C_Signature } from './components/C_Signature'\r\nimport { C_SplitPane } from './components/C_SplitPane'\r\nimport { C_CollapsePanel } from './components/C_CollapsePanel'\r\nimport { C_Time } from './components/C_Time'\r\nimport { C_FormSearch } from './components/C_FormSearch'\r\nimport { C_Tree } from './components/C_Tree'\r\nimport { C_QRCode } from './components/C_QRCode'\r\nimport { C_ImageCropper } from './components/C_ImageCropper'\r\nimport { C_Draggable } from './components/C_Draggable'\r\nimport { C_WaterFall } from './components/C_WaterFall'\r\nimport { C_FullCalendar } from './components/C_FullCalendar'\r\nimport { C_NotificationCenter } from './components/C_NotificationCenter'\r\nimport { C_Cron } from './components/C_Cron'\r\nimport { C_FormulaEditor } from './components/C_FormulaEditor'\r\nimport { C_AntV } from './components/C_AntV'\r\nimport { C_VideoPlayer } from './components/C_VideoPlayer'\r\nimport { C_FilePreview } from './components/C_FilePreview'\r\nimport { C_WorkFlow } from './components/C_WorkFlow'\r\nimport { C_Form } from './components/C_Form'\r\nimport { C_Table } from './components/C_Table'\r\nimport { C_GlobalSearch } from './components/C_GlobalSearch'\r\nimport { C_Menu } from './components/C_Menu'\r\nimport { C_Breadcrumb } from './components/C_Breadcrumb'\r\nimport { C_TagsView } from './components/C_TagsView'\r\nimport { C_AudioPlayer } from './components/C_AudioPlayer'\r\nimport { C_AvatarGroup } from './components/C_AvatarGroup'\r\nimport { C_Chat } from './components/C_Chat'\r\nimport { C_ContextMenu } from './components/C_ContextMenu'\r\nimport { C_Login } from './components/C_Login'\r\nimport { C_Timeline } from './components/C_Timeline'\r\nimport { C_Transfer } from './components/C_Transfer'\r\n\r\n// ====== 插件 ======\r\nimport { setupHighlight, useHighlight } from './plugins/highlight'\r\n\r\n// ====== 安装选项 ======\r\nexport interface ComponentLibOptions {\r\n highlight?: import('./plugins/highlight').HighlightPluginOptions\r\n}\r\n\r\n// ====== 组件列表(全量注册使用) ======\r\nconst components: Component[] = [\r\n C_Code,\r\n C_Icon,\r\n C_Upload,\r\n C_Barcode,\r\n C_Captcha,\r\n C_Cascade,\r\n C_Guide,\r\n C_Progress,\r\n C_Steps,\r\n C_ActionBar,\r\n C_Theme,\r\n C_Language,\r\n C_Date,\r\n C_Editor,\r\n C_Markdown,\r\n C_Map,\r\n C_City,\r\n C_VtableGantt,\r\n C_Signature,\r\n C_SplitPane,\r\n C_CollapsePanel,\r\n C_Time,\r\n C_FormSearch,\r\n C_Tree,\r\n C_QRCode,\r\n C_ImageCropper,\r\n C_Draggable,\r\n C_WaterFall,\r\n C_FullCalendar,\r\n C_NotificationCenter,\r\n C_Cron,\r\n C_FormulaEditor,\r\n C_AntV,\r\n C_VideoPlayer,\r\n C_FilePreview,\r\n C_WorkFlow,\r\n C_Form,\r\n C_Table,\r\n C_GlobalSearch,\r\n C_Menu,\r\n C_Breadcrumb,\r\n C_TagsView,\r\n C_AudioPlayer,\r\n C_AvatarGroup,\r\n C_Chat,\r\n C_ContextMenu,\r\n C_Login,\r\n C_Timeline,\r\n C_Transfer,\r\n]\r\n\r\n// ====== Barrel Re-exports:所有组件 + composables + types + constants ======\r\nexport * from './components/C_Code'\r\nexport * from './components/C_Icon'\r\nexport * from './components/C_Upload'\r\nexport * from './components/C_Barcode'\r\nexport * from './components/C_Captcha'\r\nexport * from './components/C_Cascade'\r\nexport * from './components/C_Guide'\r\nexport * from './components/C_Progress'\r\nexport * from './components/C_Steps'\r\nexport * from './components/C_ActionBar'\r\nexport * from './components/C_Theme'\r\nexport * from './components/C_Language'\r\nexport * from './components/C_Date'\r\nexport * from './components/C_Editor'\r\nexport * from './components/C_Markdown'\r\nexport * from './components/C_Map'\r\nexport * from './components/C_City'\r\nexport * from './components/C_VtableGantt'\r\nexport * from './components/C_Signature'\r\nexport * from './components/C_SplitPane'\r\nexport * from './components/C_CollapsePanel'\r\nexport * from './components/C_Time'\r\nexport * from './components/C_FormSearch'\r\nexport * from './components/C_Tree'\r\nexport * from './components/C_QRCode'\r\nexport * from './components/C_ImageCropper'\r\nexport * from './components/C_Draggable'\r\nexport * from './components/C_WaterFall'\r\nexport * from './components/C_FullCalendar'\r\nexport * from './components/C_NotificationCenter'\r\nexport * from './components/C_Cron'\r\nexport * from './components/C_FormulaEditor'\r\nexport * from './components/C_AntV'\r\nexport * from './components/C_VideoPlayer'\r\nexport * from './components/C_FilePreview'\r\nexport * from './components/C_WorkFlow'\r\nexport * from './components/C_Form'\r\nexport * from './components/C_Table'\r\nexport * from './components/C_GlobalSearch'\r\nexport * from './components/C_Menu'\r\nexport * from './components/C_Breadcrumb'\r\nexport * from './components/C_TagsView'\r\nexport * from './components/C_AudioPlayer'\r\nexport * from './components/C_AvatarGroup'\r\nexport * from './components/C_Chat'\r\nexport * from './components/C_ContextMenu'\r\nexport * from './components/C_Login'\r\nexport * from './components/C_Timeline'\r\nexport * from './components/C_Transfer'\r\n\r\n// ====== 共享类型 + 适配器 ======\r\nexport * from './components/_shared'\r\n\r\n// ====== 工具函数(不属于任何组件的公共工具) ======\r\nexport { setItem, getItem, removeItem, removeAllItem } from './utils/storage'\r\n\r\n// ====== 插件导出 ======\r\nexport { setupHighlight, useHighlight }\r\nexport type { HighlightPluginOptions } from './plugins/highlight'\r\n\r\n// ====== 全量安装 ======\r\nconst install = (app: App, options: ComponentLibOptions = {}) => {\r\n components.forEach(component => {\r\n const name =\r\n (component as any).__name || (component as any).name || 'UnknownComponent'\r\n app.component(name, component)\r\n })\r\n\r\n if (options.highlight !== undefined) {\r\n setupHighlight(app, options.highlight)\r\n }\r\n}\r\n\r\nexport default {\r\n install,\r\n} satisfies { install: (app: App, options?: ComponentLibOptions) => void }\r\n"],"mappings":"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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["C_Code","C_Icon","C_Upload","C_Barcode","C_Captcha","C_Cascade","C_Guide","C_Progress","C_Steps","C_ActionBar","C_Theme","C_Language","C_Date","C_Editor","C_Markdown","C_Map","C_City","C_VtableGantt","C_Signature","C_SplitPane","C_CollapsePanel","C_Time","C_FormSearch","C_Tree","C_QRCode","C_ImageCropper","C_Draggable","C_WaterFall","C_FullCalendar","C_NotificationCenter","C_Cron","C_FormulaEditor","C_AntV","C_VideoPlayer","C_FilePreview","C_WorkFlow","C_Form","C_Table","C_GlobalSearch","C_Menu","C_Breadcrumb","C_TagsView","C_AudioPlayer","C_AvatarGroup","C_Chat","C_ContextMenu","C_Login","C_Timeline","C_Transfer"],"sources":["../src/plugins/highlight.ts","../src/index.ts"],"sourcesContent":["\n\nimport type { App } from 'vue'\nimport type { HLJSApi, LanguageFn } from 'highlight.js'\nimport hljs from 'highlight.js/lib/core'\n\n// 导入默认主题样式\nimport 'highlight.js/styles/github.css'\n\n// 默认支持的语言包(常用语言预加载)\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport json from 'highlight.js/lib/languages/json'\nimport xml from 'highlight.js/lib/languages/xml' // HTML\nimport css from 'highlight.js/lib/languages/css'\nimport bash from 'highlight.js/lib/languages/bash'\nimport yaml from 'highlight.js/lib/languages/yaml'\nimport markdown from 'highlight.js/lib/languages/markdown'\nimport java from 'highlight.js/lib/languages/java'\nimport csharp from 'highlight.js/lib/languages/csharp'\nimport go from 'highlight.js/lib/languages/go'\nimport python from 'highlight.js/lib/languages/python'\n\n// 可选语言包映射(懒加载)\nconst OPTIONAL_LANGUAGES: Record<\n string,\n () => Promise<{ default: LanguageFn }>\n> = {\n cpp: () => import('highlight.js/lib/languages/cpp'),\n c: () => import('highlight.js/lib/languages/c'),\n php: () => import('highlight.js/lib/languages/php'),\n ruby: () => import('highlight.js/lib/languages/ruby'),\n rust: () => import('highlight.js/lib/languages/rust'),\n swift: () => import('highlight.js/lib/languages/swift'),\n kotlin: () => import('highlight.js/lib/languages/kotlin'),\n scss: () => import('highlight.js/lib/languages/scss'),\n less: () => import('highlight.js/lib/languages/less'),\n sql: () => import('highlight.js/lib/languages/sql'),\n dockerfile: () => import('highlight.js/lib/languages/dockerfile'),\n powershell: () => import('highlight.js/lib/languages/powershell'),\n}\n\n// 插件配置选项\nexport interface HighlightPluginOptions {\n autoDetect?: boolean\n extraLanguages?: string[]\n}\n\n// 状态管理\nconst loadedLanguages = new Set<string>()\nconst hlJsInstance: HLJSApi = hljs\n\n/**\n * * @description 注册语言包到 highlight.js 实例\n * ? @param name - 语言名称\n * ? @param languageFn - 语言定义函数\n * ! @return void\n */\nfunction registerLanguage(name: string, languageFn: LanguageFn): void {\n hlJsInstance.registerLanguage(name, languageFn)\n loadedLanguages.add(name)\n}\n\n/**\n * * @description 初始化核心配置,注册默认语言包\n * ? @param options - 插件配置选项\n * ! @return void\n */\nfunction initializeCore(options: HighlightPluginOptions): void {\n // 注册默认语言包\n const defaultLanguages = [\n ['javascript', javascript],\n ['typescript', typescript],\n ['json', json],\n ['html', xml],\n ['xml', xml],\n ['css', css],\n ['bash', bash],\n ['shell', bash],\n ['yaml', yaml],\n ['yml', yaml],\n ['markdown', markdown],\n ['java', java],\n ['csharp', csharp],\n ['go', go],\n ['python', python],\n ] as const\n\n defaultLanguages.forEach(([name, langFn]) => {\n registerLanguage(name, langFn)\n })\n\n // 配置 highlight.js\n hlJsInstance.configure({\n ignoreUnescapedHTML: true,\n languages: options.autoDetect ? undefined : [],\n })\n\n // 预加载额外语言\n if (options.extraLanguages?.length) {\n loadLanguages(options.extraLanguages)\n }\n}\n\n/**\n * * @description 批量加载多个语言包\n * ? @param languages - 要加载的语言名称数组\n * ! @return Promise<string[]> 成功加载的语言名称数组\n */\nasync function loadLanguages(languages: string[]): Promise<string[]> {\n const loadPromises = languages.map(lang => loadLanguage(lang))\n const results = await Promise.allSettled(loadPromises)\n\n return results\n .map((result, index) =>\n result.status === 'fulfilled' ? languages[index] : null\n )\n .filter(Boolean) as string[]\n}\n\n/**\n * * @description 动态加载单个语言包\n * ? @param language - 要加载的语言名称\n * ! @return Promise<boolean> 是否加载成功\n */\nasync function loadLanguage(language: string): Promise<boolean> {\n if (loadedLanguages.has(language)) {\n return true\n }\n\n const loader = OPTIONAL_LANGUAGES[language.toLowerCase()]\n if (!loader) {\n console.warn(`[HighlightPlugin] Language '${language}' not supported`)\n return false\n }\n\n try {\n const languageModule = await loader()\n registerLanguage(language, languageModule.default)\n console.log(`[HighlightPlugin] Language '${language}' loaded successfully`)\n return true\n } catch (error) {\n console.error(\n `[HighlightPlugin] Failed to load language '${language}':`,\n error\n )\n return false\n }\n}\n\n/**\n * * @description 获取 highlight 功能的 API 接口\n * ! @return highlight API 对象,包含所有可用方法\n */\nexport const useHighlight = () => {\n return {\n // 核心方法\n getHljs: () => hlJsInstance,\n\n // 语言管理\n loadLanguage: (language: string) => loadLanguage(language),\n loadLanguages: (languages: string[]) => loadLanguages(languages),\n getLoadedLanguages: () => Array.from(loadedLanguages),\n }\n}\n\n/**\n * * @description 安装 highlight.js 插件到 Vue 应用\n * ? @param app - Vue 应用实例\n * ? @param options - 插件配置选项\n * ! @return void\n */\nexport function setupHighlight(app: App, options: HighlightPluginOptions = {}) {\n const pluginOptions: HighlightPluginOptions = {\n autoDetect: false,\n extraLanguages: [],\n ...options,\n }\n\n // 初始化核心配置\n initializeCore(pluginOptions)\n\n // 挂载到全局\n if (typeof window !== 'undefined') {\n window.hljs = hlJsInstance\n }\n\n // 提供给 Vue 应用\n const highlightAPI = useHighlight()\n app.provide('highlightManager', highlightAPI)\n app.config.globalProperties.$highlight = highlightAPI\n\n console.log('[HighlightPlugin] 🎨 highlight.js plugin installed successfully')\n}\n\n// 导出默认配置\nexport const defaultHighlightOptions: HighlightPluginOptions = {\n autoDetect: false,\n extraLanguages: [],\n}\n\n// 类型声明\ndeclare global {\n interface Window {\n hljs: HLJSApi\n }\n}\n","import type { App, Component } from 'vue'\n\n// ====== 全局样式由 sass CLI 编译到 dist/style.css,不再通过 JS 导入 ======\n\n// ====== 组件导入(仅用于 install 全量注册) ======\nimport { C_Code } from './components/C_Code'\nimport { C_Icon } from './components/C_Icon'\nimport { C_Upload } from './components/C_Upload'\nimport { C_Barcode } from './components/C_Barcode'\nimport { C_Captcha } from './components/C_Captcha'\nimport { C_Cascade } from './components/C_Cascade'\nimport { C_Guide } from './components/C_Guide'\nimport { C_Progress } from './components/C_Progress'\nimport { C_Steps } from './components/C_Steps'\nimport { C_ActionBar } from './components/C_ActionBar'\nimport { C_Theme } from './components/C_Theme'\nimport { C_Language } from './components/C_Language'\nimport { C_Date } from './components/C_Date'\nimport { C_Editor } from './components/C_Editor'\nimport { C_Markdown } from './components/C_Markdown'\nimport { C_Map } from './components/C_Map'\nimport { C_City } from './components/C_City'\nimport { C_VtableGantt } from './components/C_VtableGantt'\nimport { C_Signature } from './components/C_Signature'\nimport { C_SplitPane } from './components/C_SplitPane'\nimport { C_CollapsePanel } from './components/C_CollapsePanel'\nimport { C_Time } from './components/C_Time'\nimport { C_FormSearch } from './components/C_FormSearch'\nimport { C_Tree } from './components/C_Tree'\nimport { C_QRCode } from './components/C_QRCode'\nimport { C_ImageCropper } from './components/C_ImageCropper'\nimport { C_Draggable } from './components/C_Draggable'\nimport { C_WaterFall } from './components/C_WaterFall'\nimport { C_FullCalendar } from './components/C_FullCalendar'\nimport { C_NotificationCenter } from './components/C_NotificationCenter'\nimport { C_Cron } from './components/C_Cron'\nimport { C_FormulaEditor } from './components/C_FormulaEditor'\nimport { C_AntV } from './components/C_AntV'\nimport { C_VideoPlayer } from './components/C_VideoPlayer'\nimport { C_FilePreview } from './components/C_FilePreview'\nimport { C_WorkFlow } from './components/C_WorkFlow'\nimport { C_Form } from './components/C_Form'\nimport { C_Table } from './components/C_Table'\nimport { C_GlobalSearch } from './components/C_GlobalSearch'\nimport { C_Menu } from './components/C_Menu'\nimport { C_Breadcrumb } from './components/C_Breadcrumb'\nimport { C_TagsView } from './components/C_TagsView'\nimport { C_AudioPlayer } from './components/C_AudioPlayer'\nimport { C_AvatarGroup } from './components/C_AvatarGroup'\nimport { C_Chat } from './components/C_Chat'\nimport { C_ContextMenu } from './components/C_ContextMenu'\nimport { C_Login } from './components/C_Login'\nimport { C_Timeline } from './components/C_Timeline'\nimport { C_Transfer } from './components/C_Transfer'\n\n// ====== 插件 ======\nimport { setupHighlight, useHighlight } from './plugins/highlight'\n\n// ====== 安装选项 ======\nexport interface ComponentLibOptions {\n highlight?: import('./plugins/highlight').HighlightPluginOptions\n}\n\n// ====== 组件列表(全量注册使用) ======\nconst components: Component[] = [\n C_Code,\n C_Icon,\n C_Upload,\n C_Barcode,\n C_Captcha,\n C_Cascade,\n C_Guide,\n C_Progress,\n C_Steps,\n C_ActionBar,\n C_Theme,\n C_Language,\n C_Date,\n C_Editor,\n C_Markdown,\n C_Map,\n C_City,\n C_VtableGantt,\n C_Signature,\n C_SplitPane,\n C_CollapsePanel,\n C_Time,\n C_FormSearch,\n C_Tree,\n C_QRCode,\n C_ImageCropper,\n C_Draggable,\n C_WaterFall,\n C_FullCalendar,\n C_NotificationCenter,\n C_Cron,\n C_FormulaEditor,\n C_AntV,\n C_VideoPlayer,\n C_FilePreview,\n C_WorkFlow,\n C_Form,\n C_Table,\n C_GlobalSearch,\n C_Menu,\n C_Breadcrumb,\n C_TagsView,\n C_AudioPlayer,\n C_AvatarGroup,\n C_Chat,\n C_ContextMenu,\n C_Login,\n C_Timeline,\n C_Transfer,\n]\n\n// ====== Barrel Re-exports:所有组件 + composables + types + constants ======\nexport * from './components/C_Code'\nexport * from './components/C_Icon'\nexport * from './components/C_Upload'\nexport * from './components/C_Barcode'\nexport * from './components/C_Captcha'\nexport * from './components/C_Cascade'\nexport * from './components/C_Guide'\nexport * from './components/C_Progress'\nexport * from './components/C_Steps'\nexport * from './components/C_ActionBar'\nexport * from './components/C_Theme'\nexport * from './components/C_Language'\nexport * from './components/C_Date'\nexport * from './components/C_Editor'\nexport * from './components/C_Markdown'\nexport * from './components/C_Map'\nexport * from './components/C_City'\nexport * from './components/C_VtableGantt'\nexport * from './components/C_Signature'\nexport * from './components/C_SplitPane'\nexport * from './components/C_CollapsePanel'\nexport * from './components/C_Time'\nexport * from './components/C_FormSearch'\nexport * from './components/C_Tree'\nexport * from './components/C_QRCode'\nexport * from './components/C_ImageCropper'\nexport * from './components/C_Draggable'\nexport * from './components/C_WaterFall'\nexport * from './components/C_FullCalendar'\nexport * from './components/C_NotificationCenter'\nexport * from './components/C_Cron'\nexport * from './components/C_FormulaEditor'\nexport * from './components/C_AntV'\nexport * from './components/C_VideoPlayer'\nexport * from './components/C_FilePreview'\nexport * from './components/C_WorkFlow'\nexport * from './components/C_Form'\nexport * from './components/C_Table'\nexport * from './components/C_GlobalSearch'\nexport * from './components/C_Menu'\nexport * from './components/C_Breadcrumb'\nexport * from './components/C_TagsView'\nexport * from './components/C_AudioPlayer'\nexport * from './components/C_AvatarGroup'\nexport * from './components/C_Chat'\nexport * from './components/C_ContextMenu'\nexport * from './components/C_Login'\nexport * from './components/C_Timeline'\nexport * from './components/C_Transfer'\n\n// ====== 共享类型 + 适配器 ======\nexport * from './components/_shared'\n\n// ====== 工具函数(不属于任何组件的公共工具) ======\nexport { setItem, getItem, removeItem, removeAllItem } from './utils/storage'\n\n// ====== 插件导出 ======\nexport { setupHighlight, useHighlight }\nexport type { HighlightPluginOptions } from './plugins/highlight'\n\n// ====== 全量安装 ======\nconst install = (app: App, options: ComponentLibOptions = {}) => {\n components.forEach(component => {\n const name =\n (component as any).__name || (component as any).name || 'UnknownComponent'\n app.component(name, component)\n })\n\n if (options.highlight !== undefined) {\n setupHighlight(app, options.highlight)\n }\n}\n\nexport default {\n install,\n} satisfies { install: (app: App, options?: ComponentLibOptions) => void }\n"],"mappings":"okHAwBA,MAAM,GAGF,CACF,QAAW,OAAO,kCAClB,MAAS,OAAO,gCAChB,QAAW,OAAO,kCAClB,SAAY,OAAO,mCACnB,SAAY,OAAO,mCACnB,UAAa,OAAO,oCACpB,WAAc,OAAO,qCACrB,SAAY,OAAO,mCACnB,SAAY,OAAO,mCACnB,QAAW,OAAO,kCAClB,eAAkB,OAAO,yCACzB,eAAkB,OAAO,yCAC1B,CASK,EAAkB,IAAI,IACtB,EAAwB,GAQ9B,SAAS,GAAiB,EAAc,EAA8B,CACpE,EAAa,iBAAiB,EAAM,EAAW,CAC/C,EAAgB,IAAI,EAAK,CAQ3B,SAAS,GAAe,EAAuC,CAEpC,CACvB,CAAC,aAAc,GAAW,CAC1B,CAAC,aAAc,GAAW,CAC1B,CAAC,OAAQ,GAAK,CACd,CAAC,OAAQ,EAAI,CACb,CAAC,MAAO,EAAI,CACZ,CAAC,MAAO,GAAI,CACZ,CAAC,OAAQ,EAAK,CACd,CAAC,QAAS,EAAK,CACf,CAAC,OAAQ,EAAK,CACd,CAAC,MAAO,EAAK,CACb,CAAC,WAAY,GAAS,CACtB,CAAC,OAAQ,GAAK,CACd,CAAC,SAAU,GAAO,CAClB,CAAC,KAAM,GAAG,CACV,CAAC,SAAU,GAAO,CACnB,CAEgB,SAAS,CAAC,EAAM,KAAY,CAC3C,GAAiB,EAAM,EAAO,EAC9B,CAGF,EAAa,UAAU,CACrB,oBAAqB,GACrB,UAAW,EAAQ,WAAa,IAAA,GAAY,EAAE,CAC/C,CAAC,CAGE,EAAQ,gBAAgB,QAC1B,GAAc,EAAQ,eAAe,CASzC,eAAe,GAAc,EAAwC,CACnE,IAAM,EAAe,EAAU,IAAI,GAAQ,GAAa,EAAK,CAAC,CAG9D,OAFgB,MAAM,QAAQ,WAAW,EAAa,EAGnD,KAAK,EAAQ,IACZ,EAAO,SAAW,YAAc,EAAU,GAAS,KACpD,CACA,OAAO,QAAQ,CAQpB,eAAe,GAAa,EAAoC,CAC9D,GAAI,EAAgB,IAAI,EAAS,CAC/B,MAAO,GAGT,IAAM,EAAS,GAAmB,EAAS,aAAa,EACxD,GAAI,CAAC,EAEH,OADA,QAAQ,KAAK,+BAA+B,EAAS,iBAAiB,CAC/D,GAGT,GAAI,CAIF,OAFA,GAAiB,GADM,MAAM,GAAQ,EACK,QAAQ,CAClD,QAAQ,IAAI,+BAA+B,EAAS,uBAAuB,CACpE,SACA,EAAO,CAKd,OAJA,QAAQ,MACN,8CAA8C,EAAS,IACvD,EACD,CACM,IAQX,MAAa,QACJ,CAEL,YAAe,EAGf,aAAe,GAAqB,GAAa,EAAS,CAC1D,cAAgB,GAAwB,GAAc,EAAU,CAChE,uBAA0B,MAAM,KAAK,EAAgB,CACtD,EASH,SAAgB,GAAe,EAAU,EAAkC,EAAE,CAAE,CAQ7E,GAP8C,CAC5C,WAAY,GACZ,eAAgB,EAAE,CAClB,GAAG,EACJ,CAG4B,CAGzB,OAAO,OAAW,MACpB,OAAO,KAAO,GAIhB,IAAM,EAAe,IAAc,CACnC,EAAI,QAAQ,mBAAoB,EAAa,CAC7C,EAAI,OAAO,iBAAiB,WAAa,EAEzC,QAAQ,IAAI,kEAAkE,CChIhF,MAAM,GAA0B,CAC9BA,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACD,CA4ED,IAAA,GAAe,CACb,SAbe,EAAU,EAA+B,EAAE,GAAK,CAC/D,GAAW,QAAQ,GAAa,CAC9B,IAAM,EACH,EAAkB,QAAW,EAAkB,MAAQ,mBAC1D,EAAI,UAAU,EAAM,EAAU,EAC9B,CAEE,EAAQ,YAAc,IAAA,IACxB,GAAe,EAAK,EAAQ,UAAU,EAMzC"}
1
+ {"version":3,"file":"index.js","names":["C_Code","C_Icon","C_Upload","C_Barcode","C_Captcha","C_Cascade","C_Guide","C_Progress","C_Steps","C_ActionBar","C_Theme","C_Language","C_Date","C_Editor","C_Markdown","C_Map","C_City","C_VtableGantt","C_Signature","C_SplitPane","C_CollapsePanel","C_Time","C_FormSearch","C_Tree","C_QRCode","C_ImageCropper","C_Draggable","C_WaterFall","C_FullCalendar","C_NotificationCenter","C_Cron","C_FormulaEditor","C_AntV","C_VideoPlayer","C_FilePreview","C_WorkFlow","C_Form","C_Table","C_GlobalSearch","C_Menu","C_Breadcrumb","C_TagsView","C_AudioPlayer","C_AvatarGroup","C_Chat","C_ContextMenu","C_Login","C_Timeline","C_Transfer"],"sources":["../src/plugins/highlight.ts","../src/index.ts"],"sourcesContent":["\r\n\r\nimport type { App } from 'vue'\r\nimport type { HLJSApi, LanguageFn } from 'highlight.js'\r\nimport hljs from 'highlight.js/lib/core'\r\n\r\n// 导入默认主题样式\r\nimport 'highlight.js/styles/github.css'\r\n\r\n// 默认支持的语言包(常用语言预加载)\r\nimport javascript from 'highlight.js/lib/languages/javascript'\r\nimport typescript from 'highlight.js/lib/languages/typescript'\r\nimport json from 'highlight.js/lib/languages/json'\r\nimport xml from 'highlight.js/lib/languages/xml' // HTML\r\nimport css from 'highlight.js/lib/languages/css'\r\nimport bash from 'highlight.js/lib/languages/bash'\r\nimport yaml from 'highlight.js/lib/languages/yaml'\r\nimport markdown from 'highlight.js/lib/languages/markdown'\r\nimport java from 'highlight.js/lib/languages/java'\r\nimport csharp from 'highlight.js/lib/languages/csharp'\r\nimport go from 'highlight.js/lib/languages/go'\r\nimport python from 'highlight.js/lib/languages/python'\r\n\r\n// 可选语言包映射(懒加载)\r\nconst OPTIONAL_LANGUAGES: Record<\r\n string,\r\n () => Promise<{ default: LanguageFn }>\r\n> = {\r\n cpp: () => import('highlight.js/lib/languages/cpp'),\r\n c: () => import('highlight.js/lib/languages/c'),\r\n php: () => import('highlight.js/lib/languages/php'),\r\n ruby: () => import('highlight.js/lib/languages/ruby'),\r\n rust: () => import('highlight.js/lib/languages/rust'),\r\n swift: () => import('highlight.js/lib/languages/swift'),\r\n kotlin: () => import('highlight.js/lib/languages/kotlin'),\r\n scss: () => import('highlight.js/lib/languages/scss'),\r\n less: () => import('highlight.js/lib/languages/less'),\r\n sql: () => import('highlight.js/lib/languages/sql'),\r\n dockerfile: () => import('highlight.js/lib/languages/dockerfile'),\r\n powershell: () => import('highlight.js/lib/languages/powershell'),\r\n}\r\n\r\n// 插件配置选项\r\nexport interface HighlightPluginOptions {\r\n autoDetect?: boolean\r\n extraLanguages?: string[]\r\n}\r\n\r\n// 状态管理\r\nconst loadedLanguages = new Set<string>()\r\nconst hlJsInstance: HLJSApi = hljs\r\n\r\n/**\r\n * * @description 注册语言包到 highlight.js 实例\r\n * ? @param name - 语言名称\r\n * ? @param languageFn - 语言定义函数\r\n * ! @return void\r\n */\r\nfunction registerLanguage(name: string, languageFn: LanguageFn): void {\r\n hlJsInstance.registerLanguage(name, languageFn)\r\n loadedLanguages.add(name)\r\n}\r\n\r\n/**\r\n * * @description 初始化核心配置,注册默认语言包\r\n * ? @param options - 插件配置选项\r\n * ! @return void\r\n */\r\nfunction initializeCore(options: HighlightPluginOptions): void {\r\n // 注册默认语言包\r\n const defaultLanguages = [\r\n ['javascript', javascript],\r\n ['typescript', typescript],\r\n ['json', json],\r\n ['html', xml],\r\n ['xml', xml],\r\n ['css', css],\r\n ['bash', bash],\r\n ['shell', bash],\r\n ['yaml', yaml],\r\n ['yml', yaml],\r\n ['markdown', markdown],\r\n ['java', java],\r\n ['csharp', csharp],\r\n ['go', go],\r\n ['python', python],\r\n ] as const\r\n\r\n defaultLanguages.forEach(([name, langFn]) => {\r\n registerLanguage(name, langFn)\r\n })\r\n\r\n // 配置 highlight.js\r\n hlJsInstance.configure({\r\n ignoreUnescapedHTML: true,\r\n languages: options.autoDetect ? undefined : [],\r\n })\r\n\r\n // 预加载额外语言\r\n if (options.extraLanguages?.length) {\r\n loadLanguages(options.extraLanguages)\r\n }\r\n}\r\n\r\n/**\r\n * * @description 批量加载多个语言包\r\n * ? @param languages - 要加载的语言名称数组\r\n * ! @return Promise<string[]> 成功加载的语言名称数组\r\n */\r\nasync function loadLanguages(languages: string[]): Promise<string[]> {\r\n const loadPromises = languages.map(lang => loadLanguage(lang))\r\n const results = await Promise.allSettled(loadPromises)\r\n\r\n return results\r\n .map((result, index) =>\r\n result.status === 'fulfilled' ? languages[index] : null\r\n )\r\n .filter(Boolean) as string[]\r\n}\r\n\r\n/**\r\n * * @description 动态加载单个语言包\r\n * ? @param language - 要加载的语言名称\r\n * ! @return Promise<boolean> 是否加载成功\r\n */\r\nasync function loadLanguage(language: string): Promise<boolean> {\r\n if (loadedLanguages.has(language)) {\r\n return true\r\n }\r\n\r\n const loader = OPTIONAL_LANGUAGES[language.toLowerCase()]\r\n if (!loader) {\r\n console.warn(`[HighlightPlugin] Language '${language}' not supported`)\r\n return false\r\n }\r\n\r\n try {\r\n const languageModule = await loader()\r\n registerLanguage(language, languageModule.default)\r\n console.log(`[HighlightPlugin] Language '${language}' loaded successfully`)\r\n return true\r\n } catch (error) {\r\n console.error(\r\n `[HighlightPlugin] Failed to load language '${language}':`,\r\n error\r\n )\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * * @description 获取 highlight 功能的 API 接口\r\n * ! @return highlight API 对象,包含所有可用方法\r\n */\r\nexport const useHighlight = () => {\r\n return {\r\n // 核心方法\r\n getHljs: () => hlJsInstance,\r\n\r\n // 语言管理\r\n loadLanguage: (language: string) => loadLanguage(language),\r\n loadLanguages: (languages: string[]) => loadLanguages(languages),\r\n getLoadedLanguages: () => Array.from(loadedLanguages),\r\n }\r\n}\r\n\r\n/**\r\n * * @description 安装 highlight.js 插件到 Vue 应用\r\n * ? @param app - Vue 应用实例\r\n * ? @param options - 插件配置选项\r\n * ! @return void\r\n */\r\nexport function setupHighlight(app: App, options: HighlightPluginOptions = {}) {\r\n const pluginOptions: HighlightPluginOptions = {\r\n autoDetect: false,\r\n extraLanguages: [],\r\n ...options,\r\n }\r\n\r\n // 初始化核心配置\r\n initializeCore(pluginOptions)\r\n\r\n // 挂载到全局\r\n if (typeof window !== 'undefined') {\r\n window.hljs = hlJsInstance\r\n }\r\n\r\n // 提供给 Vue 应用\r\n const highlightAPI = useHighlight()\r\n app.provide('highlightManager', highlightAPI)\r\n app.config.globalProperties.$highlight = highlightAPI\r\n\r\n console.log('[HighlightPlugin] 🎨 highlight.js plugin installed successfully')\r\n}\r\n\r\n// 导出默认配置\r\nexport const defaultHighlightOptions: HighlightPluginOptions = {\r\n autoDetect: false,\r\n extraLanguages: [],\r\n}\r\n\r\n// 类型声明\r\ndeclare global {\r\n interface Window {\r\n hljs: HLJSApi\r\n }\r\n}\r\n","import type { App, Component } from 'vue'\r\n\r\n// ====== 全局样式由 sass CLI 编译到 dist/style.css,不再通过 JS 导入 ======\r\n\r\n// ====== 组件导入(仅用于 install 全量注册) ======\r\nimport { C_Code } from './components/C_Code'\r\nimport { C_Icon } from './components/C_Icon'\r\nimport { C_Upload } from './components/C_Upload'\r\nimport { C_Barcode } from './components/C_Barcode'\r\nimport { C_Captcha } from './components/C_Captcha'\r\nimport { C_Cascade } from './components/C_Cascade'\r\nimport { C_Guide } from './components/C_Guide'\r\nimport { C_Progress } from './components/C_Progress'\r\nimport { C_Steps } from './components/C_Steps'\r\nimport { C_ActionBar } from './components/C_ActionBar'\r\nimport { C_Theme } from './components/C_Theme'\r\nimport { C_Language } from './components/C_Language'\r\nimport { C_Date } from './components/C_Date'\r\nimport { C_Editor } from './components/C_Editor'\r\nimport { C_Markdown } from './components/C_Markdown'\r\nimport { C_Map } from './components/C_Map'\r\nimport { C_City } from './components/C_City'\r\nimport { C_VtableGantt } from './components/C_VtableGantt'\r\nimport { C_Signature } from './components/C_Signature'\r\nimport { C_SplitPane } from './components/C_SplitPane'\r\nimport { C_CollapsePanel } from './components/C_CollapsePanel'\r\nimport { C_Time } from './components/C_Time'\r\nimport { C_FormSearch } from './components/C_FormSearch'\r\nimport { C_Tree } from './components/C_Tree'\r\nimport { C_QRCode } from './components/C_QRCode'\r\nimport { C_ImageCropper } from './components/C_ImageCropper'\r\nimport { C_Draggable } from './components/C_Draggable'\r\nimport { C_WaterFall } from './components/C_WaterFall'\r\nimport { C_FullCalendar } from './components/C_FullCalendar'\r\nimport { C_NotificationCenter } from './components/C_NotificationCenter'\r\nimport { C_Cron } from './components/C_Cron'\r\nimport { C_FormulaEditor } from './components/C_FormulaEditor'\r\nimport { C_AntV } from './components/C_AntV'\r\nimport { C_VideoPlayer } from './components/C_VideoPlayer'\r\nimport { C_FilePreview } from './components/C_FilePreview'\r\nimport { C_WorkFlow } from './components/C_WorkFlow'\r\nimport { C_Form } from './components/C_Form'\r\nimport { C_Table } from './components/C_Table'\r\nimport { C_GlobalSearch } from './components/C_GlobalSearch'\r\nimport { C_Menu } from './components/C_Menu'\r\nimport { C_Breadcrumb } from './components/C_Breadcrumb'\r\nimport { C_TagsView } from './components/C_TagsView'\r\nimport { C_AudioPlayer } from './components/C_AudioPlayer'\r\nimport { C_AvatarGroup } from './components/C_AvatarGroup'\r\nimport { C_Chat } from './components/C_Chat'\r\nimport { C_ContextMenu } from './components/C_ContextMenu'\r\nimport { C_Login } from './components/C_Login'\r\nimport { C_Timeline } from './components/C_Timeline'\r\nimport { C_Transfer } from './components/C_Transfer'\r\n\r\n// ====== 插件 ======\r\nimport { setupHighlight, useHighlight } from './plugins/highlight'\r\n\r\n// ====== 安装选项 ======\r\nexport interface ComponentLibOptions {\r\n highlight?: import('./plugins/highlight').HighlightPluginOptions\r\n}\r\n\r\n// ====== 组件列表(全量注册使用) ======\r\nconst components: Component[] = [\r\n C_Code,\r\n C_Icon,\r\n C_Upload,\r\n C_Barcode,\r\n C_Captcha,\r\n C_Cascade,\r\n C_Guide,\r\n C_Progress,\r\n C_Steps,\r\n C_ActionBar,\r\n C_Theme,\r\n C_Language,\r\n C_Date,\r\n C_Editor,\r\n C_Markdown,\r\n C_Map,\r\n C_City,\r\n C_VtableGantt,\r\n C_Signature,\r\n C_SplitPane,\r\n C_CollapsePanel,\r\n C_Time,\r\n C_FormSearch,\r\n C_Tree,\r\n C_QRCode,\r\n C_ImageCropper,\r\n C_Draggable,\r\n C_WaterFall,\r\n C_FullCalendar,\r\n C_NotificationCenter,\r\n C_Cron,\r\n C_FormulaEditor,\r\n C_AntV,\r\n C_VideoPlayer,\r\n C_FilePreview,\r\n C_WorkFlow,\r\n C_Form,\r\n C_Table,\r\n C_GlobalSearch,\r\n C_Menu,\r\n C_Breadcrumb,\r\n C_TagsView,\r\n C_AudioPlayer,\r\n C_AvatarGroup,\r\n C_Chat,\r\n C_ContextMenu,\r\n C_Login,\r\n C_Timeline,\r\n C_Transfer,\r\n]\r\n\r\n// ====== Barrel Re-exports:所有组件 + composables + types + constants ======\r\nexport * from './components/C_Code'\r\nexport * from './components/C_Icon'\r\nexport * from './components/C_Upload'\r\nexport * from './components/C_Barcode'\r\nexport * from './components/C_Captcha'\r\nexport * from './components/C_Cascade'\r\nexport * from './components/C_Guide'\r\nexport * from './components/C_Progress'\r\nexport * from './components/C_Steps'\r\nexport * from './components/C_ActionBar'\r\nexport * from './components/C_Theme'\r\nexport * from './components/C_Language'\r\nexport * from './components/C_Date'\r\nexport * from './components/C_Editor'\r\nexport * from './components/C_Markdown'\r\nexport * from './components/C_Map'\r\nexport * from './components/C_City'\r\nexport * from './components/C_VtableGantt'\r\nexport * from './components/C_Signature'\r\nexport * from './components/C_SplitPane'\r\nexport * from './components/C_CollapsePanel'\r\nexport * from './components/C_Time'\r\nexport * from './components/C_FormSearch'\r\nexport * from './components/C_Tree'\r\nexport * from './components/C_QRCode'\r\nexport * from './components/C_ImageCropper'\r\nexport * from './components/C_Draggable'\r\nexport * from './components/C_WaterFall'\r\nexport * from './components/C_FullCalendar'\r\nexport * from './components/C_NotificationCenter'\r\nexport * from './components/C_Cron'\r\nexport * from './components/C_FormulaEditor'\r\nexport * from './components/C_AntV'\r\nexport * from './components/C_VideoPlayer'\r\nexport * from './components/C_FilePreview'\r\nexport * from './components/C_WorkFlow'\r\nexport * from './components/C_Form'\r\nexport * from './components/C_Table'\r\nexport * from './components/C_GlobalSearch'\r\nexport * from './components/C_Menu'\r\nexport * from './components/C_Breadcrumb'\r\nexport * from './components/C_TagsView'\r\nexport * from './components/C_AudioPlayer'\r\nexport * from './components/C_AvatarGroup'\r\nexport * from './components/C_Chat'\r\nexport * from './components/C_ContextMenu'\r\nexport * from './components/C_Login'\r\nexport * from './components/C_Timeline'\r\nexport * from './components/C_Transfer'\r\n\r\n// ====== 共享类型 + 适配器 ======\r\nexport * from './components/_shared'\r\n\r\n// ====== 工具函数(不属于任何组件的公共工具) ======\r\nexport { setItem, getItem, removeItem, removeAllItem } from './utils/storage'\r\n\r\n// ====== 插件导出 ======\r\nexport { setupHighlight, useHighlight }\r\nexport type { HighlightPluginOptions } from './plugins/highlight'\r\n\r\n// ====== 全量安装 ======\r\nconst install = (app: App, options: ComponentLibOptions = {}) => {\r\n components.forEach(component => {\r\n const name =\r\n (component as any).__name || (component as any).name || 'UnknownComponent'\r\n app.component(name, component)\r\n })\r\n\r\n if (options.highlight !== undefined) {\r\n setupHighlight(app, options.highlight)\r\n }\r\n}\r\n\r\nexport default {\r\n install,\r\n} satisfies { install: (app: App, options?: ComponentLibOptions) => void }\r\n"],"mappings":"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"}
@@ -33,12 +33,12 @@ declare const __VLS_export: vue.DefineComponent<Props, {
33
33
  onClick?: ((event: MouseEvent) => any) | undefined;
34
34
  onFullscreen?: ((isFullscreen: boolean) => any) | undefined;
35
35
  }>, {
36
+ trim: boolean;
36
37
  code: string;
37
38
  language: string;
38
39
  showHeader: boolean;
39
40
  showLineNumbers: boolean;
40
41
  wordWrap: boolean;
41
- trim: boolean;
42
42
  showFullscreen: boolean;
43
43
  autoLoadLanguage: boolean;
44
44
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -61,19 +61,19 @@ declare const __VLS_export: vue.DefineComponent<ContextMenuProps, {
61
61
  close: () => void; /** 当前是否可见 */
62
62
  visible: vue.ComputedRef<boolean>;
63
63
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
64
- close: () => any;
65
- select: (item: ContextMenuItem) => any;
66
64
  open: (position: {
67
65
  x: number;
68
66
  y: number;
69
67
  }) => any;
68
+ close: () => any;
69
+ select: (item: ContextMenuItem) => any;
70
70
  }, string, vue.PublicProps, Readonly<ContextMenuProps> & Readonly<{
71
- onClose?: (() => any) | undefined;
72
- onSelect?: ((item: ContextMenuItem) => any) | undefined;
73
71
  onOpen?: ((position: {
74
72
  x: number;
75
73
  y: number;
76
74
  }) => any) | undefined;
75
+ onClose?: (() => any) | undefined;
76
+ onSelect?: ((item: ContextMenuItem) => any) | undefined;
77
77
  }>, {
78
78
  disabled: boolean;
79
79
  items: ContextMenuItem[];
@@ -38,9 +38,9 @@ declare const __VLS_export: vue.DefineComponent<Props, {
38
38
  "onUpdate:dateTimeRange"?: ((value: DateRangeValue) => any) | undefined;
39
39
  "onUpdate:smartRange"?: ((value: DateRangeValue) => any) | undefined;
40
40
  }>, {
41
- mode: DatePickerMode;
42
41
  placeholder: string;
43
42
  disabled: boolean;
43
+ mode: DatePickerMode;
44
44
  startPlaceholder: string;
45
45
  endPlaceholder: string;
46
46
  disabledBeforeToday: boolean;
@@ -28,11 +28,11 @@ declare const __VLS_export: vue.DefineComponent<Props, {
28
28
  "onEditor-mounted"?: ((editor: any) => any) | undefined;
29
29
  "onEditor-change"?: ((html: string) => any) | undefined;
30
30
  }>, {
31
- height: number;
32
31
  modelValue: string;
33
- theme: "light" | "dark";
34
32
  placeholder: string;
35
33
  disabled: boolean;
34
+ theme: "light" | "dark";
35
+ height: number;
36
36
  readonly: boolean;
37
37
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
38
38
  declare const _default: typeof __VLS_export;
@@ -50,16 +50,16 @@ declare const __VLS_export: vue.DefineComponent<IconProps, {
50
50
  onLoad?: (() => any) | undefined;
51
51
  }>, {
52
52
  type: "iconify" | "unocss" | "component" | "svg" | "image";
53
- title: string;
54
- size: number | string;
55
- clickable: boolean;
56
53
  name: string | any;
54
+ size: number | string;
57
55
  color: string;
58
56
  loading: boolean;
59
57
  flip: "horizontal" | "vertical" | "both";
58
+ title: string;
60
59
  svgPath: string;
61
60
  viewBox: string;
62
61
  alt: string;
62
+ clickable: boolean;
63
63
  fallbackIcon: string;
64
64
  ariaLabel: string;
65
65
  customClass: string;
@@ -99,8 +99,8 @@ declare const __VLS_base: vue.DefineComponent<LoginProps, {
99
99
  "onRegister-submit"?: ((data: RegisterFormData) => any) | undefined;
100
100
  "onRegister-send-code"?: ((phone: string) => any) | undefined;
101
101
  }>, {
102
- title: string;
103
102
  loading: boolean;
103
+ title: string;
104
104
  storageKey: string;
105
105
  defaultUsername: string;
106
106
  defaultPassword: string;
@@ -58,12 +58,11 @@ declare const __VLS_export: vue.DefineComponent<Props, {
58
58
  "onAuto-save"?: ((text: string) => any) | undefined;
59
59
  "onMax-length-exceeded"?: ((currentLength: number, maxLength: number) => any) | undefined;
60
60
  }>, {
61
- height: string | number;
62
61
  modelValue: string;
63
- mode: "edit" | "editable" | "preview";
64
62
  placeholder: string;
65
63
  disabled: boolean;
66
- autoSave: boolean;
64
+ height: string | number;
65
+ mode: "edit" | "editable" | "preview";
67
66
  tocNavPosition: "left" | "right";
68
67
  defaultFullscreen: boolean;
69
68
  autofocus: boolean;
@@ -72,6 +71,7 @@ declare const __VLS_export: vue.DefineComponent<Props, {
72
71
  rightToolbar: string;
73
72
  maxLength: number;
74
73
  showWordCount: boolean;
74
+ autoSave: boolean;
75
75
  autoSaveInterval: number;
76
76
  isDark: boolean;
77
77
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -70,12 +70,12 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
70
70
  onEnded?: ((index: number) => any) | undefined;
71
71
  onModeChange?: ((mode: string) => any) | undefined;
72
72
  }>, {
73
+ theme: "default" | "minimal";
73
74
  initialIndex: number;
74
75
  showPlaylist: boolean;
75
76
  showCover: boolean;
76
77
  autoplay: boolean;
77
78
  mode: "list" | "loop" | "single" | "shuffle";
78
- theme: "default" | "minimal";
79
79
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
80
80
  declare const _default: typeof __VLS_export;
81
81
  //#endregion
@@ -35,12 +35,12 @@ type __VLS_Slots = {} & {
35
35
  };
36
36
  declare const __VLS_base: vue.DefineComponent<Props, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<Props> & Readonly<{}>, {
37
37
  status: "default" | "success" | "error" | "warning" | "info";
38
- time: number;
39
- strokeWidth: number;
40
38
  percentage: number | number[];
41
39
  isAnimation: boolean;
40
+ time: number;
42
41
  indicatorPlacement: "inside" | "outside";
43
42
  showIndicator: boolean;
43
+ strokeWidth: number;
44
44
  unit: string;
45
45
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
46
46
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -26,8 +26,8 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
26
26
  }>, {
27
27
  clickable: boolean;
28
28
  direction: "horizontal" | "vertical";
29
- current: number;
30
29
  connected: boolean;
30
+ current: number;
31
31
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
32
32
  declare const _default: typeof __VLS_export;
33
33
  //#endregion
@@ -91,9 +91,9 @@ declare const __VLS_base: vue.DefineComponent<TimelineProps, {
91
91
  onExpand?: ((item: TimelineItem, expanded: boolean) => any) | undefined;
92
92
  }>, {
93
93
  reverse: boolean;
94
- mode: "vertical" | "horizontal";
95
94
  size: "small" | "medium" | "large";
96
95
  items: TimelineItem[];
96
+ mode: "vertical" | "horizontal";
97
97
  labelPlacement: "left" | "right" | "alternate";
98
98
  pending: boolean;
99
99
  pendingText: string;
@@ -647,12 +647,12 @@ declare const __VLS_export: vue.DefineComponent<Props, {
647
647
  onTaskClick?: ((task: GanttTask, event: Event) => any) | undefined;
648
648
  onTaskChange?: ((task: GanttTask, changes: any) => any) | undefined;
649
649
  }>, {
650
+ theme: "light" | "dark";
651
+ options: GanttOptions;
650
652
  height: string | number;
651
653
  data: GanttTask[];
652
- options: GanttOptions;
653
- theme: "light" | "dark";
654
- title: string;
655
654
  showToolbar: boolean;
655
+ title: string;
656
656
  preset: GanttPreset;
657
657
  showFullscreenButton: boolean;
658
658
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -73,12 +73,12 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
73
73
  onOverflowClick?: ((hiddenItems: AvatarItem[]) => any) | undefined;
74
74
  }>, {
75
75
  size: number;
76
- max: number;
77
76
  overlap: number;
77
+ clickable: boolean;
78
+ max: number;
78
79
  shape: "circle" | "square";
79
80
  showStatus: boolean;
80
81
  showTooltip: boolean;
81
- clickable: boolean;
82
82
  overflowClickable: boolean;
83
83
  direction: "ltr" | "rtl";
84
84
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -20,17 +20,17 @@ declare const __VLS_export: vue.DefineComponent<Props, {}, {}, {}, {}, vue.Compo
20
20
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
21
21
  onError?: ((error: Error) => any) | undefined;
22
22
  }>, {
23
- format: "CODE128" | "CODE39" | "EAN13" | "EAN8" | "UPC" | "ITF14" | "MSI" | "pharmacode";
23
+ label: string;
24
24
  width: number;
25
25
  height: number;
26
- showText: boolean;
27
26
  fontSize: number;
28
- textPosition: "bottom" | "top";
29
- lineColor: string;
27
+ format: "CODE128" | "CODE39" | "EAN13" | "EAN8" | "UPC" | "ITF14" | "MSI" | "pharmacode";
30
28
  background: string;
31
29
  showBorder: boolean;
32
- label: string;
33
30
  showLabel: boolean;
31
+ showText: boolean;
32
+ textPosition: "bottom" | "top";
33
+ lineColor: string;
34
34
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
35
35
  declare const _default: typeof __VLS_export;
36
36
  //#endregion
@@ -23,19 +23,19 @@ declare const __VLS_export: vue.DefineComponent<CaptchaProps, {
23
23
  token: string;
24
24
  timestamp: number;
25
25
  }) => any;
26
- reset: () => any;
27
26
  fail: (error: string) => any;
27
+ reset: () => any;
28
28
  }, string, vue.PublicProps, Readonly<CaptchaProps> & Readonly<{
29
29
  onChange?: ((valid: boolean) => any) | undefined;
30
30
  onSuccess?: ((data: {
31
31
  token: string;
32
32
  timestamp: number;
33
33
  }) => any) | undefined;
34
- onReset?: (() => any) | undefined;
35
34
  onFail?: ((error: string) => any) | undefined;
35
+ onReset?: (() => any) | undefined;
36
36
  }>, {
37
- theme: "light" | "dark";
38
37
  disabled: boolean;
38
+ theme: "light" | "dark";
39
39
  triggerText: string;
40
40
  images: string[];
41
41
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -104,8 +104,8 @@ declare const __VLS_base: vue.DefineComponent<ChatProps, {
104
104
  "onEmoji-click"?: (() => any) | undefined;
105
105
  onResend?: ((msg: ChatMessage) => any) | undefined;
106
106
  }>, {
107
- title: string;
108
107
  placeholder: string;
108
+ title: string;
109
109
  messages: ChatMessage[];
110
110
  showContacts: boolean;
111
111
  showTimestamp: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"menuAdapter.js","names":[],"sources":["../src/components/_shared/menuAdapter.ts"],"sourcesContent":["/**\n * 菜单适配器 — 将路由数据转换为 NMenu 的 MenuOption[]\n *\n * 设计理念:\n * - 开箱即用:`createMenuOptions(routes)` 零配置即可生成菜单\n * - 完全可控:通过 `MenuAdapterConfig` 定制每一步转换逻辑\n * - i18n 解耦:`labelFormatter` 回调注入翻译函数,不绑定任何 i18n 方案\n *\n * @example 基础用法\n * ```ts\n * import { createMenuOptions } from '@robot-admin/naive-ui-components'\n *\n * const menuOptions = createMenuOptions(routes)\n * ```\n *\n * @example 带 i18n + 过滤\n * ```ts\n * const menuOptions = createMenuOptions(routes, {\n * labelFormatter: t, // vue-i18n 的 t 函数\n * filter: route => !route.meta?.hidden,\n * })\n * ```\n *\n * @example 自定义 key 取值\n * ```ts\n * const menuOptions = createMenuOptions(routes, {\n * getKey: route => route.name || route.path,\n * })\n * ```\n */\n\nimport { h, type VNode } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport type { MenuOption } from 'naive-ui/es'\nimport type { RouteItem } from './types'\n\n/**\n * 菜单适配器配置\n */\nexport interface MenuAdapterConfig {\n /**\n * 标签文本格式化函数(用于 i18n)\n * 默认:原样返回 title\n */\n labelFormatter?: (title: string) => string\n\n /**\n * 获取菜单项的唯一 key\n * 默认:`normalizePath(route.path)`\n */\n getKey?: (route: RouteItem) => string\n\n /**\n * 获取显示文本\n * 默认:`route.meta?.title || route.name || ''`\n */\n getLabel?: (route: RouteItem) => string\n\n /**\n * 路由过滤器 — return false 排除该项\n * 默认:排除 `meta.hidden === true`\n */\n filter?: (route: RouteItem) => boolean\n\n /**\n * 自定义图标渲染\n * 默认:字符串 → Iconify Icon;函数 → 直接调用\n */\n renderIcon?: (\n icon: string | (() => VNode) | undefined\n ) => (() => VNode) | undefined\n\n /**\n * 是否递归处理 children\n * 默认:true\n */\n recursive?: boolean\n}\n\n// ====== 内置默认值 ======\n\nconst normalizePath = (path: string): string =>\n path.startsWith('/') ? path : `/${path}`\n\nconst defaultGetKey = (route: RouteItem): string =>\n route.path ? normalizePath(route.path) : ''\n\nconst defaultGetLabel = (route: RouteItem): string =>\n route.meta?.title || route.name || ''\n\nconst defaultFilter = (route: RouteItem): boolean => !route.meta?.hidden\n\nconst defaultRenderIcon = (\n icon: string | (() => VNode) | undefined\n): (() => VNode) | undefined => {\n if (!icon) return undefined\n if (typeof icon === 'string') {\n return () =>\n h(\n 'span',\n {\n class: 'n-icon',\n style: 'display: inline-flex; align-items: center;',\n },\n [h(Icon, { icon })]\n )\n }\n if (typeof icon === 'function') return icon\n return undefined\n}\n\n/**\n * 将路由数据转换为 NMenu 的 MenuOption[]\n *\n * 支持的输入格式:\n * 1. **Vue Router RouteRecordRaw** — 直接传 `router.getRoutes()` 或手写路由表\n * 2. **后端 JSON 路由表** — `{ path, meta: { title, icon }, children }`\n * 3. **自定义格式** — 通过 config 完全自定义 key/label/icon 的取值逻辑\n *\n * @param routes 路由数据数组\n * @param config 适配器配置\n * @returns NMenu 可直接使用的 MenuOption[]\n */\nexport function createMenuOptions(\n routes: RouteItem[],\n config: MenuAdapterConfig = {}\n): MenuOption[] {\n const {\n labelFormatter = (s: string) => s,\n getKey = defaultGetKey,\n getLabel = defaultGetLabel,\n filter = defaultFilter,\n renderIcon = defaultRenderIcon,\n recursive = true,\n } = config\n\n const convert = (items: RouteItem[]): MenuOption[] => {\n return items.filter(filter).map(item => {\n const icon = item.meta?.icon || (item as any).icon\n const children =\n recursive && item.children?.length ? convert(item.children) : undefined\n\n return {\n key: getKey(item),\n label: labelFormatter(getLabel(item)),\n disabled: item.disabled || false,\n icon: renderIcon(icon),\n ...(item.type && { type: item.type }),\n ...(children?.length && { children }),\n }\n }) as MenuOption[]\n }\n\n return convert(routes)\n}\n\n/**\n * 将路由树扁平化为一维数组(常用于搜索、快捷导航)\n *\n * @param routes 路由数据数组\n * @param filter 过滤器(默认排除 hidden)\n * @returns 扁平化后的路由数组\n */\nexport function flattenRoutes(\n routes: RouteItem[],\n filter: (route: RouteItem) => boolean = defaultFilter\n): RouteItem[] {\n const result: RouteItem[] = []\n const walk = (items: RouteItem[]) => {\n for (const item of items) {\n if (filter(item)) {\n result.push(item)\n }\n if (item.children?.length) {\n walk(item.children)\n }\n }\n }\n walk(routes)\n return result\n}\n"],"mappings":"4DAiFA,MAAM,EAAiB,GACrB,EAAK,WAAW,IAAI,CAAG,EAAO,IAAI,IAE9B,EAAiB,GACrB,EAAM,KAAO,EAAc,EAAM,KAAK,CAAG,GAErC,EAAmB,GACvB,EAAM,MAAM,OAAS,EAAM,MAAQ,GAE/B,EAAiB,GAA8B,CAAC,EAAM,MAAM,OAE5D,EACJ,GAC8B,CACzB,KACL,IAAI,OAAO,GAAS,SAClB,UACE,EACE,OACA,CACE,MAAO,SACP,MAAO,6CACR,CACD,CAAC,EAAE,EAAM,CAAE,OAAM,CAAC,CAAC,CACpB,CAEL,GAAI,OAAO,GAAS,WAAY,OAAO,IAgBzC,SAAgB,EACd,EACA,EAA4B,EAAE,CAChB,CACd,GAAM,CACJ,iBAAkB,GAAc,EAChC,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,YAAY,IACV,EAEE,EAAW,GACR,EAAM,OAAO,EAAO,CAAC,IAAI,GAAQ,CACtC,IAAM,EAAO,EAAK,MAAM,MAAS,EAAa,KACxC,EACJ,GAAa,EAAK,UAAU,OAAS,EAAQ,EAAK,SAAS,CAAG,IAAA,GAEhE,MAAO,CACL,IAAK,EAAO,EAAK,CACjB,MAAO,EAAe,EAAS,EAAK,CAAC,CACrC,SAAU,EAAK,UAAY,GAC3B,KAAM,EAAW,EAAK,CACtB,GAAI,EAAK,MAAQ,CAAE,KAAM,EAAK,KAAM,CACpC,GAAI,GAAU,QAAU,CAAE,WAAU,CACrC,EACD,CAGJ,OAAO,EAAQ,EAAO,CAUxB,SAAgB,EACd,EACA,EAAwC,EAC3B,CACb,IAAM,EAAsB,EAAE,CACxB,EAAQ,GAAuB,CACnC,IAAK,IAAM,KAAQ,EACb,EAAO,EAAK,EACd,EAAO,KAAK,EAAK,CAEf,EAAK,UAAU,QACjB,EAAK,EAAK,SAAS,EAKzB,OADA,EAAK,EAAO,CACL"}
1
+ {"version":3,"file":"menuAdapter.js","names":[],"sources":["../src/components/_shared/menuAdapter.ts"],"sourcesContent":["/**\r\n * 菜单适配器 — 将路由数据转换为 NMenu 的 MenuOption[]\r\n *\r\n * 设计理念:\r\n * - 开箱即用:`createMenuOptions(routes)` 零配置即可生成菜单\r\n * - 完全可控:通过 `MenuAdapterConfig` 定制每一步转换逻辑\r\n * - i18n 解耦:`labelFormatter` 回调注入翻译函数,不绑定任何 i18n 方案\r\n *\r\n * @example 基础用法\r\n * ```ts\r\n * import { createMenuOptions } from '@robot-admin/naive-ui-components'\r\n *\r\n * const menuOptions = createMenuOptions(routes)\r\n * ```\r\n *\r\n * @example 带 i18n + 过滤\r\n * ```ts\r\n * const menuOptions = createMenuOptions(routes, {\r\n * labelFormatter: t, // vue-i18n 的 t 函数\r\n * filter: route => !route.meta?.hidden,\r\n * })\r\n * ```\r\n *\r\n * @example 自定义 key 取值\r\n * ```ts\r\n * const menuOptions = createMenuOptions(routes, {\r\n * getKey: route => route.name || route.path,\r\n * })\r\n * ```\r\n */\r\n\r\nimport { h, type VNode } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport type { MenuOption } from 'naive-ui/es'\r\nimport type { RouteItem } from './types'\r\n\r\n/**\r\n * 菜单适配器配置\r\n */\r\nexport interface MenuAdapterConfig {\r\n /**\r\n * 标签文本格式化函数(用于 i18n)\r\n * 默认:原样返回 title\r\n */\r\n labelFormatter?: (title: string) => string\r\n\r\n /**\r\n * 获取菜单项的唯一 key\r\n * 默认:`normalizePath(route.path)`\r\n */\r\n getKey?: (route: RouteItem) => string\r\n\r\n /**\r\n * 获取显示文本\r\n * 默认:`route.meta?.title || route.name || ''`\r\n */\r\n getLabel?: (route: RouteItem) => string\r\n\r\n /**\r\n * 路由过滤器 — return false 排除该项\r\n * 默认:排除 `meta.hidden === true`\r\n */\r\n filter?: (route: RouteItem) => boolean\r\n\r\n /**\r\n * 自定义图标渲染\r\n * 默认:字符串 → Iconify Icon;函数 → 直接调用\r\n */\r\n renderIcon?: (\r\n icon: string | (() => VNode) | undefined\r\n ) => (() => VNode) | undefined\r\n\r\n /**\r\n * 是否递归处理 children\r\n * 默认:true\r\n */\r\n recursive?: boolean\r\n}\r\n\r\n// ====== 内置默认值 ======\r\n\r\nconst normalizePath = (path: string): string =>\r\n path.startsWith('/') ? path : `/${path}`\r\n\r\nconst defaultGetKey = (route: RouteItem): string =>\r\n route.path ? normalizePath(route.path) : ''\r\n\r\nconst defaultGetLabel = (route: RouteItem): string =>\r\n route.meta?.title || route.name || ''\r\n\r\nconst defaultFilter = (route: RouteItem): boolean => !route.meta?.hidden\r\n\r\nconst defaultRenderIcon = (\r\n icon: string | (() => VNode) | undefined\r\n): (() => VNode) | undefined => {\r\n if (!icon) return undefined\r\n if (typeof icon === 'string') {\r\n return () =>\r\n h(\r\n 'span',\r\n {\r\n class: 'n-icon',\r\n style: 'display: inline-flex; align-items: center;',\r\n },\r\n [h(Icon, { icon })]\r\n )\r\n }\r\n if (typeof icon === 'function') return icon\r\n return undefined\r\n}\r\n\r\n/**\r\n * 将路由数据转换为 NMenu 的 MenuOption[]\r\n *\r\n * 支持的输入格式:\r\n * 1. **Vue Router RouteRecordRaw** — 直接传 `router.getRoutes()` 或手写路由表\r\n * 2. **后端 JSON 路由表** — `{ path, meta: { title, icon }, children }`\r\n * 3. **自定义格式** — 通过 config 完全自定义 key/label/icon 的取值逻辑\r\n *\r\n * @param routes 路由数据数组\r\n * @param config 适配器配置\r\n * @returns NMenu 可直接使用的 MenuOption[]\r\n */\r\nexport function createMenuOptions(\r\n routes: RouteItem[],\r\n config: MenuAdapterConfig = {}\r\n): MenuOption[] {\r\n const {\r\n labelFormatter = (s: string) => s,\r\n getKey = defaultGetKey,\r\n getLabel = defaultGetLabel,\r\n filter = defaultFilter,\r\n renderIcon = defaultRenderIcon,\r\n recursive = true,\r\n } = config\r\n\r\n const convert = (items: RouteItem[]): MenuOption[] => {\r\n return items.filter(filter).map(item => {\r\n const icon = item.meta?.icon || (item as any).icon\r\n const children =\r\n recursive && item.children?.length ? convert(item.children) : undefined\r\n\r\n return {\r\n key: getKey(item),\r\n label: labelFormatter(getLabel(item)),\r\n disabled: item.disabled || false,\r\n icon: renderIcon(icon),\r\n ...(item.type && { type: item.type }),\r\n ...(children?.length && { children }),\r\n }\r\n }) as MenuOption[]\r\n }\r\n\r\n return convert(routes)\r\n}\r\n\r\n/**\r\n * 将路由树扁平化为一维数组(常用于搜索、快捷导航)\r\n *\r\n * @param routes 路由数据数组\r\n * @param filter 过滤器(默认排除 hidden)\r\n * @returns 扁平化后的路由数组\r\n */\r\nexport function flattenRoutes(\r\n routes: RouteItem[],\r\n filter: (route: RouteItem) => boolean = defaultFilter\r\n): RouteItem[] {\r\n const result: RouteItem[] = []\r\n const walk = (items: RouteItem[]) => {\r\n for (const item of items) {\r\n if (filter(item)) {\r\n result.push(item)\r\n }\r\n if (item.children?.length) {\r\n walk(item.children)\r\n }\r\n }\r\n }\r\n walk(routes)\r\n return result\r\n}\r\n"],"mappings":"4DAiFA,MAAM,EAAiB,GACrB,EAAK,WAAW,IAAI,CAAG,EAAO,IAAI,IAE9B,EAAiB,GACrB,EAAM,KAAO,EAAc,EAAM,KAAK,CAAG,GAErC,EAAmB,GACvB,EAAM,MAAM,OAAS,EAAM,MAAQ,GAE/B,EAAiB,GAA8B,CAAC,EAAM,MAAM,OAE5D,EACJ,GAC8B,CACzB,KACL,IAAI,OAAO,GAAS,SAClB,UACE,EACE,OACA,CACE,MAAO,SACP,MAAO,6CACR,CACD,CAAC,EAAE,EAAM,CAAE,OAAM,CAAC,CAAC,CACpB,CAEL,GAAI,OAAO,GAAS,WAAY,OAAO,IAgBzC,SAAgB,EACd,EACA,EAA4B,EAAE,CAChB,CACd,GAAM,CACJ,iBAAkB,GAAc,EAChC,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,YAAY,IACV,EAEE,EAAW,GACR,EAAM,OAAO,EAAO,CAAC,IAAI,GAAQ,CACtC,IAAM,EAAO,EAAK,MAAM,MAAS,EAAa,KACxC,EACJ,GAAa,EAAK,UAAU,OAAS,EAAQ,EAAK,SAAS,CAAG,IAAA,GAEhE,MAAO,CACL,IAAK,EAAO,EAAK,CACjB,MAAO,EAAe,EAAS,EAAK,CAAC,CACrC,SAAU,EAAK,UAAY,GAC3B,KAAM,EAAW,EAAK,CACtB,GAAI,EAAK,MAAQ,CAAE,KAAM,EAAK,KAAM,CACpC,GAAI,GAAU,QAAU,CAAE,WAAU,CACrC,EACD,CAGJ,OAAO,EAAQ,EAAO,CAUxB,SAAgB,EACd,EACA,EAAwC,EAC3B,CACb,IAAM,EAAsB,EAAE,CACxB,EAAQ,GAAuB,CACnC,IAAK,IAAM,KAAQ,EACb,EAAO,EAAK,EACd,EAAO,KAAK,EAAK,CAEf,EAAK,UAAU,QACjB,EAAK,EAAK,SAAS,EAKzB,OADA,EAAK,EAAO,CACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.cjs","names":[],"sources":["../src/resolver.ts"],"sourcesContent":["/**\n * @robot-admin/naive-ui-components Resolver\n * 用于 unplugin-vue-components 的自动导入解析器\n *\n * @example\n * ```ts\n * // vite.config.ts\n * import Components from 'unplugin-vue-components/vite'\n * import { RobotNaiveUiResolver } from '@robot-admin/naive-ui-components/resolver'\n *\n * export default defineConfig({\n * plugins: [\n * Components({\n * resolvers: [RobotNaiveUiResolver()]\n * })\n * ]\n * })\n * ```\n */\n\nconst PKG_NAME = '@robot-admin/naive-ui-components'\n\n/** 组件库包含的所有组件名称 */\nexport const componentNames = [\n 'C_ActionBar',\n 'C_AntV',\n 'C_AudioPlayer',\n 'C_AvatarGroup',\n 'C_Barcode',\n 'C_Breadcrumb',\n 'C_Captcha',\n 'C_Cascade',\n 'C_Chat',\n 'C_City',\n 'C_Code',\n 'C_CollapsePanel',\n 'C_ContextMenu',\n 'C_Cron',\n 'C_Date',\n 'C_Draggable',\n 'C_Editor',\n 'C_FilePreview',\n 'C_Form',\n 'C_FormSearch',\n 'C_FormulaEditor',\n 'C_FullCalendar',\n 'C_GlobalSearch',\n 'C_Guide',\n 'C_Icon',\n 'C_ImageCropper',\n 'C_Language',\n 'C_Login',\n 'C_Map',\n 'C_Markdown',\n 'C_Menu',\n 'C_NotificationCenter',\n 'C_Progress',\n 'C_QRCode',\n 'C_Signature',\n 'C_SplitPane',\n 'C_Steps',\n 'C_Table',\n 'C_TagsView',\n 'C_Theme',\n 'C_Time',\n 'C_Timeline',\n 'C_Transfer',\n 'C_Tree',\n 'C_Upload',\n 'C_VideoPlayer',\n 'C_VtableGantt',\n 'C_WaterFall',\n 'C_WorkFlow',\n] as const\n\n/** 组件名称类型 */\nexport type ComponentName = (typeof componentNames)[number]\n\n/** 组件名称集合(快速查找) */\nconst componentSet = new Set<string>(componentNames)\n\nexport interface RobotNaiveUiResolverOptions {\n /**\n * 按需导入:从子路径解析单个组件,减少打包体积\n * - false (默认): `import { C_Form } from '@robot-admin/naive-ui-components'`\n * - true: `import { C_Form } from '@robot-admin/naive-ui-components/C_Form'`\n */\n importOnDemand?: boolean\n /**\n * 按需导入组件样式(仅在 importOnDemand 为 true 时生效)\n * - false (默认): 需手动导入 style.css 全量样式\n * - true: 自动导入对应组件的独立样式 `@robot-admin/naive-ui-components/C_Form/style.css`\n */\n importStyle?: boolean\n}\n\n/**\n * @robot-admin/naive-ui-components 组件自动导入解析器\n *\n * 匹配组件库中所有 C_ 前缀的组件,自动解析导入路径。\n * 类似于 NaiveUiResolver、ElementPlusResolver 等成熟解析器的设计。\n */\nexport function RobotNaiveUiResolver(\n options: RobotNaiveUiResolverOptions = {}\n) {\n const { importOnDemand = false, importStyle = false } = options\n\n return {\n type: 'component' as const,\n resolve: (name: string) => {\n if (componentSet.has(name)) {\n const from = importOnDemand ? `${PKG_NAME}/${name}` : PKG_NAME\n const sideEffects =\n importOnDemand && importStyle\n ? `${PKG_NAME}/${name}/style.css`\n : undefined\n return {\n name,\n from,\n sideEffects,\n }\n }\n },\n }\n}\n"],"mappings":"mEAoBA,MAAM,EAAW,mCAGJ,EAAiB,yhBAkD7B,CAMK,EAAe,IAAI,IAAY,EAAe,CAuBpD,SAAgB,EACd,EAAuC,EAAE,CACzC,CACA,GAAM,CAAE,iBAAiB,GAAO,cAAc,IAAU,EAExD,MAAO,CACL,KAAM,YACN,QAAU,GAAiB,CACzB,GAAI,EAAa,IAAI,EAAK,CAMxB,MAAO,CACL,OACA,KAPW,EAAiB,GAAG,EAAS,GAAG,IAAS,EAQpD,YANA,GAAkB,EACd,GAAG,EAAS,GAAG,EAAK,YACpB,IAAA,GAKL,EAGN"}
1
+ {"version":3,"file":"resolver.cjs","names":[],"sources":["../src/resolver.ts"],"sourcesContent":["/**\r\n * @robot-admin/naive-ui-components Resolver\r\n * 用于 unplugin-vue-components 的自动导入解析器\r\n *\r\n * @example\r\n * ```ts\r\n * // vite.config.ts\r\n * import Components from 'unplugin-vue-components/vite'\r\n * import { RobotNaiveUiResolver } from '@robot-admin/naive-ui-components/resolver'\r\n *\r\n * export default defineConfig({\r\n * plugins: [\r\n * Components({\r\n * resolvers: [RobotNaiveUiResolver()]\r\n * })\r\n * ]\r\n * })\r\n * ```\r\n */\r\n\r\nconst PKG_NAME = '@robot-admin/naive-ui-components'\r\n\r\n/** 组件库包含的所有组件名称 */\r\nexport const componentNames = [\r\n 'C_ActionBar',\r\n 'C_AntV',\r\n 'C_AudioPlayer',\r\n 'C_AvatarGroup',\r\n 'C_Barcode',\r\n 'C_Breadcrumb',\r\n 'C_Captcha',\r\n 'C_Cascade',\r\n 'C_Chat',\r\n 'C_City',\r\n 'C_Code',\r\n 'C_CollapsePanel',\r\n 'C_ContextMenu',\r\n 'C_Cron',\r\n 'C_Date',\r\n 'C_Draggable',\r\n 'C_Editor',\r\n 'C_FilePreview',\r\n 'C_Form',\r\n 'C_FormSearch',\r\n 'C_FormulaEditor',\r\n 'C_FullCalendar',\r\n 'C_GlobalSearch',\r\n 'C_Guide',\r\n 'C_Icon',\r\n 'C_ImageCropper',\r\n 'C_Language',\r\n 'C_Login',\r\n 'C_Map',\r\n 'C_Markdown',\r\n 'C_Menu',\r\n 'C_NotificationCenter',\r\n 'C_Progress',\r\n 'C_QRCode',\r\n 'C_Signature',\r\n 'C_SplitPane',\r\n 'C_Steps',\r\n 'C_Table',\r\n 'C_TagsView',\r\n 'C_Theme',\r\n 'C_Time',\r\n 'C_Timeline',\r\n 'C_Transfer',\r\n 'C_Tree',\r\n 'C_Upload',\r\n 'C_VideoPlayer',\r\n 'C_VtableGantt',\r\n 'C_WaterFall',\r\n 'C_WorkFlow',\r\n] as const\r\n\r\n/** 组件名称类型 */\r\nexport type ComponentName = (typeof componentNames)[number]\r\n\r\n/** 组件名称集合(快速查找) */\r\nconst componentSet = new Set<string>(componentNames)\r\n\r\nexport interface RobotNaiveUiResolverOptions {\r\n /**\r\n * 按需导入:从子路径解析单个组件,减少打包体积\r\n * - false (默认): `import { C_Form } from '@robot-admin/naive-ui-components'`\r\n * - true: `import { C_Form } from '@robot-admin/naive-ui-components/C_Form'`\r\n */\r\n importOnDemand?: boolean\r\n /**\r\n * 按需导入组件样式(仅在 importOnDemand 为 true 时生效)\r\n * - false (默认): 需手动导入 style.css 全量样式\r\n * - true: 自动导入对应组件的独立样式 `@robot-admin/naive-ui-components/C_Form/style.css`\r\n */\r\n importStyle?: boolean\r\n}\r\n\r\n/**\r\n * @robot-admin/naive-ui-components 组件自动导入解析器\r\n *\r\n * 匹配组件库中所有 C_ 前缀的组件,自动解析导入路径。\r\n * 类似于 NaiveUiResolver、ElementPlusResolver 等成熟解析器的设计。\r\n */\r\nexport function RobotNaiveUiResolver(\r\n options: RobotNaiveUiResolverOptions = {}\r\n) {\r\n const { importOnDemand = false, importStyle = false } = options\r\n\r\n return {\r\n type: 'component' as const,\r\n resolve: (name: string) => {\r\n if (componentSet.has(name)) {\r\n const from = importOnDemand ? `${PKG_NAME}/${name}` : PKG_NAME\r\n const sideEffects =\r\n importOnDemand && importStyle\r\n ? `${PKG_NAME}/${name}/style.css`\r\n : undefined\r\n return {\r\n name,\r\n from,\r\n sideEffects,\r\n }\r\n }\r\n },\r\n }\r\n}\r\n"],"mappings":"mEAoBA,MAAM,EAAW,mCAGJ,EAAiB,yhBAkD7B,CAMK,EAAe,IAAI,IAAY,EAAe,CAuBpD,SAAgB,EACd,EAAuC,EAAE,CACzC,CACA,GAAM,CAAE,iBAAiB,GAAO,cAAc,IAAU,EAExD,MAAO,CACL,KAAM,YACN,QAAU,GAAiB,CACzB,GAAI,EAAa,IAAI,EAAK,CAMxB,MAAO,CACL,OACA,KAPW,EAAiB,GAAG,EAAS,GAAG,IAAS,EAQpD,YANA,GAAkB,EACd,GAAG,EAAS,GAAG,EAAK,YACpB,IAAA,GAKL,EAGN"}