@fangxinyan/lumina 0.6.2 → 0.6.4

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 (284) hide show
  1. package/README.md +2 -1
  2. package/dist/{Alert-JJ7GB3UU.css → Alert-HVPI6L4V.css} +9 -2
  3. package/dist/Alert.cjs +3 -3
  4. package/dist/Alert.d.cts +3 -2
  5. package/dist/Alert.d.ts +3 -2
  6. package/dist/Alert.js +2 -2
  7. package/dist/{AppShell-RCALXUCZ.css → AppShell-FZCD4C56.css} +4 -4
  8. package/dist/AppShell.cjs +5 -5
  9. package/dist/AppShell.js +1 -1
  10. package/dist/{AutoComplete-P5KZMZO5.css → AutoComplete-4YZBMW4E.css} +2 -2
  11. package/dist/AutoComplete.cjs +5 -5
  12. package/dist/AutoComplete.js +4 -4
  13. package/dist/{Avatar-R5A4AFKZ.css → Avatar-TNPOHVY5.css} +1 -1
  14. package/dist/Avatar.cjs +2 -2
  15. package/dist/Avatar.js +1 -1
  16. package/dist/Badge.cjs +2 -2
  17. package/dist/Badge.d.cts +1 -0
  18. package/dist/Badge.d.ts +1 -0
  19. package/dist/Badge.js +1 -1
  20. package/dist/Button-TUMZUQLI.css +118 -0
  21. package/dist/Button.cjs +3 -3
  22. package/dist/Button.d.cts +6 -5
  23. package/dist/Button.d.ts +6 -5
  24. package/dist/Button.js +2 -2
  25. package/dist/{Calendar-LHZELUDL.css → Calendar-RUTPKREW.css} +4 -4
  26. package/dist/Calendar.cjs +3 -3
  27. package/dist/Calendar.js +2 -2
  28. package/dist/{Card-6RMVIHWX.css → Card-MA6SV7D5.css} +6 -6
  29. package/dist/Card.cjs +2 -2
  30. package/dist/Card.js +1 -1
  31. package/dist/{Cascader-C2DFSMKJ.css → Cascader-ANEQUPMI.css} +21 -8
  32. package/dist/Cascader.cjs +5 -5
  33. package/dist/Cascader.d.cts +4 -2
  34. package/dist/Cascader.d.ts +4 -2
  35. package/dist/Cascader.js +4 -4
  36. package/dist/{Checkbox-U5EUDSYS.css → Checkbox-EDNPZRIP.css} +3 -3
  37. package/dist/Checkbox.cjs +3 -3
  38. package/dist/Checkbox.js +2 -2
  39. package/dist/{Collapse-66U5YJFY.css → Collapse-UNBHEPYP.css} +2 -2
  40. package/dist/Collapse.cjs +3 -3
  41. package/dist/Collapse.js +2 -2
  42. package/dist/{ColorPicker-SDDQGHCM.css → ColorPicker-LPG6QPYF.css} +7 -7
  43. package/dist/ColorPicker.cjs +2 -2
  44. package/dist/ColorPicker.js +1 -1
  45. package/dist/{CommandPalette-T45DBMPY.css → CommandPalette-RTKWNH2D.css} +3 -3
  46. package/dist/CommandPalette.cjs +5 -5
  47. package/dist/CommandPalette.js +4 -4
  48. package/dist/{ContextMenu-FKW6CQW4.css → ContextMenu-WRR2SSWL.css} +3 -3
  49. package/dist/ContextMenu.cjs +2 -2
  50. package/dist/ContextMenu.js +1 -1
  51. package/dist/{Divider-OEE4Q2KS.css → Divider-RPQCVH3J.css} +2 -2
  52. package/dist/Divider.cjs +2 -2
  53. package/dist/Divider.js +1 -1
  54. package/dist/{Drawer-IPGB4CXH.css → Drawer-7N3URAJ6.css} +8 -5
  55. package/dist/Drawer.cjs +3 -3
  56. package/dist/Drawer.js +2 -2
  57. package/dist/{Empty-DC2LPORC.css → Empty-CZTRZMZQ.css} +1 -1
  58. package/dist/Empty.cjs +2 -2
  59. package/dist/Empty.js +1 -1
  60. package/dist/{Form-5GRVZNDO.css → Form-NGCQWTMZ.css} +1 -1
  61. package/dist/Form.cjs +4 -4
  62. package/dist/Form.js +1 -1
  63. package/dist/Icon.cjs +55 -47
  64. package/dist/Icon.d.cts +9 -1
  65. package/dist/Icon.d.ts +9 -1
  66. package/dist/Icon.js +1 -1
  67. package/dist/{Image-4MN34O6P.css → Image-SGSRTHQX.css} +81 -3
  68. package/dist/Image.cjs +12 -4
  69. package/dist/Image.d.cts +79 -6
  70. package/dist/Image.d.ts +79 -6
  71. package/dist/Image.js +2 -2
  72. package/dist/{Input-3G4ONWNU.css → Input-7GDPGP3E.css} +22 -12
  73. package/dist/Input.cjs +5 -5
  74. package/dist/Input.d.cts +4 -3
  75. package/dist/Input.d.ts +4 -3
  76. package/dist/Input.js +3 -3
  77. package/dist/InputNumber.cjs +5 -5
  78. package/dist/InputNumber.js +4 -4
  79. package/dist/{List-W5BW4D2P.css → List-LSMU5QAC.css} +3 -3
  80. package/dist/List.cjs +2 -2
  81. package/dist/List.js +1 -1
  82. package/dist/{Message-2MZ3LFPU.css → Message-H222YGR6.css} +1 -1
  83. package/dist/Message.cjs +6 -6
  84. package/dist/Message.js +2 -2
  85. package/dist/{Modal-2QNDW4SO.css → Modal-MCFDYVUQ.css} +3 -3
  86. package/dist/Modal.cjs +4 -4
  87. package/dist/Modal.d.cts +1 -0
  88. package/dist/Modal.d.ts +1 -0
  89. package/dist/Modal.js +3 -3
  90. package/dist/{Pagination-YIRYJUXP.css → Pagination-YSZSNFHG.css} +5 -5
  91. package/dist/Pagination.cjs +7 -7
  92. package/dist/Pagination.js +6 -6
  93. package/dist/{Popover-DVGQGWX6.css → Popover-Y3LDCJPW.css} +1 -1
  94. package/dist/Popover.cjs +2 -2
  95. package/dist/Popover.js +1 -1
  96. package/dist/{Progress-CHV7DN6Y.css → Progress-CZNXCYGW.css} +1 -1
  97. package/dist/Progress.cjs +2 -2
  98. package/dist/Progress.js +1 -1
  99. package/dist/{Radio-GVFDPAZM.css → Radio-IQKASYDF.css} +4 -4
  100. package/dist/Radio.cjs +3 -3
  101. package/dist/Radio.js +1 -1
  102. package/dist/{Select-JVBQAZBG.css → Select-YZ2NUJSX.css} +44 -19
  103. package/dist/Select.cjs +6 -6
  104. package/dist/Select.d.cts +4 -3
  105. package/dist/Select.d.ts +4 -3
  106. package/dist/Select.js +5 -5
  107. package/dist/Skeleton.cjs +2 -2
  108. package/dist/Skeleton.js +1 -1
  109. package/dist/{Slider-3JKA5EW6.css → Slider-UM2IZZBH.css} +7 -7
  110. package/dist/Slider.cjs +2 -2
  111. package/dist/Slider.js +1 -1
  112. package/dist/{Spin-3GJNMSIH.css → Spin-GONGPV4Q.css} +1 -1
  113. package/dist/Spin.cjs +2 -2
  114. package/dist/Spin.js +1 -1
  115. package/dist/Splitter.cjs +2 -2
  116. package/dist/Splitter.js +1 -1
  117. package/dist/{StatusBar-CDS2GPSI.css → StatusBar-FJKEEPXU.css} +3 -7
  118. package/dist/StatusBar.cjs +3 -3
  119. package/dist/StatusBar.js +1 -1
  120. package/dist/Surface-UDDN3DGL.css +42 -0
  121. package/dist/Surface.cjs +16 -0
  122. package/dist/Surface.d.cts +60 -0
  123. package/dist/Surface.d.ts +60 -0
  124. package/dist/Surface.js +3 -0
  125. package/dist/{Switch-36KJNDXM.css → Switch-COAQIOMH.css} +8 -5
  126. package/dist/Switch.cjs +2 -2
  127. package/dist/Switch.js +1 -1
  128. package/dist/{Table-ATJJQLKU.css → Table-IYJTPY6J.css} +16 -16
  129. package/dist/Table.cjs +9 -9
  130. package/dist/Table.js +8 -8
  131. package/dist/{TablePro-3XVHYLSL.css → TablePro-JRSBPXB5.css} +1 -1
  132. package/dist/TablePro.cjs +10 -10
  133. package/dist/TablePro.js +9 -9
  134. package/dist/{Tabs-BLSNI2T5.css → Tabs-X5U5PCPV.css} +2 -2
  135. package/dist/Tabs.cjs +2 -2
  136. package/dist/Tabs.js +1 -1
  137. package/dist/{Tag-LB3OOJAO.css → Tag-G2XWAL7A.css} +15 -2
  138. package/dist/Tag.cjs +3 -3
  139. package/dist/Tag.d.cts +4 -3
  140. package/dist/Tag.d.ts +4 -3
  141. package/dist/Tag.js +2 -2
  142. package/dist/{Textarea-YNET7IBH.css → Textarea-YHWKHIFE.css} +3 -3
  143. package/dist/Textarea.cjs +4 -4
  144. package/dist/Textarea.js +2 -2
  145. package/dist/Theme.cjs +14 -10
  146. package/dist/Theme.d.cts +34 -7
  147. package/dist/Theme.d.ts +34 -7
  148. package/dist/Theme.js +1 -1
  149. package/dist/ThemePanel-76LB3YA5.css +509 -0
  150. package/dist/ThemePanel.cjs +29 -0
  151. package/dist/ThemePanel.d.cts +80 -0
  152. package/dist/ThemePanel.d.ts +80 -0
  153. package/dist/ThemePanel.js +12 -0
  154. package/dist/{Timeline-3ZHOHPXT.css → Timeline-ZIM7QFQC.css} +1 -1
  155. package/dist/Timeline.cjs +3 -3
  156. package/dist/Timeline.js +2 -2
  157. package/dist/{Tooltip-DMKUPC24.css → Tooltip-WI23DSRQ.css} +1 -1
  158. package/dist/Tooltip.cjs +2 -2
  159. package/dist/Tooltip.js +1 -1
  160. package/dist/{Typography-NKPWTJCV.css → Typography-GQNIJ4XD.css} +5 -5
  161. package/dist/Typography.cjs +7 -7
  162. package/dist/Typography.d.cts +1 -0
  163. package/dist/Typography.d.ts +1 -0
  164. package/dist/Typography.js +2 -2
  165. package/dist/chunk-2NT5QKEX.js +243 -0
  166. package/dist/{chunk-6BWELOCT.js → chunk-2SCXQ7QS.js} +2 -2
  167. package/dist/{chunk-5WAXZJG5.cjs → chunk-2ZADGBUN.cjs} +6 -6
  168. package/dist/{chunk-7NGMQIST.js → chunk-2ZFJTMEF.js} +4 -4
  169. package/dist/{chunk-UMDGS4BP.js → chunk-3YP7CBJT.js} +5 -5
  170. package/dist/{chunk-UUHFKIWP.cjs → chunk-4UKM4KAC.cjs} +2 -2
  171. package/dist/{chunk-WGZ2KJTZ.js → chunk-56PHETWO.js} +3 -3
  172. package/dist/{chunk-MQV2XN4B.cjs → chunk-5JPAUQ5H.cjs} +7 -7
  173. package/dist/{chunk-OQBDU5I2.cjs → chunk-5NFSDFBB.cjs} +4 -4
  174. package/dist/{chunk-SKMP2A5O.cjs → chunk-66GXZQKL.cjs} +4 -4
  175. package/dist/{chunk-TZJH5HBT.cjs → chunk-66T76GII.cjs} +6 -6
  176. package/dist/chunk-6EOSMK34.cjs +194 -0
  177. package/dist/{chunk-WNM5RVXR.cjs → chunk-6GQPF3EI.cjs} +2 -2
  178. package/dist/{chunk-TJII7BQ2.cjs → chunk-6LARTGLP.cjs} +11 -1
  179. package/dist/chunk-6SPMHY54.js +191 -0
  180. package/dist/{chunk-YLIQ37KY.cjs → chunk-6XVLERA3.cjs} +2 -2
  181. package/dist/{chunk-WKKSAGYH.js → chunk-7D76MI37.js} +8 -8
  182. package/dist/chunk-7NZ2A4MA.js +495 -0
  183. package/dist/{chunk-KLEKKZ73.js → chunk-7ZNGHWVS.js} +1 -1
  184. package/dist/{chunk-4WTU5P3O.cjs → chunk-ACQSRMLF.cjs} +5 -5
  185. package/dist/{chunk-FFZ6OMZI.js → chunk-AJH2O4WC.js} +3 -3
  186. package/dist/{chunk-CXWEOAVU.js → chunk-BCFCSVGJ.js} +3 -3
  187. package/dist/{chunk-NTS5L4NQ.cjs → chunk-BJ6WUVEG.cjs} +4 -4
  188. package/dist/{chunk-S3VXH5L4.cjs → chunk-C24W6PTJ.cjs} +2 -2
  189. package/dist/{chunk-GMN74OEY.cjs → chunk-CBKJXKVI.cjs} +2 -2
  190. package/dist/{chunk-33NCTOEB.js → chunk-CEZ2DR4R.js} +3 -3
  191. package/dist/{chunk-JD7A6VM3.js → chunk-CNGKJYGZ.js} +6 -6
  192. package/dist/{chunk-TEG7NJHS.cjs → chunk-D5PCIVID.cjs} +4 -4
  193. package/dist/{chunk-K2KYM7LW.cjs → chunk-D64IPDUE.cjs} +4 -4
  194. package/dist/chunk-DYHNOYRC.cjs +271 -0
  195. package/dist/{chunk-CUXV6QNN.cjs → chunk-DYSGXQUK.cjs} +7 -7
  196. package/dist/{chunk-3YJU3D5S.cjs → chunk-F3LHLYX6.cjs} +2 -2
  197. package/dist/{chunk-HPFQXYKG.cjs → chunk-GBKUGKIY.cjs} +11 -11
  198. package/dist/{chunk-MUXP7ASL.js → chunk-GUZ2DNDC.js} +3 -3
  199. package/dist/{chunk-K6F25JXT.js → chunk-GZCU6HXD.js} +2 -2
  200. package/dist/{chunk-USQ43DJ5.js → chunk-HFUHQUPQ.js} +2 -2
  201. package/dist/{chunk-7JN6FJ55.js → chunk-HU7T64Y3.js} +2 -2
  202. package/dist/{chunk-OYMJVU66.cjs → chunk-IDJCFYPP.cjs} +16 -16
  203. package/dist/{chunk-KD4YYIIO.cjs → chunk-IHK2FRTS.cjs} +2 -2
  204. package/dist/{chunk-Q5SZIU7Z.cjs → chunk-JFQ53MO4.cjs} +1 -1
  205. package/dist/{chunk-7PQJCLIR.js → chunk-KMG7OMOS.js} +2 -2
  206. package/dist/{chunk-MT7UWY6T.cjs → chunk-L27C5O4W.cjs} +4 -4
  207. package/dist/chunk-LFTCK2VM.cjs +1194 -0
  208. package/dist/{chunk-EJBHR2P5.js → chunk-LI4XJTEA.js} +3 -3
  209. package/dist/{chunk-45VJGBGN.js → chunk-LQLOOUS3.js} +2 -2
  210. package/dist/{chunk-PL6DRFUO.cjs → chunk-MOMLQP7B.cjs} +2 -2
  211. package/dist/{chunk-OF7JIYBY.cjs → chunk-MYHBC3HA.cjs} +2 -2
  212. package/dist/{chunk-LKK2AA7W.js → chunk-MYRLCN6V.js} +2 -2
  213. package/dist/{chunk-6ACKL3WH.cjs → chunk-N2BTMKF2.cjs} +5 -5
  214. package/dist/chunk-N2COYOXE.cjs +526 -0
  215. package/dist/{chunk-2TL37AP5.cjs → chunk-N3OLFKV5.cjs} +1 -1
  216. package/dist/{chunk-5JSDQ6QQ.cjs → chunk-NDO22RER.cjs} +2 -2
  217. package/dist/{chunk-XD3JGL5O.js → chunk-NE7IUGMK.js} +3 -3
  218. package/dist/{chunk-F6RYCBQG.js → chunk-NFXHIO3G.js} +1 -1
  219. package/dist/chunk-NJCHFXGC.js +1170 -0
  220. package/dist/chunk-NT6CJYI3.cjs +129 -0
  221. package/dist/chunk-O43DOE7V.js +106 -0
  222. package/dist/{chunk-GNEZD7KE.cjs → chunk-O4BOBOYV.cjs} +2 -2
  223. package/dist/{chunk-3AS5B7MQ.cjs → chunk-OGPDCBPD.cjs} +12 -12
  224. package/dist/{chunk-6YQTMI55.js → chunk-OHFZ7L4T.js} +2 -2
  225. package/dist/{chunk-CEJ7VBR6.js → chunk-OHIFKN4E.js} +4 -4
  226. package/dist/{chunk-46VXFTEC.js → chunk-OQU3TJCF.js} +3 -3
  227. package/dist/{chunk-5TKC6IEN.js → chunk-PEJLXJQD.js} +1 -1
  228. package/dist/{chunk-HWFM4MAT.js → chunk-PKHITACT.js} +2 -2
  229. package/dist/{chunk-CHMCL7AV.js → chunk-PNZJFLMY.js} +3 -3
  230. package/dist/{chunk-XRR3CYQL.js → chunk-QP7RXZES.js} +2 -2
  231. package/dist/{chunk-QGHYQCF3.cjs → chunk-QY76WTO5.cjs} +9 -9
  232. package/dist/{chunk-EIY7KEJ3.cjs → chunk-R74TZKJS.cjs} +4 -4
  233. package/dist/{chunk-GNEZQMKH.js → chunk-REMJWNAT.js} +5 -5
  234. package/dist/{chunk-SWBWZIL4.cjs → chunk-S6OKX4H7.cjs} +2 -2
  235. package/dist/{chunk-EC4WGEAJ.js → chunk-SABWUELE.js} +2 -2
  236. package/dist/{chunk-QKQHZIF3.cjs → chunk-SG42F5VB.cjs} +2 -2
  237. package/dist/{chunk-5C2AI2SD.js → chunk-SQIWPU6V.js} +2 -2
  238. package/dist/{chunk-ZIP7F4UF.cjs → chunk-SYWTT5TY.cjs} +5 -5
  239. package/dist/{chunk-OBEKX4VR.js → chunk-TVUBGXWA.js} +2 -2
  240. package/dist/{chunk-7PNJI5UE.cjs → chunk-U2H4DRMV.cjs} +2 -2
  241. package/dist/{chunk-6LZ54NPO.cjs → chunk-VAXWWJJP.cjs} +34 -24
  242. package/dist/{chunk-DQTSTJ6O.js → chunk-VNNQYJLT.js} +4 -4
  243. package/dist/{chunk-KGSADAOD.cjs → chunk-VSUMJX6Z.cjs} +2 -2
  244. package/dist/{chunk-ON4DEDMI.js → chunk-W5CJC7S7.js} +3 -3
  245. package/dist/{chunk-AXZ7ELMA.js → chunk-WEJKY3DF.js} +2 -2
  246. package/dist/{chunk-EQEJTN3V.js → chunk-WXWFMWWF.js} +3 -3
  247. package/dist/{chunk-TEEFR2FD.js → chunk-XHQGMMH7.js} +2 -2
  248. package/dist/{chunk-XTIN5545.js → chunk-XVP7IKLZ.js} +32 -22
  249. package/dist/{chunk-ELNT3CFO.js → chunk-Y5F7ZTBH.js} +2 -2
  250. package/dist/{chunk-QCILPZWP.js → chunk-YJEXAO2I.js} +2 -2
  251. package/dist/{chunk-7ABFUIOB.cjs → chunk-YNCDTKAE.cjs} +2 -2
  252. package/dist/{chunk-35ZGBAA3.cjs → chunk-YSCIMHOI.cjs} +6 -6
  253. package/dist/{chunk-AWXCSX6J.js → chunk-YSXD344H.js} +5 -5
  254. package/dist/{chunk-OF3SGLZY.js → chunk-YT5NLCRC.js} +10 -2
  255. package/dist/{chunk-HZSIUOCN.cjs → chunk-YUKXNWVE.cjs} +1 -1
  256. package/dist/{chunk-65FIH5A3.js → chunk-YVTLHTG6.js} +2 -2
  257. package/dist/{chunk-GENABQYA.cjs → chunk-Z4PZ2ZHI.cjs} +2 -2
  258. package/dist/{chunk-FBVVRTX2.cjs → chunk-ZPKHGKVL.cjs} +4 -4
  259. package/dist/{chunk-FJNWUELL.js → chunk-ZPP7LTHP.js} +3 -3
  260. package/dist/{chunk-IZOHYJUQ.cjs → chunk-ZWCDB5PP.cjs} +2 -2
  261. package/dist/index.cjs +226 -183
  262. package/dist/index.d.cts +7 -5
  263. package/dist/index.d.ts +7 -5
  264. package/dist/index.js +49 -46
  265. package/dist/styles.css +873 -200
  266. package/dist/{tokens-BIIUTPKN.css → tokens-EF34LSWI.css} +42 -17
  267. package/dist/tokens.css +42 -17
  268. package/docs/llms/alert.md +4 -3
  269. package/docs/llms/button.md +4 -3
  270. package/docs/llms/cascader.md +3 -0
  271. package/docs/llms/image.md +72 -1
  272. package/docs/llms/input.md +3 -2
  273. package/docs/llms/select.md +2 -2
  274. package/docs/llms/surface.md +90 -0
  275. package/docs/llms/tag.md +3 -2
  276. package/docs/llms/theme.md +65 -6
  277. package/docs/llms/themepanel.md +128 -0
  278. package/docs/llms.md +6 -4
  279. package/package.json +16 -1
  280. package/dist/Button-SDQD25AG.css +0 -98
  281. package/dist/chunk-B2KEZQ6S.cjs +0 -116
  282. package/dist/chunk-NN25YMOL.js +0 -251
  283. package/dist/chunk-PH3YECMF.js +0 -90
  284. package/dist/chunk-RF2EY5JS.cjs +0 -281
@@ -0,0 +1,495 @@
1
+ import './tokens-EF34LSWI.css';
2
+ import * as React from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ // src/components/Theme/Theme.tsx
6
+ var ACCENT_PRESETS = {
7
+ 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)" },
8
+ 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)" },
9
+ 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)" },
10
+ 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)" },
11
+ 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)" },
12
+ 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)" }
13
+ };
14
+ var ACCENT_PRESETS_DARK = {
15
+ sky: { soft: "oklch(35% 0.08 235)", ink: "oklch(82% 0.10 235)", glow: "oklch(68% 0.14 235 / 0.18)" },
16
+ coral: { soft: "oklch(38% 0.09 35)", ink: "oklch(84% 0.10 35)", glow: "oklch(72% 0.16 35 / 0.18)" },
17
+ mint: { soft: "oklch(36% 0.08 165)", ink: "oklch(83% 0.10 165)", glow: "oklch(72% 0.13 165 / 0.18)" },
18
+ violet: { soft: "oklch(36% 0.09 290)", ink: "oklch(82% 0.11 290)", glow: "oklch(66% 0.16 290 / 0.18)" },
19
+ amber: { soft: "oklch(38% 0.08 75)", ink: "oklch(85% 0.10 75)", glow: "oklch(76% 0.14 75 / 0.18)" },
20
+ rose: { soft: "oklch(38% 0.09 10)", ink: "oklch(84% 0.11 10)", glow: "oklch(68% 0.17 10 / 0.18)" }
21
+ };
22
+ var FONT_STACKS = {
23
+ system: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif',
24
+ sf: '"SF Pro Display", -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif',
25
+ serif: 'Cambria, Georgia, "Songti SC", "STSong", serif',
26
+ mono: 'ui-monospace, "SF Mono", "JetBrains Mono", Consolas, monospace'
27
+ };
28
+ var DEFAULT_CONFIG = {
29
+ mode: "light",
30
+ colorScheme: "light",
31
+ accent: "sky",
32
+ density: "comfortable",
33
+ intensity: 5,
34
+ radius: 20,
35
+ font: "sf",
36
+ tokens: {},
37
+ themes: {}
38
+ };
39
+ var isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
40
+ function isThemeBaseMode(mode) {
41
+ return mode === "light" || mode === "dark";
42
+ }
43
+ function isBuiltInThemeMode(mode) {
44
+ return mode === "light" || mode === "dark" || mode === "system";
45
+ }
46
+ var TRANSIENT_THEME_MODES = /* @__PURE__ */ new Set(["__theme_panel_draft__"]);
47
+ function isTransientThemeMode(mode) {
48
+ return mode != null && TRANSIENT_THEME_MODES.has(mode);
49
+ }
50
+ function getThemePreset(themes, mode) {
51
+ if (!mode || isBuiltInThemeMode(mode)) return void 0;
52
+ return themes?.[mode];
53
+ }
54
+ function applyThemePreset(config, mode) {
55
+ const preset = getThemePreset(config.themes, mode);
56
+ if (!preset) {
57
+ return {
58
+ ...config,
59
+ mode,
60
+ colorScheme: isThemeBaseMode(mode) ? mode : config.colorScheme
61
+ };
62
+ }
63
+ return {
64
+ ...config,
65
+ mode,
66
+ colorScheme: preset.base ?? config.colorScheme ?? DEFAULT_CONFIG.colorScheme,
67
+ accent: preset.accent ?? config.accent,
68
+ density: preset.density ?? config.density,
69
+ intensity: preset.intensity ?? config.intensity,
70
+ radius: preset.radius ?? config.radius,
71
+ font: preset.font ?? config.font,
72
+ tokens: preset.tokens ? { ...preset.tokens } : config.tokens
73
+ };
74
+ }
75
+ function resolveThemeConfig(config) {
76
+ const mode = config.mode ?? DEFAULT_CONFIG.mode;
77
+ const themes = config.themes ?? DEFAULT_CONFIG.themes;
78
+ const preset = getThemePreset(themes, mode);
79
+ const presetConfig = preset ? {
80
+ ...preset.base ? { colorScheme: preset.base } : null,
81
+ ...preset.accent ? { accent: preset.accent } : null,
82
+ ...preset.density ? { density: preset.density } : null,
83
+ ...preset.intensity != null ? { intensity: preset.intensity } : null,
84
+ ...preset.radius != null ? { radius: preset.radius } : null,
85
+ ...preset.font ? { font: preset.font } : null
86
+ } : {};
87
+ const merged = {
88
+ ...DEFAULT_CONFIG,
89
+ ...presetConfig,
90
+ ...config,
91
+ mode,
92
+ themes,
93
+ tokens: {
94
+ ...preset?.tokens ?? {},
95
+ ...config.tokens ?? {}
96
+ }
97
+ };
98
+ return {
99
+ ...merged,
100
+ colorScheme: merged.colorScheme ?? preset?.base ?? DEFAULT_CONFIG.colorScheme,
101
+ accent: merged.accent ?? preset?.accent ?? DEFAULT_CONFIG.accent,
102
+ density: merged.density ?? preset?.density ?? DEFAULT_CONFIG.density,
103
+ intensity: merged.intensity ?? preset?.intensity ?? DEFAULT_CONFIG.intensity,
104
+ radius: merged.radius ?? preset?.radius ?? DEFAULT_CONFIG.radius,
105
+ font: merged.font ?? preset?.font ?? DEFAULT_CONFIG.font
106
+ };
107
+ }
108
+ function resolveThemeMode(mode) {
109
+ if (mode !== "system") return mode;
110
+ if (!isBrowser) return "light";
111
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
112
+ }
113
+ function resolveThemeColorScheme(mode, themes, fallback) {
114
+ if (mode === "system") return fallback ?? resolveThemeMode(mode);
115
+ if (isThemeBaseMode(mode)) return mode;
116
+ return getThemePreset(themes, mode)?.base ?? fallback ?? DEFAULT_CONFIG.colorScheme;
117
+ }
118
+ function normalizeAccentInput(input, colorScheme) {
119
+ if (typeof input === "string" && input in ACCENT_PRESETS) {
120
+ const key = input;
121
+ const base = ACCENT_PRESETS[key];
122
+ if (colorScheme === "dark") {
123
+ return { key, palette: { ...base, ...ACCENT_PRESETS_DARK[key] } };
124
+ }
125
+ return { key, palette: base };
126
+ }
127
+ const raw = typeof input === "string" ? { accent: input } : input;
128
+ const { accent } = raw;
129
+ const ink = raw.ink ?? `color-mix(in oklch, ${accent} 65%, black)`;
130
+ const soft = raw.soft ?? (colorScheme === "dark" ? `color-mix(in oklch, ${accent} 30%, black)` : `color-mix(in oklch, ${accent} 15%, white)`);
131
+ const glow = raw.glow ?? (colorScheme === "dark" ? `color-mix(in oklch, ${accent} 18%, transparent)` : `color-mix(in oklch, ${accent} 35%, transparent)`);
132
+ return { key: "custom", palette: { accent, ink, soft, glow } };
133
+ }
134
+ function toVar(key) {
135
+ return key.startsWith("--") ? key : `--${key}`;
136
+ }
137
+ var LEGACY_SHADOW_TOKEN_ALIASES = {
138
+ "--neu-flat": "--neu-shadow-subtle",
139
+ "--neu-out-sm": "--neu-shadow-control",
140
+ "--neu-out": "--neu-shadow-panel",
141
+ "--neu-out-lg": "--neu-shadow-lift",
142
+ "--neu-in-sm": "--neu-shadow-inset",
143
+ "--neu-in": "--neu-shadow-inset-strong",
144
+ "--neu-float": "--neu-shadow-float"
145
+ };
146
+ function applyShadowTokens(target, colorScheme) {
147
+ if (colorScheme === "dark") {
148
+ target.style.setProperty("--shadow-offset", "calc(4px * var(--d) * var(--shadow-scale))");
149
+ target.style.setProperty("--shadow-blur", "calc(10px * var(--d) * var(--shadow-scale))");
150
+ target.style.setProperty("--shadow-inset-offset", "calc(3px * var(--d) * var(--shadow-scale))");
151
+ target.style.setProperty("--shadow-inset-blur", "calc(7px * var(--d) * var(--shadow-scale))");
152
+ } else {
153
+ target.style.setProperty("--shadow-offset", "calc(6px * var(--d) * var(--shadow-scale))");
154
+ target.style.setProperty("--shadow-blur", "calc(16px * var(--d) * var(--shadow-scale))");
155
+ target.style.setProperty("--shadow-inset-offset", "calc(4px * var(--d) * var(--shadow-scale))");
156
+ target.style.setProperty("--shadow-inset-blur", "calc(10px * var(--d) * var(--shadow-scale))");
157
+ }
158
+ target.style.setProperty(
159
+ "--neu-shadow-panel",
160
+ "var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark), calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light)"
161
+ );
162
+ target.style.setProperty(
163
+ "--neu-shadow-control",
164
+ "calc(var(--shadow-offset) * 0.5) calc(var(--shadow-offset) * 0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-dark), calc(var(--shadow-offset) * -0.5) calc(var(--shadow-offset) * -0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-light)"
165
+ );
166
+ target.style.setProperty(
167
+ "--neu-shadow-lift",
168
+ "calc(var(--shadow-offset) * 1.6) calc(var(--shadow-offset) * 1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-dark), calc(var(--shadow-offset) * -1.6) calc(var(--shadow-offset) * -1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-light)"
169
+ );
170
+ target.style.setProperty(
171
+ "--neu-shadow-inset-strong",
172
+ "inset var(--shadow-inset-offset) var(--shadow-inset-offset) var(--shadow-inset-blur) var(--shadow-dark), inset calc(var(--shadow-inset-offset) * -1) calc(var(--shadow-inset-offset) * -1) var(--shadow-inset-blur) var(--shadow-light)"
173
+ );
174
+ target.style.setProperty(
175
+ "--neu-shadow-inset",
176
+ "inset calc(var(--shadow-inset-offset) * 0.6) calc(var(--shadow-inset-offset) * 0.6) calc(var(--shadow-inset-blur) * 0.6) var(--shadow-dark), inset calc(var(--shadow-inset-offset) * -0.6) calc(var(--shadow-inset-offset) * -0.6) calc(var(--shadow-inset-blur) * 0.6) var(--shadow-light)"
177
+ );
178
+ target.style.setProperty(
179
+ "--neu-shadow-subtle",
180
+ "1px 1px 2px var(--shadow-dark), -1px -1px 2px var(--shadow-light)"
181
+ );
182
+ target.style.setProperty(
183
+ "--neu-shadow-float",
184
+ "0 calc(var(--shadow-offset) * 1.8 * var(--shadow-float-scale)) calc(var(--shadow-blur) * 2.2 * var(--shadow-float-scale)) var(--shadow-dark), 0 calc(var(--shadow-offset) * 0.4 * var(--shadow-float-scale)) calc(var(--shadow-blur) * 0.7 * var(--shadow-float-scale)) var(--shadow-dark)"
185
+ );
186
+ target.style.setProperty("--neu-out", "var(--neu-shadow-panel)");
187
+ target.style.setProperty("--neu-out-sm", "var(--neu-shadow-control)");
188
+ target.style.setProperty("--neu-out-lg", "var(--neu-shadow-lift)");
189
+ target.style.setProperty("--neu-in", "var(--neu-shadow-inset-strong)");
190
+ target.style.setProperty("--neu-in-sm", "var(--neu-shadow-inset)");
191
+ target.style.setProperty("--neu-flat", "var(--neu-shadow-subtle)");
192
+ target.style.setProperty("--neu-float", "var(--neu-shadow-float)");
193
+ }
194
+ function applyTheme(target, config) {
195
+ const cfg = resolveThemeConfig(config);
196
+ resolveThemeMode(cfg.mode);
197
+ const colorScheme = resolveThemeColorScheme(cfg.mode, cfg.themes, cfg.colorScheme);
198
+ const { key, palette } = normalizeAccentInput(cfg.accent, colorScheme);
199
+ target.dataset.theme = colorScheme;
200
+ target.dataset.themeMode = cfg.mode;
201
+ target.dataset.density = cfg.density;
202
+ if (key === "custom") {
203
+ delete target.dataset.accent;
204
+ } else {
205
+ target.dataset.accent = key;
206
+ }
207
+ target.style.setProperty("--accent", palette.accent);
208
+ target.style.setProperty("--accent-ink", palette.ink);
209
+ target.style.setProperty("--accent-soft", palette.soft);
210
+ target.style.setProperty("--accent-glow", palette.glow);
211
+ const intensity = cfg.intensity ?? DEFAULT_CONFIG.intensity;
212
+ target.style.setProperty("--d", String(0.4 + intensity * 0.12));
213
+ applyShadowTokens(target, colorScheme);
214
+ const r = cfg.radius ?? DEFAULT_CONFIG.radius;
215
+ target.style.setProperty("--r-xs", `${Math.max(4, r - 16)}px`);
216
+ target.style.setProperty("--r-sm", `${Math.max(6, r - 12)}px`);
217
+ target.style.setProperty("--r-md", `${Math.max(8, r - 6)}px`);
218
+ target.style.setProperty("--r-lg", `${r}px`);
219
+ target.style.setProperty("--r-xl", `${r + 10}px`);
220
+ const font = cfg.font ?? DEFAULT_CONFIG.font;
221
+ if (typeof font === "string") {
222
+ const stack = FONT_STACKS[font] ?? font;
223
+ target.style.setProperty("--font-sans", stack);
224
+ if (font === "mono") target.style.setProperty("--font-display", FONT_STACKS.mono);
225
+ } else {
226
+ if (font.sans) target.style.setProperty("--font-sans", font.sans);
227
+ if (font.display) target.style.setProperty("--font-display", font.display);
228
+ if (font.mono) target.style.setProperty("--font-mono", font.mono);
229
+ }
230
+ if (cfg.tokens) {
231
+ const tokenVars = new Set(Object.keys(cfg.tokens).map(toVar));
232
+ for (const [k, v] of Object.entries(cfg.tokens)) {
233
+ const variable = toVar(k);
234
+ const semanticAlias = LEGACY_SHADOW_TOKEN_ALIASES[variable];
235
+ if (semanticAlias && !tokenVars.has(semanticAlias)) {
236
+ target.style.setProperty(semanticAlias, v);
237
+ }
238
+ target.style.setProperty(variable, v);
239
+ }
240
+ }
241
+ }
242
+ var ThemeCtx = React.createContext(null);
243
+ function useTheme() {
244
+ const ctx = React.useContext(ThemeCtx);
245
+ if (!ctx) {
246
+ throw new Error(
247
+ "useTheme() must be used inside <ThemeProvider>. Wrap your app (or a subtree) with <ThemeProvider>."
248
+ );
249
+ }
250
+ return ctx;
251
+ }
252
+ function useThemeOptional() {
253
+ return React.useContext(ThemeCtx);
254
+ }
255
+ function loadPersisted(key) {
256
+ if (!key || !isBrowser) return null;
257
+ try {
258
+ const raw = localStorage.getItem(key);
259
+ if (!raw) return null;
260
+ const persisted = JSON.parse(raw);
261
+ if (isTransientThemeMode(persisted.mode)) {
262
+ localStorage.removeItem(key);
263
+ return null;
264
+ }
265
+ return persisted;
266
+ } catch {
267
+ return null;
268
+ }
269
+ }
270
+ function persist(key, cfg) {
271
+ if (!key || !isBrowser) return;
272
+ if (isTransientThemeMode(cfg.mode)) return;
273
+ try {
274
+ localStorage.setItem(key, JSON.stringify(cfg));
275
+ } catch {
276
+ }
277
+ }
278
+ var ThemeProvider = (props) => {
279
+ const {
280
+ children,
281
+ target = "root",
282
+ as: Tag = "div",
283
+ className,
284
+ style,
285
+ storageKey,
286
+ onChange,
287
+ ...configProps
288
+ } = props;
289
+ const initialConfig = React.useMemo(() => {
290
+ const applyExplicitProps = (base) => ({
291
+ ...base,
292
+ ...configProps.colorScheme !== void 0 ? { colorScheme: configProps.colorScheme } : null,
293
+ ...configProps.accent !== void 0 ? { accent: configProps.accent } : null,
294
+ ...configProps.density !== void 0 ? { density: configProps.density } : null,
295
+ ...configProps.intensity != null ? { intensity: configProps.intensity } : null,
296
+ ...configProps.radius != null ? { radius: configProps.radius } : null,
297
+ ...configProps.font !== void 0 ? { font: configProps.font } : null,
298
+ ...configProps.tokens !== void 0 ? { tokens: configProps.tokens } : null,
299
+ ...configProps.themes !== void 0 ? { themes: configProps.themes } : null
300
+ });
301
+ const fromProps = {
302
+ mode: configProps.mode ?? DEFAULT_CONFIG.mode,
303
+ colorScheme: configProps.colorScheme,
304
+ accent: configProps.accent ?? DEFAULT_CONFIG.accent,
305
+ density: configProps.density ?? DEFAULT_CONFIG.density,
306
+ intensity: configProps.intensity ?? DEFAULT_CONFIG.intensity,
307
+ radius: configProps.radius ?? DEFAULT_CONFIG.radius,
308
+ font: configProps.font ?? DEFAULT_CONFIG.font,
309
+ tokens: configProps.tokens ?? {},
310
+ themes: configProps.themes ?? DEFAULT_CONFIG.themes
311
+ };
312
+ const persisted = loadPersisted(storageKey);
313
+ const seeded = applyThemePreset(fromProps, fromProps.mode ?? DEFAULT_CONFIG.mode);
314
+ const withExplicitProps = applyExplicitProps(seeded);
315
+ if (!persisted) return withExplicitProps;
316
+ let persistedForMerge = persisted;
317
+ if (configProps.themes !== void 0) {
318
+ const { themes: _persistedThemes, ...rest } = persisted;
319
+ persistedForMerge = rest;
320
+ }
321
+ const persistedMode = persistedForMerge.mode ?? withExplicitProps.mode ?? DEFAULT_CONFIG.mode;
322
+ const withPersisted = {
323
+ ...applyThemePreset({ ...withExplicitProps, mode: persistedMode }, persistedMode),
324
+ ...persistedForMerge,
325
+ ...configProps.themes !== void 0 ? { themes: configProps.themes } : null
326
+ };
327
+ const withControlledThemePreset = configProps.themes !== void 0 && !isBuiltInThemeMode(persistedMode) ? applyThemePreset(withPersisted, persistedMode) : withPersisted;
328
+ return applyExplicitProps(withControlledThemePreset);
329
+ }, []);
330
+ const [config, setConfig] = React.useState(initialConfig);
331
+ const previousPropsRef = React.useRef({
332
+ mode: configProps.mode,
333
+ colorScheme: configProps.colorScheme,
334
+ accent: configProps.accent,
335
+ density: configProps.density,
336
+ intensity: configProps.intensity,
337
+ radius: configProps.radius,
338
+ font: configProps.font,
339
+ tokens: configProps.tokens,
340
+ themes: configProps.themes
341
+ });
342
+ React.useEffect(() => {
343
+ const previous = previousPropsRef.current;
344
+ const changedProps = {};
345
+ const assignIfChanged = (key, value2) => {
346
+ if (value2 !== previous[key]) changedProps[key] = value2;
347
+ };
348
+ assignIfChanged("mode", configProps.mode);
349
+ assignIfChanged("colorScheme", configProps.colorScheme);
350
+ assignIfChanged("accent", configProps.accent);
351
+ assignIfChanged("density", configProps.density);
352
+ assignIfChanged("intensity", configProps.intensity);
353
+ assignIfChanged("radius", configProps.radius);
354
+ assignIfChanged("font", configProps.font);
355
+ assignIfChanged("tokens", configProps.tokens);
356
+ assignIfChanged("themes", configProps.themes);
357
+ previousPropsRef.current = {
358
+ mode: configProps.mode,
359
+ colorScheme: configProps.colorScheme,
360
+ accent: configProps.accent,
361
+ density: configProps.density,
362
+ intensity: configProps.intensity,
363
+ radius: configProps.radius,
364
+ font: configProps.font,
365
+ tokens: configProps.tokens,
366
+ themes: configProps.themes
367
+ };
368
+ if (Object.keys(changedProps).length === 0) return;
369
+ setConfig((c) => {
370
+ const base = {
371
+ ...c,
372
+ ...Object.prototype.hasOwnProperty.call(changedProps, "themes") ? { themes: configProps.themes ?? DEFAULT_CONFIG.themes } : null
373
+ };
374
+ const mode = Object.prototype.hasOwnProperty.call(changedProps, "mode") ? configProps.mode ?? DEFAULT_CONFIG.mode : c.mode ?? DEFAULT_CONFIG.mode;
375
+ const shouldApplyPreset = Object.prototype.hasOwnProperty.call(changedProps, "mode") || Object.prototype.hasOwnProperty.call(changedProps, "themes") && !isBuiltInThemeMode(mode);
376
+ const shouldUseProp = (key) => Object.prototype.hasOwnProperty.call(changedProps, key) || configProps[key] !== void 0;
377
+ const nextFromMode = shouldApplyPreset ? applyThemePreset(base, mode) : base;
378
+ const next = {
379
+ ...nextFromMode,
380
+ mode,
381
+ ...shouldUseProp("colorScheme") ? { colorScheme: configProps.colorScheme } : null,
382
+ ...shouldUseProp("accent") ? { accent: configProps.accent } : null,
383
+ ...shouldUseProp("density") ? { density: configProps.density } : null,
384
+ ...shouldUseProp("intensity") ? { intensity: configProps.intensity } : null,
385
+ ...shouldUseProp("radius") ? { radius: configProps.radius } : null,
386
+ ...shouldUseProp("font") ? { font: configProps.font } : null,
387
+ ...shouldUseProp("tokens") ? { tokens: configProps.tokens } : null
388
+ };
389
+ if (next.mode === c.mode && next.colorScheme === c.colorScheme && next.accent === c.accent && next.density === c.density && next.intensity === c.intensity && next.radius === c.radius && next.font === c.font && next.tokens === c.tokens && next.themes === c.themes) {
390
+ return c;
391
+ }
392
+ return next;
393
+ });
394
+ }, [
395
+ configProps.mode,
396
+ configProps.colorScheme,
397
+ configProps.accent,
398
+ configProps.density,
399
+ configProps.intensity,
400
+ configProps.radius,
401
+ configProps.font,
402
+ configProps.tokens,
403
+ configProps.themes
404
+ ]);
405
+ const [systemDark, setSystemDark] = React.useState(
406
+ () => isBrowser && window.matchMedia("(prefers-color-scheme: dark)").matches
407
+ );
408
+ React.useEffect(() => {
409
+ if (!isBrowser) return;
410
+ const mql = window.matchMedia("(prefers-color-scheme: dark)");
411
+ const handler = (e) => setSystemDark(e.matches);
412
+ mql.addEventListener?.("change", handler);
413
+ return () => mql.removeEventListener?.("change", handler);
414
+ }, []);
415
+ const effectiveConfig = React.useMemo(() => resolveThemeConfig(config), [config]);
416
+ const activeTheme = React.useMemo(
417
+ () => getThemePreset(effectiveConfig.themes, effectiveConfig.mode) ?? null,
418
+ [effectiveConfig.mode, effectiveConfig.themes]
419
+ );
420
+ const colorScheme = effectiveConfig.mode === "system" ? systemDark ? "dark" : "light" : isThemeBaseMode(effectiveConfig.mode) ? effectiveConfig.mode : effectiveConfig.colorScheme ?? activeTheme?.base ?? DEFAULT_CONFIG.colorScheme;
421
+ const resolvedMode = effectiveConfig.mode === "system" ? colorScheme : effectiveConfig.mode;
422
+ const { key: accentKey, palette: accentPalette } = React.useMemo(
423
+ () => normalizeAccentInput(effectiveConfig.accent, colorScheme),
424
+ [effectiveConfig.accent, colorScheme]
425
+ );
426
+ const scopeRef = React.useRef(null);
427
+ const appliedTokenKeysRef = React.useRef(/* @__PURE__ */ new Set());
428
+ React.useEffect(() => {
429
+ if (!isBrowser) return;
430
+ const el = target === "root" ? document.documentElement : scopeRef.current;
431
+ if (!el) return;
432
+ const nextTokenKeys = new Set(Object.keys(effectiveConfig.tokens));
433
+ for (const key of appliedTokenKeysRef.current) {
434
+ if (!nextTokenKeys.has(key)) el.style.removeProperty(toVar(key));
435
+ }
436
+ applyTheme(el, { ...effectiveConfig, colorScheme });
437
+ appliedTokenKeysRef.current = nextTokenKeys;
438
+ persist(storageKey, config);
439
+ }, [config, effectiveConfig, colorScheme, target, storageKey]);
440
+ const value = React.useMemo(() => {
441
+ const patch = (p) => setConfig((c) => ({ ...c, ...p }));
442
+ return {
443
+ mode: effectiveConfig.mode,
444
+ resolvedMode,
445
+ colorScheme,
446
+ accent: accentKey,
447
+ accentPalette,
448
+ density: effectiveConfig.density,
449
+ intensity: effectiveConfig.intensity,
450
+ radius: effectiveConfig.radius,
451
+ font: effectiveConfig.font,
452
+ tokens: effectiveConfig.tokens,
453
+ themes: effectiveConfig.themes,
454
+ activeTheme,
455
+ setMode: (m) => setConfig((c) => applyThemePreset(c, m)),
456
+ toggleMode: () => setConfig((c) => ({
457
+ ...c,
458
+ mode: c.mode === "dark" ? "light" : "dark"
459
+ })),
460
+ setAccent: (a) => patch({ accent: a }),
461
+ setDensity: (d) => patch({ density: d }),
462
+ setIntensity: (n) => patch({ intensity: n }),
463
+ setRadius: (n) => patch({ radius: n }),
464
+ setFont: (f) => patch({ font: f }),
465
+ setTokens: (t) => patch({ tokens: t }),
466
+ setThemes: (t) => patch({ themes: t }),
467
+ update: patch,
468
+ reset: () => setConfig(initialConfig)
469
+ };
470
+ }, [effectiveConfig, resolvedMode, colorScheme, accentKey, accentPalette, activeTheme, initialConfig]);
471
+ const onChangeRef = React.useRef(onChange);
472
+ onChangeRef.current = onChange;
473
+ React.useEffect(() => {
474
+ onChangeRef.current?.(value);
475
+ }, [value]);
476
+ if (target === "scope") {
477
+ const Component = Tag;
478
+ return /* @__PURE__ */ jsx(ThemeCtx.Provider, { value, children: /* @__PURE__ */ jsx(
479
+ Component,
480
+ {
481
+ ref: scopeRef,
482
+ className,
483
+ style: {
484
+ color: "var(--fg)",
485
+ fontFamily: "var(--font-sans)",
486
+ ...style
487
+ },
488
+ children
489
+ }
490
+ ) });
491
+ }
492
+ return /* @__PURE__ */ jsx(ThemeCtx.Provider, { value, children });
493
+ };
494
+
495
+ export { ACCENT_PRESETS, ACCENT_PRESETS_DARK, FONT_STACKS, ThemeProvider, applyTheme, normalizeAccentInput, resolveThemeColorScheme, resolveThemeMode, useTheme, useThemeOptional };
@@ -1,4 +1,4 @@
1
- import './tokens-BIIUTPKN.css';
1
+ import './tokens-EF34LSWI.css';
2
2
  import './shared-NJHRNLRH.css';
3
3
  import './Splitter-DHNOY4NC.css';
4
4
  import * as React from 'react';
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkTJII7BQ2_cjs = require('./chunk-TJII7BQ2.cjs');
4
- require('./tokens-BIIUTPKN.css');
3
+ var chunk6LARTGLP_cjs = require('./chunk-6LARTGLP.cjs');
4
+ require('./tokens-EF34LSWI.css');
5
5
  require('./shared-NJHRNLRH.css');
6
- require('./Calendar-LHZELUDL.css');
6
+ require('./Calendar-RUTPKREW.css');
7
7
  var React = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
 
@@ -66,7 +66,7 @@ var Calendar = React__namespace.forwardRef(({
66
66
  className: "btn icon sm ghost",
67
67
  onClick: () => setView(new Date(view.getFullYear(), view.getMonth() - 1, 1)),
68
68
  "aria-label": "Previous month",
69
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkTJII7BQ2_cjs.Icon, { name: "chevLeft", size: 14 })
69
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk6LARTGLP_cjs.Icon, { name: "chevLeft", size: 14 })
70
70
  }
71
71
  ),
72
72
  /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "calendar-title", children: [
@@ -82,7 +82,7 @@ var Calendar = React__namespace.forwardRef(({
82
82
  className: "btn icon sm ghost",
83
83
  onClick: () => setView(new Date(view.getFullYear(), view.getMonth() + 1, 1)),
84
84
  "aria-label": "Next month",
85
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkTJII7BQ2_cjs.Icon, { name: "chevRight", size: 14 })
85
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk6LARTGLP_cjs.Icon, { name: "chevRight", size: 14 })
86
86
  }
87
87
  )
88
88
  ] }),
@@ -1,7 +1,7 @@
1
- import { Icon } from './chunk-OF3SGLZY.js';
2
- import './tokens-BIIUTPKN.css';
1
+ import { Icon } from './chunk-YT5NLCRC.js';
2
+ import './tokens-EF34LSWI.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Collapse-66U5YJFY.css';
4
+ import './Collapse-UNBHEPYP.css';
5
5
  import * as React from 'react';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
7
 
@@ -1,7 +1,7 @@
1
- import { Icon } from './chunk-OF3SGLZY.js';
2
- import './tokens-BIIUTPKN.css';
1
+ import { Icon } from './chunk-YT5NLCRC.js';
2
+ import './tokens-EF34LSWI.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Typography-NKPWTJCV.css';
4
+ import './Typography-GQNIJ4XD.css';
5
5
  import * as React from 'react';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
7
 
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkQKQHZIF3_cjs = require('./chunk-QKQHZIF3.cjs');
4
- require('./tokens-BIIUTPKN.css');
3
+ var chunkSG42F5VB_cjs = require('./chunk-SG42F5VB.cjs');
4
+ require('./tokens-EF34LSWI.css');
5
5
  require('./shared-NJHRNLRH.css');
6
- require('./Timeline-3ZHOHPXT.css');
6
+ require('./Timeline-ZIM7QFQC.css');
7
7
  var React = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
 
@@ -96,7 +96,7 @@ var TimelineItem = ({
96
96
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, children: [
97
97
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-label", children: item.label }),
98
98
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "timeline-item-head", children: [
99
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `timeline-item-dot ${color} ${isPending ? "pending" : ""}`, children: item.dot ?? (isPending && /* @__PURE__ */ jsxRuntime.jsx(chunkQKQHZIF3_cjs.Spin, { size: 14 })) }),
99
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `timeline-item-dot ${color} ${isPending ? "pending" : ""}`, children: item.dot ?? (isPending && /* @__PURE__ */ jsxRuntime.jsx(chunkSG42F5VB_cjs.Spin, { size: 14 })) }),
100
100
  !isLast && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-tail" })
101
101
  ] }),
102
102
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "timeline-item-content", children: item.children })
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- require('./tokens-BIIUTPKN.css');
3
+ require('./tokens-EF34LSWI.css');
4
4
  require('./shared-NJHRNLRH.css');
5
- require('./Form-5GRVZNDO.css');
5
+ require('./Form-NGCQWTMZ.css');
6
6
  var React = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
 
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- require('./tokens-BIIUTPKN.css');
3
+ require('./tokens-EF34LSWI.css');
4
4
  require('./shared-NJHRNLRH.css');
5
- require('./Card-6RMVIHWX.css');
5
+ require('./Card-MA6SV7D5.css');
6
6
  var React = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
 
@@ -1,7 +1,7 @@
1
- import { Icon } from './chunk-OF3SGLZY.js';
2
- import './tokens-BIIUTPKN.css';
1
+ import { Icon } from './chunk-YT5NLCRC.js';
2
+ import './tokens-EF34LSWI.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Calendar-LHZELUDL.css';
4
+ import './Calendar-RUTPKREW.css';
5
5
  import * as React from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7
 
@@ -1,7 +1,7 @@
1
- import { Icon } from './chunk-OF3SGLZY.js';
2
- import './tokens-BIIUTPKN.css';
1
+ import { renderIconSlot } from './chunk-YT5NLCRC.js';
2
+ import './tokens-EF34LSWI.css';
3
3
  import './shared-NJHRNLRH.css';
4
- import './Button-SDQD25AG.css';
4
+ import './Button-TUMZUQLI.css';
5
5
  import * as React from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7
 
@@ -42,12 +42,12 @@ var Button = React.forwardRef(
42
42
  className: cls,
43
43
  disabled: disabled || loading,
44
44
  title: tip,
45
- "aria-label": ariaLabel ?? (onlyIcon ? tip ?? icon : void 0),
45
+ "aria-label": ariaLabel ?? (onlyIcon ? tip ?? (typeof icon === "string" ? icon : void 0) : void 0),
46
46
  ...rest,
47
47
  children: [
48
- loading ? /* @__PURE__ */ jsx("span", { className: "spinner", "aria-hidden": true }) : icon ? /* @__PURE__ */ jsx(Icon, { name: icon, size: 15 }) : null,
48
+ loading ? /* @__PURE__ */ jsx("span", { className: "spinner", "aria-hidden": true }) : renderIconSlot(icon, { size: 15, className: "btn-icon-slot" }),
49
49
  content,
50
- trailingIcon && /* @__PURE__ */ jsx(Icon, { name: trailingIcon, size: 15 })
50
+ renderIconSlot(trailingIcon, { size: 15, className: "btn-icon-slot" })
51
51
  ]
52
52
  }
53
53
  );
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunk6LZ54NPO_cjs = require('./chunk-6LZ54NPO.cjs');
4
- require('./tokens-BIIUTPKN.css');
3
+ var chunkVAXWWJJP_cjs = require('./chunk-VAXWWJJP.cjs');
4
+ require('./tokens-EF34LSWI.css');
5
5
  require('./shared-NJHRNLRH.css');
6
- require('./CommandPalette-T45DBMPY.css');
6
+ require('./CommandPalette-RTKWNH2D.css');
7
7
  var React = require('react');
8
8
  var ReactDOM = require('react-dom');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -149,7 +149,7 @@ var CommandPalette = React__namespace.forwardRef(({
149
149
  ...rest,
150
150
  children: [
151
151
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cmdp-search", children: /* @__PURE__ */ jsxRuntime.jsx(
152
- chunk6LZ54NPO_cjs.Input,
152
+ chunkVAXWWJJP_cjs.Input,
153
153
  {
154
154
  ref: inputRef,
155
155
  size: "lg",