@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
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Modal/Modal.tsx"],"names":[],"mappings":"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","file":"chunk-PX5ABNKV.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Modal.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface ModalProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\" | \"children\" | \"onClose\"> {\n /** Whether the modal is visible. */\n open: boolean;\n /** Fired by mask click / close button / Esc. Also the fallback for cancel. */\n onClose?: () => void;\n /** Dedicated Cancel callback. Falls back to `onClose` when omitted. */\n onCancel?: () => void;\n /** Fired when the default OK button is clicked. */\n onOk?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Footer content. Pass `null` to hide the footer, or a custom node to\n * replace the default OK / Cancel buttons.\n */\n footer?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n /** Show the close (×) button. Default true. */\n closable?: boolean;\n /** Override the close icon node. */\n closeIcon?: React.ReactNode;\n /** Close when clicking the mask. Default true. */\n maskClosable?: boolean;\n /** Close on Escape key. Default true. */\n escClosable?: boolean;\n /** Label for the default OK button. */\n okText?: React.ReactNode;\n /** Label for the default Cancel button. */\n cancelText?: React.ReactNode;\n /** Extra props forwarded to the default OK button. */\n okButtonProps?: Partial<ButtonProps>;\n /** Extra props forwarded to the default Cancel button. */\n cancelButtonProps?: Partial<ButtonProps>;\n /** Show a spinner on the OK button (e.g. while an async submit is running). */\n confirmLoading?: boolean;\n /**\n * When true the modal's children are unmounted every time it closes.\n * Default `false` — children stay mounted so internal state survives\n * reopens, matching antd's default.\n */\n destroyOnClose?: boolean;\n /** Fires after the open/close animation finishes. */\n afterOpenChange?: (open: boolean) => void;\n /** Override the z-index of the overlay. */\n zIndex?: number;\n className?: string;\n}\n\nconst ANIM_MS = 280;\n\n/** `Modal` — centered dialog with mask. Renders into `document.body`. */\nexport const Modal = React.forwardRef<HTMLDivElement, ModalProps>(({\n open,\n onClose,\n onCancel,\n onOk,\n title,\n description,\n footer,\n children,\n width = 440,\n closable = true,\n closeIcon,\n maskClosable = true,\n escClosable = true,\n okText = \"确定\",\n cancelText = \"取消\",\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n destroyOnClose = false,\n afterOpenChange,\n zIndex,\n className = \"\",\n 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 const handleCancel = React.useCallback(() => {\n if (onCancel) onCancel();\n else onClose?.();\n }, [onCancel, onClose]);\n\n React.useEffect(() => {\n if (!open || !escClosable) return;\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleCancel();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, escClosable, handleCancel]);\n\n const prevOpen = React.useRef(open);\n React.useEffect(() => {\n if (prevOpen.current !== open) {\n prevOpen.current = open;\n if (afterOpenChange) {\n const id = window.setTimeout(() => afterOpenChange(open), ANIM_MS);\n return () => window.clearTimeout(id);\n }\n }\n }, [open, afterOpenChange]);\n\n if (typeof document === \"undefined\") return null;\n if (!hasOpenedOnce) return null;\n if (!open && destroyOnClose) return null;\n\n const overlayStyle: React.CSSProperties | undefined =\n zIndex != null ? { zIndex } : undefined;\n\n const defaultFooter = (\n <>\n <Button variant=\"ghost\" onClick={handleCancel} {...cancelButtonProps}>\n {cancelText}\n </Button>\n <Button\n variant=\"primary\"\n loading={confirmLoading}\n onClick={() => onOk?.()}\n {...okButtonProps}\n >\n {okText}\n </Button>\n </>\n );\n\n return ReactDOM.createPortal(\n <div\n className={`modal-overlay ${open ? \"\" : \"hidden\"} ${className}`}\n style={overlayStyle}\n onClick={() => maskClosable && handleCancel()}\n role=\"presentation\"\n >\n <div\n ref={ref}\n className=\"modal\"\n style={{ width, ...style }}\n onClick={(e) => {\n onClick?.(e);\n e.stopPropagation();\n }}\n role=\"dialog\"\n aria-modal\n aria-hidden={!open}\n {...rest}\n >\n {(title || description || closable) && (\n <div className=\"modal-head\">\n <div className=\"modal-titles\">\n {title && <div className=\"modal-title\">{title}</div>}\n {description && <div className=\"modal-desc\">{description}</div>}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"modal-close\"\n onClick={handleCancel}\n aria-label=\"Close\"\n >\n {closeIcon ?? <Icon name=\"x\" size={16} />}\n </button>\n )}\n </div>\n )}\n <div className=\"modal-body\">{children}</div>\n {footer === null ? null : (\n <div className=\"modal-foot\">{footer ?? defaultFooter}</div>\n )}\n </div>\n </div>,\n document.body\n );\n});\nModal.displayName = \"Modal\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Theme/Theme.tsx"],"names":["React","jsx"],"mappings":"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","file":"chunk-Q7CDWNM6.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport * as React from \"react\";\n\n/* ============================================================================\n * Theme — full custom theming system for lumina\n *\n * - <ThemeProvider> manages theme state and applies CSS variables / data-attrs\n * to either <html> (global) or a local scope.\n * - useTheme() exposes read/write access for descendants.\n * - Presets: accent palettes, font stacks, densities.\n * - Custom accent: pass a full palette or only a base color — missing slots\n * are auto-derived via `color-mix`.\n * - Persistence: optional localStorage via `storageKey` prop.\n * - \"system\" mode respects `prefers-color-scheme` via matchMedia.\n * - Arbitrary token overrides through the `tokens` prop.\n * ========================================================================== */\n\n/* ------------------------------- Types ---------------------------------- */\n\nexport type ThemeMode = \"light\" | \"dark\" | \"system\";\nexport type ResolvedThemeMode = \"light\" | \"dark\";\nexport type AccentKey = \"sky\" | \"coral\" | \"mint\" | \"violet\" | \"amber\" | \"rose\";\nexport type DensityMode = \"compact\" | \"comfortable\" | \"spacious\";\nexport type FontKey = \"system\" | \"sf\" | \"serif\" | \"mono\";\n\n/** Full accent color slots. All four CSS variables the library reads. */\nexport interface AccentPalette {\n /** Primary accent — `--accent`. */\n accent: string;\n /** Darker text-on-soft variant — `--accent-ink`. */\n ink: string;\n /** Pale tint for backgrounds — `--accent-soft`. */\n soft: string;\n /** Halo / glow color (typically with alpha) — `--accent-glow`. */\n glow: string;\n}\n\n/** Input type for custom accent: either full palette, or just a base color\n * (missing slots derived via color-mix in CSS). */\nexport type CustomAccentInput = string | Partial<AccentPalette> & { accent: string };\n\n/** Font config — either a preset key, a single sans string, or a granular object. */\nexport type FontConfig =\n | FontKey\n | string\n | { sans?: string; display?: string; mono?: string };\n\n/** Arbitrary CSS variable overrides. Keys may be either a short name\n * (e.g. `\"bg\"` → `--bg`) or a full var name (e.g. `\"--bg\"`). */\nexport type ThemeTokens = Record<string, string>;\n\nexport interface ThemeConfig {\n mode?: ThemeMode;\n accent?: AccentKey | CustomAccentInput;\n density?: DensityMode;\n /** Shadow strength, 1..10. Maps to `--d` (0.4..1.6). */\n intensity?: number;\n /** Base radius in px — generates the full `--r-*` scale. */\n radius?: number;\n font?: FontConfig;\n tokens?: ThemeTokens;\n}\n\nexport interface ThemeValue {\n /** Requested mode (\"system\" is preserved here). */\n mode: ThemeMode;\n /** Resolved concrete mode (\"system\" → \"light\" | \"dark\" based on OS). */\n resolvedMode: ResolvedThemeMode;\n /** Accent key or \"custom\" if a palette was supplied. */\n accent: AccentKey | \"custom\";\n /** Resolved palette currently in effect. */\n accentPalette: AccentPalette;\n density: DensityMode;\n intensity: number;\n radius: number;\n font: FontConfig;\n tokens: ThemeTokens;\n\n setMode: (m: ThemeMode) => void;\n toggleMode: () => void;\n setAccent: (a: AccentKey | CustomAccentInput) => void;\n setDensity: (d: DensityMode) => void;\n setIntensity: (n: number) => void;\n setRadius: (n: number) => void;\n setFont: (f: FontConfig) => void;\n setTokens: (t: ThemeTokens) => void;\n /** Shallow-merge a partial config. */\n update: (cfg: Partial<ThemeConfig>) => void;\n /** Reset to the initial props. */\n reset: () => void;\n}\n\n/* --------------------------- Built-in presets --------------------------- */\n\n/** Built-in accent palettes (light-mode values). */\nexport const ACCENT_PRESETS: Record<AccentKey, AccentPalette> = {\n sky: { accent: \"oklch(68% 0.14 235)\", ink: \"oklch(42% 0.12 235)\", soft: \"oklch(92% 0.04 235)\", glow: \"oklch(68% 0.14 235 / 0.35)\" },\n coral: { accent: \"oklch(72% 0.16 35)\", ink: \"oklch(48% 0.14 35)\", soft: \"oklch(94% 0.04 35)\", glow: \"oklch(72% 0.16 35 / 0.35)\" },\n mint: { accent: \"oklch(72% 0.13 165)\", ink: \"oklch(46% 0.11 165)\", soft: \"oklch(93% 0.04 165)\", glow: \"oklch(72% 0.13 165 / 0.35)\" },\n violet: { accent: \"oklch(66% 0.16 290)\", ink: \"oklch(44% 0.14 290)\", soft: \"oklch(93% 0.04 290)\", glow: \"oklch(66% 0.16 290 / 0.35)\" },\n amber: { accent: \"oklch(76% 0.14 75)\", ink: \"oklch(50% 0.12 75)\", soft: \"oklch(94% 0.05 75)\", glow: \"oklch(76% 0.14 75 / 0.35)\" },\n rose: { accent: \"oklch(68% 0.17 10)\", ink: \"oklch(46% 0.15 10)\", soft: \"oklch(93% 0.04 10)\", glow: \"oklch(68% 0.17 10 / 0.35)\" },\n};\n\n/** Dark-mode overrides — ink/soft shift, and glow alpha is halved so the outer\n * button bloom doesn't read as a bright ring on dark surfaces. */\nexport const ACCENT_PRESETS_DARK: Record<AccentKey, Pick<AccentPalette, \"ink\" | \"soft\" | \"glow\">> = {\n sky: { soft: \"oklch(35% 0.08 235)\", ink: \"oklch(82% 0.10 235)\", glow: \"oklch(68% 0.14 235 / 0.18)\" },\n coral: { soft: \"oklch(38% 0.09 35)\", ink: \"oklch(84% 0.10 35)\", glow: \"oklch(72% 0.16 35 / 0.18)\" },\n mint: { soft: \"oklch(36% 0.08 165)\", ink: \"oklch(83% 0.10 165)\", glow: \"oklch(72% 0.13 165 / 0.18)\" },\n violet: { soft: \"oklch(36% 0.09 290)\", ink: \"oklch(82% 0.11 290)\", glow: \"oklch(66% 0.16 290 / 0.18)\" },\n amber: { soft: \"oklch(38% 0.08 75)\", ink: \"oklch(85% 0.10 75)\", glow: \"oklch(76% 0.14 75 / 0.18)\" },\n rose: { soft: \"oklch(38% 0.09 10)\", ink: \"oklch(84% 0.11 10)\", glow: \"oklch(68% 0.17 10 / 0.18)\" },\n};\n\n/** Built-in font family stacks. */\nexport const FONT_STACKS: Record<FontKey, string> = {\n system: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\", \"Microsoft YaHei\", sans-serif',\n sf: '\"SF Pro Display\", -apple-system, BlinkMacSystemFont, \"PingFang SC\", sans-serif',\n serif: 'Cambria, Georgia, \"Songti SC\", \"STSong\", serif',\n mono: 'ui-monospace, \"SF Mono\", \"JetBrains Mono\", Consolas, monospace',\n};\n\nconst DEFAULT_CONFIG: Required<Omit<ThemeConfig, \"tokens\">> & { tokens: ThemeTokens } = {\n mode: \"light\",\n accent: \"sky\",\n density: \"comfortable\",\n intensity: 5,\n radius: 20,\n font: \"sf\",\n tokens: {},\n};\n\n/* ------------------------------ Helpers --------------------------------- */\n\nconst isBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\n/** Resolve \"system\" mode against `prefers-color-scheme`. */\nexport function resolveThemeMode(mode: ThemeMode): ResolvedThemeMode {\n if (mode !== \"system\") return mode;\n if (!isBrowser) return \"light\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\n/** Fill missing slots of a custom accent via color-mix. */\nexport function normalizeAccentInput(\n input: AccentKey | CustomAccentInput,\n resolvedMode: ResolvedThemeMode\n): { key: AccentKey | \"custom\"; palette: AccentPalette } {\n // Preset key?\n if (typeof input === \"string\" && input in ACCENT_PRESETS) {\n const key = input as AccentKey;\n const base = ACCENT_PRESETS[key];\n if (resolvedMode === \"dark\") {\n return { key, palette: { ...base, ...ACCENT_PRESETS_DARK[key] } };\n }\n return { key, palette: base };\n }\n // Custom — either a raw color string or a partial palette object.\n const raw = typeof input === \"string\" ? { accent: input } : input;\n const { accent } = raw;\n const ink = raw.ink ?? `color-mix(in oklch, ${accent} 65%, black)`;\n const soft =\n raw.soft ??\n (resolvedMode === \"dark\"\n ? `color-mix(in oklch, ${accent} 30%, black)`\n : `color-mix(in oklch, ${accent} 15%, white)`);\n // Dark-mode glow is halved so it doesn't wash into a white halo on dark surfaces.\n const glow =\n raw.glow ??\n (resolvedMode === \"dark\"\n ? `color-mix(in oklch, ${accent} 18%, transparent)`\n : `color-mix(in oklch, ${accent} 35%, transparent)`);\n return { key: \"custom\", palette: { accent, ink, soft, glow } };\n}\n\n/** Normalize a token key to a CSS custom property name. */\nfunction toVar(key: string): string {\n return key.startsWith(\"--\") ? key : `--${key}`;\n}\n\n/** Imperative theme application — writes CSS vars / data-attrs on a target. */\nexport function applyTheme(target: HTMLElement, config: ThemeConfig): void {\n const cfg: ThemeConfig = { ...DEFAULT_CONFIG, ...config };\n const resolvedMode = resolveThemeMode(cfg.mode!);\n const { key, palette } = normalizeAccentInput(cfg.accent!, resolvedMode);\n\n // data-* attributes\n target.dataset.theme = resolvedMode;\n target.dataset.density = cfg.density!;\n if (key === \"custom\") {\n delete target.dataset.accent;\n } else {\n target.dataset.accent = key;\n }\n\n // Accent palette — always set inline so custom overrides win and preset\n // stays deterministic across mode switches.\n target.style.setProperty(\"--accent\", palette.accent);\n target.style.setProperty(\"--accent-ink\", palette.ink);\n target.style.setProperty(\"--accent-soft\", palette.soft);\n target.style.setProperty(\"--accent-glow\", palette.glow);\n\n // Shadow intensity (1..10 → 0.4..1.6)\n const intensity = cfg.intensity ?? DEFAULT_CONFIG.intensity;\n target.style.setProperty(\"--d\", String(0.4 + intensity * 0.12));\n\n // Radius scale\n const r = cfg.radius ?? DEFAULT_CONFIG.radius;\n target.style.setProperty(\"--r-xs\", `${Math.max(4, r - 16)}px`);\n target.style.setProperty(\"--r-sm\", `${Math.max(6, r - 12)}px`);\n target.style.setProperty(\"--r-md\", `${Math.max(8, r - 6)}px`);\n target.style.setProperty(\"--r-lg\", `${r}px`);\n target.style.setProperty(\"--r-xl\", `${r + 10}px`);\n\n // Fonts\n const font = cfg.font ?? DEFAULT_CONFIG.font;\n if (typeof font === \"string\") {\n const stack = (FONT_STACKS as Record<string, string>)[font] ?? font;\n target.style.setProperty(\"--font-sans\", stack);\n if (font === \"mono\") target.style.setProperty(\"--font-display\", FONT_STACKS.mono);\n } else {\n if (font.sans) target.style.setProperty(\"--font-sans\", font.sans);\n if (font.display) target.style.setProperty(\"--font-display\", font.display);\n if (font.mono) target.style.setProperty(\"--font-mono\", font.mono);\n }\n\n // Arbitrary token overrides\n if (cfg.tokens) {\n for (const [k, v] of Object.entries(cfg.tokens)) {\n target.style.setProperty(toVar(k), v);\n }\n }\n}\n\n/* ----------------------------- Context ---------------------------------- */\n\nconst ThemeCtx = React.createContext<ThemeValue | null>(null);\n\n/** Read/write access to the nearest `<ThemeProvider>`. */\nexport function useTheme(): ThemeValue {\n const ctx = React.useContext(ThemeCtx);\n if (!ctx) {\n throw new Error(\n \"useTheme() must be used inside <ThemeProvider>. Wrap your app (or a subtree) with <ThemeProvider>.\"\n );\n }\n return ctx;\n}\n\n/** Read theme value without throwing — returns `null` outside of a provider. */\nexport function useThemeOptional(): ThemeValue | null {\n return React.useContext(ThemeCtx);\n}\n\n/* ---------------------------- Persistence ------------------------------- */\n\nfunction loadPersisted(key: string | undefined): Partial<ThemeConfig> | null {\n if (!key || !isBrowser) return null;\n try {\n const raw = localStorage.getItem(key);\n if (!raw) return null;\n return JSON.parse(raw) as Partial<ThemeConfig>;\n } catch {\n return null;\n }\n}\n\nfunction persist(key: string | undefined, cfg: ThemeConfig): void {\n if (!key || !isBrowser) return;\n try {\n localStorage.setItem(key, JSON.stringify(cfg));\n } catch {\n /* quota exceeded / disabled storage — ignore */\n }\n}\n\n/* --------------------------- ThemeProvider ------------------------------ */\n\nexport interface ThemeProviderProps extends ThemeConfig {\n children?: React.ReactNode;\n /**\n * Where to apply the theme.\n * - `\"root\"` (default): on `<html>` — affects the whole document.\n * - `\"scope\"`: on a local wrapper element — scoped to descendants.\n */\n target?: \"root\" | \"scope\";\n /** Tag for scope mode. Default `\"div\"`. */\n as?: keyof JSX.IntrinsicElements;\n className?: string;\n style?: React.CSSProperties;\n /** If set, theme state is persisted to localStorage under this key. */\n storageKey?: string;\n /** Called whenever the resolved theme value changes. */\n onChange?: (value: ThemeValue) => void;\n}\n\n/**\n * `<ThemeProvider>` — manage theme state and apply CSS variables.\n *\n * @example\n * ```tsx\n * <ThemeProvider mode=\"system\" accent=\"violet\" storageKey=\"app:theme\">\n * <App />\n * </ThemeProvider>\n * ```\n *\n * @example Custom accent\n * ```tsx\n * <ThemeProvider accent={{ accent: \"oklch(70% 0.2 180)\" }} />\n * // or just\n * <ThemeProvider accent=\"oklch(70% 0.2 180)\" />\n * ```\n */\nexport const ThemeProvider: React.FC<ThemeProviderProps> = (props) => {\n const {\n children,\n target = \"root\",\n as: Tag = \"div\",\n className,\n style,\n storageKey,\n onChange,\n ...configProps\n } = props;\n\n // Build the initial config: defaults ← props ← persisted (if any)\n const initialConfig = React.useMemo<ThemeConfig>(() => {\n const fromProps: ThemeConfig = {\n mode: configProps.mode ?? DEFAULT_CONFIG.mode,\n accent: configProps.accent ?? DEFAULT_CONFIG.accent,\n density: configProps.density ?? DEFAULT_CONFIG.density,\n intensity: configProps.intensity ?? DEFAULT_CONFIG.intensity,\n radius: configProps.radius ?? DEFAULT_CONFIG.radius,\n font: configProps.font ?? DEFAULT_CONFIG.font,\n tokens: configProps.tokens ?? {},\n };\n const persisted = loadPersisted(storageKey);\n return persisted ? { ...fromProps, ...persisted } : fromProps;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [config, setConfig] = React.useState<ThemeConfig>(initialConfig);\n\n // Sync external prop changes into state — so callers can drive the provider\n // \"controlled-style\" (e.g. <ThemeProvider accent={reactState} />).\n // `setMode`/`setAccent`/etc. still work; they just get overridden if the\n // parent later changes the prop.\n React.useEffect(() => {\n setConfig((c) => {\n const next: ThemeConfig = {\n mode: configProps.mode ?? c.mode,\n accent: configProps.accent ?? c.accent,\n density: configProps.density ?? c.density,\n intensity: configProps.intensity ?? c.intensity,\n radius: configProps.radius ?? c.radius,\n font: configProps.font ?? c.font,\n tokens: configProps.tokens ?? c.tokens,\n };\n if (\n next.mode === c.mode &&\n next.accent === c.accent &&\n next.density === c.density &&\n next.intensity === c.intensity &&\n next.radius === c.radius &&\n next.font === c.font &&\n next.tokens === c.tokens\n ) {\n return c;\n }\n return next;\n });\n }, [\n configProps.mode,\n configProps.accent,\n configProps.density,\n configProps.intensity,\n configProps.radius,\n configProps.font,\n configProps.tokens,\n ]);\n\n // Listen for system preference changes when mode === \"system\".\n const [systemDark, setSystemDark] = React.useState<boolean>(() =>\n isBrowser && window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n );\n React.useEffect(() => {\n if (!isBrowser) return;\n const mql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener?.(\"change\", handler);\n return () => mql.removeEventListener?.(\"change\", handler);\n }, []);\n\n const resolvedMode: ResolvedThemeMode =\n config.mode === \"system\" ? (systemDark ? \"dark\" : \"light\") : (config.mode as ResolvedThemeMode);\n\n const { key: accentKey, palette: accentPalette } = React.useMemo(\n () => normalizeAccentInput(config.accent!, resolvedMode),\n [config.accent, resolvedMode]\n );\n\n const scopeRef = React.useRef<HTMLElement | null>(null);\n\n // Apply theme whenever config/resolvedMode changes.\n React.useEffect(() => {\n if (!isBrowser) return;\n const el = target === \"root\" ? document.documentElement : scopeRef.current;\n if (!el) return;\n applyTheme(el as HTMLElement, { ...config, mode: resolvedMode });\n persist(storageKey, config);\n }, [config, resolvedMode, target, storageKey]);\n\n const value: ThemeValue = React.useMemo(() => {\n const patch = (p: Partial<ThemeConfig>) => setConfig((c) => ({ ...c, ...p }));\n return {\n mode: config.mode!,\n resolvedMode,\n accent: accentKey,\n accentPalette,\n density: config.density!,\n intensity: config.intensity!,\n radius: config.radius!,\n font: config.font!,\n tokens: config.tokens ?? {},\n setMode: (m) => patch({ mode: m }),\n toggleMode: () =>\n setConfig((c) => ({\n ...c,\n mode: (c.mode === \"dark\" ? \"light\" : \"dark\") as ThemeMode,\n })),\n setAccent: (a) => patch({ accent: a }),\n setDensity: (d) => patch({ density: d }),\n setIntensity: (n) => patch({ intensity: n }),\n setRadius: (n) => patch({ radius: n }),\n setFont: (f) => patch({ font: f }),\n setTokens: (t) => patch({ tokens: t }),\n update: patch,\n reset: () => setConfig(initialConfig),\n };\n }, [config, resolvedMode, accentKey, accentPalette, initialConfig]);\n\n // onChange callback.\n const onChangeRef = React.useRef(onChange);\n onChangeRef.current = onChange;\n React.useEffect(() => {\n onChangeRef.current?.(value);\n }, [value]);\n\n if (target === \"scope\") {\n const Component = Tag as React.ElementType;\n return (\n <ThemeCtx.Provider value={value}>\n <Component\n ref={scopeRef as React.Ref<never>}\n className={className}\n style={style}\n >\n {children}\n </Component>\n </ThemeCtx.Provider>\n );\n }\n\n return <ThemeCtx.Provider value={value}>{children}</ThemeCtx.Provider>;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Tag/Tag.tsx"],"names":["React","jsx","Icon","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,IAAM,GAAA,GAAYA,4BAAsC,CAAC;AAAA,EAC9D,IAAA,GAAO,SAAA;AAAA,EACP,KAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA,IAAS,OAAA;AAAA,IACT,CAAC,QAAA,IAAY,CAAC,KAAA,IAAS,YAAA;AAAA,IACvB;AAAA,GACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,EAAA,uCACG,MAAA,EAAA,EAAK,GAAA,EAAU,SAAA,EAAW,GAAA,EAAM,GAAG,IAAA,EACjC,QAAA,EAAA;AAAA,IAAA,GAAA,oBAAOC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,KAAA,EAAM,CAAA;AAAA,IAC7B,IAAA,mCAASC,sBAAA,EAAA,EAAK,IAAA,EAAM,MAAM,IAAA,EAAM,EAAA,EAAI,WAAU,SAAA,EAAU,CAAA;AAAA,IACxD,QAAA;AAAA,IACA,SAAA,oBACCD,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,GAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,QAAA;AAAA,QACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,QAAA,IAAW;AAAA,QACb,CAAA;AAAA,QAEA,QAAA,kBAAAA,cAAA,CAACC,sBAAA,EAAA,EAAK,IAAA,EAAK,GAAA,EAAI,MAAM,EAAA,EAAI;AAAA;AAAA;AAC3B,GAAA,EAEJ,CAAA;AAEJ,CAAC;AACD,GAAA,CAAI,WAAA,GAAc,KAAA;AAYX,IAAM,KAAA,GAAcF,4BAAwC,CAAC;AAAA,EAClE,KAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,IAAA,GAAO,GAAA,IAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,GAAQ,CAAA;AAC1D,EAAA,uBACEG,eAAA,CAAC,UAAK,GAAA,EAAU,SAAA,EAAW,cAAc,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACvD,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,wBACCF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,GAAA,GAAM,KAAA,GAAQ,EAAE,IAC/C,QAAA,EAAA,CAAC,GAAA,KAAQ,KAAA,GAAS,EAAA,GAAK,QAAQ,KAAA,CAAA,EAClC;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAC;AACD,KAAA,CAAM,WAAA,GAAc,OAAA","file":"chunk-QCNHDDSD.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tag.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\nexport type TagTone = \"neutral\" | \"accent\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: TagTone;\n solid?: boolean;\n /** Render a leading colored dot. */\n dot?: boolean;\n /** Leading icon (uses the built-in `Icon` component). */\n icon?: IconName;\n /** Show a close button. */\n removable?: boolean;\n onRemove?: () => void;\n /** Whether to render the tag outline/flat shadow. Defaults to `true`. */\n bordered?: boolean;\n children?: React.ReactNode;\n}\n\n/** `Tag` — small label/pill. */\nexport const Tag = React.forwardRef<HTMLSpanElement, TagProps>(({\n tone = \"neutral\",\n solid,\n dot,\n icon,\n removable,\n onRemove,\n bordered = true,\n className = \"\",\n children,\n ...rest\n}, ref) => {\n const cls = [\n \"tag\",\n tone,\n solid && \"solid\",\n !bordered && !solid && \"borderless\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <span ref={ref} className={cls} {...rest}>\n {dot && <span className=\"dot\" />}\n {icon && <Icon name={icon} size={11} className=\"tag-ico\" />}\n {children}\n {removable && (\n <span\n className=\"x\"\n role=\"button\"\n aria-label=\"Remove\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n >\n <Icon name=\"x\" size={11} />\n </span>\n )}\n </span>\n );\n});\nTag.displayName = \"Tag\";\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Numeric count — renders as \"99+\" if > 99. */\n count?: number;\n /** Show a tiny dot instead of a number. */\n dot?: boolean;\n tone?: TagTone;\n children?: React.ReactNode;\n}\n\n/** `Badge` — notification dot / count. Wrap around another element. */\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(({\n count,\n dot,\n tone = \"danger\",\n children,\n className = \"\",\n ...rest\n}, ref) => {\n const show = dot || (typeof count === \"number\" && count > 0);\n return (\n <span ref={ref} className={`badge-wrap ${className}`} {...rest}>\n {children}\n {show && (\n <span className={`badge ${tone} ${dot ? \"dot\" : \"\"}`}>\n {!dot && (count! > 99 ? \"99+\" : count)}\n </span>\n )}\n </span>\n );\n});\nBadge.displayName = \"Badge\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Divider/Divider.tsx"],"names":[],"mappings":";;;;;;;AAoBO,IAAM,OAAA,GAAgB,iBAAyC,CAAC;AAAA,EACrE,SAAA,GAAY,YAAA;AAAA,EACZ,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,SAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA,IAAU,QAAA;AAAA,IACV,MAAA,IAAU,QAAA;AAAA,IACV,KAAA,IAAS,SAAA,KAAc,YAAA,IAAgB,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,IAC5D;AAAA,GACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,KAAK,IAAA,EAAK,WAAA,EAAa,GAAG,IAAA,EACjD,mCAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,iBAAM,CAAA,EACnD,CAAA;AAEJ,CAAC;AACD,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"chunk-QRSPBK3X.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Divider.css\";\nimport * as React from \"react\";\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"horizontal\" | \"vertical\";\n label?: React.ReactNode;\n /** Use recessed groove styling. */\n sunken?: boolean;\n /** Render as dashed lines instead of solid. */\n dashed?: boolean;\n /**\n * Label position for horizontal dividers. Defaults to `\"center\"`.\n * Ignored when there is no `label`.\n */\n orientation?: \"left\" | \"center\" | \"right\";\n}\n\n/** `Divider` — visual separator, horizontal or vertical. */\nexport const Divider = React.forwardRef<HTMLDivElement, DividerProps>(({\n direction = \"horizontal\",\n label,\n sunken,\n dashed,\n orientation = \"center\",\n className = \"\",\n ...rest\n}, ref) => {\n const cls = [\n \"divider\",\n direction,\n sunken && \"sunken\",\n dashed && \"dashed\",\n label && direction === \"horizontal\" && `orient-${orientation}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div ref={ref} className={cls} role=\"separator\" {...rest}>\n {label && <span className=\"divider-label\">{label}</span>}\n </div>\n );\n});\nDivider.displayName = \"Divider\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Select/Select.tsx"],"names":[],"mappings":";;;;;;;;;;AA+BA,IAAM,UAAU,CACd,EAAA,KAC+B,KAAA,CAAM,OAAA,CAAS,GAA4B,OAAO,CAAA;AAoDnF,IAAM,OAAA,GAAU,CAA4B,KAAA,KAC1C,KAAA,CAAM,QAAQ,CAAC,EAAA,KAAQ,OAAA,CAAQ,EAAE,CAAA,GAAI,EAAA,CAAG,OAAA,GAAU,CAAC,EAAE,CAAE,CAAA;AAEzD,IAAM,aAAA,GAAgB,CAA4B,KAAA,EAAe,GAAA,KAAkC;AACjG,EAAA,MAAM,CAAA,GAAI,MAAM,WAAA,EAAY;AAC5B,EAAA,MAAM,GAAA,GACJ,GAAA,CAAI,IAAA,KAAS,OAAO,GAAA,CAAI,KAAA,KAAU,QAAA,GAAW,GAAA,CAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAAA;AAC3E,EAAA,OAAO,GAAA,CAAI,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAA;AACrC,CAAA;AAOA,IAAM,WAAA,GAAc,CAClB,KAAA,EACA,YAAA,KACuB;AACvB,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,WAAA,GAAc,0BAAA;AAAA,IACd,QAAA;AAAA,IACA,IAAA,GAAO,IAAA;AAAA,IACP,OAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA,EAAM,QAAA;AAAA,IACN,WAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA,GAAY,EAAA;AAAA,IACZ,aAAA,GAAgB,EAAA;AAAA,IAChB,SAAA,EAAW,aAAA;AAAA,IACX,QAAA;AAAA,IACA,KAAA,EAAO,MAAA;AAAA,IACP,YAAA,EAAc,aAAA;AAAA,IACd,QAAA,EAAU,gBAAA;AAAA,IACV,OAAA,EAAS,QAAA;AAAA,IACT,WAAA,EAAa,YAAA;AAAA,IACb,GAAG;AAAA,GACL,GAAI,KAAA;AAIJ,EAAA,MAAM,UAAU,QAAA,KAAa,IAAA;AAE7B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IAC1C,CAAC,OAAA,GAAW,KAAA,CAA+B,YAAA,GAAe;AAAA,GAC5D;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IACxC,OAAA,GAAW,KAAA,CAA8B,YAAA,IAAgB,KAAK;AAAC,GACjE;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,eAAe,KAAK,CAAA;AACrE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAU,eAAS,EAAE,CAAA;AAEnD,EAAA,MAAM,SAAA,GAAkB,aAAyB,IAAI,CAAA;AAErD,EAAA,MAAM,iBAAiB,QAAA,KAAa,MAAA;AACpC,EAAA,MAAM,IAAA,GAAO,iBAAiB,QAAA,GAAY,SAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAe;AAC9B,IAAA,IAAI,CAAC,cAAA,EAAgB,YAAA,CAAa,CAAC,CAAA;AACnC,IAAA,YAAA,GAAe,CAAC,CAAA;AAChB,IAAA,IAAI,CAAC,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAa,OAAA,EAAS,aAAA,KAAkB,WAAA,CAA4C;AAAA,IACtG,IAAA;AAAA,IACA,SAAA,EAAW,QAAA;AAAA,IACX,iBAAA,EAAmB,IAAA;AAAA,IACnB,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,IAAA,KAAgC;AAC/B,MAAC,WAA6D,OAAA,GAAU,IAAA;AACxE,MAAA,IAAI,OAAO,YAAA,KAAiB,UAAA,EAAY,YAAA,CAAa,IAAI,CAAA;AAAA,WAAA,IAChD,YAAA,eAA2B,OAAA,GAAU,IAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,cAAc,UAAU;AAAA,GAC3B;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,IAAY,KAAA,CAA+B,KAAA,KAAU,MAAA;AAC/E,EAAA,MAAM,eAAA,GAAkB,OAAA,IAAY,KAAA,CAA8B,KAAA,KAAU,MAAA;AAE5E,EAAA,MAAM,WAAA,GAAc,gBAAA,GAAoB,KAAA,CAA+B,KAAA,GAAQ,WAAA;AAC/E,EAAA,MAAM,UAAA,GAAa,eAAA,GAAmB,KAAA,CAA8B,KAAA,GAAS,UAAA;AAE7E,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,CAAA,GAAI,CAAC,CAAA,KAAkB;AAC3B,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACrC,MAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AACxC,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,CAAC,CAAA;AAAA,EAE1D,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,qBAAA,CAAsB,MAAM,SAAA,CAAU,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,CAAC,IAAA,EAAM,YAAA,CAAa,EAAE,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,IAAA,EAAM,UAAU,CAAC,CAAA;AAGrB,EAAA,MAAM,OAAA,GAAgB,cAAQ,MAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAqB,cAAQ,MAAM;AACvC,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG,OAAO,OAAA;AAC1B,IAAA,MAAM,IAAI,YAAA,IAAgB,aAAA;AAC1B,IAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,EAAO,CAAC,CAAC,CAAA;AAAA,EAC1C,CAAA,EAAG,CAAC,OAAA,EAAS,KAAA,EAAO,YAAY,CAAC,CAAA;AAGjC,EAAA,MAAM,aAAA,GAAsB,cAAyB,MAAM;AACzD,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG,OAAO,OAAA;AAC1B,IAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,EAAA,KAAO;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,EAAE,CAAA,EAAG;AAChB,QAAA,OAAO,YAAA,CAAa,QAAA,CAAS,EAAE,CAAA,GAAI,EAAA,GAAK,IAAA;AAAA,MAC1C;AACA,MAAA,MAAM,IAAA,GAAO,GAAG,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,YAAA,CAAa,QAAA,CAAS,CAAC,CAAC,CAAA;AAC9D,MAAA,OAAO,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,GAAG,KAAA,EAAO,OAAA,EAAS,MAAK,GAAI,IAAA;AAAA,IAC5D,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,CAAA,KAA0B,MAAM,IAAI,CAAA;AAAA,EACjD,CAAA,EAAG,CAAC,OAAA,EAAS,YAAA,EAAc,KAAK,CAAC,CAAA;AAEjC,EAAM,gBAAU,MAAM;AACpB,IAAA,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA;AAAA,EAC3C,CAAA,EAAG,CAAC,YAAA,CAAa,MAAM,CAAC,CAAA;AAExB,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAyB;AAC3C,IAAA,IAAI,IAAI,QAAA,EAAU;AAClB,IAAA,IAAI,CAAC,gBAAA,EAAkB,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAC/C,IAAC,KAAA,CAA+B,QAAA,GAAW,GAAA,CAAI,KAAK,CAAA;AACpD,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAyB;AAC5C,IAAA,IAAI,IAAI,QAAA,EAAU;AAClB,IAAA,MAAM,GAAA,GAAM,cAAc,EAAC;AAC3B,IAAA,MAAM,OAAO,GAAA,CAAI,QAAA,CAAS,IAAI,KAAK,CAAA,GAAI,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,IAAI,KAAK,CAAA,GAAI,CAAC,GAAG,GAAA,EAAK,IAAI,KAAK,CAAA;AAC9F,IAAA,IAAI,CAAC,eAAA,EAAiB,aAAA,CAAc,IAAI,CAAA;AACxC,IAAC,KAAA,CAA8B,WAAW,IAAI,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAwB;AACxC,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI,CAAC,eAAA,EAAiB,aAAA,CAAc,EAAE,CAAA;AACtC,MAAC,KAAA,CAA8B,QAAA,GAAW,EAAE,CAAA;AAAA,IAC9C,CAAA,MAAO;AACL,MAAA,IAAI,CAAC,gBAAA,EAAkB,cAAA,CAAe,MAAS,CAAA;AAC/C,MAAC,MAA+B,OAAA,IAAU;AAAA,IAC5C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAClB,OAAA,GAAA,CAAW,UAAA,IAAc,EAAC,EAAG,QAAA,CAAS,GAAG,CAAA,GAAI,WAAA,KAAgB,GAAA;AAE/D,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAA2B;AAC5C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,IAAO,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC/D,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MACd;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,OAAA,CAAQ,KAAK,CAAA;AACb,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,YAAA,CAAa,CAAC,MAAM,IAAA,CAAK,GAAA,CAAI,aAAa,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,SAAA,EAAW;AACvB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,YAAA,CAAa,CAAC,CAAA,KAAM,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,GAAA,GAAM,aAAa,SAAS,CAAA;AAClC,MAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,QAAA,EAAU;AACxB,QAAA,IAAI,OAAA,cAAqB,GAAG,CAAA;AAAA,wBACZ,GAAG,CAAA;AAAA,MACrB;AACA,MAAA;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,QAAA,GAAA,CAAY,cAAc,EAAC,EAC9B,IAAI,CAAC,CAAA,KAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,CAAC,CAAC,CAAA,CAC7C,OAAO,CAAC,CAAA,KAA4B,CAAC,CAAC,CAAC,CAAA;AAC1C,MAAA,MAAM,MAAO,KAAA,CAA8B,WAAA;AAC3C,MAAA,MAAM,QAAQ,GAAA,IAAO,IAAA,GAAO,SAAS,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI,QAAA;AACrD,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,GAAS,KAAA,CAAM,MAAA;AACzC,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,MACpD;AACA,MAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,qBACV,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,WAAW,CAAC,QAAA;AAAA,YACZ,UAAU,MAAM;AACd,cAAA,MAAM,GAAA,GAAM,cAAc,EAAC;AAC3B,cAAA,MAAM,OAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,EAAE,KAAK,CAAA;AAC5C,cAAA,IAAI,CAAC,eAAA,EAAiB,aAAA,CAAc,IAAI,CAAA;AACxC,cAAC,KAAA,CAA8B,WAAW,IAAI,CAAA;AAAA,YAChD,CAAA;AAAA,YACA,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAEjC,QAAA,EAAA,CAAA,CAAE;AAAA,WAAA;AAAA,UAXE,MAAA,CAAO,EAAE,KAAK;AAAA,SAatB,CAAA;AAAA,QACA,QAAA,GAAW,CAAA,oBAAK,IAAA,CAAC,GAAA,EAAA,EAAI,MAAK,SAAA,EAAU,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE;AAAA,SAAA,EAAS;AAAA,OAAA,EAClD,CAAA;AAAA,IAEJ;AACA,IAAA,MAAM,UAAU,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,WAAW,CAAA;AAC3D,IAAA,IAAI,CAAC,OAAA,EAAS,2BAAQ,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,WAAA,EAAY,CAAA;AAChE,IAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EACb,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,wBAAQ,GAAA,CAAC,IAAA,EAAA,EAAK,MAAM,OAAA,CAAQ,IAAA,EAAM,MAAM,EAAA,EAAI,CAAA;AAAA,sBACrD,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,KAAA,EACvB,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,eAAe,OAAA,GAAA,CAAW,UAAA,EAAY,MAAA,IAAU,CAAA,IAAK,IAAI,WAAA,KAAgB,MAAA;AAC/E,EAAA,MAAM,SAAA,GAAY,SAAA,IAAa,YAAA,IAAgB,CAAC,QAAA;AAGhD,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAuB;AAC3C,IAAA,SAAA,IAAa,CAAA;AACb,IAAA,MAAM,GAAA,GAAM,SAAA;AACZ,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,CAAA,CAAE,KAAK,CAAA;AAC9B,IAAA,MAAM,SAAS,GAAA,KAAQ,SAAA;AACvB,IAAA,uBACE,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAe,GAAA;AAAA,QACf,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,SAAA,EAAW,aAAa,GAAA,GAAM,QAAA,GAAW,EAAE,CAAA,CAAA,EAAI,MAAA,GAAS,cAAc,EAAE,CAAA,CAAA;AAAA,QACxE,YAAA,EAAc,MAAM,YAAA,CAAa,GAAG,CAAA;AAAA,QACpC,SAAS,MAAO,OAAA,GAAU,YAAY,CAAC,CAAA,GAAI,WAAW,CAAC,CAAA;AAAA,QAEtD,QAAA,EAAA;AAAA,UAAA,OAAA,wBACE,MAAA,EAAA,EAAK,SAAA,EAAW,cAAc,GAAA,GAAM,IAAA,GAAO,EAAE,CAAA,CAAA,EAAI,aAAA,EAAW,MAC1D,QAAA,EAAA,GAAA,oBAAO,GAAA,CAAC,QAAK,IAAA,EAAK,OAAA,EAAQ,MAAM,EAAA,EAAI,MAAA,EAAQ,GAAG,CAAA,EAClD,CAAA;AAAA,UAED,CAAA,CAAE,wBAAQ,GAAA,CAAC,IAAA,EAAA,EAAK,MAAM,CAAA,CAAE,IAAA,EAAM,MAAM,EAAA,EAAI,CAAA;AAAA,0BACzC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EACd,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,YAC1C,EAAE,WAAA,oBAAe,GAAA,CAAC,UAAK,SAAA,EAAU,gBAAA,EAAkB,YAAE,WAAA,EAAY;AAAA,WAAA,EACpE,CAAA;AAAA,UACC,CAAC,OAAA,oBACA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,MAAA,EACd,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,MAAA,EAAQ,GAAG,CAAA,EAC1C;AAAA;AAAA,OAAA;AAAA,MAtBG,MAAA,CAAO,EAAE,KAAK;AAAA,KAwBrB;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,aAAA;AAAA,MACJ,GAAG,IAAA;AAAA,MACJ,SAAA,EAAW,UAAU,IAAI,CAAA,CAAA,EAAI,UAAU,OAAA,GAAU,EAAE,IAAI,IAAA,GAAO,MAAA,GAAS,EAAE,CAAA,CAAA,EAAI,QAAA,GAAW,aAAa,EAAE,CAAA,CAAA,EAAI,UAAU,SAAA,GAAY,EAAE,IAAI,SAAS,CAAA,CAAA;AAAA,MAChJ,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,aAAA,GAAgB,CAAC,CAAA;AACjB,QAAA,SAAA,CAAU,CAAC,CAAA;AAAA,MACb,CAAA;AAAA,MACA,QAAA,EAAU,QAAA,GAAW,EAAA,GAAK,IAAA,CAAK,QAAA,IAAY,CAAA;AAAA,MAE3C,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,gBAAA;AAAA,YACV,QAAA;AAAA,YACA,SAAS,MAAM,CAAC,QAAA,IAAY,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,YAExC,QAAA,EAAA;AAAA,cAAA,aAAA,EAAc;AAAA,cACd,6BACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,MAAK,QAAA,EAAS,YAAA,EAAW,OAAA,EAAQ,OAAA,EAAS,UACvE,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAK,GAAA,EAAI,IAAA,EAAM,IAAI,CAAA,EAC3B,CAAA;AAAA,kCAED,IAAA,EAAA,EAAK,IAAA,EAAK,YAAW,IAAA,EAAM,EAAA,EAAI,WAAU,cAAA,EAAe;AAAA;AAAA;AAAA,SAC3D;AAAA,QACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3B,YAAA;AAAA,0BACE,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAW,QAAQ,aAAa,CAAA,CAAA;AAAA,cAChC,IAAA,EAAK,SAAA;AAAA,cACL,wBAAsB,OAAA,IAAW,MAAA;AAAA,cACjC,KAAA,EAAO,aAAA;AAAA,cAEN,QAAA,EAAA;AAAA,gBAAA,UAAA,oBACD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,QAAA,EAAS,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,kCAC9B,GAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,GAAA,EAAK,SAAA;AAAA,sBACL,IAAA,EAAK,MAAA;AAAA,sBACL,KAAA,EAAO,KAAA;AAAA,sBACP,WAAA,EAAY,iBAAA;AAAA,sBACZ,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,sBACxC,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,wBAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,CAAA,CAAE,GAAA,KAAQ,WAAA,IAAe,CAAA,CAAE,GAAA,KAAQ,SAAA,IAAa,CAAA,CAAE,GAAA,KAAQ,OAAA,EAAS;AAC3F,0BAAA,CAAA,CAAE,cAAA,EAAe;AACjB,0BAAA,SAAA,CAAU,CAAC,CAAA;AAAA,wBACb;AAAA,sBACF;AAAA;AAAA;AACF,iBAAA,EACF,CAAA;AAAA,gBAED,OAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,UAAK,SAAA,EAAU,gBAAA,EACd,8BAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,CAAA,EAC5B,CAAA;AAAA,kCACA,GAAA,CAAC,UAAK,QAAA,EAAA,uBAAA,EAAM;AAAA,iBAAA,EACd,IACE,aAAA,CAAc,MAAA,KAAW,oBAC3B,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EACb,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gBAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAA,EAAK,QAAA,EAAS,IAAA,EAAM,EAAA,EAAI,CAAA,EAChC,CAAA;AAAA,kCACA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,IAAgB,gCAAA,EAAQ;AAAA,iBAAA,EACjC,IAEA,aAAA,CAAc,GAAA;AAAA,kBAAI,CAAC,IAAI,EAAA,KACrB,OAAA,CAAQ,EAAE,CAAA,mBACR,IAAA,CAAO,gBAAN,EACC,QAAA,EAAA;AAAA,oCAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,EAAA,CAAG,KAAA,EAAM,CAAA;AAAA,oBAC3C,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,YAAY;AAAA,mBAAA,EAAA,EAFT,CAAA,EAAA,EAAK,EAAE,CAAA,CAG5B,CAAA,GAEA,aAAa,EAAE;AAAA;AAEnB;AAAA;AAAA,WAEF;AAAA,UACA,QAAA,CAAS;AAAA;AACX;AAAA;AAAA,GACJ;AAEJ,CAAA;AAGO,IAAM,MAAA,GAAe,iBAAW,WAAW;AACjD,MAAA,CAAe,WAAA,GAAc,QAAA","file":"chunk-RHZOBQON.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Select.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon, type IconName } from \"../Icon\";\nimport { Tag } from \"../Tag\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface SelectOption<T extends string | number = string> {\n value: T;\n label: React.ReactNode;\n /** Searchable text — used by default filter when `label` isn't a string. */\n text?: string;\n /** Secondary line shown beneath the label. */\n description?: React.ReactNode;\n /** Leading icon. */\n icon?: IconName;\n disabled?: boolean;\n}\n\nexport interface SelectOptionGroup<T extends string | number = string> {\n /** Group heading. */\n label: React.ReactNode;\n options: SelectOption<T>[];\n}\n\nexport type SelectItem<T extends string | number = string> =\n | SelectOption<T>\n | SelectOptionGroup<T>;\n\nconst isGroup = <T extends string | number>(\n it: SelectItem<T>\n): it is SelectOptionGroup<T> => Array.isArray((it as SelectOptionGroup<T>).options);\n\ninterface BaseSelectProps<T extends string | number = string>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n /** Flat or mixed (groups + options) item list. */\n options: SelectItem<T>[];\n placeholder?: string;\n disabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show invalid (red) ring. */\n invalid?: boolean;\n /** Show a small × to clear the selection (single mode) or all selections (multi). */\n clearable?: boolean;\n /** Add a search input at the top of the menu. */\n searchable?: boolean;\n /** Custom filter — defaults to label/text/value substring match. */\n filterOption?: (input: string, option: SelectOption<T>) => boolean;\n /** Show spinner instead of options. */\n loading?: boolean;\n /** Custom empty content when no options match. */\n emptyContent?: React.ReactNode;\n /** Controlled open state. */\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n /** Class for the popped-out menu. */\n menuClassName?: string;\n}\n\nexport interface SingleSelectProps<T extends string | number = string> extends BaseSelectProps<T> {\n multiple?: false;\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n /** Fired when user clears the selection via the × button. */\n onClear?: () => void;\n}\n\nexport interface MultiSelectProps<T extends string | number = string> extends BaseSelectProps<T> {\n multiple: true;\n value?: T[];\n defaultValue?: T[];\n onChange?: (value: T[]) => void;\n /** Max selected items shown as tags before collapsing to \"+N\". */\n maxTagCount?: number;\n}\n\nexport type SelectProps<T extends string | number = string> =\n | SingleSelectProps<T>\n | MultiSelectProps<T>;\n\nconst flatten = <T extends string | number>(items: SelectItem<T>[]): SelectOption<T>[] =>\n items.flatMap((it) => (isGroup(it) ? it.options : [it]));\n\nconst defaultFilter = <T extends string | number>(input: string, opt: SelectOption<T>): boolean => {\n const q = input.toLowerCase();\n const txt =\n opt.text ?? (typeof opt.label === \"string\" ? opt.label : String(opt.value));\n return txt.toLowerCase().includes(q);\n};\n\ntype SelectComponent = {\n <T extends string | number = string>(props: SingleSelectProps<T> & React.RefAttributes<HTMLDivElement>): React.ReactElement;\n <T extends string | number = string>(props: MultiSelectProps<T> & React.RefAttributes<HTMLDivElement>): React.ReactElement;\n};\n\nconst SelectInner = <T extends string | number = string>(\n props: SelectProps<T>,\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n): React.ReactElement => {\n const {\n options,\n placeholder = \"请选择…\",\n disabled,\n size = \"md\",\n invalid,\n clearable,\n searchable,\n filterOption,\n loading,\n emptyContent,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className = \"\",\n menuClassName = \"\",\n onKeyDown: onRootKeyDown,\n multiple,\n value: _value,\n defaultValue: _defaultValue,\n onChange: _selectionChange,\n onClear: _onClear,\n maxTagCount: _maxTagCount,\n ...rest\n } = props as SelectProps<T> & {\n onClear?: () => void;\n maxTagCount?: number;\n };\n const isMulti = multiple === true;\n\n const [innerSingle, setInnerSingle] = React.useState<T | undefined>(\n !isMulti ? (props as SingleSelectProps<T>).defaultValue : undefined\n );\n const [innerMulti, setInnerMulti] = React.useState<T[]>(\n isMulti ? (props as MultiSelectProps<T>).defaultValue ?? [] : []\n );\n const [innerOpen, setInnerOpen] = React.useState(defaultOpen ?? false);\n const [query, setQuery] = React.useState(\"\");\n const [activeIdx, setActiveIdx] = React.useState(-1);\n\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n const openControlled = openProp !== undefined;\n const open = openControlled ? openProp! : innerOpen;\n const setOpen = (v: boolean) => {\n if (!openControlled) setInnerOpen(v);\n onOpenChange?.(v);\n if (!v) setQuery(\"\");\n };\n\n const { triggerRef, floatingRef: menuRef, floatingStyle } = useFloating<HTMLDivElement, HTMLDivElement>({\n open,\n placement: \"bottom\",\n matchTriggerWidth: true,\n panelHeight: 320,\n });\n\n const setTriggerRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n (triggerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof forwardedRef === \"function\") forwardedRef(node);\n else if (forwardedRef) forwardedRef.current = node;\n },\n [forwardedRef, triggerRef]\n );\n\n const singleControlled = !isMulti && (props as SingleSelectProps<T>).value !== undefined;\n const multiControlled = isMulti && (props as MultiSelectProps<T>).value !== undefined;\n\n const singleValue = singleControlled ? (props as SingleSelectProps<T>).value : innerSingle;\n const multiValue = multiControlled ? (props as MultiSelectProps<T>).value! : innerMulti;\n\n React.useEffect(() => {\n if (!open) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (menuRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n // Auto-focus search input when opened\n React.useEffect(() => {\n if (open && searchable) {\n requestAnimationFrame(() => searchRef.current?.focus());\n }\n if (!open) setActiveIdx(-1);\n }, [open, searchable]);\n\n // Filter options\n const allFlat = React.useMemo(() => flatten(options), [options]);\n const filteredFlat = React.useMemo(() => {\n if (!query.trim()) return allFlat;\n const f = filterOption ?? defaultFilter;\n return allFlat.filter((o) => f(query, o));\n }, [allFlat, query, filterOption]);\n\n // Re-bucket into groups respecting filter (for menu rendering)\n const filteredItems = React.useMemo<SelectItem<T>[]>(() => {\n if (!query.trim()) return options;\n return options\n .map((it) => {\n if (!isGroup(it)) {\n return filteredFlat.includes(it) ? it : null;\n }\n const kept = it.options.filter((o) => filteredFlat.includes(o));\n return kept.length ? { label: it.label, options: kept } : null;\n })\n .filter((x): x is SelectItem<T> => x !== null);\n }, [options, filteredFlat, query]);\n\n React.useEffect(() => {\n setActiveIdx(filteredFlat.length ? 0 : -1);\n }, [filteredFlat.length]);\n\n const pickSingle = (opt: SelectOption<T>) => {\n if (opt.disabled) return;\n if (!singleControlled) setInnerSingle(opt.value);\n (props as SingleSelectProps<T>).onChange?.(opt.value);\n setOpen(false);\n };\n\n const toggleMulti = (opt: SelectOption<T>) => {\n if (opt.disabled) return;\n const cur = multiValue ?? [];\n const next = cur.includes(opt.value) ? cur.filter((v) => v !== opt.value) : [...cur, opt.value];\n if (!multiControlled) setInnerMulti(next);\n (props as MultiSelectProps<T>).onChange?.(next);\n };\n\n const clearAll = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (isMulti) {\n if (!multiControlled) setInnerMulti([]);\n (props as MultiSelectProps<T>).onChange?.([]);\n } else {\n if (!singleControlled) setInnerSingle(undefined);\n (props as SingleSelectProps<T>).onClear?.();\n }\n };\n\n const isSelected = (val: T) =>\n isMulti ? (multiValue ?? []).includes(val) : singleValue === val;\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (!open) {\n if (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\n e.preventDefault();\n setOpen(true);\n }\n return;\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n setOpen(false);\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIdx((i) => Math.min(filteredFlat.length - 1, i + 1));\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIdx((i) => Math.max(0, i - 1));\n return;\n }\n if (e.key === \"Enter\") {\n e.preventDefault();\n const opt = filteredFlat[activeIdx];\n if (opt && !opt.disabled) {\n if (isMulti) toggleMulti(opt);\n else pickSingle(opt);\n }\n return;\n }\n };\n\n const renderTrigger = () => {\n if (isMulti) {\n const selected = (multiValue ?? [])\n .map((v) => allFlat.find((o) => o.value === v))\n .filter((o): o is SelectOption<T> => !!o);\n const max = (props as MultiSelectProps<T>).maxTagCount;\n const shown = max != null ? selected.slice(0, max) : selected;\n const overflow = selected.length - shown.length;\n if (selected.length === 0) {\n return <span className=\"placeholder\">{placeholder}</span>;\n }\n return (\n <span className=\"select-tags\">\n {shown.map((o) => (\n <Tag\n key={String(o.value)}\n tone=\"accent\"\n removable={!disabled}\n onRemove={() => {\n const cur = multiValue ?? [];\n const next = cur.filter((v) => v !== o.value);\n if (!multiControlled) setInnerMulti(next);\n (props as MultiSelectProps<T>).onChange?.(next);\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {o.label}\n </Tag>\n ))}\n {overflow > 0 && <Tag tone=\"neutral\">+{overflow}</Tag>}\n </span>\n );\n }\n const current = allFlat.find((o) => o.value === singleValue);\n if (!current) return <span className=\"placeholder\">{placeholder}</span>;\n return (\n <span className=\"select-value\">\n {current.icon && <Icon name={current.icon} size={14} />}\n <span>{current.label}</span>\n </span>\n );\n };\n\n const hasSelection = isMulti ? (multiValue?.length ?? 0) > 0 : singleValue !== undefined;\n const showClear = clearable && hasSelection && !disabled;\n\n // Render an option button\n let renderIdx = -1;\n const renderOption = (o: SelectOption<T>) => {\n renderIdx += 1;\n const idx = renderIdx;\n const sel = isSelected(o.value);\n const active = idx === activeIdx;\n return (\n <button\n key={String(o.value)}\n type=\"button\"\n role=\"option\"\n aria-selected={sel}\n disabled={o.disabled}\n className={`menu-item ${sel ? \"active\" : \"\"} ${active ? \"highlight\" : \"\"}`}\n onMouseEnter={() => setActiveIdx(idx)}\n onClick={() => (isMulti ? toggleMulti(o) : pickSingle(o))}\n >\n {isMulti && (\n <span className={`menu-check ${sel ? \"on\" : \"\"}`} aria-hidden>\n {sel && <Icon name=\"check\" size={11} stroke={3} />}\n </span>\n )}\n {o.icon && <Icon name={o.icon} size={14} />}\n <span className=\"menu-item-body\">\n <span className=\"menu-item-label\">{o.label}</span>\n {o.description && <span className=\"menu-item-desc\">{o.description}</span>}\n </span>\n {!isMulti && (\n <span className=\"tick\">\n <Icon name=\"check\" size={12} stroke={3} />\n </span>\n )}\n </button>\n );\n };\n\n return (\n <div\n ref={setTriggerRef}\n {...rest}\n className={`select ${size} ${isMulti ? \"multi\" : \"\"} ${open ? \"open\" : \"\"} ${disabled ? \"disabled\" : \"\"} ${invalid ? \"invalid\" : \"\"} ${className}`}\n onKeyDown={(e) => {\n onRootKeyDown?.(e);\n onKeyDown(e);\n }}\n tabIndex={disabled ? -1 : rest.tabIndex ?? 0}\n >\n <button\n type=\"button\"\n className=\"select-trigger\"\n disabled={disabled}\n onClick={() => !disabled && setOpen(!open)}\n >\n {renderTrigger()}\n {showClear && (\n <span className=\"select-clear\" role=\"button\" aria-label=\"Clear\" onClick={clearAll}>\n <Icon name=\"x\" size={12} />\n </span>\n )}\n <Icon name=\"chevDown\" size={14} className=\"select-caret\" />\n </button>\n {open && typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={menuRef}\n className={`menu ${menuClassName}`}\n role=\"listbox\"\n aria-multiselectable={isMulti || undefined}\n style={floatingStyle}\n >\n {searchable && (\n <div className=\"menu-search\">\n <Icon name=\"search\" size={13} />\n <input\n ref={searchRef}\n type=\"text\"\n value={query}\n placeholder=\"搜索...\"\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Escape\" || e.key === \"ArrowDown\" || e.key === \"ArrowUp\" || e.key === \"Enter\") {\n e.preventDefault();\n onKeyDown(e);\n }\n }}\n />\n </div>\n )}\n {loading ? (\n <div className=\"menu-state\">\n <span className=\"menu-state-ico\">\n <span className=\"spinner\" />\n </span>\n <span>加载中...</span>\n </div>\n ) : filteredItems.length === 0 ? (\n <div className=\"menu-state\">\n <span className=\"menu-state-ico\">\n <Icon name=\"search\" size={16} />\n </span>\n <span>{emptyContent ?? \"暂无匹配项\"}</span>\n </div>\n ) : (\n filteredItems.map((it, gi) =>\n isGroup(it) ? (\n <React.Fragment key={`g-${gi}`}>\n <div className=\"menu-group-label\">{it.label}</div>\n {it.options.map(renderOption)}\n </React.Fragment>\n ) : (\n renderOption(it)\n )\n )\n )}\n </div>,\n document.body\n )}\n </div>\n );\n};\n\n/** `Select` — neumorphic dropdown. Set `multiple` for tag-style multi-select. */\nexport const Select = React.forwardRef(SelectInner) as SelectComponent;\n(Select as any).displayName = \"Select\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Popover/Popover.tsx"],"names":["React","useFloating","jsxs","Fragment","jsx","createPortal"],"mappings":"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","file":"chunk-RNVE2LMJ.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Popover.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface PopoverProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"title\" | \"children\" | \"content\"> {\n /** Popover body content. */\n content: React.ReactNode;\n /** Optional title rendered above content. */\n title?: React.ReactNode;\n /** Preferred placement relative to the trigger. */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** How the popover is triggered. */\n trigger?: \"click\" | \"hover\";\n /** Show a small arrow pointing at the trigger. */\n arrow?: boolean;\n /** Show a close button in the header (click trigger only). */\n closable?: boolean;\n /** Panel width in px, or `\"auto\"` to fit content. */\n width?: number | \"auto\";\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Callback when visibility changes. */\n onOpenChange?: (open: boolean) => void;\n /** Trigger element. */\n children: React.ReactElement;\n className?: string;\n}\n\n/**\n * `Popover` — rich content bubble with optional title, arrow, and close button.\n *\n * @example\n * <Popover title=\"Confirm\" content={<p>Are you sure?</p>} arrow>\n * <Button>Delete</Button>\n * </Popover>\n */\nexport const Popover = React.forwardRef<HTMLSpanElement, PopoverProps>(({\n content,\n title,\n placement = \"bottom\",\n trigger = \"click\",\n arrow = false,\n closable = false,\n width,\n defaultOpen = false,\n open,\n onOpenChange,\n children,\n className = \"\",\n onClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}, ref) => {\n const [inner, setInner] = React.useState(defaultOpen);\n const isControlled = open !== undefined;\n const show = isControlled ? open! : inner;\n\n const panelWidth = width === \"auto\" ? 160 : (width ?? 240);\n\n const {\n triggerRef,\n floatingRef,\n floatingStyle,\n placement: resolved,\n } = useFloating<HTMLSpanElement, HTMLDivElement>({\n open: show,\n placement,\n panelWidth,\n panelHeight: 160,\n alignCross: \"center\",\n });\n\n const set = React.useCallback((v: boolean) => {\n if (!isControlled) setInner(v);\n onOpenChange?.(v);\n }, [isControlled, onOpenChange]);\n\n const setTriggerRef = React.useCallback(\n (node: HTMLSpanElement | null) => {\n (triggerRef as React.MutableRefObject<HTMLSpanElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ref, triggerRef]\n );\n\n React.useEffect(() => {\n if (trigger !== \"click\" || !show) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (floatingRef.current?.contains(t)) return;\n set(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n }, [show, trigger, set, triggerRef, floatingRef]);\n\n const hoverTimeout = React.useRef<number | undefined>();\n\n const interact =\n trigger === \"hover\"\n ? {\n onMouseEnter: () => {\n window.clearTimeout(hoverTimeout.current);\n set(true);\n },\n onMouseLeave: () => {\n hoverTimeout.current = window.setTimeout(() => set(false), 100);\n },\n }\n : { onClick: () => set(!show) };\n\n const panelHover =\n trigger === \"hover\"\n ? {\n onMouseEnter: () => window.clearTimeout(hoverTimeout.current),\n onMouseLeave: () => {\n hoverTimeout.current = window.setTimeout(() => set(false), 100);\n },\n }\n : {};\n\n const widthStyle = width === \"auto\" ? {} : { width: width ?? undefined, minWidth: width ? undefined : 220 };\n\n return (\n <>\n <span\n ref={setTriggerRef}\n className={`popover-anchor ${className}`}\n style={{ display: \"inline-flex\", alignSelf: \"flex-start\" }}\n onClick={(e) => {\n onClick?.(e);\n if (\"onClick\" in interact) interact.onClick?.();\n }}\n onMouseEnter={(e) => {\n onMouseEnter?.(e);\n if (\"onMouseEnter\" in interact) interact.onMouseEnter?.();\n }}\n onMouseLeave={(e) => {\n onMouseLeave?.(e);\n if (\"onMouseLeave\" in interact) interact.onMouseLeave?.();\n }}\n {...rest}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={floatingRef}\n className={`popover popover-${resolved}`}\n style={{ ...floatingStyle, ...widthStyle }}\n {...panelHover}\n >\n {(title || closable) && (\n <div className=\"popover-header\">\n {title && <div className=\"popover-title\">{title}</div>}\n {closable && (\n <button\n className=\"popover-close\"\n onClick={() => set(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n )}\n </div>\n )}\n <div className=\"popover-body\">{content}</div>\n {arrow && <span className={`popover-arrow popover-arrow-${resolved}`} />}\n </div>,\n document.body\n )}\n </>\n );\n});\nPopover.displayName = \"Popover\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Avatar/Avatar.tsx"],"names":["React","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,MAAA,GAAeA,4BAAwC,CAAC;AAAA,EACnE,GAAA;AAAA,EACA,GAAA,GAAM,EAAA;AAAA,EACN,QAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,KAAA,GAAQ,QAAA;AAAA,EACR,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,UAAU,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,OAAO,IAAA,GAAO,EAAA;AACnE,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,QAAA,GAAW,QAAA,GAAW,EAAA;AACjD,EAAA,MAAM,WAAA,GACJ,OAAO,IAAA,KAAS,QAAA,GAAW,EAAE,CAAC,QAAiB,GAAG,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA,EAAM,GAAG,KAAA,EAAM,GAAI,SAAS,EAAC;AACxF,EAAA,MAAM,QAAQ,QAAA,IAAY,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AACtD,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAAA,MAClF,KAAA,EAAO,WAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,GAAA,kCAAO,KAAA,EAAA,EAAI,GAAA,EAAU,KAAU,CAAA,mBAAKC,cAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACjD,0BAAUA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI;AAAA;AAAA;AAAA,GACzD;AAEJ,CAAC;AACD,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-RXL26GSI.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Avatar.css\";\nimport * as React from \"react\";\n\nexport interface AvatarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n src?: string;\n alt?: string;\n /** Initials if no image. Auto-derived from `alt` if omitted. */\n initials?: string;\n size?: number | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Shape — circular (default) or rounded-square. */\n shape?: \"circle\" | \"square\";\n /** Status dot. */\n status?: \"online\" | \"busy\" | \"away\" | \"offline\";\n}\n\n/** `Avatar` — user image or initials chip. */\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(({\n src,\n alt = \"\",\n initials,\n size = \"md\",\n shape = \"circle\",\n status,\n className = \"\",\n style,\n ...rest\n}, ref) => {\n const sizeCls = typeof size === \"string\" && size !== \"md\" ? size : \"\";\n const shapeCls = shape === \"square\" ? \"square\" : \"\";\n const customStyle: React.CSSProperties =\n typeof size === \"number\" ? { [\"--size\" as never]: `${size}px`, ...style } : style ?? {};\n const shown = initials ?? alt.slice(0, 2).toUpperCase();\n return (\n <div\n ref={ref}\n className={`avatar ${sizeCls} ${shapeCls} ${className}`.trim().replace(/\\s+/g, \" \")}\n style={customStyle}\n {...rest}\n >\n {src ? <img src={src} alt={alt} /> : <span>{shown}</span>}\n {status && <span className={`avatar-status ${status}`} />}\n </div>\n );\n});\nAvatar.displayName = \"Avatar\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":["React","jsx","Icon","jsxs"],"mappings":"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","file":"chunk-S3OSBW7R.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Checkbox.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface CheckboxProps\n extends Omit<React.LabelHTMLAttributes<HTMLLabelElement>, \"onChange\" | \"children\" | \"id\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\n/** `Checkbox` — binary choice, supports indeterminate state. */\nexport const Checkbox = React.forwardRef<HTMLLabelElement, CheckboxProps>(({\n checked,\n defaultChecked,\n indeterminate,\n onChange,\n disabled,\n label,\n className = \"\",\n id,\n ...rest\n}, ref) => {\n const [inner, setInner] = React.useState(defaultChecked ?? false);\n const isControlled = checked !== undefined;\n const value = isControlled ? checked : inner;\n\n const toggle = () => {\n if (disabled) return;\n const next = !value;\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const cls = [\n \"checkbox\",\n value && \"checked\",\n indeterminate && \"indeterminate\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label ref={ref} className={cls} {...rest}>\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={indeterminate ? \"mixed\" : value}\n disabled={disabled}\n onClick={toggle}\n id={id}\n className=\"checkbox-box\"\n >\n {indeterminate ? <Icon name=\"minus\" size={11} /> : value ? <Icon name=\"check\" size={11} /> : null}\n </button>\n {label && <span className=\"checkbox-label\">{label}</span>}\n </label>\n );\n});\nCheckbox.displayName = \"Checkbox\";\n\nexport interface RadioOption<T extends string | number = string> {\n value: T;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps<T extends string | number = string>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n options: RadioOption<T>[];\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n name?: string;\n direction?: \"vertical\" | \"horizontal\";\n className?: string;\n}\n\ntype RadioGroupComponent = <T extends string | number = string>(\n props: RadioGroupProps<T> & React.RefAttributes<HTMLDivElement>\n) => React.ReactElement | null;\n\nconst RadioGroupInner = <T extends string | number = string>({\n options,\n value,\n defaultValue,\n onChange,\n direction = \"vertical\",\n className = \"\",\n ...rest\n}: RadioGroupProps<T>, ref: React.ForwardedRef<HTMLDivElement>) => {\n const [inner, setInner] = React.useState<T | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : inner;\n\n const pick = (v: T) => {\n if (!isControlled) setInner(v);\n onChange?.(v);\n };\n\n return (\n <div ref={ref} className={`radio-group ${direction} ${className}`} {...rest}>\n {options.map((opt) => (\n <label\n key={String(opt.value)}\n className={`radio ${current === opt.value ? \"checked\" : \"\"} ${opt.disabled ? \"disabled\" : \"\"}`}\n >\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={current === opt.value}\n disabled={opt.disabled}\n onClick={() => pick(opt.value)}\n className=\"radio-dot\"\n />\n <span className=\"radio-label\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n};\n\n/** `RadioGroup` — mutually exclusive options. */\nexport const RadioGroup = React.forwardRef(RadioGroupInner) as RadioGroupComponent;\n(RadioGroup as any).displayName = \"RadioGroup\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/AppShell/AppShell.tsx"],"names":["React","jsxs","jsx"],"mappings":"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","file":"chunk-SREMTSVI.cjs","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/Switch/Switch.tsx"],"names":[],"mappings":";;;;;;;AAwBO,IAAM,MAAA,GAAe,iBAA0C,CAAC;AAAA,EACrE,OAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,EAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,kBAAkB,KAAK,CAAA;AAChE,EAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,eAAe,OAAA,GAAU,KAAA;AAEvC,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,OAAO,CAAC,KAAA;AACd,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,IAAI,CAAA;AAChC,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,IAAA,IAAQ,iBAAA,IAAqB,IAAA;AACpE,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,QAAA;AAAA,IACA,KAAA,IAAS,IAAA;AAAA,IACT,SAAS,IAAA,IAAQ,IAAA;AAAA,IACjB,QAAA,IAAY,UAAA;AAAA,IACZ,WAAA,IAAe,eAAA;AAAA,IACf;AAAA,GACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,4BACG,OAAA,EAAA,EAAM,GAAA,EAAU,SAAA,EAAW,GAAA,EAAM,GAAG,IAAA,EACnC,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,cAAA,EAAc,KAAA;AAAA,QACd,QAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,EAAA;AAAA,QACA,SAAA,EAAU,cAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,WAAA,oBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EACd,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,eAAA,EAAgB,CAAA;AAAA,4BACnD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,iBAAA,EAAkB;AAAA,WAAA,EACxD,CAAA;AAAA,0BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA;AAAA,KACjC;AAAA,IACC,KAAA,oBAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAgB,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAClD,CAAA;AAEJ,CAAC;AACD,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-SWB57EA2.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Switch.css\";\nimport * as React from \"react\";\n\nexport interface SwitchProps\n extends Omit<React.LabelHTMLAttributes<HTMLLabelElement>, \"onChange\" | \"children\" | \"id\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n label?: React.ReactNode;\n size?: \"sm\" | \"md\";\n /** Content rendered inside the track when checked (short text or icon). */\n checkedChildren?: React.ReactNode;\n /** Content rendered inside the track when unchecked. */\n unCheckedChildren?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\n/**\n * `Switch` — on/off toggle. Controlled or uncontrolled.\n */\nexport const Switch = React.forwardRef<HTMLLabelElement, SwitchProps>(({\n checked,\n defaultChecked,\n onChange,\n disabled,\n label,\n size = \"md\",\n checkedChildren,\n unCheckedChildren,\n className = \"\",\n id,\n ...rest\n}, ref) => {\n const [inner, setInner] = React.useState(defaultChecked ?? false);\n const isControlled = checked !== undefined;\n const value = isControlled ? checked : inner;\n\n const toggle = () => {\n if (disabled) return;\n const next = !value;\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n const hasChildren = checkedChildren != null || unCheckedChildren != null;\n const cls = [\n \"switch\",\n value && \"on\",\n size !== \"md\" && size,\n disabled && \"disabled\",\n hasChildren && \"with-children\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <label ref={ref} className={cls} {...rest}>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={value}\n disabled={disabled}\n onClick={toggle}\n id={id}\n className=\"switch-track\"\n >\n {hasChildren && (\n <span className=\"switch-inner\">\n <span className=\"switch-inner-on\">{checkedChildren}</span>\n <span className=\"switch-inner-off\">{unCheckedChildren}</span>\n </span>\n )}\n <span className=\"switch-thumb\" />\n </button>\n {label && <span className=\"switch-label\">{label}</span>}\n </label>\n );\n});\nSwitch.displayName = \"Switch\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Alert/Alert.tsx"],"names":[],"mappings":";;;;;;;AAwBO,IAAM,KAAA,GAAc,iBAAuC,CAAC;AAAA,EACjE,IAAA,GAAO,MAAA;AAAA,EACP,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,QAAA,GACJ,SAAS,IAAA,KAAS,SAAA,GAAY,WAAW,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,QAAA,GAAW,OAAA,GAAU,MAAA,CAAA;AAC/F,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,KAAA,GAAQ,EAAA,GAAK,UAAU,CAAA,CAAA,EAAI,QAAA,GAAW,EAAA,GAAK,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MAC7F,IAAA,EAAK,OAAA;AAAA,MACJ,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,EAAA,EAAI,CAAA,EAClC,CAAA;AAAA,wBAEF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC7C,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAS;AAAA,SAAA,EACrD,CAAA;AAAA,QACC,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAgB,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,QAChD,4BACC,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAU,aAAA,EAAc,OAAA,EAAS,OAAA,EAAS,YAAA,EAAW,WACzE,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAK,GAAA,EAAI,IAAA,EAAM,IAAI,CAAA,EAC3B;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAC;AACD,KAAA,CAAM,WAAA,GAAc,OAAA","file":"chunk-T7ZBJJC4.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Alert.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\nexport type AlertTone = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface AlertProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\" | \"children\"> {\n tone?: AlertTone;\n title?: React.ReactNode;\n children?: React.ReactNode;\n icon?: IconName;\n /** Controls the leading semantic icon. Defaults to `true`. */\n showIcon?: boolean;\n closable?: boolean;\n onClose?: () => void;\n /** Right-side action area, rendered after the content and before the close button. */\n action?: React.ReactNode;\n className?: string;\n}\n\n/** `Alert` — inline contextual message. */\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(({\n tone = \"info\",\n title,\n children,\n icon,\n showIcon = true,\n closable,\n onClose,\n action,\n className = \"\",\n ...rest\n}, ref) => {\n const iconName: IconName =\n icon ?? (tone === \"success\" ? \"check2\" : tone === \"warning\" || tone === \"danger\" ? \"alert\" : \"info\");\n return (\n <div\n ref={ref}\n className={`alert ${tone} ${title ? \"\" : \"no-title\"} ${showIcon ? \"\" : \"no-icon\"} ${className}`}\n role=\"alert\"\n {...rest}\n >\n {showIcon && (\n <span className=\"alert-ico\">\n <Icon name={iconName} size={14} />\n </span>\n )}\n <div className=\"alert-body\">\n {title && <div className=\"alert-title\">{title}</div>}\n {children && <div className=\"alert-desc\">{children}</div>}\n </div>\n {action && <div className=\"alert-action\">{action}</div>}\n {closable && (\n <button type=\"button\" className=\"alert-close\" onClick={onClose} aria-label=\"Dismiss\">\n <Icon name=\"x\" size={12} />\n </button>\n )}\n </div>\n );\n});\nAlert.displayName = \"Alert\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Empty/Empty.tsx"],"names":["React","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,KAAA,GAAcA,4BAAuC,CAAC;AAAA,EACjE,KAAA,GAAQ,0BAAA;AAAA,EACR,WAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,EAAG,GAAA,qBACDC,eAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACpE,QAAA,EAAA;AAAA,EAAA,IAAA,oBAAQC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAa,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,kBAC1CA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,EACnC,WAAA,oBAAeA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,EACxD,MAAA,oBAAUA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAgB,QAAA,EAAA,MAAA,EAAO;AAAA,CAAA,EACnD,CACD;AACD,KAAA,CAAM,WAAA,GAAc,OAAA;AAab,IAAM,OAAA,GAAgBF,4BAA0C,CAAC;AAAA,EACtE,IAAA,GAAO,EAAA;AAAA,EACP,IAAA,GAAO,QAAA;AAAA,EACP,KAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,GAAA,GAAM,WAAW,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,SAAS,GAAG,IAAA,EAAK;AAC3D,EAAA,MAAM,YAAA,GACJ,OAAA,KAAY,MAAA,GACP,EAAE,UAAU,IAAA,EAAM,GAAG,KAAA,EAAM,GAC3B,EAAE,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,GAAG,KAAA,EAAM;AAC7C,EAAA,MAAM,OAAA,GACJ,OAAA,KAAY,MAAA,mBACVC,eAAA,CAAC,MAAA,EAAA,EAAK,WAAW,GAAA,EAAK,KAAA,EAAO,YAAA,EAAc,YAAA,EAAW,SAAA,EACpD,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,GAAA,EAAA,EAAE,CAAA;AAAA,mCAAG,GAAA,EAAA,EAAE,CAAA;AAAA,mCAAG,GAAA,EAAA,EAAE;AAAA,GAAA,EACf,CAAA,mBAEAA,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAA;AAAA,MACX,KAAA,EAAO,YAAA;AAAA,MACP,YAAA,EAAW;AAAA;AAAA,GACb;AAEJ,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAaF,8BAAa,OAAA,EAAS;AAAA,MACjC,GAAA;AAAA,MACA,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AACA,EAAA,uCACG,MAAA,EAAA,EAAK,GAAA,EAAU,WAAU,cAAA,EAAe,KAAA,EAAe,GAAG,IAAA,EACxD,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,oBACDE,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACzC,CAAA;AAEJ,CAAC;AACD,OAAA,CAAQ,WAAA,GAAc,SAAA;AA8CtB,IAAM,iBAAiB,EAAE,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAG;AAgBzC,IAAM,QAAA,GAAiBF,4BAAuC,CAAC;AAAA,EACpE,KAAA,GAAQ,MAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,MAAA;AAAA,EACA,SAAA,GAAY,MAAA;AAAA,EACZ,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAG,GAAA,KAAQ;AACT,EAAA,MAAM,SAAA,GAAY,MAAA,IAAU,IAAA,IAAQ,KAAA,IAAS,QAAQ,SAAA,IAAa,IAAA;AAElE,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,uBACEE,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,EAAI,MAAA,GAAS,WAAW,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,QAC/E,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,cAAc,MAAA,GAAS,KAAA,GAAQ,MAAA,EAAW,GAAG,KAAA,EAAM;AAAA,QAC1E,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AAGA,EAAA,MAAM,SAAA,GACJ,WAAW,IAAA,GAAO,KAAK,MAAA,KAAW,KAAA,IAAS,MAAA,IAAU,IAAA,GAAO,IAAA,GAAO,MAAA;AACrE,EAAA,MAAM,QAAA,GACJ,UAAU,KAAA,GAAQ,IAAA,GAAO,UAAU,IAAA,IAAQ,KAAA,IAAS,IAAA,GAAO,EAAC,GAAI,KAAA;AAClE,EAAA,MAAM,YAAA,GACJ,cAAc,KAAA,GAAQ,IAAA,GAAO,cAAc,IAAA,IAAQ,SAAA,IAAa,IAAA,GAAO,EAAC,GAAI,SAAA;AAE9E,EAAA,MAAM,IAAA,GAAO,cAAc,IAAA,IAAQ,CAAA;AACnC,EAAA,MAAM,SAAA,GAAY,YAAA,EAAc,KAAA,IAAS,EAAC;AAC1C,EAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAiC;AACxD,IAAA,IAAI,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,OAAO,UAAU,GAAG,CAAA;AAChD,IAAA,IAAI,GAAA,KAAQ,IAAA,GAAO,CAAA,EAAG,OAAO,KAAA;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,WACJ,SAAA,IAAa,IAAA,GAAO,eAAe,SAAA,CAAU,IAAA,IAAQ,IAAI,CAAA,GAAI,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAc,WAAW,KAAA,IAAS,QAAA;AAExC,EAAA,uBACED,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,CAAA,aAAA,EAAgB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,KAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,SAAA,oBACCC,cAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,YAAY,SAAS,CAAA,CAAA,EAAI,gBAAgB,QAAA,GAAW,QAAA,GAAW,EAAE,CAAA,gBAAA,CAAA,CAAmB,IAAA,EAAK;AAAA,YACpG,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,QAAA;AAAA,cACP,MAAA,EAAQ,QAAA;AAAA,cACR,YAAA,EAAc,WAAA,KAAgB,QAAA,GAAW,KAAA,GAAQ,MAAA;AAAA,cACjD,UAAA,EAAY;AAAA;AACd;AAAA,SACF;AAAA,wBAEFD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,QAAA,oBACCC,cAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,CAAA,SAAA,EAAY,SAAS,CAAA,eAAA,CAAA,CAAkB,IAAA,EAAK;AAAA,cACvD,OAAO,EAAE,KAAA,EAAO,SAAS,KAAA,IAAS,KAAA,EAAO,QAAQ,EAAA;AAAG;AAAA,WACtD;AAAA,UAED,YAAA,IACC,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACnCA,cAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,CAAA,SAAA,EAAY,SAAS,CAAA,aAAA,CAAA,CAAgB,IAAA,EAAK;AAAA,cACrD,OAAO,EAAE,KAAA,EAAO,gBAAgB,CAAC,CAAA,EAAG,QAAQ,EAAA;AAAG,aAAA;AAAA,YAF1C;AAAA,WAIR;AAAA,SAAA,EACL;AAAA;AAAA;AAAA,GACF;AAEJ,CAAC;AACD,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-TC5ZL2OS.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Empty.css\";\nimport * as React from \"react\";\n\nexport interface EmptyProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\" | \"children\"> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n /** `subtle` drops the recessed icon well — good for inline / embedded use. */\n variant?: \"default\" | \"subtle\";\n className?: string;\n}\n\n/** `Empty` — empty state placeholder. */\nexport const Empty = React.forwardRef<HTMLDivElement, EmptyProps>(({\n title = \"暂无内容\",\n description,\n icon,\n action,\n size = \"md\",\n variant = \"default\",\n className = \"\",\n ...rest\n}, ref) => (\n <div ref={ref} className={`empty ${size} ${variant} ${className}`} {...rest}>\n {icon && <div className=\"empty-ico\">{icon}</div>}\n <div className=\"empty-title\">{title}</div>\n {description && <div className=\"empty-desc\">{description}</div>}\n {action && <div className=\"empty-action\">{action}</div>}\n </div>\n));\nEmpty.displayName = \"Empty\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: number;\n tone?: \"accent\" | \"success\" | \"warning\" | \"danger\" | \"current\";\n /** Text rendered next to the spinner. */\n label?: React.ReactNode;\n /** `ring` is the default border spinner; `dots` is a three-dot bounce. */\n variant?: \"ring\" | \"dots\";\n className?: string;\n}\n\n/** `Spinner` — loading indicator. */\nexport const Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(({\n size = 20,\n tone = \"accent\",\n label,\n variant = \"ring\",\n className = \"\",\n style,\n ...rest\n}, ref) => {\n const cls = `spinner ${variant} ${tone} ${className}`.trim();\n const spinnerStyle =\n variant === \"dots\"\n ? ({ fontSize: size, ...style } as React.CSSProperties)\n : ({ width: size, height: size, ...style } as React.CSSProperties);\n const spinner =\n variant === \"dots\" ? (\n <span className={cls} style={spinnerStyle} aria-label=\"Loading\">\n <i /><i /><i />\n </span>\n ) : (\n <span\n className={cls}\n style={spinnerStyle}\n aria-label=\"Loading\"\n />\n );\n if (!label) {\n return React.cloneElement(spinner, {\n ref,\n ...rest,\n });\n }\n return (\n <span ref={ref} className=\"spinner-wrap\" style={style} {...rest}>\n {spinner}\n <span className=\"spinner-label\">{label}</span>\n </span>\n );\n});\nSpinner.displayName = \"Spinner\";\n\nexport interface SkeletonAvatarConfig {\n shape?: \"circle\" | \"square\";\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport interface SkeletonTitleConfig {\n width?: number | string;\n}\n\nexport interface SkeletonParagraphConfig {\n rows?: number;\n width?: (number | string)[];\n}\n\nexport interface SkeletonProps\n extends Omit<React.HTMLAttributes<HTMLElement>, \"title\"> {\n /* -------- primitive mode -------- */\n width?: number | string;\n height?: number | string;\n circle?: boolean;\n /** `wave` is a shimmer sweep; `pulse` fades opacity; `none` disables animation. */\n animation?: \"wave\" | \"pulse\" | \"none\";\n\n /* -------- composite mode -------- */\n /**\n * Render an avatar skeleton on the left. `true` gives the defaults (circle, md).\n * @example avatar\n * @example avatar={{ shape: \"square\", size: \"lg\" }}\n */\n avatar?: boolean | SkeletonAvatarConfig;\n /**\n * Render a title line skeleton. Defaults to `true` whenever the composite layout is active\n * (any of `avatar` / `paragraph` / `title` is set).\n */\n title?: boolean | SkeletonTitleConfig;\n /**\n * Render N paragraph lines. `true` gives 3 rows; passing `width` arrays lets you\n * control per-row widths (last row defaults to 60%).\n */\n paragraph?: boolean | SkeletonParagraphConfig;\n\n className?: string;\n}\n\nconst AVATAR_SIZE_PX = { sm: 32, md: 40, lg: 56 } as const;\n\n/**\n * `Skeleton` — content placeholder during loading.\n *\n * Two modes:\n * - **Primitive** (no composite prop set): renders a single block using `width` / `height` / `circle`.\n * - **Composite** (`avatar` / `title` / `paragraph`): renders the Ant-Design-style avatar + title + paragraph layout.\n *\n * @example\n * // primitive\n * <Skeleton height={14} width=\"60%\" />\n * @example\n * // composite\n * <Skeleton avatar title paragraph={{ rows: 4 }} />\n */\nexport const Skeleton = React.forwardRef<HTMLElement, SkeletonProps>(({\n width = \"100%\",\n height = 16,\n circle,\n animation = \"wave\",\n avatar,\n title,\n paragraph,\n className = \"\",\n style,\n ...rest\n}, ref) => {\n const composite = avatar != null || title != null || paragraph != null;\n\n if (!composite) {\n return (\n <span\n ref={ref as React.ForwardedRef<HTMLSpanElement>}\n className={`skeleton ${animation} ${circle ? \"circle\" : \"\"} ${className}`.trim()}\n style={{ width, height, borderRadius: circle ? \"50%\" : undefined, ...style }}\n {...rest}\n />\n );\n }\n\n // --- composite mode ---\n const avatarCfg: SkeletonAvatarConfig | null =\n avatar === true ? {} : avatar === false || avatar == null ? null : avatar;\n const titleCfg: SkeletonTitleConfig | null =\n title === false ? null : title === true || title == null ? {} : title;\n const paragraphCfg: SkeletonParagraphConfig | null =\n paragraph === false ? null : paragraph === true || paragraph == null ? {} : paragraph;\n\n const rows = paragraphCfg?.rows ?? 3;\n const rowWidths = paragraphCfg?.width ?? [];\n const resolveRowWidth = (idx: number): number | string => {\n if (idx < rowWidths.length) return rowWidths[idx];\n if (idx === rows - 1) return \"60%\";\n return \"100%\";\n };\n\n const avatarPx =\n avatarCfg != null ? AVATAR_SIZE_PX[avatarCfg.size ?? \"md\"] : 0;\n const avatarShape = avatarCfg?.shape ?? \"circle\";\n\n return (\n <div\n ref={ref as React.ForwardedRef<HTMLDivElement>}\n className={`skeleton-box ${className}`.trim()}\n style={style as React.CSSProperties | undefined}\n {...rest}\n >\n {avatarCfg && (\n <span\n className={`skeleton ${animation} ${avatarShape === \"circle\" ? \"circle\" : \"\"} skeleton-avatar`.trim()}\n style={{\n width: avatarPx,\n height: avatarPx,\n borderRadius: avatarShape === \"circle\" ? \"50%\" : undefined,\n flexShrink: 0,\n }}\n />\n )}\n <div className=\"skeleton-content\">\n {titleCfg && (\n <span\n className={`skeleton ${animation} skeleton-title`.trim()}\n style={{ width: titleCfg.width ?? \"38%\", height: 16 }}\n />\n )}\n {paragraphCfg &&\n Array.from({ length: rows }).map((_, i) => (\n <span\n key={i}\n className={`skeleton ${animation} skeleton-row`.trim()}\n style={{ width: resolveRowWidth(i), height: 12 }}\n />\n ))}\n </div>\n </div>\n );\n});\nSkeleton.displayName = \"Skeleton\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Calendar/Calendar.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":"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","file":"chunk-V24B7KWT.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Calendar.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface CalendarProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"defaultValue\" | \"onChange\"> {\n value?: Date;\n defaultValue?: Date;\n onChange?: (date: Date) => void;\n /** Min selectable date. */\n min?: Date;\n /** Max selectable date. */\n max?: Date;\n /**\n * Predicate that marks an individual cell as disabled. Disabled cells are\n * greyed out, not clickable, and do not fire `onChange`.\n * @example\n * // disable weekends\n * disabledDate={(d) => d.getDay() === 0 || d.getDay() === 6}\n */\n disabledDate?: (date: Date) => boolean;\n className?: string;\n}\n\nconst WEEKDAYS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\n\n/** `Calendar` — month-view date picker. */\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(({\n value,\n defaultValue,\n onChange,\n min,\n max,\n disabledDate,\n className = \"\",\n ...rest\n}, ref) => {\n const [inner, setInner] = React.useState(defaultValue ?? new Date());\n const isControlled = value !== undefined;\n const sel = isControlled ? value! : inner;\n const [view, setView] = React.useState(new Date(sel.getFullYear(), sel.getMonth(), 1));\n\n const first = new Date(view.getFullYear(), view.getMonth(), 1);\n const startDay = first.getDay();\n const daysInMonth = new Date(view.getFullYear(), view.getMonth() + 1, 0).getDate();\n const cells: (number | null)[] = [];\n for (let i = 0; i < startDay; i++) cells.push(null);\n for (let d = 1; d <= daysInMonth; d++) cells.push(d);\n\n const isSame = (a: Date, b: Date) =>\n a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n\n const pick = (d: number) => {\n const next = new Date(view.getFullYear(), view.getMonth(), d);\n if (min && next < min) return;\n if (max && next > max) return;\n if (disabledDate?.(next)) return;\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n return (\n <div ref={ref} className={`calendar ${className}`} {...rest}>\n <div className=\"calendar-head\">\n <button\n type=\"button\"\n className=\"btn icon sm ghost\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() - 1, 1))}\n aria-label=\"Previous month\"\n >\n <Icon name=\"chevLeft\" size={14} />\n </button>\n <button type=\"button\" className=\"calendar-title\">\n {view.getFullYear()} 年 {view.getMonth() + 1} 月\n </button>\n <button\n type=\"button\"\n className=\"btn icon sm ghost\"\n onClick={() => setView(new Date(view.getFullYear(), view.getMonth() + 1, 1))}\n aria-label=\"Next month\"\n >\n <Icon name=\"chevRight\" size={14} />\n </button>\n </div>\n <div className=\"calendar-grid\">\n {WEEKDAYS.map((w) => (\n <div key={w} className=\"calendar-dow\">{w}</div>\n ))}\n {cells.map((d, i) => {\n if (d === null) return <div key={i} className=\"calendar-cell out\" />;\n const date = new Date(view.getFullYear(), view.getMonth(), d);\n const disabled =\n (min && date < min) ||\n (max && date > max) ||\n (disabledDate?.(date) ?? false);\n return (\n <button\n key={i}\n type=\"button\"\n disabled={!!disabled}\n className={`calendar-cell ${isSame(date, sel) ? \"selected\" : \"\"} ${isSame(date, new Date()) ? \"today\" : \"\"} ${disabled ? \"disabled\" : \"\"}`}\n onClick={() => pick(d)}\n >\n {d}\n </button>\n );\n })}\n </div>\n </div>\n );\n});\nCalendar.displayName = \"Calendar\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Typography/Typography.tsx"],"names":["React","Icon","jsx","jsxs"],"mappings":"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","file":"chunk-V5KSJITO.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Typography.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\n/* ============================================================================\n * Shared types\n * ========================================================================== */\n\nexport type TypographyType = \"secondary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface CopyableConfig {\n /** Text to copy. Defaults to the rendered children string. */\n text?: string;\n /** Fired after a successful copy. */\n onCopy?: (event: React.MouseEvent<HTMLSpanElement>) => void;\n /** Custom icons `[default, copied]`. */\n icon?: [React.ReactNode, React.ReactNode];\n /** Custom tooltip text `[default, copied]`. Pass `false` to disable. */\n tooltips?: [React.ReactNode, React.ReactNode] | false;\n /** Format/MIME hint when calling `navigator.clipboard.write` is not used. */\n format?: \"text/plain\" | \"text/html\";\n}\n\nexport interface EditableConfig {\n /** Controlled editing flag. Omit for uncontrolled (click icon to start). */\n editing?: boolean;\n /** Text shown in the editor; falls back to `children` string. */\n text?: string;\n /** Fired with the new value when the user confirms. */\n onChange?: (value: string) => void;\n /** Fired when the user cancels (Escape or blur without confirm). */\n onCancel?: () => void;\n /** Fired when editing starts. */\n onStart?: () => void;\n /** Fired when editing ends (regardless of save/cancel). */\n onEnd?: () => void;\n /** Maximum input length. */\n maxLength?: number;\n /** Auto resize textarea. `true` = autosize; or pass row bounds. */\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n /** What triggers entering edit mode. Defaults to `[\"icon\"]`. */\n triggerType?: Array<\"icon\" | \"text\">;\n /** Override the edit icon. */\n icon?: React.ReactNode;\n /** Tooltip text on the trigger icon. Pass `false` to disable. */\n tooltip?: React.ReactNode | false;\n /** Use a single-line input instead of textarea. */\n enterIcon?: React.ReactNode;\n}\n\nexport interface EllipsisConfig {\n /** Number of rows to clamp at. Defaults to 1. */\n rows?: number;\n /** Show an \"Expand\" affordance after clamping. */\n expandable?: boolean;\n /** Custom expand-button label. */\n symbol?: React.ReactNode;\n /** Fired on expand. */\n onExpand?: (event: React.MouseEvent<HTMLElement>) => void;\n /** Show full text in a `title` attribute. */\n tooltip?: boolean | React.ReactNode;\n /** Optional suffix that should always remain visible (e.g. an em-dash author). */\n suffix?: string;\n}\n\nexport interface BaseTypographyProps {\n /** Semantic color. */\n type?: TypographyType;\n /** Render disabled (muted + not selectable). */\n disabled?: boolean;\n /** Highlight with mark background. */\n mark?: boolean;\n /** Render as inline `<code>`. */\n code?: boolean;\n /** Render as keyboard key `<kbd>`. */\n keyboard?: boolean;\n /** Underline. */\n underline?: boolean;\n /** Strikethrough. */\n delete?: boolean;\n /** Bold. */\n strong?: boolean;\n /** Italic. */\n italic?: boolean;\n /** Add a copy button. Pass an object to customize. */\n copyable?: boolean | CopyableConfig;\n /** Add an edit button. Pass an object to customize. */\n editable?: boolean | EditableConfig;\n /** Truncate to N rows with optional expand affordance. */\n ellipsis?: boolean | EllipsisConfig;\n /** Extra class names. */\n className?: string;\n /** Inline style. */\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\n/* ============================================================================\n * Internals\n * ========================================================================== */\n\nfunction toText(node: React.ReactNode): string {\n if (node == null || node === false) return \"\";\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(toText).join(\"\");\n if (React.isValidElement(node)) {\n const props = node.props as { children?: React.ReactNode };\n return toText(props.children);\n }\n return \"\";\n}\n\nfunction buildClass(props: BaseTypographyProps, base: string, extra?: string) {\n return [\n base,\n props.type,\n props.disabled && \"disabled\",\n props.mark && \"mark\",\n props.code && \"code\",\n props.keyboard && \"kbd\",\n props.underline && \"underline\",\n props.delete && \"del\",\n props.strong && \"strong\",\n props.italic && \"italic\",\n extra,\n props.className,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\n/* ---------- Copy button ---------- */\n\nconst CopyAction: React.FC<{\n config: CopyableConfig;\n fallbackText: string;\n}> = ({ config, fallbackText }) => {\n const [copied, setCopied] = React.useState(false);\n const timerRef = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n };\n }, []);\n\n const handleCopy = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.stopPropagation();\n const text = config.text ?? fallbackText;\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n navigator.clipboard.writeText(text).catch(() => {\n /* swallow — user-visible feedback is already minimal */\n });\n }\n config.onCopy?.(event);\n setCopied(true);\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setCopied(false), 2400);\n };\n\n const [defIcon, doneIcon] = config.icon ?? [\n <Icon key=\"def\" name=\"copy\" size={12} />,\n <Icon key=\"done\" name=\"check\" size={12} />,\n ];\n const tipText =\n config.tooltips === false\n ? undefined\n : Array.isArray(config.tooltips)\n ? copied\n ? config.tooltips[1]\n : config.tooltips[0]\n : copied\n ? \"已复制\"\n : \"复制\";\n\n return (\n <span\n role=\"button\"\n aria-label={typeof tipText === \"string\" ? tipText : \"Copy\"}\n tabIndex={0}\n title={typeof tipText === \"string\" ? tipText : undefined}\n onClick={handleCopy}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy(e as unknown as React.MouseEvent<HTMLSpanElement>);\n }\n }}\n className={`typo-action typo-copy ${copied ? \"copied\" : \"\"}`}\n >\n {copied ? doneIcon : defIcon}\n </span>\n );\n};\n\n/* ---------- Edit affordance + inline editor ---------- */\n\nconst EditableEditor: React.FC<{\n initial: string;\n multiline: boolean;\n maxLength?: number;\n autoSize?: EditableConfig[\"autoSize\"];\n onConfirm: (value: string) => void;\n onCancel: () => void;\n}> = ({ initial, multiline, maxLength, autoSize, onConfirm, onCancel }) => {\n const [value, setValue] = React.useState(initial);\n const ref = React.useRef<HTMLTextAreaElement | HTMLInputElement | null>(null);\n\n React.useEffect(() => {\n const el = ref.current;\n if (el) {\n el.focus();\n const len = el.value.length;\n el.setSelectionRange(len, len);\n }\n }, []);\n\n const resize = React.useCallback(() => {\n const el = ref.current as HTMLTextAreaElement | null;\n if (!el || !multiline || !autoSize) return;\n el.style.height = \"auto\";\n const computed = window.getComputedStyle(el);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const padding =\n parseFloat(computed.paddingTop) + parseFloat(computed.paddingBottom);\n const bounds = typeof autoSize === \"object\" ? autoSize : {};\n const min = (bounds.minRows ?? 1) * lineHeight + padding;\n const max = bounds.maxRows ? bounds.maxRows * lineHeight + padding : Infinity;\n const next = Math.min(Math.max(el.scrollHeight, min), max);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [autoSize, multiline]);\n\n React.useEffect(() => {\n resize();\n }, [value, resize]);\n\n const handleKeyDown = (\n e: React.KeyboardEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n return;\n }\n if (e.key === \"Enter\" && (!multiline || (e.metaKey || e.ctrlKey))) {\n e.preventDefault();\n onConfirm(value);\n }\n };\n\n const common = {\n ref: ref as never,\n value,\n maxLength,\n className: \"typo-editor\",\n onChange: (\n e: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => setValue(e.target.value),\n onBlur: () => onConfirm(value),\n onKeyDown: handleKeyDown,\n } as const;\n\n return multiline ? (\n <textarea rows={1} {...common} />\n ) : (\n <input type=\"text\" {...common} />\n );\n};\n\n/* ============================================================================\n * Hook: shared rendering body\n * ========================================================================== */\n\ninterface RenderableProps extends BaseTypographyProps {\n ellipsisRows?: number;\n multilineEdit?: boolean;\n}\n\nfunction useTypographyBody(props: RenderableProps) {\n const fallbackText = React.useMemo(\n () => toText(props.children),\n [props.children]\n );\n\n /* ---- editable state ---- */\n const editable = props.editable;\n const editConf: EditableConfig =\n editable && typeof editable === \"object\" ? editable : {};\n const triggers = editConf.triggerType ?? [\"icon\"];\n const isControlledEdit = editConf.editing != null;\n const [editingState, setEditingState] = React.useState(false);\n const editing = isControlledEdit ? editConf.editing! : editingState;\n\n const startEdit = () => {\n editConf.onStart?.();\n if (!isControlledEdit) setEditingState(true);\n };\n const endEdit = () => {\n editConf.onEnd?.();\n if (!isControlledEdit) setEditingState(false);\n };\n const handleConfirm = (value: string) => {\n if (value !== (editConf.text ?? fallbackText)) editConf.onChange?.(value);\n endEdit();\n };\n const handleCancel = () => {\n editConf.onCancel?.();\n endEdit();\n };\n\n /* ---- ellipsis state ---- */\n const ellipsis = props.ellipsis;\n const ellConf: EllipsisConfig =\n ellipsis && typeof ellipsis === \"object\" ? ellipsis : {};\n const rows = ellConf.rows ?? props.ellipsisRows ?? 1;\n const wantClamp = !!ellipsis;\n const [expanded, setExpanded] = React.useState(false);\n\n /* ---- content ---- */\n let inner: React.ReactNode = props.children;\n\n if (props.code) inner = <code>{inner}</code>;\n if (props.keyboard) inner = <kbd>{inner}</kbd>;\n if (props.mark) inner = <mark>{inner}</mark>;\n if (props.delete) inner = <del>{inner}</del>;\n if (props.underline) inner = <u>{inner}</u>;\n if (props.strong) inner = <strong>{inner}</strong>;\n if (props.italic) inner = <i>{inner}</i>;\n\n /* ---- copy node ---- */\n let copyNode: React.ReactNode = null;\n if (props.copyable) {\n const conf =\n typeof props.copyable === \"object\" ? props.copyable : ({} as CopyableConfig);\n copyNode = <CopyAction config={conf} fallbackText={fallbackText} />;\n }\n\n /* ---- edit node ---- */\n let editIconNode: React.ReactNode = null;\n if (editable) {\n const tip = editConf.tooltip ?? \"编辑\";\n editIconNode = (\n <span\n role=\"button\"\n aria-label={typeof tip === \"string\" ? tip : \"Edit\"}\n tabIndex={0}\n title={typeof tip === \"string\" && tip !== \"\" ? tip : undefined}\n onClick={(e) => {\n e.stopPropagation();\n startEdit();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n startEdit();\n }\n }}\n className=\"typo-action typo-edit\"\n >\n {editConf.icon ?? <Icon name=\"edit\" size={12} />}\n </span>\n );\n }\n\n /* ---- text-trigger edit ---- */\n if (editable && triggers.includes(\"text\") && !editing) {\n inner = (\n <span\n className=\"typo-edit-text-trigger\"\n onClick={() => startEdit()}\n >\n {inner}\n </span>\n );\n }\n\n /* ---- clamp / expand ---- */\n let style: React.CSSProperties | undefined = props.style;\n let extraCls: string | undefined;\n if (wantClamp && !expanded) {\n extraCls = rows > 1 ? \"ellipsis-multi\" : \"ellipsis\";\n if (rows > 1) {\n style = {\n ...style,\n WebkitLineClamp: rows,\n } as React.CSSProperties;\n }\n }\n\n let expandNode: React.ReactNode = null;\n if (wantClamp && ellConf.expandable && !expanded) {\n expandNode = (\n <a\n className=\"typo-expand\"\n onClick={(e) => {\n ellConf.onExpand?.(e);\n setExpanded(true);\n }}\n >\n {ellConf.symbol ?? \"展开\"}\n </a>\n );\n }\n\n /* ---- title attribute fallback ---- */\n const titleAttr =\n wantClamp && ellConf.tooltip\n ? typeof ellConf.tooltip === \"string\"\n ? ellConf.tooltip\n : fallbackText\n : undefined;\n\n return {\n editing,\n editConf,\n fallbackText,\n handleConfirm,\n handleCancel,\n inner,\n copyNode,\n editIconNode,\n expandNode,\n style,\n extraCls,\n titleAttr,\n };\n}\n\n/* ============================================================================\n * Title (h1–h5)\n * ========================================================================== */\n\nexport type TitleLevel = 1 | 2 | 3 | 4 | 5;\n\nexport interface TitleProps extends BaseTypographyProps {\n /** Heading level — 1..5. Defaults to 1. */\n level?: TitleLevel;\n}\n\n/**\n * `Typography.Title` — semantic heading.\n *\n * @example\n * <Title level={2} copyable>章节标题</Title>\n */\nexport const Title = React.forwardRef<HTMLElement, TitleProps>((props, ref) => {\n const { level = 1, ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = (`h${level}`) as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nTitle.displayName = \"Typography.Title\";\n\n/* ============================================================================\n * Text — inline span\n * ========================================================================== */\n\nexport interface TextProps extends BaseTypographyProps {\n /** Force the rendered tag (default `<span>`). */\n as?: keyof JSX.IntrinsicElements;\n}\n\n/**\n * `Typography.Text` — inline text with semantic / decorative variants.\n *\n * @example\n * <Text type=\"success\" strong>成功</Text>\n * <Text code>npm install</Text>\n * <Text copyable>可复制内容</Text>\n */\nexport const Text = React.forwardRef<HTMLElement, TextProps>((props, ref) => {\n const { as = \"span\", ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = as as \"span\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nText.displayName = \"Typography.Text\";\n\n/* ============================================================================\n * Paragraph — block <p>\n * ========================================================================== */\n\nexport interface ParagraphProps extends BaseTypographyProps {}\n\n/**\n * `Typography.Paragraph` — block paragraph with the same decorations as `Text`.\n *\n * @example\n * <Paragraph ellipsis={{ rows: 3, expandable: true }}>{long}</Paragraph>\n */\nexport const Paragraph = React.forwardRef<HTMLParagraphElement, ParagraphProps>(\n (props, ref) => {\n const body = useTypographyBody({ ...props, multilineEdit: true });\n\n if (body.editing) {\n return (\n <div\n ref={ref as unknown as React.Ref<HTMLDivElement>}\n className={buildClass(props, \"typo typo-paragraph\", \"editing\")}\n style={props.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize ?? true}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </div>\n );\n }\n\n return (\n <p\n ref={ref}\n className={buildClass(props, \"typo typo-paragraph\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </p>\n );\n }\n);\nParagraph.displayName = \"Typography.Paragraph\";\n\n/* ============================================================================\n * Link — anchor\n * ========================================================================== */\n\nexport interface LinkProps\n extends BaseTypographyProps,\n Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n keyof BaseTypographyProps | \"type\"\n > {\n href?: string;\n /** Add the leading external icon. */\n external?: boolean;\n /** Override the external icon. */\n externalIcon?: IconName;\n}\n\n/**\n * `Typography.Link` — styled `<a>` that participates in the same decoration\n * system as `Text`. Adds a small `arrow` for `external` links.\n *\n * @example\n * <Link href=\"https://example.com\" external>外部链接</Link>\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (props, ref) => {\n const {\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n external,\n externalIcon = \"arrowRight\",\n target,\n rel,\n ...anchorRest\n } = props;\n const body = useTypographyBody({\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n });\n\n const safeRel =\n target === \"_blank\" ? rel ?? \"noopener noreferrer\" : rel;\n\n if (body.editing) {\n return (\n <span\n className={buildClass(props, \"typo typo-link\", \"editing\")}\n style={style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </span>\n );\n }\n\n return (\n <a\n ref={ref}\n className={buildClass(props, \"typo typo-link\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n target={target}\n rel={safeRel}\n aria-disabled={disabled || undefined}\n onClick={(e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n anchorRest.onClick?.(e);\n }}\n {...anchorRest}\n >\n {body.inner}\n {external && (\n <span className=\"typo-link-ext\" aria-hidden>\n <Icon name={externalIcon} size={12} />\n </span>\n )}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </a>\n );\n }\n);\nLink.displayName = \"Typography.Link\";\n\n/* ============================================================================\n * Typography wrapper (article-style block)\n * ========================================================================== */\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n}\n\ninterface TypographyComponent\n extends React.ForwardRefExoticComponent<\n TypographyProps & React.RefAttributes<HTMLDivElement>\n > {\n Title: typeof Title;\n Text: typeof Text;\n Paragraph: typeof Paragraph;\n Link: typeof Link;\n}\n\n/**\n * `Typography` — optional article-style wrapper that applies consistent\n * vertical rhythm to its `Title` / `Paragraph` / `Text` / `Link` children.\n *\n * @example\n * <Typography>\n * <Typography.Title level={2}>标题</Typography.Title>\n * <Typography.Paragraph>段落…</Typography.Paragraph>\n * </Typography>\n */\nconst TypographyBase = React.forwardRef<HTMLDivElement, TypographyProps>(\n ({ className = \"\", children, ...rest }, ref) => (\n <article\n ref={ref as unknown as React.Ref<HTMLElement>}\n className={`typo-root ${className}`}\n {...(rest as React.HTMLAttributes<HTMLElement>)}\n >\n {children}\n </article>\n )\n) as unknown as TypographyComponent;\n\nTypographyBase.Title = Title;\nTypographyBase.Text = Text;\nTypographyBase.Paragraph = Paragraph;\nTypographyBase.Link = Link;\n(TypographyBase as React.ForwardRefExoticComponent<unknown>).displayName =\n \"Typography\";\n\nexport const Typography = TypographyBase;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Theme/Theme.tsx"],"names":[],"mappings":"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","file":"chunk-W6I67HQQ.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport * as React from \"react\";\n\n/* ============================================================================\n * Theme — full custom theming system for lumina\n *\n * - <ThemeProvider> manages theme state and applies CSS variables / data-attrs\n * to either <html> (global) or a local scope.\n * - useTheme() exposes read/write access for descendants.\n * - Presets: accent palettes, font stacks, densities.\n * - Custom accent: pass a full palette or only a base color — missing slots\n * are auto-derived via `color-mix`.\n * - Persistence: optional localStorage via `storageKey` prop.\n * - \"system\" mode respects `prefers-color-scheme` via matchMedia.\n * - Arbitrary token overrides through the `tokens` prop.\n * ========================================================================== */\n\n/* ------------------------------- Types ---------------------------------- */\n\nexport type ThemeMode = \"light\" | \"dark\" | \"system\";\nexport type ResolvedThemeMode = \"light\" | \"dark\";\nexport type AccentKey = \"sky\" | \"coral\" | \"mint\" | \"violet\" | \"amber\" | \"rose\";\nexport type DensityMode = \"compact\" | \"comfortable\" | \"spacious\";\nexport type FontKey = \"system\" | \"sf\" | \"serif\" | \"mono\";\n\n/** Full accent color slots. All four CSS variables the library reads. */\nexport interface AccentPalette {\n /** Primary accent — `--accent`. */\n accent: string;\n /** Darker text-on-soft variant — `--accent-ink`. */\n ink: string;\n /** Pale tint for backgrounds — `--accent-soft`. */\n soft: string;\n /** Halo / glow color (typically with alpha) — `--accent-glow`. */\n glow: string;\n}\n\n/** Input type for custom accent: either full palette, or just a base color\n * (missing slots derived via color-mix in CSS). */\nexport type CustomAccentInput = string | Partial<AccentPalette> & { accent: string };\n\n/** Font config — either a preset key, a single sans string, or a granular object. */\nexport type FontConfig =\n | FontKey\n | string\n | { sans?: string; display?: string; mono?: string };\n\n/** Arbitrary CSS variable overrides. Keys may be either a short name\n * (e.g. `\"bg\"` → `--bg`) or a full var name (e.g. `\"--bg\"`). */\nexport type ThemeTokens = Record<string, string>;\n\nexport interface ThemeConfig {\n mode?: ThemeMode;\n accent?: AccentKey | CustomAccentInput;\n density?: DensityMode;\n /** Shadow strength, 1..10. Maps to `--d` (0.4..1.6). */\n intensity?: number;\n /** Base radius in px — generates the full `--r-*` scale. */\n radius?: number;\n font?: FontConfig;\n tokens?: ThemeTokens;\n}\n\nexport interface ThemeValue {\n /** Requested mode (\"system\" is preserved here). */\n mode: ThemeMode;\n /** Resolved concrete mode (\"system\" → \"light\" | \"dark\" based on OS). */\n resolvedMode: ResolvedThemeMode;\n /** Accent key or \"custom\" if a palette was supplied. */\n accent: AccentKey | \"custom\";\n /** Resolved palette currently in effect. */\n accentPalette: AccentPalette;\n density: DensityMode;\n intensity: number;\n radius: number;\n font: FontConfig;\n tokens: ThemeTokens;\n\n setMode: (m: ThemeMode) => void;\n toggleMode: () => void;\n setAccent: (a: AccentKey | CustomAccentInput) => void;\n setDensity: (d: DensityMode) => void;\n setIntensity: (n: number) => void;\n setRadius: (n: number) => void;\n setFont: (f: FontConfig) => void;\n setTokens: (t: ThemeTokens) => void;\n /** Shallow-merge a partial config. */\n update: (cfg: Partial<ThemeConfig>) => void;\n /** Reset to the initial props. */\n reset: () => void;\n}\n\n/* --------------------------- Built-in presets --------------------------- */\n\n/** Built-in accent palettes (light-mode values). */\nexport const ACCENT_PRESETS: Record<AccentKey, AccentPalette> = {\n sky: { accent: \"oklch(68% 0.14 235)\", ink: \"oklch(42% 0.12 235)\", soft: \"oklch(92% 0.04 235)\", glow: \"oklch(68% 0.14 235 / 0.35)\" },\n coral: { accent: \"oklch(72% 0.16 35)\", ink: \"oklch(48% 0.14 35)\", soft: \"oklch(94% 0.04 35)\", glow: \"oklch(72% 0.16 35 / 0.35)\" },\n mint: { accent: \"oklch(72% 0.13 165)\", ink: \"oklch(46% 0.11 165)\", soft: \"oklch(93% 0.04 165)\", glow: \"oklch(72% 0.13 165 / 0.35)\" },\n violet: { accent: \"oklch(66% 0.16 290)\", ink: \"oklch(44% 0.14 290)\", soft: \"oklch(93% 0.04 290)\", glow: \"oklch(66% 0.16 290 / 0.35)\" },\n amber: { accent: \"oklch(76% 0.14 75)\", ink: \"oklch(50% 0.12 75)\", soft: \"oklch(94% 0.05 75)\", glow: \"oklch(76% 0.14 75 / 0.35)\" },\n rose: { accent: \"oklch(68% 0.17 10)\", ink: \"oklch(46% 0.15 10)\", soft: \"oklch(93% 0.04 10)\", glow: \"oklch(68% 0.17 10 / 0.35)\" },\n};\n\n/** Dark-mode overrides — ink/soft shift, and glow alpha is halved so the outer\n * button bloom doesn't read as a bright ring on dark surfaces. */\nexport const ACCENT_PRESETS_DARK: Record<AccentKey, Pick<AccentPalette, \"ink\" | \"soft\" | \"glow\">> = {\n sky: { soft: \"oklch(35% 0.08 235)\", ink: \"oklch(82% 0.10 235)\", glow: \"oklch(68% 0.14 235 / 0.18)\" },\n coral: { soft: \"oklch(38% 0.09 35)\", ink: \"oklch(84% 0.10 35)\", glow: \"oklch(72% 0.16 35 / 0.18)\" },\n mint: { soft: \"oklch(36% 0.08 165)\", ink: \"oklch(83% 0.10 165)\", glow: \"oklch(72% 0.13 165 / 0.18)\" },\n violet: { soft: \"oklch(36% 0.09 290)\", ink: \"oklch(82% 0.11 290)\", glow: \"oklch(66% 0.16 290 / 0.18)\" },\n amber: { soft: \"oklch(38% 0.08 75)\", ink: \"oklch(85% 0.10 75)\", glow: \"oklch(76% 0.14 75 / 0.18)\" },\n rose: { soft: \"oklch(38% 0.09 10)\", ink: \"oklch(84% 0.11 10)\", glow: \"oklch(68% 0.17 10 / 0.18)\" },\n};\n\n/** Built-in font family stacks. */\nexport const FONT_STACKS: Record<FontKey, string> = {\n system: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\", \"Microsoft YaHei\", sans-serif',\n sf: '\"SF Pro Display\", -apple-system, BlinkMacSystemFont, \"PingFang SC\", sans-serif',\n serif: 'Cambria, Georgia, \"Songti SC\", \"STSong\", serif',\n mono: 'ui-monospace, \"SF Mono\", \"JetBrains Mono\", Consolas, monospace',\n};\n\nconst DEFAULT_CONFIG: Required<Omit<ThemeConfig, \"tokens\">> & { tokens: ThemeTokens } = {\n mode: \"light\",\n accent: \"sky\",\n density: \"comfortable\",\n intensity: 5,\n radius: 20,\n font: \"sf\",\n tokens: {},\n};\n\n/* ------------------------------ Helpers --------------------------------- */\n\nconst isBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\n/** Resolve \"system\" mode against `prefers-color-scheme`. */\nexport function resolveThemeMode(mode: ThemeMode): ResolvedThemeMode {\n if (mode !== \"system\") return mode;\n if (!isBrowser) return \"light\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\n/** Fill missing slots of a custom accent via color-mix. */\nexport function normalizeAccentInput(\n input: AccentKey | CustomAccentInput,\n resolvedMode: ResolvedThemeMode\n): { key: AccentKey | \"custom\"; palette: AccentPalette } {\n // Preset key?\n if (typeof input === \"string\" && input in ACCENT_PRESETS) {\n const key = input as AccentKey;\n const base = ACCENT_PRESETS[key];\n if (resolvedMode === \"dark\") {\n return { key, palette: { ...base, ...ACCENT_PRESETS_DARK[key] } };\n }\n return { key, palette: base };\n }\n // Custom — either a raw color string or a partial palette object.\n const raw = typeof input === \"string\" ? { accent: input } : input;\n const { accent } = raw;\n const ink = raw.ink ?? `color-mix(in oklch, ${accent} 65%, black)`;\n const soft =\n raw.soft ??\n (resolvedMode === \"dark\"\n ? `color-mix(in oklch, ${accent} 30%, black)`\n : `color-mix(in oklch, ${accent} 15%, white)`);\n // Dark-mode glow is halved so it doesn't wash into a white halo on dark surfaces.\n const glow =\n raw.glow ??\n (resolvedMode === \"dark\"\n ? `color-mix(in oklch, ${accent} 18%, transparent)`\n : `color-mix(in oklch, ${accent} 35%, transparent)`);\n return { key: \"custom\", palette: { accent, ink, soft, glow } };\n}\n\n/** Normalize a token key to a CSS custom property name. */\nfunction toVar(key: string): string {\n return key.startsWith(\"--\") ? key : `--${key}`;\n}\n\n/** Imperative theme application — writes CSS vars / data-attrs on a target. */\nexport function applyTheme(target: HTMLElement, config: ThemeConfig): void {\n const cfg: ThemeConfig = { ...DEFAULT_CONFIG, ...config };\n const resolvedMode = resolveThemeMode(cfg.mode!);\n const { key, palette } = normalizeAccentInput(cfg.accent!, resolvedMode);\n\n // data-* attributes\n target.dataset.theme = resolvedMode;\n target.dataset.density = cfg.density!;\n if (key === \"custom\") {\n delete target.dataset.accent;\n } else {\n target.dataset.accent = key;\n }\n\n // Accent palette — always set inline so custom overrides win and preset\n // stays deterministic across mode switches.\n target.style.setProperty(\"--accent\", palette.accent);\n target.style.setProperty(\"--accent-ink\", palette.ink);\n target.style.setProperty(\"--accent-soft\", palette.soft);\n target.style.setProperty(\"--accent-glow\", palette.glow);\n\n // Shadow intensity (1..10 → 0.4..1.6)\n const intensity = cfg.intensity ?? DEFAULT_CONFIG.intensity;\n target.style.setProperty(\"--d\", String(0.4 + intensity * 0.12));\n\n // Radius scale\n const r = cfg.radius ?? DEFAULT_CONFIG.radius;\n target.style.setProperty(\"--r-xs\", `${Math.max(4, r - 16)}px`);\n target.style.setProperty(\"--r-sm\", `${Math.max(6, r - 12)}px`);\n target.style.setProperty(\"--r-md\", `${Math.max(8, r - 6)}px`);\n target.style.setProperty(\"--r-lg\", `${r}px`);\n target.style.setProperty(\"--r-xl\", `${r + 10}px`);\n\n // Fonts\n const font = cfg.font ?? DEFAULT_CONFIG.font;\n if (typeof font === \"string\") {\n const stack = (FONT_STACKS as Record<string, string>)[font] ?? font;\n target.style.setProperty(\"--font-sans\", stack);\n if (font === \"mono\") target.style.setProperty(\"--font-display\", FONT_STACKS.mono);\n } else {\n if (font.sans) target.style.setProperty(\"--font-sans\", font.sans);\n if (font.display) target.style.setProperty(\"--font-display\", font.display);\n if (font.mono) target.style.setProperty(\"--font-mono\", font.mono);\n }\n\n // Arbitrary token overrides\n if (cfg.tokens) {\n for (const [k, v] of Object.entries(cfg.tokens)) {\n target.style.setProperty(toVar(k), v);\n }\n }\n}\n\n/* ----------------------------- Context ---------------------------------- */\n\nconst ThemeCtx = React.createContext<ThemeValue | null>(null);\n\n/** Read/write access to the nearest `<ThemeProvider>`. */\nexport function useTheme(): ThemeValue {\n const ctx = React.useContext(ThemeCtx);\n if (!ctx) {\n throw new Error(\n \"useTheme() must be used inside <ThemeProvider>. Wrap your app (or a subtree) with <ThemeProvider>.\"\n );\n }\n return ctx;\n}\n\n/** Read theme value without throwing — returns `null` outside of a provider. */\nexport function useThemeOptional(): ThemeValue | null {\n return React.useContext(ThemeCtx);\n}\n\n/* ---------------------------- Persistence ------------------------------- */\n\nfunction loadPersisted(key: string | undefined): Partial<ThemeConfig> | null {\n if (!key || !isBrowser) return null;\n try {\n const raw = localStorage.getItem(key);\n if (!raw) return null;\n return JSON.parse(raw) as Partial<ThemeConfig>;\n } catch {\n return null;\n }\n}\n\nfunction persist(key: string | undefined, cfg: ThemeConfig): void {\n if (!key || !isBrowser) return;\n try {\n localStorage.setItem(key, JSON.stringify(cfg));\n } catch {\n /* quota exceeded / disabled storage — ignore */\n }\n}\n\n/* --------------------------- ThemeProvider ------------------------------ */\n\nexport interface ThemeProviderProps extends ThemeConfig {\n children?: React.ReactNode;\n /**\n * Where to apply the theme.\n * - `\"root\"` (default): on `<html>` — affects the whole document.\n * - `\"scope\"`: on a local wrapper element — scoped to descendants.\n */\n target?: \"root\" | \"scope\";\n /** Tag for scope mode. Default `\"div\"`. */\n as?: keyof JSX.IntrinsicElements;\n className?: string;\n style?: React.CSSProperties;\n /** If set, theme state is persisted to localStorage under this key. */\n storageKey?: string;\n /** Called whenever the resolved theme value changes. */\n onChange?: (value: ThemeValue) => void;\n}\n\n/**\n * `<ThemeProvider>` — manage theme state and apply CSS variables.\n *\n * @example\n * ```tsx\n * <ThemeProvider mode=\"system\" accent=\"violet\" storageKey=\"app:theme\">\n * <App />\n * </ThemeProvider>\n * ```\n *\n * @example Custom accent\n * ```tsx\n * <ThemeProvider accent={{ accent: \"oklch(70% 0.2 180)\" }} />\n * // or just\n * <ThemeProvider accent=\"oklch(70% 0.2 180)\" />\n * ```\n */\nexport const ThemeProvider: React.FC<ThemeProviderProps> = (props) => {\n const {\n children,\n target = \"root\",\n as: Tag = \"div\",\n className,\n style,\n storageKey,\n onChange,\n ...configProps\n } = props;\n\n // Build the initial config: defaults ← props ← persisted (if any)\n const initialConfig = React.useMemo<ThemeConfig>(() => {\n const fromProps: ThemeConfig = {\n mode: configProps.mode ?? DEFAULT_CONFIG.mode,\n accent: configProps.accent ?? DEFAULT_CONFIG.accent,\n density: configProps.density ?? DEFAULT_CONFIG.density,\n intensity: configProps.intensity ?? DEFAULT_CONFIG.intensity,\n radius: configProps.radius ?? DEFAULT_CONFIG.radius,\n font: configProps.font ?? DEFAULT_CONFIG.font,\n tokens: configProps.tokens ?? {},\n };\n const persisted = loadPersisted(storageKey);\n return persisted ? { ...fromProps, ...persisted } : fromProps;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [config, setConfig] = React.useState<ThemeConfig>(initialConfig);\n\n // Sync external prop changes into state — so callers can drive the provider\n // \"controlled-style\" (e.g. <ThemeProvider accent={reactState} />).\n // `setMode`/`setAccent`/etc. still work; they just get overridden if the\n // parent later changes the prop.\n React.useEffect(() => {\n setConfig((c) => {\n const next: ThemeConfig = {\n mode: configProps.mode ?? c.mode,\n accent: configProps.accent ?? c.accent,\n density: configProps.density ?? c.density,\n intensity: configProps.intensity ?? c.intensity,\n radius: configProps.radius ?? c.radius,\n font: configProps.font ?? c.font,\n tokens: configProps.tokens ?? c.tokens,\n };\n if (\n next.mode === c.mode &&\n next.accent === c.accent &&\n next.density === c.density &&\n next.intensity === c.intensity &&\n next.radius === c.radius &&\n next.font === c.font &&\n next.tokens === c.tokens\n ) {\n return c;\n }\n return next;\n });\n }, [\n configProps.mode,\n configProps.accent,\n configProps.density,\n configProps.intensity,\n configProps.radius,\n configProps.font,\n configProps.tokens,\n ]);\n\n // Listen for system preference changes when mode === \"system\".\n const [systemDark, setSystemDark] = React.useState<boolean>(() =>\n isBrowser && window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n );\n React.useEffect(() => {\n if (!isBrowser) return;\n const mql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches);\n mql.addEventListener?.(\"change\", handler);\n return () => mql.removeEventListener?.(\"change\", handler);\n }, []);\n\n const resolvedMode: ResolvedThemeMode =\n config.mode === \"system\" ? (systemDark ? \"dark\" : \"light\") : (config.mode as ResolvedThemeMode);\n\n const { key: accentKey, palette: accentPalette } = React.useMemo(\n () => normalizeAccentInput(config.accent!, resolvedMode),\n [config.accent, resolvedMode]\n );\n\n const scopeRef = React.useRef<HTMLElement | null>(null);\n\n // Apply theme whenever config/resolvedMode changes.\n React.useEffect(() => {\n if (!isBrowser) return;\n const el = target === \"root\" ? document.documentElement : scopeRef.current;\n if (!el) return;\n applyTheme(el as HTMLElement, { ...config, mode: resolvedMode });\n persist(storageKey, config);\n }, [config, resolvedMode, target, storageKey]);\n\n const value: ThemeValue = React.useMemo(() => {\n const patch = (p: Partial<ThemeConfig>) => setConfig((c) => ({ ...c, ...p }));\n return {\n mode: config.mode!,\n resolvedMode,\n accent: accentKey,\n accentPalette,\n density: config.density!,\n intensity: config.intensity!,\n radius: config.radius!,\n font: config.font!,\n tokens: config.tokens ?? {},\n setMode: (m) => patch({ mode: m }),\n toggleMode: () =>\n setConfig((c) => ({\n ...c,\n mode: (c.mode === \"dark\" ? \"light\" : \"dark\") as ThemeMode,\n })),\n setAccent: (a) => patch({ accent: a }),\n setDensity: (d) => patch({ density: d }),\n setIntensity: (n) => patch({ intensity: n }),\n setRadius: (n) => patch({ radius: n }),\n setFont: (f) => patch({ font: f }),\n setTokens: (t) => patch({ tokens: t }),\n update: patch,\n reset: () => setConfig(initialConfig),\n };\n }, [config, resolvedMode, accentKey, accentPalette, initialConfig]);\n\n // onChange callback.\n const onChangeRef = React.useRef(onChange);\n onChangeRef.current = onChange;\n React.useEffect(() => {\n onChangeRef.current?.(value);\n }, [value]);\n\n if (target === \"scope\") {\n const Component = Tag as React.ElementType;\n return (\n <ThemeCtx.Provider value={value}>\n <Component\n ref={scopeRef as React.Ref<never>}\n className={className}\n style={style}\n >\n {children}\n </Component>\n </ThemeCtx.Provider>\n );\n }\n\n return <ThemeCtx.Provider value={value}>{children}</ThemeCtx.Provider>;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Input/Input.tsx"],"names":["React","jsxs","jsx","Icon"],"mappings":"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","file":"chunk-WFFWVQK4.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Input.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"onChange\" | \"prefix\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder?: string;\n leadingIcon?: IconName;\n trailingIcon?: IconName;\n /** Click handler for the leading icon (stops propagation so the input isn't focused). */\n onLeadingIconClick?: (e: React.MouseEvent<SVGSVGElement>) => void;\n /** Click handler for the trailing icon — e.g. password visibility toggle. */\n onTrailingIconClick?: (e: React.MouseEvent<SVGSVGElement>) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n invalid?: boolean;\n disabled?: boolean;\n /** Show a × button inside the input to clear the value when non-empty. */\n allowClear?: boolean;\n /** Max length — forwarded to the native input. */\n maxLength?: number;\n /** Render a \"N / max\" counter beneath the input (or just \"N\" if no maxLength). */\n showCount?: boolean;\n /** Inline content rendered inside the input on the left (after leadingIcon if both present). */\n prefix?: React.ReactNode;\n /** Inline content rendered inside the input on the right (before trailingIcon if both present). */\n suffix?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `Input` — single-line text field with optional leading/trailing icons.\n */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n placeholder,\n leadingIcon,\n trailingIcon,\n onLeadingIconClick,\n onTrailingIconClick,\n size = \"md\",\n invalid,\n disabled,\n allowClear,\n maxLength,\n showCount,\n prefix,\n suffix,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const [inner, setInner] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : inner;\n\n const wrapCls = [\n \"input-wrap\",\n size !== \"md\" && size,\n invalid && \"invalid\",\n disabled && \"disabled\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const handleIconClick = (\n handler: ((e: React.MouseEvent<SVGSVGElement>) => void) | undefined\n ) =>\n handler\n ? (e: React.MouseEvent<SVGSVGElement>) => {\n e.stopPropagation();\n if (!disabled) handler(e);\n }\n : undefined;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (disabled) return;\n if (!isControlled) setInner(\"\");\n const synthetic = {\n ...e,\n target: { ...(e.target as unknown as HTMLInputElement), value: \"\" },\n currentTarget: { ...(e.currentTarget as unknown as HTMLInputElement), value: \"\" },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange?.(\"\", synthetic);\n };\n\n const showClear = !!allowClear && !!currentValue && !disabled;\n const count = currentValue ? currentValue.length : 0;\n\n const inputElement = (\n <div className={wrapCls}>\n {leadingIcon && (\n <Icon\n name={leadingIcon}\n size={14}\n className={`lead${onLeadingIconClick ? \" interactive\" : \"\"}`}\n onClick={handleIconClick(onLeadingIconClick)}\n />\n )}\n {prefix && <span className=\"input-affix prefix\">{prefix}</span>}\n <input\n ref={ref}\n className=\"input\"\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxLength}\n {...rest}\n />\n {suffix && <span className=\"input-affix suffix\">{suffix}</span>}\n {showClear && (\n <span\n className=\"input-clear\"\n role=\"button\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"x\" size={12} />\n </span>\n )}\n {trailingIcon && (\n <Icon\n name={trailingIcon}\n size={14}\n className={`trail${onTrailingIconClick ? \" interactive\" : \"\"}`}\n onClick={handleIconClick(onTrailingIconClick)}\n />\n )}\n </div>\n );\n\n if (!showCount) return inputElement;\n\n return (\n <div className=\"input-shell\">\n {inputElement}\n <div className=\"input-count\">\n {maxLength != null ? `${count} / ${maxLength}` : `${count}`}\n </div>\n </div>\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport interface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n invalid?: boolean;\n /** Show a × button in the top-right corner to clear the value. */\n allowClear?: boolean;\n /** Max length — forwarded to the native textarea. */\n maxLength?: number;\n /** Render a \"N / max\" counter beneath the textarea. */\n showCount?: boolean;\n className?: string;\n}\n\n/**\n * `Textarea` — multi-line text input with the same neumorphic groove as `Input`.\n */\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n invalid,\n allowClear,\n maxLength,\n showCount,\n className = \"\",\n ...rest\n },\n ref\n ) => {\n const [inner, setInner] = React.useState(defaultValue ?? \"\");\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : inner;\n const disabled = rest.disabled;\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const handleClear = (e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (disabled) return;\n if (!isControlled) setInner(\"\");\n const synthetic = {\n ...e,\n target: { ...(e.target as unknown as HTMLTextAreaElement), value: \"\" },\n currentTarget: { ...(e.currentTarget as unknown as HTMLTextAreaElement), value: \"\" },\n } as unknown as React.ChangeEvent<HTMLTextAreaElement>;\n onChange?.(\"\", synthetic);\n };\n\n const cls = [\"textarea\", invalid && \"invalid\", className].filter(Boolean).join(\" \");\n const showClear = !!allowClear && !!currentValue && !disabled;\n const count = currentValue ? currentValue.length : 0;\n\n const field = (\n <div className=\"textarea-wrap\">\n <textarea\n ref={ref}\n className={cls}\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n onChange={handleChange}\n maxLength={maxLength}\n {...rest}\n />\n {showClear && (\n <span\n className=\"textarea-clear\"\n role=\"button\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n >\n <Icon name=\"x\" size={12} />\n </span>\n )}\n </div>\n );\n\n if (!showCount) return field;\n\n return (\n <div className=\"input-shell\">\n {field}\n <div className=\"input-count\">\n {maxLength != null ? `${count} / ${maxLength}` : `${count}`}\n </div>\n </div>\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n"]}