@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
@@ -20,42 +20,52 @@
20
20
 
21
21
  /* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
22
22
  --d: 1;
23
+ --shadow-scale: 1;
24
+ --shadow-float-scale: 1;
23
25
 
24
- --shadow-blur: calc(16px * var(--d));
25
- --shadow-offset: calc(6px * var(--d));
26
- --shadow-inset-blur: calc(10px * var(--d));
27
- --shadow-inset-offset: calc(4px * var(--d));
26
+ --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
27
+ --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
28
+ --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
29
+ --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
28
30
 
29
- --neu-out:
31
+ --neu-shadow-panel:
30
32
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
31
33
  calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
32
34
 
33
- --neu-out-sm:
35
+ --neu-shadow-control:
34
36
  calc(var(--shadow-offset) * 0.5) calc(var(--shadow-offset) * 0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-dark),
35
37
  calc(var(--shadow-offset) * -0.5) calc(var(--shadow-offset) * -0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-light);
36
38
 
37
- --neu-out-lg:
39
+ --neu-shadow-lift:
38
40
  calc(var(--shadow-offset) * 1.6) calc(var(--shadow-offset) * 1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-dark),
39
41
  calc(var(--shadow-offset) * -1.6) calc(var(--shadow-offset) * -1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-light);
40
42
 
41
- --neu-in:
43
+ --neu-shadow-inset-strong:
42
44
  inset var(--shadow-inset-offset) var(--shadow-inset-offset) var(--shadow-inset-blur) var(--shadow-dark),
43
45
  inset calc(var(--shadow-inset-offset) * -1) calc(var(--shadow-inset-offset) * -1) var(--shadow-inset-blur) var(--shadow-light);
44
46
 
45
- --neu-in-sm:
47
+ --neu-shadow-inset:
46
48
  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),
47
49
  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);
48
50
 
49
- --neu-flat:
51
+ --neu-shadow-subtle:
50
52
  1px 1px 2px var(--shadow-dark),
51
53
  -1px -1px 2px var(--shadow-light);
52
54
 
53
55
  /* Floating-overlay elevation.
54
56
  No top-left highlight — there's no continuous surface beneath an overlay
55
57
  panel, so the neumorphic light-reflection metaphor would read as a halo. */
56
- --neu-float:
57
- 0 calc(var(--shadow-offset) * 1.8) calc(var(--shadow-blur) * 2.2) var(--shadow-dark),
58
- 0 calc(var(--shadow-offset) * 0.4) calc(var(--shadow-blur) * 0.7) var(--shadow-dark);
58
+ --neu-shadow-float:
59
+ 0 calc(var(--shadow-offset) * 1.8 * var(--shadow-float-scale)) calc(var(--shadow-blur) * 2.2 * var(--shadow-float-scale)) var(--shadow-dark),
60
+ 0 calc(var(--shadow-offset) * 0.4 * var(--shadow-float-scale)) calc(var(--shadow-blur) * 0.7 * var(--shadow-float-scale)) var(--shadow-dark);
61
+
62
+ --neu-out: var(--neu-shadow-panel);
63
+ --neu-out-sm: var(--neu-shadow-control);
64
+ --neu-out-lg: var(--neu-shadow-lift);
65
+ --neu-in: var(--neu-shadow-inset-strong);
66
+ --neu-in-sm: var(--neu-shadow-inset);
67
+ --neu-flat: var(--neu-shadow-subtle);
68
+ --neu-float: var(--neu-shadow-float);
59
69
 
60
70
  /* ---- Accent (default sky) ---- */
61
71
  --accent: oklch(68% 0.14 235);
@@ -89,7 +99,13 @@
89
99
 
90
100
  /* ---- Control sizes (density) ---- */
91
101
  --ctrl-h: 40px;
102
+ --ctrl-h-sm: 30px;
103
+ --ctrl-h-lg: 52px;
104
+ --field-h-sm: 32px;
105
+ --field-h-lg: 48px;
92
106
  --ctrl-pad-x: 18px;
107
+ --ctrl-pad-x-sm: 12px;
108
+ --ctrl-pad-x-lg: 24px;
93
109
 
94
110
  /* ---- Type ---- */
95
111
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
@@ -97,6 +113,11 @@
97
113
  "Noto Sans CJK SC", sans-serif;
98
114
  --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Consolas, monospace;
99
115
  --font-display: "SF Pro Display", var(--font-sans);
116
+ --fs-xs: 11px;
117
+ --fs-sm: 12px;
118
+ --fs-md: 13px;
119
+ --fs-lg: 14px;
120
+ --fs-xl: 15px;
100
121
 
101
122
  /* ---- Motion ---- */
102
123
  --ease: cubic-bezier(0.22, 0.61, 0.36, 1);
@@ -123,13 +144,17 @@
123
144
  --shadow-dark: rgba(0, 0, 0, 0.55);
124
145
  --shadow-light: rgba(130, 145, 180, 0.06);
125
146
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
126
- --shadow-offset: calc(4px * var(--d));
127
- --shadow-blur: calc(10px * var(--d));
128
- --shadow-inset-offset: calc(3px * var(--d));
129
- --shadow-inset-blur: calc(7px * var(--d));
147
+ --shadow-offset: calc(4px * var(--d) * var(--shadow-scale));
148
+ --shadow-blur: calc(10px * var(--d) * var(--shadow-scale));
149
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
150
+ --shadow-inset-blur: calc(7px * var(--d) * var(--shadow-scale));
130
151
  --accent-soft: oklch(35% 0.06 235);
131
152
  --accent-ink: oklch(82% 0.09 235);
132
153
  --accent-glow: oklch(68% 0.14 235 / 0.18);
154
+ --info: oklch(78% 0.12 235);
155
+ --success: oklch(78% 0.14 150);
156
+ --warning: oklch(82% 0.14 75);
157
+ --danger: oklch(76% 0.16 25);
133
158
  }
134
159
 
135
160
  /* 深色模式的 accent-glow 统一降低强度,避免按钮外圈过亮 */
package/dist/tokens.css CHANGED
@@ -20,42 +20,52 @@
20
20
 
21
21
  /* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
22
22
  --d: 1;
23
+ --shadow-scale: 1;
24
+ --shadow-float-scale: 1;
23
25
 
24
- --shadow-blur: calc(16px * var(--d));
25
- --shadow-offset: calc(6px * var(--d));
26
- --shadow-inset-blur: calc(10px * var(--d));
27
- --shadow-inset-offset: calc(4px * var(--d));
26
+ --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
27
+ --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
28
+ --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
29
+ --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
28
30
 
29
- --neu-out:
31
+ --neu-shadow-panel:
30
32
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
31
33
  calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
32
34
 
33
- --neu-out-sm:
35
+ --neu-shadow-control:
34
36
  calc(var(--shadow-offset) * 0.5) calc(var(--shadow-offset) * 0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-dark),
35
37
  calc(var(--shadow-offset) * -0.5) calc(var(--shadow-offset) * -0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-light);
36
38
 
37
- --neu-out-lg:
39
+ --neu-shadow-lift:
38
40
  calc(var(--shadow-offset) * 1.6) calc(var(--shadow-offset) * 1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-dark),
39
41
  calc(var(--shadow-offset) * -1.6) calc(var(--shadow-offset) * -1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-light);
40
42
 
41
- --neu-in:
43
+ --neu-shadow-inset-strong:
42
44
  inset var(--shadow-inset-offset) var(--shadow-inset-offset) var(--shadow-inset-blur) var(--shadow-dark),
43
45
  inset calc(var(--shadow-inset-offset) * -1) calc(var(--shadow-inset-offset) * -1) var(--shadow-inset-blur) var(--shadow-light);
44
46
 
45
- --neu-in-sm:
47
+ --neu-shadow-inset:
46
48
  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),
47
49
  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);
48
50
 
49
- --neu-flat:
51
+ --neu-shadow-subtle:
50
52
  1px 1px 2px var(--shadow-dark),
51
53
  -1px -1px 2px var(--shadow-light);
52
54
 
53
55
  /* Floating-overlay elevation.
54
56
  No top-left highlight — there's no continuous surface beneath an overlay
55
57
  panel, so the neumorphic light-reflection metaphor would read as a halo. */
56
- --neu-float:
57
- 0 calc(var(--shadow-offset) * 1.8) calc(var(--shadow-blur) * 2.2) var(--shadow-dark),
58
- 0 calc(var(--shadow-offset) * 0.4) calc(var(--shadow-blur) * 0.7) var(--shadow-dark);
58
+ --neu-shadow-float:
59
+ 0 calc(var(--shadow-offset) * 1.8 * var(--shadow-float-scale)) calc(var(--shadow-blur) * 2.2 * var(--shadow-float-scale)) var(--shadow-dark),
60
+ 0 calc(var(--shadow-offset) * 0.4 * var(--shadow-float-scale)) calc(var(--shadow-blur) * 0.7 * var(--shadow-float-scale)) var(--shadow-dark);
61
+
62
+ --neu-out: var(--neu-shadow-panel);
63
+ --neu-out-sm: var(--neu-shadow-control);
64
+ --neu-out-lg: var(--neu-shadow-lift);
65
+ --neu-in: var(--neu-shadow-inset-strong);
66
+ --neu-in-sm: var(--neu-shadow-inset);
67
+ --neu-flat: var(--neu-shadow-subtle);
68
+ --neu-float: var(--neu-shadow-float);
59
69
 
60
70
  /* ---- Accent (default sky) ---- */
61
71
  --accent: oklch(68% 0.14 235);
@@ -89,7 +99,13 @@
89
99
 
90
100
  /* ---- Control sizes (density) ---- */
91
101
  --ctrl-h: 40px;
102
+ --ctrl-h-sm: 30px;
103
+ --ctrl-h-lg: 52px;
104
+ --field-h-sm: 32px;
105
+ --field-h-lg: 48px;
92
106
  --ctrl-pad-x: 18px;
107
+ --ctrl-pad-x-sm: 12px;
108
+ --ctrl-pad-x-lg: 24px;
93
109
 
94
110
  /* ---- Type ---- */
95
111
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
@@ -97,6 +113,11 @@
97
113
  "Noto Sans CJK SC", sans-serif;
98
114
  --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Consolas, monospace;
99
115
  --font-display: "SF Pro Display", var(--font-sans);
116
+ --fs-xs: 11px;
117
+ --fs-sm: 12px;
118
+ --fs-md: 13px;
119
+ --fs-lg: 14px;
120
+ --fs-xl: 15px;
100
121
 
101
122
  /* ---- Motion ---- */
102
123
  --ease: cubic-bezier(0.22, 0.61, 0.36, 1);
@@ -123,13 +144,17 @@
123
144
  --shadow-dark: rgba(0, 0, 0, 0.55);
124
145
  --shadow-light: rgba(130, 145, 180, 0.06);
125
146
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
126
- --shadow-offset: calc(4px * var(--d));
127
- --shadow-blur: calc(10px * var(--d));
128
- --shadow-inset-offset: calc(3px * var(--d));
129
- --shadow-inset-blur: calc(7px * var(--d));
147
+ --shadow-offset: calc(4px * var(--d) * var(--shadow-scale));
148
+ --shadow-blur: calc(10px * var(--d) * var(--shadow-scale));
149
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
150
+ --shadow-inset-blur: calc(7px * var(--d) * var(--shadow-scale));
130
151
  --accent-soft: oklch(35% 0.06 235);
131
152
  --accent-ink: oklch(82% 0.09 235);
132
153
  --accent-glow: oklch(68% 0.14 235 / 0.18);
154
+ --info: oklch(78% 0.12 235);
155
+ --success: oklch(78% 0.14 150);
156
+ --warning: oklch(82% 0.14 75);
157
+ --danger: oklch(76% 0.16 25);
133
158
  }
134
159
 
135
160
  /* 深色模式的 accent-glow 统一降低强度,避免按钮外圈过亮 */
@@ -22,12 +22,13 @@ import { Alert } from "@fangxinyan/lumina";
22
22
  <Alert tone="info" closable>仅一行的简短提示</Alert>
23
23
  ```
24
24
 
25
- ### 隐藏图标
25
+ ### 图标控制
26
26
 
27
- showIcon={false} 可隐藏左侧语义图标,文本更紧凑。
27
+ showIcon={false} 可隐藏左侧语义图标;icon 可传 IconName 或 ReactNode。
28
28
 
29
29
  ```tsx
30
30
  <Alert tone="info" showIcon={false}>纯文本提示</Alert>
31
+ <Alert icon={<img src={iconUrl} alt="" />}>自定义图标</Alert>
31
32
  ```
32
33
 
33
34
  ### 自定义操作区
@@ -53,7 +54,7 @@ action 插槽可以放置按钮等操作元素,位于内容与关闭按钮之间
53
54
  | --- | --- | --- | --- |
54
55
  | tone | `"info" | "success" | "warning" | "danger"` | `"info"` | 语气 |
55
56
  | title | `ReactNode` | — | 标题 |
56
- | icon | `IconName` | — | 自定义图标 |
57
+ | icon | `IconName | ReactNode` | — | 自定义图标,可传内置图标名或自定义节点 |
57
58
  | showIcon | `boolean` | `true` | 是否显示语义图标 |
58
59
  | action | `ReactNode` | — | 右侧操作区(如按钮) |
59
60
  | closable | `boolean` | `false` | 可关闭 |
@@ -23,12 +23,13 @@ import { Button } from "@fangxinyan/lumina";
23
23
 
24
24
  ### 图标按钮
25
25
 
26
- icon 在前,trailingIcon 在后。
26
+ icon 在前,trailingIcon 在后,既支持内置 IconName,也支持外部 ReactNode。
27
27
 
28
28
  ```tsx
29
29
  <Button variant="primary" icon="sparkle">新建</Button>
30
30
  <Button icon="download">下载</Button>
31
31
  <Button trailingIcon="arrowRight">下一步</Button>
32
+ <Button icon={<img src={iconUrl} alt="" />}>外部图标</Button>
32
33
  ```
33
34
 
34
35
  ### 加载与禁用
@@ -77,8 +78,8 @@ Button 在只有 icon 时自动呈现为方形按钮,常配合 tip 使用。
77
78
  | --- | --- | --- | --- |
78
79
  | variant | `"default" | "primary" | "ghost" | "danger"` | `"default"` | 按钮风格 |
79
80
  | size | `"sm" | "md" | "lg"` | `"md"` | 按钮尺寸 |
80
- | icon | `IconName` | — | 前置图标 |
81
- | trailingIcon | `IconName` | — | 后置图标 |
81
+ | icon | `IconName | ReactNode` | — | 前置图标,可传内置图标名或自定义节点 |
82
+ | trailingIcon | `IconName | ReactNode` | — | 后置图标,可传内置图标名或自定义节点 |
82
83
  | iconOnly | `boolean` | `自动` | 渲染为纯图标方形按钮 |
83
84
  | tip | `string` | — | 原生悬浮提示,常用于纯图标按钮 |
84
85
  | loading | `boolean` | `false` | 加载态 |
@@ -12,6 +12,8 @@ import { Cascader } from "@fangxinyan/lumina";
12
12
 
13
13
  ### 基础用法
14
14
 
15
+ option.icon 支持 IconName 或 ReactNode。
16
+
15
17
  ```tsx
16
18
  <Cascader options={regions} value={addr} onChange={setAddr} />
17
19
  ```
@@ -38,6 +40,7 @@ showSearch 开启路径搜索,allowClear 提供一键清空,popupClassName 可
38
40
  | Prop | 类型 | 默认 | 说明 |
39
41
  | --- | --- | --- | --- |
40
42
  | options \* | `CascaderOption[]` | — | 层级选项树 |
43
+ | options[].icon | `IconName | ReactNode` | — | 选项前置图标,可传内置图标名或自定义节点 |
41
44
  | value / defaultValue | `string[]` | — | 受控/初始路径 |
42
45
  | onChange | `(path: string[]) => void` | — | 选择叶子时触发 |
43
46
  | placeholder | `string` | — | 占位文案 |
@@ -5,7 +5,7 @@
5
5
  ## 导入
6
6
 
7
7
  ```tsx
8
- import { Image, ImageGrid } from "@fangxinyan/lumina";
8
+ import { Image, ImageGrid, SpriteImage, LayeredImage } from "@fangxinyan/lumina";
9
9
  ```
10
10
 
11
11
  ## 示例
@@ -16,10 +16,43 @@ import { Image, ImageGrid } from "@fangxinyan/lumina";
16
16
  <Image src={url} width={240} height={160} />
17
17
  ```
18
18
 
19
+ ### 图标 / 原始资源
20
+
21
+ variant="icon" 会默认去掉外层 padding,适合 1:1 装备、物品、头像缩略图;variant="raw" 保留原始图片比例。
22
+
23
+ ```tsx
24
+ <Image variant="icon" src={iconUrl} width={56} height={56} preview={false} />
25
+ <Image variant="raw" src={bannerUrl} width={220} height={84} objectFit="contain" />
26
+ ```
27
+
28
+ ### Sprite 裁剪
29
+
30
+ SpriteImage 用 background-position 裁剪同一张雪碧图,适合 url + x/y/width/height 形式的图标资源。
31
+
32
+ ```tsx
33
+ <SpriteImage src={sheetUrl} sprite={{ x: 32, y: 0, width: 32, height: 32 }} />
34
+ ```
35
+
36
+ ### 多图层图片
37
+
38
+ LayeredImage 将多张图片叠在同一个盒子里,适合头像 + 头像框、底图 + 标记等资产。
39
+
40
+ ```tsx
41
+ <LayeredImage
42
+ width={72}
43
+ height={72}
44
+ layers={[
45
+ { src: headUrl, fit: "cover" },
46
+ { src: frameUrl },
47
+ ]}
48
+ />
49
+ ```
50
+
19
51
  ### 图片组
20
52
 
21
53
  ```tsx
22
54
  <ImageGrid images={images} />
55
+ <ImageGrid images={icons} imageProps={{ variant: "icon", preview: false }} />
23
56
  ```
24
57
 
25
58
  ## API
@@ -30,9 +63,47 @@ import { Image, ImageGrid } from "@fangxinyan/lumina";
30
63
  | --- | --- | --- | --- |
31
64
  | src | `string` | — | 图片 URL |
32
65
  | width / height | `number | string` | — | 尺寸 |
66
+ | variant | `"framed" | "raw" | "icon"` | `"framed"` | 视觉形态 |
67
+ | frame | `boolean` | `framed 时 true` | 是否保留内层凹陷 frame |
68
+ | padding | `number | string` | — | 外层留白,raw/icon 默认 0 |
69
+ | objectFit / objectPosition | `CSSProperties` | — | 底层 img 的 object-fit / object-position |
33
70
  | preview | `boolean` | `true` | 支持点击全屏预览 |
34
71
  | hover | `boolean` | `true` | 悬浮放大 |
35
72
  | placeholder | `ReactNode` | — | 占位/错误时内容 |
73
+ | imgProps | `ImgHTMLAttributes` | — | 透传到底层 img 的属性 |
74
+
75
+
76
+ **ImageGrid**
77
+
78
+ | Prop | 类型 | 默认 | 说明 |
79
+ | --- | --- | --- | --- |
80
+ | images \* | `ImageGridItem[]` | — | 图片项数组,单项也可覆盖 Image props |
81
+ | columns | `number` | — | 固定列数,不传则自动填充 |
82
+ | itemHeight | `number` | `130` | 默认图片高度 |
83
+ | minItemWidth | `number | string` | `160` | 自动填充时的最小列宽 |
84
+ | gap | `number | string` | `14` | 网格间距 |
85
+ | imageProps | `ImageProps` | — | 批量传给每个 Image 的属性 |
86
+
87
+
88
+ **SpriteImage**
89
+
90
+ | Prop | 类型 | 默认 | 说明 |
91
+ | --- | --- | --- | --- |
92
+ | src \* | `string` | — | sprite sheet 图片 URL |
93
+ | sprite \* | `{ x; y; width; height }` | — | 裁剪区域 |
94
+ | width / height | `number | string` | — | 渲染尺寸,默认使用 sprite 尺寸 |
95
+ | scale | `number` | `1` | 未指定 width/height 时的缩放倍数 |
96
+ | backgroundSize | `string` | — | 自定义 background-size |
97
+ | variant / frame / padding | `ImageVariant / boolean / number` | — | 同 Image 的媒体外观控制 |
98
+
99
+
100
+ **LayeredImage**
101
+
102
+ | Prop | 类型 | 默认 | 说明 |
103
+ | --- | --- | --- | --- |
104
+ | layers \* | `LayeredImageLayer[]` | — | 按顺序叠放的图片层 |
105
+ | width / height | `number | string` | — | 容器尺寸 |
106
+ | variant / frame / padding | `ImageVariant / boolean / number` | — | 同 Image 的媒体外观控制 |
36
107
 
37
108
 
38
109
  ---
@@ -24,10 +24,11 @@ const [v, setV] = useState("");
24
24
 
25
25
  ### 前后置图标
26
26
 
27
- leadingIcon / trailingIcon。
27
+ leadingIcon / trailingIcon 支持内置 IconName 或外部 ReactNode。
28
28
 
29
29
  ```tsx
30
30
  <Input placeholder="搜索..." leadingIcon="search" />
31
+ <Input placeholder="物品名" leadingIcon={<img src={iconUrl} alt="" />} />
31
32
  ```
32
33
 
33
34
  ### Input.Password
@@ -106,7 +107,7 @@ Input.TextArea 与 Textarea 使用同一套多行输入能力,也支持 allowCle
106
107
  | onChange | `(event) => void` | — | 变更回调,传入 React 原生事件 |
107
108
  | onValueChange | `(value: string, event) => void` | — | 值回调便捷写法 |
108
109
  | placeholder | `string` | — | 占位文案 |
109
- | leadingIcon / trailingIcon | `IconName` | — | 前/后置图标 |
110
+ | leadingIcon / trailingIcon | `IconName | ReactNode` | — | 前/后置图标,可传内置图标名或自定义节点 |
110
111
  | prefix | `ReactNode` | — | 左侧内嵌内容(在 leadingIcon 之后) |
111
112
  | suffix | `ReactNode` | — | 右侧内嵌内容(在 trailingIcon 之前) |
112
113
  | allowClear | `boolean` | `false` | 显示内置的清除按钮 |
@@ -29,7 +29,7 @@ multiple + Tag 形式呈现已选项。
29
29
 
30
30
  ### 搜索过滤
31
31
 
32
- searchable + clearable + 选项 icon/description。
32
+ searchable + clearable + 选项 icon/description。icon 支持 IconName 或 ReactNode。
33
33
 
34
34
  ```tsx
35
35
  <Select searchable clearable
@@ -110,7 +110,7 @@ loading 时显示 spinner,emptyContent 自定义空态。
110
110
  | --- | --- | --- | --- |
111
111
  | value \* | `T` | — | 值 |
112
112
  | label | `ReactNode` | — | 显示 |
113
- | icon | `IconName` | — | 前置图标 |
113
+ | icon | `IconName | ReactNode` | — | 前置图标,可传内置图标名或自定义节点 |
114
114
  | description | `ReactNode` | — | 次要描述 |
115
115
  | disabled | `boolean` | `false` | 禁用项 |
116
116
 
@@ -0,0 +1,90 @@
1
+ # Surface 背景面
2
+
3
+ > 主题感知的背景承载容器,用于给特殊色调内容提供正确的拟态 token 语境。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Surface, SURFACE_THEME_PRESETS } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础承载
14
+
15
+ 默认继承外部主题,只提供一片稳定的拟态背景。
16
+
17
+ ```tsx
18
+ <Surface padding="lg" radius="xl">
19
+ <Card title="运行概览" description="Surface 负责外部背景,Card 负责信息分组">
20
+ <Button variant="primary">开始</Button>
21
+ </Card>
22
+ </Surface>
23
+ ```
24
+
25
+ ### 内置背景预设
26
+
27
+ preset 会建立一套局部 ThemeProvider,子组件和 useTheme 都处在这套背景 token 下。
28
+
29
+ ```tsx
30
+ <Surface preset="graphite" padding="lg" radius="xl">
31
+ <Button variant="primary">深色面板</Button>
32
+ </Surface>
33
+
34
+ <Surface preset="porcelain" padding="lg" radius="xl">
35
+ <Input placeholder="清亮浅色面板" />
36
+ </Surface>
37
+ ```
38
+
39
+ ### 背景语义
40
+
41
+ tone 只切换背景槽位;适合在同一主题里区分基底、凸起、凹陷和强调底。
42
+
43
+ ```tsx
44
+ <Surface tone="base">base</Surface>
45
+ <Surface tone="raised">raised</Surface>
46
+ <Surface tone="sunken">sunken</Surface>
47
+ <Surface tone="accent">accent</Surface>
48
+ ```
49
+
50
+ ### 自定义局部主题
51
+
52
+ 可直接传 mode、accent、tokens 等主题参数。themeRadius 控制子树 token, radius 控制 Surface 自身圆角。
53
+
54
+ ```tsx
55
+ <Surface
56
+ mode="dark"
57
+ accent="mint"
58
+ themeRadius={18}
59
+ tokens={{
60
+ bg: "#171d20",
61
+ "bg-raised": "#20282c",
62
+ "bg-sunken": "#101517",
63
+ }}
64
+ >
65
+ <Card>...</Card>
66
+ </Surface>
67
+ ```
68
+
69
+ ## API
70
+
71
+ **Surface**
72
+
73
+ | Prop | 类型 | 默认 | 说明 |
74
+ | --- | --- | --- | --- |
75
+ | preset | `"inherit" | "mist" | "porcelain" | "graphite" | "ember"` | `"inherit"` | 内置局部背景预设 |
76
+ | tone | `"base" | "raised" | "sunken" | "accent"` | `"base"` | 可见背景槽位 |
77
+ | variant | `"plain" | "raised" | "sunken" | "floating"` | `"plain"` | Surface 自身拟态层级 |
78
+ | padding | `"none" | "sm" | "md" | "lg" | "xl"` | `"md"` | 内边距 |
79
+ | radius | `"none" | "sm" | "md" | "lg" | "xl"` | `"lg"` | Surface 自身圆角 |
80
+ | height | `"content" | "fill" | "screen"` | `"content"` | 高度语义 |
81
+ | bordered | `boolean` | `false` | 显示 token 描边 |
82
+ | scrollable | `boolean` | `false` | 受限高度下允许内部滚动 |
83
+ | mode / colorScheme / accent | `ThemeConfig fields` | — | 局部主题深浅色与强调色 |
84
+ | density / intensity / themeRadius / font | `ThemeConfig fields` | — | 局部密度、阴影、主题圆角和字体 |
85
+ | tokens | `ThemeTokens` | — | 局部 CSS token 覆写 |
86
+ | themes | `ThemePresets` | — | 局部自定义模式注册表 |
87
+
88
+
89
+ ---
90
+ [← 回到索引](../llms.md)
package/docs/llms/tag.md CHANGED
@@ -34,11 +34,12 @@ dot 渲染前置色块。
34
34
 
35
35
  ### 前置图标
36
36
 
37
- icon 使用内置 Icon 组件,颜色随语气自动适配。
37
+ icon 可传内置 IconName 或自定义 ReactNode,颜色随语气自动适配。
38
38
 
39
39
  ```tsx
40
40
  <Tag tone="success" icon="check2">已完成</Tag>
41
41
  <Tag tone="info" icon="star">推荐</Tag>
42
+ <Tag icon={<img src={iconUrl} alt="" />}>物品</Tag>
42
43
  ```
43
44
 
44
45
  ### 无边框
@@ -67,7 +68,7 @@ removable + onRemove 实现关闭按钮。
67
68
  | tone | `"neutral" | "accent" | "info" | "success" | "warning" | "danger"` | `"neutral"` | 色调 |
68
69
  | solid | `boolean` | `false` | 实心填充 |
69
70
  | dot | `boolean` | `false` | 前置圆点 |
70
- | icon | `IconName` | — | 前置图标 |
71
+ | icon | `IconName | ReactNode` | — | 前置图标,可传内置图标名或自定义节点 |
71
72
  | bordered | `boolean` | `true` | 是否显示外框 flat 阴影 |
72
73
  | removable | `boolean` | `false` | 显示 × |
73
74
  | onRemove | `() => void` | — | 关闭回调 |