@robot-admin/naive-ui-components 0.9.1 → 0.9.3

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 (327) hide show
  1. package/dist/C_ActionBar-BAcfOfRw.css.map +1 -0
  2. package/dist/C_ActionBar-DG2HW7t5.css.map +1 -0
  3. package/dist/C_ActionBar.css +47 -47
  4. package/dist/C_ActionBar.js.map +1 -1
  5. package/dist/C_ActionBar2.js +1 -1
  6. package/dist/C_ActionBar2.js.map +1 -1
  7. package/dist/{C_AntV-BY8jqqmi.css.map → C_AntV-D_jTK8oZ.css.map} +1 -1
  8. package/dist/{C_AntV-BbkHc-_a.css.map → C_AntV-DanTAq22.css.map} +1 -1
  9. package/dist/C_AntV.css +79 -79
  10. package/dist/C_AntV.js.map +1 -1
  11. package/dist/C_AntV2.js +3 -3
  12. package/dist/C_AntV2.js.map +1 -1
  13. package/dist/{C_AudioPlayer-DKRIGhi7.css.map → C_AudioPlayer-BnYIJXPD.css.map} +1 -1
  14. package/dist/{C_AudioPlayer-DlB6eNsa.css.map → C_AudioPlayer-ldTy9Y34.css.map} +1 -1
  15. package/dist/C_AudioPlayer.css +47 -47
  16. package/dist/C_AudioPlayer.js.map +1 -1
  17. package/dist/C_AudioPlayer2.js +1 -1
  18. package/dist/C_AudioPlayer2.js.map +1 -1
  19. package/dist/{C_AvatarGroup-D02zci-i.css.map → C_AvatarGroup-B9d-GJ9c.css.map} +1 -1
  20. package/dist/{C_AvatarGroup-DatHaUlY.css.map → C_AvatarGroup-SIzxuuZr.css.map} +1 -1
  21. package/dist/C_AvatarGroup.css +21 -21
  22. package/dist/C_AvatarGroup.js.map +1 -1
  23. package/dist/C_AvatarGroup2.js +1 -1
  24. package/dist/C_AvatarGroup2.js.map +1 -1
  25. package/dist/{C_Barcode-DYDRDe2O.css.map → C_Barcode-CAU2mFcx.css.map} +1 -1
  26. package/dist/{C_Barcode-muJdc_O4.css.map → C_Barcode-D2oJaEg3.css.map} +1 -1
  27. package/dist/C_Barcode.css +7 -7
  28. package/dist/C_Barcode.js.map +1 -1
  29. package/dist/C_Barcode2.js +1 -1
  30. package/dist/C_Barcode2.js.map +1 -1
  31. package/dist/C_Breadcrumb.js.map +1 -1
  32. package/dist/C_Breadcrumb2.js +1 -1
  33. package/dist/C_Breadcrumb2.js.map +1 -1
  34. package/dist/{C_Captcha-9_hk6VmY.css.map → C_Captcha-B3yrtG7t.css.map} +1 -1
  35. package/dist/{C_Captcha-MtASlJ0f.css.map → C_Captcha-D4hDdWDu.css.map} +1 -1
  36. package/dist/C_Captcha.css +19 -19
  37. package/dist/C_Captcha.js.map +1 -1
  38. package/dist/C_Captcha2.js +1 -1
  39. package/dist/C_Captcha2.js.map +1 -1
  40. package/dist/C_Cascade-BE7t1OX5.css.map +1 -0
  41. package/dist/C_Cascade-CpDiau1y.css.map +1 -0
  42. package/dist/C_Cascade.css +3 -3
  43. package/dist/C_Cascade.js.map +1 -1
  44. package/dist/C_Cascade2.js +1 -1
  45. package/dist/C_Cascade2.js.map +1 -1
  46. package/dist/{C_Chat-Csjz_BFw.css.map → C_Chat-CF1SU7mc.css.map} +1 -1
  47. package/dist/{C_Chat-DO1ZBA_0.css.map → C_Chat-DeUv6uuI.css.map} +1 -1
  48. package/dist/C_Chat.css +65 -65
  49. package/dist/C_Chat.js.map +1 -1
  50. package/dist/C_Chat2.js +1 -1
  51. package/dist/C_Chat2.js.map +1 -1
  52. package/dist/{C_City-Bam08Qv3.css.map → C_City-DdkX6u64.css.map} +1 -1
  53. package/dist/{C_City-Bb3W-KaN.css.map → C_City-iP-dIvui.css.map} +1 -1
  54. package/dist/C_City.css +29 -29
  55. package/dist/C_City.js.map +1 -1
  56. package/dist/C_City2.js +1 -1
  57. package/dist/C_City2.js.map +1 -1
  58. package/dist/C_Code-BWmJMNS7.css.map +1 -0
  59. package/dist/C_Code-k14vjgVl.css.map +1 -0
  60. package/dist/C_Code.css +3 -3
  61. package/dist/C_Code.js.map +1 -1
  62. package/dist/C_Code2.js +1 -1
  63. package/dist/C_Code2.js.map +1 -1
  64. package/dist/{C_CollapsePanel-CWkFCqNQ.css.map → C_CollapsePanel-BSKcWSmY.css.map} +1 -1
  65. package/dist/{C_CollapsePanel-pcVJA_4z.css.map → C_CollapsePanel-DRvRq8tB.css.map} +1 -1
  66. package/dist/C_CollapsePanel.css +35 -35
  67. package/dist/C_CollapsePanel.js.map +1 -1
  68. package/dist/C_CollapsePanel2.js +1 -1
  69. package/dist/C_CollapsePanel2.js.map +1 -1
  70. package/dist/{C_ContextMenu-B3Cgz_wJ.css.map → C_ContextMenu-Bn_uhJSo.css.map} +1 -1
  71. package/dist/{C_ContextMenu-u1LixF3_.css.map → C_ContextMenu-C9iuxG2n.css.map} +1 -1
  72. package/dist/C_ContextMenu.css +17 -17
  73. package/dist/C_ContextMenu.js.map +1 -1
  74. package/dist/C_ContextMenu2.js +1 -1
  75. package/dist/C_ContextMenu2.js.map +1 -1
  76. package/dist/{C_Cron-Civir5-I.css.map → C_Cron-BIQ2By9v.css.map} +1 -1
  77. package/dist/{C_Cron-iw3qpMsy.css.map → C_Cron-BNSAGD6A.css.map} +1 -1
  78. package/dist/C_Cron.css +57 -57
  79. package/dist/C_Cron.js.map +1 -1
  80. package/dist/C_Cron2.js +1 -1
  81. package/dist/C_Cron2.js.map +1 -1
  82. package/dist/C_Date.js.map +1 -1
  83. package/dist/C_Date2.js +1 -1
  84. package/dist/C_Date2.js.map +1 -1
  85. package/dist/{C_Draggable-BCjIvIwT.css.map → C_Draggable-BDAbk4s5.css.map} +1 -1
  86. package/dist/{C_Draggable-DwkSlCOS.css.map → C_Draggable-UhfDLXop.css.map} +1 -1
  87. package/dist/C_Draggable.css +46 -46
  88. package/dist/C_Draggable.js.map +1 -1
  89. package/dist/C_Draggable2.js +1 -1
  90. package/dist/C_Draggable2.js.map +1 -1
  91. package/dist/{C_Editor-BfjjYQ9B.css.map → C_Editor-CZOaChru.css.map} +1 -1
  92. package/dist/{C_Editor-Do2StvoJ.css.map → C_Editor-kJAQq5z6.css.map} +1 -1
  93. package/dist/C_Editor.css +14 -14
  94. package/dist/C_Editor.js.map +1 -1
  95. package/dist/C_Editor2.js +1 -1
  96. package/dist/C_Editor2.js.map +1 -1
  97. package/dist/{C_FilePreview-BhcbiXsV.css.map → C_FilePreview-Bs_omgJS.css.map} +1 -1
  98. package/dist/{C_FilePreview-DJudcIbW.css.map → C_FilePreview-DbwoyF2j.css.map} +1 -1
  99. package/dist/C_FilePreview.css +91 -91
  100. package/dist/C_FilePreview.js.map +1 -1
  101. package/dist/C_FilePreview2.js +1 -1
  102. package/dist/C_FilePreview2.js.map +1 -1
  103. package/dist/{C_Form-BtcAPIRi.css.map → C_Form-SCq-DZaZ.css.map} +1 -1
  104. package/dist/{C_Form-D_gwQ7hC.css.map → C_Form-mcd1nKvF.css.map} +1 -1
  105. package/dist/C_Form.css +223 -223
  106. package/dist/C_Form.js.map +1 -1
  107. package/dist/C_Form2.js +1 -1
  108. package/dist/C_Form2.js.map +1 -1
  109. package/dist/{C_FormSearch-Bi4XYjjk.css.map → C_FormSearch-C3F8peAY.css.map} +1 -1
  110. package/dist/{C_FormSearch-DUGOoX0u.css.map → C_FormSearch-qW56bJPo.css.map} +1 -1
  111. package/dist/C_FormSearch.css +45 -45
  112. package/dist/C_FormSearch.js.map +1 -1
  113. package/dist/C_FormSearch2.js +1 -1
  114. package/dist/C_FormSearch2.js.map +1 -1
  115. package/dist/{C_FormulaEditor-CJk3SSUJ.css.map → C_FormulaEditor-ChOvDbsZ.css.map} +1 -1
  116. package/dist/{C_FormulaEditor-Cy7mjfVO.css.map → C_FormulaEditor-mfiIUDY4.css.map} +1 -1
  117. package/dist/C_FormulaEditor.css +78 -78
  118. package/dist/C_FormulaEditor.js.map +1 -1
  119. package/dist/C_FormulaEditor2.js +1 -1
  120. package/dist/C_FormulaEditor2.js.map +1 -1
  121. package/dist/C_FullCalendar-C2nsqrgS.css.map +1 -0
  122. package/dist/C_FullCalendar-DdFtXVhy.css.map +1 -0
  123. package/dist/C_FullCalendar.css +2 -2
  124. package/dist/C_FullCalendar.js.map +1 -1
  125. package/dist/C_FullCalendar2.js +1 -1
  126. package/dist/C_FullCalendar2.js.map +1 -1
  127. package/dist/{C_GlobalSearch-B6wK3m3k.css.map → C_GlobalSearch-Dq4Wo01K.css.map} +1 -1
  128. package/dist/{C_GlobalSearch-DoPjldFm.css.map → C_GlobalSearch-RB7J43gu.css.map} +1 -1
  129. package/dist/C_GlobalSearch.css +112 -112
  130. package/dist/C_GlobalSearch.js.map +1 -1
  131. package/dist/C_GlobalSearch2.js +1 -1
  132. package/dist/C_GlobalSearch2.js.map +1 -1
  133. package/dist/C_Guide.js.map +1 -1
  134. package/dist/C_Guide2.js +1 -1
  135. package/dist/C_Guide2.js.map +1 -1
  136. package/dist/C_Icon.js.map +1 -1
  137. package/dist/C_Icon2.js.map +1 -1
  138. package/dist/{C_ImageCropper-BqZpkZfU.css.map → C_ImageCropper-CdTX2nxU.css.map} +1 -1
  139. package/dist/{C_ImageCropper-CylwGuzS.css.map → C_ImageCropper-ilOqPklJ.css.map} +1 -1
  140. package/dist/C_ImageCropper.css +23 -23
  141. package/dist/C_ImageCropper.js.map +1 -1
  142. package/dist/C_ImageCropper2.js +1 -1
  143. package/dist/C_ImageCropper2.js.map +1 -1
  144. package/dist/C_Language.js.map +1 -1
  145. package/dist/C_Language2.js +1 -1
  146. package/dist/C_Language2.js.map +1 -1
  147. package/dist/{C_Login-BkdnkBKX.css.map → C_Login-B3qYkLrN.css.map} +1 -1
  148. package/dist/{C_Login-VkMM6OJ2.css.map → C_Login-xMI1_ojE.css.map} +1 -1
  149. package/dist/C_Login.css +72 -72
  150. package/dist/C_Login.js.map +1 -1
  151. package/dist/C_Login2.js +1 -1
  152. package/dist/C_Login2.js.map +1 -1
  153. package/dist/{C_Map-DNnBcY70.css.map → C_Map-CWMMN58_.css.map} +1 -1
  154. package/dist/{C_Map-LEXIx6zM.css.map → C_Map-xSR2H-9o.css.map} +1 -1
  155. package/dist/C_Map.css +4 -4
  156. package/dist/C_Map.js.map +1 -1
  157. package/dist/C_Map2.js +1 -1
  158. package/dist/C_Map2.js.map +1 -1
  159. package/dist/{C_Markdown-DwmI0_0Q.css.map → C_Markdown-C7lTVJ1S.css.map} +1 -1
  160. package/dist/{C_Markdown-k0794RW0.css.map → C_Markdown-CZDm_baQ.css.map} +1 -1
  161. package/dist/C_Markdown.css +33 -33
  162. package/dist/C_Markdown.js.map +1 -1
  163. package/dist/C_Markdown2.js +1 -1
  164. package/dist/C_Markdown2.js.map +1 -1
  165. package/dist/C_Menu.js.map +1 -1
  166. package/dist/C_Menu2.js +1 -1
  167. package/dist/C_Menu2.js.map +1 -1
  168. package/dist/{C_NotificationCenter-DT6fQ79O.css.map → C_NotificationCenter-D7GGGWg7.css.map} +1 -1
  169. package/dist/{C_NotificationCenter-DbgBiyqB.css.map → C_NotificationCenter-SSmeHA45.css.map} +1 -1
  170. package/dist/C_NotificationCenter.css +89 -89
  171. package/dist/C_NotificationCenter.js.map +1 -1
  172. package/dist/C_NotificationCenter2.js +1 -1
  173. package/dist/C_NotificationCenter2.js.map +1 -1
  174. package/dist/C_OrgChart.js.map +1 -1
  175. package/dist/C_OrgChart2.js.map +1 -1
  176. package/dist/C_Progress.js.map +1 -1
  177. package/dist/C_Progress2.js +1 -1
  178. package/dist/C_Progress2.js.map +1 -1
  179. package/dist/{C_QRCode-CFNTda_1.css.map → C_QRCode-B_1lHUdx.css.map} +1 -1
  180. package/dist/{C_QRCode-CmWr9lK-.css.map → C_QRCode-CuQRYu0s.css.map} +1 -1
  181. package/dist/C_QRCode.css +9 -9
  182. package/dist/C_QRCode.js.map +1 -1
  183. package/dist/C_QRCode2.js +1 -1
  184. package/dist/C_QRCode2.js.map +1 -1
  185. package/dist/{C_Signature-BDx4ctsE.css.map → C_Signature-Bp-RBpAl.css.map} +1 -1
  186. package/dist/{C_Signature-Bz_uNbwv.css.map → C_Signature-Cb2VW1ok.css.map} +1 -1
  187. package/dist/C_Signature.css +15 -15
  188. package/dist/C_Signature.js.map +1 -1
  189. package/dist/C_Signature2.js +1 -1
  190. package/dist/C_Signature2.js.map +1 -1
  191. package/dist/C_Skeleton.js.map +1 -1
  192. package/dist/C_Skeleton2.js.map +1 -1
  193. package/dist/{C_SplitPane-BOwr1C7K.css.map → C_SplitPane-CgGWYsRE.css.map} +1 -1
  194. package/dist/{C_SplitPane-N-a_D-7F.css.map → C_SplitPane-DGf6WEeR.css.map} +1 -1
  195. package/dist/C_SplitPane.css +31 -31
  196. package/dist/C_SplitPane.js.map +1 -1
  197. package/dist/C_SplitPane2.js +1 -1
  198. package/dist/C_SplitPane2.js.map +1 -1
  199. package/dist/C_Steps-Buyg7Axn.css.map +1 -0
  200. package/dist/C_Steps-DNY91VbQ.css.map +1 -0
  201. package/dist/C_Steps.css +38 -38
  202. package/dist/C_Steps.js.map +1 -1
  203. package/dist/C_Steps2.js +1 -1
  204. package/dist/C_Steps2.js.map +1 -1
  205. package/dist/{C_Table-BcM5LqAM.css.map → C_Table--kbQaaBv.css.map} +1 -1
  206. package/dist/{C_Table-HATVoq1F.css.map → C_Table-D631kdXC.css.map} +1 -1
  207. package/dist/C_Table.css +104 -104
  208. package/dist/C_Table.js.map +1 -1
  209. package/dist/C_Table2.js +2 -2
  210. package/dist/C_Table2.js.map +1 -1
  211. package/dist/{C_TagsView-DX3LecK1.css.map → C_TagsView-COjGNM9h.css.map} +1 -1
  212. package/dist/{C_TagsView-DqOTa8bL.css.map → C_TagsView-zUDj9S06.css.map} +1 -1
  213. package/dist/C_TagsView.css +36 -36
  214. package/dist/C_TagsView.js.map +1 -1
  215. package/dist/C_TagsView2.js +1 -1
  216. package/dist/C_TagsView2.js.map +1 -1
  217. package/dist/C_Theme.js.map +1 -1
  218. package/dist/C_Theme2.js +1 -1
  219. package/dist/C_Theme2.js.map +1 -1
  220. package/dist/C_Time-BQ9PGy8B.css.map +1 -0
  221. package/dist/C_Time-CO73krC6.css.map +1 -0
  222. package/dist/C_Time.css +5 -5
  223. package/dist/C_Time.js.map +1 -1
  224. package/dist/C_Time2.js +1 -1
  225. package/dist/C_Time2.js.map +1 -1
  226. package/dist/{C_Timeline-BKkimrZx.css.map → C_Timeline-4rk0Dzgn.css.map} +1 -1
  227. package/dist/{C_Timeline-DTuSCX6p.css.map → C_Timeline-DdESmqwL.css.map} +1 -1
  228. package/dist/C_Timeline.css +45 -45
  229. package/dist/C_Timeline.js.map +1 -1
  230. package/dist/C_Timeline2.js +1 -1
  231. package/dist/C_Timeline2.js.map +1 -1
  232. package/dist/{C_Transfer-BOB6OBqS.css.map → C_Transfer-B-vjvhjI.css.map} +1 -1
  233. package/dist/{C_Transfer-Dpq7ezWC.css.map → C_Transfer-EzdHzZNv.css.map} +1 -1
  234. package/dist/C_Transfer.css +31 -31
  235. package/dist/C_Transfer.js.map +1 -1
  236. package/dist/C_Transfer2.js +1 -1
  237. package/dist/C_Transfer2.js.map +1 -1
  238. package/dist/{C_Tree-D98nX9qT.css.map → C_Tree-CsXgGfhn.css.map} +1 -1
  239. package/dist/{C_Tree-ulfm7b-P.css.map → C_Tree-P7eRpnOa.css.map} +1 -1
  240. package/dist/C_Tree.css +33 -33
  241. package/dist/C_Tree.js.map +1 -1
  242. package/dist/C_Tree2.js +1 -1
  243. package/dist/C_Tree2.js.map +1 -1
  244. package/dist/{C_Upload-BR9fg5r4.css.map → C_Upload-CHjiVVh7.css.map} +1 -1
  245. package/dist/{C_Upload-CPqf74Ea.css.map → C_Upload-DE3OLsZD.css.map} +1 -1
  246. package/dist/C_Upload.css +50 -50
  247. package/dist/C_Upload.js.map +1 -1
  248. package/dist/C_Upload2.js +2 -2
  249. package/dist/C_Upload2.js.map +1 -1
  250. package/dist/{C_VideoPlayer-4J96tKfK.css.map → C_VideoPlayer-CnaNOFtW.css.map} +1 -1
  251. package/dist/{C_VideoPlayer-D35seHkm.css.map → C_VideoPlayer-cnP88zNV.css.map} +1 -1
  252. package/dist/C_VideoPlayer.css +68 -68
  253. package/dist/C_VideoPlayer.js.map +1 -1
  254. package/dist/C_VideoPlayer2.js +3 -3
  255. package/dist/C_VideoPlayer2.js.map +1 -1
  256. package/dist/{C_VtableGantt-C2lxFmWg.css.map → C_VtableGantt-CZlJgvpC.css.map} +1 -1
  257. package/dist/{C_VtableGantt-Dwnkw_WL.css.map → C_VtableGantt-DKfQkql0.css.map} +1 -1
  258. package/dist/C_VtableGantt.css +15 -15
  259. package/dist/C_VtableGantt.js.map +1 -1
  260. package/dist/C_VtableGantt2.js +1 -1
  261. package/dist/C_VtableGantt2.js.map +1 -1
  262. package/dist/{C_WaterFall-C4HDqf-a.css.map → C_WaterFall-BJ_39ext.css.map} +1 -1
  263. package/dist/{C_WaterFall-HWB-gPON.css.map → C_WaterFall-cYc1vntE.css.map} +1 -1
  264. package/dist/C_WaterFall.css +16 -16
  265. package/dist/C_WaterFall.js.map +1 -1
  266. package/dist/C_WaterFall2.js +1 -1
  267. package/dist/C_WaterFall2.js.map +1 -1
  268. package/dist/{C_WorkFlow-2hJfvvTK.css.map → C_WorkFlow-BFzRGGhJ.css.map} +1 -1
  269. package/dist/{C_WorkFlow-DHoNjl8-.css.map → C_WorkFlow-DSyCOvRp.css.map} +1 -1
  270. package/dist/C_WorkFlow.css +193 -193
  271. package/dist/C_WorkFlow.js.map +1 -1
  272. package/dist/C_WorkFlow2.js +1 -1
  273. package/dist/C_WorkFlow2.js.map +1 -1
  274. package/dist/constants.d.ts +1 -1
  275. package/dist/constants2.d.ts +2 -2
  276. package/dist/constants3.d.ts +1 -1
  277. package/dist/constants4.d.ts +1 -1
  278. package/dist/constants5.d.ts +2 -2
  279. package/dist/data.d.ts +1 -1
  280. package/dist/index.vue.d.ts +2 -2
  281. package/dist/index11.vue.d.ts +2 -2
  282. package/dist/index12.vue.d.ts +1 -1
  283. package/dist/index13.vue.d.ts +2 -2
  284. package/dist/index14.vue.d.ts +3 -3
  285. package/dist/index15.vue.d.ts +6 -6
  286. package/dist/index17.vue.d.ts +1 -1
  287. package/dist/index18.vue.d.ts +2 -2
  288. package/dist/index2.vue.d.ts +6 -6
  289. package/dist/index20.vue.d.ts +1 -1
  290. package/dist/index21.vue.d.ts +2 -2
  291. package/dist/index22.vue.d.ts +2 -2
  292. package/dist/index24.vue.d.ts +1 -1
  293. package/dist/index26.vue.d.ts +3 -3
  294. package/dist/index27.vue.d.ts +1 -1
  295. package/dist/index28.vue.d.ts +2 -2
  296. package/dist/index3.vue.d.ts +2 -2
  297. package/dist/index4.vue.d.ts +2 -2
  298. package/dist/index6.vue.d.ts +3 -3
  299. package/dist/style.css +1991 -1991
  300. package/dist/useCalendarEvents.d.ts +1 -1
  301. package/dist/useCollapsePanel.d.ts +3 -3
  302. package/dist/useCropperCore.d.ts +4 -4
  303. package/dist/useDraggableLayout.d.ts +2 -2
  304. package/dist/useDynamicFormState.d.ts +13 -13
  305. package/dist/useEdgeInteraction.d.ts +1 -1
  306. package/dist/useInfiniteScroll.d.ts +3 -3
  307. package/dist/useModalEdit.d.ts +3 -3
  308. package/dist/useQRCode.d.ts +3 -3
  309. package/dist/useSignatureHistory.d.ts +1 -1
  310. package/dist/useSplitResize.d.ts +5 -5
  311. package/dist/useTimeSelection.d.ts +2 -2
  312. package/dist/useTreeOperations.d.ts +4 -4
  313. package/dist/useWorkflowValidation.d.ts +4 -4
  314. package/package.json +4 -7
  315. package/dist/C_ActionBar-DYG0Yf3A.css.map +0 -1
  316. package/dist/C_ActionBar-MAjRhqcI.css.map +0 -1
  317. package/dist/C_Cascade-Dq0S5Jkm.css.map +0 -1
  318. package/dist/C_Cascade-IUUHIh7r.css.map +0 -1
  319. package/dist/C_Code-BFi5xxnM.css.map +0 -1
  320. package/dist/C_Code-CZ7yfnri.css.map +0 -1
  321. package/dist/C_FullCalendar-BQA0OjGB.css.map +0 -1
  322. package/dist/C_FullCalendar-ChJUosAi.css.map +0 -1
  323. package/dist/C_Steps-Bk1krgiR.css.map +0 -1
  324. package/dist/C_Steps-Dn2CMpy1.css.map +0 -1
  325. package/dist/C_Time-BzyQVvTS.css.map +0 -1
  326. package/dist/C_Time-DmpKLQHc.css.map +0 -1
  327. package/dist/themes/glass-morphism.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"C_ContextMenu.js","names":[],"sources":["../src/components/C_ContextMenu/types.ts","../src/components/C_ContextMenu/index.vue"],"sourcesContent":["/**\n * @Description: 右键菜单组件类型定义\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n */\n\n/** 菜单项 */\nexport interface ContextMenuItem {\n /** 唯一标识 */\n key: string\n /** 菜单文字 */\n label: string\n /** 图标(Iconify 图标名) */\n icon?: string\n /** 快捷键标注文字(仅展示,不绑定) */\n shortcut?: string\n /** 是否禁用 */\n disabled?: boolean\n /** 是否隐藏 */\n hidden?: boolean\n /** 分割线(此项渲染为分割线,label 被忽略) */\n divider?: boolean\n /** 子菜单(支持无限嵌套) */\n children?: ContextMenuItem[]\n /** 自定义样式类 */\n className?: string\n /** 危险操作(红色高亮) */\n danger?: boolean\n}\n\n/** 组件 Props */\nexport interface ContextMenuProps {\n /** 菜单项列表 */\n items: ContextMenuItem[]\n /** 菜单最小宽度 */\n minWidth?: number\n /** 菜单最大宽度 */\n maxWidth?: number\n /** 子菜单展开方向 */\n subMenuPlacement?: 'right' | 'left'\n /** 点击菜单项后是否自动关闭 */\n autoClose?: boolean\n /** 是否禁用整个菜单 */\n disabled?: boolean\n /** 自定义 z-index */\n zIndex?: number\n}\n\n/** 默认 Props */\nexport const DEFAULT_CONTEXT_MENU_PROPS = {\n minWidth: 180,\n maxWidth: 280,\n subMenuPlacement: 'right' as const,\n autoClose: true,\n disabled: false,\n zIndex: 9999,\n}\n","<!--\n * @Description: 右键菜单组件 — 声明式配置、快捷键标注、嵌套子菜单\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n-->\n<template>\n <!-- 遮罩层 -->\n <Teleport to=\"body\">\n <div\n v-if=\"visible\"\n class=\"c-context-menu-overlay\"\n :style=\"{ zIndex: props.zIndex - 1 }\"\n @click=\"close\"\n @contextmenu.prevent=\"close\"\n />\n\n <!-- 菜单面板 -->\n <div\n v-if=\"visible\"\n ref=\"menuRef\"\n class=\"c-context-menu\"\n :style=\"menuStyle\"\n role=\"menu\"\n tabindex=\"-1\"\n @keydown.escape=\"close\"\n >\n <template\n v-for=\"item in visibleItems\"\n :key=\"item.key\"\n >\n <!-- 分割线 -->\n <div\n v-if=\"item.divider\"\n class=\"c-context-menu__divider\"\n role=\"separator\"\n />\n\n <!-- 普通菜单项 -->\n <div\n v-else\n :class=\"[\n 'c-context-menu__item',\n {\n 'is-disabled': item.disabled,\n 'is-danger': item.danger,\n },\n ]\"\n role=\"menuitem\"\n :aria-disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n @mouseenter=\"handleMouseEnter(item)\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- 图标 -->\n <span\n v-if=\"item.icon\"\n class=\"c-context-menu__icon\"\n >\n <C_Icon :name=\"item.icon\" />\n </span>\n\n <!-- 文本 -->\n <span class=\"c-context-menu__label\">{{ item.label }}</span>\n\n <!-- 快捷键 -->\n <span\n v-if=\"item.shortcut\"\n class=\"c-context-menu__shortcut\"\n >\n {{ item.shortcut }}\n </span>\n\n <!-- 子菜单箭头 -->\n <span\n v-if=\"item.children?.length\"\n class=\"c-context-menu__arrow\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </span>\n\n <!-- 子菜单(递归) -->\n <C_ContextMenu\n v-if=\"item.children?.length && activeSubKey === item.key\"\n :items=\"item.children\"\n :min-width=\"props.minWidth\"\n :max-width=\"props.maxWidth\"\n :sub-menu-placement=\"props.subMenuPlacement\"\n :auto-close=\"props.autoClose\"\n :z-index=\"props.zIndex + 1\"\n class=\"c-context-menu__submenu\"\n :class=\"`is-${props.subMenuPlacement}`\"\n :style=\"{ position: 'absolute' }\"\n @select=\"handleSubSelect\"\n />\n </div>\n </template>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, nextTick, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_CONTEXT_MENU_PROPS,\n type ContextMenuItem,\n type ContextMenuProps,\n } from './types'\n\n defineOptions({ name: 'C_ContextMenu' })\n\n const props = withDefaults(defineProps<ContextMenuProps>(), {\n items: () => [],\n minWidth: DEFAULT_CONTEXT_MENU_PROPS.minWidth,\n maxWidth: DEFAULT_CONTEXT_MENU_PROPS.maxWidth,\n subMenuPlacement: DEFAULT_CONTEXT_MENU_PROPS.subMenuPlacement,\n autoClose: DEFAULT_CONTEXT_MENU_PROPS.autoClose,\n disabled: DEFAULT_CONTEXT_MENU_PROPS.disabled,\n zIndex: DEFAULT_CONTEXT_MENU_PROPS.zIndex,\n })\n\n const emit = defineEmits<{\n (e: 'select', item: ContextMenuItem): void\n (e: 'open', position: { x: number; y: number }): void\n (e: 'close'): void\n }>()\n\n // ===== 状态 =====\n const visible = ref(false)\n const position = ref({ x: 0, y: 0 })\n const menuRef = ref<HTMLElement>()\n const activeSubKey = ref<string | null>(null)\n\n let subTimer: ReturnType<typeof setTimeout> | null = null\n\n // ===== 可见项 =====\n const visibleItems = computed(() => props.items.filter(item => !item.hidden))\n\n // ===== 菜单定位样式 =====\n const menuStyle = computed(() => ({\n left: `${position.value.x}px`,\n top: `${position.value.y}px`,\n minWidth: `${props.minWidth}px`,\n maxWidth: `${props.maxWidth}px`,\n zIndex: props.zIndex,\n }))\n\n // ===== 边界校正 =====\n const adjustPosition = () => {\n nextTick(() => {\n const el = menuRef.value\n if (!el) return\n const rect = el.getBoundingClientRect()\n const { innerWidth, innerHeight } = window\n\n if (rect.right > innerWidth) {\n position.value.x = innerWidth - rect.width - 8\n }\n if (rect.bottom > innerHeight) {\n position.value.y = innerHeight - rect.height - 8\n }\n if (position.value.x < 0) position.value.x = 8\n if (position.value.y < 0) position.value.y = 8\n })\n }\n\n // ===== 打开/关闭 =====\n const open = (x: number, y: number) => {\n if (props.disabled) return\n position.value = { x, y }\n visible.value = true\n emit('open', { x, y })\n adjustPosition()\n\n // 聚焦以支持 Escape 关闭\n nextTick(() => menuRef.value?.focus())\n }\n\n const close = () => {\n visible.value = false\n activeSubKey.value = null\n emit('close')\n }\n\n // ===== 菜单项点击 =====\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.disabled) return\n if (item.children?.length) return // 有子菜单不触发\n\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 子菜单悬停 =====\n const handleMouseEnter = (item: ContextMenuItem) => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n if (item.children?.length && !item.disabled) {\n subTimer = setTimeout(() => {\n activeSubKey.value = item.key\n }, 150)\n } else {\n activeSubKey.value = null\n }\n }\n\n const handleMouseLeave = () => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n subTimer = setTimeout(() => {\n activeSubKey.value = null\n }, 300)\n }\n\n // ===== 子菜单选择向上冒泡 =====\n const handleSubSelect = (item: ContextMenuItem) => {\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 暴露 API =====\n defineExpose({\n /** 在指定坐标打开菜单 */\n open,\n /** 关闭菜单 */\n close,\n /** 当前是否可见 */\n visible: computed(() => visible.value),\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"C_ContextMenu.js","names":[],"sources":["../src/components/C_ContextMenu/types.ts","../src/components/C_ContextMenu/index.vue","../src/components/C_ContextMenu/index.vue"],"sourcesContent":["/**\n * @Description: 右键菜单组件类型定义\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n */\n\n/** 菜单项 */\nexport interface ContextMenuItem {\n /** 唯一标识 */\n key: string\n /** 菜单文字 */\n label: string\n /** 图标(Iconify 图标名) */\n icon?: string\n /** 快捷键标注文字(仅展示,不绑定) */\n shortcut?: string\n /** 是否禁用 */\n disabled?: boolean\n /** 是否隐藏 */\n hidden?: boolean\n /** 分割线(此项渲染为分割线,label 被忽略) */\n divider?: boolean\n /** 子菜单(支持无限嵌套) */\n children?: ContextMenuItem[]\n /** 自定义样式类 */\n className?: string\n /** 危险操作(红色高亮) */\n danger?: boolean\n}\n\n/** 组件 Props */\nexport interface ContextMenuProps {\n /** 菜单项列表 */\n items: ContextMenuItem[]\n /** 菜单最小宽度 */\n minWidth?: number\n /** 菜单最大宽度 */\n maxWidth?: number\n /** 子菜单展开方向 */\n subMenuPlacement?: 'right' | 'left'\n /** 点击菜单项后是否自动关闭 */\n autoClose?: boolean\n /** 是否禁用整个菜单 */\n disabled?: boolean\n /** 自定义 z-index */\n zIndex?: number\n}\n\n/** 默认 Props */\nexport const DEFAULT_CONTEXT_MENU_PROPS = {\n minWidth: 180,\n maxWidth: 280,\n subMenuPlacement: 'right' as const,\n autoClose: true,\n disabled: false,\n zIndex: 9999,\n}\n","<!--\n * @Description: 右键菜单组件 — 声明式配置、快捷键标注、嵌套子菜单\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n-->\n<template>\n <!-- 遮罩层 -->\n <Teleport to=\"body\">\n <div\n v-if=\"visible\"\n class=\"c-context-menu-overlay\"\n :style=\"{ zIndex: props.zIndex - 1 }\"\n @click=\"close\"\n @contextmenu.prevent=\"close\"\n />\n\n <!-- 菜单面板 -->\n <div\n v-if=\"visible\"\n ref=\"menuRef\"\n class=\"c-context-menu\"\n :style=\"menuStyle\"\n role=\"menu\"\n tabindex=\"-1\"\n @keydown.escape=\"close\"\n >\n <template\n v-for=\"item in visibleItems\"\n :key=\"item.key\"\n >\n <!-- 分割线 -->\n <div\n v-if=\"item.divider\"\n class=\"c-context-menu__divider\"\n role=\"separator\"\n />\n\n <!-- 普通菜单项 -->\n <div\n v-else\n :class=\"[\n 'c-context-menu__item',\n {\n 'is-disabled': item.disabled,\n 'is-danger': item.danger,\n },\n ]\"\n role=\"menuitem\"\n :aria-disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n @mouseenter=\"handleMouseEnter(item)\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- 图标 -->\n <span\n v-if=\"item.icon\"\n class=\"c-context-menu__icon\"\n >\n <C_Icon :name=\"item.icon\" />\n </span>\n\n <!-- 文本 -->\n <span class=\"c-context-menu__label\">{{ item.label }}</span>\n\n <!-- 快捷键 -->\n <span\n v-if=\"item.shortcut\"\n class=\"c-context-menu__shortcut\"\n >\n {{ item.shortcut }}\n </span>\n\n <!-- 子菜单箭头 -->\n <span\n v-if=\"item.children?.length\"\n class=\"c-context-menu__arrow\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </span>\n\n <!-- 子菜单(递归) -->\n <C_ContextMenu\n v-if=\"item.children?.length && activeSubKey === item.key\"\n :items=\"item.children\"\n :min-width=\"props.minWidth\"\n :max-width=\"props.maxWidth\"\n :sub-menu-placement=\"props.subMenuPlacement\"\n :auto-close=\"props.autoClose\"\n :z-index=\"props.zIndex + 1\"\n class=\"c-context-menu__submenu\"\n :class=\"`is-${props.subMenuPlacement}`\"\n :style=\"{ position: 'absolute' }\"\n @select=\"handleSubSelect\"\n />\n </div>\n </template>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, nextTick, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_CONTEXT_MENU_PROPS,\n type ContextMenuItem,\n type ContextMenuProps,\n } from './types'\n\n defineOptions({ name: 'C_ContextMenu' })\n\n const props = withDefaults(defineProps<ContextMenuProps>(), {\n items: () => [],\n minWidth: DEFAULT_CONTEXT_MENU_PROPS.minWidth,\n maxWidth: DEFAULT_CONTEXT_MENU_PROPS.maxWidth,\n subMenuPlacement: DEFAULT_CONTEXT_MENU_PROPS.subMenuPlacement,\n autoClose: DEFAULT_CONTEXT_MENU_PROPS.autoClose,\n disabled: DEFAULT_CONTEXT_MENU_PROPS.disabled,\n zIndex: DEFAULT_CONTEXT_MENU_PROPS.zIndex,\n })\n\n const emit = defineEmits<{\n (e: 'select', item: ContextMenuItem): void\n (e: 'open', position: { x: number; y: number }): void\n (e: 'close'): void\n }>()\n\n // ===== 状态 =====\n const visible = ref(false)\n const position = ref({ x: 0, y: 0 })\n const menuRef = ref<HTMLElement>()\n const activeSubKey = ref<string | null>(null)\n\n let subTimer: ReturnType<typeof setTimeout> | null = null\n\n // ===== 可见项 =====\n const visibleItems = computed(() => props.items.filter(item => !item.hidden))\n\n // ===== 菜单定位样式 =====\n const menuStyle = computed(() => ({\n left: `${position.value.x}px`,\n top: `${position.value.y}px`,\n minWidth: `${props.minWidth}px`,\n maxWidth: `${props.maxWidth}px`,\n zIndex: props.zIndex,\n }))\n\n // ===== 边界校正 =====\n const adjustPosition = () => {\n nextTick(() => {\n const el = menuRef.value\n if (!el) return\n const rect = el.getBoundingClientRect()\n const { innerWidth, innerHeight } = window\n\n if (rect.right > innerWidth) {\n position.value.x = innerWidth - rect.width - 8\n }\n if (rect.bottom > innerHeight) {\n position.value.y = innerHeight - rect.height - 8\n }\n if (position.value.x < 0) position.value.x = 8\n if (position.value.y < 0) position.value.y = 8\n })\n }\n\n // ===== 打开/关闭 =====\n const open = (x: number, y: number) => {\n if (props.disabled) return\n position.value = { x, y }\n visible.value = true\n emit('open', { x, y })\n adjustPosition()\n\n // 聚焦以支持 Escape 关闭\n nextTick(() => menuRef.value?.focus())\n }\n\n const close = () => {\n visible.value = false\n activeSubKey.value = null\n emit('close')\n }\n\n // ===== 菜单项点击 =====\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.disabled) return\n if (item.children?.length) return // 有子菜单不触发\n\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 子菜单悬停 =====\n const handleMouseEnter = (item: ContextMenuItem) => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n if (item.children?.length && !item.disabled) {\n subTimer = setTimeout(() => {\n activeSubKey.value = item.key\n }, 150)\n } else {\n activeSubKey.value = null\n }\n }\n\n const handleMouseLeave = () => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n subTimer = setTimeout(() => {\n activeSubKey.value = null\n }, 300)\n }\n\n // ===== 子菜单选择向上冒泡 =====\n const handleSubSelect = (item: ContextMenuItem) => {\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 暴露 API =====\n defineExpose({\n /** 在指定坐标打开菜单 */\n open,\n /** 关闭菜单 */\n close,\n /** 当前是否可见 */\n visible: computed(() => visible.value),\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","<!--\n * @Description: 右键菜单组件 — 声明式配置、快捷键标注、嵌套子菜单\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n-->\n<template>\n <!-- 遮罩层 -->\n <Teleport to=\"body\">\n <div\n v-if=\"visible\"\n class=\"c-context-menu-overlay\"\n :style=\"{ zIndex: props.zIndex - 1 }\"\n @click=\"close\"\n @contextmenu.prevent=\"close\"\n />\n\n <!-- 菜单面板 -->\n <div\n v-if=\"visible\"\n ref=\"menuRef\"\n class=\"c-context-menu\"\n :style=\"menuStyle\"\n role=\"menu\"\n tabindex=\"-1\"\n @keydown.escape=\"close\"\n >\n <template\n v-for=\"item in visibleItems\"\n :key=\"item.key\"\n >\n <!-- 分割线 -->\n <div\n v-if=\"item.divider\"\n class=\"c-context-menu__divider\"\n role=\"separator\"\n />\n\n <!-- 普通菜单项 -->\n <div\n v-else\n :class=\"[\n 'c-context-menu__item',\n {\n 'is-disabled': item.disabled,\n 'is-danger': item.danger,\n },\n ]\"\n role=\"menuitem\"\n :aria-disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n @mouseenter=\"handleMouseEnter(item)\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- 图标 -->\n <span\n v-if=\"item.icon\"\n class=\"c-context-menu__icon\"\n >\n <C_Icon :name=\"item.icon\" />\n </span>\n\n <!-- 文本 -->\n <span class=\"c-context-menu__label\">{{ item.label }}</span>\n\n <!-- 快捷键 -->\n <span\n v-if=\"item.shortcut\"\n class=\"c-context-menu__shortcut\"\n >\n {{ item.shortcut }}\n </span>\n\n <!-- 子菜单箭头 -->\n <span\n v-if=\"item.children?.length\"\n class=\"c-context-menu__arrow\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </span>\n\n <!-- 子菜单(递归) -->\n <C_ContextMenu\n v-if=\"item.children?.length && activeSubKey === item.key\"\n :items=\"item.children\"\n :min-width=\"props.minWidth\"\n :max-width=\"props.maxWidth\"\n :sub-menu-placement=\"props.subMenuPlacement\"\n :auto-close=\"props.autoClose\"\n :z-index=\"props.zIndex + 1\"\n class=\"c-context-menu__submenu\"\n :class=\"`is-${props.subMenuPlacement}`\"\n :style=\"{ position: 'absolute' }\"\n @select=\"handleSubSelect\"\n />\n </div>\n </template>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, nextTick, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_CONTEXT_MENU_PROPS,\n type ContextMenuItem,\n type ContextMenuProps,\n } from './types'\n\n defineOptions({ name: 'C_ContextMenu' })\n\n const props = withDefaults(defineProps<ContextMenuProps>(), {\n items: () => [],\n minWidth: DEFAULT_CONTEXT_MENU_PROPS.minWidth,\n maxWidth: DEFAULT_CONTEXT_MENU_PROPS.maxWidth,\n subMenuPlacement: DEFAULT_CONTEXT_MENU_PROPS.subMenuPlacement,\n autoClose: DEFAULT_CONTEXT_MENU_PROPS.autoClose,\n disabled: DEFAULT_CONTEXT_MENU_PROPS.disabled,\n zIndex: DEFAULT_CONTEXT_MENU_PROPS.zIndex,\n })\n\n const emit = defineEmits<{\n (e: 'select', item: ContextMenuItem): void\n (e: 'open', position: { x: number; y: number }): void\n (e: 'close'): void\n }>()\n\n // ===== 状态 =====\n const visible = ref(false)\n const position = ref({ x: 0, y: 0 })\n const menuRef = ref<HTMLElement>()\n const activeSubKey = ref<string | null>(null)\n\n let subTimer: ReturnType<typeof setTimeout> | null = null\n\n // ===== 可见项 =====\n const visibleItems = computed(() => props.items.filter(item => !item.hidden))\n\n // ===== 菜单定位样式 =====\n const menuStyle = computed(() => ({\n left: `${position.value.x}px`,\n top: `${position.value.y}px`,\n minWidth: `${props.minWidth}px`,\n maxWidth: `${props.maxWidth}px`,\n zIndex: props.zIndex,\n }))\n\n // ===== 边界校正 =====\n const adjustPosition = () => {\n nextTick(() => {\n const el = menuRef.value\n if (!el) return\n const rect = el.getBoundingClientRect()\n const { innerWidth, innerHeight } = window\n\n if (rect.right > innerWidth) {\n position.value.x = innerWidth - rect.width - 8\n }\n if (rect.bottom > innerHeight) {\n position.value.y = innerHeight - rect.height - 8\n }\n if (position.value.x < 0) position.value.x = 8\n if (position.value.y < 0) position.value.y = 8\n })\n }\n\n // ===== 打开/关闭 =====\n const open = (x: number, y: number) => {\n if (props.disabled) return\n position.value = { x, y }\n visible.value = true\n emit('open', { x, y })\n adjustPosition()\n\n // 聚焦以支持 Escape 关闭\n nextTick(() => menuRef.value?.focus())\n }\n\n const close = () => {\n visible.value = false\n activeSubKey.value = null\n emit('close')\n }\n\n // ===== 菜单项点击 =====\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.disabled) return\n if (item.children?.length) return // 有子菜单不触发\n\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 子菜单悬停 =====\n const handleMouseEnter = (item: ContextMenuItem) => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n if (item.children?.length && !item.disabled) {\n subTimer = setTimeout(() => {\n activeSubKey.value = item.key\n }, 150)\n } else {\n activeSubKey.value = null\n }\n }\n\n const handleMouseLeave = () => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n subTimer = setTimeout(() => {\n activeSubKey.value = null\n }, 300)\n }\n\n // ===== 子菜单选择向上冒泡 =====\n const handleSubSelect = (item: ContextMenuItem) => {\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 暴露 API =====\n defineExpose({\n /** 在指定坐标打开菜单 */\n open,\n /** 关闭菜单 */\n close,\n /** 当前是否可见 */\n visible: computed(() => visible.value),\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,Teleport as r,computed as i,createBlock as a,createCommentVNode as o,createElementBlock as s,createElementVNode as c,createVNode as l,defineComponent as u,nextTick as d,normalizeClass as f,normalizeStyle as p,openBlock as m,ref as h,renderList as g,resolveComponent as _,toDisplayString as v,withKeys as y,withModifiers as b}from"vue";const x={minWidth:180,maxWidth:280,subMenuPlacement:`right`,autoClose:!0,disabled:!1,zIndex:9999},S={key:0,class:`c-context-menu__divider`,role:`separator`},C=[`aria-disabled`,`onClick`,`onMouseenter`],w={key:0,class:`c-context-menu__icon`},T={class:`c-context-menu__label`},E={key:1,class:`c-context-menu__shortcut`},D={key:2,class:`c-context-menu__arrow`};var O=t(u({name:`C_ContextMenu`,__name:`index`,props:{items:{default:()=>[]},minWidth:{default:x.minWidth},maxWidth:{default:x.maxWidth},subMenuPlacement:{default:x.subMenuPlacement},autoClose:{type:Boolean,default:x.autoClose},disabled:{type:Boolean,default:x.disabled},zIndex:{default:x.zIndex}},emits:[`select`,`open`,`close`],setup(t,{expose:u,emit:x}){let O=t,k=x,A=h(!1),j=h({x:0,y:0}),M=h(),N=h(null),P=null,F=i(()=>O.items.filter(e=>!e.hidden)),I=i(()=>({left:`${j.value.x}px`,top:`${j.value.y}px`,minWidth:`${O.minWidth}px`,maxWidth:`${O.maxWidth}px`,zIndex:O.zIndex})),L=()=>{d(()=>{let e=M.value;if(!e)return;let t=e.getBoundingClientRect(),{innerWidth:n,innerHeight:r}=window;t.right>n&&(j.value.x=n-t.width-8),t.bottom>r&&(j.value.y=r-t.height-8),j.value.x<0&&(j.value.x=8),j.value.y<0&&(j.value.y=8)})},R=(e,t)=>{O.disabled||(j.value={x:e,y:t},A.value=!0,k(`open`,{x:e,y:t}),L(),d(()=>M.value?.focus()))},z=()=>{A.value=!1,N.value=null,k(`close`)},B=e=>{e.disabled||e.children?.length||(k(`select`,e),O.autoClose&&z())},V=e=>{P&&=(clearTimeout(P),null),e.children?.length&&!e.disabled?P=setTimeout(()=>{N.value=e.key},150):N.value=null},H=()=>{P&&=(clearTimeout(P),null),P=setTimeout(()=>{N.value=null},300)},U=e=>{k(`select`,e),O.autoClose&&z()};return u({open:R,close:z,visible:i(()=>A.value)}),(t,i)=>{let u=_(`C_ContextMenu`);return m(),s(n,null,[o(` 遮罩层 `),(m(),a(r,{to:`body`},[A.value?(m(),s(`div`,{key:0,class:`c-context-menu-overlay`,style:p({zIndex:O.zIndex-1}),onClick:z,onContextmenu:b(z,[`prevent`])},null,36)):o(`v-if`,!0),o(` 菜单面板 `),A.value?(m(),s(`div`,{key:1,ref_key:`menuRef`,ref:M,class:`c-context-menu`,style:p(I.value),role:`menu`,tabindex:`-1`,onKeydown:y(z,[`escape`])},[(m(!0),s(n,null,g(F.value,t=>(m(),s(n,{key:t.key},[o(` 分割线 `),t.divider?(m(),s(`div`,S)):(m(),s(n,{key:1},[o(` 普通菜单项 `),c(`div`,{class:f([`c-context-menu__item`,{"is-disabled":t.disabled,"is-danger":t.danger}]),role:`menuitem`,"aria-disabled":t.disabled,onClick:e=>B(t),onMouseenter:e=>V(t),onMouseleave:H},[o(` 图标 `),t.icon?(m(),s(`span`,w,[l(e,{name:t.icon},null,8,[`name`])])):o(`v-if`,!0),o(` 文本 `),c(`span`,T,v(t.label),1),o(` 快捷键 `),t.shortcut?(m(),s(`span`,E,v(t.shortcut),1)):o(`v-if`,!0),o(` 子菜单箭头 `),t.children?.length?(m(),s(`span`,D,[l(e,{name:`mdi:chevron-right`})])):o(`v-if`,!0),o(` 子菜单(递归) `),t.children?.length&&N.value===t.key?(m(),a(u,{key:3,items:t.children,"min-width":O.minWidth,"max-width":O.maxWidth,"sub-menu-placement":O.subMenuPlacement,"auto-close":O.autoClose,"z-index":O.zIndex+1,class:f([`c-context-menu__submenu`,`is-${O.subMenuPlacement}`]),style:{position:`absolute`},onSelect:U},null,8,[`items`,`min-width`,`max-width`,`sub-menu-placement`,`auto-close`,`z-index`,`class`])):o(`v-if`,!0)],42,C)],2112))],64))),128))],36)):o(`v-if`,!0)]))],2112)}}}),[[`__scopeId`,`data-v-cdd4d8bb`]]);export{x as n,O as t};
1
+ import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,Teleport as r,computed as i,createBlock as a,createCommentVNode as o,createElementBlock as s,createElementVNode as c,createVNode as l,defineComponent as u,nextTick as d,normalizeClass as f,normalizeStyle as p,openBlock as m,ref as h,renderList as g,resolveComponent as _,toDisplayString as v,withKeys as y,withModifiers as b}from"vue";const x={minWidth:180,maxWidth:280,subMenuPlacement:`right`,autoClose:!0,disabled:!1,zIndex:9999},S={key:0,class:`c-context-menu__divider`,role:`separator`},C=[`aria-disabled`,`onClick`,`onMouseenter`],w={key:0,class:`c-context-menu__icon`},T={class:`c-context-menu__label`},E={key:1,class:`c-context-menu__shortcut`},D={key:2,class:`c-context-menu__arrow`};var O=t(u({name:`C_ContextMenu`,__name:`index`,props:{items:{default:()=>[]},minWidth:{default:x.minWidth},maxWidth:{default:x.maxWidth},subMenuPlacement:{default:x.subMenuPlacement},autoClose:{type:Boolean,default:x.autoClose},disabled:{type:Boolean,default:x.disabled},zIndex:{default:x.zIndex}},emits:[`select`,`open`,`close`],setup(t,{expose:u,emit:_}){let x=t,k=_,A=h(!1),j=h({x:0,y:0}),M=h(),N=h(null),P=null,F=i(()=>x.items.filter(e=>!e.hidden)),I=i(()=>({left:`${j.value.x}px`,top:`${j.value.y}px`,minWidth:`${x.minWidth}px`,maxWidth:`${x.maxWidth}px`,zIndex:x.zIndex})),L=()=>{d(()=>{let e=M.value;if(!e)return;let t=e.getBoundingClientRect(),{innerWidth:n,innerHeight:r}=window;t.right>n&&(j.value.x=n-t.width-8),t.bottom>r&&(j.value.y=r-t.height-8),j.value.x<0&&(j.value.x=8),j.value.y<0&&(j.value.y=8)})},R=(e,t)=>{x.disabled||(j.value={x:e,y:t},A.value=!0,k(`open`,{x:e,y:t}),L(),d(()=>M.value?.focus()))},z=()=>{A.value=!1,N.value=null,k(`close`)},B=e=>{e.disabled||e.children?.length||(k(`select`,e),x.autoClose&&z())},V=e=>{P&&=(clearTimeout(P),null),e.children?.length&&!e.disabled?P=setTimeout(()=>{N.value=e.key},150):N.value=null},H=()=>{P&&=(clearTimeout(P),null),P=setTimeout(()=>{N.value=null},300)},U=e=>{k(`select`,e),x.autoClose&&z()};return u({open:R,close:z,visible:i(()=>A.value)}),(t,i)=>{let u=O;return m(),s(n,null,[o(` 遮罩层 `),(m(),a(r,{to:`body`},[A.value?(m(),s(`div`,{key:0,class:`c-context-menu-overlay`,style:p({zIndex:x.zIndex-1}),onClick:z,onContextmenu:b(z,[`prevent`])},null,36)):o(`v-if`,!0),o(` 菜单面板 `),A.value?(m(),s(`div`,{key:1,ref_key:`menuRef`,ref:M,class:`c-context-menu`,style:p(I.value),role:`menu`,tabindex:`-1`,onKeydown:y(z,[`escape`])},[(m(!0),s(n,null,g(F.value,t=>(m(),s(n,{key:t.key},[o(` 分割线 `),t.divider?(m(),s(`div`,S)):(m(),s(n,{key:1},[o(` 普通菜单项 `),c(`div`,{class:f([`c-context-menu__item`,{"is-disabled":t.disabled,"is-danger":t.danger}]),role:`menuitem`,"aria-disabled":t.disabled,onClick:e=>B(t),onMouseenter:e=>V(t),onMouseleave:H},[o(` 图标 `),t.icon?(m(),s(`span`,w,[l(e,{name:t.icon},null,8,[`name`])])):o(`v-if`,!0),o(` 文本 `),c(`span`,T,v(t.label),1),o(` 快捷键 `),t.shortcut?(m(),s(`span`,E,v(t.shortcut),1)):o(`v-if`,!0),o(` 子菜单箭头 `),t.children?.length?(m(),s(`span`,D,[l(e,{name:`mdi:chevron-right`})])):o(`v-if`,!0),o(` 子菜单(递归) `),t.children?.length&&N.value===t.key?(m(),a(u,{key:3,items:t.children,"min-width":x.minWidth,"max-width":x.maxWidth,"sub-menu-placement":x.subMenuPlacement,"auto-close":x.autoClose,"z-index":x.zIndex+1,class:f([`c-context-menu__submenu`,`is-${x.subMenuPlacement}`]),style:{position:`absolute`},onSelect:U},null,8,[`items`,`min-width`,`max-width`,`sub-menu-placement`,`auto-close`,`z-index`,`class`])):o(`v-if`,!0)],42,C)],2112))],64))),128))],36)):o(`v-if`,!0)]))],2112)}}}),[[`__scopeId`,`data-v-f2de30a3`]]);export{x as n,O as t};
2
2
  //# sourceMappingURL=C_ContextMenu2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"C_ContextMenu2.js","names":[],"sources":["../src/components/C_ContextMenu/types.ts","../src/components/C_ContextMenu/index.vue"],"sourcesContent":["/**\n * @Description: 右键菜单组件类型定义\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n */\n\n/** 菜单项 */\nexport interface ContextMenuItem {\n /** 唯一标识 */\n key: string\n /** 菜单文字 */\n label: string\n /** 图标(Iconify 图标名) */\n icon?: string\n /** 快捷键标注文字(仅展示,不绑定) */\n shortcut?: string\n /** 是否禁用 */\n disabled?: boolean\n /** 是否隐藏 */\n hidden?: boolean\n /** 分割线(此项渲染为分割线,label 被忽略) */\n divider?: boolean\n /** 子菜单(支持无限嵌套) */\n children?: ContextMenuItem[]\n /** 自定义样式类 */\n className?: string\n /** 危险操作(红色高亮) */\n danger?: boolean\n}\n\n/** 组件 Props */\nexport interface ContextMenuProps {\n /** 菜单项列表 */\n items: ContextMenuItem[]\n /** 菜单最小宽度 */\n minWidth?: number\n /** 菜单最大宽度 */\n maxWidth?: number\n /** 子菜单展开方向 */\n subMenuPlacement?: 'right' | 'left'\n /** 点击菜单项后是否自动关闭 */\n autoClose?: boolean\n /** 是否禁用整个菜单 */\n disabled?: boolean\n /** 自定义 z-index */\n zIndex?: number\n}\n\n/** 默认 Props */\nexport const DEFAULT_CONTEXT_MENU_PROPS = {\n minWidth: 180,\n maxWidth: 280,\n subMenuPlacement: 'right' as const,\n autoClose: true,\n disabled: false,\n zIndex: 9999,\n}\n","<!--\n * @Description: 右键菜单组件 — 声明式配置、快捷键标注、嵌套子菜单\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n-->\n<template>\n <!-- 遮罩层 -->\n <Teleport to=\"body\">\n <div\n v-if=\"visible\"\n class=\"c-context-menu-overlay\"\n :style=\"{ zIndex: props.zIndex - 1 }\"\n @click=\"close\"\n @contextmenu.prevent=\"close\"\n />\n\n <!-- 菜单面板 -->\n <div\n v-if=\"visible\"\n ref=\"menuRef\"\n class=\"c-context-menu\"\n :style=\"menuStyle\"\n role=\"menu\"\n tabindex=\"-1\"\n @keydown.escape=\"close\"\n >\n <template\n v-for=\"item in visibleItems\"\n :key=\"item.key\"\n >\n <!-- 分割线 -->\n <div\n v-if=\"item.divider\"\n class=\"c-context-menu__divider\"\n role=\"separator\"\n />\n\n <!-- 普通菜单项 -->\n <div\n v-else\n :class=\"[\n 'c-context-menu__item',\n {\n 'is-disabled': item.disabled,\n 'is-danger': item.danger,\n },\n ]\"\n role=\"menuitem\"\n :aria-disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n @mouseenter=\"handleMouseEnter(item)\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- 图标 -->\n <span\n v-if=\"item.icon\"\n class=\"c-context-menu__icon\"\n >\n <C_Icon :name=\"item.icon\" />\n </span>\n\n <!-- 文本 -->\n <span class=\"c-context-menu__label\">{{ item.label }}</span>\n\n <!-- 快捷键 -->\n <span\n v-if=\"item.shortcut\"\n class=\"c-context-menu__shortcut\"\n >\n {{ item.shortcut }}\n </span>\n\n <!-- 子菜单箭头 -->\n <span\n v-if=\"item.children?.length\"\n class=\"c-context-menu__arrow\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </span>\n\n <!-- 子菜单(递归) -->\n <C_ContextMenu\n v-if=\"item.children?.length && activeSubKey === item.key\"\n :items=\"item.children\"\n :min-width=\"props.minWidth\"\n :max-width=\"props.maxWidth\"\n :sub-menu-placement=\"props.subMenuPlacement\"\n :auto-close=\"props.autoClose\"\n :z-index=\"props.zIndex + 1\"\n class=\"c-context-menu__submenu\"\n :class=\"`is-${props.subMenuPlacement}`\"\n :style=\"{ position: 'absolute' }\"\n @select=\"handleSubSelect\"\n />\n </div>\n </template>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, nextTick, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_CONTEXT_MENU_PROPS,\n type ContextMenuItem,\n type ContextMenuProps,\n } from './types'\n\n defineOptions({ name: 'C_ContextMenu' })\n\n const props = withDefaults(defineProps<ContextMenuProps>(), {\n items: () => [],\n minWidth: DEFAULT_CONTEXT_MENU_PROPS.minWidth,\n maxWidth: DEFAULT_CONTEXT_MENU_PROPS.maxWidth,\n subMenuPlacement: DEFAULT_CONTEXT_MENU_PROPS.subMenuPlacement,\n autoClose: DEFAULT_CONTEXT_MENU_PROPS.autoClose,\n disabled: DEFAULT_CONTEXT_MENU_PROPS.disabled,\n zIndex: DEFAULT_CONTEXT_MENU_PROPS.zIndex,\n })\n\n const emit = defineEmits<{\n (e: 'select', item: ContextMenuItem): void\n (e: 'open', position: { x: number; y: number }): void\n (e: 'close'): void\n }>()\n\n // ===== 状态 =====\n const visible = ref(false)\n const position = ref({ x: 0, y: 0 })\n const menuRef = ref<HTMLElement>()\n const activeSubKey = ref<string | null>(null)\n\n let subTimer: ReturnType<typeof setTimeout> | null = null\n\n // ===== 可见项 =====\n const visibleItems = computed(() => props.items.filter(item => !item.hidden))\n\n // ===== 菜单定位样式 =====\n const menuStyle = computed(() => ({\n left: `${position.value.x}px`,\n top: `${position.value.y}px`,\n minWidth: `${props.minWidth}px`,\n maxWidth: `${props.maxWidth}px`,\n zIndex: props.zIndex,\n }))\n\n // ===== 边界校正 =====\n const adjustPosition = () => {\n nextTick(() => {\n const el = menuRef.value\n if (!el) return\n const rect = el.getBoundingClientRect()\n const { innerWidth, innerHeight } = window\n\n if (rect.right > innerWidth) {\n position.value.x = innerWidth - rect.width - 8\n }\n if (rect.bottom > innerHeight) {\n position.value.y = innerHeight - rect.height - 8\n }\n if (position.value.x < 0) position.value.x = 8\n if (position.value.y < 0) position.value.y = 8\n })\n }\n\n // ===== 打开/关闭 =====\n const open = (x: number, y: number) => {\n if (props.disabled) return\n position.value = { x, y }\n visible.value = true\n emit('open', { x, y })\n adjustPosition()\n\n // 聚焦以支持 Escape 关闭\n nextTick(() => menuRef.value?.focus())\n }\n\n const close = () => {\n visible.value = false\n activeSubKey.value = null\n emit('close')\n }\n\n // ===== 菜单项点击 =====\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.disabled) return\n if (item.children?.length) return // 有子菜单不触发\n\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 子菜单悬停 =====\n const handleMouseEnter = (item: ContextMenuItem) => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n if (item.children?.length && !item.disabled) {\n subTimer = setTimeout(() => {\n activeSubKey.value = item.key\n }, 150)\n } else {\n activeSubKey.value = null\n }\n }\n\n const handleMouseLeave = () => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n subTimer = setTimeout(() => {\n activeSubKey.value = null\n }, 300)\n }\n\n // ===== 子菜单选择向上冒泡 =====\n const handleSubSelect = (item: ContextMenuItem) => {\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 暴露 API =====\n defineExpose({\n /** 在指定坐标打开菜单 */\n open,\n /** 关闭菜单 */\n close,\n /** 当前是否可见 */\n visible: computed(() => visible.value),\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"C_ContextMenu2.js","names":[],"sources":["../src/components/C_ContextMenu/types.ts","../src/components/C_ContextMenu/index.vue","../src/components/C_ContextMenu/index.vue"],"sourcesContent":["/**\n * @Description: 右键菜单组件类型定义\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n */\n\n/** 菜单项 */\nexport interface ContextMenuItem {\n /** 唯一标识 */\n key: string\n /** 菜单文字 */\n label: string\n /** 图标(Iconify 图标名) */\n icon?: string\n /** 快捷键标注文字(仅展示,不绑定) */\n shortcut?: string\n /** 是否禁用 */\n disabled?: boolean\n /** 是否隐藏 */\n hidden?: boolean\n /** 分割线(此项渲染为分割线,label 被忽略) */\n divider?: boolean\n /** 子菜单(支持无限嵌套) */\n children?: ContextMenuItem[]\n /** 自定义样式类 */\n className?: string\n /** 危险操作(红色高亮) */\n danger?: boolean\n}\n\n/** 组件 Props */\nexport interface ContextMenuProps {\n /** 菜单项列表 */\n items: ContextMenuItem[]\n /** 菜单最小宽度 */\n minWidth?: number\n /** 菜单最大宽度 */\n maxWidth?: number\n /** 子菜单展开方向 */\n subMenuPlacement?: 'right' | 'left'\n /** 点击菜单项后是否自动关闭 */\n autoClose?: boolean\n /** 是否禁用整个菜单 */\n disabled?: boolean\n /** 自定义 z-index */\n zIndex?: number\n}\n\n/** 默认 Props */\nexport const DEFAULT_CONTEXT_MENU_PROPS = {\n minWidth: 180,\n maxWidth: 280,\n subMenuPlacement: 'right' as const,\n autoClose: true,\n disabled: false,\n zIndex: 9999,\n}\n","<!--\n * @Description: 右键菜单组件 — 声明式配置、快捷键标注、嵌套子菜单\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n-->\n<template>\n <!-- 遮罩层 -->\n <Teleport to=\"body\">\n <div\n v-if=\"visible\"\n class=\"c-context-menu-overlay\"\n :style=\"{ zIndex: props.zIndex - 1 }\"\n @click=\"close\"\n @contextmenu.prevent=\"close\"\n />\n\n <!-- 菜单面板 -->\n <div\n v-if=\"visible\"\n ref=\"menuRef\"\n class=\"c-context-menu\"\n :style=\"menuStyle\"\n role=\"menu\"\n tabindex=\"-1\"\n @keydown.escape=\"close\"\n >\n <template\n v-for=\"item in visibleItems\"\n :key=\"item.key\"\n >\n <!-- 分割线 -->\n <div\n v-if=\"item.divider\"\n class=\"c-context-menu__divider\"\n role=\"separator\"\n />\n\n <!-- 普通菜单项 -->\n <div\n v-else\n :class=\"[\n 'c-context-menu__item',\n {\n 'is-disabled': item.disabled,\n 'is-danger': item.danger,\n },\n ]\"\n role=\"menuitem\"\n :aria-disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n @mouseenter=\"handleMouseEnter(item)\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- 图标 -->\n <span\n v-if=\"item.icon\"\n class=\"c-context-menu__icon\"\n >\n <C_Icon :name=\"item.icon\" />\n </span>\n\n <!-- 文本 -->\n <span class=\"c-context-menu__label\">{{ item.label }}</span>\n\n <!-- 快捷键 -->\n <span\n v-if=\"item.shortcut\"\n class=\"c-context-menu__shortcut\"\n >\n {{ item.shortcut }}\n </span>\n\n <!-- 子菜单箭头 -->\n <span\n v-if=\"item.children?.length\"\n class=\"c-context-menu__arrow\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </span>\n\n <!-- 子菜单(递归) -->\n <C_ContextMenu\n v-if=\"item.children?.length && activeSubKey === item.key\"\n :items=\"item.children\"\n :min-width=\"props.minWidth\"\n :max-width=\"props.maxWidth\"\n :sub-menu-placement=\"props.subMenuPlacement\"\n :auto-close=\"props.autoClose\"\n :z-index=\"props.zIndex + 1\"\n class=\"c-context-menu__submenu\"\n :class=\"`is-${props.subMenuPlacement}`\"\n :style=\"{ position: 'absolute' }\"\n @select=\"handleSubSelect\"\n />\n </div>\n </template>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, nextTick, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_CONTEXT_MENU_PROPS,\n type ContextMenuItem,\n type ContextMenuProps,\n } from './types'\n\n defineOptions({ name: 'C_ContextMenu' })\n\n const props = withDefaults(defineProps<ContextMenuProps>(), {\n items: () => [],\n minWidth: DEFAULT_CONTEXT_MENU_PROPS.minWidth,\n maxWidth: DEFAULT_CONTEXT_MENU_PROPS.maxWidth,\n subMenuPlacement: DEFAULT_CONTEXT_MENU_PROPS.subMenuPlacement,\n autoClose: DEFAULT_CONTEXT_MENU_PROPS.autoClose,\n disabled: DEFAULT_CONTEXT_MENU_PROPS.disabled,\n zIndex: DEFAULT_CONTEXT_MENU_PROPS.zIndex,\n })\n\n const emit = defineEmits<{\n (e: 'select', item: ContextMenuItem): void\n (e: 'open', position: { x: number; y: number }): void\n (e: 'close'): void\n }>()\n\n // ===== 状态 =====\n const visible = ref(false)\n const position = ref({ x: 0, y: 0 })\n const menuRef = ref<HTMLElement>()\n const activeSubKey = ref<string | null>(null)\n\n let subTimer: ReturnType<typeof setTimeout> | null = null\n\n // ===== 可见项 =====\n const visibleItems = computed(() => props.items.filter(item => !item.hidden))\n\n // ===== 菜单定位样式 =====\n const menuStyle = computed(() => ({\n left: `${position.value.x}px`,\n top: `${position.value.y}px`,\n minWidth: `${props.minWidth}px`,\n maxWidth: `${props.maxWidth}px`,\n zIndex: props.zIndex,\n }))\n\n // ===== 边界校正 =====\n const adjustPosition = () => {\n nextTick(() => {\n const el = menuRef.value\n if (!el) return\n const rect = el.getBoundingClientRect()\n const { innerWidth, innerHeight } = window\n\n if (rect.right > innerWidth) {\n position.value.x = innerWidth - rect.width - 8\n }\n if (rect.bottom > innerHeight) {\n position.value.y = innerHeight - rect.height - 8\n }\n if (position.value.x < 0) position.value.x = 8\n if (position.value.y < 0) position.value.y = 8\n })\n }\n\n // ===== 打开/关闭 =====\n const open = (x: number, y: number) => {\n if (props.disabled) return\n position.value = { x, y }\n visible.value = true\n emit('open', { x, y })\n adjustPosition()\n\n // 聚焦以支持 Escape 关闭\n nextTick(() => menuRef.value?.focus())\n }\n\n const close = () => {\n visible.value = false\n activeSubKey.value = null\n emit('close')\n }\n\n // ===== 菜单项点击 =====\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.disabled) return\n if (item.children?.length) return // 有子菜单不触发\n\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 子菜单悬停 =====\n const handleMouseEnter = (item: ContextMenuItem) => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n if (item.children?.length && !item.disabled) {\n subTimer = setTimeout(() => {\n activeSubKey.value = item.key\n }, 150)\n } else {\n activeSubKey.value = null\n }\n }\n\n const handleMouseLeave = () => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n subTimer = setTimeout(() => {\n activeSubKey.value = null\n }, 300)\n }\n\n // ===== 子菜单选择向上冒泡 =====\n const handleSubSelect = (item: ContextMenuItem) => {\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 暴露 API =====\n defineExpose({\n /** 在指定坐标打开菜单 */\n open,\n /** 关闭菜单 */\n close,\n /** 当前是否可见 */\n visible: computed(() => visible.value),\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","<!--\n * @Description: 右键菜单组件 — 声明式配置、快捷键标注、嵌套子菜单\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n-->\n<template>\n <!-- 遮罩层 -->\n <Teleport to=\"body\">\n <div\n v-if=\"visible\"\n class=\"c-context-menu-overlay\"\n :style=\"{ zIndex: props.zIndex - 1 }\"\n @click=\"close\"\n @contextmenu.prevent=\"close\"\n />\n\n <!-- 菜单面板 -->\n <div\n v-if=\"visible\"\n ref=\"menuRef\"\n class=\"c-context-menu\"\n :style=\"menuStyle\"\n role=\"menu\"\n tabindex=\"-1\"\n @keydown.escape=\"close\"\n >\n <template\n v-for=\"item in visibleItems\"\n :key=\"item.key\"\n >\n <!-- 分割线 -->\n <div\n v-if=\"item.divider\"\n class=\"c-context-menu__divider\"\n role=\"separator\"\n />\n\n <!-- 普通菜单项 -->\n <div\n v-else\n :class=\"[\n 'c-context-menu__item',\n {\n 'is-disabled': item.disabled,\n 'is-danger': item.danger,\n },\n ]\"\n role=\"menuitem\"\n :aria-disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n @mouseenter=\"handleMouseEnter(item)\"\n @mouseleave=\"handleMouseLeave\"\n >\n <!-- 图标 -->\n <span\n v-if=\"item.icon\"\n class=\"c-context-menu__icon\"\n >\n <C_Icon :name=\"item.icon\" />\n </span>\n\n <!-- 文本 -->\n <span class=\"c-context-menu__label\">{{ item.label }}</span>\n\n <!-- 快捷键 -->\n <span\n v-if=\"item.shortcut\"\n class=\"c-context-menu__shortcut\"\n >\n {{ item.shortcut }}\n </span>\n\n <!-- 子菜单箭头 -->\n <span\n v-if=\"item.children?.length\"\n class=\"c-context-menu__arrow\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </span>\n\n <!-- 子菜单(递归) -->\n <C_ContextMenu\n v-if=\"item.children?.length && activeSubKey === item.key\"\n :items=\"item.children\"\n :min-width=\"props.minWidth\"\n :max-width=\"props.maxWidth\"\n :sub-menu-placement=\"props.subMenuPlacement\"\n :auto-close=\"props.autoClose\"\n :z-index=\"props.zIndex + 1\"\n class=\"c-context-menu__submenu\"\n :class=\"`is-${props.subMenuPlacement}`\"\n :style=\"{ position: 'absolute' }\"\n @select=\"handleSubSelect\"\n />\n </div>\n </template>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, nextTick, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_CONTEXT_MENU_PROPS,\n type ContextMenuItem,\n type ContextMenuProps,\n } from './types'\n\n defineOptions({ name: 'C_ContextMenu' })\n\n const props = withDefaults(defineProps<ContextMenuProps>(), {\n items: () => [],\n minWidth: DEFAULT_CONTEXT_MENU_PROPS.minWidth,\n maxWidth: DEFAULT_CONTEXT_MENU_PROPS.maxWidth,\n subMenuPlacement: DEFAULT_CONTEXT_MENU_PROPS.subMenuPlacement,\n autoClose: DEFAULT_CONTEXT_MENU_PROPS.autoClose,\n disabled: DEFAULT_CONTEXT_MENU_PROPS.disabled,\n zIndex: DEFAULT_CONTEXT_MENU_PROPS.zIndex,\n })\n\n const emit = defineEmits<{\n (e: 'select', item: ContextMenuItem): void\n (e: 'open', position: { x: number; y: number }): void\n (e: 'close'): void\n }>()\n\n // ===== 状态 =====\n const visible = ref(false)\n const position = ref({ x: 0, y: 0 })\n const menuRef = ref<HTMLElement>()\n const activeSubKey = ref<string | null>(null)\n\n let subTimer: ReturnType<typeof setTimeout> | null = null\n\n // ===== 可见项 =====\n const visibleItems = computed(() => props.items.filter(item => !item.hidden))\n\n // ===== 菜单定位样式 =====\n const menuStyle = computed(() => ({\n left: `${position.value.x}px`,\n top: `${position.value.y}px`,\n minWidth: `${props.minWidth}px`,\n maxWidth: `${props.maxWidth}px`,\n zIndex: props.zIndex,\n }))\n\n // ===== 边界校正 =====\n const adjustPosition = () => {\n nextTick(() => {\n const el = menuRef.value\n if (!el) return\n const rect = el.getBoundingClientRect()\n const { innerWidth, innerHeight } = window\n\n if (rect.right > innerWidth) {\n position.value.x = innerWidth - rect.width - 8\n }\n if (rect.bottom > innerHeight) {\n position.value.y = innerHeight - rect.height - 8\n }\n if (position.value.x < 0) position.value.x = 8\n if (position.value.y < 0) position.value.y = 8\n })\n }\n\n // ===== 打开/关闭 =====\n const open = (x: number, y: number) => {\n if (props.disabled) return\n position.value = { x, y }\n visible.value = true\n emit('open', { x, y })\n adjustPosition()\n\n // 聚焦以支持 Escape 关闭\n nextTick(() => menuRef.value?.focus())\n }\n\n const close = () => {\n visible.value = false\n activeSubKey.value = null\n emit('close')\n }\n\n // ===== 菜单项点击 =====\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.disabled) return\n if (item.children?.length) return // 有子菜单不触发\n\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 子菜单悬停 =====\n const handleMouseEnter = (item: ContextMenuItem) => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n if (item.children?.length && !item.disabled) {\n subTimer = setTimeout(() => {\n activeSubKey.value = item.key\n }, 150)\n } else {\n activeSubKey.value = null\n }\n }\n\n const handleMouseLeave = () => {\n if (subTimer) {\n clearTimeout(subTimer)\n subTimer = null\n }\n subTimer = setTimeout(() => {\n activeSubKey.value = null\n }, 300)\n }\n\n // ===== 子菜单选择向上冒泡 =====\n const handleSubSelect = (item: ContextMenuItem) => {\n emit('select', item)\n if (props.autoClose) close()\n }\n\n // ===== 暴露 API =====\n defineExpose({\n /** 在指定坐标打开菜单 */\n open,\n /** 关闭菜单 */\n close,\n /** 当前是否可见 */\n visible: computed(() => visible.value),\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"C_Cron-Civir5-I.css","names":[],"sources":["../src/components/C_Cron/components/CronFieldEditor.vue?vue&type=style&index=0&scoped=769c51fe&lang.scss","../src/components/C_Cron/components/CronPreview.vue?vue&type=style&index=0&scoped=570ad3fb&lang.scss","../src/components/C_Cron/components/CronTemplates.vue?vue&type=style&index=0&scoped=5190cefc&lang.scss","../src/components/C_Cron/index.vue?vue&type=style&index=0&scoped=e9b95547&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.cron-field-editor__grid[data-v-769c51fe] {\n display: grid;\n grid-template-columns: repeat(var(--cols, 10), 1fr);\n gap: 4px;\n}\n.cron-field-editor__cell[data-v-769c51fe] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 34px;\n border-radius: 6px;\n font-size: 13px;\n font-variant-numeric: tabular-nums;\n transition: all var(--c-transition, 0.2s ease);\n user-select: none;\n color: var(--c-text-2);\n /* 非交互高亮(every / range / step 的视觉反馈) */\n /* 可交互模式(specific) */\n}\n.cron-field-editor__cell--on[data-v-769c51fe]:not(.cron-field-editor__cell--pick) {\n background: color-mix(in srgb, var(--c-primary) 12%, transparent);\n color: var(--c-primary);\n}\n.cron-field-editor__cell--pick[data-v-769c51fe] {\n cursor: pointer;\n}\n.cron-field-editor__cell--pick[data-v-769c51fe]:hover:not(.cron-field-editor__cell--on) {\n background: var(--c-bg-card);\n}\n.cron-field-editor__cell--pick.cron-field-editor__cell--on[data-v-769c51fe] {\n background: var(--c-primary);\n color: #fff;\n font-weight: 600;\n}","/* unplugin-vue-components disabled */.cron-preview__header[data-v-570ad3fb] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 13px;\n margin-bottom: 6px;\n color: var(--c-text-1);\n}\n.cron-preview__list[data-v-570ad3fb] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.cron-preview__item[data-v-570ad3fb] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 3px 4px;\n border-radius: 4px;\n font-size: 12px;\n transition: background var(--c-transition, 0.2s ease);\n}\n.cron-preview__item[data-v-570ad3fb]:hover {\n background: var(--c-bg-card);\n}\n.cron-preview__idx[data-v-570ad3fb] {\n width: 16px;\n text-align: center;\n color: var(--c-text-4);\n flex-shrink: 0;\n font-size: 11px;\n}\n.cron-preview__date[data-v-570ad3fb] {\n font-family: \"Courier New\", Courier, monospace;\n flex: 1;\n font-size: 12px;\n}\n.cron-preview__week[data-v-570ad3fb] {\n color: var(--c-text-4);\n font-size: 12px;\n flex-shrink: 0;\n}","/* unplugin-vue-components disabled */.cron-templates__header[data-v-5190cefc] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 13px;\n margin-bottom: 10px;\n color: var(--c-text-1);\n}\n.cron-templates__cards[data-v-5190cefc] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 8px;\n}\n.cron-templates__card[data-v-5190cefc] {\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--c-border);\n cursor: pointer;\n transition: all var(--c-transition, 0.2s ease);\n}\n.cron-templates__card[data-v-5190cefc]:hover {\n border-color: var(--c-primary);\n background: color-mix(in srgb, var(--c-primary) 4%, transparent);\n}\n.cron-templates__card--active[data-v-5190cefc] {\n border-color: var(--c-primary);\n background: color-mix(in srgb, var(--c-primary) 8%, transparent);\n}\n.cron-templates__card-name[data-v-5190cefc] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.4;\n}\n.cron-templates__card-expr[data-v-5190cefc] {\n font-family: \"Courier New\", Courier, monospace;\n font-size: 11px;\n color: var(--c-text-4);\n margin-top: 2px;\n}","/* unplugin-vue-components disabled *//* Cron 表达式编辑器 - 组件级全局样式 */\n.c-cron[data-v-e9b95547] {\n padding: 20px;\n border-radius: 10px;\n border: 1px solid var(--c-border);\n background: var(--c-bg-card);\n /* ═══════ 顶部 ═══════ */\n /* ─── 分段式字段选择器 ──────────────────── */\n /* ─── 表达式行 ─────────────────────────── */\n /* ═══════ 主内容 ═══════ */\n /* ─── 右侧控制面板 ────────────────────── */\n /* ═══════ 底部模板 ═══════ */\n}\n.c-cron__header[data-v-e9b95547] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding-bottom: 16px;\n border-bottom: 1px solid var(--c-border);\n margin-bottom: 16px;\n}\n.c-cron__title-row[data-v-e9b95547] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.c-cron__title[data-v-e9b95547] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 15px;\n}\n.c-cron__segments[data-v-e9b95547] {\n display: flex;\n gap: 2px;\n padding: 3px;\n border-radius: 10px;\n background: var(--c-bg);\n}\n.c-cron__segment[data-v-e9b95547] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 6px 5px;\n border-radius: 8px;\n cursor: pointer;\n transition: all var(--c-transition, 0.2s ease);\n user-select: none;\n min-width: 0;\n}\n.c-cron__segment[data-v-e9b95547]:not(.c-cron__segment--active):hover {\n background: color-mix(in srgb, var(--c-bg-card) 60%, transparent);\n}\n.c-cron__segment--active[data-v-e9b95547] {\n background: var(--c-bg-card);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);\n}\n.c-cron__segment--active .c-cron__segment-value[data-v-e9b95547] {\n color: var(--c-primary);\n}\n.c-cron__segment--wildcard:not(.c-cron__segment--active) .c-cron__segment-value[data-v-e9b95547] {\n opacity: 0.35;\n}\n.c-cron__segment-value[data-v-e9b95547] {\n font-family: \"Courier New\", Courier, monospace;\n font-size: 15px;\n font-weight: 700;\n line-height: 1.3;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: center;\n}\n.c-cron__segment-label[data-v-e9b95547] {\n font-size: 11px;\n color: var(--c-text-4);\n margin-top: 2px;\n}\n.c-cron__expr-row[data-v-e9b95547] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.c-cron__expr-input[data-v-e9b95547] {\n width: 240px;\n flex-shrink: 0;\n}\n.c-cron__expr-desc[data-v-e9b95547] {\n flex: 1;\n font-size: 13px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.c-cron__description[data-v-e9b95547] {\n color: var(--c-text-2);\n}\n.c-cron__error[data-v-e9b95547] {\n color: var(--error-color);\n}\n.c-cron__body[data-v-e9b95547] {\n display: flex;\n gap: 24px;\n}\n.c-cron__main[data-v-e9b95547] {\n flex: 1;\n min-width: 0;\n}\n.c-cron__panel[data-v-e9b95547] {\n width: 260px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.c-cron__config[data-v-e9b95547] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.c-cron__config-row[data-v-e9b95547] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--c-text-2);\n flex-wrap: wrap;\n}\n.c-cron__config-num[data-v-e9b95547] {\n width: 68px;\n}\n.c-cron__quick[data-v-e9b95547] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n}\n.c-cron__quick a[data-v-e9b95547] {\n color: var(--c-primary);\n cursor: pointer;\n user-select: none;\n}\n.c-cron__quick a[data-v-e9b95547]:hover {\n text-decoration: underline;\n}\n.c-cron__quick-sep[data-v-e9b95547] {\n color: var(--c-text-4);\n}\n.c-cron__quick-count[data-v-e9b95547] {\n margin-left: 4px;\n font-size: 12px;\n color: var(--c-text-4);\n}\n.c-cron__panel-line[data-v-e9b95547] {\n height: 1px;\n background: var(--c-border);\n}\n.c-cron__footer[data-v-e9b95547] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--c-border);\n}\n\n/* ─── 响应式 ────────────────────────────────── */\n@media (max-width: 768px) {\n.c-cron__body[data-v-e9b95547] {\n flex-direction: column;\n}\n.c-cron__panel[data-v-e9b95547] {\n width: 100%;\n}\n.c-cron__segments[data-v-e9b95547] {\n flex-wrap: wrap;\n}\n.c-cron__segment[data-v-e9b95547] {\n min-width: calc(33% - 4px);\n}\n.c-cron__expr-row[data-v-e9b95547] {\n flex-wrap: wrap;\n}\n.c-cron__expr-input[data-v-e9b95547] {\n width: 100%;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"file":"C_Cron-BIQ2By9v.css","names":[],"sources":["../src/components/C_Cron/components/CronFieldEditor.vue?vue&type=style&index=0&scoped=e6fa8e5b&lang.scss","../src/components/C_Cron/components/CronPreview.vue?vue&type=style&index=0&scoped=a695bb32&lang.scss","../src/components/C_Cron/components/CronTemplates.vue?vue&type=style&index=0&scoped=fe320f38&lang.scss","../src/components/C_Cron/index.vue?vue&type=style&index=0&scoped=06e7be26&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.cron-field-editor__grid[data-v-e6fa8e5b] {\n display: grid;\n grid-template-columns: repeat(var(--cols, 10), 1fr);\n gap: 4px;\n}\n.cron-field-editor__cell[data-v-e6fa8e5b] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 34px;\n border-radius: 6px;\n font-size: 13px;\n font-variant-numeric: tabular-nums;\n transition: all var(--c-transition, 0.2s ease);\n user-select: none;\n color: var(--c-text-2);\n /* 非交互高亮(every / range / step 的视觉反馈) */\n /* 可交互模式(specific) */\n}\n.cron-field-editor__cell--on[data-v-e6fa8e5b]:not(.cron-field-editor__cell--pick) {\n background: color-mix(in srgb, var(--c-primary) 12%, transparent);\n color: var(--c-primary);\n}\n.cron-field-editor__cell--pick[data-v-e6fa8e5b] {\n cursor: pointer;\n}\n.cron-field-editor__cell--pick[data-v-e6fa8e5b]:hover:not(.cron-field-editor__cell--on) {\n background: var(--c-bg-card);\n}\n.cron-field-editor__cell--pick.cron-field-editor__cell--on[data-v-e6fa8e5b] {\n background: var(--c-primary);\n color: #fff;\n font-weight: 600;\n}","/* unplugin-vue-components disabled */.cron-preview__header[data-v-a695bb32] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 13px;\n margin-bottom: 6px;\n color: var(--c-text-1);\n}\n.cron-preview__list[data-v-a695bb32] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.cron-preview__item[data-v-a695bb32] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 3px 4px;\n border-radius: 4px;\n font-size: 12px;\n transition: background var(--c-transition, 0.2s ease);\n}\n.cron-preview__item[data-v-a695bb32]:hover {\n background: var(--c-bg-card);\n}\n.cron-preview__idx[data-v-a695bb32] {\n width: 16px;\n text-align: center;\n color: var(--c-text-4);\n flex-shrink: 0;\n font-size: 11px;\n}\n.cron-preview__date[data-v-a695bb32] {\n font-family: \"Courier New\", Courier, monospace;\n flex: 1;\n font-size: 12px;\n}\n.cron-preview__week[data-v-a695bb32] {\n color: var(--c-text-4);\n font-size: 12px;\n flex-shrink: 0;\n}","/* unplugin-vue-components disabled */.cron-templates__header[data-v-fe320f38] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 13px;\n margin-bottom: 10px;\n color: var(--c-text-1);\n}\n.cron-templates__cards[data-v-fe320f38] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 8px;\n}\n.cron-templates__card[data-v-fe320f38] {\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--c-border);\n cursor: pointer;\n transition: all var(--c-transition, 0.2s ease);\n}\n.cron-templates__card[data-v-fe320f38]:hover {\n border-color: var(--c-primary);\n background: color-mix(in srgb, var(--c-primary) 4%, transparent);\n}\n.cron-templates__card--active[data-v-fe320f38] {\n border-color: var(--c-primary);\n background: color-mix(in srgb, var(--c-primary) 8%, transparent);\n}\n.cron-templates__card-name[data-v-fe320f38] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.4;\n}\n.cron-templates__card-expr[data-v-fe320f38] {\n font-family: \"Courier New\", Courier, monospace;\n font-size: 11px;\n color: var(--c-text-4);\n margin-top: 2px;\n}","/* unplugin-vue-components disabled *//* Cron 表达式编辑器 - 组件级全局样式 */\n.c-cron[data-v-06e7be26] {\n padding: 20px;\n border-radius: 10px;\n border: 1px solid var(--c-border);\n background: var(--c-bg-card);\n /* ═══════ 顶部 ═══════ */\n /* ─── 分段式字段选择器 ──────────────────── */\n /* ─── 表达式行 ─────────────────────────── */\n /* ═══════ 主内容 ═══════ */\n /* ─── 右侧控制面板 ────────────────────── */\n /* ═══════ 底部模板 ═══════ */\n}\n.c-cron__header[data-v-06e7be26] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding-bottom: 16px;\n border-bottom: 1px solid var(--c-border);\n margin-bottom: 16px;\n}\n.c-cron__title-row[data-v-06e7be26] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.c-cron__title[data-v-06e7be26] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 15px;\n}\n.c-cron__segments[data-v-06e7be26] {\n display: flex;\n gap: 2px;\n padding: 3px;\n border-radius: 10px;\n background: var(--c-bg);\n}\n.c-cron__segment[data-v-06e7be26] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 6px 5px;\n border-radius: 8px;\n cursor: pointer;\n transition: all var(--c-transition, 0.2s ease);\n user-select: none;\n min-width: 0;\n}\n.c-cron__segment[data-v-06e7be26]:not(.c-cron__segment--active):hover {\n background: color-mix(in srgb, var(--c-bg-card) 60%, transparent);\n}\n.c-cron__segment--active[data-v-06e7be26] {\n background: var(--c-bg-card);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);\n}\n.c-cron__segment--active .c-cron__segment-value[data-v-06e7be26] {\n color: var(--c-primary);\n}\n.c-cron__segment--wildcard:not(.c-cron__segment--active) .c-cron__segment-value[data-v-06e7be26] {\n opacity: 0.35;\n}\n.c-cron__segment-value[data-v-06e7be26] {\n font-family: \"Courier New\", Courier, monospace;\n font-size: 15px;\n font-weight: 700;\n line-height: 1.3;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: center;\n}\n.c-cron__segment-label[data-v-06e7be26] {\n font-size: 11px;\n color: var(--c-text-4);\n margin-top: 2px;\n}\n.c-cron__expr-row[data-v-06e7be26] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.c-cron__expr-input[data-v-06e7be26] {\n width: 240px;\n flex-shrink: 0;\n}\n.c-cron__expr-desc[data-v-06e7be26] {\n flex: 1;\n font-size: 13px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.c-cron__description[data-v-06e7be26] {\n color: var(--c-text-2);\n}\n.c-cron__error[data-v-06e7be26] {\n color: var(--error-color);\n}\n.c-cron__body[data-v-06e7be26] {\n display: flex;\n gap: 24px;\n}\n.c-cron__main[data-v-06e7be26] {\n flex: 1;\n min-width: 0;\n}\n.c-cron__panel[data-v-06e7be26] {\n width: 260px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.c-cron__config[data-v-06e7be26] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.c-cron__config-row[data-v-06e7be26] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--c-text-2);\n flex-wrap: wrap;\n}\n.c-cron__config-num[data-v-06e7be26] {\n width: 68px;\n}\n.c-cron__quick[data-v-06e7be26] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n}\n.c-cron__quick a[data-v-06e7be26] {\n color: var(--c-primary);\n cursor: pointer;\n user-select: none;\n}\n.c-cron__quick a[data-v-06e7be26]:hover {\n text-decoration: underline;\n}\n.c-cron__quick-sep[data-v-06e7be26] {\n color: var(--c-text-4);\n}\n.c-cron__quick-count[data-v-06e7be26] {\n margin-left: 4px;\n font-size: 12px;\n color: var(--c-text-4);\n}\n.c-cron__panel-line[data-v-06e7be26] {\n height: 1px;\n background: var(--c-border);\n}\n.c-cron__footer[data-v-06e7be26] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--c-border);\n}\n\n/* ─── 响应式 ────────────────────────────────── */\n@media (max-width: 768px) {\n.c-cron__body[data-v-06e7be26] {\n flex-direction: column;\n}\n.c-cron__panel[data-v-06e7be26] {\n width: 100%;\n}\n.c-cron__segments[data-v-06e7be26] {\n flex-wrap: wrap;\n}\n.c-cron__segment[data-v-06e7be26] {\n min-width: calc(33% - 4px);\n}\n.c-cron__expr-row[data-v-06e7be26] {\n flex-wrap: wrap;\n}\n.c-cron__expr-input[data-v-06e7be26] {\n width: 100%;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"C_Cron-iw3qpMsy.css","names":[],"sources":["../src/components/C_Cron/components/CronFieldEditor.vue?vue&type=style&index=0&scoped=769c51fe&lang.scss","../src/components/C_Cron/components/CronPreview.vue?vue&type=style&index=0&scoped=570ad3fb&lang.scss","../src/components/C_Cron/components/CronTemplates.vue?vue&type=style&index=0&scoped=5190cefc&lang.scss","../src/components/C_Cron/index.vue?vue&type=style&index=0&scoped=e9b95547&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.cron-field-editor__grid[data-v-769c51fe] {\n display: grid;\n grid-template-columns: repeat(var(--cols, 10), 1fr);\n gap: 4px;\n}\n.cron-field-editor__cell[data-v-769c51fe] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 34px;\n border-radius: 6px;\n font-size: 13px;\n font-variant-numeric: tabular-nums;\n transition: all var(--c-transition, 0.2s ease);\n user-select: none;\n color: var(--c-text-2);\n /* 非交互高亮(every / range / step 的视觉反馈) */\n /* 可交互模式(specific) */\n}\n.cron-field-editor__cell--on[data-v-769c51fe]:not(.cron-field-editor__cell--pick) {\n background: color-mix(in srgb, var(--c-primary) 12%, transparent);\n color: var(--c-primary);\n}\n.cron-field-editor__cell--pick[data-v-769c51fe] {\n cursor: pointer;\n}\n.cron-field-editor__cell--pick[data-v-769c51fe]:hover:not(.cron-field-editor__cell--on) {\n background: var(--c-bg-card);\n}\n.cron-field-editor__cell--pick.cron-field-editor__cell--on[data-v-769c51fe] {\n background: var(--c-primary);\n color: #fff;\n font-weight: 600;\n}","/* unplugin-vue-components disabled */.cron-preview__header[data-v-570ad3fb] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 13px;\n margin-bottom: 6px;\n color: var(--c-text-1);\n}\n.cron-preview__list[data-v-570ad3fb] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.cron-preview__item[data-v-570ad3fb] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 3px 4px;\n border-radius: 4px;\n font-size: 12px;\n transition: background var(--c-transition, 0.2s ease);\n}\n.cron-preview__item[data-v-570ad3fb]:hover {\n background: var(--c-bg-card);\n}\n.cron-preview__idx[data-v-570ad3fb] {\n width: 16px;\n text-align: center;\n color: var(--c-text-4);\n flex-shrink: 0;\n font-size: 11px;\n}\n.cron-preview__date[data-v-570ad3fb] {\n font-family: \"Courier New\", Courier, monospace;\n flex: 1;\n font-size: 12px;\n}\n.cron-preview__week[data-v-570ad3fb] {\n color: var(--c-text-4);\n font-size: 12px;\n flex-shrink: 0;\n}","/* unplugin-vue-components disabled */.cron-templates__header[data-v-5190cefc] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 13px;\n margin-bottom: 10px;\n color: var(--c-text-1);\n}\n.cron-templates__cards[data-v-5190cefc] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 8px;\n}\n.cron-templates__card[data-v-5190cefc] {\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--c-border);\n cursor: pointer;\n transition: all var(--c-transition, 0.2s ease);\n}\n.cron-templates__card[data-v-5190cefc]:hover {\n border-color: var(--c-primary);\n background: color-mix(in srgb, var(--c-primary) 4%, transparent);\n}\n.cron-templates__card--active[data-v-5190cefc] {\n border-color: var(--c-primary);\n background: color-mix(in srgb, var(--c-primary) 8%, transparent);\n}\n.cron-templates__card-name[data-v-5190cefc] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.4;\n}\n.cron-templates__card-expr[data-v-5190cefc] {\n font-family: \"Courier New\", Courier, monospace;\n font-size: 11px;\n color: var(--c-text-4);\n margin-top: 2px;\n}","/* unplugin-vue-components disabled *//* Cron 表达式编辑器 - 组件级全局样式 */\n.c-cron[data-v-e9b95547] {\n padding: 20px;\n border-radius: 10px;\n border: 1px solid var(--c-border);\n background: var(--c-bg-card);\n /* ═══════ 顶部 ═══════ */\n /* ─── 分段式字段选择器 ──────────────────── */\n /* ─── 表达式行 ─────────────────────────── */\n /* ═══════ 主内容 ═══════ */\n /* ─── 右侧控制面板 ────────────────────── */\n /* ═══════ 底部模板 ═══════ */\n}\n.c-cron__header[data-v-e9b95547] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding-bottom: 16px;\n border-bottom: 1px solid var(--c-border);\n margin-bottom: 16px;\n}\n.c-cron__title-row[data-v-e9b95547] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.c-cron__title[data-v-e9b95547] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 15px;\n}\n.c-cron__segments[data-v-e9b95547] {\n display: flex;\n gap: 2px;\n padding: 3px;\n border-radius: 10px;\n background: var(--c-bg);\n}\n.c-cron__segment[data-v-e9b95547] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 6px 5px;\n border-radius: 8px;\n cursor: pointer;\n transition: all var(--c-transition, 0.2s ease);\n user-select: none;\n min-width: 0;\n}\n.c-cron__segment[data-v-e9b95547]:not(.c-cron__segment--active):hover {\n background: color-mix(in srgb, var(--c-bg-card) 60%, transparent);\n}\n.c-cron__segment--active[data-v-e9b95547] {\n background: var(--c-bg-card);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);\n}\n.c-cron__segment--active .c-cron__segment-value[data-v-e9b95547] {\n color: var(--c-primary);\n}\n.c-cron__segment--wildcard:not(.c-cron__segment--active) .c-cron__segment-value[data-v-e9b95547] {\n opacity: 0.35;\n}\n.c-cron__segment-value[data-v-e9b95547] {\n font-family: \"Courier New\", Courier, monospace;\n font-size: 15px;\n font-weight: 700;\n line-height: 1.3;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: center;\n}\n.c-cron__segment-label[data-v-e9b95547] {\n font-size: 11px;\n color: var(--c-text-4);\n margin-top: 2px;\n}\n.c-cron__expr-row[data-v-e9b95547] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.c-cron__expr-input[data-v-e9b95547] {\n width: 240px;\n flex-shrink: 0;\n}\n.c-cron__expr-desc[data-v-e9b95547] {\n flex: 1;\n font-size: 13px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.c-cron__description[data-v-e9b95547] {\n color: var(--c-text-2);\n}\n.c-cron__error[data-v-e9b95547] {\n color: var(--error-color);\n}\n.c-cron__body[data-v-e9b95547] {\n display: flex;\n gap: 24px;\n}\n.c-cron__main[data-v-e9b95547] {\n flex: 1;\n min-width: 0;\n}\n.c-cron__panel[data-v-e9b95547] {\n width: 260px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.c-cron__config[data-v-e9b95547] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.c-cron__config-row[data-v-e9b95547] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--c-text-2);\n flex-wrap: wrap;\n}\n.c-cron__config-num[data-v-e9b95547] {\n width: 68px;\n}\n.c-cron__quick[data-v-e9b95547] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n}\n.c-cron__quick a[data-v-e9b95547] {\n color: var(--c-primary);\n cursor: pointer;\n user-select: none;\n}\n.c-cron__quick a[data-v-e9b95547]:hover {\n text-decoration: underline;\n}\n.c-cron__quick-sep[data-v-e9b95547] {\n color: var(--c-text-4);\n}\n.c-cron__quick-count[data-v-e9b95547] {\n margin-left: 4px;\n font-size: 12px;\n color: var(--c-text-4);\n}\n.c-cron__panel-line[data-v-e9b95547] {\n height: 1px;\n background: var(--c-border);\n}\n.c-cron__footer[data-v-e9b95547] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--c-border);\n}\n\n/* ─── 响应式 ────────────────────────────────── */\n@media (max-width: 768px) {\n.c-cron__body[data-v-e9b95547] {\n flex-direction: column;\n}\n.c-cron__panel[data-v-e9b95547] {\n width: 100%;\n}\n.c-cron__segments[data-v-e9b95547] {\n flex-wrap: wrap;\n}\n.c-cron__segment[data-v-e9b95547] {\n min-width: calc(33% - 4px);\n}\n.c-cron__expr-row[data-v-e9b95547] {\n flex-wrap: wrap;\n}\n.c-cron__expr-input[data-v-e9b95547] {\n width: 100%;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"file":"C_Cron-BNSAGD6A.css","names":[],"sources":["../src/components/C_Cron/components/CronFieldEditor.vue?vue&type=style&index=0&scoped=e6fa8e5b&lang.scss","../src/components/C_Cron/components/CronPreview.vue?vue&type=style&index=0&scoped=a695bb32&lang.scss","../src/components/C_Cron/components/CronTemplates.vue?vue&type=style&index=0&scoped=fe320f38&lang.scss","../src/components/C_Cron/index.vue?vue&type=style&index=0&scoped=06e7be26&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.cron-field-editor__grid[data-v-e6fa8e5b] {\n display: grid;\n grid-template-columns: repeat(var(--cols, 10), 1fr);\n gap: 4px;\n}\n.cron-field-editor__cell[data-v-e6fa8e5b] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 34px;\n border-radius: 6px;\n font-size: 13px;\n font-variant-numeric: tabular-nums;\n transition: all var(--c-transition, 0.2s ease);\n user-select: none;\n color: var(--c-text-2);\n /* 非交互高亮(every / range / step 的视觉反馈) */\n /* 可交互模式(specific) */\n}\n.cron-field-editor__cell--on[data-v-e6fa8e5b]:not(.cron-field-editor__cell--pick) {\n background: color-mix(in srgb, var(--c-primary) 12%, transparent);\n color: var(--c-primary);\n}\n.cron-field-editor__cell--pick[data-v-e6fa8e5b] {\n cursor: pointer;\n}\n.cron-field-editor__cell--pick[data-v-e6fa8e5b]:hover:not(.cron-field-editor__cell--on) {\n background: var(--c-bg-card);\n}\n.cron-field-editor__cell--pick.cron-field-editor__cell--on[data-v-e6fa8e5b] {\n background: var(--c-primary);\n color: #fff;\n font-weight: 600;\n}","/* unplugin-vue-components disabled */.cron-preview__header[data-v-a695bb32] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 13px;\n margin-bottom: 6px;\n color: var(--c-text-1);\n}\n.cron-preview__list[data-v-a695bb32] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.cron-preview__item[data-v-a695bb32] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 3px 4px;\n border-radius: 4px;\n font-size: 12px;\n transition: background var(--c-transition, 0.2s ease);\n}\n.cron-preview__item[data-v-a695bb32]:hover {\n background: var(--c-bg-card);\n}\n.cron-preview__idx[data-v-a695bb32] {\n width: 16px;\n text-align: center;\n color: var(--c-text-4);\n flex-shrink: 0;\n font-size: 11px;\n}\n.cron-preview__date[data-v-a695bb32] {\n font-family: \"Courier New\", Courier, monospace;\n flex: 1;\n font-size: 12px;\n}\n.cron-preview__week[data-v-a695bb32] {\n color: var(--c-text-4);\n font-size: 12px;\n flex-shrink: 0;\n}","/* unplugin-vue-components disabled */.cron-templates__header[data-v-fe320f38] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 13px;\n margin-bottom: 10px;\n color: var(--c-text-1);\n}\n.cron-templates__cards[data-v-fe320f38] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 8px;\n}\n.cron-templates__card[data-v-fe320f38] {\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--c-border);\n cursor: pointer;\n transition: all var(--c-transition, 0.2s ease);\n}\n.cron-templates__card[data-v-fe320f38]:hover {\n border-color: var(--c-primary);\n background: color-mix(in srgb, var(--c-primary) 4%, transparent);\n}\n.cron-templates__card--active[data-v-fe320f38] {\n border-color: var(--c-primary);\n background: color-mix(in srgb, var(--c-primary) 8%, transparent);\n}\n.cron-templates__card-name[data-v-fe320f38] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.4;\n}\n.cron-templates__card-expr[data-v-fe320f38] {\n font-family: \"Courier New\", Courier, monospace;\n font-size: 11px;\n color: var(--c-text-4);\n margin-top: 2px;\n}","/* unplugin-vue-components disabled *//* Cron 表达式编辑器 - 组件级全局样式 */\n.c-cron[data-v-06e7be26] {\n padding: 20px;\n border-radius: 10px;\n border: 1px solid var(--c-border);\n background: var(--c-bg-card);\n /* ═══════ 顶部 ═══════ */\n /* ─── 分段式字段选择器 ──────────────────── */\n /* ─── 表达式行 ─────────────────────────── */\n /* ═══════ 主内容 ═══════ */\n /* ─── 右侧控制面板 ────────────────────── */\n /* ═══════ 底部模板 ═══════ */\n}\n.c-cron__header[data-v-06e7be26] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding-bottom: 16px;\n border-bottom: 1px solid var(--c-border);\n margin-bottom: 16px;\n}\n.c-cron__title-row[data-v-06e7be26] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.c-cron__title[data-v-06e7be26] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n font-size: 15px;\n}\n.c-cron__segments[data-v-06e7be26] {\n display: flex;\n gap: 2px;\n padding: 3px;\n border-radius: 10px;\n background: var(--c-bg);\n}\n.c-cron__segment[data-v-06e7be26] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 6px 5px;\n border-radius: 8px;\n cursor: pointer;\n transition: all var(--c-transition, 0.2s ease);\n user-select: none;\n min-width: 0;\n}\n.c-cron__segment[data-v-06e7be26]:not(.c-cron__segment--active):hover {\n background: color-mix(in srgb, var(--c-bg-card) 60%, transparent);\n}\n.c-cron__segment--active[data-v-06e7be26] {\n background: var(--c-bg-card);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);\n}\n.c-cron__segment--active .c-cron__segment-value[data-v-06e7be26] {\n color: var(--c-primary);\n}\n.c-cron__segment--wildcard:not(.c-cron__segment--active) .c-cron__segment-value[data-v-06e7be26] {\n opacity: 0.35;\n}\n.c-cron__segment-value[data-v-06e7be26] {\n font-family: \"Courier New\", Courier, monospace;\n font-size: 15px;\n font-weight: 700;\n line-height: 1.3;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: center;\n}\n.c-cron__segment-label[data-v-06e7be26] {\n font-size: 11px;\n color: var(--c-text-4);\n margin-top: 2px;\n}\n.c-cron__expr-row[data-v-06e7be26] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.c-cron__expr-input[data-v-06e7be26] {\n width: 240px;\n flex-shrink: 0;\n}\n.c-cron__expr-desc[data-v-06e7be26] {\n flex: 1;\n font-size: 13px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.c-cron__description[data-v-06e7be26] {\n color: var(--c-text-2);\n}\n.c-cron__error[data-v-06e7be26] {\n color: var(--error-color);\n}\n.c-cron__body[data-v-06e7be26] {\n display: flex;\n gap: 24px;\n}\n.c-cron__main[data-v-06e7be26] {\n flex: 1;\n min-width: 0;\n}\n.c-cron__panel[data-v-06e7be26] {\n width: 260px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.c-cron__config[data-v-06e7be26] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.c-cron__config-row[data-v-06e7be26] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--c-text-2);\n flex-wrap: wrap;\n}\n.c-cron__config-num[data-v-06e7be26] {\n width: 68px;\n}\n.c-cron__quick[data-v-06e7be26] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n}\n.c-cron__quick a[data-v-06e7be26] {\n color: var(--c-primary);\n cursor: pointer;\n user-select: none;\n}\n.c-cron__quick a[data-v-06e7be26]:hover {\n text-decoration: underline;\n}\n.c-cron__quick-sep[data-v-06e7be26] {\n color: var(--c-text-4);\n}\n.c-cron__quick-count[data-v-06e7be26] {\n margin-left: 4px;\n font-size: 12px;\n color: var(--c-text-4);\n}\n.c-cron__panel-line[data-v-06e7be26] {\n height: 1px;\n background: var(--c-border);\n}\n.c-cron__footer[data-v-06e7be26] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--c-border);\n}\n\n/* ─── 响应式 ────────────────────────────────── */\n@media (max-width: 768px) {\n.c-cron__body[data-v-06e7be26] {\n flex-direction: column;\n}\n.c-cron__panel[data-v-06e7be26] {\n width: 100%;\n}\n.c-cron__segments[data-v-06e7be26] {\n flex-wrap: wrap;\n}\n.c-cron__segment[data-v-06e7be26] {\n min-width: calc(33% - 4px);\n}\n.c-cron__expr-row[data-v-06e7be26] {\n flex-wrap: wrap;\n}\n.c-cron__expr-input[data-v-06e7be26] {\n width: 100%;\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
package/dist/C_Cron.css CHANGED
@@ -1,9 +1,9 @@
1
- /* unplugin-vue-components disabled */.cron-field-editor__grid[data-v-769c51fe] {
1
+ /* unplugin-vue-components disabled */.cron-field-editor__grid[data-v-e6fa8e5b] {
2
2
  display: grid;
3
3
  grid-template-columns: repeat(var(--cols, 10), 1fr);
4
4
  gap: 4px;
5
5
  }
6
- .cron-field-editor__cell[data-v-769c51fe] {
6
+ .cron-field-editor__cell[data-v-e6fa8e5b] {
7
7
  display: flex;
8
8
  align-items: center;
9
9
  justify-content: center;
@@ -17,22 +17,22 @@
17
17
  /* 非交互高亮(every / range / step 的视觉反馈) */
18
18
  /* 可交互模式(specific) */
19
19
  }
20
- .cron-field-editor__cell--on[data-v-769c51fe]:not(.cron-field-editor__cell--pick) {
20
+ .cron-field-editor__cell--on[data-v-e6fa8e5b]:not(.cron-field-editor__cell--pick) {
21
21
  background: color-mix(in srgb, var(--c-primary) 12%, transparent);
22
22
  color: var(--c-primary);
23
23
  }
24
- .cron-field-editor__cell--pick[data-v-769c51fe] {
24
+ .cron-field-editor__cell--pick[data-v-e6fa8e5b] {
25
25
  cursor: pointer;
26
26
  }
27
- .cron-field-editor__cell--pick[data-v-769c51fe]:hover:not(.cron-field-editor__cell--on) {
27
+ .cron-field-editor__cell--pick[data-v-e6fa8e5b]:hover:not(.cron-field-editor__cell--on) {
28
28
  background: var(--c-bg-card);
29
29
  }
30
- .cron-field-editor__cell--pick.cron-field-editor__cell--on[data-v-769c51fe] {
30
+ .cron-field-editor__cell--pick.cron-field-editor__cell--on[data-v-e6fa8e5b] {
31
31
  background: var(--c-primary);
32
32
  color: #fff;
33
33
  font-weight: 600;
34
34
  }
35
- /* unplugin-vue-components disabled */.cron-preview__header[data-v-570ad3fb] {
35
+ /* unplugin-vue-components disabled */.cron-preview__header[data-v-a695bb32] {
36
36
  display: flex;
37
37
  align-items: center;
38
38
  gap: 6px;
@@ -41,12 +41,12 @@
41
41
  margin-bottom: 6px;
42
42
  color: var(--c-text-1);
43
43
  }
44
- .cron-preview__list[data-v-570ad3fb] {
44
+ .cron-preview__list[data-v-a695bb32] {
45
45
  display: flex;
46
46
  flex-direction: column;
47
47
  gap: 2px;
48
48
  }
49
- .cron-preview__item[data-v-570ad3fb] {
49
+ .cron-preview__item[data-v-a695bb32] {
50
50
  display: flex;
51
51
  align-items: center;
52
52
  gap: 6px;
@@ -55,27 +55,27 @@
55
55
  font-size: 12px;
56
56
  transition: background var(--c-transition, 0.2s ease);
57
57
  }
58
- .cron-preview__item[data-v-570ad3fb]:hover {
58
+ .cron-preview__item[data-v-a695bb32]:hover {
59
59
  background: var(--c-bg-card);
60
60
  }
61
- .cron-preview__idx[data-v-570ad3fb] {
61
+ .cron-preview__idx[data-v-a695bb32] {
62
62
  width: 16px;
63
63
  text-align: center;
64
64
  color: var(--c-text-4);
65
65
  flex-shrink: 0;
66
66
  font-size: 11px;
67
67
  }
68
- .cron-preview__date[data-v-570ad3fb] {
68
+ .cron-preview__date[data-v-a695bb32] {
69
69
  font-family: "Courier New", Courier, monospace;
70
70
  flex: 1;
71
71
  font-size: 12px;
72
72
  }
73
- .cron-preview__week[data-v-570ad3fb] {
73
+ .cron-preview__week[data-v-a695bb32] {
74
74
  color: var(--c-text-4);
75
75
  font-size: 12px;
76
76
  flex-shrink: 0;
77
77
  }
78
- /* unplugin-vue-components disabled */.cron-templates__header[data-v-5190cefc] {
78
+ /* unplugin-vue-components disabled */.cron-templates__header[data-v-fe320f38] {
79
79
  display: flex;
80
80
  align-items: center;
81
81
  gap: 6px;
@@ -84,39 +84,39 @@
84
84
  margin-bottom: 10px;
85
85
  color: var(--c-text-1);
86
86
  }
87
- .cron-templates__cards[data-v-5190cefc] {
87
+ .cron-templates__cards[data-v-fe320f38] {
88
88
  display: grid;
89
89
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
90
90
  gap: 8px;
91
91
  }
92
- .cron-templates__card[data-v-5190cefc] {
92
+ .cron-templates__card[data-v-fe320f38] {
93
93
  padding: 10px 12px;
94
94
  border-radius: 8px;
95
95
  border: 1px solid var(--c-border);
96
96
  cursor: pointer;
97
97
  transition: all var(--c-transition, 0.2s ease);
98
98
  }
99
- .cron-templates__card[data-v-5190cefc]:hover {
99
+ .cron-templates__card[data-v-fe320f38]:hover {
100
100
  border-color: var(--c-primary);
101
101
  background: color-mix(in srgb, var(--c-primary) 4%, transparent);
102
102
  }
103
- .cron-templates__card--active[data-v-5190cefc] {
103
+ .cron-templates__card--active[data-v-fe320f38] {
104
104
  border-color: var(--c-primary);
105
105
  background: color-mix(in srgb, var(--c-primary) 8%, transparent);
106
106
  }
107
- .cron-templates__card-name[data-v-5190cefc] {
107
+ .cron-templates__card-name[data-v-fe320f38] {
108
108
  font-size: 13px;
109
109
  font-weight: 500;
110
110
  line-height: 1.4;
111
111
  }
112
- .cron-templates__card-expr[data-v-5190cefc] {
112
+ .cron-templates__card-expr[data-v-fe320f38] {
113
113
  font-family: "Courier New", Courier, monospace;
114
114
  font-size: 11px;
115
115
  color: var(--c-text-4);
116
116
  margin-top: 2px;
117
117
  }
118
118
  /* unplugin-vue-components disabled *//* Cron 表达式编辑器 - 组件级全局样式 */
119
- .c-cron[data-v-e9b95547] {
119
+ .c-cron[data-v-06e7be26] {
120
120
  padding: 20px;
121
121
  border-radius: 10px;
122
122
  border: 1px solid var(--c-border);
@@ -128,7 +128,7 @@
128
128
  /* ─── 右侧控制面板 ────────────────────── */
129
129
  /* ═══════ 底部模板 ═══════ */
130
130
  }
131
- .c-cron__header[data-v-e9b95547] {
131
+ .c-cron__header[data-v-06e7be26] {
132
132
  display: flex;
133
133
  flex-direction: column;
134
134
  gap: 12px;
@@ -136,26 +136,26 @@
136
136
  border-bottom: 1px solid var(--c-border);
137
137
  margin-bottom: 16px;
138
138
  }
139
- .c-cron__title-row[data-v-e9b95547] {
139
+ .c-cron__title-row[data-v-06e7be26] {
140
140
  display: flex;
141
141
  align-items: center;
142
142
  justify-content: space-between;
143
143
  }
144
- .c-cron__title[data-v-e9b95547] {
144
+ .c-cron__title[data-v-06e7be26] {
145
145
  display: flex;
146
146
  align-items: center;
147
147
  gap: 6px;
148
148
  font-weight: 600;
149
149
  font-size: 15px;
150
150
  }
151
- .c-cron__segments[data-v-e9b95547] {
151
+ .c-cron__segments[data-v-06e7be26] {
152
152
  display: flex;
153
153
  gap: 2px;
154
154
  padding: 3px;
155
155
  border-radius: 10px;
156
156
  background: var(--c-bg);
157
157
  }
158
- .c-cron__segment[data-v-e9b95547] {
158
+ .c-cron__segment[data-v-06e7be26] {
159
159
  flex: 1;
160
160
  display: flex;
161
161
  flex-direction: column;
@@ -167,20 +167,20 @@
167
167
  user-select: none;
168
168
  min-width: 0;
169
169
  }
170
- .c-cron__segment[data-v-e9b95547]:not(.c-cron__segment--active):hover {
170
+ .c-cron__segment[data-v-06e7be26]:not(.c-cron__segment--active):hover {
171
171
  background: color-mix(in srgb, var(--c-bg-card) 60%, transparent);
172
172
  }
173
- .c-cron__segment--active[data-v-e9b95547] {
173
+ .c-cron__segment--active[data-v-06e7be26] {
174
174
  background: var(--c-bg-card);
175
175
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
176
176
  }
177
- .c-cron__segment--active .c-cron__segment-value[data-v-e9b95547] {
177
+ .c-cron__segment--active .c-cron__segment-value[data-v-06e7be26] {
178
178
  color: var(--c-primary);
179
179
  }
180
- .c-cron__segment--wildcard:not(.c-cron__segment--active) .c-cron__segment-value[data-v-e9b95547] {
180
+ .c-cron__segment--wildcard:not(.c-cron__segment--active) .c-cron__segment-value[data-v-06e7be26] {
181
181
  opacity: 0.35;
182
182
  }
183
- .c-cron__segment-value[data-v-e9b95547] {
183
+ .c-cron__segment-value[data-v-06e7be26] {
184
184
  font-family: "Courier New", Courier, monospace;
185
185
  font-size: 15px;
186
186
  font-weight: 700;
@@ -191,21 +191,21 @@
191
191
  white-space: nowrap;
192
192
  text-align: center;
193
193
  }
194
- .c-cron__segment-label[data-v-e9b95547] {
194
+ .c-cron__segment-label[data-v-06e7be26] {
195
195
  font-size: 11px;
196
196
  color: var(--c-text-4);
197
197
  margin-top: 2px;
198
198
  }
199
- .c-cron__expr-row[data-v-e9b95547] {
199
+ .c-cron__expr-row[data-v-06e7be26] {
200
200
  display: flex;
201
201
  align-items: center;
202
202
  gap: 8px;
203
203
  }
204
- .c-cron__expr-input[data-v-e9b95547] {
204
+ .c-cron__expr-input[data-v-06e7be26] {
205
205
  width: 240px;
206
206
  flex-shrink: 0;
207
207
  }
208
- .c-cron__expr-desc[data-v-e9b95547] {
208
+ .c-cron__expr-desc[data-v-06e7be26] {
209
209
  flex: 1;
210
210
  font-size: 13px;
211
211
  min-width: 0;
@@ -213,33 +213,33 @@
213
213
  text-overflow: ellipsis;
214
214
  white-space: nowrap;
215
215
  }
216
- .c-cron__description[data-v-e9b95547] {
216
+ .c-cron__description[data-v-06e7be26] {
217
217
  color: var(--c-text-2);
218
218
  }
219
- .c-cron__error[data-v-e9b95547] {
219
+ .c-cron__error[data-v-06e7be26] {
220
220
  color: var(--error-color);
221
221
  }
222
- .c-cron__body[data-v-e9b95547] {
222
+ .c-cron__body[data-v-06e7be26] {
223
223
  display: flex;
224
224
  gap: 24px;
225
225
  }
226
- .c-cron__main[data-v-e9b95547] {
226
+ .c-cron__main[data-v-06e7be26] {
227
227
  flex: 1;
228
228
  min-width: 0;
229
229
  }
230
- .c-cron__panel[data-v-e9b95547] {
230
+ .c-cron__panel[data-v-06e7be26] {
231
231
  width: 260px;
232
232
  flex-shrink: 0;
233
233
  display: flex;
234
234
  flex-direction: column;
235
235
  gap: 12px;
236
236
  }
237
- .c-cron__config[data-v-e9b95547] {
237
+ .c-cron__config[data-v-06e7be26] {
238
238
  display: flex;
239
239
  flex-direction: column;
240
240
  gap: 8px;
241
241
  }
242
- .c-cron__config-row[data-v-e9b95547] {
242
+ .c-cron__config-row[data-v-06e7be26] {
243
243
  display: flex;
244
244
  align-items: center;
245
245
  gap: 6px;
@@ -247,36 +247,36 @@
247
247
  color: var(--c-text-2);
248
248
  flex-wrap: wrap;
249
249
  }
250
- .c-cron__config-num[data-v-e9b95547] {
250
+ .c-cron__config-num[data-v-06e7be26] {
251
251
  width: 68px;
252
252
  }
253
- .c-cron__quick[data-v-e9b95547] {
253
+ .c-cron__quick[data-v-06e7be26] {
254
254
  display: flex;
255
255
  align-items: center;
256
256
  gap: 4px;
257
257
  font-size: 13px;
258
258
  }
259
- .c-cron__quick a[data-v-e9b95547] {
259
+ .c-cron__quick a[data-v-06e7be26] {
260
260
  color: var(--c-primary);
261
261
  cursor: pointer;
262
262
  user-select: none;
263
263
  }
264
- .c-cron__quick a[data-v-e9b95547]:hover {
264
+ .c-cron__quick a[data-v-06e7be26]:hover {
265
265
  text-decoration: underline;
266
266
  }
267
- .c-cron__quick-sep[data-v-e9b95547] {
267
+ .c-cron__quick-sep[data-v-06e7be26] {
268
268
  color: var(--c-text-4);
269
269
  }
270
- .c-cron__quick-count[data-v-e9b95547] {
270
+ .c-cron__quick-count[data-v-06e7be26] {
271
271
  margin-left: 4px;
272
272
  font-size: 12px;
273
273
  color: var(--c-text-4);
274
274
  }
275
- .c-cron__panel-line[data-v-e9b95547] {
275
+ .c-cron__panel-line[data-v-06e7be26] {
276
276
  height: 1px;
277
277
  background: var(--c-border);
278
278
  }
279
- .c-cron__footer[data-v-e9b95547] {
279
+ .c-cron__footer[data-v-06e7be26] {
280
280
  margin-top: 16px;
281
281
  padding-top: 16px;
282
282
  border-top: 1px solid var(--c-border);
@@ -284,24 +284,24 @@
284
284
 
285
285
  /* ─── 响应式 ────────────────────────────────── */
286
286
  @media (max-width: 768px) {
287
- .c-cron__body[data-v-e9b95547] {
287
+ .c-cron__body[data-v-06e7be26] {
288
288
  flex-direction: column;
289
289
  }
290
- .c-cron__panel[data-v-e9b95547] {
290
+ .c-cron__panel[data-v-06e7be26] {
291
291
  width: 100%;
292
292
  }
293
- .c-cron__segments[data-v-e9b95547] {
293
+ .c-cron__segments[data-v-06e7be26] {
294
294
  flex-wrap: wrap;
295
295
  }
296
- .c-cron__segment[data-v-e9b95547] {
296
+ .c-cron__segment[data-v-06e7be26] {
297
297
  min-width: calc(33% - 4px);
298
298
  }
299
- .c-cron__expr-row[data-v-e9b95547] {
299
+ .c-cron__expr-row[data-v-06e7be26] {
300
300
  flex-wrap: wrap;
301
301
  }
302
- .c-cron__expr-input[data-v-e9b95547] {
302
+ .c-cron__expr-input[data-v-06e7be26] {
303
303
  width: 100%;
304
304
  }
305
305
  }
306
306
 
307
- /*# sourceMappingURL=C_Cron-Civir5-I.css.map*/
307
+ /*# sourceMappingURL=C_Cron-BIQ2By9v.css.map*/