@fangxinyan/lumina 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +18 -7
  2. package/dist/{Accordion-3TQPKNN3.css → Accordion-REMDCQUD.css} +0 -1
  3. package/dist/Accordion.cjs +2 -2
  4. package/dist/Accordion.js +1 -1
  5. package/dist/Alert.cjs +2 -2
  6. package/dist/Alert.js +1 -1
  7. package/dist/AppShell.cjs +5 -5
  8. package/dist/AppShell.js +1 -1
  9. package/dist/Avatar.cjs +2 -2
  10. package/dist/Avatar.js +1 -1
  11. package/dist/Button.cjs +3 -3
  12. package/dist/Button.js +1 -1
  13. package/dist/Calendar.cjs +2 -2
  14. package/dist/Calendar.js +1 -1
  15. package/dist/Card.cjs +3 -3
  16. package/dist/Card.js +1 -1
  17. package/dist/{Cascader-DTRTTXC2.css → Cascader-VSYEKQCG.css} +1 -1
  18. package/dist/Cascader.cjs +2 -2
  19. package/dist/Cascader.js +1 -1
  20. package/dist/Checkbox.cjs +3 -3
  21. package/dist/Checkbox.js +1 -1
  22. package/dist/{ColorPicker-GP7AQYUU.css → ColorPicker-SDDQGHCM.css} +1 -1
  23. package/dist/ColorPicker.cjs +2 -2
  24. package/dist/ColorPicker.js +1 -1
  25. package/dist/CommandPalette-T45DBMPY.css +139 -0
  26. package/dist/CommandPalette.cjs +14 -0
  27. package/dist/CommandPalette.cjs.map +1 -0
  28. package/dist/CommandPalette.d.cts +65 -0
  29. package/dist/CommandPalette.d.ts +65 -0
  30. package/dist/CommandPalette.js +5 -0
  31. package/dist/CommandPalette.js.map +1 -0
  32. package/dist/ContextMenu-FKW6CQW4.css +76 -0
  33. package/dist/ContextMenu.cjs +12 -0
  34. package/dist/ContextMenu.cjs.map +1 -0
  35. package/dist/ContextMenu.d.cts +50 -0
  36. package/dist/ContextMenu.d.ts +50 -0
  37. package/dist/ContextMenu.js +3 -0
  38. package/dist/ContextMenu.js.map +1 -0
  39. package/dist/Divider.cjs +2 -2
  40. package/dist/Divider.js +1 -1
  41. package/dist/Drawer.cjs +2 -2
  42. package/dist/Drawer.js +1 -1
  43. package/dist/Empty.cjs +4 -4
  44. package/dist/Empty.js +1 -1
  45. package/dist/{Image-WYWORJT4.css → Image-4MN34O6P.css} +1 -1
  46. package/dist/Image.cjs +3 -3
  47. package/dist/Image.js +1 -1
  48. package/dist/Input.cjs +3 -3
  49. package/dist/Input.js +1 -1
  50. package/dist/List.cjs +2 -2
  51. package/dist/List.js +1 -1
  52. package/dist/{Modal-N4YVLEWW.css → Modal-XSDMU4XJ.css} +1 -1
  53. package/dist/Modal.cjs +3 -3
  54. package/dist/Modal.js +2 -2
  55. package/dist/Pagination.cjs +4 -4
  56. package/dist/Pagination.js +3 -3
  57. package/dist/{Popover-MGCMOXYP.css → Popover-NYEKT5CQ.css} +1 -1
  58. package/dist/Popover.cjs +2 -2
  59. package/dist/Popover.js +1 -1
  60. package/dist/Progress.cjs +3 -3
  61. package/dist/Progress.js +1 -1
  62. package/dist/{Select-EDG37C37.css → Select-J3CCVFJ7.css} +1 -1
  63. package/dist/Select.cjs +3 -3
  64. package/dist/Select.js +2 -2
  65. package/dist/Slider.cjs +2 -2
  66. package/dist/Slider.js +1 -1
  67. package/dist/Splitter-DHNOY4NC.css +66 -0
  68. package/dist/Splitter.cjs +12 -0
  69. package/dist/Splitter.cjs.map +1 -0
  70. package/dist/Splitter.d.cts +44 -0
  71. package/dist/Splitter.d.ts +44 -0
  72. package/dist/Splitter.js +3 -0
  73. package/dist/Splitter.js.map +1 -0
  74. package/dist/StatusBar-CDS2GPSI.css +58 -0
  75. package/dist/StatusBar.cjs +16 -0
  76. package/dist/StatusBar.cjs.map +1 -0
  77. package/dist/StatusBar.d.cts +39 -0
  78. package/dist/StatusBar.d.ts +39 -0
  79. package/dist/StatusBar.js +3 -0
  80. package/dist/StatusBar.js.map +1 -0
  81. package/dist/Switch.cjs +2 -2
  82. package/dist/Switch.js +1 -1
  83. package/dist/{Table-ADVN6LXP.css → Table-2LPTOUIR.css} +2 -2
  84. package/dist/Table.cjs +7 -7
  85. package/dist/Table.js +5 -5
  86. package/dist/Tabs.cjs +3 -3
  87. package/dist/Tabs.js +1 -1
  88. package/dist/Tag.cjs +3 -3
  89. package/dist/Tag.js +1 -1
  90. package/dist/Theme.cjs +10 -10
  91. package/dist/Theme.js +1 -1
  92. package/dist/{Toast-ERHDN3WG.css → Toast-6PVSAXQ5.css} +1 -1
  93. package/dist/Toast.cjs +3 -3
  94. package/dist/Toast.js +1 -1
  95. package/dist/Tooltip.cjs +2 -2
  96. package/dist/Tooltip.js +1 -1
  97. package/dist/Typography.cjs +6 -6
  98. package/dist/Typography.js +1 -1
  99. package/dist/{chunk-5WF6M47X.cjs → chunk-24FAK7QU.cjs} +3 -3
  100. package/dist/{chunk-5WF6M47X.cjs.map → chunk-24FAK7QU.cjs.map} +1 -1
  101. package/dist/{chunk-AJZKESHB.js → chunk-276NALYW.js} +3 -3
  102. package/dist/{chunk-AJZKESHB.js.map → chunk-276NALYW.js.map} +1 -1
  103. package/dist/{chunk-FI7QO3I5.cjs → chunk-33TIL25B.cjs} +3 -3
  104. package/dist/{chunk-FI7QO3I5.cjs.map → chunk-33TIL25B.cjs.map} +1 -1
  105. package/dist/{chunk-RDLPX7RK.cjs → chunk-3HNRKO3M.cjs} +31 -5
  106. package/dist/chunk-3HNRKO3M.cjs.map +1 -0
  107. package/dist/{chunk-GZGZR4FT.js → chunk-3LI6QH2Q.js} +3 -3
  108. package/dist/{chunk-GZGZR4FT.js.map → chunk-3LI6QH2Q.js.map} +1 -1
  109. package/dist/{chunk-NE4YEBFH.js → chunk-3UU2PUK4.js} +4 -4
  110. package/dist/{chunk-NE4YEBFH.js.map → chunk-3UU2PUK4.js.map} +1 -1
  111. package/dist/chunk-47Z4NIU4.js +118 -0
  112. package/dist/chunk-47Z4NIU4.js.map +1 -0
  113. package/dist/{chunk-4U4OY5RA.js → chunk-4SCDDSXY.js} +3 -3
  114. package/dist/{chunk-4U4OY5RA.js.map → chunk-4SCDDSXY.js.map} +1 -1
  115. package/dist/{chunk-NXOAYNG2.cjs → chunk-5BFETKVP.cjs} +3 -3
  116. package/dist/{chunk-NXOAYNG2.cjs.map → chunk-5BFETKVP.cjs.map} +1 -1
  117. package/dist/{chunk-VICGQC6G.cjs → chunk-5EAVXFFD.cjs} +3 -3
  118. package/dist/{chunk-VICGQC6G.cjs.map → chunk-5EAVXFFD.cjs.map} +1 -1
  119. package/dist/{chunk-OYGFMXAA.js → chunk-5N7347MI.js} +3 -3
  120. package/dist/{chunk-OYGFMXAA.js.map → chunk-5N7347MI.js.map} +1 -1
  121. package/dist/{chunk-VJN637MT.js → chunk-5PREWYTB.js} +3 -3
  122. package/dist/{chunk-VJN637MT.js.map → chunk-5PREWYTB.js.map} +1 -1
  123. package/dist/{chunk-77BVQNAQ.js → chunk-5UOBYRYJ.js} +3 -3
  124. package/dist/{chunk-77BVQNAQ.js.map → chunk-5UOBYRYJ.js.map} +1 -1
  125. package/dist/{chunk-BBPNQ44M.js → chunk-6GNFRP2H.js} +3 -3
  126. package/dist/{chunk-BBPNQ44M.js.map → chunk-6GNFRP2H.js.map} +1 -1
  127. package/dist/{chunk-TZSWDH5T.cjs → chunk-7JYI5THC.cjs} +3 -3
  128. package/dist/{chunk-TZSWDH5T.cjs.map → chunk-7JYI5THC.cjs.map} +1 -1
  129. package/dist/chunk-7T2SLRNL.cjs +140 -0
  130. package/dist/chunk-7T2SLRNL.cjs.map +1 -0
  131. package/dist/chunk-7YQWG7HR.cjs +45 -0
  132. package/dist/chunk-7YQWG7HR.cjs.map +1 -0
  133. package/dist/chunk-AGN3JSUH.cjs +209 -0
  134. package/dist/chunk-AGN3JSUH.cjs.map +1 -0
  135. package/dist/{chunk-CCBHZYE6.cjs → chunk-AR4M7QGF.cjs} +7 -7
  136. package/dist/{chunk-CCBHZYE6.cjs.map → chunk-AR4M7QGF.cjs.map} +1 -1
  137. package/dist/{chunk-K7PVJLW4.cjs → chunk-AWLBLRQX.cjs} +5 -5
  138. package/dist/{chunk-K7PVJLW4.cjs.map → chunk-AWLBLRQX.cjs.map} +1 -1
  139. package/dist/{chunk-PBBHUUXU.cjs → chunk-B5JH7NRZ.cjs} +3 -3
  140. package/dist/{chunk-PBBHUUXU.cjs.map → chunk-B5JH7NRZ.cjs.map} +1 -1
  141. package/dist/{chunk-Z5X5AMLA.cjs → chunk-CALRTZZ7.cjs} +3 -3
  142. package/dist/{chunk-Z5X5AMLA.cjs.map → chunk-CALRTZZ7.cjs.map} +1 -1
  143. package/dist/{chunk-H6FCIJOP.js → chunk-DBJIK4JE.js} +3 -3
  144. package/dist/{chunk-H6FCIJOP.js.map → chunk-DBJIK4JE.js.map} +1 -1
  145. package/dist/{chunk-QESLHLTG.cjs → chunk-EHO2JH2L.cjs} +4 -4
  146. package/dist/{chunk-QESLHLTG.cjs.map → chunk-EHO2JH2L.cjs.map} +1 -1
  147. package/dist/{chunk-WNGG25QX.js → chunk-FFZLSY2N.js} +3 -3
  148. package/dist/{chunk-WNGG25QX.js.map → chunk-FFZLSY2N.js.map} +1 -1
  149. package/dist/{chunk-AEJJGUEN.cjs → chunk-GOIQR4OH.cjs} +3 -3
  150. package/dist/{chunk-AEJJGUEN.cjs.map → chunk-GOIQR4OH.cjs.map} +1 -1
  151. package/dist/{chunk-Z7P6QGMT.js → chunk-GR5STMOA.js} +3 -3
  152. package/dist/{chunk-Z7P6QGMT.js.map → chunk-GR5STMOA.js.map} +1 -1
  153. package/dist/{chunk-URF6RBW6.cjs → chunk-HNVRMOL3.cjs} +3 -3
  154. package/dist/{chunk-URF6RBW6.cjs.map → chunk-HNVRMOL3.cjs.map} +1 -1
  155. package/dist/{chunk-RPD2OIIP.js → chunk-I2HHC6QW.js} +4 -4
  156. package/dist/{chunk-RPD2OIIP.js.map → chunk-I2HHC6QW.js.map} +1 -1
  157. package/dist/{chunk-AXMEZGEG.cjs → chunk-IZDJCEMF.cjs} +3 -3
  158. package/dist/{chunk-AXMEZGEG.cjs.map → chunk-IZDJCEMF.cjs.map} +1 -1
  159. package/dist/{chunk-V34OPWKZ.js → chunk-JSDQVVQB.js} +3 -3
  160. package/dist/{chunk-V34OPWKZ.js.map → chunk-JSDQVVQB.js.map} +1 -1
  161. package/dist/{chunk-QTGDYQOT.cjs → chunk-LLNEDEST.cjs} +4 -4
  162. package/dist/{chunk-QTGDYQOT.cjs.map → chunk-LLNEDEST.cjs.map} +1 -1
  163. package/dist/{chunk-C5TGQ7CV.cjs → chunk-MFWOBALK.cjs} +3 -3
  164. package/dist/{chunk-C5TGQ7CV.cjs.map → chunk-MFWOBALK.cjs.map} +1 -1
  165. package/dist/{chunk-LDENBYRC.cjs → chunk-MKR4X57L.cjs} +3 -3
  166. package/dist/{chunk-LDENBYRC.cjs.map → chunk-MKR4X57L.cjs.map} +1 -1
  167. package/dist/{chunk-LSLYY5FN.js → chunk-MTCLJHXU.js} +5 -5
  168. package/dist/{chunk-LSLYY5FN.js.map → chunk-MTCLJHXU.js.map} +1 -1
  169. package/dist/{chunk-JKLQOB2F.cjs → chunk-MUFMJPRT.cjs} +3 -3
  170. package/dist/{chunk-JKLQOB2F.cjs.map → chunk-MUFMJPRT.cjs.map} +1 -1
  171. package/dist/{chunk-OEHCA5IV.js → chunk-NGQDVJH3.js} +4 -4
  172. package/dist/{chunk-OEHCA5IV.js.map → chunk-NGQDVJH3.js.map} +1 -1
  173. package/dist/{chunk-7H453VPW.cjs → chunk-NQQWCIE6.cjs} +3 -3
  174. package/dist/{chunk-7H453VPW.cjs.map → chunk-NQQWCIE6.cjs.map} +1 -1
  175. package/dist/{chunk-ZWP4LSS3.js → chunk-NS3C2ZSE.js} +3 -3
  176. package/dist/{chunk-ZWP4LSS3.js.map → chunk-NS3C2ZSE.js.map} +1 -1
  177. package/dist/{chunk-HKAQILD2.cjs → chunk-O2HMH5BI.cjs} +4 -4
  178. package/dist/{chunk-HKAQILD2.cjs.map → chunk-O2HMH5BI.cjs.map} +1 -1
  179. package/dist/chunk-OWNVDXRQ.js +42 -0
  180. package/dist/chunk-OWNVDXRQ.js.map +1 -0
  181. package/dist/{chunk-3UFU63X7.cjs → chunk-OZVPJWXO.cjs} +3 -3
  182. package/dist/{chunk-3UFU63X7.cjs.map → chunk-OZVPJWXO.cjs.map} +1 -1
  183. package/dist/{chunk-M6CGYGEO.js → chunk-Q2EXOT4B.js} +3 -3
  184. package/dist/{chunk-M6CGYGEO.js.map → chunk-Q2EXOT4B.js.map} +1 -1
  185. package/dist/{chunk-7U6I44RV.cjs → chunk-Q7CDWNM6.cjs} +3 -3
  186. package/dist/{chunk-7U6I44RV.cjs.map → chunk-Q7CDWNM6.cjs.map} +1 -1
  187. package/dist/{chunk-437LB2V4.js → chunk-QJGKI2BD.js} +3 -3
  188. package/dist/{chunk-437LB2V4.js.map → chunk-QJGKI2BD.js.map} +1 -1
  189. package/dist/chunk-RFU5HN4E.js +149 -0
  190. package/dist/chunk-RFU5HN4E.js.map +1 -0
  191. package/dist/{chunk-IKI5CS4L.cjs → chunk-RIDCBNCM.cjs} +4 -4
  192. package/dist/{chunk-IKI5CS4L.cjs.map → chunk-RIDCBNCM.cjs.map} +1 -1
  193. package/dist/{chunk-OPTTHURA.cjs → chunk-RSZNFKCQ.cjs} +3 -3
  194. package/dist/{chunk-OPTTHURA.cjs.map → chunk-RSZNFKCQ.cjs.map} +1 -1
  195. package/dist/{chunk-EPFYIR63.cjs → chunk-RVSWH4RH.cjs} +7 -7
  196. package/dist/{chunk-EPFYIR63.cjs.map → chunk-RVSWH4RH.cjs.map} +1 -1
  197. package/dist/{chunk-TWBJCFEJ.cjs → chunk-SVVB6POY.cjs} +4 -4
  198. package/dist/{chunk-TWBJCFEJ.cjs.map → chunk-SVVB6POY.cjs.map} +1 -1
  199. package/dist/{chunk-QPZZNSRB.js → chunk-TMZVX6NO.js} +4 -4
  200. package/dist/{chunk-QPZZNSRB.js.map → chunk-TMZVX6NO.js.map} +1 -1
  201. package/dist/{chunk-YEOARJKR.cjs → chunk-TQLCIXCK.cjs} +3 -3
  202. package/dist/{chunk-YEOARJKR.cjs.map → chunk-TQLCIXCK.cjs.map} +1 -1
  203. package/dist/{chunk-GIVMKGZN.js → chunk-TY5EAKEI.js} +3 -3
  204. package/dist/{chunk-GIVMKGZN.js.map → chunk-TY5EAKEI.js.map} +1 -1
  205. package/dist/{chunk-4MR4GVTD.js → chunk-U4K7HOMW.js} +31 -5
  206. package/dist/chunk-U4K7HOMW.js.map +1 -0
  207. package/dist/{chunk-IWVKITPN.js → chunk-U5BZ7E3F.js} +3 -3
  208. package/dist/{chunk-IWVKITPN.js.map → chunk-U5BZ7E3F.js.map} +1 -1
  209. package/dist/{chunk-3WAFIUDQ.js → chunk-UQB5OHMO.js} +3 -3
  210. package/dist/{chunk-3WAFIUDQ.js.map → chunk-UQB5OHMO.js.map} +1 -1
  211. package/dist/{chunk-ZVCMXDTP.js → chunk-URLSZPS5.js} +5 -5
  212. package/dist/{chunk-ZVCMXDTP.js.map → chunk-URLSZPS5.js.map} +1 -1
  213. package/dist/{chunk-I7SSCSFH.js → chunk-W6I67HQQ.js} +3 -3
  214. package/dist/{chunk-I7SSCSFH.js.map → chunk-W6I67HQQ.js.map} +1 -1
  215. package/dist/{chunk-NSUD5B22.js → chunk-WBMF7WM3.js} +3 -3
  216. package/dist/{chunk-NSUD5B22.js.map → chunk-WBMF7WM3.js.map} +1 -1
  217. package/dist/{chunk-4GT5TOHP.js → chunk-WDBJVKSR.js} +3 -3
  218. package/dist/{chunk-4GT5TOHP.js.map → chunk-WDBJVKSR.js.map} +1 -1
  219. package/dist/{chunk-TYQ5CN2C.js → chunk-WQFC5EMC.js} +4 -4
  220. package/dist/{chunk-TYQ5CN2C.js.map → chunk-WQFC5EMC.js.map} +1 -1
  221. package/dist/{chunk-IFERLHCL.cjs → chunk-WREHBIJ5.cjs} +10 -10
  222. package/dist/{chunk-IFERLHCL.cjs.map → chunk-WREHBIJ5.cjs.map} +1 -1
  223. package/dist/chunk-WZ73TWB2.cjs +174 -0
  224. package/dist/chunk-WZ73TWB2.cjs.map +1 -0
  225. package/dist/chunk-XDFZRV3V.js +184 -0
  226. package/dist/chunk-XDFZRV3V.js.map +1 -0
  227. package/dist/{chunk-F7HW2PYR.cjs → chunk-XUT2Z2L6.cjs} +3 -3
  228. package/dist/{chunk-F7HW2PYR.cjs.map → chunk-XUT2Z2L6.cjs.map} +1 -1
  229. package/dist/{chunk-55NTFU7Y.js → chunk-XZ22B3NW.js} +6 -6
  230. package/dist/{chunk-55NTFU7Y.js.map → chunk-XZ22B3NW.js.map} +1 -1
  231. package/dist/{chunk-K5MHL732.js → chunk-YXKJOPYT.js} +4 -4
  232. package/dist/{chunk-K5MHL732.js.map → chunk-YXKJOPYT.js.map} +1 -1
  233. package/dist/{chunk-IDM6JJLP.cjs → chunk-YZ2I7CDF.cjs} +3 -3
  234. package/dist/{chunk-IDM6JJLP.cjs.map → chunk-YZ2I7CDF.cjs.map} +1 -1
  235. package/dist/index.cjs +142 -118
  236. package/dist/index.cjs.map +1 -1
  237. package/dist/index.d.cts +5 -1
  238. package/dist/index.d.ts +5 -1
  239. package/dist/index.js +35 -31
  240. package/dist/index.js.map +1 -1
  241. package/dist/styles.css +26 -19
  242. package/dist/{tokens-HWQ7KWPG.css → tokens-BIIUTPKN.css} +17 -9
  243. package/dist/tokens.css +17 -9
  244. package/docs/llms/accordion.md +66 -0
  245. package/docs/llms/alert.md +64 -0
  246. package/docs/llms/avatar.md +55 -0
  247. package/docs/llms/badge.md +41 -0
  248. package/docs/llms/button.md +122 -0
  249. package/docs/llms/calendar.md +44 -0
  250. package/docs/llms/card.md +68 -0
  251. package/docs/llms/cascader.md +33 -0
  252. package/docs/llms/checkbox.md +41 -0
  253. package/docs/llms/colorpicker.md +82 -0
  254. package/docs/llms/commandpalette.md +58 -0
  255. package/docs/llms/contextmenu.md +55 -0
  256. package/docs/llms/divider.md +69 -0
  257. package/docs/llms/drawer.md +70 -0
  258. package/docs/llms/empty.md +52 -0
  259. package/docs/llms/icon.md +34 -0
  260. package/docs/llms/image.md +39 -0
  261. package/docs/llms/input.md +127 -0
  262. package/docs/llms/intro.md +6 -0
  263. package/docs/llms/list.md +41 -0
  264. package/docs/llms/modal.md +89 -0
  265. package/docs/llms/pagination.md +82 -0
  266. package/docs/llms/popover.md +34 -0
  267. package/docs/llms/progress.md +58 -0
  268. package/docs/llms/radio.md +43 -0
  269. package/docs/llms/select.md +99 -0
  270. package/docs/llms/sidebar.md +43 -0
  271. package/docs/llms/skeleton.md +88 -0
  272. package/docs/llms/slider.md +72 -0
  273. package/docs/llms/spinner.md +58 -0
  274. package/docs/llms/splitter.md +63 -0
  275. package/docs/llms/statusbar.md +53 -0
  276. package/docs/llms/switch.md +60 -0
  277. package/docs/llms/table.md +188 -0
  278. package/docs/llms/tablepro.md +56 -0
  279. package/docs/llms/tabs.md +50 -0
  280. package/docs/llms/tag.md +77 -0
  281. package/docs/llms/theme.md +165 -0
  282. package/docs/llms/titlebar.md +40 -0
  283. package/docs/llms/toast.md +51 -0
  284. package/docs/llms/tooltip.md +38 -0
  285. package/docs/llms/typography.md +103 -0
  286. package/docs/llms/windowcontrols.md +31 -0
  287. package/docs/llms.md +101 -0
  288. package/package.json +8 -2
  289. package/dist/chunk-4MR4GVTD.js.map +0 -1
  290. package/dist/chunk-RDLPX7RK.cjs.map +0 -1
@@ -0,0 +1,140 @@
1
+ 'use strict';
2
+
3
+ require('./tokens-BIIUTPKN.css');
4
+ require('./shared-NJHRNLRH.css');
5
+ require('./Splitter-DHNOY4NC.css');
6
+ var React = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ // src/components/Splitter/Splitter.tsx
30
+ var Splitter = ({
31
+ direction = "horizontal",
32
+ defaultSize = 240,
33
+ size,
34
+ onResize,
35
+ onResizeEnd,
36
+ min = 80,
37
+ max = Infinity,
38
+ step = 16,
39
+ children,
40
+ className = "",
41
+ handleClassName = ""
42
+ }) => {
43
+ const isControlled = size !== void 0;
44
+ const [inner, setInner] = React__namespace.useState(defaultSize);
45
+ const current = isControlled ? size : inner;
46
+ const containerRef = React__namespace.useRef(null);
47
+ const [dragging, setDragging] = React__namespace.useState(false);
48
+ const clamp = React__namespace.useCallback(
49
+ (n) => {
50
+ const el = containerRef.current;
51
+ const bound = el ? direction === "horizontal" ? el.clientWidth : el.clientHeight : Infinity;
52
+ return Math.max(min, Math.min(Math.min(max, Math.max(0, bound - 24)), n));
53
+ },
54
+ [direction, min, max]
55
+ );
56
+ const commit = React__namespace.useCallback(
57
+ (n) => {
58
+ const clamped = clamp(n);
59
+ if (!isControlled) setInner(clamped);
60
+ onResize?.(clamped);
61
+ return clamped;
62
+ },
63
+ [clamp, isControlled, onResize]
64
+ );
65
+ const onPointerDown = (e) => {
66
+ if (e.button !== 0) return;
67
+ e.preventDefault();
68
+ const el = containerRef.current;
69
+ if (!el) return;
70
+ const rect = el.getBoundingClientRect();
71
+ setDragging(true);
72
+ e.target.setPointerCapture?.(e.pointerId);
73
+ let latest = current;
74
+ const move = (ev) => {
75
+ const next = direction === "horizontal" ? ev.clientX - rect.left : ev.clientY - rect.top;
76
+ latest = commit(next);
77
+ };
78
+ const up = () => {
79
+ setDragging(false);
80
+ onResizeEnd?.(latest);
81
+ window.removeEventListener("pointermove", move);
82
+ window.removeEventListener("pointerup", up);
83
+ };
84
+ window.addEventListener("pointermove", move);
85
+ window.addEventListener("pointerup", up);
86
+ };
87
+ const onKeyDown = (e) => {
88
+ const inc = (n) => commit(current + n);
89
+ if (direction === "horizontal") {
90
+ if (e.key === "ArrowLeft") {
91
+ e.preventDefault();
92
+ inc(-step);
93
+ }
94
+ if (e.key === "ArrowRight") {
95
+ e.preventDefault();
96
+ inc(step);
97
+ }
98
+ } else {
99
+ if (e.key === "ArrowUp") {
100
+ e.preventDefault();
101
+ inc(-step);
102
+ }
103
+ if (e.key === "ArrowDown") {
104
+ e.preventDefault();
105
+ inc(step);
106
+ }
107
+ }
108
+ };
109
+ const firstStyle = direction === "horizontal" ? { width: current } : { height: current };
110
+ return /* @__PURE__ */ jsxRuntime.jsxs(
111
+ "div",
112
+ {
113
+ ref: containerRef,
114
+ className: `splitter ${direction} ${dragging ? "dragging" : ""} ${className}`,
115
+ children: [
116
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "splitter-panel first", style: firstStyle, children: children[0] }),
117
+ /* @__PURE__ */ jsxRuntime.jsx(
118
+ "div",
119
+ {
120
+ role: "separator",
121
+ tabIndex: 0,
122
+ "aria-orientation": direction === "horizontal" ? "vertical" : "horizontal",
123
+ "aria-valuenow": current,
124
+ "aria-valuemin": min,
125
+ "aria-valuemax": Number.isFinite(max) ? max : void 0,
126
+ className: `splitter-handle ${handleClassName}`,
127
+ onPointerDown,
128
+ onKeyDown,
129
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "splitter-handle-grip", "aria-hidden": true })
130
+ }
131
+ ),
132
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "splitter-panel second", children: children[1] })
133
+ ]
134
+ }
135
+ );
136
+ };
137
+
138
+ exports.Splitter = Splitter;
139
+ //# sourceMappingURL=chunk-7T2SLRNL.cjs.map
140
+ //# sourceMappingURL=chunk-7T2SLRNL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Splitter/Splitter.tsx"],"names":["React","jsxs","jsx"],"mappings":"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","file":"chunk-7T2SLRNL.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Splitter.css\";\nimport * as React from \"react\";\n\nexport type SplitterDirection = \"horizontal\" | \"vertical\";\n\nexport interface SplitterProps {\n /**\n * Layout direction.\n * - `\"horizontal\"` (default) — children placed left/right, handle is a vertical bar.\n * - `\"vertical\"` — children placed top/bottom, handle is a horizontal bar.\n */\n direction?: SplitterDirection;\n /** Uncontrolled initial size (px) of the first panel. */\n defaultSize?: number;\n /** Controlled size (px) of the first panel. */\n size?: number;\n /** Fires while the user drags. */\n onResize?: (size: number) => void;\n /** Fires once when the drag ends. */\n onResizeEnd?: (size: number) => void;\n /** Minimum size (px) of the first panel. Default 80. */\n min?: number;\n /** Maximum size (px) of the first panel. Default Infinity. */\n max?: number;\n /** Keyboard step in px. Default 16. */\n step?: number;\n /** Exactly two children: the two panels. */\n children: [React.ReactNode, React.ReactNode];\n className?: string;\n /** Extra className on the drag handle. */\n handleClassName?: string;\n}\n\n/**\n * `Splitter` — draggable split between two panels. Keyboard-accessible.\n *\n * @example\n * ```tsx\n * <Splitter defaultSize={240} min={160} max={400}>\n * <Sidebar ... />\n * <main>...</main>\n * </Splitter>\n * ```\n */\nexport const Splitter: React.FC<SplitterProps> = ({\n direction = \"horizontal\",\n defaultSize = 240,\n size,\n onResize,\n onResizeEnd,\n min = 80,\n max = Infinity,\n step = 16,\n children,\n className = \"\",\n handleClassName = \"\",\n}) => {\n const isControlled = size !== undefined;\n const [inner, setInner] = React.useState(defaultSize);\n const current = isControlled ? (size as number) : inner;\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [dragging, setDragging] = React.useState(false);\n\n const clamp = React.useCallback(\n (n: number) => {\n const el = containerRef.current;\n const bound = el\n ? direction === \"horizontal\"\n ? el.clientWidth\n : el.clientHeight\n : Infinity;\n return Math.max(min, Math.min(Math.min(max, Math.max(0, bound - 24)), n));\n },\n [direction, min, max]\n );\n\n const commit = React.useCallback(\n (n: number) => {\n const clamped = clamp(n);\n if (!isControlled) setInner(clamped);\n onResize?.(clamped);\n return clamped;\n },\n [clamp, isControlled, onResize]\n );\n\n const onPointerDown = (e: React.PointerEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setDragging(true);\n (e.target as Element).setPointerCapture?.(e.pointerId);\n\n let latest = current;\n const move = (ev: PointerEvent) => {\n const next =\n direction === \"horizontal\" ? ev.clientX - rect.left : ev.clientY - rect.top;\n latest = commit(next);\n };\n const up = () => {\n setDragging(false);\n onResizeEnd?.(latest);\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const inc = (n: number) => commit(current + n);\n if (direction === \"horizontal\") {\n if (e.key === \"ArrowLeft\") { e.preventDefault(); inc(-step); }\n if (e.key === \"ArrowRight\") { e.preventDefault(); inc(step); }\n } else {\n if (e.key === \"ArrowUp\") { e.preventDefault(); inc(-step); }\n if (e.key === \"ArrowDown\") { e.preventDefault(); inc(step); }\n }\n };\n\n const firstStyle: React.CSSProperties =\n direction === \"horizontal\" ? { width: current } : { height: current };\n\n return (\n <div\n ref={containerRef}\n className={`splitter ${direction} ${dragging ? \"dragging\" : \"\"} ${className}`}\n >\n <div className=\"splitter-panel first\" style={firstStyle}>\n {children[0]}\n </div>\n <div\n role=\"separator\"\n tabIndex={0}\n aria-orientation={direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n aria-valuenow={current}\n aria-valuemin={min}\n aria-valuemax={Number.isFinite(max) ? max : undefined}\n className={`splitter-handle ${handleClassName}`}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n >\n <span className=\"splitter-handle-grip\" aria-hidden />\n </div>\n <div className=\"splitter-panel second\">{children[1]}</div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ require('./tokens-BIIUTPKN.css');
4
+ require('./shared-NJHRNLRH.css');
5
+ require('./StatusBar-CDS2GPSI.css');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ // src/components/StatusBar/StatusBar.tsx
9
+ var StatusBarItem = ({
10
+ icon,
11
+ tone = "default",
12
+ onClick,
13
+ className = "",
14
+ children,
15
+ ...rest
16
+ }) => {
17
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
18
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "statusbar-item-icon", children: icon }),
19
+ children != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "statusbar-item-label", children })
20
+ ] });
21
+ const cls = `statusbar-item tone-${tone} ${onClick ? "clickable" : ""} ${className}`;
22
+ if (onClick) {
23
+ return /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: cls, onClick, children: content });
24
+ }
25
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cls, ...rest, children: content });
26
+ };
27
+ var StatusBar = ({
28
+ left,
29
+ center,
30
+ right,
31
+ className = "",
32
+ children,
33
+ ...rest
34
+ }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `statusbar ${className}`, role: "status", ...rest, children: [
35
+ left != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "statusbar-section left", children: left }),
36
+ center != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "statusbar-section center", children: center }),
37
+ children,
38
+ right != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "statusbar-section right", children: right })
39
+ ] });
40
+ StatusBar.Item = StatusBarItem;
41
+
42
+ exports.StatusBar = StatusBar;
43
+ exports.StatusBarItem = StatusBarItem;
44
+ //# sourceMappingURL=chunk-7YQWG7HR.cjs.map
45
+ //# sourceMappingURL=chunk-7YQWG7HR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/StatusBar/StatusBar.tsx"],"names":["jsxs","Fragment","jsx"],"mappings":";;;;;;;;AAgBO,IAAM,gBAA8C,CAAC;AAAA,EAC1D,IAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,0BACJA,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,oBAAQC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IACpD,YAAY,IAAA,oBAAQA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAwB,QAAA,EAAS;AAAA,GAAA,EACxE,CAAA;AAEF,EAAA,MAAM,GAAA,GAAM,uBAAuB,IAAI,CAAA,CAAA,EAAI,UAAU,WAAA,GAAc,EAAE,IAAI,SAAS,CAAA,CAAA;AAClF,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,sCACG,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,GAAA,EAAK,SACnC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,EAEJ;AACA,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAM,GAAG,MACtB,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AAwBO,IAAM,YAAuE,CAAC;AAAA,EACnF,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEF,eAAA,CAAC,SAAI,SAAA,EAAW,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,IAAA,EAAK,QAAA,EAAU,GAAG,IAAA,EACzD,QAAA,EAAA;AAAA,EAAA,IAAA,IAAQ,IAAA,oBAAQE,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAA0B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,EAC9D,UAAU,IAAA,oBAAQA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAA4B,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,EACpE,QAAA;AAAA,EACA,SAAS,IAAA,oBAAQA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM;AAAA,CAAA,EACpE;AAGF,SAAA,CAAU,IAAA,GAAO,aAAA","file":"chunk-7YQWG7HR.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./StatusBar.css\";\nimport * as React from \"react\";\n\nexport interface StatusBarItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Optional leading node (usually an `<Icon />`). */\n icon?: React.ReactNode;\n /** Visual tone — shifts color only. */\n tone?: \"default\" | \"muted\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** Makes the item clickable (also renders as `<button>` when `onClick` is set). */\n onClick?: (e: React.MouseEvent<HTMLDivElement | HTMLButtonElement>) => void;\n children?: React.ReactNode;\n}\n\n/** `StatusBar.Item` — one inline slot. Put icon + text inside. */\nexport const StatusBarItem: React.FC<StatusBarItemProps> = ({\n icon,\n tone = \"default\",\n onClick,\n className = \"\",\n children,\n ...rest\n}) => {\n const content = (\n <>\n {icon && <span className=\"statusbar-item-icon\">{icon}</span>}\n {children != null && <span className=\"statusbar-item-label\">{children}</span>}\n </>\n );\n const cls = `statusbar-item tone-${tone} ${onClick ? \"clickable\" : \"\"} ${className}`;\n if (onClick) {\n return (\n <button type=\"button\" className={cls} onClick={onClick as React.MouseEventHandler<HTMLButtonElement>}>\n {content}\n </button>\n );\n }\n return (\n <div className={cls} {...rest}>\n {content}\n </div>\n );\n};\n\nexport interface StatusBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Left-aligned slot. */\n left?: React.ReactNode;\n /** Center slot — absolutely positioned, stays centered regardless of side widths. */\n center?: React.ReactNode;\n /** Right-aligned slot. */\n right?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * `StatusBar` — thin bottom bar for app state (branch, line/col, sync, etc.).\n * Pair with `TitleBar` to bracket the window chrome.\n *\n * @example\n * ```tsx\n * <StatusBar\n * left={<StatusBar.Item icon={<Icon name=\"check\" size={12} />} tone=\"success\">Ready</StatusBar.Item>}\n * right={<StatusBar.Item tone=\"muted\">UTF-8</StatusBar.Item>}\n * />\n * ```\n */\nexport const StatusBar: React.FC<StatusBarProps> & { Item: typeof StatusBarItem } = ({\n left,\n center,\n right,\n className = \"\",\n children,\n ...rest\n}) => (\n <div className={`statusbar ${className}`} role=\"status\" {...rest}>\n {left != null && <div className=\"statusbar-section left\">{left}</div>}\n {center != null && <div className=\"statusbar-section center\">{center}</div>}\n {children}\n {right != null && <div className=\"statusbar-section right\">{right}</div>}\n </div>\n);\n\nStatusBar.Item = StatusBarItem;\n"]}
@@ -0,0 +1,209 @@
1
+ 'use strict';
2
+
3
+ var chunkMKR4X57L_cjs = require('./chunk-MKR4X57L.cjs');
4
+ require('./tokens-BIIUTPKN.css');
5
+ require('./shared-NJHRNLRH.css');
6
+ require('./CommandPalette-T45DBMPY.css');
7
+ var React = require('react');
8
+ var ReactDOM = require('react-dom');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ function _interopNamespace(e) {
14
+ if (e && e.__esModule) return e;
15
+ var n = Object.create(null);
16
+ if (e) {
17
+ Object.keys(e).forEach(function (k) {
18
+ if (k !== 'default') {
19
+ var d = Object.getOwnPropertyDescriptor(e, k);
20
+ Object.defineProperty(n, k, d.get ? d : {
21
+ enumerable: true,
22
+ get: function () { return e[k]; }
23
+ });
24
+ }
25
+ });
26
+ }
27
+ n.default = e;
28
+ return Object.freeze(n);
29
+ }
30
+
31
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
32
+ var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
33
+
34
+ var DEFAULT_FILTER = (item, q) => {
35
+ if (!q) return true;
36
+ const hay = [item.label, ...item.keywords ?? []].join(" ").toLowerCase();
37
+ const needle = q.toLowerCase();
38
+ let i = 0;
39
+ for (const ch of hay) {
40
+ if (ch === needle[i]) i++;
41
+ if (i === needle.length) return true;
42
+ }
43
+ return i === needle.length;
44
+ };
45
+ var CommandPalette = ({
46
+ open,
47
+ onOpenChange,
48
+ items,
49
+ placeholder = "\u641C\u7D22\u547D\u4EE4\u2026",
50
+ filter = DEFAULT_FILTER,
51
+ emptyText = "\u6682\u65E0\u5339\u914D\u7ED3\u679C",
52
+ resetOnOpen = true,
53
+ footer,
54
+ className = ""
55
+ }) => {
56
+ const [query, setQuery] = React__namespace.useState("");
57
+ const [active, setActive] = React__namespace.useState(0);
58
+ const inputRef = React__namespace.useRef(null);
59
+ const listRef = React__namespace.useRef(null);
60
+ const filtered = React__namespace.useMemo(() => items.filter((it) => filter(it, query)), [items, query, filter]);
61
+ const grouped = React__namespace.useMemo(() => {
62
+ const order = [];
63
+ const map = /* @__PURE__ */ new Map();
64
+ for (const it of filtered) {
65
+ const g = it.group ?? "";
66
+ if (!map.has(g)) {
67
+ map.set(g, []);
68
+ order.push(g);
69
+ }
70
+ map.get(g).push(it);
71
+ }
72
+ return order.map((g) => ({ group: g, items: map.get(g) }));
73
+ }, [filtered]);
74
+ const close = React__namespace.useCallback(() => onOpenChange?.(false), [onOpenChange]);
75
+ React__namespace.useEffect(() => {
76
+ if (!open) return;
77
+ if (resetOnOpen) setQuery("");
78
+ setActive(0);
79
+ const id = requestAnimationFrame(() => inputRef.current?.focus());
80
+ return () => cancelAnimationFrame(id);
81
+ }, [open, resetOnOpen]);
82
+ React__namespace.useEffect(() => {
83
+ setActive((a) => filtered.length === 0 ? 0 : Math.min(a, filtered.length - 1));
84
+ }, [filtered.length]);
85
+ React__namespace.useEffect(() => {
86
+ const el = listRef.current?.querySelector(`[data-cmd-idx="${active}"]`);
87
+ el?.scrollIntoView({ block: "nearest" });
88
+ }, [active, filtered]);
89
+ const pick = (it) => {
90
+ if (it.disabled) return;
91
+ it.onSelect?.();
92
+ close();
93
+ };
94
+ const onKey = (e) => {
95
+ if (e.key === "Escape") {
96
+ e.preventDefault();
97
+ close();
98
+ return;
99
+ }
100
+ if (e.key === "ArrowDown") {
101
+ e.preventDefault();
102
+ setActive((a) => {
103
+ if (filtered.length === 0) return 0;
104
+ for (let n = 1; n <= filtered.length; n++) {
105
+ const i = (a + n) % filtered.length;
106
+ if (!filtered[i].disabled) return i;
107
+ }
108
+ return a;
109
+ });
110
+ }
111
+ if (e.key === "ArrowUp") {
112
+ e.preventDefault();
113
+ setActive((a) => {
114
+ if (filtered.length === 0) return 0;
115
+ for (let n = 1; n <= filtered.length; n++) {
116
+ const i = (a - n + filtered.length) % filtered.length;
117
+ if (!filtered[i].disabled) return i;
118
+ }
119
+ return a;
120
+ });
121
+ }
122
+ if (e.key === "Enter") {
123
+ const it = filtered[active];
124
+ if (it) {
125
+ e.preventDefault();
126
+ pick(it);
127
+ }
128
+ }
129
+ };
130
+ if (typeof document === "undefined" || !open) return null;
131
+ let flatIdx = -1;
132
+ return ReactDOM__default.default.createPortal(
133
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `cmdp-overlay ${className}`, onMouseDown: close, role: "presentation", children: /* @__PURE__ */ jsxRuntime.jsxs(
134
+ "div",
135
+ {
136
+ className: "cmdp-panel",
137
+ onMouseDown: (e) => e.stopPropagation(),
138
+ role: "dialog",
139
+ "aria-modal": true,
140
+ "aria-label": "\u547D\u4EE4\u9762\u677F",
141
+ children: [
142
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-search", children: /* @__PURE__ */ jsxRuntime.jsx(
143
+ chunkMKR4X57L_cjs.Input,
144
+ {
145
+ ref: inputRef,
146
+ size: "lg",
147
+ leadingIcon: "search",
148
+ placeholder,
149
+ value: query,
150
+ onChange: (v) => setQuery(v),
151
+ onKeyDown: onKey,
152
+ suffix: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "esc" })
153
+ }
154
+ ) }),
155
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: listRef, className: "cmdp-list", role: "listbox", children: grouped.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-empty", children: emptyText }) : grouped.map(({ group, items: gItems }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cmdp-group", children: [
156
+ group && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-group-head", children: group }),
157
+ gItems.map((it) => {
158
+ flatIdx += 1;
159
+ const i = flatIdx;
160
+ const isActive = i === active;
161
+ return /* @__PURE__ */ jsxRuntime.jsxs(
162
+ "button",
163
+ {
164
+ type: "button",
165
+ role: "option",
166
+ "aria-selected": isActive,
167
+ "data-cmd-idx": i,
168
+ disabled: it.disabled,
169
+ className: `cmdp-item ${isActive ? "active" : ""}`,
170
+ onMouseEnter: () => setActive(i),
171
+ onClick: () => pick(it),
172
+ children: [
173
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-icon", children: it.icon }),
174
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cmdp-labels", children: [
175
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-label", children: it.label }),
176
+ it.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-desc", children: it.description })
177
+ ] }),
178
+ it.shortcut && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-shortcut", children: it.shortcut })
179
+ ]
180
+ },
181
+ it.key
182
+ );
183
+ })
184
+ ] }, group || "_")) }),
185
+ footer === null ? null : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-footer", children: footer ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
186
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
187
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "\u2191" }),
188
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "\u2193" }),
189
+ " \u5207\u6362"
190
+ ] }),
191
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
192
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "\u23CE" }),
193
+ " \u6267\u884C"
194
+ ] }),
195
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
196
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cmdp-kbd", children: "esc" }),
197
+ " \u5173\u95ED"
198
+ ] })
199
+ ] }) })
200
+ ]
201
+ }
202
+ ) }),
203
+ document.body
204
+ );
205
+ };
206
+
207
+ exports.CommandPalette = CommandPalette;
208
+ //# sourceMappingURL=chunk-AGN3JSUH.cjs.map
209
+ //# sourceMappingURL=chunk-AGN3JSUH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/CommandPalette/CommandPalette.tsx"],"names":["React","ReactDOM","jsx","jsxs","Input","Fragment"],"mappings":"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","file":"chunk-AGN3JSUH.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./CommandPalette.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Input } from \"../Input\";\n\nexport interface CommandItem {\n key: string;\n /** Displayed label; also matched against the search query by default. */\n label: string;\n /** Optional secondary line — e.g. \"Open recent\". */\n description?: React.ReactNode;\n /** Leading icon. */\n icon?: React.ReactNode;\n /** Right-aligned shortcut hint, e.g. `\"⌘P\"`. */\n shortcut?: React.ReactNode;\n /** Extra search terms beyond `label`. */\n keywords?: string[];\n /** Group heading. Items sharing a `group` appear under one heading. */\n group?: string;\n /** Ignored by default filter — still shown. */\n disabled?: boolean;\n onSelect?: () => void;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange?: (open: boolean) => void;\n items: CommandItem[];\n placeholder?: string;\n /** Custom matcher. Return true to keep the item. */\n filter?: (item: CommandItem, query: string) => boolean;\n /** Shown when no item matches the query. */\n emptyText?: React.ReactNode;\n /** Reset the query to empty whenever the palette opens. Default true. */\n resetOnOpen?: boolean;\n /** Footer node. Pass `null` to hide. */\n footer?: React.ReactNode;\n className?: string;\n}\n\nconst DEFAULT_FILTER = (item: CommandItem, q: string) => {\n if (!q) return true;\n const hay = [item.label, ...(item.keywords ?? [])].join(\" \").toLowerCase();\n const needle = q.toLowerCase();\n // Simple subsequence match — each char of needle appears in order in haystack.\n let i = 0;\n for (const ch of hay) {\n if (ch === needle[i]) i++;\n if (i === needle.length) return true;\n }\n return i === needle.length;\n};\n\n/**\n * `CommandPalette` — ⌘K-style action launcher. Search + grouped items +\n * keyboard nav. Rendered into `document.body`.\n *\n * The parent controls `open` via state — wire `Cmd/Ctrl+K` to toggle.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n * React.useEffect(() => {\n * const h = (e: KeyboardEvent) => {\n * if ((e.metaKey || e.ctrlKey) && e.key === \"k\") { e.preventDefault(); setOpen(o => !o); }\n * };\n * window.addEventListener(\"keydown\", h);\n * return () => window.removeEventListener(\"keydown\", h);\n * }, []);\n *\n * <CommandPalette\n * open={open}\n * onOpenChange={setOpen}\n * items={[\n * { key: \"new\", label: \"新建文件\", icon: <Icon name=\"plus\" size={14} />, group: \"文件\", shortcut: \"⌘N\", onSelect: () => {} },\n * ...\n * ]}\n * />\n * ```\n */\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n open,\n onOpenChange,\n items,\n placeholder = \"搜索命令…\",\n filter = DEFAULT_FILTER,\n emptyText = \"暂无匹配结果\",\n resetOnOpen = true,\n footer,\n className = \"\",\n}) => {\n const [query, setQuery] = React.useState(\"\");\n const [active, setActive] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n\n const filtered = React.useMemo(() => items.filter((it) => filter(it, query)), [items, query, filter]);\n\n // Group items preserving the original order of first occurrence.\n const grouped = React.useMemo(() => {\n const order: string[] = [];\n const map = new Map<string, CommandItem[]>();\n for (const it of filtered) {\n const g = it.group ?? \"\";\n if (!map.has(g)) { map.set(g, []); order.push(g); }\n map.get(g)!.push(it);\n }\n return order.map((g) => ({ group: g, items: map.get(g)! }));\n }, [filtered]);\n\n const close = React.useCallback(() => onOpenChange?.(false), [onOpenChange]);\n\n // Reset & focus on open.\n React.useEffect(() => {\n if (!open) return;\n if (resetOnOpen) setQuery(\"\");\n setActive(0);\n const id = requestAnimationFrame(() => inputRef.current?.focus());\n return () => cancelAnimationFrame(id);\n }, [open, resetOnOpen]);\n\n // Clamp active when the filtered list shrinks.\n React.useEffect(() => {\n setActive((a) => (filtered.length === 0 ? 0 : Math.min(a, filtered.length - 1)));\n }, [filtered.length]);\n\n // Scroll active item into view.\n React.useEffect(() => {\n const el = listRef.current?.querySelector<HTMLElement>(`[data-cmd-idx=\"${active}\"]`);\n el?.scrollIntoView({ block: \"nearest\" });\n }, [active, filtered]);\n\n const pick = (it: CommandItem) => {\n if (it.disabled) return;\n it.onSelect?.();\n close();\n };\n\n const onKey = (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") { e.preventDefault(); close(); return; }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActive((a) => {\n if (filtered.length === 0) return 0;\n for (let n = 1; n <= filtered.length; n++) {\n const i = (a + n) % filtered.length;\n if (!filtered[i].disabled) return i;\n }\n return a;\n });\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActive((a) => {\n if (filtered.length === 0) return 0;\n for (let n = 1; n <= filtered.length; n++) {\n const i = (a - n + filtered.length) % filtered.length;\n if (!filtered[i].disabled) return i;\n }\n return a;\n });\n }\n if (e.key === \"Enter\") {\n const it = filtered[active];\n if (it) { e.preventDefault(); pick(it); }\n }\n };\n\n if (typeof document === \"undefined\" || !open) return null;\n\n // Build a flat index map so rendered list items know their position in `filtered`.\n let flatIdx = -1;\n\n return ReactDOM.createPortal(\n <div className={`cmdp-overlay ${className}`} onMouseDown={close} role=\"presentation\">\n <div\n className=\"cmdp-panel\"\n onMouseDown={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-label=\"命令面板\"\n >\n <div className=\"cmdp-search\">\n <Input\n ref={inputRef}\n size=\"lg\"\n leadingIcon=\"search\"\n placeholder={placeholder}\n value={query}\n onChange={(v) => setQuery(v)}\n onKeyDown={onKey}\n suffix={<span className=\"cmdp-kbd\">esc</span>}\n />\n </div>\n\n <div ref={listRef} className=\"cmdp-list\" role=\"listbox\">\n {grouped.length === 0 ? (\n <div className=\"cmdp-empty\">{emptyText}</div>\n ) : (\n grouped.map(({ group, items: gItems }) => (\n <div key={group || \"_\"} className=\"cmdp-group\">\n {group && <div className=\"cmdp-group-head\">{group}</div>}\n {gItems.map((it) => {\n flatIdx += 1;\n const i = flatIdx;\n const isActive = i === active;\n return (\n <button\n key={it.key}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n data-cmd-idx={i}\n disabled={it.disabled}\n className={`cmdp-item ${isActive ? \"active\" : \"\"}`}\n onMouseEnter={() => setActive(i)}\n onClick={() => pick(it)}\n >\n <span className=\"cmdp-icon\">{it.icon}</span>\n <span className=\"cmdp-labels\">\n <span className=\"cmdp-label\">{it.label}</span>\n {it.description && <span className=\"cmdp-desc\">{it.description}</span>}\n </span>\n {it.shortcut && <span className=\"cmdp-shortcut\">{it.shortcut}</span>}\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n\n {footer === null ? null : (\n <div className=\"cmdp-footer\">\n {footer ?? (\n <>\n <span><span className=\"cmdp-kbd\">↑</span><span className=\"cmdp-kbd\">↓</span> 切换</span>\n <span><span className=\"cmdp-kbd\">⏎</span> 执行</span>\n <span><span className=\"cmdp-kbd\">esc</span> 关闭</span>\n </>\n )}\n </div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkOPTTHURA_cjs = require('./chunk-OPTTHURA.cjs');
3
+ var chunkRSZNFKCQ_cjs = require('./chunk-RSZNFKCQ.cjs');
4
4
  var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
5
- require('./tokens-HWQ7KWPG.css');
5
+ require('./tokens-BIIUTPKN.css');
6
6
  require('./shared-NJHRNLRH.css');
7
- require('./Modal-N4YVLEWW.css');
7
+ require('./Modal-XSDMU4XJ.css');
8
8
  var React = require('react');
9
9
  var ReactDOM = require('react-dom');
10
10
  var jsxRuntime = require('react/jsx-runtime');
@@ -88,9 +88,9 @@ var Modal = ({
88
88
  if (!open && destroyOnClose) return null;
89
89
  const overlayStyle = zIndex != null ? { zIndex } : void 0;
90
90
  const defaultFooter = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
91
- /* @__PURE__ */ jsxRuntime.jsx(chunkOPTTHURA_cjs.Button, { variant: "ghost", onClick: handleCancel, ...cancelButtonProps, children: cancelText }),
91
+ /* @__PURE__ */ jsxRuntime.jsx(chunkRSZNFKCQ_cjs.Button, { variant: "ghost", onClick: handleCancel, ...cancelButtonProps, children: cancelText }),
92
92
  /* @__PURE__ */ jsxRuntime.jsx(
93
- chunkOPTTHURA_cjs.Button,
93
+ chunkRSZNFKCQ_cjs.Button,
94
94
  {
95
95
  variant: "primary",
96
96
  loading: confirmLoading,
@@ -146,5 +146,5 @@ var Modal = ({
146
146
  };
147
147
 
148
148
  exports.Modal = Modal;
149
- //# sourceMappingURL=chunk-CCBHZYE6.cjs.map
150
- //# sourceMappingURL=chunk-CCBHZYE6.cjs.map
149
+ //# sourceMappingURL=chunk-AR4M7QGF.cjs.map
150
+ //# sourceMappingURL=chunk-AR4M7QGF.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":["React","jsxs","Fragment","jsx","Button","ReactDOM","Icon"],"mappings":"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","file":"chunk-CCBHZYE6.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Modal.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface ModalProps {\n /** Whether the modal is visible. */\n open: boolean;\n /** Fired by mask click / close button / Esc. Also the fallback for cancel. */\n onClose?: () => void;\n /** Dedicated Cancel callback. Falls back to `onClose` when omitted. */\n onCancel?: () => void;\n /** Fired when the default OK button is clicked. */\n onOk?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Footer content. Pass `null` to hide the footer, or a custom node to\n * replace the default OK / Cancel buttons.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Show the close (×) button. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n /** Label for the default OK button. */\n okText?: React.ReactNode;\n /** Label for the default Cancel button. */\n cancelText?: React.ReactNode;\n /** Extra props forwarded to the default OK button. */\n okButtonProps?: Partial<ButtonProps>;\n /** Extra props forwarded to the default Cancel button. */\n cancelButtonProps?: Partial<ButtonProps>;\n /** Show a spinner on the OK button (e.g. while an async submit is running). */\n confirmLoading?: boolean;\n /**\n * When true the modal's children are unmounted every time it closes.\n * Default `false` — children stay mounted so internal state survives\n * reopens, matching antd's default.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Override the z-index of the overlay. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n onCancel,\n onOk,\n title,\n description,\n footer,\n children,\n width = 440,\n closable = true,\n closeIcon,\n maskClosable = true,\n escClosable = true,\n okText = \"确定\",\n cancelText = \"取消\",\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n const handleCancel = React.useCallback(() => {\n if (onCancel) onCancel();\n else onClose?.();\n }, [onCancel, onClose]);\n\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleCancel();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, handleCancel]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const overlayStyle: React.CSSProperties | undefined =\n zIndex != null ? { zIndex } : undefined;\n\n const defaultFooter = (\n <>\n <Button variant=\"ghost\" onClick={handleCancel} {...cancelButtonProps}>\n {cancelText}\n </Button>\n <Button\n variant=\"primary\"\n loading={confirmLoading}\n onClick={() => onOk?.()}\n {...okButtonProps}\n >\n {okText}\n </Button>\n </>\n );\n\n return ReactDOM.createPortal(\n <div\n className={`modal-overlay ${open ? \"\" : \"hidden\"} ${className}`}\n style={overlayStyle}\n onClick={() => maskClosable && handleCancel()}\n role=\"presentation\"\n >\n <div\n className=\"modal\"\n style={{ width }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-hidden={!open}\n >\n {(title || description || closable) && (\n <div className=\"modal-head\">\n <div className=\"modal-titles\">\n {title && <div className=\"modal-title\">{title}</div>}\n {description && <div className=\"modal-desc\">{description}</div>}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"modal-close\"\n onClick={handleCancel}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n )}\n <div className=\"modal-body\">{children}</div>\n {footer === null ? null : (\n <div className=\"modal-foot\">{footer ?? defaultFooter}</div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":["React","jsxs","Fragment","jsx","Button","ReactDOM","Icon"],"mappings":"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","file":"chunk-AR4M7QGF.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Modal.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface ModalProps {\n /** Whether the modal is visible. */\n open: boolean;\n /** Fired by mask click / close button / Esc. Also the fallback for cancel. */\n onClose?: () => void;\n /** Dedicated Cancel callback. Falls back to `onClose` when omitted. */\n onCancel?: () => void;\n /** Fired when the default OK button is clicked. */\n onOk?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Footer content. Pass `null` to hide the footer, or a custom node to\n * replace the default OK / Cancel buttons.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Show the close (×) button. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n /** Label for the default OK button. */\n okText?: React.ReactNode;\n /** Label for the default Cancel button. */\n cancelText?: React.ReactNode;\n /** Extra props forwarded to the default OK button. */\n okButtonProps?: Partial<ButtonProps>;\n /** Extra props forwarded to the default Cancel button. */\n cancelButtonProps?: Partial<ButtonProps>;\n /** Show a spinner on the OK button (e.g. while an async submit is running). */\n confirmLoading?: boolean;\n /**\n * When true the modal's children are unmounted every time it closes.\n * Default `false` — children stay mounted so internal state survives\n * reopens, matching antd's default.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Override the z-index of the overlay. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n onCancel,\n onOk,\n title,\n description,\n footer,\n children,\n width = 440,\n closable = true,\n closeIcon,\n maskClosable = true,\n escClosable = true,\n okText = \"确定\",\n cancelText = \"取消\",\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n}) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n const handleCancel = React.useCallback(() => {\n if (onCancel) onCancel();\n else onClose?.();\n }, [onCancel, onClose]);\n\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleCancel();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, handleCancel]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const overlayStyle: React.CSSProperties | undefined =\n zIndex != null ? { zIndex } : undefined;\n\n const defaultFooter = (\n <>\n <Button variant=\"ghost\" onClick={handleCancel} {...cancelButtonProps}>\n {cancelText}\n </Button>\n <Button\n variant=\"primary\"\n loading={confirmLoading}\n onClick={() => onOk?.()}\n {...okButtonProps}\n >\n {okText}\n </Button>\n </>\n );\n\n return ReactDOM.createPortal(\n <div\n className={`modal-overlay ${open ? \"\" : \"hidden\"} ${className}`}\n style={overlayStyle}\n onClick={() => maskClosable && handleCancel()}\n role=\"presentation\"\n >\n <div\n className=\"modal\"\n style={{ width }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal\n aria-hidden={!open}\n >\n {(title || description || closable) && (\n <div className=\"modal-head\">\n <div className=\"modal-titles\">\n {title && <div className=\"modal-title\">{title}</div>}\n {description && <div className=\"modal-desc\">{description}</div>}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"modal-close\"\n onClick={handleCancel}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n )}\n <div className=\"modal-body\">{children}</div>\n {footer === null ? null : (\n <div className=\"modal-foot\">{footer ?? defaultFooter}</div>\n )}\n </div>\n </div>,\n document.body\n );\n};\n"]}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkEPFYIR63_cjs = require('./chunk-EPFYIR63.cjs');
3
+ var chunkRVSWH4RH_cjs = require('./chunk-RVSWH4RH.cjs');
4
4
  var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
5
- require('./tokens-HWQ7KWPG.css');
5
+ require('./tokens-BIIUTPKN.css');
6
6
  require('./shared-NJHRNLRH.css');
7
7
  require('./Pagination-YIRYJUXP.css');
8
8
  var React = require('react');
@@ -123,7 +123,7 @@ var Pagination = ({
123
123
  }
124
124
  ),
125
125
  showSizeChanger && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pg-size-changer", children: /* @__PURE__ */ jsxRuntime.jsx(
126
- chunkEPFYIR63_cjs.Select,
126
+ chunkRVSWH4RH_cjs.Select,
127
127
  {
128
128
  value: pageSize,
129
129
  size: "sm",
@@ -152,5 +152,5 @@ var Pagination = ({
152
152
  };
153
153
 
154
154
  exports.Pagination = Pagination;
155
- //# sourceMappingURL=chunk-K7PVJLW4.cjs.map
156
- //# sourceMappingURL=chunk-K7PVJLW4.cjs.map
155
+ //# sourceMappingURL=chunk-AWLBLRQX.cjs.map
156
+ //# sourceMappingURL=chunk-AWLBLRQX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":["React","jsxs","jsx","Icon","Select"],"mappings":"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","file":"chunk-K7PVJLW4.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Pagination.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Select } from \"../Select\";\n\nexport interface PaginationProps {\n /** Total number of items. */\n total: number;\n /** Items per page. */\n pageSize?: number;\n /** Current page (1-indexed). */\n page?: number;\n defaultPage?: number;\n onChange?: (page: number) => void;\n /** Max visible page buttons (before ellipsis logic). */\n siblings?: number;\n /**\n * Render a \"跳至 N 页\" input to the right of the page buttons. Enter key commits\n * and clamps to `1..totalPages`.\n */\n showQuickJumper?: boolean;\n /**\n * Render a Select to let the user switch the page size. Resetting the size sends the\n * user back to page 1 and calls both `onShowSizeChange` and `onChange(1)`.\n */\n showSizeChanger?: boolean;\n /** Page size choices for `showSizeChanger`. Defaults to `[10, 20, 50, 100]`. */\n pageSizeOptions?: number[];\n /** Fires when the user picks a new page size via the size changer. */\n onShowSizeChange?: (current: number, size: number) => void;\n className?: string;\n}\n\nconst DEFAULT_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/** `Pagination` — page number controls. */\nexport const Pagination: React.FC<PaginationProps> = ({\n total,\n pageSize = 10,\n page,\n defaultPage = 1,\n onChange,\n siblings = 1,\n showQuickJumper = false,\n showSizeChanger = false,\n pageSizeOptions = DEFAULT_SIZE_OPTIONS,\n onShowSizeChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultPage);\n const isControlled = page !== undefined;\n const cur = isControlled ? page! : inner;\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const [jumpDraft, setJumpDraft] = React.useState(\"\");\n\n const go = (p: number) => {\n const next = Math.min(pages, Math.max(1, p));\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const handleJump = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== \"Enter\") return;\n const n = Number(jumpDraft);\n if (!Number.isFinite(n) || n < 1) {\n setJumpDraft(\"\");\n return;\n }\n go(Math.trunc(n));\n setJumpDraft(\"\");\n };\n\n const handleSizeChange = (size: number) => {\n onShowSizeChange?.(cur, size);\n // reset to page 1 — Ant Design parity\n if (!isControlled) setInner(1);\n onChange?.(1);\n };\n\n const range = (): (number | \"...\")[] => {\n const out: (number | \"...\")[] = [];\n const add = (n: number | \"...\") => out.push(n);\n const s = Math.max(2, cur - siblings);\n const e = Math.min(pages - 1, cur + siblings);\n add(1);\n if (s > 2) add(\"...\");\n for (let i = s; i <= e; i++) add(i);\n if (e < pages - 1) add(\"...\");\n if (pages > 1) add(pages);\n return out;\n };\n\n return (\n <div className={`pagination ${className}`}>\n <span className=\"pg-info\">\n 共 {total} 条 · 第 {cur} / {pages} 页\n </span>\n <div className=\"pg-controls\">\n <button\n type=\"button\"\n className={`pg ${cur === 1 ? \"disabled\" : \"\"}`}\n onClick={() => cur > 1 && go(cur - 1)}\n aria-label=\"Previous\"\n >\n <Icon name=\"chevLeft\" size={12} />\n </button>\n {range().map((p, i) =>\n p === \"...\" ? (\n <span key={`e${i}`} className=\"ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={`pg ${p === cur ? \"active\" : \"\"}`}\n onClick={() => go(p)}\n >\n {p}\n </button>\n )\n )}\n <button\n type=\"button\"\n className={`pg ${cur === pages ? \"disabled\" : \"\"}`}\n onClick={() => cur < pages && go(cur + 1)}\n aria-label=\"Next\"\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n {showSizeChanger && (\n <div className=\"pg-size-changer\">\n <Select<number>\n value={pageSize}\n size=\"sm\"\n options={pageSizeOptions.map((n) => ({ value: n, label: `${n} 条/页` }))}\n onChange={handleSizeChange}\n />\n </div>\n )}\n {showQuickJumper && (\n <label className=\"pg-jumper\">\n <span className=\"pg-jumper-label\">跳至</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n className=\"pg-jumper-input\"\n value={jumpDraft}\n onChange={(e) => setJumpDraft(e.target.value.replace(/[^\\d]/g, \"\"))}\n onKeyDown={handleJump}\n aria-label=\"跳转到指定页\"\n />\n <span className=\"pg-jumper-label\">页</span>\n </label>\n )}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Pagination/Pagination.tsx"],"names":["React","jsxs","jsx","Icon","Select"],"mappings":"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","file":"chunk-AWLBLRQX.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Pagination.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Select } from \"../Select\";\n\nexport interface PaginationProps {\n /** Total number of items. */\n total: number;\n /** Items per page. */\n pageSize?: number;\n /** Current page (1-indexed). */\n page?: number;\n defaultPage?: number;\n onChange?: (page: number) => void;\n /** Max visible page buttons (before ellipsis logic). */\n siblings?: number;\n /**\n * Render a \"跳至 N 页\" input to the right of the page buttons. Enter key commits\n * and clamps to `1..totalPages`.\n */\n showQuickJumper?: boolean;\n /**\n * Render a Select to let the user switch the page size. Resetting the size sends the\n * user back to page 1 and calls both `onShowSizeChange` and `onChange(1)`.\n */\n showSizeChanger?: boolean;\n /** Page size choices for `showSizeChanger`. Defaults to `[10, 20, 50, 100]`. */\n pageSizeOptions?: number[];\n /** Fires when the user picks a new page size via the size changer. */\n onShowSizeChange?: (current: number, size: number) => void;\n className?: string;\n}\n\nconst DEFAULT_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/** `Pagination` — page number controls. */\nexport const Pagination: React.FC<PaginationProps> = ({\n total,\n pageSize = 10,\n page,\n defaultPage = 1,\n onChange,\n siblings = 1,\n showQuickJumper = false,\n showSizeChanger = false,\n pageSizeOptions = DEFAULT_SIZE_OPTIONS,\n onShowSizeChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultPage);\n const isControlled = page !== undefined;\n const cur = isControlled ? page! : inner;\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const [jumpDraft, setJumpDraft] = React.useState(\"\");\n\n const go = (p: number) => {\n const next = Math.min(pages, Math.max(1, p));\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const handleJump = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== \"Enter\") return;\n const n = Number(jumpDraft);\n if (!Number.isFinite(n) || n < 1) {\n setJumpDraft(\"\");\n return;\n }\n go(Math.trunc(n));\n setJumpDraft(\"\");\n };\n\n const handleSizeChange = (size: number) => {\n onShowSizeChange?.(cur, size);\n // reset to page 1 — Ant Design parity\n if (!isControlled) setInner(1);\n onChange?.(1);\n };\n\n const range = (): (number | \"...\")[] => {\n const out: (number | \"...\")[] = [];\n const add = (n: number | \"...\") => out.push(n);\n const s = Math.max(2, cur - siblings);\n const e = Math.min(pages - 1, cur + siblings);\n add(1);\n if (s > 2) add(\"...\");\n for (let i = s; i <= e; i++) add(i);\n if (e < pages - 1) add(\"...\");\n if (pages > 1) add(pages);\n return out;\n };\n\n return (\n <div className={`pagination ${className}`}>\n <span className=\"pg-info\">\n 共 {total} 条 · 第 {cur} / {pages} 页\n </span>\n <div className=\"pg-controls\">\n <button\n type=\"button\"\n className={`pg ${cur === 1 ? \"disabled\" : \"\"}`}\n onClick={() => cur > 1 && go(cur - 1)}\n aria-label=\"Previous\"\n >\n <Icon name=\"chevLeft\" size={12} />\n </button>\n {range().map((p, i) =>\n p === \"...\" ? (\n <span key={`e${i}`} className=\"ellipsis\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={`pg ${p === cur ? \"active\" : \"\"}`}\n onClick={() => go(p)}\n >\n {p}\n </button>\n )\n )}\n <button\n type=\"button\"\n className={`pg ${cur === pages ? \"disabled\" : \"\"}`}\n onClick={() => cur < pages && go(cur + 1)}\n aria-label=\"Next\"\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n {showSizeChanger && (\n <div className=\"pg-size-changer\">\n <Select<number>\n value={pageSize}\n size=\"sm\"\n options={pageSizeOptions.map((n) => ({ value: n, label: `${n} 条/页` }))}\n onChange={handleSizeChange}\n />\n </div>\n )}\n {showQuickJumper && (\n <label className=\"pg-jumper\">\n <span className=\"pg-jumper-label\">跳至</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n className=\"pg-jumper-input\"\n value={jumpDraft}\n onChange={(e) => setJumpDraft(e.target.value.replace(/[^\\d]/g, \"\"))}\n onKeyDown={handleJump}\n aria-label=\"跳转到指定页\"\n />\n <span className=\"pg-jumper-label\">页</span>\n </label>\n )}\n </div>\n </div>\n );\n};\n"]}