@fangxinyan/lumina 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/dist/{Accordion-3TQPKNN3.css → Accordion-REMDCQUD.css} +0 -1
  2. package/dist/Accordion.cjs +3 -3
  3. package/dist/Accordion.js +2 -2
  4. package/dist/Alert.cjs +3 -3
  5. package/dist/Alert.js +2 -2
  6. package/dist/AppShell.cjs +5 -5
  7. package/dist/AppShell.js +1 -1
  8. package/dist/AutoComplete-P5KZMZO5.css +54 -0
  9. package/dist/AutoComplete.cjs +15 -0
  10. package/dist/AutoComplete.cjs.map +1 -0
  11. package/dist/AutoComplete.d.cts +51 -0
  12. package/dist/AutoComplete.d.ts +51 -0
  13. package/dist/AutoComplete.js +6 -0
  14. package/dist/AutoComplete.js.map +1 -0
  15. package/dist/Avatar.cjs +2 -2
  16. package/dist/Avatar.js +1 -1
  17. package/dist/Button.cjs +4 -4
  18. package/dist/Button.js +2 -2
  19. package/dist/Calendar.cjs +3 -3
  20. package/dist/Calendar.js +2 -2
  21. package/dist/Card.cjs +3 -3
  22. package/dist/Card.js +1 -1
  23. package/dist/{Cascader-DTRTTXC2.css → Cascader-VSYEKQCG.css} +1 -1
  24. package/dist/Cascader.cjs +3 -3
  25. package/dist/Cascader.js +2 -2
  26. package/dist/Checkbox.cjs +4 -4
  27. package/dist/Checkbox.js +2 -2
  28. package/dist/{ColorPicker-GP7AQYUU.css → ColorPicker-SDDQGHCM.css} +1 -1
  29. package/dist/ColorPicker.cjs +2 -2
  30. package/dist/ColorPicker.js +1 -1
  31. package/dist/CommandPalette-T45DBMPY.css +139 -0
  32. package/dist/CommandPalette.cjs +14 -0
  33. package/dist/CommandPalette.cjs.map +1 -0
  34. package/dist/CommandPalette.d.cts +65 -0
  35. package/dist/CommandPalette.d.ts +65 -0
  36. package/dist/CommandPalette.js +5 -0
  37. package/dist/CommandPalette.js.map +1 -0
  38. package/dist/ContextMenu-FKW6CQW4.css +76 -0
  39. package/dist/ContextMenu.cjs +12 -0
  40. package/dist/ContextMenu.cjs.map +1 -0
  41. package/dist/ContextMenu.d.cts +50 -0
  42. package/dist/ContextMenu.d.ts +50 -0
  43. package/dist/ContextMenu.js +3 -0
  44. package/dist/ContextMenu.js.map +1 -0
  45. package/dist/Divider.cjs +2 -2
  46. package/dist/Divider.js +1 -1
  47. package/dist/Drawer.cjs +3 -3
  48. package/dist/Drawer.js +2 -2
  49. package/dist/Empty.cjs +4 -4
  50. package/dist/Empty.js +1 -1
  51. package/dist/Form-5GRVZNDO.css +67 -0
  52. package/dist/Form.cjs +20 -0
  53. package/dist/Form.cjs.map +1 -0
  54. package/dist/Form.d.cts +85 -0
  55. package/dist/Form.d.ts +85 -0
  56. package/dist/Form.js +3 -0
  57. package/dist/Form.js.map +1 -0
  58. package/dist/Icon.cjs +3 -3
  59. package/dist/Icon.d.cts +1 -1
  60. package/dist/Icon.d.ts +1 -1
  61. package/dist/Icon.js +1 -1
  62. package/dist/{Image-WYWORJT4.css → Image-4MN34O6P.css} +1 -1
  63. package/dist/Image.cjs +4 -4
  64. package/dist/Image.js +2 -2
  65. package/dist/Input.cjs +4 -4
  66. package/dist/Input.js +2 -2
  67. package/dist/InputNumber-VXQIWLQC.css +40 -0
  68. package/dist/InputNumber.cjs +14 -0
  69. package/dist/InputNumber.cjs.map +1 -0
  70. package/dist/InputNumber.d.cts +46 -0
  71. package/dist/InputNumber.d.ts +46 -0
  72. package/dist/InputNumber.js +5 -0
  73. package/dist/InputNumber.js.map +1 -0
  74. package/dist/List.cjs +2 -2
  75. package/dist/List.js +1 -1
  76. package/dist/{Modal-N4YVLEWW.css → Modal-XSDMU4XJ.css} +1 -1
  77. package/dist/Modal.cjs +4 -4
  78. package/dist/Modal.js +3 -3
  79. package/dist/Pagination.cjs +5 -5
  80. package/dist/Pagination.js +4 -4
  81. package/dist/{Popover-MGCMOXYP.css → Popover-NYEKT5CQ.css} +1 -1
  82. package/dist/Popover.cjs +2 -2
  83. package/dist/Popover.js +1 -1
  84. package/dist/Progress.cjs +3 -3
  85. package/dist/Progress.js +1 -1
  86. package/dist/{Select-EDG37C37.css → Select-J3CCVFJ7.css} +1 -1
  87. package/dist/Select.cjs +4 -4
  88. package/dist/Select.js +3 -3
  89. package/dist/Slider.cjs +2 -2
  90. package/dist/Slider.js +1 -1
  91. package/dist/Splitter-DHNOY4NC.css +66 -0
  92. package/dist/Splitter.cjs +12 -0
  93. package/dist/Splitter.cjs.map +1 -0
  94. package/dist/Splitter.d.cts +44 -0
  95. package/dist/Splitter.d.ts +44 -0
  96. package/dist/Splitter.js +3 -0
  97. package/dist/Splitter.js.map +1 -0
  98. package/dist/StatusBar-CDS2GPSI.css +58 -0
  99. package/dist/StatusBar.cjs +16 -0
  100. package/dist/StatusBar.cjs.map +1 -0
  101. package/dist/StatusBar.d.cts +39 -0
  102. package/dist/StatusBar.d.ts +39 -0
  103. package/dist/StatusBar.js +3 -0
  104. package/dist/StatusBar.js.map +1 -0
  105. package/dist/Switch.cjs +2 -2
  106. package/dist/Switch.js +1 -1
  107. package/dist/{Table-YKVM42SW.css → Table-2LPTOUIR.css} +1 -1
  108. package/dist/Table.cjs +8 -8
  109. package/dist/Table.js +6 -6
  110. package/dist/Tabs.cjs +3 -3
  111. package/dist/Tabs.js +1 -1
  112. package/dist/Tag.cjs +4 -4
  113. package/dist/Tag.js +2 -2
  114. package/dist/Theme.cjs +10 -10
  115. package/dist/Theme.js +1 -1
  116. package/dist/{Toast-ERHDN3WG.css → Toast-6PVSAXQ5.css} +1 -1
  117. package/dist/Toast.cjs +4 -4
  118. package/dist/Toast.js +2 -2
  119. package/dist/Tooltip.cjs +2 -2
  120. package/dist/Tooltip.js +1 -1
  121. package/dist/Typography.cjs +7 -7
  122. package/dist/Typography.js +2 -2
  123. package/dist/{chunk-IKI5CS4L.cjs → chunk-2ENTRT7R.cjs} +7 -7
  124. package/dist/{chunk-IKI5CS4L.cjs.map → chunk-2ENTRT7R.cjs.map} +1 -1
  125. package/dist/{chunk-FI7QO3I5.cjs → chunk-33TIL25B.cjs} +3 -3
  126. package/dist/{chunk-FI7QO3I5.cjs.map → chunk-33TIL25B.cjs.map} +1 -1
  127. package/dist/{chunk-5WF6M47X.cjs → chunk-3BZ47QNV.cjs} +8 -8
  128. package/dist/{chunk-5WF6M47X.cjs.map → chunk-3BZ47QNV.cjs.map} +1 -1
  129. package/dist/{chunk-NE4YEBFH.js → chunk-3UU2PUK4.js} +4 -4
  130. package/dist/{chunk-NE4YEBFH.js.map → chunk-3UU2PUK4.js.map} +1 -1
  131. package/dist/chunk-47Z4NIU4.js +118 -0
  132. package/dist/chunk-47Z4NIU4.js.map +1 -0
  133. package/dist/{chunk-4U4OY5RA.js → chunk-4SCDDSXY.js} +3 -3
  134. package/dist/{chunk-4U4OY5RA.js.map → chunk-4SCDDSXY.js.map} +1 -1
  135. package/dist/{chunk-NXOAYNG2.cjs → chunk-5BFETKVP.cjs} +3 -3
  136. package/dist/{chunk-NXOAYNG2.cjs.map → chunk-5BFETKVP.cjs.map} +1 -1
  137. package/dist/{chunk-VICGQC6G.cjs → chunk-5EAVXFFD.cjs} +3 -3
  138. package/dist/{chunk-VICGQC6G.cjs.map → chunk-5EAVXFFD.cjs.map} +1 -1
  139. package/dist/{chunk-OYGFMXAA.js → chunk-5N7347MI.js} +3 -3
  140. package/dist/{chunk-OYGFMXAA.js.map → chunk-5N7347MI.js.map} +1 -1
  141. package/dist/{chunk-VJN637MT.js → chunk-5PREWYTB.js} +3 -3
  142. package/dist/{chunk-VJN637MT.js.map → chunk-5PREWYTB.js.map} +1 -1
  143. package/dist/{chunk-BBPNQ44M.js → chunk-6GNFRP2H.js} +3 -3
  144. package/dist/{chunk-BBPNQ44M.js.map → chunk-6GNFRP2H.js.map} +1 -1
  145. package/dist/{chunk-ZVCMXDTP.js → chunk-6XZ362VL.js} +6 -6
  146. package/dist/{chunk-ZVCMXDTP.js.map → chunk-6XZ362VL.js.map} +1 -1
  147. package/dist/chunk-6Z24VO3K.js +184 -0
  148. package/dist/chunk-6Z24VO3K.js.map +1 -0
  149. package/dist/{chunk-K7PVJLW4.cjs → chunk-77TZHI76.cjs} +8 -8
  150. package/dist/{chunk-K7PVJLW4.cjs.map → chunk-77TZHI76.cjs.map} +1 -1
  151. package/dist/{chunk-QPZZNSRB.js → chunk-7M7NAMR5.js} +5 -5
  152. package/dist/{chunk-QPZZNSRB.js.map → chunk-7M7NAMR5.js.map} +1 -1
  153. package/dist/chunk-7T2SLRNL.cjs +140 -0
  154. package/dist/chunk-7T2SLRNL.cjs.map +1 -0
  155. package/dist/chunk-7YQWG7HR.cjs +45 -0
  156. package/dist/chunk-7YQWG7HR.cjs.map +1 -0
  157. package/dist/{chunk-TYQ5CN2C.js → chunk-AESLEYST.js} +5 -5
  158. package/dist/{chunk-TYQ5CN2C.js.map → chunk-AESLEYST.js.map} +1 -1
  159. package/dist/{chunk-PBBHUUXU.cjs → chunk-B5JH7NRZ.cjs} +3 -3
  160. package/dist/{chunk-PBBHUUXU.cjs.map → chunk-B5JH7NRZ.cjs.map} +1 -1
  161. package/dist/chunk-BCPAY65C.cjs +169 -0
  162. package/dist/chunk-BCPAY65C.cjs.map +1 -0
  163. package/dist/{chunk-E6R63QOL.js → chunk-CTYW42GG.js} +7 -7
  164. package/dist/{chunk-E6R63QOL.js.map → chunk-CTYW42GG.js.map} +1 -1
  165. package/dist/chunk-E62JFAHW.js +147 -0
  166. package/dist/chunk-E62JFAHW.js.map +1 -0
  167. package/dist/{chunk-WNGG25QX.js → chunk-FFZLSY2N.js} +3 -3
  168. package/dist/{chunk-WNGG25QX.js.map → chunk-FFZLSY2N.js.map} +1 -1
  169. package/dist/{chunk-IWVKITPN.js → chunk-FXQGPHK2.js} +4 -4
  170. package/dist/{chunk-IWVKITPN.js.map → chunk-FXQGPHK2.js.map} +1 -1
  171. package/dist/{chunk-Z7P6QGMT.js → chunk-GR5STMOA.js} +3 -3
  172. package/dist/{chunk-Z7P6QGMT.js.map → chunk-GR5STMOA.js.map} +1 -1
  173. package/dist/{chunk-RDLPX7RK.cjs → chunk-HJIKU6MF.cjs} +33 -7
  174. package/dist/chunk-HJIKU6MF.cjs.map +1 -0
  175. package/dist/{chunk-QESLHLTG.cjs → chunk-HXSAH4Y6.cjs} +9 -9
  176. package/dist/{chunk-QESLHLTG.cjs.map → chunk-HXSAH4Y6.cjs.map} +1 -1
  177. package/dist/{chunk-RPD2OIIP.js → chunk-I2HHC6QW.js} +4 -4
  178. package/dist/{chunk-RPD2OIIP.js.map → chunk-I2HHC6QW.js.map} +1 -1
  179. package/dist/{chunk-GZGZR4FT.js → chunk-I7WLFADD.js} +4 -4
  180. package/dist/{chunk-GZGZR4FT.js.map → chunk-I7WLFADD.js.map} +1 -1
  181. package/dist/chunk-IHACXMOI.js +307 -0
  182. package/dist/chunk-IHACXMOI.js.map +1 -0
  183. package/dist/chunk-IJA26LRY.cjs +209 -0
  184. package/dist/chunk-IJA26LRY.cjs.map +1 -0
  185. package/dist/chunk-IOWREUEP.js +170 -0
  186. package/dist/chunk-IOWREUEP.js.map +1 -0
  187. package/dist/{chunk-AXMEZGEG.cjs → chunk-IZDJCEMF.cjs} +3 -3
  188. package/dist/{chunk-AXMEZGEG.cjs.map → chunk-IZDJCEMF.cjs.map} +1 -1
  189. package/dist/{chunk-V34OPWKZ.js → chunk-JSDQVVQB.js} +3 -3
  190. package/dist/{chunk-V34OPWKZ.js.map → chunk-JSDQVVQB.js.map} +1 -1
  191. package/dist/{chunk-77BVQNAQ.js → chunk-JXHMJUVI.js} +4 -4
  192. package/dist/{chunk-77BVQNAQ.js.map → chunk-JXHMJUVI.js.map} +1 -1
  193. package/dist/{chunk-GIVMKGZN.js → chunk-KW7Z4IQC.js} +4 -4
  194. package/dist/{chunk-GIVMKGZN.js.map → chunk-KW7Z4IQC.js.map} +1 -1
  195. package/dist/{chunk-QTGDYQOT.cjs → chunk-LLNEDEST.cjs} +4 -4
  196. package/dist/{chunk-QTGDYQOT.cjs.map → chunk-LLNEDEST.cjs.map} +1 -1
  197. package/dist/{chunk-AJZKESHB.js → chunk-LXNR6TQK.js} +4 -4
  198. package/dist/{chunk-AJZKESHB.js.map → chunk-LXNR6TQK.js.map} +1 -1
  199. package/dist/{chunk-SBMOIE5C.cjs → chunk-MDQNUKCP.cjs} +14 -14
  200. package/dist/{chunk-SBMOIE5C.cjs.map → chunk-MDQNUKCP.cjs.map} +1 -1
  201. package/dist/{chunk-JKLQOB2F.cjs → chunk-MUFMJPRT.cjs} +3 -3
  202. package/dist/{chunk-JKLQOB2F.cjs.map → chunk-MUFMJPRT.cjs.map} +1 -1
  203. package/dist/{chunk-AEJJGUEN.cjs → chunk-N73JGXYZ.cjs} +5 -5
  204. package/dist/{chunk-AEJJGUEN.cjs.map → chunk-N73JGXYZ.cjs.map} +1 -1
  205. package/dist/{chunk-C5TGQ7CV.cjs → chunk-NN7WMXY4.cjs} +5 -5
  206. package/dist/{chunk-C5TGQ7CV.cjs.map → chunk-NN7WMXY4.cjs.map} +1 -1
  207. package/dist/{chunk-7H453VPW.cjs → chunk-NQQWCIE6.cjs} +3 -3
  208. package/dist/{chunk-7H453VPW.cjs.map → chunk-NQQWCIE6.cjs.map} +1 -1
  209. package/dist/{chunk-ZWP4LSS3.js → chunk-NS3C2ZSE.js} +3 -3
  210. package/dist/{chunk-ZWP4LSS3.js.map → chunk-NS3C2ZSE.js.map} +1 -1
  211. package/dist/{chunk-HKAQILD2.cjs → chunk-O2HMH5BI.cjs} +4 -4
  212. package/dist/{chunk-HKAQILD2.cjs.map → chunk-O2HMH5BI.cjs.map} +1 -1
  213. package/dist/{chunk-4MR4GVTD.js → chunk-O7C6S644.js} +32 -6
  214. package/dist/chunk-O7C6S644.js.map +1 -0
  215. package/dist/{chunk-K5MHL732.js → chunk-OM76QWUN.js} +5 -5
  216. package/dist/{chunk-K5MHL732.js.map → chunk-OM76QWUN.js.map} +1 -1
  217. package/dist/chunk-OWNVDXRQ.js +42 -0
  218. package/dist/chunk-OWNVDXRQ.js.map +1 -0
  219. package/dist/{chunk-3UFU63X7.cjs → chunk-OZVPJWXO.cjs} +3 -3
  220. package/dist/{chunk-3UFU63X7.cjs.map → chunk-OZVPJWXO.cjs.map} +1 -1
  221. package/dist/{chunk-M6CGYGEO.js → chunk-PKXXR76Q.js} +4 -4
  222. package/dist/{chunk-M6CGYGEO.js.map → chunk-PKXXR76Q.js.map} +1 -1
  223. package/dist/{chunk-7U6I44RV.cjs → chunk-Q7CDWNM6.cjs} +3 -3
  224. package/dist/{chunk-7U6I44RV.cjs.map → chunk-Q7CDWNM6.cjs.map} +1 -1
  225. package/dist/{chunk-437LB2V4.js → chunk-QJGKI2BD.js} +3 -3
  226. package/dist/{chunk-437LB2V4.js.map → chunk-QJGKI2BD.js.map} +1 -1
  227. package/dist/{chunk-GEYMWUW6.js → chunk-QOGROEVD.js} +23 -5
  228. package/dist/chunk-QOGROEVD.js.map +1 -0
  229. package/dist/chunk-QVFEKGKI.cjs +331 -0
  230. package/dist/chunk-QVFEKGKI.cjs.map +1 -0
  231. package/dist/chunk-RFU5HN4E.js +149 -0
  232. package/dist/chunk-RFU5HN4E.js.map +1 -0
  233. package/dist/{chunk-URF6RBW6.cjs → chunk-RQV7SMIZ.cjs} +6 -6
  234. package/dist/{chunk-URF6RBW6.cjs.map → chunk-RQV7SMIZ.cjs.map} +1 -1
  235. package/dist/{chunk-OPTTHURA.cjs → chunk-RWHWEQQX.cjs} +7 -7
  236. package/dist/{chunk-OPTTHURA.cjs.map → chunk-RWHWEQQX.cjs.map} +1 -1
  237. package/dist/{chunk-CCBHZYE6.cjs → chunk-SMHXSEBD.cjs} +9 -9
  238. package/dist/{chunk-CCBHZYE6.cjs.map → chunk-SMHXSEBD.cjs.map} +1 -1
  239. package/dist/{chunk-EPFYIR63.cjs → chunk-T4PI2ZX7.cjs} +16 -16
  240. package/dist/{chunk-EPFYIR63.cjs.map → chunk-T4PI2ZX7.cjs.map} +1 -1
  241. package/dist/{chunk-YEOARJKR.cjs → chunk-TQLCIXCK.cjs} +3 -3
  242. package/dist/{chunk-YEOARJKR.cjs.map → chunk-TQLCIXCK.cjs.map} +1 -1
  243. package/dist/{chunk-LSLYY5FN.js → chunk-TZLM5GF4.js} +6 -6
  244. package/dist/{chunk-LSLYY5FN.js.map → chunk-TZLM5GF4.js.map} +1 -1
  245. package/dist/{chunk-Z5X5AMLA.cjs → chunk-TZXEZFCI.cjs} +6 -6
  246. package/dist/{chunk-Z5X5AMLA.cjs.map → chunk-TZXEZFCI.cjs.map} +1 -1
  247. package/dist/{chunk-3WAFIUDQ.js → chunk-UQB5OHMO.js} +3 -3
  248. package/dist/{chunk-3WAFIUDQ.js.map → chunk-UQB5OHMO.js.map} +1 -1
  249. package/dist/chunk-VQBZKRIB.cjs +192 -0
  250. package/dist/chunk-VQBZKRIB.cjs.map +1 -0
  251. package/dist/{chunk-I7SSCSFH.js → chunk-W6I67HQQ.js} +3 -3
  252. package/dist/{chunk-I7SSCSFH.js.map → chunk-W6I67HQQ.js.map} +1 -1
  253. package/dist/{chunk-4GT5TOHP.js → chunk-WDBJVKSR.js} +3 -3
  254. package/dist/{chunk-4GT5TOHP.js.map → chunk-WDBJVKSR.js.map} +1 -1
  255. package/dist/{chunk-NSUD5B22.js → chunk-WUOFJPZ4.js} +4 -4
  256. package/dist/{chunk-NSUD5B22.js.map → chunk-WUOFJPZ4.js.map} +1 -1
  257. package/dist/{chunk-TWBJCFEJ.cjs → chunk-WVBFQB26.cjs} +8 -8
  258. package/dist/{chunk-TWBJCFEJ.cjs.map → chunk-WVBFQB26.cjs.map} +1 -1
  259. package/dist/chunk-WZ73TWB2.cjs +174 -0
  260. package/dist/chunk-WZ73TWB2.cjs.map +1 -0
  261. package/dist/{chunk-H6FCIJOP.js → chunk-XCYE4OQV.js} +4 -4
  262. package/dist/{chunk-H6FCIJOP.js.map → chunk-XCYE4OQV.js.map} +1 -1
  263. package/dist/{chunk-F7HW2PYR.cjs → chunk-XUT2Z2L6.cjs} +3 -3
  264. package/dist/{chunk-F7HW2PYR.cjs.map → chunk-XUT2Z2L6.cjs.map} +1 -1
  265. package/dist/{chunk-TZSWDH5T.cjs → chunk-XYVJ3FBQ.cjs} +6 -6
  266. package/dist/{chunk-TZSWDH5T.cjs.map → chunk-XYVJ3FBQ.cjs.map} +1 -1
  267. package/dist/{chunk-YVO7XO4W.cjs → chunk-YCHUHMNP.cjs} +22 -4
  268. package/dist/chunk-YCHUHMNP.cjs.map +1 -0
  269. package/dist/{chunk-LDENBYRC.cjs → chunk-YFBHVTKN.cjs} +8 -8
  270. package/dist/{chunk-LDENBYRC.cjs.map → chunk-YFBHVTKN.cjs.map} +1 -1
  271. package/dist/{chunk-IDM6JJLP.cjs → chunk-YZ2I7CDF.cjs} +3 -3
  272. package/dist/{chunk-IDM6JJLP.cjs.map → chunk-YZ2I7CDF.cjs.map} +1 -1
  273. package/dist/{chunk-OEHCA5IV.js → chunk-ZFJHUOFU.js} +5 -5
  274. package/dist/{chunk-OEHCA5IV.js.map → chunk-ZFJHUOFU.js.map} +1 -1
  275. package/dist/index.cjs +168 -121
  276. package/dist/index.cjs.map +1 -1
  277. package/dist/index.d.cts +8 -1
  278. package/dist/index.d.ts +8 -1
  279. package/dist/index.js +39 -32
  280. package/dist/index.js.map +1 -1
  281. package/dist/styles.css +25 -18
  282. package/dist/{tokens-HWQ7KWPG.css → tokens-BIIUTPKN.css} +17 -9
  283. package/dist/tokens.css +17 -9
  284. package/docs/llms/autocomplete.md +56 -0
  285. package/docs/llms/commandpalette.md +58 -0
  286. package/docs/llms/contextmenu.md +55 -0
  287. package/docs/llms/form.md +121 -0
  288. package/docs/llms/inputnumber.md +57 -0
  289. package/docs/llms/splitter.md +63 -0
  290. package/docs/llms/statusbar.md +53 -0
  291. package/docs/llms.md +8 -1
  292. package/package.json +1 -1
  293. package/dist/chunk-4MR4GVTD.js.map +0 -1
  294. package/dist/chunk-GEYMWUW6.js.map +0 -1
  295. package/dist/chunk-RDLPX7RK.cjs.map +0 -1
  296. package/dist/chunk-YVO7XO4W.cjs.map +0 -1
@@ -1,10 +1,36 @@
1
- import { Icon } from './chunk-GEYMWUW6.js';
2
- import './tokens-HWQ7KWPG.css';
1
+ import { Icon } from './chunk-QOGROEVD.js';
2
+ import './tokens-BIIUTPKN.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Accordion-3TQPKNN3.css';
4
+ import './Accordion-REMDCQUD.css';
5
5
  import * as React from 'react';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
7
 
8
+ var AccordionPanel = ({ open, children }) => {
9
+ const innerRef = React.useRef(null);
10
+ const [h, setH] = React.useState(0);
11
+ const [animated, setAnimated] = React.useState(false);
12
+ React.useLayoutEffect(() => {
13
+ const el = innerRef.current;
14
+ if (!el) return;
15
+ setH(el.scrollHeight);
16
+ const ro = new ResizeObserver(() => setH(el.scrollHeight));
17
+ ro.observe(el);
18
+ return () => ro.disconnect();
19
+ }, []);
20
+ React.useEffect(() => {
21
+ const id = requestAnimationFrame(() => setAnimated(true));
22
+ return () => cancelAnimationFrame(id);
23
+ }, []);
24
+ return /* @__PURE__ */ jsx(
25
+ "div",
26
+ {
27
+ className: "accordion-body",
28
+ style: { maxHeight: open ? h : 0, transition: animated ? void 0 : "none" },
29
+ "aria-hidden": !open,
30
+ children: /* @__PURE__ */ jsx("div", { ref: innerRef, className: "accordion-body-inner", children })
31
+ }
32
+ );
33
+ };
8
34
  var Accordion = ({
9
35
  items,
10
36
  multiple = false,
@@ -60,7 +86,7 @@ var Accordion = ({
60
86
  ]
61
87
  }
62
88
  ),
63
- /* @__PURE__ */ jsx("div", { className: "accordion-body", children: /* @__PURE__ */ jsx("div", { className: "accordion-body-inner", children: it.content }) })
89
+ /* @__PURE__ */ jsx(AccordionPanel, { open, children: it.content })
64
90
  ]
65
91
  },
66
92
  it.key
@@ -69,5 +95,5 @@ var Accordion = ({
69
95
  };
70
96
 
71
97
  export { Accordion };
72
- //# sourceMappingURL=chunk-4MR4GVTD.js.map
73
- //# sourceMappingURL=chunk-4MR4GVTD.js.map
98
+ //# sourceMappingURL=chunk-O7C6S644.js.map
99
+ //# sourceMappingURL=chunk-O7C6S644.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Accordion/Accordion.tsx"],"names":[],"mappings":";;;;;;;AAmCA,IAAM,cAAA,GAAyE,CAAC,EAAE,IAAA,EAAM,UAAS,KAAM;AACrG,EAAA,MAAM,QAAA,GAAiB,aAAuB,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,GAAU,eAAS,CAAC,CAAA;AAClC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU,eAAS,KAAK,CAAA;AAEpD,EAAM,sBAAgB,MAAM;AAC1B,IAAA,MAAM,KAAK,QAAA,CAAS,OAAA;AACpB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,IAAA,CAAK,GAAG,YAAY,CAAA;AACpB,IAAA,MAAM,KAAK,IAAI,cAAA,CAAe,MAAM,IAAA,CAAK,EAAA,CAAG,YAAY,CAAC,CAAA;AACzD,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAM,gBAAU,MAAM;AACpB,IAAA,MAAM,EAAA,GAAK,qBAAA,CAAsB,MAAM,WAAA,CAAY,IAAI,CAAC,CAAA;AACxD,IAAA,OAAO,MAAM,qBAAqB,EAAE,CAAA;AAAA,EACtC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gBAAA;AAAA,MACV,KAAA,EAAO,EAAE,SAAA,EAAW,IAAA,GAAO,IAAI,CAAA,EAAG,UAAA,EAAY,QAAA,GAAW,MAAA,GAAY,MAAA,EAAO;AAAA,MAC5E,eAAa,CAAC,IAAA;AAAA,MAEd,8BAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,SAAA,EAAU,wBAAwB,QAAA,EAAS;AAAA;AAAA,GACjE;AAEJ,CAAA;AAGO,IAAM,YAAsC,CAAC;AAAA,EAClD,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,KAAA;AAAA,EACZ,WAAA,GAAc,QAAA;AAAA,EACd,UAAA;AAAA,EACA,oBAAoB,EAAC;AAAA,EACrB,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAmB,iBAAiB,CAAA;AACpE,EAAA,MAAM,eAAe,UAAA,KAAe,MAAA;AACpC,EAAA,MAAM,IAAA,GAAO,eAAe,UAAA,GAAc,KAAA;AAG1C,EAAA,MAAM,UAAA,GAAa,aAAa,CAAC,QAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,EAAW,YAAA,KAA2B;AACpD,IAAA,IAAI,WAAA,KAAgB,cAAc,YAAA,EAAc;AAChD,IAAA,MAAM,OAAO,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,GACxB,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,MAAM,CAAC,CAAA,GAC1B,aACA,CAAC,CAAC,IACF,CAAC,GAAG,MAAM,CAAC,CAAA;AACf,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,IAAI,CAAA;AAChC,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,SAAI,SAAA,EAAW,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EACnC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,KAAO;AACjB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,GAAG,CAAA;AACjC,IAAA,MAAM,UAAA,GAAa,EAAA,CAAG,QAAA,IAAY,WAAA,KAAgB,UAAA;AAClD,IAAA,MAAM,eAAA,GAAkB,WAAA,KAAgB,QAAA,IAAY,CAAC,UAAA;AACrD,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAW,CAAA,eAAA,EAAkB,IAAA,GAAO,MAAA,GAAS,EAAE,CAAA,CAAA,EAAI,UAAA,GAAa,UAAA,GAAa,EAAE,CAAA,CAAA,EAAI,WAAA,KAAgB,MAAA,GAAS,cAAc,EAAE,CAAA,CAAA;AAAA,QAE5H,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,gBAAA;AAAA,cACV,QAAA,EAAU,UAAA;AAAA,cACV,SAAS,MAAM,eAAA,IAAmB,OAAO,EAAA,CAAG,GAAA,EAAK,GAAG,QAAQ,CAAA;AAAA,cAC5D,eAAA,EAAe,IAAA;AAAA,cAEf,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,MAAA,EAAA,EAAM,aAAG,KAAA,EAAM,CAAA;AAAA,gCAChB,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,CAAA,cAAA,EAAiB,WAAA,KAAgB,MAAA,GAAS,eAAe,EAAE,CAAA,CAAA;AAAA,oBACtE,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,sBAAA,IAAI,WAAA,KAAgB,MAAA,IAAU,CAAC,UAAA,EAAY;AACzC,wBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,wBAAA,MAAA,CAAO,EAAA,CAAG,GAAA,EAAK,EAAA,CAAG,QAAQ,CAAA;AAAA,sBAC5B;AAAA,oBACF,CAAA;AAAA,oBAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,UAAA,EAAW,MAAM,EAAA,EAAI;AAAA;AAAA;AAClC;AAAA;AAAA,WACF;AAAA,0BACA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAa,QAAA,EAAA,EAAA,CAAG,OAAA,EAAQ;AAAA;AAAA,OAAA;AAAA,MAvBnC,EAAA,CAAG;AAAA,KAwBV;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ","file":"chunk-O7C6S644.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Accordion.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface AccordionItem {\n key: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n /** If true, multiple sections can be open at once. */\n multiple?: boolean;\n /**\n * Accordion mode — at most one item open at a time. Takes precedence over `multiple`\n * when both are set.\n */\n accordion?: boolean;\n /**\n * What triggers expansion.\n * - `\"header\"` (default): clicking anywhere on the header toggles.\n * - `\"icon\"`: only the chevron icon is clickable.\n * - `\"disabled\"`: the panel cannot be toggled.\n */\n collapsible?: \"header\" | \"icon\" | \"disabled\";\n activeKeys?: string[];\n defaultActiveKeys?: string[];\n onChange?: (keys: string[]) => void;\n className?: string;\n}\n\nconst AccordionPanel: React.FC<{ open: boolean; children: React.ReactNode }> = ({ open, children }) => {\n const innerRef = React.useRef<HTMLDivElement>(null);\n const [h, setH] = React.useState(0);\n const [animated, setAnimated] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n setH(el.scrollHeight);\n const ro = new ResizeObserver(() => setH(el.scrollHeight));\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n React.useEffect(() => {\n const id = requestAnimationFrame(() => setAnimated(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n return (\n <div\n className=\"accordion-body\"\n style={{ maxHeight: open ? h : 0, transition: animated ? undefined : \"none\" }}\n aria-hidden={!open}\n >\n <div ref={innerRef} className=\"accordion-body-inner\">{children}</div>\n </div>\n );\n};\n\n/** `Accordion` — collapsible sections. */\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n multiple = false,\n accordion = false,\n collapsible = \"header\",\n activeKeys,\n defaultActiveKeys = [],\n onChange,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState<string[]>(defaultActiveKeys);\n const isControlled = activeKeys !== undefined;\n const keys = isControlled ? activeKeys! : inner;\n\n // accordion takes precedence over multiple\n const singleOpen = accordion || !multiple;\n\n const toggle = (k: string, itemDisabled?: boolean) => {\n if (collapsible === \"disabled\" || itemDisabled) return;\n const next = keys.includes(k)\n ? keys.filter((x) => x !== k)\n : singleOpen\n ? [k]\n : [...keys, k];\n if (!isControlled) setInner(next);\n onChange?.(next);\n };\n\n return (\n <div className={`accordion ${className}`}>\n {items.map((it) => {\n const open = keys.includes(it.key);\n const isDisabled = it.disabled || collapsible === \"disabled\";\n const headerClickable = collapsible === \"header\" && !isDisabled;\n return (\n <div\n key={it.key}\n className={`accordion-item ${open ? \"open\" : \"\"} ${isDisabled ? \"disabled\" : \"\"} ${collapsible === \"icon\" ? \"icon-only\" : \"\"}`}\n >\n <button\n type=\"button\"\n className=\"accordion-head\"\n disabled={isDisabled}\n onClick={() => headerClickable && toggle(it.key, it.disabled)}\n aria-expanded={open}\n >\n <span>{it.title}</span>\n <span\n className={`accordion-chev${collapsible === \"icon\" ? \" clickable\" : \"\"}`}\n onClick={(e) => {\n if (collapsible === \"icon\" && !isDisabled) {\n e.stopPropagation();\n toggle(it.key, it.disabled);\n }\n }}\n >\n <Icon name=\"chevDown\" size={16} />\n </span>\n </button>\n <AccordionPanel open={open}>{it.content}</AccordionPanel>\n </div>\n );\n })}\n </div>\n );\n};\n"]}
@@ -1,7 +1,7 @@
1
- import { Icon } from './chunk-GEYMWUW6.js';
2
- import './tokens-HWQ7KWPG.css';
1
+ import { Icon } from './chunk-QOGROEVD.js';
2
+ import './tokens-BIIUTPKN.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Image-WYWORJT4.css';
4
+ import './Image-4MN34O6P.css';
5
5
  import * as React from 'react';
6
6
  import ReactDOM from 'react-dom';
7
7
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -77,5 +77,5 @@ var ImageGrid = ({
77
77
  );
78
78
 
79
79
  export { Image, ImageGrid };
80
- //# sourceMappingURL=chunk-K5MHL732.js.map
81
- //# sourceMappingURL=chunk-K5MHL732.js.map
80
+ //# sourceMappingURL=chunk-OM76QWUN.js.map
81
+ //# sourceMappingURL=chunk-OM76QWUN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Image/Image.tsx"],"names":[],"mappings":"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","file":"chunk-K5MHL732.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Image.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport interface ImageProps {\n src?: string;\n alt?: string;\n width?: number | string;\n height?: number | string;\n /** Allow click-to-zoom preview overlay. */\n preview?: boolean;\n /** Hover scale-up. */\n hover?: boolean;\n /** Custom placeholder while loading or on error. */\n placeholder?: React.ReactNode;\n className?: string;\n}\n\n/** `Image` — neumorphic framed image with optional preview overlay. */\nexport const Image: React.FC<ImageProps> = ({\n src,\n alt,\n width = 200,\n height = 140,\n preview = true,\n hover = true,\n placeholder,\n className = \"\",\n}) => {\n const [loaded, setLoaded] = React.useState(false);\n const [err, setErr] = React.useState(false);\n const [open, setOpen] = React.useState(false);\n const canPreview = preview && loaded && !err;\n\n return (\n <>\n <div\n className={`n-image ${hover ? \"hover\" : \"\"} ${canPreview ? \"clickable\" : \"\"} ${className}`}\n style={{ width }}\n onClick={() => canPreview && setOpen(true)}\n >\n <div className=\"n-image-frame\" style={{ width: \"100%\", height }}>\n {!err && src && (\n <img src={src} alt={alt} onLoad={() => setLoaded(true)} onError={() => setErr(true)} />\n )}\n <div className={`n-image-placeholder ${loaded && !err ? \"loaded\" : \"\"}`}>\n {placeholder ?? <Icon name=\"image\" size={28} />}\n </div>\n {canPreview && (\n <>\n <div className=\"image-hint\">\n <Icon name=\"eye\" size={14} />\n <span>点击查看</span>\n </div>\n <div className=\"image-actions\" onClick={(e) => e.stopPropagation()}>\n <button\n type=\"button\"\n className=\"ia-btn\"\n onClick={() => setOpen(true)}\n aria-label=\"预览\"\n >\n <Icon name=\"eye\" size={13} />\n </button>\n {src && (\n <a className=\"ia-btn\" href={src} download aria-label=\"下载\">\n <Icon name=\"download\" size={13} />\n </a>\n )}\n </div>\n </>\n )}\n </div>\n </div>\n {open &&\n typeof document !== \"undefined\" &&\n ReactDOM.createPortal(\n <div className=\"image-preview-overlay\" onClick={() => setOpen(false)}>\n <img src={src} alt={alt} onClick={(e) => e.stopPropagation()} />\n </div>,\n document.body\n )}\n </>\n );\n};\n\nexport interface ImageGridProps {\n images: { src: string; alt?: string }[];\n columns?: number;\n itemHeight?: number;\n className?: string;\n}\n\n/** `ImageGrid` — auto-fit grid of `Image` items. */\nexport const ImageGrid: React.FC<ImageGridProps> = ({\n images,\n columns,\n itemHeight = 130,\n className = \"\",\n}) => (\n <div\n className={className}\n style={{\n display: \"grid\",\n gap: 14,\n gridTemplateColumns: columns\n ? `repeat(${columns}, 1fr)`\n : \"repeat(auto-fill, minmax(160px, 1fr))\",\n }}\n >\n {images.map((img, i) => (\n <Image key={i} src={img.src} alt={img.alt} width=\"100%\" height={itemHeight} />\n ))}\n </div>\n);\n"]}
1
+ {"version":3,"sources":["../src/components/Image/Image.tsx"],"names":[],"mappings":"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","file":"chunk-OM76QWUN.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Image.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport interface ImageProps {\n src?: string;\n alt?: string;\n width?: number | string;\n height?: number | string;\n /** Allow click-to-zoom preview overlay. */\n preview?: boolean;\n /** Hover scale-up. */\n hover?: boolean;\n /** Custom placeholder while loading or on error. */\n placeholder?: React.ReactNode;\n className?: string;\n}\n\n/** `Image` — neumorphic framed image with optional preview overlay. */\nexport const Image: React.FC<ImageProps> = ({\n src,\n alt,\n width = 200,\n height = 140,\n preview = true,\n hover = true,\n placeholder,\n className = \"\",\n}) => {\n const [loaded, setLoaded] = React.useState(false);\n const [err, setErr] = React.useState(false);\n const [open, setOpen] = React.useState(false);\n const canPreview = preview && loaded && !err;\n\n return (\n <>\n <div\n className={`n-image ${hover ? \"hover\" : \"\"} ${canPreview ? \"clickable\" : \"\"} ${className}`}\n style={{ width }}\n onClick={() => canPreview && setOpen(true)}\n >\n <div className=\"n-image-frame\" style={{ width: \"100%\", height }}>\n {!err && src && (\n <img src={src} alt={alt} onLoad={() => setLoaded(true)} onError={() => setErr(true)} />\n )}\n <div className={`n-image-placeholder ${loaded && !err ? \"loaded\" : \"\"}`}>\n {placeholder ?? <Icon name=\"image\" size={28} />}\n </div>\n {canPreview && (\n <>\n <div className=\"image-hint\">\n <Icon name=\"eye\" size={14} />\n <span>点击查看</span>\n </div>\n <div className=\"image-actions\" onClick={(e) => e.stopPropagation()}>\n <button\n type=\"button\"\n className=\"ia-btn\"\n onClick={() => setOpen(true)}\n aria-label=\"预览\"\n >\n <Icon name=\"eye\" size={13} />\n </button>\n {src && (\n <a className=\"ia-btn\" href={src} download aria-label=\"下载\">\n <Icon name=\"download\" size={13} />\n </a>\n )}\n </div>\n </>\n )}\n </div>\n </div>\n {open &&\n typeof document !== \"undefined\" &&\n ReactDOM.createPortal(\n <div className=\"image-preview-overlay\" onClick={() => setOpen(false)}>\n <img src={src} alt={alt} onClick={(e) => e.stopPropagation()} />\n </div>,\n document.body\n )}\n </>\n );\n};\n\nexport interface ImageGridProps {\n images: { src: string; alt?: string }[];\n columns?: number;\n itemHeight?: number;\n className?: string;\n}\n\n/** `ImageGrid` — auto-fit grid of `Image` items. */\nexport const ImageGrid: React.FC<ImageGridProps> = ({\n images,\n columns,\n itemHeight = 130,\n className = \"\",\n}) => (\n <div\n className={className}\n style={{\n display: \"grid\",\n gap: 14,\n gridTemplateColumns: columns\n ? `repeat(${columns}, 1fr)`\n : \"repeat(auto-fill, minmax(160px, 1fr))\",\n }}\n >\n {images.map((img, i) => (\n <Image key={i} src={img.src} alt={img.alt} width=\"100%\" height={itemHeight} />\n ))}\n </div>\n);\n"]}
@@ -0,0 +1,42 @@
1
+ import './tokens-BIIUTPKN.css';
2
+ import './shared-NJHRNLRH.css';
3
+ import './StatusBar-CDS2GPSI.css';
4
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
+
6
+ // src/components/StatusBar/StatusBar.tsx
7
+ var StatusBarItem = ({
8
+ icon,
9
+ tone = "default",
10
+ onClick,
11
+ className = "",
12
+ children,
13
+ ...rest
14
+ }) => {
15
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
16
+ icon && /* @__PURE__ */ jsx("span", { className: "statusbar-item-icon", children: icon }),
17
+ children != null && /* @__PURE__ */ jsx("span", { className: "statusbar-item-label", children })
18
+ ] });
19
+ const cls = `statusbar-item tone-${tone} ${onClick ? "clickable" : ""} ${className}`;
20
+ if (onClick) {
21
+ return /* @__PURE__ */ jsx("button", { type: "button", className: cls, onClick, children: content });
22
+ }
23
+ return /* @__PURE__ */ jsx("div", { className: cls, ...rest, children: content });
24
+ };
25
+ var StatusBar = ({
26
+ left,
27
+ center,
28
+ right,
29
+ className = "",
30
+ children,
31
+ ...rest
32
+ }) => /* @__PURE__ */ jsxs("div", { className: `statusbar ${className}`, role: "status", ...rest, children: [
33
+ left != null && /* @__PURE__ */ jsx("div", { className: "statusbar-section left", children: left }),
34
+ center != null && /* @__PURE__ */ jsx("div", { className: "statusbar-section center", children: center }),
35
+ children,
36
+ right != null && /* @__PURE__ */ jsx("div", { className: "statusbar-section right", children: right })
37
+ ] });
38
+ StatusBar.Item = StatusBarItem;
39
+
40
+ export { StatusBar, StatusBarItem };
41
+ //# sourceMappingURL=chunk-OWNVDXRQ.js.map
42
+ //# sourceMappingURL=chunk-OWNVDXRQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/StatusBar/StatusBar.tsx"],"names":[],"mappings":";;;;;;AAgBO,IAAM,gBAA8C,CAAC;AAAA,EAC1D,IAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,0BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,oBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IACpD,YAAY,IAAA,oBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAwB,QAAA,EAAS;AAAA,GAAA,EACxE,CAAA;AAEF,EAAA,MAAM,GAAA,GAAM,uBAAuB,IAAI,CAAA,CAAA,EAAI,UAAU,WAAA,GAAc,EAAE,IAAI,SAAS,CAAA,CAAA;AAClF,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,2BACG,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,GAAA,EAAK,SACnC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,EAEJ;AACA,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAM,GAAG,MACtB,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AAwBO,IAAM,YAAuE,CAAC;AAAA,EACnF,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACE,IAAA,CAAC,SAAI,SAAA,EAAW,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,IAAA,EAAK,QAAA,EAAU,GAAG,IAAA,EACzD,QAAA,EAAA;AAAA,EAAA,IAAA,IAAQ,IAAA,oBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAA0B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,EAC9D,UAAU,IAAA,oBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAA4B,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,EACpE,QAAA;AAAA,EACA,SAAS,IAAA,oBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM;AAAA,CAAA,EACpE;AAGF,SAAA,CAAU,IAAA,GAAO,aAAA","file":"chunk-OWNVDXRQ.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./StatusBar.css\";\nimport * as React from \"react\";\n\nexport interface StatusBarItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Optional leading node (usually an `<Icon />`). */\n icon?: React.ReactNode;\n /** Visual tone — shifts color only. */\n tone?: \"default\" | \"muted\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** Makes the item clickable (also renders as `<button>` when `onClick` is set). */\n onClick?: (e: React.MouseEvent<HTMLDivElement | HTMLButtonElement>) => void;\n children?: React.ReactNode;\n}\n\n/** `StatusBar.Item` — one inline slot. Put icon + text inside. */\nexport const StatusBarItem: React.FC<StatusBarItemProps> = ({\n icon,\n tone = \"default\",\n onClick,\n className = \"\",\n children,\n ...rest\n}) => {\n const content = (\n <>\n {icon && <span className=\"statusbar-item-icon\">{icon}</span>}\n {children != null && <span className=\"statusbar-item-label\">{children}</span>}\n </>\n );\n const cls = `statusbar-item tone-${tone} ${onClick ? \"clickable\" : \"\"} ${className}`;\n if (onClick) {\n return (\n <button type=\"button\" className={cls} onClick={onClick as React.MouseEventHandler<HTMLButtonElement>}>\n {content}\n </button>\n );\n }\n return (\n <div className={cls} {...rest}>\n {content}\n </div>\n );\n};\n\nexport interface StatusBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Left-aligned slot. */\n left?: React.ReactNode;\n /** Center slot — absolutely positioned, stays centered regardless of side widths. */\n center?: React.ReactNode;\n /** Right-aligned slot. */\n right?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * `StatusBar` — thin bottom bar for app state (branch, line/col, sync, etc.).\n * Pair with `TitleBar` to bracket the window chrome.\n *\n * @example\n * ```tsx\n * <StatusBar\n * left={<StatusBar.Item icon={<Icon name=\"check\" size={12} />} tone=\"success\">Ready</StatusBar.Item>}\n * right={<StatusBar.Item tone=\"muted\">UTF-8</StatusBar.Item>}\n * />\n * ```\n */\nexport const StatusBar: React.FC<StatusBarProps> & { Item: typeof StatusBarItem } = ({\n left,\n center,\n right,\n className = \"\",\n children,\n ...rest\n}) => (\n <div className={`statusbar ${className}`} role=\"status\" {...rest}>\n {left != null && <div className=\"statusbar-section left\">{left}</div>}\n {center != null && <div className=\"statusbar-section center\">{center}</div>}\n {children}\n {right != null && <div className=\"statusbar-section right\">{right}</div>}\n </div>\n);\n\nStatusBar.Item = StatusBarItem;\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkRZ2E3XEU_cjs = require('./chunk-RZ2E3XEU.cjs');
4
- require('./tokens-HWQ7KWPG.css');
4
+ require('./tokens-BIIUTPKN.css');
5
5
  require('./shared-NJHRNLRH.css');
6
6
  require('./Tooltip-ST24GY4S.css');
7
7
  var React = require('react');
@@ -74,5 +74,5 @@ var Tooltip = ({
74
74
  };
75
75
 
76
76
  exports.Tooltip = Tooltip;
77
- //# sourceMappingURL=chunk-3UFU63X7.cjs.map
78
- //# sourceMappingURL=chunk-3UFU63X7.cjs.map
77
+ //# sourceMappingURL=chunk-OZVPJWXO.cjs.map
78
+ //# sourceMappingURL=chunk-OZVPJWXO.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Tooltip/Tooltip.tsx"],"names":["React","useFloating","jsxs","Fragment","jsx","createPortal"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,UAAkC,CAAC;AAAA,EAC9C,OAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,0BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,IAAUA,gBAAA,CAAA,MAAA,EAA2B;AAE3C,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,CAAA,CAAE,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,KAAK,CAAA;AAAA,EAC1D,CAAA;AACA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,SAAA,EAAW,QAAA,KAAaC,6BAAA,CAA6B;AAAA,IACtF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA;AAAA,IACA,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,EAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAU,YAAA;AAAA,QACV,YAAA,EAAc,IAAA;AAAA,QACd,YAAA,EAAc,KAAA;AAAA,QACd,OAAA,EAAS,IAAA;AAAA,QACT,MAAA,EAAQ,KAAA;AAAA,QAEP;AAAA;AAAA,KACH;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3BC,qBAAA;AAAA,sBACED,cAAA,CAAC,UAAK,SAAA,EAAW,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,eACxC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ","file":"chunk-3UFU63X7.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tooltip.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n children: React.ReactElement;\n delay?: number;\n disabled?: boolean;\n}\n\n/** `Tooltip` — hover/focus text bubble. */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n placement = \"top\",\n children,\n delay = 250,\n disabled,\n}) => {\n const [show, setShow] = React.useState(false);\n const t = React.useRef<number | undefined>();\n\n const open = () => {\n if (disabled) return;\n window.clearTimeout(t.current);\n t.current = window.setTimeout(() => setShow(true), delay);\n };\n const close = () => {\n window.clearTimeout(t.current);\n setShow(false);\n };\n\n const { triggerRef, floatingStyle, placement: resolved } = useFloating<HTMLSpanElement>({\n open: show,\n placement,\n panelWidth: 160,\n panelHeight: 32,\n alignCross: \"center\",\n });\n\n return (\n <>\n <span\n ref={triggerRef}\n className=\"tip-anchor\"\n onMouseEnter={open}\n onMouseLeave={close}\n onFocus={open}\n onBlur={close}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <span className={`tip ${resolved}`} style={floatingStyle}>\n {content}\n </span>,\n document.body\n )}\n </>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Tooltip/Tooltip.tsx"],"names":["React","useFloating","jsxs","Fragment","jsx","createPortal"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,UAAkC,CAAC;AAAA,EAC9C,OAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,0BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,IAAUA,gBAAA,CAAA,MAAA,EAA2B;AAE3C,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,CAAA,CAAE,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,KAAK,CAAA;AAAA,EAC1D,CAAA;AACA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAA,CAAO,YAAA,CAAa,EAAE,OAAO,CAAA;AAC7B,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,SAAA,EAAW,QAAA,KAAaC,6BAAA,CAA6B;AAAA,IACtF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA;AAAA,IACA,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,EAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAU,YAAA;AAAA,QACV,YAAA,EAAc,IAAA;AAAA,QACd,YAAA,EAAc,KAAA;AAAA,QACd,OAAA,EAAS,IAAA;AAAA,QACT,MAAA,EAAQ,KAAA;AAAA,QAEP;AAAA;AAAA,KACH;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3BC,qBAAA;AAAA,sBACED,cAAA,CAAC,UAAK,SAAA,EAAW,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,eACxC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ","file":"chunk-OZVPJWXO.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Tooltip.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n children: React.ReactElement;\n delay?: number;\n disabled?: boolean;\n}\n\n/** `Tooltip` — hover/focus text bubble. */\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n placement = \"top\",\n children,\n delay = 250,\n disabled,\n}) => {\n const [show, setShow] = React.useState(false);\n const t = React.useRef<number | undefined>();\n\n const open = () => {\n if (disabled) return;\n window.clearTimeout(t.current);\n t.current = window.setTimeout(() => setShow(true), delay);\n };\n const close = () => {\n window.clearTimeout(t.current);\n setShow(false);\n };\n\n const { triggerRef, floatingStyle, placement: resolved } = useFloating<HTMLSpanElement>({\n open: show,\n placement,\n panelWidth: 160,\n panelHeight: 32,\n alignCross: \"center\",\n });\n\n return (\n <>\n <span\n ref={triggerRef}\n className=\"tip-anchor\"\n onMouseEnter={open}\n onMouseLeave={close}\n onFocus={open}\n onBlur={close}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <span className={`tip ${resolved}`} style={floatingStyle}>\n {content}\n </span>,\n document.body\n )}\n </>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { Icon } from './chunk-GEYMWUW6.js';
2
- import './tokens-HWQ7KWPG.css';
1
+ import { Icon } from './chunk-QOGROEVD.js';
2
+ import './tokens-BIIUTPKN.css';
3
3
  import './shared-NJHRNLRH.css';
4
4
  import './Checkbox-SKJATVSN.css';
5
5
  import * as React from 'react';
@@ -87,5 +87,5 @@ function RadioGroup({
87
87
  }
88
88
 
89
89
  export { Checkbox, RadioGroup };
90
- //# sourceMappingURL=chunk-M6CGYGEO.js.map
91
- //# sourceMappingURL=chunk-M6CGYGEO.js.map
90
+ //# sourceMappingURL=chunk-PKXXR76Q.js.map
91
+ //# sourceMappingURL=chunk-PKXXR76Q.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"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","file":"chunk-M6CGYGEO.js","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 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.FC<CheckboxProps> = ({\n checked,\n defaultChecked,\n indeterminate,\n onChange,\n disabled,\n label,\n className = \"\",\n id,\n}) => {\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 className={cls}>\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};\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 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\n/** `RadioGroup` — mutually exclusive options. */\nexport function RadioGroup<T extends string | number = string>({\n options,\n value,\n defaultValue,\n onChange,\n direction = \"vertical\",\n className = \"\",\n}: RadioGroupProps<T>) {\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 className={`radio-group ${direction} ${className}`}>\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"]}
1
+ {"version":3,"sources":["../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"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","file":"chunk-PKXXR76Q.js","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 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.FC<CheckboxProps> = ({\n checked,\n defaultChecked,\n indeterminate,\n onChange,\n disabled,\n label,\n className = \"\",\n id,\n}) => {\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 className={cls}>\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};\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 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\n/** `RadioGroup` — mutually exclusive options. */\nexport function RadioGroup<T extends string | number = string>({\n options,\n value,\n defaultValue,\n onChange,\n direction = \"vertical\",\n className = \"\",\n}: RadioGroupProps<T>) {\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 className={`radio-group ${direction} ${className}`}>\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"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- require('./tokens-HWQ7KWPG.css');
3
+ require('./tokens-BIIUTPKN.css');
4
4
  var React = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
@@ -279,5 +279,5 @@ exports.normalizeAccentInput = normalizeAccentInput;
279
279
  exports.resolveThemeMode = resolveThemeMode;
280
280
  exports.useTheme = useTheme;
281
281
  exports.useThemeOptional = useThemeOptional;
282
- //# sourceMappingURL=chunk-7U6I44RV.cjs.map
283
- //# sourceMappingURL=chunk-7U6I44RV.cjs.map
282
+ //# sourceMappingURL=chunk-Q7CDWNM6.cjs.map
283
+ //# sourceMappingURL=chunk-Q7CDWNM6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Theme/Theme.tsx"],"names":["React","jsx"],"mappings":"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","file":"chunk-7U6I44RV.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
+ {"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,4 +1,4 @@
1
- import './tokens-HWQ7KWPG.css';
1
+ import './tokens-BIIUTPKN.css';
2
2
  import './shared-NJHRNLRH.css';
3
3
  import './Slider-X4PVA65R.css';
4
4
  import * as React from 'react';
@@ -107,5 +107,5 @@ var Slider = (props) => {
107
107
  };
108
108
 
109
109
  export { Slider };
110
- //# sourceMappingURL=chunk-437LB2V4.js.map
111
- //# sourceMappingURL=chunk-437LB2V4.js.map
110
+ //# sourceMappingURL=chunk-QJGKI2BD.js.map
111
+ //# sourceMappingURL=chunk-QJGKI2BD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Slider/Slider.tsx"],"names":[],"mappings":"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","file":"chunk-437LB2V4.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Slider.css\";\nimport * as React from \"react\";\n\nexport type SliderSingleValue = number;\nexport type SliderRangeValue = [number, number];\nexport type SliderValue = SliderSingleValue | SliderRangeValue;\n\ninterface SliderBaseProps {\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n showValue?: boolean;\n tone?: \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** Tick marks with labels. Clicking a mark snaps to it. */\n marks?: Record<number, React.ReactNode>;\n className?: string;\n}\n\nexport interface SliderSingleProps extends SliderBaseProps {\n range?: false;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n}\n\nexport interface SliderRangeProps extends SliderBaseProps {\n range: true;\n value?: SliderRangeValue;\n defaultValue?: SliderRangeValue;\n onChange?: (value: SliderRangeValue) => void;\n}\n\nexport type SliderProps = SliderSingleProps | SliderRangeProps;\n\nconst asArray = (v: SliderValue | undefined, fallback: number): number[] => {\n if (v === undefined) return [fallback];\n return Array.isArray(v) ? [...v] : [v];\n};\n\n/** `Slider` — neumorphic range input with grooved track. */\nexport const Slider: React.FC<SliderProps> = (props) => {\n const {\n min = 0,\n max = 100,\n step = 1,\n disabled,\n showValue,\n tone = \"accent\",\n marks,\n className = \"\",\n } = props;\n\n const range = (props as SliderRangeProps).range === true;\n const value = (props as { value?: SliderValue }).value;\n const defaultValue = (props as { defaultValue?: SliderValue }).defaultValue;\n const onChange = (props as { onChange?: (v: SliderValue) => void }).onChange;\n\n const initial = React.useMemo<number[]>(() => {\n if (defaultValue !== undefined) return asArray(defaultValue, 0);\n return range ? [min, max] : [0];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [inner, setInner] = React.useState<number[]>(initial);\n const isControlled = value !== undefined;\n const nums = isControlled ? asArray(value, range ? min : 0) : inner;\n\n const pctOf = (n: number) => ((n - min) / (max - min)) * 100;\n\n const emit = (arr: number[]) => {\n if (range) {\n onChange?.([arr[0], arr[1]] as SliderRangeValue);\n } else {\n onChange?.(arr[0]);\n }\n };\n\n const updateAt = (index: number, next: number) => {\n const clamped = Math.max(min, Math.min(max, next));\n const out = [...nums];\n out[index] = clamped;\n if (range && out.length === 2 && out[0] > out[1]) {\n out.sort((a, b) => a - b);\n }\n if (!isControlled) setInner(out);\n emit(out);\n };\n\n const handleMarkClick = (mark: number) => {\n if (disabled) return;\n if (!range) {\n updateAt(0, mark);\n return;\n }\n const [a, b] = nums;\n const closerIndex = Math.abs(a - mark) <= Math.abs(b - mark) ? 0 : 1;\n updateAt(closerIndex, mark);\n };\n\n const fillLeft = range ? pctOf(Math.min(nums[0], nums[1])) : 0;\n const fillRight = range\n ? 100 - pctOf(Math.max(nums[0], nums[1]))\n : 100 - pctOf(nums[0]);\n\n return (\n <div className={`slider ${tone} ${disabled ? \"disabled\" : \"\"} ${marks ? \"has-marks\" : \"\"} ${className}`}>\n <div className=\"slider-track\">\n <div\n className=\"slider-fill\"\n style={{ left: `${fillLeft}%`, right: `${fillRight}%` }}\n />\n </div>\n {nums.map((n, i) => (\n <React.Fragment key={i}>\n <div className=\"slider-thumb\" style={{ left: `${pctOf(n)}%` }} />\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={n}\n disabled={disabled}\n onChange={(e) => updateAt(i, Number(e.target.value))}\n />\n </React.Fragment>\n ))}\n {showValue && (\n <span className=\"slider-value\">\n {range ? `${nums[0]} – ${nums[1]}` : nums[0]}\n </span>\n )}\n {marks && (\n <div className=\"slider-marks\">\n {Object.entries(marks).map(([k, label]) => {\n const n = Number(k);\n const left = pctOf(n);\n const active = range\n ? n >= Math.min(nums[0], nums[1]) && n <= Math.max(nums[0], nums[1])\n : n <= nums[0];\n return (\n <span\n key={k}\n className={`slider-mark ${active ? \"active\" : \"\"}`}\n style={{ left: `${left}%` }}\n onClick={() => handleMarkClick(n)}\n >\n <span className=\"slider-mark-dot\" />\n <span className=\"slider-mark-label\">{label}</span>\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Slider/Slider.tsx"],"names":[],"mappings":"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","file":"chunk-QJGKI2BD.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Slider.css\";\nimport * as React from \"react\";\n\nexport type SliderSingleValue = number;\nexport type SliderRangeValue = [number, number];\nexport type SliderValue = SliderSingleValue | SliderRangeValue;\n\ninterface SliderBaseProps {\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n showValue?: boolean;\n tone?: \"accent\" | \"success\" | \"warning\" | \"danger\";\n /** Tick marks with labels. Clicking a mark snaps to it. */\n marks?: Record<number, React.ReactNode>;\n className?: string;\n}\n\nexport interface SliderSingleProps extends SliderBaseProps {\n range?: false;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n}\n\nexport interface SliderRangeProps extends SliderBaseProps {\n range: true;\n value?: SliderRangeValue;\n defaultValue?: SliderRangeValue;\n onChange?: (value: SliderRangeValue) => void;\n}\n\nexport type SliderProps = SliderSingleProps | SliderRangeProps;\n\nconst asArray = (v: SliderValue | undefined, fallback: number): number[] => {\n if (v === undefined) return [fallback];\n return Array.isArray(v) ? [...v] : [v];\n};\n\n/** `Slider` — neumorphic range input with grooved track. */\nexport const Slider: React.FC<SliderProps> = (props) => {\n const {\n min = 0,\n max = 100,\n step = 1,\n disabled,\n showValue,\n tone = \"accent\",\n marks,\n className = \"\",\n } = props;\n\n const range = (props as SliderRangeProps).range === true;\n const value = (props as { value?: SliderValue }).value;\n const defaultValue = (props as { defaultValue?: SliderValue }).defaultValue;\n const onChange = (props as { onChange?: (v: SliderValue) => void }).onChange;\n\n const initial = React.useMemo<number[]>(() => {\n if (defaultValue !== undefined) return asArray(defaultValue, 0);\n return range ? [min, max] : [0];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [inner, setInner] = React.useState<number[]>(initial);\n const isControlled = value !== undefined;\n const nums = isControlled ? asArray(value, range ? min : 0) : inner;\n\n const pctOf = (n: number) => ((n - min) / (max - min)) * 100;\n\n const emit = (arr: number[]) => {\n if (range) {\n onChange?.([arr[0], arr[1]] as SliderRangeValue);\n } else {\n onChange?.(arr[0]);\n }\n };\n\n const updateAt = (index: number, next: number) => {\n const clamped = Math.max(min, Math.min(max, next));\n const out = [...nums];\n out[index] = clamped;\n if (range && out.length === 2 && out[0] > out[1]) {\n out.sort((a, b) => a - b);\n }\n if (!isControlled) setInner(out);\n emit(out);\n };\n\n const handleMarkClick = (mark: number) => {\n if (disabled) return;\n if (!range) {\n updateAt(0, mark);\n return;\n }\n const [a, b] = nums;\n const closerIndex = Math.abs(a - mark) <= Math.abs(b - mark) ? 0 : 1;\n updateAt(closerIndex, mark);\n };\n\n const fillLeft = range ? pctOf(Math.min(nums[0], nums[1])) : 0;\n const fillRight = range\n ? 100 - pctOf(Math.max(nums[0], nums[1]))\n : 100 - pctOf(nums[0]);\n\n return (\n <div className={`slider ${tone} ${disabled ? \"disabled\" : \"\"} ${marks ? \"has-marks\" : \"\"} ${className}`}>\n <div className=\"slider-track\">\n <div\n className=\"slider-fill\"\n style={{ left: `${fillLeft}%`, right: `${fillRight}%` }}\n />\n </div>\n {nums.map((n, i) => (\n <React.Fragment key={i}>\n <div className=\"slider-thumb\" style={{ left: `${pctOf(n)}%` }} />\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={n}\n disabled={disabled}\n onChange={(e) => updateAt(i, Number(e.target.value))}\n />\n </React.Fragment>\n ))}\n {showValue && (\n <span className=\"slider-value\">\n {range ? `${nums[0]} – ${nums[1]}` : nums[0]}\n </span>\n )}\n {marks && (\n <div className=\"slider-marks\">\n {Object.entries(marks).map(([k, label]) => {\n const n = Number(k);\n const left = pctOf(n);\n const active = range\n ? n >= Math.min(nums[0], nums[1]) && n <= Math.max(nums[0], nums[1])\n : n <= nums[0];\n return (\n <span\n key={k}\n className={`slider-mark ${active ? \"active\" : \"\"}`}\n style={{ left: `${left}%` }}\n onClick={() => handleMarkClick(n)}\n >\n <span className=\"slider-mark-dot\" />\n <span className=\"slider-mark-label\">{label}</span>\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
 
3
3
  // src/components/Icon/Icon.tsx
4
4
  var paths = {
@@ -120,7 +120,25 @@ var paths = {
120
120
  /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "1" }),
121
121
  /* @__PURE__ */ jsx("circle", { cx: "19", cy: "12", r: "1" })
122
122
  ] }),
123
- sliders: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6" }) })
123
+ sliders: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6" }) }),
124
+ aim: /* @__PURE__ */ jsxs(Fragment, { children: [
125
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
126
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "2", x2: "12", y2: "6" }),
127
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "18", x2: "12", y2: "22" }),
128
+ /* @__PURE__ */ jsx("line", { x1: "2", y1: "12", x2: "6", y2: "12" }),
129
+ /* @__PURE__ */ jsx("line", { x1: "18", y1: "12", x2: "22", y2: "12" }),
130
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "2" })
131
+ ] }),
132
+ swap: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("path", { d: "M3 8h18M17 4l4 4-4 4M21 16H3M7 20l-4-4 4-4" }) }),
133
+ camera: /* @__PURE__ */ jsxs(Fragment, { children: [
134
+ /* @__PURE__ */ jsx("path", { d: "M3 7h4l2-3h6l2 3h4a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1z" }),
135
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "13", r: "4" })
136
+ ] }),
137
+ qq: /* @__PURE__ */ jsxs(Fragment, { children: [
138
+ /* @__PURE__ */ jsx("path", { d: "M12 2c-3 0-5 2.1-5 5 0 1.3.4 2.6.9 3.6-1.8 1-3.4 3-3.4 5.9 0 .8.7 1.5 1.5 1.5 0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2 .8 0 1.5-.7 1.5-1.5 0-2.9-1.6-4.9-3.4-5.9.5-1 .9-2.3.9-3.6 0-2.9-2-5-5-5z" }),
139
+ /* @__PURE__ */ jsx("circle", { cx: "10", cy: "9", r: "0.8", fill: "currentColor", stroke: "none" }),
140
+ /* @__PURE__ */ jsx("circle", { cx: "14", cy: "9", r: "0.8", fill: "currentColor", stroke: "none" })
141
+ ] })
124
142
  };
125
143
  var Icon = ({ name, size = 16, stroke = 2, style, ...rest }) => /* @__PURE__ */ jsx(
126
144
  "svg",
@@ -139,8 +157,8 @@ var Icon = ({ name, size = 16, stroke = 2, style, ...rest }) => /* @__PURE__ */
139
157
  children: paths[name]
140
158
  }
141
159
  );
142
- var ICON_NAMES = ["search", "plus", "minus", "check", "x", "chevDown", "chevRight", "chevLeft", "chevUp", "arrowRight", "settings", "user", "bell", "mail", "heart", "star", "home", "folder", "file", "image", "play", "pause", "volume", "trash", "edit", "copy", "download", "upload", "info", "alert", "check2", "eye", "eyeOff", "sparkle", "moon", "sun", "palette", "layers", "grid", "list", "zap", "filter", "mic", "send", "calendar", "clock", "menu", "more", "sliders"];
160
+ var ICON_NAMES = ["search", "plus", "minus", "check", "x", "chevDown", "chevRight", "chevLeft", "chevUp", "arrowRight", "settings", "user", "bell", "mail", "heart", "star", "home", "folder", "file", "image", "play", "pause", "volume", "trash", "edit", "copy", "download", "upload", "info", "alert", "check2", "eye", "eyeOff", "sparkle", "moon", "sun", "palette", "layers", "grid", "list", "zap", "filter", "mic", "send", "calendar", "clock", "menu", "more", "sliders", "aim", "swap", "camera", "qq"];
143
161
 
144
162
  export { ICON_NAMES, Icon };
145
- //# sourceMappingURL=chunk-GEYMWUW6.js.map
146
- //# sourceMappingURL=chunk-GEYMWUW6.js.map
163
+ //# sourceMappingURL=chunk-QOGROEVD.js.map
164
+ //# sourceMappingURL=chunk-QOGROEVD.js.map