@fangxinyan/lumina 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +18 -7
  2. package/dist/{Accordion-3TQPKNN3.css → Accordion-REMDCQUD.css} +0 -1
  3. package/dist/Accordion.cjs +2 -2
  4. package/dist/Accordion.js +1 -1
  5. package/dist/Alert.cjs +2 -2
  6. package/dist/Alert.js +1 -1
  7. package/dist/AppShell.cjs +5 -5
  8. package/dist/AppShell.js +1 -1
  9. package/dist/Avatar.cjs +2 -2
  10. package/dist/Avatar.js +1 -1
  11. package/dist/Button.cjs +3 -3
  12. package/dist/Button.js +1 -1
  13. package/dist/Calendar.cjs +2 -2
  14. package/dist/Calendar.js +1 -1
  15. package/dist/Card.cjs +3 -3
  16. package/dist/Card.js +1 -1
  17. package/dist/{Cascader-DTRTTXC2.css → Cascader-VSYEKQCG.css} +1 -1
  18. package/dist/Cascader.cjs +2 -2
  19. package/dist/Cascader.js +1 -1
  20. package/dist/Checkbox.cjs +3 -3
  21. package/dist/Checkbox.js +1 -1
  22. package/dist/{ColorPicker-GP7AQYUU.css → ColorPicker-SDDQGHCM.css} +1 -1
  23. package/dist/ColorPicker.cjs +2 -2
  24. package/dist/ColorPicker.js +1 -1
  25. package/dist/CommandPalette-T45DBMPY.css +139 -0
  26. package/dist/CommandPalette.cjs +14 -0
  27. package/dist/CommandPalette.cjs.map +1 -0
  28. package/dist/CommandPalette.d.cts +65 -0
  29. package/dist/CommandPalette.d.ts +65 -0
  30. package/dist/CommandPalette.js +5 -0
  31. package/dist/CommandPalette.js.map +1 -0
  32. package/dist/ContextMenu-FKW6CQW4.css +76 -0
  33. package/dist/ContextMenu.cjs +12 -0
  34. package/dist/ContextMenu.cjs.map +1 -0
  35. package/dist/ContextMenu.d.cts +50 -0
  36. package/dist/ContextMenu.d.ts +50 -0
  37. package/dist/ContextMenu.js +3 -0
  38. package/dist/ContextMenu.js.map +1 -0
  39. package/dist/Divider.cjs +2 -2
  40. package/dist/Divider.js +1 -1
  41. package/dist/Drawer.cjs +2 -2
  42. package/dist/Drawer.js +1 -1
  43. package/dist/Empty.cjs +4 -4
  44. package/dist/Empty.js +1 -1
  45. package/dist/{Image-WYWORJT4.css → Image-4MN34O6P.css} +1 -1
  46. package/dist/Image.cjs +3 -3
  47. package/dist/Image.js +1 -1
  48. package/dist/Input.cjs +3 -3
  49. package/dist/Input.js +1 -1
  50. package/dist/List.cjs +2 -2
  51. package/dist/List.js +1 -1
  52. package/dist/{Modal-N4YVLEWW.css → Modal-XSDMU4XJ.css} +1 -1
  53. package/dist/Modal.cjs +3 -3
  54. package/dist/Modal.js +2 -2
  55. package/dist/Pagination.cjs +4 -4
  56. package/dist/Pagination.js +3 -3
  57. package/dist/{Popover-MGCMOXYP.css → Popover-NYEKT5CQ.css} +1 -1
  58. package/dist/Popover.cjs +2 -2
  59. package/dist/Popover.js +1 -1
  60. package/dist/Progress.cjs +3 -3
  61. package/dist/Progress.js +1 -1
  62. package/dist/{Select-EDG37C37.css → Select-J3CCVFJ7.css} +1 -1
  63. package/dist/Select.cjs +3 -3
  64. package/dist/Select.js +2 -2
  65. package/dist/Slider.cjs +2 -2
  66. package/dist/Slider.js +1 -1
  67. package/dist/Splitter-DHNOY4NC.css +66 -0
  68. package/dist/Splitter.cjs +12 -0
  69. package/dist/Splitter.cjs.map +1 -0
  70. package/dist/Splitter.d.cts +44 -0
  71. package/dist/Splitter.d.ts +44 -0
  72. package/dist/Splitter.js +3 -0
  73. package/dist/Splitter.js.map +1 -0
  74. package/dist/StatusBar-CDS2GPSI.css +58 -0
  75. package/dist/StatusBar.cjs +16 -0
  76. package/dist/StatusBar.cjs.map +1 -0
  77. package/dist/StatusBar.d.cts +39 -0
  78. package/dist/StatusBar.d.ts +39 -0
  79. package/dist/StatusBar.js +3 -0
  80. package/dist/StatusBar.js.map +1 -0
  81. package/dist/Switch.cjs +2 -2
  82. package/dist/Switch.js +1 -1
  83. package/dist/{Table-ADVN6LXP.css → Table-2LPTOUIR.css} +2 -2
  84. package/dist/Table.cjs +7 -7
  85. package/dist/Table.js +5 -5
  86. package/dist/Tabs.cjs +3 -3
  87. package/dist/Tabs.js +1 -1
  88. package/dist/Tag.cjs +3 -3
  89. package/dist/Tag.js +1 -1
  90. package/dist/Theme.cjs +10 -10
  91. package/dist/Theme.js +1 -1
  92. package/dist/{Toast-ERHDN3WG.css → Toast-6PVSAXQ5.css} +1 -1
  93. package/dist/Toast.cjs +3 -3
  94. package/dist/Toast.js +1 -1
  95. package/dist/Tooltip.cjs +2 -2
  96. package/dist/Tooltip.js +1 -1
  97. package/dist/Typography.cjs +6 -6
  98. package/dist/Typography.js +1 -1
  99. package/dist/{chunk-5WF6M47X.cjs → chunk-24FAK7QU.cjs} +3 -3
  100. package/dist/{chunk-5WF6M47X.cjs.map → chunk-24FAK7QU.cjs.map} +1 -1
  101. package/dist/{chunk-AJZKESHB.js → chunk-276NALYW.js} +3 -3
  102. package/dist/{chunk-AJZKESHB.js.map → chunk-276NALYW.js.map} +1 -1
  103. package/dist/{chunk-FI7QO3I5.cjs → chunk-33TIL25B.cjs} +3 -3
  104. package/dist/{chunk-FI7QO3I5.cjs.map → chunk-33TIL25B.cjs.map} +1 -1
  105. package/dist/{chunk-RDLPX7RK.cjs → chunk-3HNRKO3M.cjs} +31 -5
  106. package/dist/chunk-3HNRKO3M.cjs.map +1 -0
  107. package/dist/{chunk-GZGZR4FT.js → chunk-3LI6QH2Q.js} +3 -3
  108. package/dist/{chunk-GZGZR4FT.js.map → chunk-3LI6QH2Q.js.map} +1 -1
  109. package/dist/{chunk-NE4YEBFH.js → chunk-3UU2PUK4.js} +4 -4
  110. package/dist/{chunk-NE4YEBFH.js.map → chunk-3UU2PUK4.js.map} +1 -1
  111. package/dist/chunk-47Z4NIU4.js +118 -0
  112. package/dist/chunk-47Z4NIU4.js.map +1 -0
  113. package/dist/{chunk-4U4OY5RA.js → chunk-4SCDDSXY.js} +3 -3
  114. package/dist/{chunk-4U4OY5RA.js.map → chunk-4SCDDSXY.js.map} +1 -1
  115. package/dist/{chunk-NXOAYNG2.cjs → chunk-5BFETKVP.cjs} +3 -3
  116. package/dist/{chunk-NXOAYNG2.cjs.map → chunk-5BFETKVP.cjs.map} +1 -1
  117. package/dist/{chunk-VICGQC6G.cjs → chunk-5EAVXFFD.cjs} +3 -3
  118. package/dist/{chunk-VICGQC6G.cjs.map → chunk-5EAVXFFD.cjs.map} +1 -1
  119. package/dist/{chunk-OYGFMXAA.js → chunk-5N7347MI.js} +3 -3
  120. package/dist/{chunk-OYGFMXAA.js.map → chunk-5N7347MI.js.map} +1 -1
  121. package/dist/{chunk-VJN637MT.js → chunk-5PREWYTB.js} +3 -3
  122. package/dist/{chunk-VJN637MT.js.map → chunk-5PREWYTB.js.map} +1 -1
  123. package/dist/{chunk-77BVQNAQ.js → chunk-5UOBYRYJ.js} +3 -3
  124. package/dist/{chunk-77BVQNAQ.js.map → chunk-5UOBYRYJ.js.map} +1 -1
  125. package/dist/{chunk-BBPNQ44M.js → chunk-6GNFRP2H.js} +3 -3
  126. package/dist/{chunk-BBPNQ44M.js.map → chunk-6GNFRP2H.js.map} +1 -1
  127. package/dist/{chunk-TZSWDH5T.cjs → chunk-7JYI5THC.cjs} +3 -3
  128. package/dist/{chunk-TZSWDH5T.cjs.map → chunk-7JYI5THC.cjs.map} +1 -1
  129. package/dist/chunk-7T2SLRNL.cjs +140 -0
  130. package/dist/chunk-7T2SLRNL.cjs.map +1 -0
  131. package/dist/chunk-7YQWG7HR.cjs +45 -0
  132. package/dist/chunk-7YQWG7HR.cjs.map +1 -0
  133. package/dist/chunk-AGN3JSUH.cjs +209 -0
  134. package/dist/chunk-AGN3JSUH.cjs.map +1 -0
  135. package/dist/{chunk-CCBHZYE6.cjs → chunk-AR4M7QGF.cjs} +7 -7
  136. package/dist/{chunk-CCBHZYE6.cjs.map → chunk-AR4M7QGF.cjs.map} +1 -1
  137. package/dist/{chunk-K7PVJLW4.cjs → chunk-AWLBLRQX.cjs} +5 -5
  138. package/dist/{chunk-K7PVJLW4.cjs.map → chunk-AWLBLRQX.cjs.map} +1 -1
  139. package/dist/{chunk-PBBHUUXU.cjs → chunk-B5JH7NRZ.cjs} +3 -3
  140. package/dist/{chunk-PBBHUUXU.cjs.map → chunk-B5JH7NRZ.cjs.map} +1 -1
  141. package/dist/{chunk-Z5X5AMLA.cjs → chunk-CALRTZZ7.cjs} +3 -3
  142. package/dist/{chunk-Z5X5AMLA.cjs.map → chunk-CALRTZZ7.cjs.map} +1 -1
  143. package/dist/{chunk-H6FCIJOP.js → chunk-DBJIK4JE.js} +3 -3
  144. package/dist/{chunk-H6FCIJOP.js.map → chunk-DBJIK4JE.js.map} +1 -1
  145. package/dist/{chunk-QESLHLTG.cjs → chunk-EHO2JH2L.cjs} +4 -4
  146. package/dist/{chunk-QESLHLTG.cjs.map → chunk-EHO2JH2L.cjs.map} +1 -1
  147. package/dist/{chunk-WNGG25QX.js → chunk-FFZLSY2N.js} +3 -3
  148. package/dist/{chunk-WNGG25QX.js.map → chunk-FFZLSY2N.js.map} +1 -1
  149. package/dist/{chunk-AEJJGUEN.cjs → chunk-GOIQR4OH.cjs} +3 -3
  150. package/dist/{chunk-AEJJGUEN.cjs.map → chunk-GOIQR4OH.cjs.map} +1 -1
  151. package/dist/{chunk-Z7P6QGMT.js → chunk-GR5STMOA.js} +3 -3
  152. package/dist/{chunk-Z7P6QGMT.js.map → chunk-GR5STMOA.js.map} +1 -1
  153. package/dist/{chunk-URF6RBW6.cjs → chunk-HNVRMOL3.cjs} +3 -3
  154. package/dist/{chunk-URF6RBW6.cjs.map → chunk-HNVRMOL3.cjs.map} +1 -1
  155. package/dist/{chunk-RPD2OIIP.js → chunk-I2HHC6QW.js} +4 -4
  156. package/dist/{chunk-RPD2OIIP.js.map → chunk-I2HHC6QW.js.map} +1 -1
  157. package/dist/{chunk-AXMEZGEG.cjs → chunk-IZDJCEMF.cjs} +3 -3
  158. package/dist/{chunk-AXMEZGEG.cjs.map → chunk-IZDJCEMF.cjs.map} +1 -1
  159. package/dist/{chunk-V34OPWKZ.js → chunk-JSDQVVQB.js} +3 -3
  160. package/dist/{chunk-V34OPWKZ.js.map → chunk-JSDQVVQB.js.map} +1 -1
  161. package/dist/{chunk-QTGDYQOT.cjs → chunk-LLNEDEST.cjs} +4 -4
  162. package/dist/{chunk-QTGDYQOT.cjs.map → chunk-LLNEDEST.cjs.map} +1 -1
  163. package/dist/{chunk-C5TGQ7CV.cjs → chunk-MFWOBALK.cjs} +3 -3
  164. package/dist/{chunk-C5TGQ7CV.cjs.map → chunk-MFWOBALK.cjs.map} +1 -1
  165. package/dist/{chunk-LDENBYRC.cjs → chunk-MKR4X57L.cjs} +3 -3
  166. package/dist/{chunk-LDENBYRC.cjs.map → chunk-MKR4X57L.cjs.map} +1 -1
  167. package/dist/{chunk-LSLYY5FN.js → chunk-MTCLJHXU.js} +5 -5
  168. package/dist/{chunk-LSLYY5FN.js.map → chunk-MTCLJHXU.js.map} +1 -1
  169. package/dist/{chunk-JKLQOB2F.cjs → chunk-MUFMJPRT.cjs} +3 -3
  170. package/dist/{chunk-JKLQOB2F.cjs.map → chunk-MUFMJPRT.cjs.map} +1 -1
  171. package/dist/{chunk-OEHCA5IV.js → chunk-NGQDVJH3.js} +4 -4
  172. package/dist/{chunk-OEHCA5IV.js.map → chunk-NGQDVJH3.js.map} +1 -1
  173. package/dist/{chunk-7H453VPW.cjs → chunk-NQQWCIE6.cjs} +3 -3
  174. package/dist/{chunk-7H453VPW.cjs.map → chunk-NQQWCIE6.cjs.map} +1 -1
  175. package/dist/{chunk-ZWP4LSS3.js → chunk-NS3C2ZSE.js} +3 -3
  176. package/dist/{chunk-ZWP4LSS3.js.map → chunk-NS3C2ZSE.js.map} +1 -1
  177. package/dist/{chunk-HKAQILD2.cjs → chunk-O2HMH5BI.cjs} +4 -4
  178. package/dist/{chunk-HKAQILD2.cjs.map → chunk-O2HMH5BI.cjs.map} +1 -1
  179. package/dist/chunk-OWNVDXRQ.js +42 -0
  180. package/dist/chunk-OWNVDXRQ.js.map +1 -0
  181. package/dist/{chunk-3UFU63X7.cjs → chunk-OZVPJWXO.cjs} +3 -3
  182. package/dist/{chunk-3UFU63X7.cjs.map → chunk-OZVPJWXO.cjs.map} +1 -1
  183. package/dist/{chunk-M6CGYGEO.js → chunk-Q2EXOT4B.js} +3 -3
  184. package/dist/{chunk-M6CGYGEO.js.map → chunk-Q2EXOT4B.js.map} +1 -1
  185. package/dist/{chunk-7U6I44RV.cjs → chunk-Q7CDWNM6.cjs} +3 -3
  186. package/dist/{chunk-7U6I44RV.cjs.map → chunk-Q7CDWNM6.cjs.map} +1 -1
  187. package/dist/{chunk-437LB2V4.js → chunk-QJGKI2BD.js} +3 -3
  188. package/dist/{chunk-437LB2V4.js.map → chunk-QJGKI2BD.js.map} +1 -1
  189. package/dist/chunk-RFU5HN4E.js +149 -0
  190. package/dist/chunk-RFU5HN4E.js.map +1 -0
  191. package/dist/{chunk-IKI5CS4L.cjs → chunk-RIDCBNCM.cjs} +4 -4
  192. package/dist/{chunk-IKI5CS4L.cjs.map → chunk-RIDCBNCM.cjs.map} +1 -1
  193. package/dist/{chunk-OPTTHURA.cjs → chunk-RSZNFKCQ.cjs} +3 -3
  194. package/dist/{chunk-OPTTHURA.cjs.map → chunk-RSZNFKCQ.cjs.map} +1 -1
  195. package/dist/{chunk-EPFYIR63.cjs → chunk-RVSWH4RH.cjs} +7 -7
  196. package/dist/{chunk-EPFYIR63.cjs.map → chunk-RVSWH4RH.cjs.map} +1 -1
  197. package/dist/{chunk-TWBJCFEJ.cjs → chunk-SVVB6POY.cjs} +4 -4
  198. package/dist/{chunk-TWBJCFEJ.cjs.map → chunk-SVVB6POY.cjs.map} +1 -1
  199. package/dist/{chunk-QPZZNSRB.js → chunk-TMZVX6NO.js} +4 -4
  200. package/dist/{chunk-QPZZNSRB.js.map → chunk-TMZVX6NO.js.map} +1 -1
  201. package/dist/{chunk-YEOARJKR.cjs → chunk-TQLCIXCK.cjs} +3 -3
  202. package/dist/{chunk-YEOARJKR.cjs.map → chunk-TQLCIXCK.cjs.map} +1 -1
  203. package/dist/{chunk-GIVMKGZN.js → chunk-TY5EAKEI.js} +3 -3
  204. package/dist/{chunk-GIVMKGZN.js.map → chunk-TY5EAKEI.js.map} +1 -1
  205. package/dist/{chunk-4MR4GVTD.js → chunk-U4K7HOMW.js} +31 -5
  206. package/dist/chunk-U4K7HOMW.js.map +1 -0
  207. package/dist/{chunk-IWVKITPN.js → chunk-U5BZ7E3F.js} +3 -3
  208. package/dist/{chunk-IWVKITPN.js.map → chunk-U5BZ7E3F.js.map} +1 -1
  209. package/dist/{chunk-3WAFIUDQ.js → chunk-UQB5OHMO.js} +3 -3
  210. package/dist/{chunk-3WAFIUDQ.js.map → chunk-UQB5OHMO.js.map} +1 -1
  211. package/dist/{chunk-ZVCMXDTP.js → chunk-URLSZPS5.js} +5 -5
  212. package/dist/{chunk-ZVCMXDTP.js.map → chunk-URLSZPS5.js.map} +1 -1
  213. package/dist/{chunk-I7SSCSFH.js → chunk-W6I67HQQ.js} +3 -3
  214. package/dist/{chunk-I7SSCSFH.js.map → chunk-W6I67HQQ.js.map} +1 -1
  215. package/dist/{chunk-NSUD5B22.js → chunk-WBMF7WM3.js} +3 -3
  216. package/dist/{chunk-NSUD5B22.js.map → chunk-WBMF7WM3.js.map} +1 -1
  217. package/dist/{chunk-4GT5TOHP.js → chunk-WDBJVKSR.js} +3 -3
  218. package/dist/{chunk-4GT5TOHP.js.map → chunk-WDBJVKSR.js.map} +1 -1
  219. package/dist/{chunk-TYQ5CN2C.js → chunk-WQFC5EMC.js} +4 -4
  220. package/dist/{chunk-TYQ5CN2C.js.map → chunk-WQFC5EMC.js.map} +1 -1
  221. package/dist/{chunk-IFERLHCL.cjs → chunk-WREHBIJ5.cjs} +10 -10
  222. package/dist/{chunk-IFERLHCL.cjs.map → chunk-WREHBIJ5.cjs.map} +1 -1
  223. package/dist/chunk-WZ73TWB2.cjs +174 -0
  224. package/dist/chunk-WZ73TWB2.cjs.map +1 -0
  225. package/dist/chunk-XDFZRV3V.js +184 -0
  226. package/dist/chunk-XDFZRV3V.js.map +1 -0
  227. package/dist/{chunk-F7HW2PYR.cjs → chunk-XUT2Z2L6.cjs} +3 -3
  228. package/dist/{chunk-F7HW2PYR.cjs.map → chunk-XUT2Z2L6.cjs.map} +1 -1
  229. package/dist/{chunk-55NTFU7Y.js → chunk-XZ22B3NW.js} +6 -6
  230. package/dist/{chunk-55NTFU7Y.js.map → chunk-XZ22B3NW.js.map} +1 -1
  231. package/dist/{chunk-K5MHL732.js → chunk-YXKJOPYT.js} +4 -4
  232. package/dist/{chunk-K5MHL732.js.map → chunk-YXKJOPYT.js.map} +1 -1
  233. package/dist/{chunk-IDM6JJLP.cjs → chunk-YZ2I7CDF.cjs} +3 -3
  234. package/dist/{chunk-IDM6JJLP.cjs.map → chunk-YZ2I7CDF.cjs.map} +1 -1
  235. package/dist/index.cjs +142 -118
  236. package/dist/index.cjs.map +1 -1
  237. package/dist/index.d.cts +5 -1
  238. package/dist/index.d.ts +5 -1
  239. package/dist/index.js +35 -31
  240. package/dist/index.js.map +1 -1
  241. package/dist/styles.css +26 -19
  242. package/dist/{tokens-HWQ7KWPG.css → tokens-BIIUTPKN.css} +17 -9
  243. package/dist/tokens.css +17 -9
  244. package/docs/llms/accordion.md +66 -0
  245. package/docs/llms/alert.md +64 -0
  246. package/docs/llms/avatar.md +55 -0
  247. package/docs/llms/badge.md +41 -0
  248. package/docs/llms/button.md +122 -0
  249. package/docs/llms/calendar.md +44 -0
  250. package/docs/llms/card.md +68 -0
  251. package/docs/llms/cascader.md +33 -0
  252. package/docs/llms/checkbox.md +41 -0
  253. package/docs/llms/colorpicker.md +82 -0
  254. package/docs/llms/commandpalette.md +58 -0
  255. package/docs/llms/contextmenu.md +55 -0
  256. package/docs/llms/divider.md +69 -0
  257. package/docs/llms/drawer.md +70 -0
  258. package/docs/llms/empty.md +52 -0
  259. package/docs/llms/icon.md +34 -0
  260. package/docs/llms/image.md +39 -0
  261. package/docs/llms/input.md +127 -0
  262. package/docs/llms/intro.md +6 -0
  263. package/docs/llms/list.md +41 -0
  264. package/docs/llms/modal.md +89 -0
  265. package/docs/llms/pagination.md +82 -0
  266. package/docs/llms/popover.md +34 -0
  267. package/docs/llms/progress.md +58 -0
  268. package/docs/llms/radio.md +43 -0
  269. package/docs/llms/select.md +99 -0
  270. package/docs/llms/sidebar.md +43 -0
  271. package/docs/llms/skeleton.md +88 -0
  272. package/docs/llms/slider.md +72 -0
  273. package/docs/llms/spinner.md +58 -0
  274. package/docs/llms/splitter.md +63 -0
  275. package/docs/llms/statusbar.md +53 -0
  276. package/docs/llms/switch.md +60 -0
  277. package/docs/llms/table.md +188 -0
  278. package/docs/llms/tablepro.md +56 -0
  279. package/docs/llms/tabs.md +50 -0
  280. package/docs/llms/tag.md +77 -0
  281. package/docs/llms/theme.md +165 -0
  282. package/docs/llms/titlebar.md +40 -0
  283. package/docs/llms/toast.md +51 -0
  284. package/docs/llms/tooltip.md +38 -0
  285. package/docs/llms/typography.md +103 -0
  286. package/docs/llms/windowcontrols.md +31 -0
  287. package/docs/llms.md +101 -0
  288. package/package.json +8 -2
  289. package/dist/chunk-4MR4GVTD.js.map +0 -1
  290. package/dist/chunk-RDLPX7RK.cjs.map +0 -1
package/dist/styles.css CHANGED
@@ -17,14 +17,15 @@
17
17
  /* ---- Shadows ---- */
18
18
  --shadow-dark: rgba(163, 177, 198, 0.55);
19
19
  --shadow-light: rgba(255, 255, 255, 0.95);
20
- --shadow-blur: 16px;
21
- --shadow-offset: 6px;
22
- --shadow-inset-blur: 10px;
23
- --shadow-inset-offset: 4px;
24
20
 
25
- /* Distance multiplier (tweakable at runtime) */
21
+ /* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
26
22
  --d: 1;
27
23
 
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));
28
+
28
29
  --neu-out:
29
30
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
30
31
  calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
@@ -49,6 +50,13 @@
49
50
  1px 1px 2px var(--shadow-dark),
50
51
  -1px -1px 2px var(--shadow-light);
51
52
 
53
+ /* Floating-overlay elevation.
54
+ No top-left highlight — there's no continuous surface beneath an overlay
55
+ 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);
59
+
52
60
  /* ---- Accent (default sky) ---- */
53
61
  --accent: oklch(68% 0.14 235);
54
62
  --accent-ink: oklch(42% 0.12 235);
@@ -114,10 +122,10 @@
114
122
  --shadow-dark: rgba(0, 0, 0, 0.55);
115
123
  --shadow-light: rgba(130, 145, 180, 0.06);
116
124
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
117
- --shadow-offset: 4px;
118
- --shadow-blur: 10px;
119
- --shadow-inset-offset: 3px;
120
- --shadow-inset-blur: 7px;
125
+ --shadow-offset: calc(4px * var(--d));
126
+ --shadow-blur: calc(10px * var(--d));
127
+ --shadow-inset-offset: calc(3px * var(--d));
128
+ --shadow-inset-blur: calc(7px * var(--d));
121
129
  --accent-soft: oklch(35% 0.06 235);
122
130
  --accent-ink: oklch(82% 0.09 235);
123
131
  --accent-glow: oklch(68% 0.14 235 / 0.18);
@@ -1084,7 +1092,6 @@ input, textarea, select { font-family: inherit; color: inherit; }
1084
1092
  color: var(--fg-muted);
1085
1093
  font-size: 13px;
1086
1094
  }
1087
- .accordion-item.open .accordion-body { max-height: 320px; }
1088
1095
  .accordion-body-inner { padding: 0 18px 16px; }
1089
1096
  .accordion-chev {
1090
1097
  transition: transform var(--dur) var(--ease), color var(--dur) var(--ease);
@@ -1311,7 +1318,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1311
1318
  .menu {
1312
1319
  background: var(--bg);
1313
1320
  border-radius: var(--r-md);
1314
- box-shadow: var(--neu-out-lg);
1321
+ box-shadow: var(--neu-float);
1315
1322
  padding: 6px;
1316
1323
  min-width: 180px;
1317
1324
  z-index: 1000;
@@ -1366,7 +1373,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1366
1373
  .modal {
1367
1374
  background: var(--bg);
1368
1375
  border-radius: var(--r-xl);
1369
- box-shadow: var(--neu-out-lg), 0 24px 60px -20px rgba(40, 55, 80, 0.3);
1376
+ box-shadow: var(--neu-float);
1370
1377
  padding: var(--gap-6);
1371
1378
  width: min(480px, 92vw);
1372
1379
  animation: modalIn var(--dur-slow) var(--ease);
@@ -1553,7 +1560,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1553
1560
  .toast {
1554
1561
  background: var(--bg);
1555
1562
  border-radius: var(--r-md);
1556
- box-shadow: var(--neu-out-lg);
1563
+ box-shadow: var(--neu-float);
1557
1564
  padding: 12px 16px;
1558
1565
  min-width: 240px;
1559
1566
  display: flex; align-items: flex-start; gap: 10px;
@@ -1588,7 +1595,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1588
1595
  border-radius: var(--r-md);
1589
1596
  padding: var(--gap-3);
1590
1597
  min-width: 220px;
1591
- box-shadow: var(--neu-out-lg);
1598
+ box-shadow: var(--neu-float);
1592
1599
  animation: menuIn var(--dur) var(--ease);
1593
1600
  }
1594
1601
  /* ============ Alert ============ */
@@ -1757,7 +1764,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1757
1764
  .expand-btn.open { transform: rotate(90deg); color: var(--accent-ink); box-shadow: var(--neu-in-sm); }
1758
1765
  /* Expanded row panel */
1759
1766
  .table tbody tr.expanded-row td {
1760
- padding: 0 18px 14px 18px;
1767
+ padding: 14px 18px;
1761
1768
  border-bottom: 1px solid var(--divider);
1762
1769
  background: color-mix(in oklch, var(--bg-sunken) 25%, transparent);
1763
1770
  }
@@ -1819,7 +1826,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1819
1826
  max-width: 260px;
1820
1827
  background: var(--bg);
1821
1828
  border-radius: var(--r-md);
1822
- box-shadow: var(--neu-out-lg);
1829
+ box-shadow: var(--neu-float);
1823
1830
  padding: 10px;
1824
1831
  animation: menuIn var(--dur) var(--ease);
1825
1832
  }
@@ -2333,7 +2340,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2333
2340
  max-width: 80vw;
2334
2341
  max-height: 80vh;
2335
2342
  border-radius: var(--r-lg);
2336
- box-shadow: var(--neu-out-lg), 0 40px 80px -20px rgba(0,0,0,0.25);
2343
+ box-shadow: var(--neu-float);
2337
2344
  }
2338
2345
  /* ============ Cascader ============ */
2339
2346
  .cascader {
@@ -2366,7 +2373,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2366
2373
  display: flex;
2367
2374
  background: var(--bg);
2368
2375
  border-radius: var(--r-md);
2369
- box-shadow: var(--neu-out-lg);
2376
+ box-shadow: var(--neu-float);
2370
2377
  padding: 6px;
2371
2378
  animation: menuIn var(--dur) var(--ease);
2372
2379
  gap: 4px;
@@ -2695,7 +2702,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2695
2702
  padding: 12px;
2696
2703
  background: var(--bg);
2697
2704
  border-radius: var(--r-md);
2698
- box-shadow: var(--neu-out);
2705
+ box-shadow: var(--neu-float);
2699
2706
  display: flex;
2700
2707
  flex-direction: column;
2701
2708
  gap: 10px;
@@ -17,14 +17,15 @@
17
17
  /* ---- Shadows ---- */
18
18
  --shadow-dark: rgba(163, 177, 198, 0.55);
19
19
  --shadow-light: rgba(255, 255, 255, 0.95);
20
- --shadow-blur: 16px;
21
- --shadow-offset: 6px;
22
- --shadow-inset-blur: 10px;
23
- --shadow-inset-offset: 4px;
24
20
 
25
- /* Distance multiplier (tweakable at runtime) */
21
+ /* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
26
22
  --d: 1;
27
23
 
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));
28
+
28
29
  --neu-out:
29
30
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
30
31
  calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
@@ -49,6 +50,13 @@
49
50
  1px 1px 2px var(--shadow-dark),
50
51
  -1px -1px 2px var(--shadow-light);
51
52
 
53
+ /* Floating-overlay elevation.
54
+ No top-left highlight — there's no continuous surface beneath an overlay
55
+ 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);
59
+
52
60
  /* ---- Accent (default sky) ---- */
53
61
  --accent: oklch(68% 0.14 235);
54
62
  --accent-ink: oklch(42% 0.12 235);
@@ -115,10 +123,10 @@
115
123
  --shadow-dark: rgba(0, 0, 0, 0.55);
116
124
  --shadow-light: rgba(130, 145, 180, 0.06);
117
125
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
118
- --shadow-offset: 4px;
119
- --shadow-blur: 10px;
120
- --shadow-inset-offset: 3px;
121
- --shadow-inset-blur: 7px;
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));
122
130
  --accent-soft: oklch(35% 0.06 235);
123
131
  --accent-ink: oklch(82% 0.09 235);
124
132
  --accent-glow: oklch(68% 0.14 235 / 0.18);
package/dist/tokens.css CHANGED
@@ -17,14 +17,15 @@
17
17
  /* ---- Shadows ---- */
18
18
  --shadow-dark: rgba(163, 177, 198, 0.55);
19
19
  --shadow-light: rgba(255, 255, 255, 0.95);
20
- --shadow-blur: 16px;
21
- --shadow-offset: 6px;
22
- --shadow-inset-blur: 10px;
23
- --shadow-inset-offset: 4px;
24
20
 
25
- /* Distance multiplier (tweakable at runtime) */
21
+ /* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
26
22
  --d: 1;
27
23
 
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));
28
+
28
29
  --neu-out:
29
30
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
30
31
  calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
@@ -49,6 +50,13 @@
49
50
  1px 1px 2px var(--shadow-dark),
50
51
  -1px -1px 2px var(--shadow-light);
51
52
 
53
+ /* Floating-overlay elevation.
54
+ No top-left highlight — there's no continuous surface beneath an overlay
55
+ 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);
59
+
52
60
  /* ---- Accent (default sky) ---- */
53
61
  --accent: oklch(68% 0.14 235);
54
62
  --accent-ink: oklch(42% 0.12 235);
@@ -115,10 +123,10 @@
115
123
  --shadow-dark: rgba(0, 0, 0, 0.55);
116
124
  --shadow-light: rgba(130, 145, 180, 0.06);
117
125
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
118
- --shadow-offset: 4px;
119
- --shadow-blur: 10px;
120
- --shadow-inset-offset: 3px;
121
- --shadow-inset-blur: 7px;
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));
122
130
  --accent-soft: oklch(35% 0.06 235);
123
131
  --accent-ink: oklch(82% 0.09 235);
124
132
  --accent-glow: oklch(68% 0.14 235 / 0.18);
@@ -0,0 +1,66 @@
1
+ # Accordion 折叠面板
2
+
3
+ > 纵向折叠面板。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Accordion } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础
14
+
15
+ ```tsx
16
+ <Accordion items={[{ key, title, content }]} />
17
+ ```
18
+
19
+ ### 多项展开
20
+
21
+ multiple 允许同时展开多个面板。
22
+
23
+ ```tsx
24
+ <Accordion multiple defaultActiveKeys={["1", "2"]} ... />
25
+ ```
26
+
27
+ ### 手风琴模式
28
+
29
+ accordion={true} 同一时刻最多只展开一项;与 multiple 同时传入时 accordion 优先。
30
+
31
+ ```tsx
32
+ <Accordion accordion defaultActiveKeys={["1"]} ... />
33
+ ```
34
+
35
+ ### 仅图标可点
36
+
37
+ collapsible="icon" 将展开触发限制在右侧箭头图标上,标题区域不再响应。
38
+
39
+ ```tsx
40
+ <Accordion collapsible="icon" ... />
41
+ ```
42
+
43
+ ### 禁用展开
44
+
45
+ collapsible="disabled" 会禁用所有项的展开交互。
46
+
47
+ ```tsx
48
+ <Accordion collapsible="disabled" defaultActiveKeys={["1"]} ... />
49
+ ```
50
+
51
+ ## API
52
+
53
+ **Accordion**
54
+
55
+ | Prop | 类型 | 默认 | 说明 |
56
+ | --- | --- | --- | --- |
57
+ | items \* | `AccordionItem[]` | — | 面板数据 |
58
+ | multiple | `boolean` | `false` | 可同时展开多个 |
59
+ | accordion | `boolean` | `false` | 手风琴模式(同一时刻最多一项) |
60
+ | collapsible | `"header" | "icon" | "disabled"` | `"header"` | 展开触发区域 |
61
+ | activeKeys / defaultActiveKeys | `string[]` | — | 受控/初始展开 |
62
+ | onChange | `(keys: string[]) => void` | — | 展开变更 |
63
+
64
+
65
+ ---
66
+ [← 回到索引](../llms.md)
@@ -0,0 +1,64 @@
1
+ # Alert 警告提示
2
+
3
+ > 页面中嵌入的警告/提示。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Alert } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 四种语义
14
+
15
+ ```tsx
16
+ <Alert tone="info" title="标题">内容</Alert>
17
+ ```
18
+
19
+ ### 无标题 / 可关闭
20
+
21
+ ```tsx
22
+ <Alert tone="info" closable>仅一行的简短提示</Alert>
23
+ ```
24
+
25
+ ### 隐藏图标
26
+
27
+ showIcon={false} 可隐藏左侧语义图标,文本更紧凑。
28
+
29
+ ```tsx
30
+ <Alert tone="info" showIcon={false}>纯文本提示</Alert>
31
+ ```
32
+
33
+ ### 自定义操作区
34
+
35
+ action 插槽可以放置按钮等操作元素,位于内容与关闭按钮之间。
36
+
37
+ ```tsx
38
+ <Alert
39
+ tone="warning"
40
+ title="新版本可用"
41
+ action={<Button size="sm" variant="primary">立即更新</Button>}
42
+ closable
43
+ >
44
+ v1.2.0 已发布。
45
+ </Alert>
46
+ ```
47
+
48
+ ## API
49
+
50
+ **Alert**
51
+
52
+ | Prop | 类型 | 默认 | 说明 |
53
+ | --- | --- | --- | --- |
54
+ | tone | `"info" | "success" | "warning" | "danger"` | `"info"` | 语气 |
55
+ | title | `ReactNode` | — | 标题 |
56
+ | icon | `IconName` | — | 自定义图标 |
57
+ | showIcon | `boolean` | `true` | 是否显示语义图标 |
58
+ | action | `ReactNode` | — | 右侧操作区(如按钮) |
59
+ | closable | `boolean` | `false` | 可关闭 |
60
+ | onClose | `() => void` | — | 关闭回调 |
61
+
62
+
63
+ ---
64
+ [← 回到索引](../llms.md)
@@ -0,0 +1,55 @@
1
+ # Avatar 头像
2
+
3
+ > 用图像、首字母代表用户或事物。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Avatar } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础
14
+
15
+ 通过 alt 自动生成首字母。
16
+
17
+ ```tsx
18
+ <Avatar alt="金伟" />
19
+ <Avatar alt="陆" size="lg" />
20
+ ```
21
+
22
+ ### 方形头像
23
+
24
+ shape="square" 使用圆角方形,尺寸变化时圆角跟随变化。
25
+
26
+ ```tsx
27
+ <Avatar alt="金" shape="square" />
28
+ <Avatar alt="陆" shape="square" size="lg" />
29
+ ```
30
+
31
+ ### 状态
32
+
33
+ 在右下角显示状态点。
34
+
35
+ ```tsx
36
+ <Avatar alt="金" status="online" />
37
+ <Avatar alt="陆" status="busy" />
38
+ ```
39
+
40
+ ## API
41
+
42
+ **Avatar**
43
+
44
+ | Prop | 类型 | 默认 | 说明 |
45
+ | --- | --- | --- | --- |
46
+ | src | `string` | — | 图片 URL |
47
+ | alt | `string` | — | 替代文本/首字母来源 |
48
+ | initials | `string` | — | 自定义首字母 |
49
+ | size | `number | "sm" | "md" | "lg" | "xl"` | `"md"` | 尺寸 |
50
+ | shape | `"circle" | "square"` | `"circle"` | 形状 |
51
+ | status | `"online" | "busy" | "away" | "offline"` | — | 状态点 |
52
+
53
+
54
+ ---
55
+ [← 回到索引](../llms.md)
@@ -0,0 +1,41 @@
1
+ # Badge 徽标数
2
+
3
+ > 右上角的小型计数或状态指示器。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Badge } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 数字徽标
14
+
15
+ ```tsx
16
+ <Badge count={3}><IconButton icon="bell" /></Badge>
17
+ <Badge count={128} max={99}><IconButton icon="mail" /></Badge>
18
+ ```
19
+
20
+ ### 圆点
21
+
22
+ dot 模式不显示数字,只是状态指示。
23
+
24
+ ```tsx
25
+ <Badge dot><IconButton icon="user" /></Badge>
26
+ ```
27
+
28
+ ## API
29
+
30
+ **Badge**
31
+
32
+ | Prop | 类型 | 默认 | 说明 |
33
+ | --- | --- | --- | --- |
34
+ | count | `number` | — | 显示数字 |
35
+ | dot | `boolean` | `false` | 圆点模式 |
36
+ | max | `number` | `99` | 超过显示 max+ |
37
+ | tone | `"neutral" | "accent" | ...` | `"danger"` | 色调 |
38
+
39
+
40
+ ---
41
+ [← 回到索引](../llms.md)
@@ -0,0 +1,122 @@
1
+ # Button 按钮
2
+
3
+ > 标记一个操作命令,响应用户点击行为,触发相应业务逻辑。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Button, IconButton, Segmented } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础按钮
14
+
15
+ 四种风格:主要、默认、幽灵、危险。
16
+
17
+ ```tsx
18
+ <Button variant="primary">主按钮</Button>
19
+ <Button>默认按钮</Button>
20
+ <Button variant="ghost">幽灵按钮</Button>
21
+ <Button variant="danger">删除</Button>
22
+ ```
23
+
24
+ ### 图标按钮
25
+
26
+ icon 在前,trailingIcon 在后。
27
+
28
+ ```tsx
29
+ <Button variant="primary" icon="sparkle">新建</Button>
30
+ <Button icon="download">下载</Button>
31
+ <Button trailingIcon="arrowRight">下一步</Button>
32
+ ```
33
+
34
+ ### 加载与禁用
35
+
36
+ loading 期间禁用并显示 spinner。
37
+
38
+ ```tsx
39
+ <Button loading={loading} variant="primary" onClick={...}>点我加载</Button>
40
+ <Button disabled>已禁用</Button>
41
+ ```
42
+
43
+ ### 尺寸
44
+
45
+ 提供 sm / md / lg 三种高度。
46
+
47
+ ```tsx
48
+ <Button size="sm">Small</Button>
49
+ <Button>Medium</Button>
50
+ <Button size="lg">Large</Button>
51
+ ```
52
+
53
+ ### 块级按钮
54
+
55
+ block 让按钮撑满容器宽度,常用于底部主操作或表单提交。
56
+
57
+ ```tsx
58
+ <Button block variant="primary" icon="send">提交表单</Button>
59
+ <Button block>取消</Button>
60
+ ```
61
+
62
+ ### 纯图标按钮
63
+
64
+ IconButton 是只含图标的方形按钮,常配合 tip 使用。
65
+
66
+ ```tsx
67
+ <IconButton icon="heart" tip="收藏" />
68
+ <IconButton icon="bell" tip="通知" />
69
+ <IconButton icon="settings" tip="设置" />
70
+ ```
71
+
72
+ ### 分段控制器
73
+
74
+ 互斥多选项切换。
75
+
76
+ ```tsx
77
+ <Segmented
78
+ options={[
79
+ { value: "grid", label: "网格" },
80
+ { value: "list", label: "列表" },
81
+ { value: "card", label: "卡片" },
82
+ ]}
83
+ defaultValue="grid"
84
+ />
85
+ ```
86
+
87
+ ## API
88
+
89
+ **Button**
90
+
91
+ | Prop | 类型 | 默认 | 说明 |
92
+ | --- | --- | --- | --- |
93
+ | variant | `"default" | "primary" | "ghost" | "danger"` | `"default"` | 按钮风格 |
94
+ | size | `"sm" | "md" | "lg"` | `"md"` | 按钮尺寸 |
95
+ | icon | `IconName` | — | 前置图标 |
96
+ | trailingIcon | `IconName` | — | 后置图标 |
97
+ | loading | `boolean` | `false` | 加载态 |
98
+ | block | `boolean` | `false` | 撑满父容器宽度 |
99
+ | disabled | `boolean` | `false` | 禁用 |
100
+ | onClick | `(e: MouseEvent) => void` | — | 点击回调 |
101
+
102
+
103
+ **IconButton**
104
+
105
+ | Prop | 类型 | 默认 | 说明 |
106
+ | --- | --- | --- | --- |
107
+ | icon \* | `IconName` | — | 图标名 |
108
+ | tip | `string` | — | 悬浮提示 |
109
+ | size / variant | `—` | — | 继承自 Button |
110
+
111
+
112
+ **Segmented**
113
+
114
+ | Prop | 类型 | 默认 | 说明 |
115
+ | --- | --- | --- | --- |
116
+ | options \* | `{ value, label, disabled? }[]` | — | 选项数组 |
117
+ | value / defaultValue | `T` | — | 受控/初始选中值 |
118
+ | onChange | `(value: T) => void` | — | 切换回调 |
119
+
120
+
121
+ ---
122
+ [← 回到索引](../llms.md)
@@ -0,0 +1,44 @@
1
+ # Calendar 日历
2
+
3
+ > 查看与选择日期。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Calendar } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 基础用法
14
+
15
+ ```tsx
16
+ <Calendar value={date} onChange={setDate} />
17
+ ```
18
+
19
+ ### 禁用日期
20
+
21
+ 通过 disabledDate 将周末标灰并禁止点击;与 min/max 可叠加使用。
22
+
23
+ ```tsx
24
+ <Calendar
25
+ value={workDate}
26
+ onChange={setWorkDate}
27
+ disabledDate={(d) => d.getDay() === 0 || d.getDay() === 6}
28
+ />
29
+ ```
30
+
31
+ ## API
32
+
33
+ **Calendar**
34
+
35
+ | Prop | 类型 | 默认 | 说明 |
36
+ | --- | --- | --- | --- |
37
+ | value / defaultValue | `Date` | — | 受控/初始日期 |
38
+ | onChange | `(date: Date) => void` | — | 选择回调 |
39
+ | min / max | `Date` | — | 可选范围 |
40
+ | disabledDate | `(date: Date) => boolean` | — | 自定义禁用判断,返回 true 的日期不可选 |
41
+
42
+
43
+ ---
44
+ [← 回到索引](../llms.md)
@@ -0,0 +1,68 @@
1
+ # Card 卡片
2
+
3
+ > 信息分组容器,提供 raised / flat / sunken 三种视觉变体。
4
+
5
+ ## 导入
6
+
7
+ ```tsx
8
+ import { Card, Panel } from "@fangxinyan/lumina";
9
+ ```
10
+
11
+ ## 示例
12
+
13
+ ### 三种变体
14
+
15
+ raised(默认凸起)、flat(扁平)、sunken(凹陷)。
16
+
17
+ ```tsx
18
+ <Card>raised</Card>
19
+ <Card variant="flat">flat</Card>
20
+ <Card variant="sunken">sunken</Card>
21
+ ```
22
+
23
+ ### 悬浮抬起
24
+
25
+ hoverable 在鼠标悬浮时轻微上移并加强阴影,适合可点击的卡片列表。
26
+
27
+ ```tsx
28
+ <Card hoverable>可点击卡片</Card>
29
+ ```
30
+
31
+ ### Panel
32
+
33
+ 带标题、描述、操作区。
34
+
35
+ ```tsx
36
+ <Panel title="月度营收" description="2026 年 4 月" actions={...}>
37
+ ¥ 12,480
38
+ </Panel>
39
+ ```
40
+
41
+ ### Panel 带操作
42
+
43
+ ```tsx
44
+ <Panel title="..." actions={<Button size="sm" icon="plus">邀请</Button>}>...</Panel>
45
+ ```
46
+
47
+ ## API
48
+
49
+ **Card**
50
+
51
+ | Prop | 类型 | 默认 | 说明 |
52
+ | --- | --- | --- | --- |
53
+ | variant | `"raised" | "flat" | "sunken"` | `"raised"` | 视觉变体 |
54
+ | padding | `"none" | "sm" | "md" | "lg"` | `"md"` | 内边距 |
55
+ | hoverable | `boolean` | `false` | 悬浮时抬起 |
56
+
57
+
58
+ **Panel**
59
+
60
+ | Prop | 类型 | 默认 | 说明 |
61
+ | --- | --- | --- | --- |
62
+ | title | `ReactNode` | — | 标题 |
63
+ | description | `ReactNode` | — | 副标题 |
64
+ | actions | `ReactNode` | — | 右上操作区 |
65
+
66
+
67
+ ---
68
+ [← 回到索引](../llms.md)