@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
package/dist/Theme.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import * as React from 'react';
2
2
 
3
- type ThemeMode = "light" | "dark" | "system";
4
- type ResolvedThemeMode = "light" | "dark";
3
+ type ThemeBaseMode = "light" | "dark";
4
+ type BuiltInThemeMode = ThemeBaseMode | "system";
5
+ type ThemeMode = BuiltInThemeMode | (string & {});
6
+ type ResolvedThemeMode = ThemeBaseMode | (string & {});
5
7
  type AccentKey = "sky" | "coral" | "mint" | "violet" | "amber" | "rose";
6
8
  type DensityMode = "compact" | "comfortable" | "spacious";
7
9
  type FontKey = "system" | "sf" | "serif" | "mono";
@@ -30,8 +32,25 @@ type FontConfig = FontKey | string | {
30
32
  /** Arbitrary CSS variable overrides. Keys may be either a short name
31
33
  * (e.g. `"bg"` → `--bg`) or a full var name (e.g. `"--bg"`). */
32
34
  type ThemeTokens = Record<string, string>;
35
+ /** Named custom theme mode. `base` keeps dark/light specific component rules. */
36
+ interface ThemePreset {
37
+ /** Optional display name used by ThemePanel or other theme pickers. */
38
+ label?: string;
39
+ /** Optional helper text used by ThemePanel or other theme pickers. */
40
+ description?: string;
41
+ base?: ThemeBaseMode;
42
+ accent?: AccentKey | CustomAccentInput;
43
+ density?: DensityMode;
44
+ intensity?: number;
45
+ radius?: number;
46
+ font?: FontConfig;
47
+ tokens?: ThemeTokens;
48
+ }
49
+ type ThemePresets = Record<string, ThemePreset>;
33
50
  interface ThemeConfig {
34
51
  mode?: ThemeMode;
52
+ /** Base light/dark color scheme used by custom modes. */
53
+ colorScheme?: ThemeBaseMode;
35
54
  accent?: AccentKey | CustomAccentInput;
36
55
  density?: DensityMode;
37
56
  /** Shadow strength, 1..10. Maps to `--d` (0.4..1.6). */
@@ -40,12 +59,16 @@ interface ThemeConfig {
40
59
  radius?: number;
41
60
  font?: FontConfig;
42
61
  tokens?: ThemeTokens;
62
+ /** Custom named modes addressable through `mode` / `setMode`. */
63
+ themes?: ThemePresets;
43
64
  }
44
65
  interface ThemeValue {
45
66
  /** Requested mode ("system" is preserved here). */
46
67
  mode: ThemeMode;
47
- /** Resolved concrete mode ("system" → "light" | "dark" based on OS). */
68
+ /** Resolved concrete mode ("system" → "light" | "dark"; custom modes keep their name). */
48
69
  resolvedMode: ResolvedThemeMode;
70
+ /** The light/dark base currently used for component-specific selectors. */
71
+ colorScheme: ThemeBaseMode;
49
72
  /** Accent key or "custom" if a palette was supplied. */
50
73
  accent: AccentKey | "custom";
51
74
  /** Resolved palette currently in effect. */
@@ -55,6 +78,8 @@ interface ThemeValue {
55
78
  radius: number;
56
79
  font: FontConfig;
57
80
  tokens: ThemeTokens;
81
+ themes: ThemePresets;
82
+ activeTheme: ThemePreset | null;
58
83
  setMode: (m: ThemeMode) => void;
59
84
  toggleMode: () => void;
60
85
  setAccent: (a: AccentKey | CustomAccentInput) => void;
@@ -63,6 +88,7 @@ interface ThemeValue {
63
88
  setRadius: (n: number) => void;
64
89
  setFont: (f: FontConfig) => void;
65
90
  setTokens: (t: ThemeTokens) => void;
91
+ setThemes: (t: ThemePresets) => void;
66
92
  /** Shallow-merge a partial config. */
67
93
  update: (cfg: Partial<ThemeConfig>) => void;
68
94
  /** Reset to the initial props. */
@@ -75,10 +101,11 @@ declare const ACCENT_PRESETS: Record<AccentKey, AccentPalette>;
75
101
  declare const ACCENT_PRESETS_DARK: Record<AccentKey, Pick<AccentPalette, "ink" | "soft" | "glow">>;
76
102
  /** Built-in font family stacks. */
77
103
  declare const FONT_STACKS: Record<FontKey, string>;
78
- /** Resolve "system" mode against `prefers-color-scheme`. */
104
+ /** Resolve "system" mode against `prefers-color-scheme`; custom modes keep their name. */
79
105
  declare function resolveThemeMode(mode: ThemeMode): ResolvedThemeMode;
106
+ declare function resolveThemeColorScheme(mode: ThemeMode, themes?: ThemePresets, fallback?: ThemeBaseMode): ThemeBaseMode;
80
107
  /** Fill missing slots of a custom accent via color-mix. */
81
- declare function normalizeAccentInput(input: AccentKey | CustomAccentInput, resolvedMode: ResolvedThemeMode): {
108
+ declare function normalizeAccentInput(input: AccentKey | CustomAccentInput, colorScheme: ThemeBaseMode): {
82
109
  key: AccentKey | "custom";
83
110
  palette: AccentPalette;
84
111
  };
@@ -100,7 +127,7 @@ interface ThemeProviderProps extends ThemeConfig {
100
127
  as?: keyof JSX.IntrinsicElements;
101
128
  className?: string;
102
129
  style?: React.CSSProperties;
103
- /** If set, theme state is persisted to localStorage under this key. */
130
+ /** If set, theme state and custom named themes are persisted to localStorage under this key. */
104
131
  storageKey?: string;
105
132
  /** Called whenever the resolved theme value changes. */
106
133
  onChange?: (value: ThemeValue) => void;
@@ -124,4 +151,4 @@ interface ThemeProviderProps extends ThemeConfig {
124
151
  */
125
152
  declare const ThemeProvider: React.FC<ThemeProviderProps>;
126
153
 
127
- export { ACCENT_PRESETS, ACCENT_PRESETS_DARK, type AccentKey, type AccentPalette, type CustomAccentInput, type DensityMode, FONT_STACKS, type FontConfig, type FontKey, type ResolvedThemeMode, type ThemeConfig, type ThemeMode, ThemeProvider, type ThemeProviderProps, type ThemeTokens, type ThemeValue, applyTheme, normalizeAccentInput, resolveThemeMode, useTheme, useThemeOptional };
154
+ export { ACCENT_PRESETS, ACCENT_PRESETS_DARK, type AccentKey, type AccentPalette, type BuiltInThemeMode, type CustomAccentInput, type DensityMode, FONT_STACKS, type FontConfig, type FontKey, type ResolvedThemeMode, type ThemeBaseMode, type ThemeConfig, type ThemeMode, type ThemePreset, type ThemePresets, ThemeProvider, type ThemeProviderProps, type ThemeTokens, type ThemeValue, applyTheme, normalizeAccentInput, resolveThemeColorScheme, resolveThemeMode, useTheme, useThemeOptional };
package/dist/Theme.js CHANGED
@@ -1 +1 @@
1
- export { ACCENT_PRESETS, ACCENT_PRESETS_DARK, FONT_STACKS, ThemeProvider, applyTheme, normalizeAccentInput, resolveThemeMode, useTheme, useThemeOptional } from './chunk-NN25YMOL.js';
1
+ export { ACCENT_PRESETS, ACCENT_PRESETS_DARK, FONT_STACKS, ThemeProvider, applyTheme, normalizeAccentInput, resolveThemeColorScheme, resolveThemeMode, useTheme, useThemeOptional } from './chunk-7NZ2A4MA.js';
@@ -0,0 +1,509 @@
1
+ /* ============ ThemePanel ============ */
2
+ .theme-panel {
3
+ width: min(100%, 340px);
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: var(--gap-3);
7
+ box-sizing: border-box;
8
+ padding: var(--gap-4);
9
+ border-radius: var(--r-xl);
10
+ color: var(--fg);
11
+ background: var(--bg);
12
+ box-shadow: var(--neu-shadow-lift);
13
+ }
14
+
15
+ .theme-panel.compact {
16
+ width: min(100%, 300px);
17
+ gap: var(--gap-2);
18
+ padding: var(--gap-3);
19
+ }
20
+
21
+ .theme-panel-head {
22
+ display: flex;
23
+ flex-direction: column;
24
+ gap: 4px;
25
+ }
26
+
27
+ .theme-panel-title {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ gap: 8px;
31
+ min-width: 0;
32
+ color: var(--fg);
33
+ font-size: 14px;
34
+ font-weight: 700;
35
+ }
36
+
37
+ .theme-panel-title svg {
38
+ flex: 0 0 auto;
39
+ color: var(--accent);
40
+ }
41
+
42
+ .theme-panel-title span {
43
+ min-width: 0;
44
+ overflow: hidden;
45
+ text-overflow: ellipsis;
46
+ white-space: nowrap;
47
+ }
48
+
49
+ .theme-panel-desc {
50
+ font-size: 12px;
51
+ color: var(--fg-muted);
52
+ }
53
+
54
+ .theme-panel-row {
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: 8px;
58
+ padding-top: var(--gap-3);
59
+ border-top: 1px solid var(--divider);
60
+ }
61
+
62
+ .theme-panel-head + .theme-panel-row,
63
+ .theme-panel-row:first-child {
64
+ border-top: none;
65
+ padding-top: 0;
66
+ }
67
+
68
+ .theme-panel-label {
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: space-between;
72
+ gap: 10px;
73
+ font-size: 12px;
74
+ font-weight: 600;
75
+ color: var(--fg);
76
+ }
77
+
78
+ .theme-panel-label > span:last-child:not(:first-child) {
79
+ min-width: 0;
80
+ max-width: 54%;
81
+ overflow: hidden;
82
+ text-overflow: ellipsis;
83
+ white-space: nowrap;
84
+ padding: 2px 8px;
85
+ border-radius: var(--r-pill);
86
+ color: var(--accent-ink);
87
+ background: var(--bg);
88
+ box-shadow: var(--neu-shadow-inset);
89
+ font-family: var(--font-mono);
90
+ font-size: 11px;
91
+ font-weight: 500;
92
+ }
93
+
94
+ .theme-panel-presets {
95
+ display: grid;
96
+ grid-template-columns: repeat(2, minmax(0, 1fr));
97
+ gap: var(--gap-2);
98
+ }
99
+
100
+ .theme-panel-preset-shell {
101
+ position: relative;
102
+ min-width: 0;
103
+ }
104
+
105
+ .theme-panel .theme-panel-preset.btn {
106
+ min-width: 0;
107
+ width: 100%;
108
+ height: auto;
109
+ min-height: 74px;
110
+ justify-content: stretch;
111
+ align-items: stretch;
112
+ flex-direction: column;
113
+ gap: 8px;
114
+ padding: 9px;
115
+ color: var(--fg-muted);
116
+ background: var(--bg);
117
+ box-shadow: var(--neu-shadow-control);
118
+ text-align: left;
119
+ white-space: normal;
120
+ transition:
121
+ color var(--dur-fast) var(--ease),
122
+ box-shadow var(--dur-fast) var(--ease),
123
+ transform var(--dur-fast) var(--ease);
124
+ }
125
+
126
+ .theme-panel .theme-panel-preset.btn:hover {
127
+ color: var(--fg);
128
+ box-shadow: var(--neu-shadow-panel);
129
+ transform: translateY(-1px);
130
+ }
131
+
132
+ .theme-panel .theme-panel-preset.btn.active {
133
+ color: var(--accent-ink);
134
+ box-shadow: var(--neu-shadow-inset), 0 0 0 1px var(--accent-glow);
135
+ transform: none;
136
+ }
137
+
138
+ .theme-panel .theme-panel-preset.btn.active:hover {
139
+ color: var(--accent-ink);
140
+ box-shadow: var(--neu-shadow-inset), 0 0 0 1px var(--accent-glow);
141
+ }
142
+
143
+ .theme-panel .theme-panel-preset-shell.deletable .theme-panel-preset.btn {
144
+ padding-right: 28px;
145
+ }
146
+
147
+ .theme-panel .theme-panel-preset-delete.btn {
148
+ position: absolute;
149
+ top: 6px;
150
+ right: 6px;
151
+ width: 22px;
152
+ height: 22px;
153
+ min-width: 22px;
154
+ padding: 0;
155
+ color: var(--fg-subtle);
156
+ background: var(--bg);
157
+ box-shadow: var(--neu-shadow-control);
158
+ opacity: 0;
159
+ transform: scale(0.92);
160
+ }
161
+
162
+ .theme-panel-preset-shell:hover .theme-panel-preset-delete.btn,
163
+ .theme-panel-preset-shell:focus-within .theme-panel-preset-delete.btn {
164
+ opacity: 1;
165
+ transform: scale(1);
166
+ }
167
+
168
+ .theme-panel .theme-panel-preset-delete.btn:hover {
169
+ box-shadow: var(--neu-shadow-inset);
170
+ }
171
+
172
+ .theme-panel-preset-ink {
173
+ display: grid;
174
+ grid-template-columns: 1fr 1fr 0.7fr;
175
+ gap: 4px;
176
+ width: 100%;
177
+ }
178
+
179
+ .theme-panel-preset-ink span {
180
+ height: 18px;
181
+ min-width: 0;
182
+ border-radius: var(--r-pill);
183
+ box-shadow: inset 0 0 0 1px var(--divider);
184
+ }
185
+
186
+ .theme-panel-preset-copy {
187
+ display: flex;
188
+ flex-direction: column;
189
+ gap: 2px;
190
+ min-width: 0;
191
+ width: 100%;
192
+ }
193
+
194
+ .theme-panel-preset-copy > span {
195
+ min-width: 0;
196
+ overflow: hidden;
197
+ text-overflow: ellipsis;
198
+ white-space: nowrap;
199
+ color: inherit;
200
+ font-size: 12px;
201
+ font-weight: 700;
202
+ }
203
+
204
+ .theme-panel-preset-copy small {
205
+ min-width: 0;
206
+ overflow: hidden;
207
+ text-overflow: ellipsis;
208
+ white-space: nowrap;
209
+ color: var(--fg-subtle);
210
+ font-size: 10px;
211
+ font-weight: 500;
212
+ }
213
+
214
+ .theme-panel-swatches {
215
+ display: flex;
216
+ align-items: center;
217
+ flex-wrap: wrap;
218
+ gap: 8px;
219
+ }
220
+
221
+ .theme-panel .theme-panel-swatch.btn {
222
+ width: 28px;
223
+ height: 28px;
224
+ min-width: 28px;
225
+ padding: 0;
226
+ border-radius: var(--r-pill);
227
+ box-shadow: var(--neu-shadow-subtle);
228
+ }
229
+
230
+ .theme-panel-swatch.active {
231
+ box-shadow: var(--neu-shadow-inset), 0 0 0 2px var(--accent-glow);
232
+ }
233
+
234
+ .theme-panel .radio-group.segmented {
235
+ width: 100%;
236
+ }
237
+
238
+ .theme-panel .btn.block {
239
+ margin-top: var(--gap-1);
240
+ }
241
+
242
+ .theme-panel-create {
243
+ display: flex;
244
+ flex-direction: column;
245
+ gap: 10px;
246
+ padding: 10px;
247
+ border-radius: var(--r-md);
248
+ background: var(--bg);
249
+ box-shadow: var(--neu-shadow-inset);
250
+ }
251
+
252
+ .theme-panel-create-head {
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: space-between;
256
+ gap: 10px;
257
+ }
258
+
259
+ .theme-panel-create-head > div {
260
+ min-width: 0;
261
+ display: flex;
262
+ flex-direction: column;
263
+ gap: 2px;
264
+ }
265
+
266
+ .theme-panel-create-head span {
267
+ color: var(--fg);
268
+ font-size: 12px;
269
+ font-weight: 700;
270
+ }
271
+
272
+ .theme-panel-create-head small {
273
+ min-width: 0;
274
+ color: var(--fg-subtle);
275
+ font-family: var(--font-mono);
276
+ font-size: 10px;
277
+ overflow: hidden;
278
+ text-overflow: ellipsis;
279
+ white-space: nowrap;
280
+ }
281
+
282
+ .theme-panel-create-field {
283
+ min-width: 0;
284
+ display: flex;
285
+ flex-direction: column;
286
+ gap: 6px;
287
+ color: var(--fg-subtle);
288
+ font-family: var(--font-mono);
289
+ font-size: 10px;
290
+ }
291
+
292
+ .theme-panel-create-field .radio-group.segmented {
293
+ width: 100%;
294
+ }
295
+
296
+ .theme-panel-create-mode.radio-group.segmented {
297
+ width: 100%;
298
+ }
299
+
300
+ .theme-panel-create-grid {
301
+ display: grid;
302
+ grid-template-columns: repeat(2, minmax(0, 1fr));
303
+ gap: 8px;
304
+ }
305
+
306
+ .theme-panel-create-grid .cp-trigger,
307
+ .theme-panel-create-grid .cp-custom-trigger {
308
+ width: 100%;
309
+ }
310
+
311
+ .theme-panel-create-sliders {
312
+ display: flex;
313
+ flex-direction: column;
314
+ gap: 8px;
315
+ padding: 2px 0;
316
+ }
317
+
318
+ .theme-panel-shadow {
319
+ gap: 7px;
320
+ }
321
+
322
+ .theme-panel-create-preview {
323
+ min-height: 36px;
324
+ display: flex;
325
+ align-items: center;
326
+ justify-content: space-between;
327
+ gap: 10px;
328
+ padding: 7px 9px;
329
+ border-radius: var(--preview-radius, var(--r-md));
330
+ color: var(--preview-fg, var(--fg));
331
+ background: var(--preview-bg, var(--bg));
332
+ box-shadow:
333
+ calc(var(--shadow-offset) * 0.45 * var(--preview-shadow-scale, 1)) calc(var(--shadow-offset) * 0.45 * var(--preview-shadow-scale, 1)) calc(var(--shadow-blur) * 0.55 * var(--preview-shadow-scale, 1)) var(--preview-shadow-dark, var(--shadow-dark)),
334
+ calc(var(--shadow-offset) * -0.45 * var(--preview-shadow-scale, 1)) calc(var(--shadow-offset) * -0.45 * var(--preview-shadow-scale, 1)) calc(var(--shadow-blur) * 0.55 * var(--preview-shadow-scale, 1)) var(--preview-shadow-light, var(--shadow-light));
335
+ font-family: var(--preview-font, var(--font-sans));
336
+ font-size: 12px;
337
+ font-weight: 700;
338
+ }
339
+
340
+ .theme-panel-create-preview-label {
341
+ min-width: 0;
342
+ display: inline-flex;
343
+ align-items: center;
344
+ gap: 7px;
345
+ color: inherit;
346
+ }
347
+
348
+ .theme-panel-create-preview-label > span {
349
+ min-width: 0;
350
+ overflow: hidden;
351
+ text-overflow: ellipsis;
352
+ white-space: nowrap;
353
+ }
354
+
355
+ .theme-panel-create-preview i {
356
+ flex: 0 0 auto;
357
+ width: 20px;
358
+ height: 20px;
359
+ border-radius: var(--r-pill);
360
+ background: var(--preview-accent, var(--accent));
361
+ box-shadow:
362
+ inset 1px 1px 2px color-mix(in oklch, var(--preview-accent, var(--accent)) 50%, white),
363
+ 0 0 0 4px var(--preview-accent-glow, var(--accent-glow));
364
+ }
365
+
366
+ .theme-panel-create-actions {
367
+ display: grid;
368
+ grid-template-columns: 0.85fr 1fr;
369
+ gap: 8px;
370
+ }
371
+
372
+ .theme-panel-advanced {
373
+ display: flex;
374
+ flex-direction: column;
375
+ gap: 12px;
376
+ padding-top: 2px;
377
+ }
378
+
379
+ .theme-panel-advanced-section {
380
+ display: flex;
381
+ flex-direction: column;
382
+ gap: 8px;
383
+ padding-top: 10px;
384
+ border-top: 1px solid var(--divider);
385
+ }
386
+
387
+ .theme-panel-advanced-section.compact {
388
+ padding-top: 0;
389
+ border-top: none;
390
+ }
391
+
392
+ .theme-panel-advanced-title {
393
+ display: flex;
394
+ align-items: baseline;
395
+ justify-content: space-between;
396
+ gap: 8px;
397
+ }
398
+
399
+ .theme-panel-advanced-title span {
400
+ min-width: 0;
401
+ color: var(--fg);
402
+ font-size: 11px;
403
+ font-weight: 700;
404
+ }
405
+
406
+ .theme-panel-advanced-title small {
407
+ min-width: 0;
408
+ color: var(--fg-subtle);
409
+ font-family: var(--font-mono);
410
+ font-size: 9px;
411
+ overflow: hidden;
412
+ text-overflow: ellipsis;
413
+ white-space: nowrap;
414
+ }
415
+
416
+ .theme-panel-token-grid {
417
+ display: flex;
418
+ flex-direction: column;
419
+ gap: 7px;
420
+ }
421
+
422
+ .theme-panel-token-field {
423
+ min-width: 0;
424
+ display: grid;
425
+ grid-template-columns: 88px minmax(0, 1fr);
426
+ gap: 8px;
427
+ align-items: center;
428
+ }
429
+
430
+ .theme-panel-token-label {
431
+ min-width: 0;
432
+ display: flex;
433
+ flex-direction: column;
434
+ gap: 2px;
435
+ }
436
+
437
+ .theme-panel-token-label span {
438
+ color: var(--fg-muted);
439
+ font-size: 10px;
440
+ font-weight: 650;
441
+ white-space: nowrap;
442
+ }
443
+
444
+ .theme-panel-token-label code {
445
+ color: var(--fg-subtle);
446
+ font-family: var(--font-mono);
447
+ font-size: 9px;
448
+ overflow: hidden;
449
+ text-overflow: ellipsis;
450
+ white-space: nowrap;
451
+ }
452
+
453
+ .theme-panel-token-input {
454
+ min-width: 0;
455
+ display: grid;
456
+ grid-template-columns: 24px minmax(0, 1fr);
457
+ gap: 7px;
458
+ align-items: center;
459
+ }
460
+
461
+ .theme-panel-token-field.scale {
462
+ align-items: start;
463
+ }
464
+
465
+ .theme-panel-token-scale {
466
+ min-width: 0;
467
+ display: grid;
468
+ grid-template-columns: 64px minmax(0, 1fr);
469
+ gap: 7px;
470
+ align-items: center;
471
+ }
472
+
473
+ .theme-panel-token-picker {
474
+ width: 24px;
475
+ height: 24px;
476
+ }
477
+
478
+ .theme-panel-token-picker .cp-custom-trigger {
479
+ width: 24px;
480
+ height: 24px;
481
+ display: block;
482
+ border-radius: 7px;
483
+ }
484
+
485
+ .theme-panel-token-swatch {
486
+ display: block;
487
+ width: 24px;
488
+ height: 24px;
489
+ border-radius: 7px;
490
+ box-shadow: var(--neu-shadow-inset), inset 0 0 0 1px var(--border);
491
+ transition:
492
+ box-shadow var(--dur-fast) var(--ease),
493
+ transform var(--dur-fast) var(--ease);
494
+ }
495
+
496
+ .theme-panel-token-picker .cp-custom-trigger:hover .theme-panel-token-swatch {
497
+ box-shadow: var(--neu-shadow-control), inset 0 0 0 1px var(--border);
498
+ transform: translateY(-1px);
499
+ }
500
+
501
+ .theme-panel-token-input .input-wrap,
502
+ .theme-panel-create-field .input-wrap {
503
+ min-width: 0;
504
+ }
505
+
506
+ .theme-panel-token-input .input {
507
+ font-family: var(--font-mono);
508
+ font-size: 11px;
509
+ }
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var chunkLFTCK2VM_cjs = require('./chunk-LFTCK2VM.cjs');
4
+ require('./chunk-ZWCDB5PP.cjs');
5
+ require('./chunk-6EOSMK34.cjs');
6
+ require('./chunk-N2COYOXE.cjs');
7
+ require('./chunk-6GQPF3EI.cjs');
8
+ require('./chunk-VSUMJX6Z.cjs');
9
+ require('./chunk-MYHBC3HA.cjs');
10
+ require('./chunk-YB3IWIOJ.cjs');
11
+ require('./chunk-VAXWWJJP.cjs');
12
+ require('./chunk-5NFSDFBB.cjs');
13
+ require('./chunk-2ZADGBUN.cjs');
14
+ require('./chunk-6LARTGLP.cjs');
15
+
16
+
17
+
18
+ Object.defineProperty(exports, "THEME_PANEL_DEFAULT_PRESET_OPTIONS", {
19
+ enumerable: true,
20
+ get: function () { return chunkLFTCK2VM_cjs.THEME_PANEL_DEFAULT_PRESET_OPTIONS; }
21
+ });
22
+ Object.defineProperty(exports, "THEME_PANEL_DEFAULT_THEME_PRESETS", {
23
+ enumerable: true,
24
+ get: function () { return chunkLFTCK2VM_cjs.THEME_PANEL_DEFAULT_THEME_PRESETS; }
25
+ });
26
+ Object.defineProperty(exports, "ThemePanel", {
27
+ enumerable: true,
28
+ get: function () { return chunkLFTCK2VM_cjs.ThemePanel; }
29
+ });