@fangxinyan/lumina 0.6.0 → 0.6.2

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 (460) hide show
  1. package/dist/Alert.cjs +3 -5
  2. package/dist/Alert.js +2 -4
  3. package/dist/AppShell.cjs +5 -7
  4. package/dist/AppShell.js +1 -3
  5. package/dist/AutoComplete.cjs +6 -7
  6. package/dist/AutoComplete.d.cts +1 -1
  7. package/dist/AutoComplete.d.ts +1 -1
  8. package/dist/AutoComplete.js +5 -6
  9. package/dist/Avatar.cjs +2 -4
  10. package/dist/Avatar.js +1 -3
  11. package/dist/Badge-DPGLV3D3.css +22 -0
  12. package/dist/Badge.cjs +10 -0
  13. package/dist/Badge.d.cts +18 -0
  14. package/dist/Badge.d.ts +18 -0
  15. package/dist/Badge.js +1 -0
  16. package/dist/Button.cjs +3 -9
  17. package/dist/Button.d.cts +5 -10
  18. package/dist/Button.d.ts +5 -10
  19. package/dist/Button.js +2 -4
  20. package/dist/Calendar.cjs +3 -5
  21. package/dist/Calendar.js +2 -4
  22. package/dist/{Card-RG7ECXL2.css → Card-6RMVIHWX.css} +7 -13
  23. package/dist/Card.cjs +2 -8
  24. package/dist/Card.d.cts +7 -11
  25. package/dist/Card.d.ts +7 -11
  26. package/dist/Card.js +1 -3
  27. package/dist/{Cascader-VSYEKQCG.css → Cascader-C2DFSMKJ.css} +64 -0
  28. package/dist/Cascader.cjs +6 -6
  29. package/dist/Cascader.d.cts +18 -2
  30. package/dist/Cascader.d.ts +18 -2
  31. package/dist/Cascader.js +5 -5
  32. package/dist/{Checkbox-SKJATVSN.css → Checkbox-U5EUDSYS.css} +5 -35
  33. package/dist/Checkbox.cjs +3 -9
  34. package/dist/Checkbox.d.cts +1 -18
  35. package/dist/Checkbox.d.ts +1 -18
  36. package/dist/Checkbox.js +2 -4
  37. package/dist/Collapse-66U5YJFY.css +53 -0
  38. package/dist/Collapse.cjs +11 -0
  39. package/dist/Collapse.d.cts +32 -0
  40. package/dist/Collapse.d.ts +32 -0
  41. package/dist/Collapse.js +2 -0
  42. package/dist/ColorPicker.cjs +3 -5
  43. package/dist/ColorPicker.js +2 -4
  44. package/dist/CommandPalette.cjs +5 -6
  45. package/dist/CommandPalette.js +4 -5
  46. package/dist/ContextMenu.cjs +2 -4
  47. package/dist/ContextMenu.js +1 -3
  48. package/dist/Divider.cjs +2 -4
  49. package/dist/Divider.js +1 -3
  50. package/dist/Drawer.cjs +3 -5
  51. package/dist/Drawer.js +2 -4
  52. package/dist/Empty-DC2LPORC.css +28 -0
  53. package/dist/Empty.cjs +2 -12
  54. package/dist/Empty.d.cts +1 -62
  55. package/dist/Empty.d.ts +1 -62
  56. package/dist/Empty.js +1 -3
  57. package/dist/Form.cjs +4 -6
  58. package/dist/Form.d.cts +1 -1
  59. package/dist/Form.d.ts +1 -1
  60. package/dist/Form.js +1 -3
  61. package/dist/Icon.cjs +179 -5
  62. package/dist/Icon.d.cts +96 -3
  63. package/dist/Icon.d.ts +96 -3
  64. package/dist/Icon.js +1 -3
  65. package/dist/Image.cjs +4 -6
  66. package/dist/Image.js +2 -4
  67. package/dist/{Input-33CAH4O6.css → Input-3G4ONWNU.css} +15 -42
  68. package/dist/Input.cjs +6 -7
  69. package/dist/Input.d.cts +19 -23
  70. package/dist/Input.d.ts +19 -23
  71. package/dist/Input.js +3 -4
  72. package/dist/InputNumber.cjs +5 -6
  73. package/dist/InputNumber.d.cts +1 -1
  74. package/dist/InputNumber.d.ts +1 -1
  75. package/dist/InputNumber.js +4 -5
  76. package/dist/List.cjs +2 -4
  77. package/dist/List.js +1 -3
  78. package/dist/Message-2MZ3LFPU.css +45 -0
  79. package/dist/Message.cjs +23 -0
  80. package/dist/Message.d.cts +54 -0
  81. package/dist/Message.d.ts +54 -0
  82. package/dist/Message.js +2 -0
  83. package/dist/{Modal-XSDMU4XJ.css → Modal-2QNDW4SO.css} +27 -0
  84. package/dist/Modal.cjs +4 -6
  85. package/dist/Modal.d.cts +28 -4
  86. package/dist/Modal.d.ts +28 -4
  87. package/dist/Modal.js +3 -5
  88. package/dist/Pagination.cjs +8 -8
  89. package/dist/Pagination.js +7 -7
  90. package/dist/Popover.cjs +3 -5
  91. package/dist/Popover.d.cts +11 -3
  92. package/dist/Popover.d.ts +11 -3
  93. package/dist/Popover.js +2 -4
  94. package/dist/Progress.cjs +2 -4
  95. package/dist/Progress.js +1 -3
  96. package/dist/Radio-GVFDPAZM.css +97 -0
  97. package/dist/Radio.cjs +14 -0
  98. package/dist/Radio.d.cts +36 -0
  99. package/dist/Radio.d.ts +36 -0
  100. package/dist/Radio.js +1 -0
  101. package/dist/{Select-J3CCVFJ7.css → Select-JVBQAZBG.css} +7 -23
  102. package/dist/Select.cjs +7 -7
  103. package/dist/Select.d.cts +25 -4
  104. package/dist/Select.d.ts +25 -4
  105. package/dist/Select.js +6 -6
  106. package/dist/Skeleton-CVWH2VWN.css +40 -0
  107. package/dist/Skeleton.cjs +10 -0
  108. package/dist/Skeleton.d.cts +30 -0
  109. package/dist/Skeleton.d.ts +30 -0
  110. package/dist/Skeleton.js +1 -0
  111. package/dist/Slider.cjs +2 -4
  112. package/dist/Slider.js +1 -3
  113. package/dist/Spin-3GJNMSIH.css +94 -0
  114. package/dist/Spin.cjs +10 -0
  115. package/dist/Spin.d.cts +20 -0
  116. package/dist/Spin.d.ts +20 -0
  117. package/dist/Spin.js +1 -0
  118. package/dist/Splitter.cjs +2 -4
  119. package/dist/Splitter.js +1 -3
  120. package/dist/StatusBar.cjs +3 -5
  121. package/dist/StatusBar.js +1 -3
  122. package/dist/Switch.cjs +2 -4
  123. package/dist/Switch.js +1 -3
  124. package/dist/{Table-2LPTOUIR.css → Table-ATJJQLKU.css} +0 -53
  125. package/dist/Table.cjs +10 -14
  126. package/dist/Table.d.cts +2 -21
  127. package/dist/Table.d.ts +2 -21
  128. package/dist/Table.js +9 -9
  129. package/dist/TablePro-3XVHYLSL.css +45 -0
  130. package/dist/TablePro.cjs +19 -0
  131. package/dist/TablePro.d.cts +21 -0
  132. package/dist/TablePro.d.ts +21 -0
  133. package/dist/TablePro.js +10 -0
  134. package/dist/{Tabs-RHK6XAFF.css → Tabs-BLSNI2T5.css} +0 -34
  135. package/dist/Tabs.cjs +2 -8
  136. package/dist/Tabs.d.cts +1 -16
  137. package/dist/Tabs.d.ts +1 -16
  138. package/dist/Tabs.js +1 -3
  139. package/dist/Tag-LB3OOJAO.css +29 -0
  140. package/dist/Tag.cjs +3 -9
  141. package/dist/Tag.d.cts +1 -11
  142. package/dist/Tag.d.ts +1 -11
  143. package/dist/Tag.js +2 -4
  144. package/dist/Textarea-YNET7IBH.css +54 -0
  145. package/dist/Textarea.cjs +15 -0
  146. package/dist/Textarea.d.cts +25 -0
  147. package/dist/Textarea.d.ts +25 -0
  148. package/dist/Textarea.js +2 -0
  149. package/dist/Theme.cjs +10 -12
  150. package/dist/Theme.js +1 -3
  151. package/dist/{Timeline-RHZAZKZ7.css → Timeline-3ZHOHPXT.css} +2 -2
  152. package/dist/Timeline.cjs +3 -5
  153. package/dist/Timeline.d.cts +1 -1
  154. package/dist/Timeline.d.ts +1 -1
  155. package/dist/Timeline.js +2 -4
  156. package/dist/Tooltip.cjs +3 -5
  157. package/dist/Tooltip.d.cts +17 -4
  158. package/dist/Tooltip.d.ts +17 -4
  159. package/dist/Tooltip.js +2 -4
  160. package/dist/Typography.cjs +7 -9
  161. package/dist/Typography.js +2 -4
  162. package/dist/{chunk-74VZZAUT.cjs → chunk-2TL37AP5.cjs} +0 -2
  163. package/dist/{chunk-4DNHASZU.js → chunk-33NCTOEB.js} +1 -3
  164. package/dist/{chunk-KA3XLPQJ.cjs → chunk-35ZGBAA3.cjs} +3 -5
  165. package/dist/{chunk-IL523MTN.cjs → chunk-3AS5B7MQ.cjs} +13 -34
  166. package/dist/{chunk-ZA36BJIY.cjs → chunk-3YJU3D5S.cjs} +30 -9
  167. package/dist/chunk-45VJGBGN.js +25 -0
  168. package/dist/{chunk-JS6U7UQS.js → chunk-46VXFTEC.js} +3 -5
  169. package/dist/{chunk-V24B7KWT.cjs → chunk-4WTU5P3O.cjs} +3 -5
  170. package/dist/{chunk-3LJO33HI.js → chunk-5C2AI2SD.js} +0 -2
  171. package/dist/{chunk-FCIPCZAK.cjs → chunk-5JSDQ6QQ.cjs} +0 -2
  172. package/dist/{chunk-A3IJM7IX.js → chunk-5TKC6IEN.js} +4 -57
  173. package/dist/{chunk-JF2WNLPF.cjs → chunk-5WAXZJG5.cjs} +12 -21
  174. package/dist/{chunk-E6K6GYUC.js → chunk-65FIH5A3.js} +0 -2
  175. package/dist/chunk-6ACKL3WH.cjs +138 -0
  176. package/dist/{chunk-DCX36FYD.js → chunk-6BWELOCT.js} +0 -2
  177. package/dist/{chunk-WFFWVQK4.cjs → chunk-6LZ54NPO.cjs} +70 -76
  178. package/dist/{chunk-2LIX7ZHX.js → chunk-6YQTMI55.js} +0 -2
  179. package/dist/{chunk-SREMTSVI.cjs → chunk-7ABFUIOB.cjs} +0 -2
  180. package/dist/{chunk-2TZ2R7L2.js → chunk-7JN6FJ55.js} +0 -2
  181. package/dist/{chunk-DB5JMXOI.js → chunk-7NGMQIST.js} +2 -4
  182. package/dist/{chunk-Y7BZMMAV.cjs → chunk-7PNJI5UE.cjs} +0 -2
  183. package/dist/{chunk-KWE2PXJQ.js → chunk-7PQJCLIR.js} +0 -2
  184. package/dist/{chunk-5VIOJW6M.js → chunk-AWXCSX6J.js} +6 -26
  185. package/dist/chunk-AXZ7ELMA.js +41 -0
  186. package/dist/{chunk-XMINE4TN.cjs → chunk-B2KEZQ6S.cjs} +5 -7
  187. package/dist/chunk-CEJ7VBR6.js +283 -0
  188. package/dist/{chunk-ZPDMAMWC.js → chunk-CHMCL7AV.js} +1 -3
  189. package/dist/{chunk-MU4GGX6C.cjs → chunk-CUXV6QNN.cjs} +5 -7
  190. package/dist/{chunk-WLFMOWUY.js → chunk-CXWEOAVU.js} +1 -3
  191. package/dist/{chunk-D242UJZO.js → chunk-DQTSTJ6O.js} +3 -20
  192. package/dist/{chunk-ANAQER3T.js → chunk-DUFRASGO.js} +0 -2
  193. package/dist/{chunk-EARCKSI7.js → chunk-EC4WGEAJ.js} +0 -2
  194. package/dist/chunk-EIY7KEJ3.cjs +132 -0
  195. package/dist/{chunk-LSQD2GFA.js → chunk-EJBHR2P5.js} +3 -5
  196. package/dist/chunk-ELNT3CFO.js +64 -0
  197. package/dist/{chunk-ZN6VS6SO.js → chunk-EQEJTN3V.js} +3 -45
  198. package/dist/chunk-F6RYCBQG.js +25 -0
  199. package/dist/{chunk-S3OSBW7R.cjs → chunk-FBVVRTX2.cjs} +3 -46
  200. package/dist/chunk-FFZ6OMZI.js +110 -0
  201. package/dist/{chunk-MXIWTYNC.js → chunk-FJNWUELL.js} +3 -5
  202. package/dist/chunk-GENABQYA.cjs +47 -0
  203. package/dist/chunk-GMN74OEY.cjs +63 -0
  204. package/dist/{chunk-AXRABZLY.cjs → chunk-GNEZD7KE.cjs} +0 -2
  205. package/dist/chunk-GNEZQMKH.js +218 -0
  206. package/dist/{chunk-JAGJQDAV.cjs → chunk-HPFQXYKG.cjs} +159 -10
  207. package/dist/{chunk-XYGRVPUA.js → chunk-HWFM4MAT.js} +19 -9
  208. package/dist/{chunk-TC5ZL2OS.cjs → chunk-HZSIUOCN.cjs} +2 -57
  209. package/dist/{chunk-N6ZLZUBF.cjs → chunk-IZOHYJUQ.cjs} +0 -2
  210. package/dist/{chunk-6FSOJLY6.js → chunk-JD7A6VM3.js} +11 -19
  211. package/dist/chunk-K2KYM7LW.cjs +28 -0
  212. package/dist/{chunk-X3QINITU.js → chunk-K6F25JXT.js} +1 -3
  213. package/dist/{chunk-NRP3X3PE.cjs → chunk-KD4YYIIO.cjs} +1 -34
  214. package/dist/chunk-KGSADAOD.cjs +170 -0
  215. package/dist/{chunk-ZHCQEJ2Z.js → chunk-KLEKKZ73.js} +0 -2
  216. package/dist/{chunk-QRSPBK3X.js → chunk-LKK2AA7W.js} +0 -2
  217. package/dist/{chunk-V5KSJITO.cjs → chunk-MQV2XN4B.cjs} +5 -7
  218. package/dist/{chunk-2TNJ7TC4.cjs → chunk-MT7UWY6T.cjs} +2 -4
  219. package/dist/chunk-MUXP7ASL.js +26 -0
  220. package/dist/{chunk-W6I67HQQ.js → chunk-NN25YMOL.js} +0 -2
  221. package/dist/{chunk-474MXYO5.cjs → chunk-NTS5L4NQ.cjs} +3 -5
  222. package/dist/{chunk-CVEGVB2C.js → chunk-OBEKX4VR.js} +2 -34
  223. package/dist/chunk-OF3SGLZY.js +385 -0
  224. package/dist/{chunk-6TRVGFFX.cjs → chunk-OF7JIYBY.cjs} +2 -4
  225. package/dist/chunk-ON4DEDMI.js +113 -0
  226. package/dist/chunk-OQBDU5I2.cjs +104 -0
  227. package/dist/{chunk-ZM4P6ELG.cjs → chunk-OYMJVU66.cjs} +50 -41
  228. package/dist/{chunk-4JHFGSNH.js → chunk-PH3YECMF.js} +1 -3
  229. package/dist/{chunk-3EGZ6TBF.cjs → chunk-PL6DRFUO.cjs} +0 -2
  230. package/dist/chunk-Q5SZIU7Z.cjs +47 -0
  231. package/dist/{chunk-SWB57EA2.js → chunk-QCILPZWP.js} +0 -2
  232. package/dist/chunk-QGHYQCF3.cjs +240 -0
  233. package/dist/chunk-QKQHZIF3.cjs +86 -0
  234. package/dist/{chunk-Q7CDWNM6.cjs → chunk-RF2EY5JS.cjs} +0 -2
  235. package/dist/{chunk-2K5HZLXW.cjs → chunk-S3VXH5L4.cjs} +0 -2
  236. package/dist/{chunk-P4CGE5C7.cjs → chunk-SKMP2A5O.cjs} +5 -7
  237. package/dist/{chunk-RXL26GSI.cjs → chunk-SWBWZIL4.cjs} +0 -2
  238. package/dist/{chunk-YRAQRENN.js → chunk-TEEFR2FD.js} +29 -8
  239. package/dist/{chunk-YVSZLQTQ.cjs → chunk-TEG7NJHS.cjs} +3 -5
  240. package/dist/{chunk-DH4NYYJP.cjs → chunk-TJII7BQ2.cjs} +263 -4
  241. package/dist/{chunk-HHSVGNJA.cjs → chunk-TZJH5HBT.cjs} +6 -8
  242. package/dist/{chunk-T7ZBJJC4.js → chunk-UMDGS4BP.js} +1 -3
  243. package/dist/chunk-USQ43DJ5.js +147 -0
  244. package/dist/{chunk-RNVE2LMJ.cjs → chunk-UUHFKIWP.cjs} +20 -10
  245. package/dist/chunk-WGZ2KJTZ.js +81 -0
  246. package/dist/{chunk-RHZOBQON.js → chunk-WKKSAGYH.js} +40 -31
  247. package/dist/{chunk-XXE5TQ7I.cjs → chunk-WNM5RVXR.cjs} +0 -2
  248. package/dist/{chunk-4XSP4HHZ.js → chunk-XD3JGL5O.js} +2 -4
  249. package/dist/{chunk-44AVDO3T.js → chunk-XRR3CYQL.js} +0 -2
  250. package/dist/{chunk-ZZXNHPF3.js → chunk-XTIN5545.js} +68 -74
  251. package/dist/{chunk-3XIDJEYR.cjs → chunk-YB3IWIOJ.cjs} +0 -2
  252. package/dist/{chunk-EHZXEZI2.cjs → chunk-YLIQ37KY.cjs} +0 -2
  253. package/dist/{chunk-QCNHDDSD.cjs → chunk-ZIP7F4UF.cjs} +4 -22
  254. package/dist/index.cjs +346 -158
  255. package/dist/index.d.cts +23 -17
  256. package/dist/index.d.ts +23 -17
  257. package/dist/index.js +47 -43
  258. package/dist/styles.css +313 -192
  259. package/docs/llms/badge.md +3 -3
  260. package/docs/llms/button.md +7 -38
  261. package/docs/llms/card.md +6 -12
  262. package/docs/llms/cascader.md +19 -0
  263. package/docs/llms/{accordion.md → collapse.md} +13 -11
  264. package/docs/llms/drawer.md +1 -1
  265. package/docs/llms/form.md +1 -1
  266. package/docs/llms/input.md +25 -16
  267. package/docs/llms/message.md +63 -0
  268. package/docs/llms/modal.md +30 -0
  269. package/docs/llms/popover.md +18 -1
  270. package/docs/llms/radio.md +37 -1
  271. package/docs/llms/select.md +20 -0
  272. package/docs/llms/spin.md +59 -0
  273. package/docs/llms/table.md +3 -3
  274. package/docs/llms/tooltip.md +16 -3
  275. package/docs/llms.md +5 -5
  276. package/package.json +19 -53
  277. package/dist/Accordion-REMDCQUD.css +0 -44
  278. package/dist/Accordion.cjs +0 -13
  279. package/dist/Accordion.cjs.map +0 -1
  280. package/dist/Accordion.d.cts +0 -33
  281. package/dist/Accordion.d.ts +0 -33
  282. package/dist/Accordion.js +0 -4
  283. package/dist/Accordion.js.map +0 -1
  284. package/dist/Alert.cjs.map +0 -1
  285. package/dist/Alert.js.map +0 -1
  286. package/dist/AppShell.cjs.map +0 -1
  287. package/dist/AppShell.js.map +0 -1
  288. package/dist/AutoComplete.cjs.map +0 -1
  289. package/dist/AutoComplete.js.map +0 -1
  290. package/dist/Avatar.cjs.map +0 -1
  291. package/dist/Avatar.js.map +0 -1
  292. package/dist/Button.cjs.map +0 -1
  293. package/dist/Button.js.map +0 -1
  294. package/dist/Calendar.cjs.map +0 -1
  295. package/dist/Calendar.js.map +0 -1
  296. package/dist/Card.cjs.map +0 -1
  297. package/dist/Card.js.map +0 -1
  298. package/dist/Cascader.cjs.map +0 -1
  299. package/dist/Cascader.js.map +0 -1
  300. package/dist/Checkbox.cjs.map +0 -1
  301. package/dist/Checkbox.js.map +0 -1
  302. package/dist/ColorPicker.cjs.map +0 -1
  303. package/dist/ColorPicker.js.map +0 -1
  304. package/dist/CommandPalette.cjs.map +0 -1
  305. package/dist/CommandPalette.js.map +0 -1
  306. package/dist/ContextMenu.cjs.map +0 -1
  307. package/dist/ContextMenu.js.map +0 -1
  308. package/dist/Divider.cjs.map +0 -1
  309. package/dist/Divider.js.map +0 -1
  310. package/dist/Drawer.cjs.map +0 -1
  311. package/dist/Drawer.js.map +0 -1
  312. package/dist/Empty-NQ72W3D7.css +0 -160
  313. package/dist/Empty.cjs.map +0 -1
  314. package/dist/Empty.js.map +0 -1
  315. package/dist/Form.cjs.map +0 -1
  316. package/dist/Form.js.map +0 -1
  317. package/dist/Icon.cjs.map +0 -1
  318. package/dist/Icon.js.map +0 -1
  319. package/dist/Image.cjs.map +0 -1
  320. package/dist/Image.js.map +0 -1
  321. package/dist/Input.cjs.map +0 -1
  322. package/dist/Input.js.map +0 -1
  323. package/dist/InputNumber.cjs.map +0 -1
  324. package/dist/InputNumber.js.map +0 -1
  325. package/dist/List.cjs.map +0 -1
  326. package/dist/List.js.map +0 -1
  327. package/dist/Modal.cjs.map +0 -1
  328. package/dist/Modal.js.map +0 -1
  329. package/dist/Pagination.cjs.map +0 -1
  330. package/dist/Pagination.js.map +0 -1
  331. package/dist/Popover.cjs.map +0 -1
  332. package/dist/Popover.js.map +0 -1
  333. package/dist/Progress.cjs.map +0 -1
  334. package/dist/Progress.js.map +0 -1
  335. package/dist/Select.cjs.map +0 -1
  336. package/dist/Select.js.map +0 -1
  337. package/dist/Slider.cjs.map +0 -1
  338. package/dist/Slider.js.map +0 -1
  339. package/dist/Splitter.cjs.map +0 -1
  340. package/dist/Splitter.js.map +0 -1
  341. package/dist/StatusBar.cjs.map +0 -1
  342. package/dist/StatusBar.js.map +0 -1
  343. package/dist/Switch.cjs.map +0 -1
  344. package/dist/Switch.js.map +0 -1
  345. package/dist/Table.cjs.map +0 -1
  346. package/dist/Table.js.map +0 -1
  347. package/dist/Tabs.cjs.map +0 -1
  348. package/dist/Tabs.js.map +0 -1
  349. package/dist/Tag-FGDY3W7E.css +0 -51
  350. package/dist/Tag.cjs.map +0 -1
  351. package/dist/Tag.js.map +0 -1
  352. package/dist/Theme.cjs.map +0 -1
  353. package/dist/Theme.js.map +0 -1
  354. package/dist/Timeline.cjs.map +0 -1
  355. package/dist/Timeline.js.map +0 -1
  356. package/dist/Toast-YSACW3EM.css +0 -45
  357. package/dist/Toast.cjs +0 -17
  358. package/dist/Toast.cjs.map +0 -1
  359. package/dist/Toast.d.cts +0 -26
  360. package/dist/Toast.d.ts +0 -26
  361. package/dist/Toast.js +0 -4
  362. package/dist/Toast.js.map +0 -1
  363. package/dist/Tooltip.cjs.map +0 -1
  364. package/dist/Tooltip.js.map +0 -1
  365. package/dist/Typography.cjs.map +0 -1
  366. package/dist/Typography.js.map +0 -1
  367. package/dist/chunk-2K5HZLXW.cjs.map +0 -1
  368. package/dist/chunk-2LIX7ZHX.js.map +0 -1
  369. package/dist/chunk-2TNJ7TC4.cjs.map +0 -1
  370. package/dist/chunk-2TZ2R7L2.js.map +0 -1
  371. package/dist/chunk-3EGZ6TBF.cjs.map +0 -1
  372. package/dist/chunk-3LJO33HI.js.map +0 -1
  373. package/dist/chunk-3XIDJEYR.cjs.map +0 -1
  374. package/dist/chunk-44AVDO3T.js.map +0 -1
  375. package/dist/chunk-474MXYO5.cjs.map +0 -1
  376. package/dist/chunk-4DNHASZU.js.map +0 -1
  377. package/dist/chunk-4JHFGSNH.js.map +0 -1
  378. package/dist/chunk-4SCDDSXY.js +0 -41
  379. package/dist/chunk-4SCDDSXY.js.map +0 -1
  380. package/dist/chunk-4XSP4HHZ.js.map +0 -1
  381. package/dist/chunk-5VIOJW6M.js.map +0 -1
  382. package/dist/chunk-6CAEGNCK.js +0 -101
  383. package/dist/chunk-6CAEGNCK.js.map +0 -1
  384. package/dist/chunk-6FSOJLY6.js.map +0 -1
  385. package/dist/chunk-6TRVGFFX.cjs.map +0 -1
  386. package/dist/chunk-74VZZAUT.cjs.map +0 -1
  387. package/dist/chunk-A3IJM7IX.js.map +0 -1
  388. package/dist/chunk-ANAQER3T.js.map +0 -1
  389. package/dist/chunk-AXRABZLY.cjs.map +0 -1
  390. package/dist/chunk-BSHHQOFY.js +0 -170
  391. package/dist/chunk-BSHHQOFY.js.map +0 -1
  392. package/dist/chunk-CVEGVB2C.js.map +0 -1
  393. package/dist/chunk-D242UJZO.js.map +0 -1
  394. package/dist/chunk-DB5JMXOI.js.map +0 -1
  395. package/dist/chunk-DCX36FYD.js.map +0 -1
  396. package/dist/chunk-DH4NYYJP.cjs.map +0 -1
  397. package/dist/chunk-DUNQNSVK.js +0 -125
  398. package/dist/chunk-DUNQNSVK.js.map +0 -1
  399. package/dist/chunk-E6K6GYUC.js.map +0 -1
  400. package/dist/chunk-EARCKSI7.js.map +0 -1
  401. package/dist/chunk-EHZXEZI2.cjs.map +0 -1
  402. package/dist/chunk-FBQLNAUI.cjs +0 -123
  403. package/dist/chunk-FBQLNAUI.cjs.map +0 -1
  404. package/dist/chunk-FCIPCZAK.cjs.map +0 -1
  405. package/dist/chunk-FSOJHDXH.js +0 -76
  406. package/dist/chunk-FSOJHDXH.js.map +0 -1
  407. package/dist/chunk-HHSVGNJA.cjs.map +0 -1
  408. package/dist/chunk-HQO7EZNQ.cjs +0 -147
  409. package/dist/chunk-HQO7EZNQ.cjs.map +0 -1
  410. package/dist/chunk-IL523MTN.cjs.map +0 -1
  411. package/dist/chunk-JAGJQDAV.cjs.map +0 -1
  412. package/dist/chunk-JF2WNLPF.cjs.map +0 -1
  413. package/dist/chunk-JS6U7UQS.js.map +0 -1
  414. package/dist/chunk-KA3XLPQJ.cjs.map +0 -1
  415. package/dist/chunk-KWE2PXJQ.js.map +0 -1
  416. package/dist/chunk-LSQD2GFA.js.map +0 -1
  417. package/dist/chunk-MU4GGX6C.cjs.map +0 -1
  418. package/dist/chunk-MUFMJPRT.cjs +0 -64
  419. package/dist/chunk-MUFMJPRT.cjs.map +0 -1
  420. package/dist/chunk-MXIWTYNC.js.map +0 -1
  421. package/dist/chunk-N6ZLZUBF.cjs.map +0 -1
  422. package/dist/chunk-NRP3X3PE.cjs.map +0 -1
  423. package/dist/chunk-P4CGE5C7.cjs.map +0 -1
  424. package/dist/chunk-PX5ABNKV.js +0 -134
  425. package/dist/chunk-PX5ABNKV.js.map +0 -1
  426. package/dist/chunk-Q7CDWNM6.cjs.map +0 -1
  427. package/dist/chunk-QCNHDDSD.cjs.map +0 -1
  428. package/dist/chunk-QRSPBK3X.js.map +0 -1
  429. package/dist/chunk-RHZOBQON.js.map +0 -1
  430. package/dist/chunk-RNVE2LMJ.cjs.map +0 -1
  431. package/dist/chunk-RXL26GSI.cjs.map +0 -1
  432. package/dist/chunk-S3OSBW7R.cjs.map +0 -1
  433. package/dist/chunk-SREMTSVI.cjs.map +0 -1
  434. package/dist/chunk-SWB57EA2.js.map +0 -1
  435. package/dist/chunk-T7ZBJJC4.js.map +0 -1
  436. package/dist/chunk-TC5ZL2OS.cjs.map +0 -1
  437. package/dist/chunk-V24B7KWT.cjs.map +0 -1
  438. package/dist/chunk-V5KSJITO.cjs.map +0 -1
  439. package/dist/chunk-W6I67HQQ.js.map +0 -1
  440. package/dist/chunk-WFFWVQK4.cjs.map +0 -1
  441. package/dist/chunk-WLFMOWUY.js.map +0 -1
  442. package/dist/chunk-X3QINITU.js.map +0 -1
  443. package/dist/chunk-XMFVAYBP.cjs +0 -102
  444. package/dist/chunk-XMFVAYBP.cjs.map +0 -1
  445. package/dist/chunk-XMINE4TN.cjs.map +0 -1
  446. package/dist/chunk-XXE5TQ7I.cjs.map +0 -1
  447. package/dist/chunk-XYGRVPUA.js.map +0 -1
  448. package/dist/chunk-Y7BZMMAV.cjs.map +0 -1
  449. package/dist/chunk-YRAQRENN.js.map +0 -1
  450. package/dist/chunk-YVSZLQTQ.cjs.map +0 -1
  451. package/dist/chunk-ZA36BJIY.cjs.map +0 -1
  452. package/dist/chunk-ZHCQEJ2Z.js.map +0 -1
  453. package/dist/chunk-ZM4P6ELG.cjs.map +0 -1
  454. package/dist/chunk-ZN6VS6SO.js.map +0 -1
  455. package/dist/chunk-ZPDMAMWC.js.map +0 -1
  456. package/dist/chunk-ZZXNHPF3.js.map +0 -1
  457. package/dist/index.cjs.map +0 -1
  458. package/dist/index.js.map +0 -1
  459. package/docs/llms/spinner.md +0 -58
  460. package/docs/llms/toast.md +0 -51
package/dist/List.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"List.cjs"}
package/dist/List.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"List.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Modal.cjs"}
package/dist/Modal.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Modal.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Pagination.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Pagination.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Popover.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Popover.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Progress.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Progress.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Select.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Select.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Slider.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Slider.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Splitter.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Splitter.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"StatusBar.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"StatusBar.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Switch.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Switch.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Table.cjs"}
package/dist/Table.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Table.js"}
package/dist/Tabs.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Tabs.cjs"}
package/dist/Tabs.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Tabs.js"}
@@ -1,51 +0,0 @@
1
- /* ============ Tag & Badge ============ */
2
- .tag {
3
- display: inline-flex;
4
- align-items: center;
5
- gap: 6px;
6
- height: 24px;
7
- padding: 0 10px;
8
- border-radius: var(--r-pill);
9
- font-size: 11px;
10
- font-weight: 500;
11
- background: var(--bg);
12
- box-shadow: var(--neu-flat);
13
- color: var(--fg-muted);
14
- }
15
- .tag.accent { color: var(--accent-ink); }
16
- .tag.info { color: var(--info); }
17
- .tag.success { color: var(--success); }
18
- .tag.warning { color: var(--warning); }
19
- .tag.danger { color: var(--danger); }
20
- .tag.solid { background: var(--accent); color: white; box-shadow: 0 2px 6px var(--accent-glow); }
21
- .tag.solid.info { background: var(--info); color: white; box-shadow: 0 2px 6px color-mix(in oklch, var(--info) 35%, transparent); }
22
- .tag.solid.success { background: var(--success); color: white; box-shadow: 0 2px 6px color-mix(in oklch, var(--success) 35%, transparent); }
23
- .tag.solid.warning { background: var(--warning); color: white; box-shadow: 0 2px 6px color-mix(in oklch, var(--warning) 35%, transparent); }
24
- .tag.solid.danger { background: var(--danger); color: white; box-shadow: 0 2px 6px color-mix(in oklch, var(--danger) 35%, transparent); }
25
- .tag.borderless { background: transparent; box-shadow: none; }
26
- .tag .dot { width: 6px; height: 6px; border-radius: 999px; background: currentColor; }
27
- .tag .tag-ico { color: currentColor; display: inline-flex; }
28
- .tag .x { cursor: pointer; color: var(--fg-subtle); margin-left: 2px; display: inline-flex; }
29
- .tag .x:hover { color: var(--fg); }
30
-
31
- .badge {
32
- display: inline-flex;
33
- align-items: center; justify-content: center;
34
- min-width: 18px; height: 18px;
35
- padding: 0 6px;
36
- border-radius: 999px;
37
- font-size: 10px;
38
- font-weight: 700;
39
- background: var(--danger);
40
- color: white;
41
- box-shadow: 0 1px 4px rgba(0,0,0,0.15);
42
- font-variant-numeric: tabular-nums;
43
- }
44
- .badge.dot { min-width: 10px; height: 10px; padding: 0; }
45
- .badge.accent { background: var(--accent); box-shadow: 0 1px 4px var(--accent-glow); }
46
- .badge.info { background: var(--info); box-shadow: 0 1px 4px color-mix(in oklch, var(--info) 35%, transparent); }
47
- .badge.success { background: var(--success); box-shadow: 0 1px 4px color-mix(in oklch, var(--success) 35%, transparent); }
48
- .badge.warning { background: var(--warning); box-shadow: 0 1px 4px color-mix(in oklch, var(--warning) 35%, transparent); }
49
- .badge.neutral { background: var(--fg-muted); box-shadow: 0 1px 4px rgba(0,0,0,0.15); }
50
- .badge-wrap { position: relative; display: inline-block; }
51
- .badge-wrap > .badge { position: absolute; top: -4px; right: -4px; }
package/dist/Tag.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Tag.cjs"}
package/dist/Tag.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Tag.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Theme.cjs"}
package/dist/Theme.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Theme.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Timeline.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Timeline.js"}
@@ -1,45 +0,0 @@
1
- /* ============ Toast ============ */
2
- .toast-container {
3
- position: fixed;
4
- display: flex;
5
- flex-direction: column;
6
- gap: 10px;
7
- z-index: 300;
8
- pointer-events: none;
9
- }
10
- .toast-container.top-right { top: 56px; right: 20px; }
11
- .toast-container.top-left { top: 56px; left: 20px; }
12
- .toast-container.bottom-right { bottom: 20px; right: 20px; }
13
- .toast-container.bottom-left { bottom: 20px; left: 20px; }
14
- .toast-container.top-center { top: 56px; left: 50%; transform: translateX(-50%); align-items: center; }
15
- .toast {
16
- background: var(--bg);
17
- border-radius: var(--r-md);
18
- box-shadow: var(--neu-float);
19
- padding: 12px 16px;
20
- min-width: 240px;
21
- display: flex; align-items: center; gap: 10px;
22
- font-size: 13px;
23
- pointer-events: auto;
24
- animation: toastIn var(--dur-slow) var(--ease);
25
- border-left: 3px solid var(--accent);
26
- }
27
- .toast.success { border-color: var(--success); }
28
- .toast.warning { border-color: var(--warning); }
29
- .toast.danger { border-color: var(--danger); }
30
- .toast .toast-icon { color: var(--accent); flex-shrink: 0; }
31
- .toast.success .toast-icon { color: var(--success); }
32
- .toast.warning .toast-icon { color: var(--warning); }
33
- .toast.danger .toast-icon { color: var(--danger); }
34
- .toast-body { flex: 1; min-width: 0; }
35
- .toast-title { font-weight: 600; margin-bottom: 2px; }
36
- .toast-msg { color: var(--fg-muted); font-size: 12px; }
37
- .toast-close {
38
- background: transparent; border: none;
39
- color: var(--fg-subtle); cursor: pointer;
40
- padding: 0 2px; font-family: inherit;
41
- }
42
- .toast-close:hover { color: var(--fg); }
43
- .toast.leaving { animation: toastOut var(--dur) var(--ease) forwards; }
44
- @keyframes toastIn { from { opacity: 0; transform: translateX(20px); } }
45
- @keyframes toastOut { to { opacity: 0; transform: translateX(20px); } }
package/dist/Toast.cjs DELETED
@@ -1,17 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkXMFVAYBP_cjs = require('./chunk-XMFVAYBP.cjs');
4
- require('./chunk-DH4NYYJP.cjs');
5
-
6
-
7
-
8
- Object.defineProperty(exports, "ToastContainer", {
9
- enumerable: true,
10
- get: function () { return chunkXMFVAYBP_cjs.ToastContainer; }
11
- });
12
- Object.defineProperty(exports, "toast", {
13
- enumerable: true,
14
- get: function () { return chunkXMFVAYBP_cjs.toast; }
15
- });
16
- //# sourceMappingURL=Toast.cjs.map
17
- //# sourceMappingURL=Toast.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Toast.cjs"}
package/dist/Toast.d.cts DELETED
@@ -1,26 +0,0 @@
1
- import * as React from 'react';
2
-
3
- type ToastType = "info" | "success" | "warning" | "danger";
4
- interface ToastItem {
5
- id: number;
6
- type: ToastType;
7
- title?: React.ReactNode;
8
- message?: React.ReactNode;
9
- duration?: number;
10
- }
11
- declare const toast: {
12
- show(t: Omit<ToastItem, "id">): number;
13
- info: (message: React.ReactNode, title?: React.ReactNode) => number;
14
- success: (message: React.ReactNode, title?: React.ReactNode) => number;
15
- warn: (message: React.ReactNode, title?: React.ReactNode) => number;
16
- error: (message: React.ReactNode, title?: React.ReactNode) => number;
17
- dismiss(id: number): void;
18
- clear(): void;
19
- };
20
- interface ToastContainerProps extends React.HTMLAttributes<HTMLDivElement> {
21
- placement?: "top-right" | "top-left" | "bottom-right" | "bottom-left" | "top-center";
22
- }
23
- /** `ToastContainer` — mount once at your app root; subscribes to `toast.*` calls. */
24
- declare const ToastContainer: React.ForwardRefExoticComponent<ToastContainerProps & React.RefAttributes<HTMLDivElement>>;
25
-
26
- export { ToastContainer, type ToastContainerProps, type ToastItem, type ToastType, toast };
package/dist/Toast.d.ts DELETED
@@ -1,26 +0,0 @@
1
- import * as React from 'react';
2
-
3
- type ToastType = "info" | "success" | "warning" | "danger";
4
- interface ToastItem {
5
- id: number;
6
- type: ToastType;
7
- title?: React.ReactNode;
8
- message?: React.ReactNode;
9
- duration?: number;
10
- }
11
- declare const toast: {
12
- show(t: Omit<ToastItem, "id">): number;
13
- info: (message: React.ReactNode, title?: React.ReactNode) => number;
14
- success: (message: React.ReactNode, title?: React.ReactNode) => number;
15
- warn: (message: React.ReactNode, title?: React.ReactNode) => number;
16
- error: (message: React.ReactNode, title?: React.ReactNode) => number;
17
- dismiss(id: number): void;
18
- clear(): void;
19
- };
20
- interface ToastContainerProps extends React.HTMLAttributes<HTMLDivElement> {
21
- placement?: "top-right" | "top-left" | "bottom-right" | "bottom-left" | "top-center";
22
- }
23
- /** `ToastContainer` — mount once at your app root; subscribes to `toast.*` calls. */
24
- declare const ToastContainer: React.ForwardRefExoticComponent<ToastContainerProps & React.RefAttributes<HTMLDivElement>>;
25
-
26
- export { ToastContainer, type ToastContainerProps, type ToastItem, type ToastType, toast };
package/dist/Toast.js DELETED
@@ -1,4 +0,0 @@
1
- export { ToastContainer, toast } from './chunk-FSOJHDXH.js';
2
- import './chunk-BSHHQOFY.js';
3
- //# sourceMappingURL=Toast.js.map
4
- //# sourceMappingURL=Toast.js.map
package/dist/Toast.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Toast.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Tooltip.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Tooltip.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Typography.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Typography.js"}
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
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 +0,0 @@
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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Slider/Slider.tsx"],"names":[],"mappings":"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","file":"chunk-2TZ2R7L2.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Slider.css\";\nimport * as React from \"react\";\n\nexport type SliderRangeValue = [number, number];\nexport type SliderValue = number | SliderRangeValue;\n\ninterface SliderBaseProps {\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n showValue?: boolean;\n tone?: \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** Custom gradient colors mapped from min→max. Overrides `tone` for fill & thumb. */\n colors?: string[];\n /** Tick marks with labels. Clicking a mark snaps to it. */\n marks?: Record<number, React.ReactNode>;\n className?: string;\n}\n\nexport interface SliderSingleProps extends SliderBaseProps {\n range?: false;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n}\n\nexport interface SliderRangeProps extends SliderBaseProps {\n range: true;\n value?: SliderRangeValue;\n defaultValue?: SliderRangeValue;\n onChange?: (value: SliderRangeValue) => void;\n}\n\nexport type SliderProps = SliderSingleProps | SliderRangeProps;\n\nfunction clamp(v: number, lo: number, hi: number) {\n return Math.max(lo, Math.min(hi, v));\n}\n\nfunction snap(raw: number, step: number, min: number) {\n return Math.round((raw - min) / step) * step + min;\n}\n\nfunction lerpColor(colors: string[], t: number): string {\n const pos = Math.max(0, Math.min(1, t)) * (colors.length - 1);\n const i = Math.min(Math.floor(pos), colors.length - 2);\n const frac = pos - i;\n if (frac === 0) return colors[i];\n return `color-mix(in oklch, ${colors[i + 1]} ${Math.round(frac * 100)}%, ${colors[i]})`;\n}\n\n/** `Slider` — neumorphic range input with grooved track.\n * @example <Slider defaultValue={40} showValue />\n */\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (props, ref) => {\n const {\n min = 0,\n max = 100,\n step = 1,\n disabled,\n showValue,\n tone = \"accent\",\n colors,\n marks,\n className = \"\",\n } = props;\n\n const range = (props as SliderRangeProps).range === true;\n const controlled = (props as { value?: SliderValue }).value;\n const defaultVal = (props as { defaultValue?: SliderValue }).defaultValue;\n const onChange = (props as { onChange?: (v: any) => void }).onChange;\n\n const initRef = React.useRef<number[]>(\n defaultVal !== undefined\n ? Array.isArray(defaultVal)\n ? [...defaultVal]\n : [defaultVal]\n : range\n ? [min, max]\n : [min]\n );\n const [inner, setInner] = React.useState<number[]>(initRef.current);\n\n const isControlled = controlled !== undefined;\n const vals = isControlled\n ? Array.isArray(controlled)\n ? controlled\n : [controlled]\n : inner;\n\n const valsRef = React.useRef(vals);\n valsRef.current = vals;\n\n const trackRef = React.useRef<HTMLDivElement>(null);\n const thumbEls = React.useRef<(HTMLDivElement | null)[]>([]);\n const dragging = React.useRef<number | null>(null);\n\n const pct = (n: number) => ((n - min) / (max - min)) * 100;\n\n const commit = React.useCallback(\n (next: number[]) => {\n if (!isControlled) setInner(next);\n if (range) {\n onChange?.([next[0], next[1]] as SliderRangeValue);\n } else {\n onChange?.(next[0]);\n }\n },\n [isControlled, range, onChange]\n );\n\n const setAt = React.useCallback(\n (index: number, raw: number) => {\n const snapped = snap(clamp(raw, min, max), step, min);\n const clamped = clamp(snapped, min, max);\n const out = [...valsRef.current];\n out[index] = clamped;\n if (range && out.length === 2 && out[0] > out[1]) out.sort((a, b) => a - b);\n commit(out);\n },\n [min, max, step, range, commit]\n );\n\n const valFromX = React.useCallback(\n (clientX: number) => {\n const rect = trackRef.current?.getBoundingClientRect();\n if (!rect) return min;\n const ratio = clamp((clientX - rect.left) / rect.width, 0, 1);\n return min + ratio * (max - min);\n },\n [min, max]\n );\n\n const closerIndex = React.useCallback(\n (target: number) => {\n const v = valsRef.current;\n if (!range || v.length < 2) return 0;\n const d0 = Math.abs(v[0] - target);\n const d1 = Math.abs(v[1] - target);\n if (d0 === d1) return target < v[0] ? 0 : 1;\n return d0 < d1 ? 0 : 1;\n },\n [range]\n );\n\n const onPointerDown = React.useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n const val = valFromX(e.clientX);\n const idx = closerIndex(val);\n dragging.current = idx;\n setAt(idx, val);\n trackRef.current?.setPointerCapture(e.pointerId);\n thumbEls.current[idx]?.focus();\n },\n [disabled, valFromX, closerIndex, setAt]\n );\n\n const onPointerMove = React.useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (dragging.current === null) return;\n setAt(dragging.current, valFromX(e.clientX));\n },\n [valFromX, setAt]\n );\n\n const onPointerUp = React.useCallback(() => {\n dragging.current = null;\n }, []);\n\n const handleKey = React.useCallback(\n (index: number, e: React.KeyboardEvent) => {\n if (disabled) return;\n let delta = 0;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowUp\") delta = step;\n else if (e.key === \"ArrowLeft\" || e.key === \"ArrowDown\") delta = -step;\n else if (e.key === \"Home\") { setAt(index, min); return; }\n else if (e.key === \"End\") { setAt(index, max); return; }\n else return;\n e.preventDefault();\n setAt(index, valsRef.current[index] + delta);\n },\n [disabled, step, min, max, setAt]\n );\n\n const handleMarkClick = React.useCallback(\n (mark: number) => {\n if (disabled) return;\n setAt(closerIndex(mark), mark);\n },\n [disabled, closerIndex, setAt]\n );\n\n const fillLeft = range ? pct(Math.min(vals[0], vals[1])) : 0;\n const fillRight = range\n ? 100 - pct(Math.max(vals[0], vals[1]))\n : 100 - pct(vals[0]);\n\n const hasGradient = colors && colors.length >= 2;\n\n const fillStyle: React.CSSProperties = {\n left: `${fillLeft}%`,\n right: `${fillRight}%`,\n };\n if (hasGradient) {\n const w = 100 - fillLeft - fillRight;\n if (w > 0) {\n const stops = colors.map((c, i) => {\n const orig = (i / (colors.length - 1)) * 100;\n return `${c} ${((orig - fillLeft) / w * 100).toFixed(2)}%`;\n }).join(\", \");\n fillStyle.background = `linear-gradient(to right, ${stops})`;\n fillStyle.boxShadow = \"none\";\n }\n }\n\n return (\n <div\n ref={ref}\n className={`slider ${range ? \"range\" : \"\"} ${hasGradient ? \"gradient\" : tone} ${disabled ? \"disabled\" : \"\"} ${marks ? \"has-marks\" : \"\"} ${className}`}\n >\n <div className=\"slider-rail\">\n <div\n className=\"slider-track\"\n ref={trackRef}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n >\n <div className=\"slider-fill\" style={fillStyle} />\n </div>\n\n {vals.map((n, i) => {\n const thumbStyle: React.CSSProperties = { left: `${pct(n)}%` };\n if (hasGradient) {\n (thumbStyle as any)[\"--slider-thumb-color\"] = lerpColor(colors, (n - min) / (max - min));\n }\n return (\n <div\n key={i}\n ref={(el) => { thumbEls.current[i] = el; }}\n className=\"slider-thumb\"\n style={thumbStyle}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={n}\n aria-disabled={disabled || undefined}\n onKeyDown={(e) => handleKey(i, e)}\n onPointerDown={(e) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n dragging.current = i;\n trackRef.current?.setPointerCapture(e.pointerId);\n e.currentTarget.focus();\n }}\n />\n );\n })}\n\n {marks && (\n <div className=\"slider-marks\">\n {Object.entries(marks).map(([k, label]) => {\n const n = Number(k);\n const active = range\n ? n >= Math.min(vals[0], vals[1]) && n <= Math.max(vals[0], vals[1])\n : n <= vals[0];\n return (\n <span\n key={k}\n className={`slider-mark ${active ? \"active\" : \"\"}`}\n style={{ left: `${pct(n)}%` }}\n onClick={() => handleMarkClick(n)}\n >\n <span className=\"slider-mark-dot\" />\n <span className=\"slider-mark-label\">{label}</span>\n </span>\n );\n })}\n </div>\n )}\n </div>\n\n {showValue && (\n <span className=\"slider-value\">\n {range ? `${vals[0]} – ${vals[1]}` : vals[0]}\n </span>\n )}\n </div>\n );\n }\n);\n"]}
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
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 +0,0 @@
1
- {"version":3,"sources":["../src/utils/useFloating.ts"],"names":["React"],"mappings":"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","file":"chunk-3XIDJEYR.cjs","sourcesContent":["import * as React from \"react\";\n\nexport type Placement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface UseFloatingOptions {\n /** Whether the floating element is currently visible. */\n open: boolean;\n /** Preferred placement relative to the trigger. Default `\"bottom\"`. */\n placement?: Placement;\n /** Distance between trigger and panel in px. Default 8. */\n gap?: number;\n /** Estimated panel width, used for flip / shift math. Ignored when `matchTriggerWidth`. */\n panelWidth?: number;\n /** Estimated panel height, used for flip / shift math. */\n panelHeight?: number;\n /** Keep the panel inside the viewport horizontally / vertically. Default true. */\n shift?: boolean;\n /** Flip to the opposite side if the preferred side would overflow. Default true. */\n flip?: boolean;\n /** Make the panel width track the trigger width (used by Select / Cascader). */\n matchTriggerWidth?: boolean;\n /**\n * Cross-axis alignment of the panel relative to the trigger.\n * - `\"start\"` (default) — panel's leading edge lines up with trigger's leading edge.\n * - `\"center\"` — panel is centered on the trigger (uses a CSS transform).\n * - `\"end\"` — panel's trailing edge lines up with trigger's trailing edge.\n *\n * `shift` is ignored for non-`\"start\"` alignments to avoid tugging against the\n * caller's translate.\n */\n alignCross?: \"start\" | \"center\" | \"end\";\n}\n\nexport interface UseFloatingResult<\n T extends HTMLElement,\n F extends HTMLElement\n> {\n /** Attach this to the trigger element. */\n triggerRef: React.RefObject<T>;\n /** Attach this to the floating element so placement can use its real size. */\n floatingRef: React.RefObject<F>;\n /** Spread this onto the panel element. Already contains `position: fixed` + coords. */\n floatingStyle: React.CSSProperties;\n /** Resolved placement after flip logic — useful for arrow direction. */\n placement: Placement;\n}\n\n/**\n * Minimal floating-element positioning hook used by Tooltip / Popover / Select /\n * Cascader / ColorPicker. Designed to be paired with `createPortal(document.body)`\n * so overflow clipping from ancestors becomes a non-issue.\n *\n * Not a general-purpose `@floating-ui` replacement — it only covers flip + shift\n * relative to the viewport, which is what Lumina's overlays need.\n */\nexport function useFloating<\n T extends HTMLElement = HTMLElement,\n F extends HTMLElement = HTMLElement\n>(\n opts: UseFloatingOptions\n): UseFloatingResult<T, F> {\n const triggerRef = React.useRef<T>(null);\n const floatingRef = React.useRef<F>(null);\n const preferred = opts.placement ?? \"bottom\";\n const gap = opts.gap ?? 8;\n const panelW = opts.panelWidth ?? 240;\n const panelH = opts.panelHeight ?? 300;\n const doShift = opts.shift !== false;\n const doFlip = opts.flip !== false;\n const matchW = !!opts.matchTriggerWidth;\n const align = opts.alignCross ?? \"start\";\n const open = opts.open;\n\n const [state, setState] = React.useState<{\n top: number;\n left: number;\n width?: number;\n placement: Placement;\n }>({ top: 0, left: 0, placement: preferred });\n\n React.useLayoutEffect(() => {\n if (!open) return;\n const update = () => {\n const el = triggerRef.current;\n if (!el) return;\n\n const floatingRect = floatingRef.current?.getBoundingClientRect();\n const rect = el.getBoundingClientRect();\n const measuredW = floatingRect?.width && floatingRect.width > 0 ? floatingRect.width : undefined;\n const measuredH = floatingRect?.height && floatingRect.height > 0 ? floatingRect.height : undefined;\n const w = matchW ? rect.width : (measuredW ?? panelW);\n const h = measuredH ?? panelH;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const MARGIN = 8;\n\n const place = (p: Placement) => {\n switch (p) {\n case \"top\":\n return { top: rect.top - gap - h, left: rect.left };\n case \"right\":\n return { top: rect.top, left: rect.right + gap };\n case \"left\":\n return { top: rect.top, left: rect.left - gap - w };\n case \"bottom\":\n default:\n return { top: rect.bottom + gap, left: rect.left };\n }\n };\n\n const fits = (p: Placement, c: { top: number; left: number }) => {\n if (p === \"bottom\") return c.top + h <= vh - MARGIN;\n if (p === \"top\") return c.top >= MARGIN;\n if (p === \"right\") return c.left + w <= vw - MARGIN;\n if (p === \"left\") return c.left >= MARGIN;\n return true;\n };\n\n let resolved: Placement = preferred;\n let coords = place(resolved);\n\n if (doFlip && !fits(resolved, coords)) {\n const opp: Record<Placement, Placement> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n };\n const alt = opp[resolved];\n const altCoords = place(alt);\n if (fits(alt, altCoords)) {\n resolved = alt;\n coords = altCoords;\n }\n }\n\n // Cross-axis alignment replaces the cross coordinate with the trigger\n // midpoint / far edge; the paired CSS transform then visually aligns.\n if (align !== \"start\") {\n if (resolved === \"top\" || resolved === \"bottom\") {\n coords.left =\n align === \"center\" ? rect.left + rect.width / 2 : rect.right;\n } else {\n coords.top =\n align === \"center\" ? rect.top + rect.height / 2 : rect.bottom;\n }\n } else if (doShift) {\n if (resolved === \"bottom\" || resolved === \"top\") {\n coords.left = Math.max(MARGIN, Math.min(coords.left, vw - w - MARGIN));\n } else {\n coords.top = Math.max(MARGIN, Math.min(coords.top, vh - h - MARGIN));\n }\n }\n\n setState({\n top: coords.top,\n left: coords.left,\n width: matchW ? rect.width : undefined,\n placement: resolved,\n });\n };\n\n update();\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n const ro =\n typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(update) : null;\n if (ro) {\n if (triggerRef.current) ro.observe(triggerRef.current);\n if (floatingRef.current) ro.observe(floatingRef.current);\n }\n return () => {\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n ro?.disconnect();\n };\n }, [open, preferred, gap, panelW, panelH, doShift, doFlip, matchW, align]);\n\n let transform: string | undefined;\n if (align !== \"start\") {\n const cross = state.placement === \"top\" || state.placement === \"bottom\" ? \"X\" : \"Y\";\n const percent = align === \"center\" ? \"-50%\" : \"-100%\";\n transform = `translate${cross}(${percent})`;\n }\n\n const floatingStyle: React.CSSProperties = {\n position: \"fixed\",\n top: state.top,\n left: state.left,\n ...(state.width != null ? { width: state.width } : {}),\n ...(transform ? { transform } : {}),\n };\n\n return {\n triggerRef,\n floatingRef,\n floatingStyle,\n placement: state.placement,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":";;;;;;;AAmBO,IAAM,cAAA,GAAuB,iBAAgD,CAAC;AAAA,EACnF,QAAA,GAAW,KAAA;AAAA,EACX,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,WAAA,GAAc,EAAE,eAAA,EAAiB,SAAA,EAAU;AACjD,EAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,CAAA,qBAAA,EAAwB,SAAS,CAAA,CAAA,EAAI,KAAA,EAAO,WAAA,EAAc,GAAG,IAAA,EACrF,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,kBAAA,EAAmB,OAAA,EAAS,UAAA,EAAY,YAAA,EAAW,UAAA,EACjF,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,aAAA,EAAW,IAAA,EACrE,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,QAAA,EAAS,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAAI,GACzD,CAAA,EACF,CAAA;AAAA,0BACC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,oBAAmB,OAAA,EAAS,UAAA,EAAY,YAAA,EAAW,UAAA,EACjF,8BAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,MAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,eAAW,IAAA,EACrE,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,KAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,GAAA,EAAI,QAAO,GAAA,EAAI,MAAA,EAAO,gBAAe,WAAA,EAAY,GAAA,EAAI,GAC/E,CAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,eAAA,EAAgB,OAAA,EAAS,OAAA,EAAS,YAAA,EAAW,OAAA,EAC3E,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,aAAA,EAAW,MACrE,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mBAAA,EAAoB,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAAI,GACpE,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,EAAI,KAAA,EAAO,WAAA,EAAc,GAAG,IAAA,EACjF,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,iBAAgB,OAAA,EAAS,OAAA,EAAS,cAAW,OAAA,EAAQ,CAAA;AAAA,oBACrF,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,kBAAA,EAAmB,OAAA,EAAS,UAAA,EAAY,YAAA,EAAW,UAAA,EAAW,CAAA;AAAA,oBAC9F,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,kBAAA,EAAmB,OAAA,EAAS,UAAA,EAAY,YAAA,EAAW,UAAA,EAAW;AAAA,GAAA,EAChG,CAAA;AAEJ,CAAC;AACD,cAAA,CAAe,WAAA,GAAc,gBAAA;AAuBtB,IAAM,QAAA,GAAiB,iBAA0C,CAAC;AAAA,EACvE,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,SAAA,GAAY,SAAA,GAAa,EAAE,eAAA,EAAiB,QAAO,GAA4B,MAAA;AACrF,EAAA,MAAM,WAAA,GAAc,EAAE,eAAA,EAAiB,SAAA,EAAU;AAEjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,KAAA,EAAO,SAAA,EAAY,GAAG,IAAA,EAClF,QAAA,EAAA;AAAA,IAAA,QAAA,KAAa,yBACZ,GAAA,CAAC,cAAA,EAAA,EAAe,UAAS,KAAA,EAAM,UAAA,EAAwB,YAAwB,OAAA,EAAkB,CAAA;AAAA,oBAEnG,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACtC,0BACC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EAAkB,KAAA,EAAO,aACrC,QAAA,EAAA,MAAA,EACH,CAAA;AAAA,IAED,2BACC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EAAmB,KAAA,EAAO,aACtC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,IAED,QAAA,KAAa,6BACZ,GAAA,CAAC,cAAA,EAAA,EAAe,UAAS,SAAA,EAAU,UAAA,EAAwB,YAAwB,OAAA,EAAkB;AAAA,GAAA,EAEzG,CAAA;AAEJ,CAAC;AACD,QAAA,CAAS,WAAA,GAAc,UAAA;AAyBhB,IAAM,OAAA,GAAgB,iBAAsC,CAAC;AAAA,EAClE,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAG,GAAA,qBACD,IAAA,CAAC,OAAA,EAAA,EAAM,GAAA,EAAU,SAAA,EAAW,CAAA,QAAA,EAAW,SAAA,GAAY,WAAA,GAAc,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACrF,QAAA,EAAA;AAAA,EAAA,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,sBAClD,KAAA,EAAA,EAAI,SAAA,EAAU,eACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,qBACV,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MAEL,WAAW,CAAA,aAAA,EAAgB,SAAA,KAAc,EAAA,CAAG,GAAA,GAAM,WAAW,EAAE,CAAA,CAAA;AAAA,MAC/D,OAAA,EAAS,MAAM,QAAA,GAAW,EAAA,CAAG,GAAG,CAAA;AAAA,MAE/B,QAAA,EAAA;AAAA,QAAA,EAAA,CAAG,wBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAgB,aAAG,IAAA,EAAK,CAAA;AAAA,QACnD,CAAC,SAAA,oBAAa,GAAA,CAAC,UAAK,SAAA,EAAU,eAAA,EAAiB,aAAG,KAAA,EAAM,CAAA;AAAA,QACxD,CAAC,aAAa,EAAA,CAAG,KAAA,wBAAU,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,EAAA,CAAG,KAAA,EAAM;AAAA;AAAA,KAAA;AAAA,IANhE,EAAA,CAAG;AAAA,GAQX,CAAA,EACH,CAAA;AAAA,EACC,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAkB,QAAA,EAAA,MAAA,EAAO;AAAA,CAAA,EACrD,CACD;AACD,OAAA,CAAQ,WAAA,GAAc,SAAA;AAYf,IAAM,QAAA,GAAiB,iBAA0C,CAAC,EAAE,SAAS,QAAA,EAAU,QAAA,EAAU,YAAY,EAAA,EAAI,GAAG,MAAK,EAAG,GAAA,0BAChI,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACrD,QAAA,EAAA;AAAA,EAAA,QAAA;AAAA,kBACD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,oBACD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAS;AAAA,GAAA,EAC7C;AAAA,CAAA,EACF,CACD;AACD,QAAA,CAAS,WAAA,GAAc,UAAA","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 +0,0 @@
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"]}