@fangxinyan/lumina 0.2.1 → 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 (250) hide show
  1. package/dist/{Accordion-3TQPKNN3.css → Accordion-REMDCQUD.css} +0 -1
  2. package/dist/Accordion.cjs +2 -2
  3. package/dist/Accordion.js +1 -1
  4. package/dist/Alert.cjs +2 -2
  5. package/dist/Alert.js +1 -1
  6. package/dist/AppShell.cjs +5 -5
  7. package/dist/AppShell.js +1 -1
  8. package/dist/Avatar.cjs +2 -2
  9. package/dist/Avatar.js +1 -1
  10. package/dist/Button.cjs +3 -3
  11. package/dist/Button.js +1 -1
  12. package/dist/Calendar.cjs +2 -2
  13. package/dist/Calendar.js +1 -1
  14. package/dist/Card.cjs +3 -3
  15. package/dist/Card.js +1 -1
  16. package/dist/{Cascader-DTRTTXC2.css → Cascader-VSYEKQCG.css} +1 -1
  17. package/dist/Cascader.cjs +2 -2
  18. package/dist/Cascader.js +1 -1
  19. package/dist/Checkbox.cjs +3 -3
  20. package/dist/Checkbox.js +1 -1
  21. package/dist/{ColorPicker-GP7AQYUU.css → ColorPicker-SDDQGHCM.css} +1 -1
  22. package/dist/ColorPicker.cjs +2 -2
  23. package/dist/ColorPicker.js +1 -1
  24. package/dist/CommandPalette-T45DBMPY.css +139 -0
  25. package/dist/CommandPalette.cjs +14 -0
  26. package/dist/CommandPalette.cjs.map +1 -0
  27. package/dist/CommandPalette.d.cts +65 -0
  28. package/dist/CommandPalette.d.ts +65 -0
  29. package/dist/CommandPalette.js +5 -0
  30. package/dist/CommandPalette.js.map +1 -0
  31. package/dist/ContextMenu-FKW6CQW4.css +76 -0
  32. package/dist/ContextMenu.cjs +12 -0
  33. package/dist/ContextMenu.cjs.map +1 -0
  34. package/dist/ContextMenu.d.cts +50 -0
  35. package/dist/ContextMenu.d.ts +50 -0
  36. package/dist/ContextMenu.js +3 -0
  37. package/dist/ContextMenu.js.map +1 -0
  38. package/dist/Divider.cjs +2 -2
  39. package/dist/Divider.js +1 -1
  40. package/dist/Drawer.cjs +2 -2
  41. package/dist/Drawer.js +1 -1
  42. package/dist/Empty.cjs +4 -4
  43. package/dist/Empty.js +1 -1
  44. package/dist/{Image-WYWORJT4.css → Image-4MN34O6P.css} +1 -1
  45. package/dist/Image.cjs +3 -3
  46. package/dist/Image.js +1 -1
  47. package/dist/Input.cjs +3 -3
  48. package/dist/Input.js +1 -1
  49. package/dist/List.cjs +2 -2
  50. package/dist/List.js +1 -1
  51. package/dist/{Modal-N4YVLEWW.css → Modal-XSDMU4XJ.css} +1 -1
  52. package/dist/Modal.cjs +3 -3
  53. package/dist/Modal.js +2 -2
  54. package/dist/Pagination.cjs +4 -4
  55. package/dist/Pagination.js +3 -3
  56. package/dist/{Popover-MGCMOXYP.css → Popover-NYEKT5CQ.css} +1 -1
  57. package/dist/Popover.cjs +2 -2
  58. package/dist/Popover.js +1 -1
  59. package/dist/Progress.cjs +3 -3
  60. package/dist/Progress.js +1 -1
  61. package/dist/{Select-EDG37C37.css → Select-J3CCVFJ7.css} +1 -1
  62. package/dist/Select.cjs +3 -3
  63. package/dist/Select.js +2 -2
  64. package/dist/Slider.cjs +2 -2
  65. package/dist/Slider.js +1 -1
  66. package/dist/Splitter-DHNOY4NC.css +66 -0
  67. package/dist/Splitter.cjs +12 -0
  68. package/dist/Splitter.cjs.map +1 -0
  69. package/dist/Splitter.d.cts +44 -0
  70. package/dist/Splitter.d.ts +44 -0
  71. package/dist/Splitter.js +3 -0
  72. package/dist/Splitter.js.map +1 -0
  73. package/dist/StatusBar-CDS2GPSI.css +58 -0
  74. package/dist/StatusBar.cjs +16 -0
  75. package/dist/StatusBar.cjs.map +1 -0
  76. package/dist/StatusBar.d.cts +39 -0
  77. package/dist/StatusBar.d.ts +39 -0
  78. package/dist/StatusBar.js +3 -0
  79. package/dist/StatusBar.js.map +1 -0
  80. package/dist/Switch.cjs +2 -2
  81. package/dist/Switch.js +1 -1
  82. package/dist/{Table-YKVM42SW.css → Table-2LPTOUIR.css} +1 -1
  83. package/dist/Table.cjs +7 -7
  84. package/dist/Table.js +5 -5
  85. package/dist/Tabs.cjs +3 -3
  86. package/dist/Tabs.js +1 -1
  87. package/dist/Tag.cjs +3 -3
  88. package/dist/Tag.js +1 -1
  89. package/dist/Theme.cjs +10 -10
  90. package/dist/Theme.js +1 -1
  91. package/dist/{Toast-ERHDN3WG.css → Toast-6PVSAXQ5.css} +1 -1
  92. package/dist/Toast.cjs +3 -3
  93. package/dist/Toast.js +1 -1
  94. package/dist/Tooltip.cjs +2 -2
  95. package/dist/Tooltip.js +1 -1
  96. package/dist/Typography.cjs +6 -6
  97. package/dist/Typography.js +1 -1
  98. package/dist/{chunk-5WF6M47X.cjs → chunk-24FAK7QU.cjs} +3 -3
  99. package/dist/{chunk-5WF6M47X.cjs.map → chunk-24FAK7QU.cjs.map} +1 -1
  100. package/dist/{chunk-AJZKESHB.js → chunk-276NALYW.js} +3 -3
  101. package/dist/{chunk-AJZKESHB.js.map → chunk-276NALYW.js.map} +1 -1
  102. package/dist/{chunk-FI7QO3I5.cjs → chunk-33TIL25B.cjs} +3 -3
  103. package/dist/{chunk-FI7QO3I5.cjs.map → chunk-33TIL25B.cjs.map} +1 -1
  104. package/dist/{chunk-RDLPX7RK.cjs → chunk-3HNRKO3M.cjs} +31 -5
  105. package/dist/chunk-3HNRKO3M.cjs.map +1 -0
  106. package/dist/{chunk-GZGZR4FT.js → chunk-3LI6QH2Q.js} +3 -3
  107. package/dist/{chunk-GZGZR4FT.js.map → chunk-3LI6QH2Q.js.map} +1 -1
  108. package/dist/{chunk-NE4YEBFH.js → chunk-3UU2PUK4.js} +4 -4
  109. package/dist/{chunk-NE4YEBFH.js.map → chunk-3UU2PUK4.js.map} +1 -1
  110. package/dist/chunk-47Z4NIU4.js +118 -0
  111. package/dist/chunk-47Z4NIU4.js.map +1 -0
  112. package/dist/{chunk-4U4OY5RA.js → chunk-4SCDDSXY.js} +3 -3
  113. package/dist/{chunk-4U4OY5RA.js.map → chunk-4SCDDSXY.js.map} +1 -1
  114. package/dist/{chunk-NXOAYNG2.cjs → chunk-5BFETKVP.cjs} +3 -3
  115. package/dist/{chunk-NXOAYNG2.cjs.map → chunk-5BFETKVP.cjs.map} +1 -1
  116. package/dist/{chunk-VICGQC6G.cjs → chunk-5EAVXFFD.cjs} +3 -3
  117. package/dist/{chunk-VICGQC6G.cjs.map → chunk-5EAVXFFD.cjs.map} +1 -1
  118. package/dist/{chunk-OYGFMXAA.js → chunk-5N7347MI.js} +3 -3
  119. package/dist/{chunk-OYGFMXAA.js.map → chunk-5N7347MI.js.map} +1 -1
  120. package/dist/{chunk-VJN637MT.js → chunk-5PREWYTB.js} +3 -3
  121. package/dist/{chunk-VJN637MT.js.map → chunk-5PREWYTB.js.map} +1 -1
  122. package/dist/{chunk-77BVQNAQ.js → chunk-5UOBYRYJ.js} +3 -3
  123. package/dist/{chunk-77BVQNAQ.js.map → chunk-5UOBYRYJ.js.map} +1 -1
  124. package/dist/{chunk-BBPNQ44M.js → chunk-6GNFRP2H.js} +3 -3
  125. package/dist/{chunk-BBPNQ44M.js.map → chunk-6GNFRP2H.js.map} +1 -1
  126. package/dist/{chunk-TZSWDH5T.cjs → chunk-7JYI5THC.cjs} +3 -3
  127. package/dist/{chunk-TZSWDH5T.cjs.map → chunk-7JYI5THC.cjs.map} +1 -1
  128. package/dist/chunk-7T2SLRNL.cjs +140 -0
  129. package/dist/chunk-7T2SLRNL.cjs.map +1 -0
  130. package/dist/chunk-7YQWG7HR.cjs +45 -0
  131. package/dist/chunk-7YQWG7HR.cjs.map +1 -0
  132. package/dist/chunk-AGN3JSUH.cjs +209 -0
  133. package/dist/chunk-AGN3JSUH.cjs.map +1 -0
  134. package/dist/{chunk-CCBHZYE6.cjs → chunk-AR4M7QGF.cjs} +7 -7
  135. package/dist/{chunk-CCBHZYE6.cjs.map → chunk-AR4M7QGF.cjs.map} +1 -1
  136. package/dist/{chunk-K7PVJLW4.cjs → chunk-AWLBLRQX.cjs} +5 -5
  137. package/dist/{chunk-K7PVJLW4.cjs.map → chunk-AWLBLRQX.cjs.map} +1 -1
  138. package/dist/{chunk-PBBHUUXU.cjs → chunk-B5JH7NRZ.cjs} +3 -3
  139. package/dist/{chunk-PBBHUUXU.cjs.map → chunk-B5JH7NRZ.cjs.map} +1 -1
  140. package/dist/{chunk-Z5X5AMLA.cjs → chunk-CALRTZZ7.cjs} +3 -3
  141. package/dist/{chunk-Z5X5AMLA.cjs.map → chunk-CALRTZZ7.cjs.map} +1 -1
  142. package/dist/{chunk-H6FCIJOP.js → chunk-DBJIK4JE.js} +3 -3
  143. package/dist/{chunk-H6FCIJOP.js.map → chunk-DBJIK4JE.js.map} +1 -1
  144. package/dist/{chunk-QESLHLTG.cjs → chunk-EHO2JH2L.cjs} +4 -4
  145. package/dist/{chunk-QESLHLTG.cjs.map → chunk-EHO2JH2L.cjs.map} +1 -1
  146. package/dist/{chunk-WNGG25QX.js → chunk-FFZLSY2N.js} +3 -3
  147. package/dist/{chunk-WNGG25QX.js.map → chunk-FFZLSY2N.js.map} +1 -1
  148. package/dist/{chunk-AEJJGUEN.cjs → chunk-GOIQR4OH.cjs} +3 -3
  149. package/dist/{chunk-AEJJGUEN.cjs.map → chunk-GOIQR4OH.cjs.map} +1 -1
  150. package/dist/{chunk-Z7P6QGMT.js → chunk-GR5STMOA.js} +3 -3
  151. package/dist/{chunk-Z7P6QGMT.js.map → chunk-GR5STMOA.js.map} +1 -1
  152. package/dist/{chunk-URF6RBW6.cjs → chunk-HNVRMOL3.cjs} +3 -3
  153. package/dist/{chunk-URF6RBW6.cjs.map → chunk-HNVRMOL3.cjs.map} +1 -1
  154. package/dist/{chunk-RPD2OIIP.js → chunk-I2HHC6QW.js} +4 -4
  155. package/dist/{chunk-RPD2OIIP.js.map → chunk-I2HHC6QW.js.map} +1 -1
  156. package/dist/{chunk-AXMEZGEG.cjs → chunk-IZDJCEMF.cjs} +3 -3
  157. package/dist/{chunk-AXMEZGEG.cjs.map → chunk-IZDJCEMF.cjs.map} +1 -1
  158. package/dist/{chunk-V34OPWKZ.js → chunk-JSDQVVQB.js} +3 -3
  159. package/dist/{chunk-V34OPWKZ.js.map → chunk-JSDQVVQB.js.map} +1 -1
  160. package/dist/{chunk-QTGDYQOT.cjs → chunk-LLNEDEST.cjs} +4 -4
  161. package/dist/{chunk-QTGDYQOT.cjs.map → chunk-LLNEDEST.cjs.map} +1 -1
  162. package/dist/{chunk-C5TGQ7CV.cjs → chunk-MFWOBALK.cjs} +3 -3
  163. package/dist/{chunk-C5TGQ7CV.cjs.map → chunk-MFWOBALK.cjs.map} +1 -1
  164. package/dist/{chunk-LDENBYRC.cjs → chunk-MKR4X57L.cjs} +3 -3
  165. package/dist/{chunk-LDENBYRC.cjs.map → chunk-MKR4X57L.cjs.map} +1 -1
  166. package/dist/{chunk-LSLYY5FN.js → chunk-MTCLJHXU.js} +5 -5
  167. package/dist/{chunk-LSLYY5FN.js.map → chunk-MTCLJHXU.js.map} +1 -1
  168. package/dist/{chunk-JKLQOB2F.cjs → chunk-MUFMJPRT.cjs} +3 -3
  169. package/dist/{chunk-JKLQOB2F.cjs.map → chunk-MUFMJPRT.cjs.map} +1 -1
  170. package/dist/{chunk-OEHCA5IV.js → chunk-NGQDVJH3.js} +4 -4
  171. package/dist/{chunk-OEHCA5IV.js.map → chunk-NGQDVJH3.js.map} +1 -1
  172. package/dist/{chunk-7H453VPW.cjs → chunk-NQQWCIE6.cjs} +3 -3
  173. package/dist/{chunk-7H453VPW.cjs.map → chunk-NQQWCIE6.cjs.map} +1 -1
  174. package/dist/{chunk-ZWP4LSS3.js → chunk-NS3C2ZSE.js} +3 -3
  175. package/dist/{chunk-ZWP4LSS3.js.map → chunk-NS3C2ZSE.js.map} +1 -1
  176. package/dist/{chunk-HKAQILD2.cjs → chunk-O2HMH5BI.cjs} +4 -4
  177. package/dist/{chunk-HKAQILD2.cjs.map → chunk-O2HMH5BI.cjs.map} +1 -1
  178. package/dist/chunk-OWNVDXRQ.js +42 -0
  179. package/dist/chunk-OWNVDXRQ.js.map +1 -0
  180. package/dist/{chunk-3UFU63X7.cjs → chunk-OZVPJWXO.cjs} +3 -3
  181. package/dist/{chunk-3UFU63X7.cjs.map → chunk-OZVPJWXO.cjs.map} +1 -1
  182. package/dist/{chunk-M6CGYGEO.js → chunk-Q2EXOT4B.js} +3 -3
  183. package/dist/{chunk-M6CGYGEO.js.map → chunk-Q2EXOT4B.js.map} +1 -1
  184. package/dist/{chunk-7U6I44RV.cjs → chunk-Q7CDWNM6.cjs} +3 -3
  185. package/dist/{chunk-7U6I44RV.cjs.map → chunk-Q7CDWNM6.cjs.map} +1 -1
  186. package/dist/{chunk-437LB2V4.js → chunk-QJGKI2BD.js} +3 -3
  187. package/dist/{chunk-437LB2V4.js.map → chunk-QJGKI2BD.js.map} +1 -1
  188. package/dist/chunk-RFU5HN4E.js +149 -0
  189. package/dist/chunk-RFU5HN4E.js.map +1 -0
  190. package/dist/{chunk-IKI5CS4L.cjs → chunk-RIDCBNCM.cjs} +4 -4
  191. package/dist/{chunk-IKI5CS4L.cjs.map → chunk-RIDCBNCM.cjs.map} +1 -1
  192. package/dist/{chunk-OPTTHURA.cjs → chunk-RSZNFKCQ.cjs} +3 -3
  193. package/dist/{chunk-OPTTHURA.cjs.map → chunk-RSZNFKCQ.cjs.map} +1 -1
  194. package/dist/{chunk-EPFYIR63.cjs → chunk-RVSWH4RH.cjs} +7 -7
  195. package/dist/{chunk-EPFYIR63.cjs.map → chunk-RVSWH4RH.cjs.map} +1 -1
  196. package/dist/{chunk-TWBJCFEJ.cjs → chunk-SVVB6POY.cjs} +4 -4
  197. package/dist/{chunk-TWBJCFEJ.cjs.map → chunk-SVVB6POY.cjs.map} +1 -1
  198. package/dist/{chunk-QPZZNSRB.js → chunk-TMZVX6NO.js} +4 -4
  199. package/dist/{chunk-QPZZNSRB.js.map → chunk-TMZVX6NO.js.map} +1 -1
  200. package/dist/{chunk-YEOARJKR.cjs → chunk-TQLCIXCK.cjs} +3 -3
  201. package/dist/{chunk-YEOARJKR.cjs.map → chunk-TQLCIXCK.cjs.map} +1 -1
  202. package/dist/{chunk-GIVMKGZN.js → chunk-TY5EAKEI.js} +3 -3
  203. package/dist/{chunk-GIVMKGZN.js.map → chunk-TY5EAKEI.js.map} +1 -1
  204. package/dist/{chunk-4MR4GVTD.js → chunk-U4K7HOMW.js} +31 -5
  205. package/dist/chunk-U4K7HOMW.js.map +1 -0
  206. package/dist/{chunk-IWVKITPN.js → chunk-U5BZ7E3F.js} +3 -3
  207. package/dist/{chunk-IWVKITPN.js.map → chunk-U5BZ7E3F.js.map} +1 -1
  208. package/dist/{chunk-3WAFIUDQ.js → chunk-UQB5OHMO.js} +3 -3
  209. package/dist/{chunk-3WAFIUDQ.js.map → chunk-UQB5OHMO.js.map} +1 -1
  210. package/dist/{chunk-ZVCMXDTP.js → chunk-URLSZPS5.js} +5 -5
  211. package/dist/{chunk-ZVCMXDTP.js.map → chunk-URLSZPS5.js.map} +1 -1
  212. package/dist/{chunk-I7SSCSFH.js → chunk-W6I67HQQ.js} +3 -3
  213. package/dist/{chunk-I7SSCSFH.js.map → chunk-W6I67HQQ.js.map} +1 -1
  214. package/dist/{chunk-NSUD5B22.js → chunk-WBMF7WM3.js} +3 -3
  215. package/dist/{chunk-NSUD5B22.js.map → chunk-WBMF7WM3.js.map} +1 -1
  216. package/dist/{chunk-4GT5TOHP.js → chunk-WDBJVKSR.js} +3 -3
  217. package/dist/{chunk-4GT5TOHP.js.map → chunk-WDBJVKSR.js.map} +1 -1
  218. package/dist/{chunk-TYQ5CN2C.js → chunk-WQFC5EMC.js} +4 -4
  219. package/dist/{chunk-TYQ5CN2C.js.map → chunk-WQFC5EMC.js.map} +1 -1
  220. package/dist/{chunk-SBMOIE5C.cjs → chunk-WREHBIJ5.cjs} +10 -10
  221. package/dist/{chunk-SBMOIE5C.cjs.map → chunk-WREHBIJ5.cjs.map} +1 -1
  222. package/dist/chunk-WZ73TWB2.cjs +174 -0
  223. package/dist/chunk-WZ73TWB2.cjs.map +1 -0
  224. package/dist/chunk-XDFZRV3V.js +184 -0
  225. package/dist/chunk-XDFZRV3V.js.map +1 -0
  226. package/dist/{chunk-F7HW2PYR.cjs → chunk-XUT2Z2L6.cjs} +3 -3
  227. package/dist/{chunk-F7HW2PYR.cjs.map → chunk-XUT2Z2L6.cjs.map} +1 -1
  228. package/dist/{chunk-E6R63QOL.js → chunk-XZ22B3NW.js} +6 -6
  229. package/dist/{chunk-E6R63QOL.js.map → chunk-XZ22B3NW.js.map} +1 -1
  230. package/dist/{chunk-K5MHL732.js → chunk-YXKJOPYT.js} +4 -4
  231. package/dist/{chunk-K5MHL732.js.map → chunk-YXKJOPYT.js.map} +1 -1
  232. package/dist/{chunk-IDM6JJLP.cjs → chunk-YZ2I7CDF.cjs} +3 -3
  233. package/dist/{chunk-IDM6JJLP.cjs.map → chunk-YZ2I7CDF.cjs.map} +1 -1
  234. package/dist/index.cjs +142 -118
  235. package/dist/index.cjs.map +1 -1
  236. package/dist/index.d.cts +5 -1
  237. package/dist/index.d.ts +5 -1
  238. package/dist/index.js +35 -31
  239. package/dist/index.js.map +1 -1
  240. package/dist/styles.css +25 -18
  241. package/dist/{tokens-HWQ7KWPG.css → tokens-BIIUTPKN.css} +17 -9
  242. package/dist/tokens.css +17 -9
  243. package/docs/llms/commandpalette.md +58 -0
  244. package/docs/llms/contextmenu.md +55 -0
  245. package/docs/llms/splitter.md +63 -0
  246. package/docs/llms/statusbar.md +53 -0
  247. package/docs/llms.md +5 -1
  248. package/package.json +1 -1
  249. package/dist/chunk-4MR4GVTD.js.map +0 -1
  250. 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"]}