@fangxinyan/lumina 0.5.1 → 0.6.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 (363) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.d.cts +2 -2
  3. package/dist/Accordion.d.ts +2 -2
  4. package/dist/Accordion.js +2 -2
  5. package/dist/Alert.cjs +3 -3
  6. package/dist/Alert.d.cts +2 -2
  7. package/dist/Alert.d.ts +2 -2
  8. package/dist/Alert.js +2 -2
  9. package/dist/AppShell.cjs +5 -5
  10. package/dist/AppShell.d.cts +8 -8
  11. package/dist/AppShell.d.ts +8 -8
  12. package/dist/AppShell.js +1 -1
  13. package/dist/AutoComplete.cjs +4 -4
  14. package/dist/AutoComplete.d.cts +1 -4
  15. package/dist/AutoComplete.d.ts +1 -4
  16. package/dist/AutoComplete.js +3 -3
  17. package/dist/Avatar.cjs +2 -2
  18. package/dist/Avatar.d.cts +1 -1
  19. package/dist/Avatar.d.ts +1 -1
  20. package/dist/Avatar.js +1 -1
  21. package/dist/Button.cjs +4 -4
  22. package/dist/Button.js +2 -2
  23. package/dist/Calendar.cjs +3 -3
  24. package/dist/Calendar.d.cts +2 -2
  25. package/dist/Calendar.d.ts +2 -2
  26. package/dist/Calendar.js +2 -2
  27. package/dist/Cascader.cjs +3 -3
  28. package/dist/Cascader.d.cts +2 -2
  29. package/dist/Cascader.d.ts +2 -2
  30. package/dist/Cascader.js +2 -2
  31. package/dist/Checkbox.cjs +4 -4
  32. package/dist/Checkbox.d.cts +5 -5
  33. package/dist/Checkbox.d.ts +5 -5
  34. package/dist/Checkbox.js +2 -2
  35. package/dist/ColorPicker.cjs +2 -2
  36. package/dist/ColorPicker.d.cts +1 -3
  37. package/dist/ColorPicker.d.ts +1 -3
  38. package/dist/ColorPicker.js +1 -1
  39. package/dist/CommandPalette.cjs +4 -4
  40. package/dist/CommandPalette.d.cts +2 -2
  41. package/dist/CommandPalette.d.ts +2 -2
  42. package/dist/CommandPalette.js +3 -3
  43. package/dist/ContextMenu.cjs +2 -2
  44. package/dist/ContextMenu.d.cts +2 -2
  45. package/dist/ContextMenu.d.ts +2 -2
  46. package/dist/ContextMenu.js +1 -1
  47. package/dist/Divider.cjs +2 -2
  48. package/dist/Divider.d.cts +1 -1
  49. package/dist/Divider.d.ts +1 -1
  50. package/dist/Divider.js +1 -1
  51. package/dist/Drawer.cjs +3 -3
  52. package/dist/Drawer.d.cts +2 -2
  53. package/dist/Drawer.d.ts +2 -2
  54. package/dist/Drawer.js +2 -2
  55. package/dist/Empty.cjs +4 -4
  56. package/dist/Empty.d.cts +6 -6
  57. package/dist/Empty.d.ts +6 -6
  58. package/dist/Empty.js +1 -1
  59. package/dist/Form.cjs +4 -4
  60. package/dist/Form.d.cts +2 -2
  61. package/dist/Form.d.ts +2 -2
  62. package/dist/Form.js +1 -1
  63. package/dist/Icon.cjs +3 -3
  64. package/dist/Icon.d.cts +1 -1
  65. package/dist/Icon.d.ts +1 -1
  66. package/dist/Icon.js +1 -1
  67. package/dist/Image.cjs +4 -4
  68. package/dist/Image.d.cts +4 -4
  69. package/dist/Image.d.ts +4 -4
  70. package/dist/Image.js +2 -2
  71. package/dist/Input.cjs +4 -4
  72. package/dist/Input.js +2 -2
  73. package/dist/InputNumber.cjs +4 -4
  74. package/dist/InputNumber.d.cts +1 -5
  75. package/dist/InputNumber.d.ts +1 -5
  76. package/dist/InputNumber.js +3 -3
  77. package/dist/List.cjs +2 -2
  78. package/dist/List.d.cts +2 -2
  79. package/dist/List.d.ts +2 -2
  80. package/dist/List.js +1 -1
  81. package/dist/Modal.cjs +4 -4
  82. package/dist/Modal.d.cts +2 -2
  83. package/dist/Modal.d.ts +2 -2
  84. package/dist/Modal.js +3 -3
  85. package/dist/Pagination.cjs +5 -5
  86. package/dist/Pagination.d.cts +2 -2
  87. package/dist/Pagination.d.ts +2 -2
  88. package/dist/Pagination.js +4 -4
  89. package/dist/Popover.cjs +2 -2
  90. package/dist/Popover.d.cts +2 -2
  91. package/dist/Popover.d.ts +2 -2
  92. package/dist/Popover.js +1 -1
  93. package/dist/Progress-CHV7DN6Y.css +80 -0
  94. package/dist/Progress.cjs +2 -6
  95. package/dist/Progress.d.cts +5 -13
  96. package/dist/Progress.d.ts +5 -13
  97. package/dist/Progress.js +1 -1
  98. package/dist/Select.cjs +4 -4
  99. package/dist/Select.d.cts +6 -3
  100. package/dist/Select.d.ts +6 -3
  101. package/dist/Select.js +3 -3
  102. package/dist/Splitter.cjs +2 -2
  103. package/dist/Splitter.d.cts +2 -2
  104. package/dist/Splitter.d.ts +2 -2
  105. package/dist/Splitter.js +1 -1
  106. package/dist/StatusBar.cjs +3 -3
  107. package/dist/StatusBar.d.cts +3 -2
  108. package/dist/StatusBar.d.ts +3 -2
  109. package/dist/StatusBar.js +1 -1
  110. package/dist/Switch.cjs +2 -2
  111. package/dist/Switch.d.cts +2 -2
  112. package/dist/Switch.d.ts +2 -2
  113. package/dist/Switch.js +1 -1
  114. package/dist/Table.cjs +8 -8
  115. package/dist/Table.d.cts +4 -3
  116. package/dist/Table.d.ts +4 -3
  117. package/dist/Table.js +6 -6
  118. package/dist/Tabs.cjs +3 -3
  119. package/dist/Tabs.d.cts +5 -5
  120. package/dist/Tabs.d.ts +5 -5
  121. package/dist/Tabs.js +1 -1
  122. package/dist/Tag.cjs +4 -4
  123. package/dist/Tag.d.cts +2 -2
  124. package/dist/Tag.d.ts +2 -2
  125. package/dist/Tag.js +2 -2
  126. package/dist/Timeline.cjs +3 -3
  127. package/dist/Timeline.js +2 -2
  128. package/dist/Toast.cjs +4 -4
  129. package/dist/Toast.d.cts +2 -2
  130. package/dist/Toast.d.ts +2 -2
  131. package/dist/Toast.js +2 -2
  132. package/dist/Tooltip.cjs +2 -2
  133. package/dist/Tooltip.d.cts +2 -2
  134. package/dist/Tooltip.d.ts +2 -2
  135. package/dist/Tooltip.js +1 -1
  136. package/dist/Typography.cjs +7 -7
  137. package/dist/Typography.js +2 -2
  138. package/dist/{chunk-QVFEKGKI.cjs → chunk-2K5HZLXW.cjs} +6 -3
  139. package/dist/chunk-2K5HZLXW.cjs.map +1 -0
  140. package/dist/chunk-2LIX7ZHX.js +29 -0
  141. package/dist/chunk-2LIX7ZHX.js.map +1 -0
  142. package/dist/{chunk-3ES5QPAF.cjs → chunk-2TNJ7TC4.cjs} +22 -12
  143. package/dist/chunk-2TNJ7TC4.cjs.map +1 -0
  144. package/dist/chunk-3EGZ6TBF.cjs +65 -0
  145. package/dist/chunk-3EGZ6TBF.cjs.map +1 -0
  146. package/dist/{chunk-RFU5HN4E.js → chunk-3LJO33HI.js} +25 -7
  147. package/dist/chunk-3LJO33HI.js.map +1 -0
  148. package/dist/{chunk-UQB5OHMO.js → chunk-44AVDO3T.js} +27 -19
  149. package/dist/chunk-44AVDO3T.js.map +1 -0
  150. package/dist/{chunk-TAYFI4RG.cjs → chunk-474MXYO5.cjs} +4 -4
  151. package/dist/{chunk-TAYFI4RG.cjs.map → chunk-474MXYO5.cjs.map} +1 -1
  152. package/dist/{chunk-TMRSI543.js → chunk-4DNHASZU.js} +10 -8
  153. package/dist/chunk-4DNHASZU.js.map +1 -0
  154. package/dist/{chunk-UXABXEWT.js → chunk-4JHFGSNH.js} +24 -13
  155. package/dist/chunk-4JHFGSNH.js.map +1 -0
  156. package/dist/{chunk-E7UQSFKF.js → chunk-4XSP4HHZ.js} +18 -8
  157. package/dist/chunk-4XSP4HHZ.js.map +1 -0
  158. package/dist/{chunk-JQZFOIX6.js → chunk-5VIOJW6M.js} +141 -128
  159. package/dist/chunk-5VIOJW6M.js.map +1 -0
  160. package/dist/{chunk-WBL7LOIH.js → chunk-6CAEGNCK.js} +10 -8
  161. package/dist/chunk-6CAEGNCK.js.map +1 -0
  162. package/dist/{chunk-JELHUUM5.js → chunk-6FSOJLY6.js} +3 -3
  163. package/dist/{chunk-JELHUUM5.js.map → chunk-6FSOJLY6.js.map} +1 -1
  164. package/dist/{chunk-2OBQOEFD.cjs → chunk-6TRVGFFX.cjs} +16 -5
  165. package/dist/chunk-6TRVGFFX.cjs.map +1 -0
  166. package/dist/{chunk-7T2SLRNL.cjs → chunk-74VZZAUT.cjs} +14 -7
  167. package/dist/chunk-74VZZAUT.cjs.map +1 -0
  168. package/dist/{chunk-GR5STMOA.js → chunk-A3IJM7IX.js} +76 -50
  169. package/dist/chunk-A3IJM7IX.js.map +1 -0
  170. package/dist/{chunk-WZ73TWB2.cjs → chunk-AXRABZLY.cjs} +25 -7
  171. package/dist/chunk-AXRABZLY.cjs.map +1 -0
  172. package/dist/{chunk-X3JG3IR6.js → chunk-BSHHQOFY.js} +23 -18
  173. package/dist/chunk-BSHHQOFY.js.map +1 -0
  174. package/dist/{chunk-JSDQVVQB.js → chunk-CVEGVB2C.js} +17 -12
  175. package/dist/chunk-CVEGVB2C.js.map +1 -0
  176. package/dist/{chunk-ILVNMES2.js → chunk-D242UJZO.js} +14 -11
  177. package/dist/chunk-D242UJZO.js.map +1 -0
  178. package/dist/{chunk-RJNGXR5Y.js → chunk-DB5JMXOI.js} +11 -9
  179. package/dist/chunk-DB5JMXOI.js.map +1 -0
  180. package/dist/{chunk-OWNVDXRQ.js → chunk-DCX36FYD.js} +23 -10
  181. package/dist/chunk-DCX36FYD.js.map +1 -0
  182. package/dist/{chunk-3KQKEE5O.cjs → chunk-DH4NYYJP.cjs} +43 -18
  183. package/dist/chunk-DH4NYYJP.cjs.map +1 -0
  184. package/dist/{chunk-P4XPESR2.js → chunk-DUNQNSVK.js} +20 -10
  185. package/dist/chunk-DUNQNSVK.js.map +1 -0
  186. package/dist/{chunk-5PREWYTB.js → chunk-E6K6GYUC.js} +21 -27
  187. package/dist/chunk-E6K6GYUC.js.map +1 -0
  188. package/dist/{chunk-IHACXMOI.js → chunk-EARCKSI7.js} +6 -3
  189. package/dist/chunk-EARCKSI7.js.map +1 -0
  190. package/dist/chunk-EHZXEZI2.cjs +78 -0
  191. package/dist/chunk-EHZXEZI2.cjs.map +1 -0
  192. package/dist/{chunk-S7RFIMA3.cjs → chunk-FBQLNAUI.cjs} +11 -9
  193. package/dist/chunk-FBQLNAUI.cjs.map +1 -0
  194. package/dist/chunk-FCIPCZAK.cjs +53 -0
  195. package/dist/chunk-FCIPCZAK.cjs.map +1 -0
  196. package/dist/{chunk-DLGFIRVW.js → chunk-FSOJHDXH.js} +7 -6
  197. package/dist/chunk-FSOJHDXH.js.map +1 -0
  198. package/dist/{chunk-2D5VCIJZ.cjs → chunk-HHSVGNJA.cjs} +7 -7
  199. package/dist/chunk-HHSVGNJA.cjs.map +1 -0
  200. package/dist/{chunk-ZSR5JSYZ.cjs → chunk-HQO7EZNQ.cjs} +23 -13
  201. package/dist/chunk-HQO7EZNQ.cjs.map +1 -0
  202. package/dist/{chunk-V6466VMN.cjs → chunk-IL523MTN.cjs} +144 -131
  203. package/dist/chunk-IL523MTN.cjs.map +1 -0
  204. package/dist/{chunk-GT45MQAK.cjs → chunk-JAGJQDAV.cjs} +22 -13
  205. package/dist/chunk-JAGJQDAV.cjs.map +1 -0
  206. package/dist/{chunk-U7TAQLPN.cjs → chunk-JF2WNLPF.cjs} +6 -6
  207. package/dist/{chunk-U7TAQLPN.cjs.map → chunk-JF2WNLPF.cjs.map} +1 -1
  208. package/dist/{chunk-S3NIRNWM.js → chunk-JS6U7UQS.js} +3 -3
  209. package/dist/{chunk-S3NIRNWM.js.map → chunk-JS6U7UQS.js.map} +1 -1
  210. package/dist/{chunk-H2QTLV5T.cjs → chunk-KA3XLPQJ.cjs} +34 -9
  211. package/dist/chunk-KA3XLPQJ.cjs.map +1 -0
  212. package/dist/{chunk-NS3C2ZSE.js → chunk-KWE2PXJQ.js} +8 -5
  213. package/dist/chunk-KWE2PXJQ.js.map +1 -0
  214. package/dist/{chunk-TGUDT3GK.js → chunk-LSQD2GFA.js} +4 -4
  215. package/dist/chunk-LSQD2GFA.js.map +1 -0
  216. package/dist/{chunk-D26YHP2Y.cjs → chunk-MU4GGX6C.cjs} +14 -12
  217. package/dist/chunk-MU4GGX6C.cjs.map +1 -0
  218. package/dist/{chunk-3YYOYDKI.js → chunk-MXIWTYNC.js} +16 -6
  219. package/dist/chunk-MXIWTYNC.js.map +1 -0
  220. package/dist/{chunk-5EAVXFFD.cjs → chunk-NRP3X3PE.cjs} +17 -12
  221. package/dist/chunk-NRP3X3PE.cjs.map +1 -0
  222. package/dist/{chunk-DF5K2BZ2.cjs → chunk-P4CGE5C7.cjs} +17 -7
  223. package/dist/chunk-P4CGE5C7.cjs.map +1 -0
  224. package/dist/{chunk-5SJJI3HL.js → chunk-PX5ABNKV.js} +19 -10
  225. package/dist/chunk-PX5ABNKV.js.map +1 -0
  226. package/dist/{chunk-WKNVNN2K.cjs → chunk-QCNHDDSD.cjs} +36 -13
  227. package/dist/chunk-QCNHDDSD.cjs.map +1 -0
  228. package/dist/{chunk-5N7347MI.js → chunk-QRSPBK3X.js} +8 -6
  229. package/dist/chunk-QRSPBK3X.js.map +1 -0
  230. package/dist/{chunk-XT7RXXOE.js → chunk-RHZOBQON.js} +35 -13
  231. package/dist/chunk-RHZOBQON.js.map +1 -0
  232. package/dist/{chunk-P2AV5BD7.cjs → chunk-RNVE2LMJ.cjs} +33 -8
  233. package/dist/chunk-RNVE2LMJ.cjs.map +1 -0
  234. package/dist/{chunk-TQLCIXCK.cjs → chunk-RXL26GSI.cjs} +28 -5
  235. package/dist/chunk-RXL26GSI.cjs.map +1 -0
  236. package/dist/{chunk-UUY7EDVJ.cjs → chunk-S3OSBW7R.cjs} +19 -14
  237. package/dist/chunk-S3OSBW7R.cjs.map +1 -0
  238. package/dist/{chunk-33TIL25B.cjs → chunk-SREMTSVI.cjs} +47 -19
  239. package/dist/chunk-SREMTSVI.cjs.map +1 -0
  240. package/dist/{chunk-6GNFRP2H.js → chunk-SWB57EA2.js} +9 -7
  241. package/dist/chunk-SWB57EA2.js.map +1 -0
  242. package/dist/{chunk-FLPHVK45.js → chunk-T7ZBJJC4.js} +12 -7
  243. package/dist/chunk-T7ZBJJC4.js.map +1 -0
  244. package/dist/chunk-TC5ZL2OS.cjs +165 -0
  245. package/dist/chunk-TC5ZL2OS.cjs.map +1 -0
  246. package/dist/{chunk-I7UJA6RM.cjs → chunk-V24B7KWT.cjs} +12 -10
  247. package/dist/chunk-V24B7KWT.cjs.map +1 -0
  248. package/dist/{chunk-BIXW4ZYW.cjs → chunk-V5KSJITO.cjs} +7 -7
  249. package/dist/{chunk-BIXW4ZYW.cjs.map → chunk-V5KSJITO.cjs.map} +1 -1
  250. package/dist/{chunk-IJIQ4H6C.cjs → chunk-WFFWVQK4.cjs} +7 -7
  251. package/dist/{chunk-IJIQ4H6C.cjs.map → chunk-WFFWVQK4.cjs.map} +1 -1
  252. package/dist/{chunk-LWN2PXW7.js → chunk-WLFMOWUY.js} +3 -3
  253. package/dist/{chunk-LWN2PXW7.js.map → chunk-WLFMOWUY.js.map} +1 -1
  254. package/dist/{chunk-N5W6XJI2.js → chunk-X3QINITU.js} +16 -5
  255. package/dist/chunk-X3QINITU.js.map +1 -0
  256. package/dist/{chunk-AJEF2ZB7.cjs → chunk-XMFVAYBP.cjs} +9 -8
  257. package/dist/chunk-XMFVAYBP.cjs.map +1 -0
  258. package/dist/{chunk-WR3FML2W.cjs → chunk-XMINE4TN.cjs} +28 -17
  259. package/dist/chunk-XMINE4TN.cjs.map +1 -0
  260. package/dist/{chunk-YZ2I7CDF.cjs → chunk-XXE5TQ7I.cjs} +9 -7
  261. package/dist/chunk-XXE5TQ7I.cjs.map +1 -0
  262. package/dist/{chunk-UEHONGPZ.js → chunk-XYGRVPUA.js} +33 -8
  263. package/dist/chunk-XYGRVPUA.js.map +1 -0
  264. package/dist/chunk-Y7BZMMAV.cjs +51 -0
  265. package/dist/chunk-Y7BZMMAV.cjs.map +1 -0
  266. package/dist/{chunk-HHPYY4LH.js → chunk-YRAQRENN.js} +38 -11
  267. package/dist/chunk-YRAQRENN.js.map +1 -0
  268. package/dist/{chunk-BPDWBY6Y.cjs → chunk-YVSZLQTQ.cjs} +19 -9
  269. package/dist/chunk-YVSZLQTQ.cjs.map +1 -0
  270. package/dist/{chunk-TCPTBLDV.cjs → chunk-ZA36BJIY.cjs} +38 -11
  271. package/dist/chunk-ZA36BJIY.cjs.map +1 -0
  272. package/dist/{chunk-47Z4NIU4.js → chunk-ZHCQEJ2Z.js} +14 -7
  273. package/dist/chunk-ZHCQEJ2Z.js.map +1 -0
  274. package/dist/{chunk-D3GZSL2B.cjs → chunk-ZM4P6ELG.cjs} +45 -23
  275. package/dist/chunk-ZM4P6ELG.cjs.map +1 -0
  276. package/dist/{chunk-4ADDAZK3.js → chunk-ZN6VS6SO.js} +18 -13
  277. package/dist/chunk-ZN6VS6SO.js.map +1 -0
  278. package/dist/{chunk-AZRJZM7W.js → chunk-ZPDMAMWC.js} +21 -11
  279. package/dist/chunk-ZPDMAMWC.js.map +1 -0
  280. package/dist/{chunk-GB5NAXBP.js → chunk-ZZXNHPF3.js} +3 -3
  281. package/dist/{chunk-GB5NAXBP.js.map → chunk-ZZXNHPF3.js.map} +1 -1
  282. package/dist/index.cjs +94 -98
  283. package/dist/index.cjs.map +1 -1
  284. package/dist/index.d.cts +2 -2
  285. package/dist/index.d.ts +2 -2
  286. package/dist/index.js +37 -37
  287. package/dist/index.js.map +1 -1
  288. package/dist/styles.css +50 -32
  289. package/docs/llms/appshell.md +36 -0
  290. package/docs/llms/progress.md +10 -18
  291. package/docs/llms.md +7 -5
  292. package/package.json +76 -1
  293. package/dist/Progress-IXRSO5TW.css +0 -63
  294. package/dist/chunk-2D5VCIJZ.cjs.map +0 -1
  295. package/dist/chunk-2OBQOEFD.cjs.map +0 -1
  296. package/dist/chunk-33TIL25B.cjs.map +0 -1
  297. package/dist/chunk-3ES5QPAF.cjs.map +0 -1
  298. package/dist/chunk-3KQKEE5O.cjs.map +0 -1
  299. package/dist/chunk-3YYOYDKI.js.map +0 -1
  300. package/dist/chunk-47Z4NIU4.js.map +0 -1
  301. package/dist/chunk-4ADDAZK3.js.map +0 -1
  302. package/dist/chunk-5BFETKVP.cjs +0 -52
  303. package/dist/chunk-5BFETKVP.cjs.map +0 -1
  304. package/dist/chunk-5EAVXFFD.cjs.map +0 -1
  305. package/dist/chunk-5N7347MI.js.map +0 -1
  306. package/dist/chunk-5PREWYTB.js.map +0 -1
  307. package/dist/chunk-5SJJI3HL.js.map +0 -1
  308. package/dist/chunk-6GNFRP2H.js.map +0 -1
  309. package/dist/chunk-7T2SLRNL.cjs.map +0 -1
  310. package/dist/chunk-7YQWG7HR.cjs +0 -45
  311. package/dist/chunk-7YQWG7HR.cjs.map +0 -1
  312. package/dist/chunk-AJEF2ZB7.cjs.map +0 -1
  313. package/dist/chunk-AZRJZM7W.js.map +0 -1
  314. package/dist/chunk-BPDWBY6Y.cjs.map +0 -1
  315. package/dist/chunk-D26YHP2Y.cjs.map +0 -1
  316. package/dist/chunk-D3GZSL2B.cjs.map +0 -1
  317. package/dist/chunk-DF5K2BZ2.cjs.map +0 -1
  318. package/dist/chunk-DLGFIRVW.js.map +0 -1
  319. package/dist/chunk-E7UQSFKF.js.map +0 -1
  320. package/dist/chunk-FLPHVK45.js.map +0 -1
  321. package/dist/chunk-GR5STMOA.js.map +0 -1
  322. package/dist/chunk-GT45MQAK.cjs.map +0 -1
  323. package/dist/chunk-H2QTLV5T.cjs.map +0 -1
  324. package/dist/chunk-HHPYY4LH.js.map +0 -1
  325. package/dist/chunk-I7UJA6RM.cjs.map +0 -1
  326. package/dist/chunk-IHACXMOI.js.map +0 -1
  327. package/dist/chunk-ILVNMES2.js.map +0 -1
  328. package/dist/chunk-IZDJCEMF.cjs +0 -31
  329. package/dist/chunk-IZDJCEMF.cjs.map +0 -1
  330. package/dist/chunk-JQZFOIX6.js.map +0 -1
  331. package/dist/chunk-JSDQVVQB.js.map +0 -1
  332. package/dist/chunk-N5W6XJI2.js.map +0 -1
  333. package/dist/chunk-NQQWCIE6.cjs +0 -20
  334. package/dist/chunk-NQQWCIE6.cjs.map +0 -1
  335. package/dist/chunk-NS3C2ZSE.js.map +0 -1
  336. package/dist/chunk-OWNVDXRQ.js.map +0 -1
  337. package/dist/chunk-P2AV5BD7.cjs.map +0 -1
  338. package/dist/chunk-P4XPESR2.js.map +0 -1
  339. package/dist/chunk-QVFEKGKI.cjs.map +0 -1
  340. package/dist/chunk-RFU5HN4E.js.map +0 -1
  341. package/dist/chunk-RJNGXR5Y.js.map +0 -1
  342. package/dist/chunk-S7RFIMA3.cjs.map +0 -1
  343. package/dist/chunk-TCPTBLDV.cjs.map +0 -1
  344. package/dist/chunk-TGUDT3GK.js.map +0 -1
  345. package/dist/chunk-TMRSI543.js.map +0 -1
  346. package/dist/chunk-TQLCIXCK.cjs.map +0 -1
  347. package/dist/chunk-UEHONGPZ.js.map +0 -1
  348. package/dist/chunk-UQB5OHMO.js.map +0 -1
  349. package/dist/chunk-UUY7EDVJ.cjs.map +0 -1
  350. package/dist/chunk-UXABXEWT.js.map +0 -1
  351. package/dist/chunk-V6466VMN.cjs.map +0 -1
  352. package/dist/chunk-WBL7LOIH.js.map +0 -1
  353. package/dist/chunk-WDBJVKSR.js +0 -18
  354. package/dist/chunk-WDBJVKSR.js.map +0 -1
  355. package/dist/chunk-WKNVNN2K.cjs.map +0 -1
  356. package/dist/chunk-WR3FML2W.cjs.map +0 -1
  357. package/dist/chunk-WZ73TWB2.cjs.map +0 -1
  358. package/dist/chunk-X3JG3IR6.js.map +0 -1
  359. package/dist/chunk-XT7RXXOE.js.map +0 -1
  360. package/dist/chunk-XUT2Z2L6.cjs +0 -119
  361. package/dist/chunk-XUT2Z2L6.cjs.map +0 -1
  362. package/dist/chunk-YZ2I7CDF.cjs.map +0 -1
  363. package/dist/chunk-ZSR5JSYZ.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Form/Form.tsx"],"names":["React","jsx","store","Fragment","jsxs"],"mappings":"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","file":"chunk-2K5HZLXW.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Form.css\";\nimport * as React from \"react\";\n\n/* ============================================================================\n * Form — minimal antd-compatible form with validation + field binding.\n *\n * Scope:\n * - useForm() → [FormInstance]\n * - <Form form={} layout initialValues onFinish onFinishFailed onValuesChange>\n * - <Form.Item name label rules noStyle valuePropName trigger initialValue help>\n * - Rules: required / message / pattern / min / max / len / validator / type\n *\n * Not supported (to keep v1 tight):\n * - nested field names (\"user.name\" dotted paths)\n * - Form.List\n * - dependencies / shouldUpdate\n * - labelCol / wrapperCol layout grid\n * ========================================================================== */\n\nexport type FormLayout = \"horizontal\" | \"vertical\" | \"inline\";\n\nexport type Rule = {\n required?: boolean;\n message?: string;\n pattern?: RegExp;\n min?: number;\n max?: number;\n len?: number;\n type?: \"string\" | \"number\" | \"email\" | \"url\" | \"array\";\n whitespace?: boolean;\n validator?: (rule: Rule, value: unknown) => Promise<void> | void;\n};\n\nexport interface ErrorField {\n name: string;\n errors: string[];\n}\n\nexport interface FormInstance<V extends Record<string, unknown> = Record<string, unknown>> {\n getFieldValue: <T = unknown>(name: string) => T;\n getFieldsValue: (names?: string[]) => V;\n setFieldValue: (name: string, value: unknown) => void;\n setFieldsValue: (values: Partial<V>) => void;\n resetFields: (names?: string[]) => void;\n validateFields: (names?: string[]) => Promise<V>;\n isFieldTouched: (name: string) => boolean;\n getFieldError: (name: string) => string[];\n /** Programmatic submit — runs validate then onFinish/onFinishFailed. */\n submit: () => void;\n}\n\ninterface FieldEntry {\n rules: Rule[];\n initial?: unknown;\n}\n\ninterface InternalStore {\n values: Record<string, unknown>;\n errors: Record<string, string[]>;\n touched: Set<string>;\n initial: Record<string, unknown>;\n fields: Map<string, FieldEntry>;\n fieldSubs: Map<string, Set<() => void>>;\n formSubs: Set<() => void>;\n onSubmit?: () => void;\n onValuesChange?: (changed: Record<string, unknown>, all: Record<string, unknown>) => void;\n}\n\nfunction makeStore(): InternalStore {\n return {\n values: {},\n errors: {},\n touched: new Set(),\n initial: {},\n fields: new Map(),\n fieldSubs: new Map(),\n formSubs: new Set(),\n };\n}\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst URL_RE = /^https?:\\/\\/.+/i;\n\nasync function validateSingle(rule: Rule, value: unknown): Promise<string | null> {\n const msg = rule.message;\n const isEmpty = value == null || value === \"\" || (Array.isArray(value) && value.length === 0);\n\n if (rule.required && isEmpty) return msg ?? \"必填项\";\n if (rule.whitespace && typeof value === \"string\" && value.trim() === \"\") return msg ?? \"不能为空\";\n\n // Only run remaining checks when value is present.\n if (isEmpty) return null;\n\n if (rule.type === \"email\" && typeof value === \"string\" && !EMAIL_RE.test(value)) return msg ?? \"邮箱格式不正确\";\n if (rule.type === \"url\" && typeof value === \"string\" && !URL_RE.test(value)) return msg ?? \"链接格式不正确\";\n if (rule.type === \"number\" && typeof value !== \"number\" && isNaN(Number(value))) return msg ?? \"必须是数字\";\n if (rule.type === \"array\" && !Array.isArray(value)) return msg ?? \"必须是数组\";\n\n if (rule.pattern && typeof value === \"string\" && !rule.pattern.test(value)) return msg ?? \"格式不正确\";\n\n const strLen = typeof value === \"string\" ? value.length : Array.isArray(value) ? value.length : undefined;\n if (rule.len != null && strLen != null && strLen !== rule.len) return msg ?? `长度必须是 ${rule.len}`;\n if (rule.min != null && strLen != null && strLen < rule.min) return msg ?? `至少 ${rule.min} 个字符`;\n if (rule.max != null && strLen != null && strLen > rule.max) return msg ?? `最多 ${rule.max} 个字符`;\n if (rule.min != null && typeof value === \"number\" && value < rule.min) return msg ?? `不能小于 ${rule.min}`;\n if (rule.max != null && typeof value === \"number\" && value > rule.max) return msg ?? `不能大于 ${rule.max}`;\n\n if (rule.validator) {\n try {\n await rule.validator(rule, value);\n } catch (err) {\n if (typeof err === \"string\") return err;\n if (err instanceof Error) return err.message;\n return msg ?? \"校验未通过\";\n }\n }\n\n return null;\n}\n\nasync function validateField(store: InternalStore, name: string): Promise<string[]> {\n const entry = store.fields.get(name);\n if (!entry) return [];\n const value = store.values[name];\n const errs: string[] = [];\n for (const rule of entry.rules) {\n const err = await validateSingle(rule, value);\n if (err) errs.push(err);\n }\n store.errors[name] = errs;\n return errs;\n}\n\nfunction notifyField(store: InternalStore, name: string) {\n store.fieldSubs.get(name)?.forEach((fn) => fn());\n}\nfunction notifyAll(store: InternalStore) {\n store.formSubs.forEach((fn) => fn());\n}\n\nfunction buildInstance<V extends Record<string, unknown>>(store: InternalStore): FormInstance<V> {\n return {\n getFieldValue: <T,>(name: string) => store.values[name] as T,\n getFieldsValue: (names) => {\n if (!names) return { ...store.values } as V;\n const out: Record<string, unknown> = {};\n for (const n of names) out[n] = store.values[n];\n return out as V;\n },\n setFieldValue: (name, value) => {\n const prev = store.values[name];\n store.values[name] = value;\n store.touched.add(name);\n if (store.fields.has(name)) {\n void validateField(store, name).then(() => notifyField(store, name));\n }\n notifyField(store, name);\n notifyAll(store);\n if (prev !== value) store.onValuesChange?.({ [name]: value }, { ...store.values });\n },\n setFieldsValue: (values) => {\n const changed: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(values)) {\n if (store.values[k] !== v) changed[k] = v;\n store.values[k] = v;\n store.touched.add(k);\n notifyField(store, k);\n }\n notifyAll(store);\n if (Object.keys(changed).length > 0) store.onValuesChange?.(changed, { ...store.values });\n },\n resetFields: (names) => {\n const keys = names ?? Array.from(store.fields.keys());\n for (const k of keys) {\n store.values[k] = store.initial[k];\n store.errors[k] = [];\n store.touched.delete(k);\n notifyField(store, k);\n }\n notifyAll(store);\n },\n validateFields: async (names) => {\n const keys = names ?? Array.from(store.fields.keys());\n const errorFields: ErrorField[] = [];\n for (const k of keys) {\n const errs = await validateField(store, k);\n notifyField(store, k);\n if (errs.length > 0) errorFields.push({ name: k, errors: errs });\n }\n notifyAll(store);\n if (errorFields.length > 0) {\n const err = new Error(\"Validation failed\") as Error & {\n errorFields: ErrorField[];\n values: Record<string, unknown>;\n };\n err.errorFields = errorFields;\n err.values = { ...store.values };\n throw err;\n }\n const out: Record<string, unknown> = {};\n for (const k of keys) out[k] = store.values[k];\n return out as V;\n },\n isFieldTouched: (name) => store.touched.has(name),\n getFieldError: (name) => store.errors[name] ?? [],\n submit: () => store.onSubmit?.(),\n };\n}\n\nconst STORE_SYMBOL = Symbol.for(\"lumina.form.store\");\n\ntype InstanceWithStore<V extends Record<string, unknown>> = FormInstance<V> & {\n [STORE_SYMBOL]: InternalStore;\n};\n\n/** `Form.useForm()` — create a form instance. Same shape as antd's hook. */\nexport function useForm<V extends Record<string, unknown> = Record<string, unknown>>(): [FormInstance<V>] {\n const ref = React.useRef<InstanceWithStore<V>>();\n if (!ref.current) {\n const store = makeStore();\n const instance = buildInstance<V>(store) as InstanceWithStore<V>;\n (instance as InstanceWithStore<V>)[STORE_SYMBOL] = store;\n ref.current = instance;\n }\n return [ref.current];\n}\n\nfunction getStore<V extends Record<string, unknown>>(instance: FormInstance<V>): InternalStore {\n return (instance as unknown as InstanceWithStore<V>)[STORE_SYMBOL];\n}\n\n/* ---------------------------- Context ---------------------------- */\n\ninterface FormCtxValue {\n store: InternalStore;\n layout: FormLayout;\n requiredMark: boolean;\n disabled: boolean;\n}\n\nconst FormCtx = React.createContext<FormCtxValue | null>(null);\n\n/* ---------------------------- Form Root ---------------------------- */\n\nexport interface FormProps<V extends Record<string, unknown> = Record<string, unknown>>\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, \"onChange\" | \"onSubmit\"> {\n form?: FormInstance<V>;\n layout?: FormLayout;\n initialValues?: Partial<V>;\n onFinish?: (values: V) => void;\n onFinishFailed?: (info: { values: Partial<V>; errorFields: ErrorField[] }) => void;\n onValuesChange?: (changed: Partial<V>, all: V) => void;\n /** Show the `*` mark before required field labels. Default true. */\n requiredMark?: boolean;\n /** Disable all fields inside. */\n disabled?: boolean;\n children?: React.ReactNode;\n className?: string;\n}\n\ntype FormRootComponent = <V extends Record<string, unknown> = Record<string, unknown>>(\n props: FormProps<V> & React.RefAttributes<HTMLFormElement>\n) => React.ReactElement | null;\n\nconst FormRootInner = <V extends Record<string, unknown> = Record<string, unknown>>(\n props: FormProps<V>,\n ref: React.ForwardedRef<HTMLFormElement>\n) => {\n const {\n form: externalForm,\n layout = \"horizontal\",\n initialValues,\n onFinish,\n onFinishFailed,\n onValuesChange,\n requiredMark = true,\n disabled = false,\n children,\n className = \"\",\n ...rest\n } = props;\n\n const [internalForm] = useForm<V>();\n const form = externalForm ?? internalForm;\n const store = getStore(form);\n\n // Apply initial values + wire callbacks on first render only.\n const initRef = React.useRef(false);\n if (!initRef.current) {\n if (initialValues) {\n for (const [k, v] of Object.entries(initialValues)) {\n store.initial[k] = v;\n if (store.values[k] === undefined) store.values[k] = v;\n }\n }\n initRef.current = true;\n }\n\n store.onValuesChange = onValuesChange\n ? (changed, all) => onValuesChange(changed as Partial<V>, all as V)\n : undefined;\n\n const doSubmit = React.useCallback(() => {\n form\n .validateFields()\n .then((values) => onFinish?.(values))\n .catch((err: Error & { errorFields?: ErrorField[]; values?: Partial<V> }) => {\n if (err?.errorFields) {\n onFinishFailed?.({\n values: (err.values ?? {}) as Partial<V>,\n errorFields: err.errorFields,\n });\n }\n });\n }, [form, onFinish, onFinishFailed]);\n\n store.onSubmit = doSubmit;\n\n const ctxValue = React.useMemo<FormCtxValue>(\n () => ({ store, layout, requiredMark, disabled }),\n [store, layout, requiredMark, disabled]\n );\n\n return (\n <FormCtx.Provider value={ctxValue}>\n <form\n ref={ref}\n className={`lumina-form layout-${layout} ${className}`}\n onSubmit={(e) => {\n e.preventDefault();\n doSubmit();\n }}\n {...rest}\n >\n {children}\n </form>\n </FormCtx.Provider>\n );\n};\n\nconst FormRoot = React.forwardRef(FormRootInner) as FormRootComponent;\n(FormRoot as any).displayName = \"Form\";\n\n/* ---------------------------- Form.Item ---------------------------- */\n\nexport interface FormItemProps {\n /** Field key. Omit for layout-only wrappers (no value binding). */\n name?: string;\n label?: React.ReactNode;\n rules?: Rule[];\n /** Render no wrapper — emit only the (bound) child. */\n noStyle?: boolean;\n /** Inject value into this prop name on the child. Default `\"value\"`. */\n valuePropName?: string;\n /** Listen for changes on this event name. Default `\"onChange\"`. */\n trigger?: string;\n /** Event names that trigger validation. Default `[\"onChange\"]`. */\n validateTrigger?: string | string[];\n /** Initial value (used when the form instance has no value yet). */\n initialValue?: unknown;\n /** Extra help text shown under the field. Hidden when an error is shown. */\n help?: React.ReactNode;\n /** Supplementary description below the help line. */\n extra?: React.ReactNode;\n /** Explicitly mark the field as required (cosmetic). */\n required?: boolean;\n /** Hide the entire item (still keeps the field in the form). */\n hidden?: boolean;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst extractValue = (valuePropName: string, args: unknown[]) => {\n const first = args[0];\n if (first && typeof first === \"object\") {\n const anyFirst = first as { target?: { value?: unknown; checked?: unknown } };\n if (anyFirst.target && \"value\" in anyFirst.target) {\n return valuePropName === \"checked\" ? anyFirst.target.checked : anyFirst.target.value;\n }\n }\n return first;\n};\n\nexport const FormItem: React.FC<FormItemProps> = ({\n name,\n label,\n rules,\n noStyle,\n valuePropName = \"value\",\n trigger = \"onChange\",\n initialValue,\n help,\n extra,\n required,\n hidden,\n children,\n className = \"\",\n style,\n}) => {\n const ctx = React.useContext(FormCtx);\n const [, tick] = React.useReducer((n: number) => n + 1, 0);\n\n // Register field + subscribe to its changes.\n React.useEffect(() => {\n if (!ctx || !name) return;\n const store = ctx.store;\n if (initialValue !== undefined) {\n if (store.initial[name] === undefined) store.initial[name] = initialValue;\n if (store.values[name] === undefined) store.values[name] = initialValue;\n }\n store.fields.set(name, { rules: rules ?? [], initial: initialValue });\n let subs = store.fieldSubs.get(name);\n if (!subs) {\n subs = new Set();\n store.fieldSubs.set(name, subs);\n }\n subs.add(tick);\n return () => {\n subs!.delete(tick);\n store.fields.delete(name);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ctx, name]);\n\n // Keep rules fresh across re-renders.\n React.useEffect(() => {\n if (!ctx || !name) return;\n const entry = ctx.store.fields.get(name);\n if (entry) entry.rules = rules ?? [];\n }, [ctx, name, rules]);\n\n if (hidden) return null;\n\n const hasName = !!name;\n const isRequired =\n required === true || (rules?.some((r) => r.required) ?? false);\n\n // Unbound mode (no name) — render children as-is.\n if (!hasName) {\n const content = children as React.ReactNode;\n if (noStyle) return <>{content}</>;\n return (\n <div className={`form-item ${className}`} style={style}>\n {label && <div className=\"form-item-label\">{label}</div>}\n <div className=\"form-item-control\">{content}</div>\n {help && <div className=\"form-item-help\">{help}</div>}\n {extra && <div className=\"form-item-extra\">{extra}</div>}\n </div>\n );\n }\n\n const store = ctx?.store;\n const value = store?.values[name!];\n const errors = store?.errors[name!] ?? [];\n const hasError = errors.length > 0;\n\n const bound = React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement, {\n [valuePropName]: value ?? (valuePropName === \"checked\" ? false : \"\"),\n [trigger]: (...args: unknown[]) => {\n const next = extractValue(valuePropName, args);\n store?.values && (store.values[name!] = next);\n store?.touched.add(name!);\n if (store) {\n void validateField(store, name!).then(() => notifyField(store, name!));\n notifyField(store, name!);\n notifyAll(store);\n store.onValuesChange?.({ [name!]: next }, { ...store.values });\n }\n const childTrigger = (children as React.ReactElement).props?.[trigger];\n if (typeof childTrigger === \"function\") childTrigger(...args);\n },\n disabled:\n (children as React.ReactElement).props?.disabled ?? ctx?.disabled,\n ...(hasError ? { invalid: true } : {}),\n })\n : children;\n\n if (noStyle) return <>{bound}</>;\n\n return (\n <div className={`form-item ${hasError ? \"has-error\" : \"\"} ${className}`} style={style}>\n {label && (\n <div className=\"form-item-label\">\n {isRequired && ctx?.requiredMark !== false && (\n <span className=\"form-item-required\" aria-hidden>*</span>\n )}\n {label}\n </div>\n )}\n <div className=\"form-item-control\">{bound}</div>\n {hasError ? (\n <div className=\"form-item-error\">{errors[0]}</div>\n ) : help ? (\n <div className=\"form-item-help\">{help}</div>\n ) : null}\n {extra && <div className=\"form-item-extra\">{extra}</div>}\n </div>\n );\n};\n\n/* ---------------------------- Assembly ---------------------------- */\n\nexport const Form = FormRoot as typeof FormRoot & {\n Item: typeof FormItem;\n useForm: typeof useForm;\n};\nForm.Item = FormItem;\nForm.useForm = useForm;\n"]}
@@ -0,0 +1,29 @@
1
+ import './tokens-BIIUTPKN.css';
2
+ import './shared-NJHRNLRH.css';
3
+ import './List-W5BW4D2P.css';
4
+ import * as React from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ // src/components/List/List.tsx
8
+ var List = React.forwardRef(({ items, dividers = true, className = "", style, ...rest }, ref) => /* @__PURE__ */ jsx(
9
+ "ul",
10
+ {
11
+ ref,
12
+ className: `list ${dividers ? "with-dividers" : ""} ${className}`,
13
+ style: { listStyle: "none", margin: 0, ...style },
14
+ ...rest,
15
+ children: items.map((it) => /* @__PURE__ */ jsxs("li", { className: `list-item ${it.onClick ? "clickable" : ""}`, onClick: it.onClick, children: [
16
+ it.avatar && /* @__PURE__ */ jsx("div", { className: "list-item-avatar", children: it.avatar }),
17
+ /* @__PURE__ */ jsxs("div", { className: "list-item-meta", children: [
18
+ it.title && /* @__PURE__ */ jsx("div", { className: "list-item-title", children: it.title }),
19
+ it.description && /* @__PURE__ */ jsx("div", { className: "list-item-desc", children: it.description })
20
+ ] }),
21
+ it.actions && /* @__PURE__ */ jsx("div", { className: "list-item-actions", children: it.actions })
22
+ ] }, it.key))
23
+ }
24
+ ));
25
+ List.displayName = "List";
26
+
27
+ export { List };
28
+ //# sourceMappingURL=chunk-2LIX7ZHX.js.map
29
+ //# sourceMappingURL=chunk-2LIX7ZHX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/List/List.tsx"],"names":[],"mappings":";;;;;;;AAuBO,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA,CAAwC,CAAC,EAAE,KAAA,EAAO,QAAA,GAAW,IAAA,EAAM,SAAA,GAAY,EAAA,EAAI,KAAA,EAAO,GAAG,IAAA,IAAQ,GAAA,qBAC7H,GAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAW,CAAA,KAAA,EAAQ,QAAA,GAAW,eAAA,GAAkB,EAAE,IAAI,SAAS,CAAA,CAAA;AAAA,IAC/D,OAAO,EAAE,SAAA,EAAW,QAAQ,MAAA,EAAQ,CAAA,EAAG,GAAG,KAAA,EAAM;AAAA,IAC/C,GAAG,IAAA;AAAA,IAEH,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,0BACT,IAAA,EAAA,EAAgB,SAAA,EAAW,CAAA,UAAA,EAAa,EAAA,CAAG,UAAU,WAAA,GAAc,EAAE,CAAA,CAAA,EAAI,OAAA,EAAS,GAAG,OAAA,EACnF,QAAA,EAAA;AAAA,MAAA,EAAA,CAAG,0BAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAoB,aAAG,MAAA,EAAO,CAAA;AAAA,sBAC3D,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,EAAA,CAAG,yBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,aAAG,KAAA,EAAM,CAAA;AAAA,QACvD,GAAG,WAAA,oBAAe,GAAA,CAAC,SAAI,SAAA,EAAU,gBAAA,EAAkB,aAAG,WAAA,EAAY;AAAA,OAAA,EACrE,CAAA;AAAA,MACC,GAAG,OAAA,oBAAW,GAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAqB,aAAG,OAAA,EAAQ;AAAA,KAAA,EAAA,EANvD,EAAA,CAAG,GAOZ,CACD;AAAA;AACH,CACD;AACD,IAAA,CAAK,WAAA,GAAc,MAAA","file":"chunk-2LIX7ZHX.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./List.css\";\nimport * as React from \"react\";\n\nexport interface ListItem {\n key: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n avatar?: React.ReactNode;\n actions?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface ListProps\n extends Omit<React.HTMLAttributes<HTMLUListElement>, \"children\"> {\n items: ListItem[];\n /** Show dividers between items. */\n dividers?: boolean;\n className?: string;\n}\n\n/** `List` — vertical list of rows. */\nexport const List = React.forwardRef<HTMLUListElement, ListProps>(({ items, dividers = true, className = \"\", style, ...rest }, ref) => (\n <ul\n ref={ref}\n className={`list ${dividers ? \"with-dividers\" : \"\"} ${className}`}\n style={{ listStyle: \"none\", margin: 0, ...style }}\n {...rest}\n >\n {items.map((it) => (\n <li key={it.key} className={`list-item ${it.onClick ? \"clickable\" : \"\"}`} onClick={it.onClick}>\n {it.avatar && <div className=\"list-item-avatar\">{it.avatar}</div>}\n <div className=\"list-item-meta\">\n {it.title && <div className=\"list-item-title\">{it.title}</div>}\n {it.description && <div className=\"list-item-desc\">{it.description}</div>}\n </div>\n {it.actions && <div className=\"list-item-actions\">{it.actions}</div>}\n </li>\n ))}\n </ul>\n));\nList.displayName = \"List\";\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk3KQKEE5O_cjs = require('./chunk-3KQKEE5O.cjs');
3
+ var chunkDH4NYYJP_cjs = require('./chunk-DH4NYYJP.cjs');
4
4
  require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./Drawer-IPGB4CXH.css');
@@ -32,7 +32,7 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
32
32
  var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
33
33
 
34
34
  var ANIM_MS = 280;
35
- var Drawer = ({
35
+ var Drawer = React__namespace.forwardRef(({
36
36
  open,
37
37
  onClose,
38
38
  placement = "right",
@@ -49,8 +49,11 @@ var Drawer = ({
49
49
  destroyOnClose = false,
50
50
  afterOpenChange,
51
51
  zIndex,
52
- className = ""
53
- }) => {
52
+ className = "",
53
+ style,
54
+ onClick,
55
+ ...rest
56
+ }, ref) => {
54
57
  const [hasOpenedOnce, setHasOpenedOnce] = React__namespace.useState(open);
55
58
  React__namespace.useEffect(() => {
56
59
  if (open) setHasOpenedOnce(true);
@@ -75,8 +78,9 @@ var Drawer = ({
75
78
  if (!hasOpenedOnce) return null;
76
79
  if (!open && destroyOnClose) return null;
77
80
  const isV = placement === "left" || placement === "right";
78
- const style = isV ? { width: size } : { height: size };
79
- if (zIndex != null) style.zIndex = zIndex;
81
+ const panelStyle = isV ? { width: size } : { height: size };
82
+ if (zIndex != null) panelStyle.zIndex = zIndex;
83
+ Object.assign(panelStyle, style);
80
84
  return ReactDOM__default.default.createPortal(
81
85
  /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
82
86
  mask && /* @__PURE__ */ jsxRuntime.jsx(
@@ -90,11 +94,16 @@ var Drawer = ({
90
94
  /* @__PURE__ */ jsxRuntime.jsxs(
91
95
  "div",
92
96
  {
97
+ ref,
93
98
  className: `drawer ${placement} ${open ? "" : "hidden"} ${className}`,
94
- style,
95
- onClick: (e) => e.stopPropagation(),
99
+ style: panelStyle,
100
+ onClick: (e) => {
101
+ onClick?.(e);
102
+ e.stopPropagation();
103
+ },
96
104
  role: "dialog",
97
105
  "aria-hidden": !open,
106
+ ...rest,
98
107
  children: [
99
108
  (title || extra || closable) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "drawer-head", children: [
100
109
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "drawer-title", children: title }),
@@ -107,7 +116,7 @@ var Drawer = ({
107
116
  className: "drawer-close",
108
117
  onClick: onClose,
109
118
  "aria-label": "Close",
110
- children: closeIcon ?? /* @__PURE__ */ jsxRuntime.jsx(chunk3KQKEE5O_cjs.Icon, { name: "x", size: 16 })
119
+ children: closeIcon ?? /* @__PURE__ */ jsxRuntime.jsx(chunkDH4NYYJP_cjs.Icon, { name: "x", size: 16 })
111
120
  }
112
121
  )
113
122
  ] })
@@ -120,8 +129,9 @@ var Drawer = ({
120
129
  ] }),
121
130
  document.body
122
131
  );
123
- };
132
+ });
133
+ Drawer.displayName = "Drawer";
124
134
 
125
135
  exports.Drawer = Drawer;
126
- //# sourceMappingURL=chunk-3ES5QPAF.cjs.map
127
- //# sourceMappingURL=chunk-3ES5QPAF.cjs.map
136
+ //# sourceMappingURL=chunk-2TNJ7TC4.cjs.map
137
+ //# sourceMappingURL=chunk-2TNJ7TC4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Drawer/Drawer.tsx"],"names":["React","ReactDOM","jsxs","Fragment","jsx","Icon"],"mappings":"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","file":"chunk-2TNJ7TC4.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Drawer.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport interface DrawerProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\" | \"children\" | \"onClose\"> {\n /** Whether the drawer is visible. */\n open: boolean;\n /** Close callback (triggered by mask click / close button / Esc). */\n onClose?: () => void;\n /** Which edge the drawer slides from. */\n placement?: \"left\" | \"right\" | \"top\" | \"bottom\";\n /** Width (for left/right) or height (for top/bottom). Number → px. */\n size?: number | string;\n /** Header title. */\n title?: React.ReactNode;\n /** Extra content rendered to the right of the title (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Footer content. */\n footer?: React.ReactNode;\n /** Drawer body. */\n children?: React.ReactNode;\n /** Render the mask overlay. Default true. Set `false` for a non-blocking drawer. */\n mask?: boolean;\n /** Close when clicking the mask. Default true. Ignored when `mask` is false. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n keyboard?: boolean;\n /** Show the close (×) button in the header. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /**\n * When true the drawer's children are unmounted every time it closes.\n * Default `false` — children stay mounted across open/close cycles so\n * internal state (form fields, scroll position) is preserved.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Stack index for nested drawers. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Drawer` — slide-in panel from an edge. */\nexport const Drawer = React.forwardRef<HTMLDivElement, DrawerProps>(({\n open,\n onClose,\n placement = \"right\",\n size = 380,\n title,\n extra,\n footer,\n children,\n mask = true,\n maskClosable = true,\n keyboard = true,\n closable = true,\n closeIcon,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n style,\n onClick,\n ...rest\n}, ref) => {\n const [hasOpenedOnce, setHasOpenedOnce] = React.useState(open);\n React.useEffect(() => {\n if (open) setHasOpenedOnce(true);\n }, [open]);\n\n React.useEffect(() => {\n if (!open || !keyboard) return;\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose?.();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, keyboard, onClose]);\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 isV = placement === \"left\" || placement === \"right\";\n const panelStyle: React.CSSProperties = isV ? { width: size } : { height: size };\n if (zIndex != null) panelStyle.zIndex = zIndex;\n Object.assign(panelStyle, style);\n\n return ReactDOM.createPortal(\n <>\n {mask && (\n <div\n className={`drawer-overlay ${open ? \"\" : \"hidden\"}`}\n style={zIndex != null ? { zIndex: zIndex - 1 } : undefined}\n onClick={() => maskClosable && onClose?.()}\n />\n )}\n <div\n ref={ref}\n className={`drawer ${placement} ${open ? \"\" : \"hidden\"} ${className}`}\n style={panelStyle}\n onClick={(e) => {\n onClick?.(e);\n e.stopPropagation();\n }}\n role=\"dialog\"\n aria-hidden={!open}\n {...rest}\n >\n {(title || extra || closable) && (\n <div className=\"drawer-head\">\n <div className=\"drawer-title\">{title}</div>\n <div className=\"drawer-head-right\">\n {extra}\n {closable && (\n <button\n type=\"button\"\n className=\"drawer-close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n </div>\n )}\n <div className=\"drawer-body\">{children}</div>\n {footer && <div className=\"drawer-foot\">{footer}</div>}\n </div>\n </>,\n document.body\n );\n});\nDrawer.displayName = \"Drawer\";\n"]}
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ require('./tokens-BIIUTPKN.css');
4
+ require('./shared-NJHRNLRH.css');
5
+ require('./Progress-CHV7DN6Y.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/Progress/Progress.tsx
30
+ var Progress = React__namespace.forwardRef(({
31
+ value,
32
+ max = 100,
33
+ label,
34
+ showValue,
35
+ tone = "accent",
36
+ color,
37
+ size = "md",
38
+ className = "",
39
+ style,
40
+ ...rest
41
+ }, ref) => {
42
+ const pct = Math.max(0, Math.min(100, value / max * 100));
43
+ const rootStyle = {
44
+ ...color ? {
45
+ ["--progress-fill"]: color,
46
+ ["--progress-fill-glow"]: `color-mix(in oklch, ${color} 35%, transparent)`
47
+ } : null,
48
+ ...style
49
+ };
50
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: `progress ${size} ${tone} ${className}`, style: rootStyle, ...rest, children: [
51
+ (label || showValue) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "progress-label", children: [
52
+ label ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: label }) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
53
+ showValue && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "v", children: [
54
+ Math.round(pct),
55
+ "%"
56
+ ] })
57
+ ] }),
58
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "progress-track", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "progress-bar", style: { width: `${pct}%` } }) })
59
+ ] });
60
+ });
61
+ Progress.displayName = "Progress";
62
+
63
+ exports.Progress = Progress;
64
+ //# sourceMappingURL=chunk-3EGZ6TBF.cjs.map
65
+ //# sourceMappingURL=chunk-3EGZ6TBF.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Progress/Progress.tsx"],"names":["React","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,IAAM,QAAA,GAAiBA,4BAA0C,CAAC;AAAA,EACvE,KAAA;AAAA,EACA,GAAA,GAAM,GAAA;AAAA,EACN,KAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,KAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,GAAA,EAAM,KAAA,GAAQ,GAAA,GAAO,GAAG,CAAC,CAAA;AAC1D,EAAA,MAAM,SAAA,GAAiC;AAAA,IACrC,GAAI,KAAA,GACA;AAAA,MACE,CAAC,iBAA0B,GAAG,KAAA;AAAA,MAC9B,CAAC,sBAA+B,GAAG,CAAA,oBAAA,EAAuB,KAAK,CAAA,kBAAA;AAAA,KACjE,GACA,IAAA;AAAA,IACJ,GAAG;AAAA,GACL;AACA,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,YAAY,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,KAAA,EAAO,SAAA,EAAY,GAAG,IAAA,EACrF,QAAA,EAAA;AAAA,IAAA,CAAA,KAAA,IAAS,SAAA,qBACTA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,mBAAQC,cAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM,CAAA,kCAAW,MAAA,EAAA,EAAK,CAAA;AAAA,MACrC,SAAA,oBAAaD,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,GAAA,EAAK,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,QAAE;AAAA,OAAA,EAAC;AAAA,KAAA,EACtD,CAAA;AAAA,oBAEFC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAe,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA,IAAO,CAAA,EAC7D;AAAA,GAAA,EACF,CAAA;AAEJ,CAAC;AACD,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-3EGZ6TBF.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Progress.css\";\nimport * as React from \"react\";\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 0–100 */\n value: number;\n max?: number;\n label?: React.ReactNode;\n showValue?: boolean;\n tone?: \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** Custom fill color. Overrides `tone`. */\n color?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\n/** `Progress` — horizontal progress bar with neumorphic track. */\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(({\n value,\n max = 100,\n label,\n showValue,\n tone = \"accent\",\n color,\n size = \"md\",\n className = \"\",\n style,\n ...rest\n}, ref) => {\n const pct = Math.max(0, Math.min(100, (value / max) * 100));\n const rootStyle: React.CSSProperties = {\n ...(color\n ? {\n [\"--progress-fill\" as never]: color,\n [\"--progress-fill-glow\" as never]: `color-mix(in oklch, ${color} 35%, transparent)`,\n }\n : null),\n ...style,\n };\n return (\n <div ref={ref} className={`progress ${size} ${tone} ${className}`} style={rootStyle} {...rest}>\n {(label || showValue) && (\n <div className=\"progress-label\">\n {label ? <span>{label}</span> : <span />}\n {showValue && <span className=\"v\">{Math.round(pct)}%</span>}\n </div>\n )}\n <div className=\"progress-track\">\n <div className=\"progress-bar\" style={{ width: `${pct}%` }} />\n </div>\n </div>\n );\n});\nProgress.displayName = \"Progress\";\n"]}
@@ -8,12 +8,16 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  // src/components/ContextMenu/ContextMenu.tsx
9
9
  var ESTIMATED_ITEM_H = 32;
10
10
  var MARGIN = 8;
11
- var ContextMenu = ({
11
+ var ContextMenu = React.forwardRef(({
12
12
  items,
13
13
  children,
14
14
  disabled,
15
- minWidth = 180
16
- }) => {
15
+ minWidth = 180,
16
+ className = "",
17
+ style,
18
+ onContextMenu,
19
+ ...rest
20
+ }, ref) => {
17
21
  const [open, setOpen] = React.useState(false);
18
22
  const [pos, setPos] = React.useState({ top: 0, left: 0 });
19
23
  const [active, setActive] = React.useState(-1);
@@ -96,7 +100,20 @@ var ContextMenu = ({
96
100
  e.preventDefault();
97
101
  openAt(e.clientX, e.clientY);
98
102
  };
99
- const trigger = /* @__PURE__ */ jsx("span", { style: { display: "contents" }, onContextMenu: handleTriggerContextMenu, children });
103
+ const trigger = /* @__PURE__ */ jsx(
104
+ "span",
105
+ {
106
+ ref,
107
+ className,
108
+ style: { display: "contents", ...style },
109
+ onContextMenu: (e) => {
110
+ onContextMenu?.(e);
111
+ handleTriggerContextMenu(e);
112
+ },
113
+ ...rest,
114
+ children
115
+ }
116
+ );
100
117
  const panel = open && typeof document !== "undefined" ? ReactDOM.createPortal(
101
118
  /* @__PURE__ */ jsx(
102
119
  "div",
@@ -142,8 +159,9 @@ var ContextMenu = ({
142
159
  trigger,
143
160
  panel
144
161
  ] });
145
- };
162
+ });
163
+ ContextMenu.displayName = "ContextMenu";
146
164
 
147
165
  export { ContextMenu };
148
- //# sourceMappingURL=chunk-RFU5HN4E.js.map
149
- //# sourceMappingURL=chunk-RFU5HN4E.js.map
166
+ //# sourceMappingURL=chunk-3LJO33HI.js.map
167
+ //# sourceMappingURL=chunk-3LJO33HI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ContextMenu/ContextMenu.tsx"],"names":[],"mappings":"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","file":"chunk-3LJO33HI.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./ContextMenu.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nexport interface ContextMenuItem {\n key: string;\n /** Omit for `type: \"divider\"`. */\n label?: React.ReactNode;\n icon?: React.ReactNode;\n /** Right-aligned shortcut hint, e.g. `\"⌘C\"`. */\n shortcut?: React.ReactNode;\n disabled?: boolean;\n /** Style the item as destructive (red). */\n danger?: boolean;\n /** Render a horizontal separator; other fields are ignored. */\n type?: \"divider\";\n onSelect?: () => void;\n}\n\nexport interface ContextMenuProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\"> {\n items: ContextMenuItem[];\n /**\n * Any content — right-click anywhere inside the trigger area opens the menu.\n * Internally wrapped in a `display: contents` span so layout is unaffected\n * regardless of whether `children` is a DOM element or a React component.\n */\n children: React.ReactNode;\n /** Skip the menu entirely — browser default context menu will be used instead. */\n disabled?: boolean;\n /** Minimum panel width in px. Default 180. */\n minWidth?: number;\n}\n\nconst ESTIMATED_ITEM_H = 32;\nconst MARGIN = 8;\n\n/**\n * `ContextMenu` — right-click menu. Wraps one child element; suppresses the\n * browser's native menu and opens a neumorphic replacement at the cursor.\n *\n * @example\n * ```tsx\n * <ContextMenu\n * items={[\n * { key: \"copy\", label: \"复制\", shortcut: \"⌘C\", onSelect: copy },\n * { key: \"cut\", label: \"剪切\", shortcut: \"⌘X\", onSelect: cut },\n * { key: \"d1\", type: \"divider\" },\n * { key: \"del\", label: \"删除\", danger: true, onSelect: del },\n * ]}\n * >\n * <div>右键点击我</div>\n * </ContextMenu>\n * ```\n */\nexport const ContextMenu = React.forwardRef<HTMLSpanElement, ContextMenuProps>(({\n items,\n children,\n disabled,\n minWidth = 180,\n className = \"\",\n style,\n onContextMenu,\n ...rest\n}, ref) => {\n const [open, setOpen] = React.useState(false);\n const [pos, setPos] = React.useState<{ top: number; left: number }>({ top: 0, left: 0 });\n const [active, setActive] = React.useState(-1);\n const menuRef = React.useRef<HTMLDivElement>(null);\n\n const isSelectable = React.useCallback(\n (i: ContextMenuItem) => i.type !== \"divider\" && !i.disabled,\n []\n );\n\n const close = React.useCallback(() => setOpen(false), []);\n\n const openAt = (clientX: number, clientY: number) => {\n // Estimate panel size for clamping; refined on next paint via measured rect.\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const estH = Math.min(items.length * ESTIMATED_ITEM_H + 16, vh - MARGIN * 2);\n const estW = minWidth;\n const left = Math.min(clientX, vw - estW - MARGIN);\n const top = Math.min(clientY, vh - estH - MARGIN);\n setPos({ top: Math.max(MARGIN, top), left: Math.max(MARGIN, left) });\n const firstIdx = items.findIndex(isSelectable);\n setActive(firstIdx);\n setOpen(true);\n };\n\n // Close on Esc / outside click / scroll / window blur.\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") { e.stopPropagation(); close(); return; }\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n setActive((curr) => {\n const dir = e.key === \"ArrowDown\" ? 1 : -1;\n let i = curr;\n for (let n = 0; n < items.length; n++) {\n i = (i + dir + items.length) % items.length;\n if (isSelectable(items[i])) return i;\n }\n return curr;\n });\n }\n if (e.key === \"Enter\") {\n const it = items[active];\n if (it && isSelectable(it)) {\n e.preventDefault();\n it.onSelect?.();\n close();\n }\n }\n };\n const onOutside = (e: MouseEvent) => {\n if (!menuRef.current?.contains(e.target as Node)) close();\n };\n const onBlur = () => close();\n window.addEventListener(\"keydown\", onKey);\n window.addEventListener(\"mousedown\", onOutside);\n window.addEventListener(\"scroll\", close, true);\n window.addEventListener(\"resize\", close);\n window.addEventListener(\"blur\", onBlur);\n return () => {\n window.removeEventListener(\"keydown\", onKey);\n window.removeEventListener(\"mousedown\", onOutside);\n window.removeEventListener(\"scroll\", close, true);\n window.removeEventListener(\"resize\", close);\n window.removeEventListener(\"blur\", onBlur);\n };\n }, [open, items, active, close, isSelectable]);\n\n // Clamp again after mount using the real measured size.\n React.useLayoutEffect(() => {\n if (!open || !menuRef.current) return;\n const rect = menuRef.current.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n setPos((p) => ({\n top: Math.min(p.top, Math.max(MARGIN, vh - rect.height - MARGIN)),\n left: Math.min(p.left, Math.max(MARGIN, vw - rect.width - MARGIN)),\n }));\n }, [open]);\n\n const handleTriggerContextMenu = (e: React.MouseEvent) => {\n if (disabled || e.defaultPrevented) return;\n e.preventDefault();\n openAt(e.clientX, e.clientY);\n };\n\n // Wrap in a `display: contents` span so the handler lives on a DOM node we\n // fully control — React.cloneElement would fail to reach the DOM when\n // `children` is a React component that doesn't forward `onContextMenu`.\n const trigger = (\n <span\n ref={ref}\n className={className}\n style={{ display: \"contents\", ...style }}\n onContextMenu={(e) => {\n onContextMenu?.(e);\n handleTriggerContextMenu(e);\n }}\n {...rest}\n >\n {children}\n </span>\n );\n\n const panel =\n open && typeof document !== \"undefined\"\n ? ReactDOM.createPortal(\n <div\n ref={menuRef}\n className=\"context-menu\"\n role=\"menu\"\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n minWidth,\n }}\n onContextMenu={(e) => e.preventDefault()}\n >\n {items.map((it, i) =>\n it.type === \"divider\" ? (\n <div key={it.key} className=\"context-menu-divider\" role=\"separator\" />\n ) : (\n <button\n key={it.key}\n type=\"button\"\n role=\"menuitem\"\n disabled={it.disabled}\n className={`context-menu-item ${active === i ? \"active\" : \"\"} ${it.danger ? \"danger\" : \"\"}`}\n onMouseEnter={() => isSelectable(it) && setActive(i)}\n onClick={() => {\n if (!isSelectable(it)) return;\n it.onSelect?.();\n close();\n }}\n >\n <span className=\"context-menu-icon\">{it.icon}</span>\n <span className=\"context-menu-label\">{it.label}</span>\n {it.shortcut && <span className=\"context-menu-shortcut\">{it.shortcut}</span>}\n </button>\n )\n )}\n </div>,\n document.body\n )\n : null;\n\n return (\n <>\n {trigger}\n {panel}\n </>\n );\n});\nContextMenu.displayName = \"ContextMenu\";\n"]}
@@ -1,31 +1,34 @@
1
1
  import './tokens-BIIUTPKN.css';
2
2
  import './shared-NJHRNLRH.css';
3
3
  import './AppShell-RCALXUCZ.css';
4
+ import * as React from 'react';
4
5
  import { jsxs, jsx } from 'react/jsx-runtime';
5
6
 
6
7
  // src/components/AppShell/AppShell.tsx
7
- var WindowControls = ({
8
+ var WindowControls = React.forwardRef(({
8
9
  platform = "mac",
9
10
  onMinimize,
10
11
  onMaximize,
11
12
  onClose,
12
- className = ""
13
- }) => {
13
+ className = "",
14
+ ...rest
15
+ }, ref) => {
14
16
  const noDragStyle = { WebkitAppRegion: "no-drag" };
15
17
  if (platform === "windows") {
16
- return /* @__PURE__ */ jsxs("div", { className: `win-controls windows ${className}`, style: noDragStyle, children: [
18
+ return /* @__PURE__ */ jsxs("div", { ref, className: `win-controls windows ${className}`, style: noDragStyle, ...rest, children: [
17
19
  /* @__PURE__ */ jsx("button", { type: "button", className: "win-btn minimize", onClick: onMinimize, "aria-label": "Minimize", children: /* @__PURE__ */ jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d: "M1 5h8", stroke: "currentColor", strokeWidth: "1" }) }) }),
18
20
  /* @__PURE__ */ jsx("button", { type: "button", className: "win-btn maximize", onClick: onMaximize, "aria-label": "Maximize", children: /* @__PURE__ */ jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx("rect", { x: "1", y: "1", width: "8", height: "8", stroke: "currentColor", strokeWidth: "1" }) }) }),
19
21
  /* @__PURE__ */ jsx("button", { type: "button", className: "win-btn close", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx("path", { d: "M1 1l8 8M9 1l-8 8", stroke: "currentColor", strokeWidth: "1" }) }) })
20
22
  ] });
21
23
  }
22
- return /* @__PURE__ */ jsxs("div", { className: `win-controls mac ${className}`, style: noDragStyle, children: [
24
+ return /* @__PURE__ */ jsxs("div", { ref, className: `win-controls mac ${className}`, style: noDragStyle, ...rest, children: [
23
25
  /* @__PURE__ */ jsx("button", { type: "button", className: "win-btn close", onClick: onClose, "aria-label": "Close" }),
24
26
  /* @__PURE__ */ jsx("button", { type: "button", className: "win-btn minimize", onClick: onMinimize, "aria-label": "Minimize" }),
25
27
  /* @__PURE__ */ jsx("button", { type: "button", className: "win-btn maximize", onClick: onMaximize, "aria-label": "Maximize" })
26
28
  ] });
27
- };
28
- var TitleBar = ({
29
+ });
30
+ WindowControls.displayName = "WindowControls";
31
+ var TitleBar = React.forwardRef(({
29
32
  title,
30
33
  platform = "mac",
31
34
  onMinimize,
@@ -34,27 +37,30 @@ var TitleBar = ({
34
37
  center,
35
38
  actions,
36
39
  draggable = true,
37
- className = ""
38
- }) => {
40
+ className = "",
41
+ ...rest
42
+ }, ref) => {
39
43
  const dragStyle = draggable ? { WebkitAppRegion: "drag" } : void 0;
40
44
  const noDragStyle = { WebkitAppRegion: "no-drag" };
41
- return /* @__PURE__ */ jsxs("div", { className: `titlebar ${platform} ${className}`, style: dragStyle, children: [
45
+ return /* @__PURE__ */ jsxs("div", { ref, className: `titlebar ${platform} ${className}`, style: dragStyle, ...rest, children: [
42
46
  platform === "mac" && /* @__PURE__ */ jsx(WindowControls, { platform: "mac", onMinimize, onMaximize, onClose }),
43
47
  /* @__PURE__ */ jsx("div", { className: "titlebar-title", children: title }),
44
48
  center && /* @__PURE__ */ jsx("div", { className: "titlebar-center", style: noDragStyle, children: center }),
45
49
  actions && /* @__PURE__ */ jsx("div", { className: "titlebar-actions", style: noDragStyle, children: actions }),
46
50
  platform === "windows" && /* @__PURE__ */ jsx(WindowControls, { platform: "windows", onMinimize, onMaximize, onClose })
47
51
  ] });
48
- };
49
- var Sidebar = ({
52
+ });
53
+ TitleBar.displayName = "TitleBar";
54
+ var Sidebar = React.forwardRef(({
50
55
  items,
51
56
  activeKey,
52
57
  onSelect,
53
58
  collapsed,
54
59
  header,
55
60
  footer,
56
- className = ""
57
- }) => /* @__PURE__ */ jsxs("aside", { className: `sidebar ${collapsed ? "collapsed" : ""} ${className}`, children: [
61
+ className = "",
62
+ ...rest
63
+ }, ref) => /* @__PURE__ */ jsxs("aside", { ref, className: `sidebar ${collapsed ? "collapsed" : ""} ${className}`, ...rest, children: [
58
64
  header && /* @__PURE__ */ jsx("div", { className: "sidebar-header", children: header }),
59
65
  /* @__PURE__ */ jsx("nav", { className: "sidebar-nav", children: items.map((it) => /* @__PURE__ */ jsxs(
60
66
  "button",
@@ -71,15 +77,17 @@ var Sidebar = ({
71
77
  it.key
72
78
  )) }),
73
79
  footer && /* @__PURE__ */ jsx("div", { className: "sidebar-footer", children: footer })
74
- ] });
75
- var AppShell = ({ sidebar, titleBar, children, className = "" }) => /* @__PURE__ */ jsxs("div", { className: `app-shell ${className}`, children: [
80
+ ] }));
81
+ Sidebar.displayName = "Sidebar";
82
+ var AppShell = React.forwardRef(({ sidebar, titleBar, children, className = "", ...rest }, ref) => /* @__PURE__ */ jsxs("div", { ref, className: `app-shell ${className}`, ...rest, children: [
76
83
  titleBar,
77
84
  /* @__PURE__ */ jsxs("div", { className: "app-shell-body", children: [
78
85
  sidebar,
79
86
  /* @__PURE__ */ jsx("main", { className: "app-shell-main", children })
80
87
  ] })
81
- ] });
88
+ ] }));
89
+ AppShell.displayName = "AppShell";
82
90
 
83
91
  export { AppShell, Sidebar, TitleBar, WindowControls };
84
- //# sourceMappingURL=chunk-UQB5OHMO.js.map
85
- //# sourceMappingURL=chunk-UQB5OHMO.js.map
92
+ //# sourceMappingURL=chunk-44AVDO3T.js.map
93
+ //# sourceMappingURL=chunk-44AVDO3T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":"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","file":"chunk-44AVDO3T.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./AppShell.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface WindowControlsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** macOS traffic lights or Windows-style buttons. */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n className?: string;\n}\n\n/**\n * `WindowControls` — standalone window control buttons.\n * Mac: traffic lights (close/min/max). Windows: rectangular controls.\n */\nexport const WindowControls = React.forwardRef<HTMLDivElement, WindowControlsProps>(({\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n className = \"\",\n ...rest\n}, ref) => {\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n if (platform === \"windows\") {\n return (\n <div ref={ref} className={`win-controls windows ${className}`} style={noDragStyle} {...rest}>\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 5h8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <rect x=\"1\" y=\"1\" width=\"8\" height=\"8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 1l8 8M9 1l-8 8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n </div>\n );\n }\n return (\n <div ref={ref} className={`win-controls mac ${className}`} style={noDragStyle} {...rest}>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\" />\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\" />\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\" />\n </div>\n );\n});\nWindowControls.displayName = \"WindowControls\";\n\nexport interface TitleBarProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n /** Platform appearance — affects button placement. Default \"mac\". */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n /** Extra content in the center. */\n center?: React.ReactNode;\n /** Extra content on the trailing side. */\n actions?: React.ReactNode;\n /** Make the whole bar draggable (Electron `-webkit-app-region: drag`). */\n draggable?: boolean;\n className?: string;\n}\n\n/**\n * `TitleBar` — Electron-style window chrome. Attach at the top of your app.\n * Buttons are non-draggable regions so clicks register correctly.\n */\nexport const TitleBar = React.forwardRef<HTMLDivElement, TitleBarProps>(({\n title,\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n center,\n actions,\n draggable = true,\n className = \"\",\n ...rest\n}, ref) => {\n const dragStyle = draggable ? ({ WebkitAppRegion: \"drag\" } as React.CSSProperties) : undefined;\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n\n return (\n <div ref={ref} className={`titlebar ${platform} ${className}`} style={dragStyle} {...rest}>\n {platform === \"mac\" && (\n <WindowControls platform=\"mac\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n <div className=\"titlebar-title\">{title}</div>\n {center && (\n <div className=\"titlebar-center\" style={noDragStyle}>\n {center}\n </div>\n )}\n {actions && (\n <div className=\"titlebar-actions\" style={noDragStyle}>\n {actions}\n </div>\n )}\n {platform === \"windows\" && (\n <WindowControls platform=\"windows\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n </div>\n );\n});\nTitleBar.displayName = \"TitleBar\";\n\nexport interface SidebarItem {\n key: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n badge?: React.ReactNode;\n children?: SidebarItem[];\n}\n\nexport interface SidebarProps\n extends Omit<React.HTMLAttributes<HTMLElement>, \"onSelect\" | \"children\"> {\n items: SidebarItem[];\n activeKey?: string;\n onSelect?: (key: string) => void;\n /** Collapsed: icons only. */\n collapsed?: boolean;\n /** Header slot (e.g. workspace switcher). */\n header?: React.ReactNode;\n /** Footer slot (e.g. user card). */\n footer?: React.ReactNode;\n className?: string;\n}\n\n/** `Sidebar` — navigation rail. Pair with `AppShell`. */\nexport const Sidebar = React.forwardRef<HTMLElement, SidebarProps>(({\n items,\n activeKey,\n onSelect,\n collapsed,\n header,\n footer,\n className = \"\",\n ...rest\n}, ref) => (\n <aside ref={ref} className={`sidebar ${collapsed ? \"collapsed\" : \"\"} ${className}`} {...rest}>\n {header && <div className=\"sidebar-header\">{header}</div>}\n <nav className=\"sidebar-nav\">\n {items.map((it) => (\n <button\n type=\"button\"\n key={it.key}\n className={`sidebar-item ${activeKey === it.key ? \"active\" : \"\"}`}\n onClick={() => onSelect?.(it.key)}\n >\n {it.icon && <span className=\"sidebar-icon\">{it.icon}</span>}\n {!collapsed && <span className=\"sidebar-label\">{it.label}</span>}\n {!collapsed && it.badge && <span className=\"sidebar-badge\">{it.badge}</span>}\n </button>\n ))}\n </nav>\n {footer && <div className=\"sidebar-footer\">{footer}</div>}\n </aside>\n));\nSidebar.displayName = \"Sidebar\";\n\nexport interface AppShellProps extends React.HTMLAttributes<HTMLDivElement> {\n sidebar?: React.ReactNode;\n titleBar?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `AppShell` — 3-zone Electron layout: title bar across top, sidebar on left, content fills rest.\n */\nexport const AppShell = React.forwardRef<HTMLDivElement, AppShellProps>(({ sidebar, titleBar, children, className = \"\", ...rest }, ref) => (\n <div ref={ref} className={`app-shell ${className}`} {...rest}>\n {titleBar}\n <div className=\"app-shell-body\">\n {sidebar}\n <main className=\"app-shell-main\">{children}</main>\n </div>\n </div>\n));\nAppShell.displayName = \"AppShell\";\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkXUT2Z2L6_cjs = require('./chunk-XUT2Z2L6.cjs');
3
+ var chunkTC5ZL2OS_cjs = require('./chunk-TC5ZL2OS.cjs');
4
4
  require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./Timeline-RHZAZKZ7.css');
@@ -96,7 +96,7 @@ var TimelineItem = ({
96
96
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, children: [
97
97
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-label", children: item.label }),
98
98
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "timeline-item-head", children: [
99
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `timeline-item-dot ${color} ${isPending ? "pending" : ""}`, children: item.dot ?? (isPending && /* @__PURE__ */ jsxRuntime.jsx(chunkXUT2Z2L6_cjs.Spinner, { size: 14 })) }),
99
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `timeline-item-dot ${color} ${isPending ? "pending" : ""}`, children: item.dot ?? (isPending && /* @__PURE__ */ jsxRuntime.jsx(chunkTC5ZL2OS_cjs.Spinner, { size: 14 })) }),
100
100
  !isLast && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-tail" })
101
101
  ] }),
102
102
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-content", children: item.children })
@@ -104,5 +104,5 @@ var TimelineItem = ({
104
104
  };
105
105
 
106
106
  exports.Timeline = Timeline;
107
- //# sourceMappingURL=chunk-TAYFI4RG.cjs.map
108
- //# sourceMappingURL=chunk-TAYFI4RG.cjs.map
107
+ //# sourceMappingURL=chunk-474MXYO5.cjs.map
108
+ //# sourceMappingURL=chunk-474MXYO5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Timeline/Timeline.tsx"],"names":["React","jsxs","jsx","Spinner"],"mappings":"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","file":"chunk-TAYFI4RG.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Timeline.css\";\nimport * as React from \"react\";\nimport { Spinner } from \"../Empty\";\n\nexport interface TimelineItemConfig {\n /** Unique key for the item */\n key?: string;\n /** Content displayed on the right (or main side) */\n children?: React.ReactNode;\n /** Label displayed on the opposite side (alternate/label mode) */\n label?: React.ReactNode;\n /** Dot color */\n color?: \"accent\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"muted\";\n /** Custom dot content (replaces default dot) */\n dot?: React.ReactNode;\n}\n\nexport interface TimelineProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Timeline items */\n items: TimelineItemConfig[];\n /**\n * Show a pending (loading) item at the end.\n * `true` renders a default spinner; a ReactNode renders custom content.\n */\n pending?: boolean | React.ReactNode;\n /** Text shown as the pending item's content */\n pendingContent?: React.ReactNode;\n /** Layout mode */\n mode?: \"left\" | \"right\" | \"alternate\";\n /** Reverse the order of items */\n reverse?: boolean;\n}\n\n/**\n * `Timeline` — vertical timeline with pending/loading state.\n *\n * @example\n * <Timeline items={[{ children: \"Created\" }, { children: \"In Progress\" }]} pending />\n */\nexport const Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n (\n {\n items,\n pending = false,\n pendingContent = \"加载中...\",\n mode = \"left\",\n reverse = false,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const displayItems = [...items];\n if (reverse) displayItems.reverse();\n\n const hasPending = pending !== false;\n\n return (\n <div\n ref={ref}\n className={`timeline timeline-${mode} ${className}`}\n {...rest}\n >\n {displayItems.map((item, i) => (\n <TimelineItem\n key={item.key ?? i}\n item={item}\n isLast={!hasPending && i === displayItems.length - 1}\n position={getPosition(mode, i)}\n />\n ))}\n {hasPending && (\n <TimelineItem\n item={{\n children: pendingContent,\n dot: typeof pending === \"boolean\" ? undefined : pending,\n color: \"muted\",\n }}\n isLast\n isPending\n position={getPosition(mode, displayItems.length)}\n />\n )}\n </div>\n );\n }\n);\nTimeline.displayName = \"Timeline\";\n\nfunction getPosition(\n mode: \"left\" | \"right\" | \"alternate\",\n index: number\n): \"left\" | \"right\" {\n if (mode === \"left\") return \"left\";\n if (mode === \"right\") return \"right\";\n return index % 2 === 0 ? \"left\" : \"right\";\n}\n\ninterface TimelineItemInternalProps {\n item: TimelineItemConfig;\n isLast: boolean;\n isPending?: boolean;\n position: \"left\" | \"right\";\n}\n\nconst TimelineItem: React.FC<TimelineItemInternalProps> = ({\n item,\n isLast,\n isPending,\n position,\n}) => {\n const color = item.color ?? \"accent\";\n const cls = [\n \"timeline-item\",\n `timeline-item-${position}`,\n isLast ? \"timeline-item-last\" : \"\",\n isPending ? \"timeline-item-pending\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={cls}>\n <div className=\"timeline-item-label\">{item.label}</div>\n <div className=\"timeline-item-head\">\n <div className={`timeline-item-dot ${color} ${isPending ? \"pending\" : \"\"}`}>\n {item.dot ?? (isPending && <Spinner size={14} />)}\n </div>\n {!isLast && <div className=\"timeline-item-tail\" />}\n </div>\n <div className=\"timeline-item-content\">{item.children}</div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Timeline/Timeline.tsx"],"names":["React","jsxs","jsx","Spinner"],"mappings":"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","file":"chunk-474MXYO5.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Timeline.css\";\nimport * as React from \"react\";\nimport { Spinner } from \"../Empty\";\n\nexport interface TimelineItemConfig {\n /** Unique key for the item */\n key?: string;\n /** Content displayed on the right (or main side) */\n children?: React.ReactNode;\n /** Label displayed on the opposite side (alternate/label mode) */\n label?: React.ReactNode;\n /** Dot color */\n color?: \"accent\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"muted\";\n /** Custom dot content (replaces default dot) */\n dot?: React.ReactNode;\n}\n\nexport interface TimelineProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Timeline items */\n items: TimelineItemConfig[];\n /**\n * Show a pending (loading) item at the end.\n * `true` renders a default spinner; a ReactNode renders custom content.\n */\n pending?: boolean | React.ReactNode;\n /** Text shown as the pending item's content */\n pendingContent?: React.ReactNode;\n /** Layout mode */\n mode?: \"left\" | \"right\" | \"alternate\";\n /** Reverse the order of items */\n reverse?: boolean;\n}\n\n/**\n * `Timeline` — vertical timeline with pending/loading state.\n *\n * @example\n * <Timeline items={[{ children: \"Created\" }, { children: \"In Progress\" }]} pending />\n */\nexport const Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n (\n {\n items,\n pending = false,\n pendingContent = \"加载中...\",\n mode = \"left\",\n reverse = false,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const displayItems = [...items];\n if (reverse) displayItems.reverse();\n\n const hasPending = pending !== false;\n\n return (\n <div\n ref={ref}\n className={`timeline timeline-${mode} ${className}`}\n {...rest}\n >\n {displayItems.map((item, i) => (\n <TimelineItem\n key={item.key ?? i}\n item={item}\n isLast={!hasPending && i === displayItems.length - 1}\n position={getPosition(mode, i)}\n />\n ))}\n {hasPending && (\n <TimelineItem\n item={{\n children: pendingContent,\n dot: typeof pending === \"boolean\" ? undefined : pending,\n color: \"muted\",\n }}\n isLast\n isPending\n position={getPosition(mode, displayItems.length)}\n />\n )}\n </div>\n );\n }\n);\nTimeline.displayName = \"Timeline\";\n\nfunction getPosition(\n mode: \"left\" | \"right\" | \"alternate\",\n index: number\n): \"left\" | \"right\" {\n if (mode === \"left\") return \"left\";\n if (mode === \"right\") return \"right\";\n return index % 2 === 0 ? \"left\" : \"right\";\n}\n\ninterface TimelineItemInternalProps {\n item: TimelineItemConfig;\n isLast: boolean;\n isPending?: boolean;\n position: \"left\" | \"right\";\n}\n\nconst TimelineItem: React.FC<TimelineItemInternalProps> = ({\n item,\n isLast,\n isPending,\n position,\n}) => {\n const color = item.color ?? \"accent\";\n const cls = [\n \"timeline-item\",\n `timeline-item-${position}`,\n isLast ? \"timeline-item-last\" : \"\",\n isPending ? \"timeline-item-pending\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div className={cls}>\n <div className=\"timeline-item-label\">{item.label}</div>\n <div className=\"timeline-item-head\">\n <div className={`timeline-item-dot ${color} ${isPending ? \"pending\" : \"\"}`}>\n {item.dot ?? (isPending && <Spinner size={14} />)}\n </div>\n {!isLast && <div className=\"timeline-item-tail\" />}\n </div>\n <div className=\"timeline-item-content\">{item.children}</div>\n </div>\n );\n};\n"]}