@fangxinyan/lumina 0.8.0 → 0.9.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 (223) hide show
  1. package/dist/Alert.cjs +5 -5
  2. package/dist/Alert.js +4 -4
  3. package/dist/AppShell.cjs +8 -8
  4. package/dist/AppShell.js +4 -4
  5. package/dist/AutoComplete.cjs +7 -7
  6. package/dist/AutoComplete.js +6 -6
  7. package/dist/Avatar.cjs +4 -4
  8. package/dist/Avatar.js +3 -3
  9. package/dist/Badge.cjs +4 -4
  10. package/dist/Badge.js +3 -3
  11. package/dist/Button.cjs +6 -6
  12. package/dist/Button.js +4 -4
  13. package/dist/Calendar.cjs +5 -5
  14. package/dist/Calendar.js +4 -4
  15. package/dist/Card.cjs +7 -7
  16. package/dist/Card.js +6 -6
  17. package/dist/Cascader.cjs +7 -7
  18. package/dist/Cascader.js +6 -6
  19. package/dist/{Checkbox-IHFML4FV.css → Checkbox-YQ43GFUI.css} +7 -0
  20. package/dist/Checkbox.cjs +5 -5
  21. package/dist/Checkbox.d.cts +2 -0
  22. package/dist/Checkbox.d.ts +2 -0
  23. package/dist/Checkbox.js +4 -4
  24. package/dist/Collapse.cjs +5 -5
  25. package/dist/Collapse.js +4 -4
  26. package/dist/ColorPicker.cjs +7 -7
  27. package/dist/ColorPicker.js +6 -6
  28. package/dist/CommandPalette.cjs +7 -7
  29. package/dist/CommandPalette.js +6 -6
  30. package/dist/ContextMenu.cjs +4 -4
  31. package/dist/ContextMenu.js +3 -3
  32. package/dist/DatePicker.cjs +9 -9
  33. package/dist/DatePicker.js +8 -8
  34. package/dist/DateTimePicker.cjs +9 -9
  35. package/dist/DateTimePicker.js +8 -8
  36. package/dist/Divider.cjs +4 -4
  37. package/dist/Divider.js +3 -3
  38. package/dist/Drawer.cjs +5 -5
  39. package/dist/Drawer.js +4 -4
  40. package/dist/Empty.cjs +4 -4
  41. package/dist/Empty.js +3 -3
  42. package/dist/Form.cjs +6 -6
  43. package/dist/Form.js +3 -3
  44. package/dist/Icon.cjs +51 -51
  45. package/dist/Icon.js +3 -3
  46. package/dist/Image.cjs +9 -9
  47. package/dist/Image.js +5 -5
  48. package/dist/Input.cjs +7 -7
  49. package/dist/Input.js +5 -5
  50. package/dist/InputNumber.cjs +7 -7
  51. package/dist/InputNumber.js +6 -6
  52. package/dist/List.cjs +4 -4
  53. package/dist/List.js +3 -3
  54. package/dist/Message.cjs +8 -8
  55. package/dist/Message.js +4 -4
  56. package/dist/Modal.cjs +6 -6
  57. package/dist/Modal.js +5 -5
  58. package/dist/Pagination.cjs +9 -9
  59. package/dist/Pagination.js +8 -8
  60. package/dist/Popover.cjs +4 -4
  61. package/dist/Popover.js +3 -3
  62. package/dist/Progress.cjs +4 -4
  63. package/dist/Progress.js +3 -3
  64. package/dist/Radio.cjs +5 -5
  65. package/dist/Radio.js +3 -3
  66. package/dist/{Select-TU37MAHZ.css → Select-QPBB73KA.css} +34 -5
  67. package/dist/Select.cjs +8 -8
  68. package/dist/Select.d.cts +12 -1
  69. package/dist/Select.d.ts +12 -1
  70. package/dist/Select.js +7 -7
  71. package/dist/Skeleton.cjs +4 -4
  72. package/dist/Skeleton.js +3 -3
  73. package/dist/Slider.cjs +4 -4
  74. package/dist/Slider.js +3 -3
  75. package/dist/Spin.cjs +4 -4
  76. package/dist/Spin.js +3 -3
  77. package/dist/Splitter.cjs +4 -4
  78. package/dist/Splitter.js +3 -3
  79. package/dist/StatusBar.cjs +5 -5
  80. package/dist/StatusBar.js +3 -3
  81. package/dist/Surface.cjs +5 -5
  82. package/dist/Surface.js +3 -3
  83. package/dist/{Switch-TATU3LPB.css → Switch-3JV3LCPX.css} +3 -0
  84. package/dist/Switch.cjs +4 -4
  85. package/dist/Switch.d.cts +2 -0
  86. package/dist/Switch.d.ts +2 -0
  87. package/dist/Switch.js +3 -3
  88. package/dist/Table.cjs +12 -12
  89. package/dist/Table.js +11 -11
  90. package/dist/TablePro.cjs +13 -13
  91. package/dist/TablePro.js +12 -12
  92. package/dist/Tabs.cjs +4 -4
  93. package/dist/Tabs.js +3 -3
  94. package/dist/Tag.cjs +5 -5
  95. package/dist/Tag.js +4 -4
  96. package/dist/Textarea.cjs +6 -6
  97. package/dist/Textarea.js +4 -4
  98. package/dist/Theme.cjs +19 -19
  99. package/dist/Theme.js +1 -1
  100. package/dist/ThemePanel.cjs +14 -14
  101. package/dist/ThemePanel.js +11 -11
  102. package/dist/TimePicker.cjs +8 -8
  103. package/dist/TimePicker.js +7 -7
  104. package/dist/Timeline.cjs +5 -5
  105. package/dist/Timeline.js +4 -4
  106. package/dist/Tooltip.cjs +4 -4
  107. package/dist/Tooltip.js +3 -3
  108. package/dist/Typography.cjs +9 -9
  109. package/dist/Typography.js +4 -4
  110. package/dist/{chunk-LQMOYVQF.js → chunk-2BM65ITV.js} +2 -2
  111. package/dist/{chunk-UQI4R32R.js → chunk-2COQYOVG.js} +4 -4
  112. package/dist/{chunk-63RSKQID.js → chunk-2NECDEAJ.js} +3 -3
  113. package/dist/{chunk-I4YPBAQ5.js → chunk-2NXLVPF4.js} +3 -3
  114. package/dist/{chunk-7QAVPVMW.js → chunk-2V6RQQRI.js} +4 -4
  115. package/dist/{chunk-ZEYK37VW.cjs → chunk-2XDLXAZT.cjs} +6 -6
  116. package/dist/{chunk-TYZ6L7E6.cjs → chunk-33YRXHVK.cjs} +6 -6
  117. package/dist/{chunk-3EMWDDWK.cjs → chunk-3D5RJA7R.cjs} +16 -16
  118. package/dist/{chunk-VX6MZO4K.cjs → chunk-3J7HOTD6.cjs} +6 -6
  119. package/dist/{chunk-ARUN2DMD.js → chunk-427CDZDU.js} +2 -2
  120. package/dist/{chunk-IJDM2U3B.js → chunk-4JANYBXO.js} +2 -2
  121. package/dist/{chunk-ZHVR4YPB.cjs → chunk-4LYJRFD2.cjs} +3 -3
  122. package/dist/{chunk-LG62MPMU.cjs → chunk-4MZW2KBN.cjs} +11 -11
  123. package/dist/{chunk-F7WUCOBP.cjs → chunk-4ZSFMWLF.cjs} +24 -24
  124. package/dist/{chunk-FMUHLIHB.cjs → chunk-53I3PWRH.cjs} +3 -3
  125. package/dist/{chunk-JHM7MN3G.js → chunk-563SQXH7.js} +3 -3
  126. package/dist/{chunk-DRDDQCDD.js → chunk-5HLNFDV4.js} +1 -1
  127. package/dist/{chunk-2HIN5NFM.js → chunk-5VLANZAJ.js} +3 -3
  128. package/dist/{chunk-ALAG4ZUH.js → chunk-6OVWY63D.js} +2 -2
  129. package/dist/{chunk-434Y2JVW.cjs → chunk-6WEXRX7K.cjs} +7 -7
  130. package/dist/{chunk-MCDW3VKZ.cjs → chunk-76CTKBXD.cjs} +3 -3
  131. package/dist/{chunk-VA3JWOAB.cjs → chunk-7IWUBBYX.cjs} +15 -15
  132. package/dist/{chunk-PNKNZREC.cjs → chunk-7KA5D37Z.cjs} +27 -27
  133. package/dist/{chunk-Y2MT6PI6.js → chunk-7NKNQRK6.js} +4 -4
  134. package/dist/{chunk-EAUB6FEN.js → chunk-7PUYEPLK.js} +4 -4
  135. package/dist/{chunk-7VLAHOA7.cjs → chunk-7ZMUCSCJ.cjs} +8 -8
  136. package/dist/{chunk-RPO7657K.js → chunk-A34P5CU7.js} +3 -3
  137. package/dist/{chunk-FKCPSVC4.cjs → chunk-ADPXWCTK.cjs} +9 -9
  138. package/dist/{chunk-QDCPVI3S.cjs → chunk-AE5XWZ24.cjs} +14 -14
  139. package/dist/{chunk-RR7KWH26.cjs → chunk-AEY76EAH.cjs} +3 -3
  140. package/dist/{chunk-DURKCGEM.js → chunk-AL2PYVVP.js} +74 -38
  141. package/dist/{chunk-PIJV2FHO.cjs → chunk-AQN3PD24.cjs} +30 -30
  142. package/dist/{chunk-RMGFRAZ2.cjs → chunk-AR3MT2ZT.cjs} +10 -10
  143. package/dist/{chunk-3F424R5P.js → chunk-AXZNZ2IH.js} +3 -3
  144. package/dist/{chunk-HVPUGYBY.js → chunk-BDPJ2BPN.js} +4 -4
  145. package/dist/{chunk-HQFKXTX6.js → chunk-BOBT7JUB.js} +2 -2
  146. package/dist/{chunk-O6G3F5L4.js → chunk-CFKAKB2B.js} +5 -5
  147. package/dist/{chunk-U5YYOOLC.cjs → chunk-CLJLBFNU.cjs} +4 -4
  148. package/dist/{chunk-HYHBCHFM.cjs → chunk-CNV7R2OZ.cjs} +7 -7
  149. package/dist/{chunk-ULTDRMGN.js → chunk-CPVUDSIY.js} +6 -6
  150. package/dist/{chunk-QDY56GGO.js → chunk-D2N7OXMK.js} +2 -2
  151. package/dist/{chunk-LJVQQEME.js → chunk-DQMG4XPX.js} +6 -6
  152. package/dist/{chunk-STQDKMS5.cjs → chunk-GFGMGJ5A.cjs} +13 -13
  153. package/dist/{chunk-BKW5PXEO.js → chunk-GMFOY7RD.js} +5 -5
  154. package/dist/{chunk-GTFP7HA3.cjs → chunk-GW77XQEF.cjs} +15 -15
  155. package/dist/{chunk-DU2DSERH.js → chunk-HAIWLYLR.js} +3 -3
  156. package/dist/{chunk-VVRXNGYL.cjs → chunk-HJGPUE67.cjs} +9 -9
  157. package/dist/{chunk-WHBKQZU5.cjs → chunk-HMN65CDW.cjs} +6 -6
  158. package/dist/{chunk-MUZQWIMR.cjs → chunk-I2YL5XE4.cjs} +18 -18
  159. package/dist/{chunk-EE5KXDRK.cjs → chunk-I4GJZLJU.cjs} +6 -6
  160. package/dist/{chunk-QDMFXRPI.js → chunk-INCTDROH.js} +2 -2
  161. package/dist/{chunk-2BIOTRQC.js → chunk-ISK2RW7F.js} +2 -2
  162. package/dist/{chunk-OLYSSZHP.js → chunk-IU6PLLEL.js} +10 -10
  163. package/dist/{chunk-J5UEQ3ZQ.js → chunk-J7D5CQDK.js} +2 -2
  164. package/dist/{chunk-WMISXERU.js → chunk-JMYUO7V7.js} +7 -7
  165. package/dist/{chunk-SF7BPXDJ.cjs → chunk-K3KHQ77L.cjs} +86 -50
  166. package/dist/{chunk-AURYNA6G.js → chunk-KFCWDFBW.js} +2 -2
  167. package/dist/{chunk-KCDOC3HS.cjs → chunk-KPBZKHCS.cjs} +8 -6
  168. package/dist/{chunk-PQOBBASY.js → chunk-L2NEYHYG.js} +2 -2
  169. package/dist/{chunk-VQEMMJHC.js → chunk-LACXN5CI.js} +2 -2
  170. package/dist/{chunk-T4RR6NVU.cjs → chunk-M3JYP3V4.cjs} +7 -7
  171. package/dist/{chunk-FY73C7JK.js → chunk-MEBAE7DB.js} +4 -4
  172. package/dist/{chunk-5AXNUX3J.js → chunk-MFJHI472.js} +2 -2
  173. package/dist/{chunk-4SKHRPDH.js → chunk-MKVONDTB.js} +6 -6
  174. package/dist/{chunk-JBS353O4.cjs → chunk-MV56FOAD.cjs} +3 -3
  175. package/dist/{chunk-LEDESWNL.js → chunk-O6PRE6MZ.js} +5 -3
  176. package/dist/{chunk-EUTK2ZRJ.cjs → chunk-OBNGHJ3N.cjs} +3 -3
  177. package/dist/{chunk-62VV5COT.js → chunk-OGMI3TO5.js} +3 -3
  178. package/dist/{chunk-YAYSXZZZ.cjs → chunk-PYCAGTO7.cjs} +3 -3
  179. package/dist/{chunk-6DKPJ5LV.cjs → chunk-QI6BJJXM.cjs} +6 -6
  180. package/dist/{chunk-Y22PTPA7.js → chunk-QK3E6FAQ.js} +5 -5
  181. package/dist/{chunk-KATJAJUU.js → chunk-QSLXUNLM.js} +6 -4
  182. package/dist/{chunk-E66PSVBU.cjs → chunk-QTMI4ZA4.cjs} +5 -5
  183. package/dist/{chunk-LDX6Q6RK.cjs → chunk-RA5BULQ3.cjs} +3 -3
  184. package/dist/{chunk-BIPOXOHP.cjs → chunk-RWM44VCZ.cjs} +9 -9
  185. package/dist/{chunk-JKUXA3U6.cjs → chunk-RXITGNPX.cjs} +5 -5
  186. package/dist/{chunk-YPMQC5HX.js → chunk-RYF5ADJW.js} +3 -3
  187. package/dist/{chunk-SXLRWYQQ.js → chunk-SXT672KF.js} +5 -5
  188. package/dist/{chunk-U3SG2YT2.js → chunk-TALNKJQ2.js} +3 -3
  189. package/dist/{chunk-3IZZBM56.js → chunk-TNQJA5JF.js} +3 -3
  190. package/dist/{chunk-Q565GDVK.cjs → chunk-TPFY5SKB.cjs} +9 -9
  191. package/dist/{chunk-RERMZNF3.cjs → chunk-TTRU4TLQ.cjs} +3 -3
  192. package/dist/{chunk-UE4HFGJ6.js → chunk-TUXF2G2O.js} +4 -4
  193. package/dist/{chunk-3DKFS44V.js → chunk-TY5LOU3A.js} +3 -3
  194. package/dist/{chunk-6RQJXSWN.js → chunk-U7V2FOIM.js} +3 -3
  195. package/dist/{chunk-HQNDVNTQ.js → chunk-UCE53RYR.js} +5 -5
  196. package/dist/{chunk-WROF2PVG.cjs → chunk-UQF7E32V.cjs} +6 -4
  197. package/dist/{chunk-NRJXZPZR.cjs → chunk-V6BLBIY6.cjs} +17 -17
  198. package/dist/{chunk-2AUXUZ3Z.cjs → chunk-VDVKY2IX.cjs} +4 -4
  199. package/dist/{chunk-YKHIIC7M.js → chunk-VLQ6XIAL.js} +2 -2
  200. package/dist/{chunk-GFKWSDD6.cjs → chunk-VNP5WB6M.cjs} +6 -6
  201. package/dist/{chunk-PJFYIXBX.cjs → chunk-VTN6YLRJ.cjs} +11 -11
  202. package/dist/{chunk-YBGMTQ2V.js → chunk-XFJTJVWD.js} +3 -3
  203. package/dist/{chunk-77HU7JWK.cjs → chunk-XHKSUKKL.cjs} +6 -6
  204. package/dist/{chunk-K5HGHOG7.js → chunk-Y3WFWA52.js} +2 -2
  205. package/dist/{chunk-QNQSNVCU.cjs → chunk-YU4LBDBD.cjs} +6 -6
  206. package/dist/{chunk-QYPA77OI.cjs → chunk-Z6AG7O4B.cjs} +3 -3
  207. package/dist/{chunk-AUO2YYHB.js → chunk-Z7GKR4LL.js} +4 -4
  208. package/dist/{chunk-ZYIE3BH7.cjs → chunk-ZBRFGD3I.cjs} +3 -3
  209. package/dist/{chunk-5CZA33BK.cjs → chunk-ZCAYS4KR.cjs} +8 -8
  210. package/dist/{chunk-Q5HLC56A.cjs → chunk-ZGZLEJKA.cjs} +4 -4
  211. package/dist/{chunk-YUJ7Z6N2.cjs → chunk-ZT7ZWAF2.cjs} +13 -13
  212. package/dist/index.cjs +189 -189
  213. package/dist/index.d.cts +2 -2
  214. package/dist/index.d.ts +2 -2
  215. package/dist/index.js +52 -52
  216. package/dist/styles.css +58 -19
  217. package/dist/{tokens-CEJVVA3G.css → tokens-223RYVVS.css} +14 -14
  218. package/dist/tokens.css +14 -14
  219. package/docs/llms/checkbox.md +22 -5
  220. package/docs/llms/select.md +31 -0
  221. package/docs/llms/switch.md +22 -5
  222. package/docs/llms.md +1 -1
  223. package/package.json +1 -1
package/dist/index.d.cts CHANGED
@@ -6,7 +6,7 @@ export { Switch, SwitchProps } from './Switch.cjs';
6
6
  export { Checkbox, CheckboxProps } from './Checkbox.cjs';
7
7
  export { Radio, RadioGroup, RadioGroupProps, RadioOption, RadioProps } from './Radio.cjs';
8
8
  export { Slider, SliderBaseProps, SliderProps, SliderRangeProps, SliderRangeValue, SliderSingleProps, SliderValue } from './Slider.cjs';
9
- export { MultiSelectProps, Select, SelectFilterOption, SelectItem, SelectMultiChangeHandler, SelectOption, SelectOptionGroup, SelectOptionRenderInfo, SelectProps, SelectSelectedRenderInfo, SelectSingleChangeHandler, SingleSelectProps } from './Select.cjs';
9
+ export { MultiSelectProps, Select, SelectFilterOption, SelectItem, SelectMultiChangeHandler, SelectOption, SelectOptionExtraRenderInfo, SelectOptionGroup, SelectOptionRenderInfo, SelectProps, SelectSelectedRenderInfo, SelectSingleChangeHandler, SingleSelectProps } from './Select.cjs';
10
10
  export { TabItem, Tabs, TabsProps } from './Tabs.cjs';
11
11
  export { Collapse, CollapseItem, CollapseProps } from './Collapse.cjs';
12
12
  export { Card, CardProps } from './Card.cjs';
@@ -54,6 +54,6 @@ import 'react/jsx-runtime';
54
54
  import 'react';
55
55
 
56
56
  /** Package version — bumped by release scripts. */
57
- declare const VERSION = "0.8.0";
57
+ declare const VERSION = "0.9.0";
58
58
 
59
59
  export { VERSION };
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@ export { Switch, SwitchProps } from './Switch.js';
6
6
  export { Checkbox, CheckboxProps } from './Checkbox.js';
7
7
  export { Radio, RadioGroup, RadioGroupProps, RadioOption, RadioProps } from './Radio.js';
8
8
  export { Slider, SliderBaseProps, SliderProps, SliderRangeProps, SliderRangeValue, SliderSingleProps, SliderValue } from './Slider.js';
9
- export { MultiSelectProps, Select, SelectFilterOption, SelectItem, SelectMultiChangeHandler, SelectOption, SelectOptionGroup, SelectOptionRenderInfo, SelectProps, SelectSelectedRenderInfo, SelectSingleChangeHandler, SingleSelectProps } from './Select.js';
9
+ export { MultiSelectProps, Select, SelectFilterOption, SelectItem, SelectMultiChangeHandler, SelectOption, SelectOptionExtraRenderInfo, SelectOptionGroup, SelectOptionRenderInfo, SelectProps, SelectSelectedRenderInfo, SelectSingleChangeHandler, SingleSelectProps } from './Select.js';
10
10
  export { TabItem, Tabs, TabsProps } from './Tabs.js';
11
11
  export { Collapse, CollapseItem, CollapseProps } from './Collapse.js';
12
12
  export { Card, CardProps } from './Card.js';
@@ -54,6 +54,6 @@ import 'react/jsx-runtime';
54
54
  import 'react';
55
55
 
56
56
  /** Package version — bumped by release scripts. */
57
- declare const VERSION = "0.8.0";
57
+ declare const VERSION = "0.9.0";
58
58
 
59
59
  export { VERSION };
package/dist/index.js CHANGED
@@ -1,61 +1,61 @@
1
- export { Timeline } from './chunk-6RQJXSWN.js';
2
- export { Tooltip } from './chunk-U3SG2YT2.js';
3
- export { Link, Paragraph, Text, Title, Typography } from './chunk-UQI4R32R.js';
4
- export { TablePro } from './chunk-63RSKQID.js';
5
- export { Table } from './chunk-WMISXERU.js';
6
- export { Tabs } from './chunk-IJDM2U3B.js';
1
+ export { Timeline } from './chunk-U7V2FOIM.js';
2
+ export { Tooltip } from './chunk-TALNKJQ2.js';
3
+ export { Link, Paragraph, Text, Title, Typography } from './chunk-2COQYOVG.js';
4
+ export { TablePro } from './chunk-2NECDEAJ.js';
5
+ export { Table } from './chunk-JMYUO7V7.js';
6
+ export { Tabs } from './chunk-4JANYBXO.js';
7
7
  import './chunk-EE7IJ3MB.js';
8
- export { THEME_PANEL_DEFAULT_PRESET_OPTIONS, THEME_PANEL_DEFAULT_THEME_PRESETS, ThemePanel } from './chunk-OLYSSZHP.js';
9
- export { TimePicker } from './chunk-SXLRWYQQ.js';
10
- export { Skeleton } from './chunk-5AXNUX3J.js';
11
- export { Slider } from './chunk-K5HGHOG7.js';
12
- export { Splitter } from './chunk-J5UEQ3ZQ.js';
13
- export { StatusBar, StatusBarItem } from './chunk-YKHIIC7M.js';
14
- export { SURFACE_THEME_PRESETS, Surface } from './chunk-DU2DSERH.js';
8
+ export { THEME_PANEL_DEFAULT_PRESET_OPTIONS, THEME_PANEL_DEFAULT_THEME_PRESETS, ThemePanel } from './chunk-IU6PLLEL.js';
9
+ export { TimePicker } from './chunk-SXT672KF.js';
10
+ export { Skeleton } from './chunk-MFJHI472.js';
11
+ export { Slider } from './chunk-Y3WFWA52.js';
12
+ export { Splitter } from './chunk-J7D5CQDK.js';
13
+ export { StatusBar, StatusBarItem } from './chunk-VLQ6XIAL.js';
14
+ export { SURFACE_THEME_PRESETS, Surface } from './chunk-HAIWLYLR.js';
15
15
  export { LUMINA_THEME_PRESETS, cloneLuminaThemePreset, pickLuminaThemePresets } from './chunk-TSL3F2K3.js';
16
- export { Switch } from './chunk-LEDESWNL.js';
17
- export { InputNumber } from './chunk-YPMQC5HX.js';
18
- export { List } from './chunk-VQEMMJHC.js';
19
- export { MessageContainer, ToastContainer, message, toast } from './chunk-7QAVPVMW.js';
20
- export { Modal } from './chunk-BKW5PXEO.js';
21
- export { Pagination } from './chunk-HQNDVNTQ.js';
22
- export { Select } from './chunk-DURKCGEM.js';
23
- export { Tag } from './chunk-62VV5COT.js';
24
- export { Popover } from './chunk-RPO7657K.js';
25
- export { Progress } from './chunk-HQFKXTX6.js';
26
- export { Radio, RadioGroup } from './chunk-QDY56GGO.js';
27
- export { DateTimePicker } from './chunk-4SKHRPDH.js';
28
- export { Divider } from './chunk-2BIOTRQC.js';
29
- export { Drawer } from './chunk-HVPUGYBY.js';
30
- export { Empty } from './chunk-AURYNA6G.js';
31
- export { Form, FormItem, useForm } from './chunk-QDMFXRPI.js';
32
- export { Image, ImageGrid, LayeredImage, SpriteImage } from './chunk-Y22PTPA7.js';
33
- export { Card } from './chunk-Y2MT6PI6.js';
34
- export { Spin } from './chunk-PQOBBASY.js';
35
- export { Cascader } from './chunk-O6G3F5L4.js';
36
- export { Checkbox } from './chunk-KATJAJUU.js';
37
- export { Collapse } from './chunk-YBGMTQ2V.js';
38
- export { ColorPicker } from './chunk-FY73C7JK.js';
39
- export { CommandPalette } from './chunk-EAUB6FEN.js';
40
- export { ContextMenu } from './chunk-3IZZBM56.js';
41
- export { DatePicker } from './chunk-LJVQQEME.js';
16
+ export { Switch } from './chunk-O6PRE6MZ.js';
17
+ export { InputNumber } from './chunk-RYF5ADJW.js';
18
+ export { List } from './chunk-LACXN5CI.js';
19
+ export { MessageContainer, ToastContainer, message, toast } from './chunk-2V6RQQRI.js';
20
+ export { Modal } from './chunk-GMFOY7RD.js';
21
+ export { Pagination } from './chunk-UCE53RYR.js';
22
+ export { Select } from './chunk-AL2PYVVP.js';
23
+ export { Tag } from './chunk-OGMI3TO5.js';
24
+ export { Popover } from './chunk-A34P5CU7.js';
25
+ export { Progress } from './chunk-BOBT7JUB.js';
26
+ export { Radio, RadioGroup } from './chunk-D2N7OXMK.js';
27
+ export { DateTimePicker } from './chunk-MKVONDTB.js';
28
+ export { Divider } from './chunk-ISK2RW7F.js';
29
+ export { Drawer } from './chunk-BDPJ2BPN.js';
30
+ export { Empty } from './chunk-KFCWDFBW.js';
31
+ export { Form, FormItem, useForm } from './chunk-INCTDROH.js';
32
+ export { Image, ImageGrid, LayeredImage, SpriteImage } from './chunk-QK3E6FAQ.js';
33
+ export { Card } from './chunk-7NKNQRK6.js';
34
+ export { Spin } from './chunk-L2NEYHYG.js';
35
+ export { Cascader } from './chunk-CFKAKB2B.js';
36
+ export { Checkbox } from './chunk-QSLXUNLM.js';
37
+ export { Collapse } from './chunk-XFJTJVWD.js';
38
+ export { ColorPicker } from './chunk-MEBAE7DB.js';
39
+ export { CommandPalette } from './chunk-7PUYEPLK.js';
40
+ export { ContextMenu } from './chunk-TNQJA5JF.js';
41
+ export { DatePicker } from './chunk-DQMG4XPX.js';
42
42
  import './chunk-RC6ULCQP.js';
43
- export { Alert } from './chunk-2HIN5NFM.js';
44
- export { AppShell, Sidebar, TitleBar, WindowControls } from './chunk-I4YPBAQ5.js';
45
- export { AutoComplete } from './chunk-AUO2YYHB.js';
43
+ export { Alert } from './chunk-5VLANZAJ.js';
44
+ export { AppShell, Sidebar, TitleBar, WindowControls } from './chunk-2NXLVPF4.js';
45
+ export { AutoComplete } from './chunk-Z7GKR4LL.js';
46
46
  import './chunk-3QXP2ZNP.js';
47
- export { Input, InputPassword } from './chunk-UE4HFGJ6.js';
48
- export { TextArea, Textarea } from './chunk-3F424R5P.js';
47
+ export { Input, InputPassword } from './chunk-TUXF2G2O.js';
48
+ export { TextArea, Textarea } from './chunk-AXZNZ2IH.js';
49
49
  import './chunk-2A4GYSN4.js';
50
- export { Avatar } from './chunk-ALAG4ZUH.js';
51
- export { Badge } from './chunk-ARUN2DMD.js';
52
- export { Button, IconButton } from './chunk-JHM7MN3G.js';
53
- export { Calendar } from './chunk-3DKFS44V.js';
54
- export { AimOutlined, AppstoreOutlined, BarChartOutlined, BlockOutlined, BorderOutlined, CameraOutlined, CaretDownOutlined, CaretUpOutlined, CheckCircleFilled, CheckCircleOutlined, CheckOutlined, ClockCircleFilled, CloseCircleOutlined, CloseOutlined, CopyOutlined, DashboardOutlined, DeleteOutlined, DownOutlined, EnvironmentOutlined, ExclamationCircleOutlined, FolderOpenOutlined, ICON_NAMES, Icon, LeftOutlined, LoadingOutlined, MinusCircleOutlined, MinusOutlined, NAMED_ICON_MAP, PictureOutlined, PlusOutlined, QqOutlined, ReloadOutlined, RightOutlined, RobotOutlined, SearchOutlined, SettingOutlined, StarFilled, StarOutlined, SwapOutlined, SwapRightOutlined, SyncOutlined, ThunderboltOutlined, TranslationOutlined, UnorderedListOutlined, UserOutlined, isIconName, renderIconSlot, resolveIconName } from './chunk-LQMOYVQF.js';
55
- import './chunk-DRDDQCDD.js';
56
- export { ACCENT_PRESETS, ACCENT_PRESETS_DARK, DEFAULT_THEME_COLORS, FONT_STACKS, ThemeProvider, applyTheme, componentTokensToStyle, deriveThemeColors, normalizeAccentInput, resolveThemeColorScheme, resolveThemeColors, resolveThemeMode, resolveVisualThemeSnapshot, themeColorsToStyle, themeTokenToKebabCase, useTheme, useThemeOptional, visualThemeToStyle } from './chunk-ULTDRMGN.js';
50
+ export { Avatar } from './chunk-6OVWY63D.js';
51
+ export { Badge } from './chunk-427CDZDU.js';
52
+ export { Button, IconButton } from './chunk-563SQXH7.js';
53
+ export { Calendar } from './chunk-TY5LOU3A.js';
54
+ export { AimOutlined, AppstoreOutlined, BarChartOutlined, BlockOutlined, BorderOutlined, CameraOutlined, CaretDownOutlined, CaretUpOutlined, CheckCircleFilled, CheckCircleOutlined, CheckOutlined, ClockCircleFilled, CloseCircleOutlined, CloseOutlined, CopyOutlined, DashboardOutlined, DeleteOutlined, DownOutlined, EnvironmentOutlined, ExclamationCircleOutlined, FolderOpenOutlined, ICON_NAMES, Icon, LeftOutlined, LoadingOutlined, MinusCircleOutlined, MinusOutlined, NAMED_ICON_MAP, PictureOutlined, PlusOutlined, QqOutlined, ReloadOutlined, RightOutlined, RobotOutlined, SearchOutlined, SettingOutlined, StarFilled, StarOutlined, SwapOutlined, SwapRightOutlined, SyncOutlined, ThunderboltOutlined, TranslationOutlined, UnorderedListOutlined, UserOutlined, isIconName, renderIconSlot, resolveIconName } from './chunk-2BM65ITV.js';
55
+ import './chunk-5HLNFDV4.js';
56
+ export { ACCENT_PRESETS, ACCENT_PRESETS_DARK, DEFAULT_THEME_COLORS, FONT_STACKS, ThemeProvider, applyTheme, componentTokensToStyle, deriveThemeColors, normalizeAccentInput, resolveThemeColorScheme, resolveThemeColors, resolveThemeMode, resolveVisualThemeSnapshot, themeColorsToStyle, themeTokenToKebabCase, useTheme, useThemeOptional, visualThemeToStyle } from './chunk-CPVUDSIY.js';
57
57
 
58
58
  // src/index.ts
59
- var VERSION = "0.8.0";
59
+ var VERSION = "0.9.0";
60
60
 
61
61
  export { VERSION };
package/dist/styles.css CHANGED
@@ -24,10 +24,10 @@
24
24
  --shadow-scale: 1;
25
25
  --shadow-float-scale: 1;
26
26
 
27
- --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
28
- --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
29
- --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
30
- --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
27
+ --shadow-blur: calc(12px * var(--d) * var(--shadow-scale));
28
+ --shadow-offset: calc(5px * var(--d) * var(--shadow-scale));
29
+ --shadow-inset-blur: calc(8px * var(--d) * var(--shadow-scale));
30
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
31
31
 
32
32
  --neu-shadow-panel:
33
33
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
@@ -50,8 +50,8 @@
50
50
  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);
51
51
 
52
52
  --neu-shadow-subtle:
53
- 1px 1px 2px var(--shadow-dark),
54
- -1px -1px 2px var(--shadow-light);
53
+ 0.75px 0.75px 1.5px var(--shadow-dark),
54
+ -0.75px -0.75px 1.5px var(--shadow-light);
55
55
 
56
56
  /* Floating-overlay elevation.
57
57
  No top-left highlight — there's no continuous surface beneath an overlay
@@ -151,10 +151,10 @@
151
151
  --mask-bg: color-mix(in oklch, black 18%, transparent);
152
152
  --shadow-dark: rgba(163, 177, 198, 0.55);
153
153
  --shadow-light: rgba(255, 255, 255, 0.95);
154
- --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
155
- --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
156
- --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
157
- --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
154
+ --shadow-offset: calc(5px * var(--d) * var(--shadow-scale));
155
+ --shadow-blur: calc(12px * var(--d) * var(--shadow-scale));
156
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
157
+ --shadow-inset-blur: calc(8px * var(--d) * var(--shadow-scale));
158
158
  }
159
159
  /* ---- Dark theme ----
160
160
  深色模式的拟态不能照搬浅色思路:白色高光会变成刺眼的白圈。
@@ -175,10 +175,10 @@
175
175
  --shadow-dark: rgba(0, 0, 0, 0.55);
176
176
  --shadow-light: rgba(130, 145, 180, 0.06);
177
177
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
178
- --shadow-offset: calc(4px * var(--d) * var(--shadow-scale));
179
- --shadow-blur: calc(10px * var(--d) * var(--shadow-scale));
180
- --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
181
- --shadow-inset-blur: calc(7px * var(--d) * var(--shadow-scale));
178
+ --shadow-offset: calc(3px * var(--d) * var(--shadow-scale));
179
+ --shadow-blur: calc(8px * var(--d) * var(--shadow-scale));
180
+ --shadow-inset-offset: calc(2px * var(--d) * var(--shadow-scale));
181
+ --shadow-inset-blur: calc(5px * var(--d) * var(--shadow-scale));
182
182
  --accent-soft: oklch(35% 0.06 235);
183
183
  --accent-ink: oklch(82% 0.09 235);
184
184
  --accent-glow: oklch(68% 0.14 235 / 0.18);
@@ -681,6 +681,9 @@ svg[data-lumina-icon-color],
681
681
  flex-shrink: 0;
682
682
  transition: all var(--dur) var(--ease);
683
683
  }
684
+ .switch.invalid .switch-track {
685
+ box-shadow: var(--lmn-switch-neu-shadow-inset, var(--neu-shadow-inset)), 0 0 0 2px color-mix(in oklch, var(--lmn-switch-danger, var(--danger)) 30%, transparent);
686
+ }
684
687
  .switch.sm { --w: 36px; --h: 20px; }
685
688
  .switch.lg { --w: 58px; --h: 32px; }
686
689
  /* When checkedChildren / unCheckedChildren are present, widen the track to fit. */
@@ -781,6 +784,9 @@ svg[data-lumina-icon-color],
781
784
  color: var(--lmn-checkbox-bg, var(--bg));
782
785
  transition: all var(--dur) var(--ease);
783
786
  }
787
+ .checkbox.invalid .checkbox-box {
788
+ box-shadow: var(--lmn-checkbox-neu-shadow-inset, var(--neu-shadow-inset)), 0 0 0 2px color-mix(in oklch, var(--lmn-checkbox-danger, var(--danger)) 30%, transparent);
789
+ }
784
790
  .checkbox-box svg { opacity: 0; transform: scale(0.6); transition: all var(--dur) var(--ease); }
785
791
  .checkbox.checked .checkbox-box {
786
792
  background: var(--lmn-checkbox-accent, var(--accent));
@@ -791,6 +797,10 @@ svg[data-lumina-icon-color],
791
797
  background: var(--lmn-checkbox-accent, var(--accent));
792
798
  box-shadow: var(--lmn-checkbox-neu-shadow-control, var(--neu-shadow-control)), 0 2px 8px var(--lmn-checkbox-accent-glow, var(--accent-glow));
793
799
  }
800
+ .checkbox.checked.invalid .checkbox-box,
801
+ .checkbox.indeterminate.invalid .checkbox-box {
802
+ box-shadow: var(--lmn-checkbox-neu-shadow-control, var(--neu-shadow-control)), 0 2px 8px var(--lmn-checkbox-accent-glow, var(--accent-glow)), 0 0 0 2px color-mix(in oklch, var(--lmn-checkbox-danger, var(--danger)) 30%, transparent);
803
+ }
794
804
  .checkbox.indeterminate .checkbox-box::after {
795
805
  content: "";
796
806
  width: 10px; height: 2px;
@@ -1795,6 +1805,30 @@ button.collapse-chev {
1795
1805
  min-width: 0;
1796
1806
  text-align: left;
1797
1807
  }
1808
+ .menu-item-row {
1809
+ display: flex;
1810
+ align-items: center;
1811
+ min-width: 0;
1812
+ border-radius: var(--r-sm);
1813
+ transition: all var(--dur-fast) var(--ease);
1814
+ }
1815
+ .menu-item-row > .menu-item {
1816
+ flex: 1;
1817
+ min-width: 0;
1818
+ width: auto;
1819
+ }
1820
+ .menu-item-extra {
1821
+ display: inline-flex;
1822
+ align-items: center;
1823
+ justify-content: center;
1824
+ flex-shrink: 0;
1825
+ padding: 0 8px 0 2px;
1826
+ color: var(--lmn-select-fg-subtle, var(--fg-subtle));
1827
+ }
1828
+ .menu-item-extra:focus-within,
1829
+ .menu-item-extra:hover {
1830
+ color: var(--lmn-select-accent-ink, var(--accent-ink));
1831
+ }
1798
1832
  .menu-item-label {
1799
1833
  white-space: nowrap;
1800
1834
  overflow: hidden;
@@ -1808,14 +1842,18 @@ button.collapse-chev {
1808
1842
  text-overflow: ellipsis;
1809
1843
  }
1810
1844
  .menu-item.active .menu-item-desc { color: color-mix(in oklch, var(--lmn-select-accent-ink, var(--accent-ink)) 70%, var(--lmn-select-fg-subtle, var(--fg-subtle))); }
1811
- /* Keyboard / hover highlight — soft raised pill */
1812
- .menu-item.highlight:not([disabled]) {
1845
+ /* Keyboard / hover highlight — inset styling stays inside the scrollport edge. */
1846
+ .menu-item-row.highlight:not(.disabled) {
1813
1847
  background: var(--lmn-select-bg, var(--bg));
1814
- box-shadow: var(--lmn-select-neu-shadow-control, var(--neu-shadow-control));
1848
+ box-shadow: var(--lmn-select-neu-shadow-inset, var(--neu-shadow-inset));
1849
+ }
1850
+ .menu-item-row.highlight:not(.disabled) .menu-item {
1815
1851
  color: var(--lmn-select-accent-ink, var(--accent-ink));
1816
1852
  }
1817
- .menu-item[disabled] {
1853
+ .menu-item-row.disabled {
1818
1854
  opacity: 0.45;
1855
+ }
1856
+ .menu-item-row.disabled .menu-item {
1819
1857
  cursor: not-allowed;
1820
1858
  }
1821
1859
  .menu {
@@ -1850,7 +1888,8 @@ button.collapse-chev {
1850
1888
  width: 100%;
1851
1889
  text-align: left;
1852
1890
  }
1853
- .menu-item:hover { background: var(--lmn-select-bg, var(--bg)); box-shadow: var(--lmn-select-neu-shadow-subtle, var(--neu-shadow-subtle)); color: var(--lmn-select-accent-ink, var(--accent-ink)); }
1891
+ .menu-item-row:hover:not(.disabled) { background: var(--lmn-select-bg, var(--bg)); box-shadow: var(--lmn-select-neu-shadow-inset, var(--neu-shadow-inset)); }
1892
+ .menu-item-row:hover:not(.disabled) .menu-item { color: var(--lmn-select-accent-ink, var(--accent-ink)); }
1854
1893
  .menu-item.active { color: var(--lmn-select-accent-ink, var(--accent-ink)); font-weight: 500; }
1855
1894
  .menu-item .tick { margin-left: auto; color: var(--lmn-select-accent, var(--accent)); opacity: 0; }
1856
1895
  .menu-item.active .tick { opacity: 1; }
@@ -24,10 +24,10 @@
24
24
  --shadow-scale: 1;
25
25
  --shadow-float-scale: 1;
26
26
 
27
- --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
28
- --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
29
- --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
30
- --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
27
+ --shadow-blur: calc(12px * var(--d) * var(--shadow-scale));
28
+ --shadow-offset: calc(5px * var(--d) * var(--shadow-scale));
29
+ --shadow-inset-blur: calc(8px * var(--d) * var(--shadow-scale));
30
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
31
31
 
32
32
  --neu-shadow-panel:
33
33
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
@@ -50,8 +50,8 @@
50
50
  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);
51
51
 
52
52
  --neu-shadow-subtle:
53
- 1px 1px 2px var(--shadow-dark),
54
- -1px -1px 2px var(--shadow-light);
53
+ 0.75px 0.75px 1.5px var(--shadow-dark),
54
+ -0.75px -0.75px 1.5px var(--shadow-light);
55
55
 
56
56
  /* Floating-overlay elevation.
57
57
  No top-left highlight — there's no continuous surface beneath an overlay
@@ -153,10 +153,10 @@
153
153
  --mask-bg: color-mix(in oklch, black 18%, transparent);
154
154
  --shadow-dark: rgba(163, 177, 198, 0.55);
155
155
  --shadow-light: rgba(255, 255, 255, 0.95);
156
- --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
157
- --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
158
- --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
159
- --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
156
+ --shadow-offset: calc(5px * var(--d) * var(--shadow-scale));
157
+ --shadow-blur: calc(12px * var(--d) * var(--shadow-scale));
158
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
159
+ --shadow-inset-blur: calc(8px * var(--d) * var(--shadow-scale));
160
160
  }
161
161
 
162
162
  /* ---- Dark theme ----
@@ -178,10 +178,10 @@
178
178
  --shadow-dark: rgba(0, 0, 0, 0.55);
179
179
  --shadow-light: rgba(130, 145, 180, 0.06);
180
180
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
181
- --shadow-offset: calc(4px * var(--d) * var(--shadow-scale));
182
- --shadow-blur: calc(10px * var(--d) * var(--shadow-scale));
183
- --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
184
- --shadow-inset-blur: calc(7px * var(--d) * var(--shadow-scale));
181
+ --shadow-offset: calc(3px * var(--d) * var(--shadow-scale));
182
+ --shadow-blur: calc(8px * var(--d) * var(--shadow-scale));
183
+ --shadow-inset-offset: calc(2px * var(--d) * var(--shadow-scale));
184
+ --shadow-inset-blur: calc(5px * var(--d) * var(--shadow-scale));
185
185
  --accent-soft: oklch(35% 0.06 235);
186
186
  --accent-ink: oklch(82% 0.09 235);
187
187
  --accent-glow: oklch(68% 0.14 235 / 0.18);
package/dist/tokens.css CHANGED
@@ -24,10 +24,10 @@
24
24
  --shadow-scale: 1;
25
25
  --shadow-float-scale: 1;
26
26
 
27
- --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
28
- --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
29
- --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
30
- --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
27
+ --shadow-blur: calc(12px * var(--d) * var(--shadow-scale));
28
+ --shadow-offset: calc(5px * var(--d) * var(--shadow-scale));
29
+ --shadow-inset-blur: calc(8px * var(--d) * var(--shadow-scale));
30
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
31
31
 
32
32
  --neu-shadow-panel:
33
33
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
@@ -50,8 +50,8 @@
50
50
  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);
51
51
 
52
52
  --neu-shadow-subtle:
53
- 1px 1px 2px var(--shadow-dark),
54
- -1px -1px 2px var(--shadow-light);
53
+ 0.75px 0.75px 1.5px var(--shadow-dark),
54
+ -0.75px -0.75px 1.5px var(--shadow-light);
55
55
 
56
56
  /* Floating-overlay elevation.
57
57
  No top-left highlight — there's no continuous surface beneath an overlay
@@ -153,10 +153,10 @@
153
153
  --mask-bg: color-mix(in oklch, black 18%, transparent);
154
154
  --shadow-dark: rgba(163, 177, 198, 0.55);
155
155
  --shadow-light: rgba(255, 255, 255, 0.95);
156
- --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
157
- --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
158
- --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
159
- --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
156
+ --shadow-offset: calc(5px * var(--d) * var(--shadow-scale));
157
+ --shadow-blur: calc(12px * var(--d) * var(--shadow-scale));
158
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
159
+ --shadow-inset-blur: calc(8px * var(--d) * var(--shadow-scale));
160
160
  }
161
161
 
162
162
  /* ---- Dark theme ----
@@ -178,10 +178,10 @@
178
178
  --shadow-dark: rgba(0, 0, 0, 0.55);
179
179
  --shadow-light: rgba(130, 145, 180, 0.06);
180
180
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
181
- --shadow-offset: calc(4px * var(--d) * var(--shadow-scale));
182
- --shadow-blur: calc(10px * var(--d) * var(--shadow-scale));
183
- --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
184
- --shadow-inset-blur: calc(7px * var(--d) * var(--shadow-scale));
181
+ --shadow-offset: calc(3px * var(--d) * var(--shadow-scale));
182
+ --shadow-blur: calc(8px * var(--d) * var(--shadow-scale));
183
+ --shadow-inset-offset: calc(2px * var(--d) * var(--shadow-scale));
184
+ --shadow-inset-blur: calc(5px * var(--d) * var(--shadow-scale));
185
185
  --accent-soft: oklch(35% 0.06 235);
186
186
  --accent-ink: oklch(82% 0.09 235);
187
187
  --accent-glow: oklch(68% 0.14 235 / 0.18);
@@ -16,15 +16,31 @@ import { Checkbox } from "@fangxinyan/lumina";
16
16
  <Checkbox checked={v} onChange={setV} label="同意协议" />
17
17
  ```
18
18
 
19
- ### 原生表单
19
+ ### Lumina 表单校验
20
20
 
21
- name / value / required 会落到真实 checkbox,可直接参与浏览器表单提交与约束校验。
21
+ 通过 Form.Item 与 message 提供一致的组件反馈,不再触发浏览器原生 required 气泡。name / value 仍会透传到真实 checkbox。
22
22
 
23
23
  ```tsx
24
- <form onSubmit={(event) => event.preventDefault()}>
25
- <Checkbox name="agreement" value="accepted" required label="同意条款" />
24
+ <Form
25
+ layout="inline"
26
+ onFinish={() => message.success({ key: "checkbox-validation", content: "条款已确认" })}
27
+ onFinishFailed={() => message.warning({ key: "checkbox-validation", content: "请先同意条款" })}
28
+ >
29
+ <Form.Item
30
+ name="agreement"
31
+ valuePropName="checked"
32
+ rules={[{
33
+ required: true,
34
+ message: "请同意条款",
35
+ validator: (_rule, checked) => checked
36
+ ? Promise.resolve()
37
+ : Promise.reject(new Error("请同意条款")),
38
+ }]}
39
+ >
40
+ <Checkbox name="agreement" value="accepted" label="同意条款" />
41
+ </Form.Item>
26
42
  <Button type="submit">验证提交</Button>
27
- </form>
43
+ </Form>
28
44
  ```
29
45
 
30
46
  ### 全选/半选
@@ -47,6 +63,7 @@ indeterminate 用来表示部分选中。
47
63
  | label | `ReactNode` | — | 右侧文案 |
48
64
  | name / value | `string` | — | 原生表单字段名与选中时提交的值 |
49
65
  | required / form | `boolean / string` | — | 原生必填约束与关联 form id |
66
+ | invalid | `boolean` | `false` | 错误态,可由 Form.Item 自动注入 |
50
67
  | disabled | `boolean` | `false` | 禁用 |
51
68
 
52
69
 
@@ -87,6 +87,26 @@ optionRender 承载多行菜单内容;selectedRender 提供适合固定高度
87
87
  />
88
88
  ```
89
89
 
90
+ ### 置顶分组与额外操作
91
+
92
+ 分组设置 pinned 后会稳定提升到菜单顶部;optionExtraRender 提供不会触发选中的独立尾部区域。收藏仅是业务侧示例。
93
+
94
+ ```tsx
95
+ const groups = [
96
+ { label: "其他服务", options: otherOptions },
97
+ { label: "已收藏", pinned: true, options: favoriteOptions },
98
+ ];
99
+
100
+ <Select
101
+ value={service}
102
+ onChange={setService}
103
+ options={groups}
104
+ optionExtraRender={(option) => (
105
+ <IconButton icon={isFavorite(option) ? "starFilled" : "star"} />
106
+ )}
107
+ />
108
+ ```
109
+
90
110
  ### 分组
91
111
 
92
112
  options 接受 { label, options } 表示分组。
@@ -140,6 +160,7 @@ loading 时显示 spinner,emptyContent 自定义空态。
140
160
  | loading | `boolean` | `false` | 加载态 |
141
161
  | emptyContent | `ReactNode` | — | 空态文案 |
142
162
  | optionRender | `(option, info) => ReactNode` | — | 自定义菜单内完整选项内容,并获得 selected / active / index 状态 |
163
+ | optionExtraRender | `(option, info) => ReactNode` | — | 自定义选项尾部的独立内容或操作,不触发选中;info 含 disabled / groupPinned |
143
164
  | selectedRender | `(option, info) => ReactNode` | — | 自定义触发器中的紧凑已选内容;单选和多选标签均支持 |
144
165
  | listHeight | `number` | `260` | 菜单选项滚动区域最大高度 |
145
166
  | popupStyle | `CSSProperties` | — | Portal 菜单内联样式,可覆盖宽度或高度 |
@@ -158,8 +179,18 @@ loading 时显示 spinner,emptyContent 自定义空态。
158
179
  | ariaLabel | `string` | — | 复杂选项或 optionRender 的独立可访问名称 |
159
180
  | icon | `IconName | ReactNode` | — | 前置图标,可传内置图标名或自定义节点 |
160
181
  | description | `ReactNode` | — | 次要描述 |
182
+ | extra | `ReactNode` | — | 选项尾部的静态独立内容或操作;optionExtraRender 存在时由其覆盖 |
161
183
  | disabled | `boolean` | `false` | 禁用项 |
162
184
 
163
185
 
186
+ **SelectOptionGroup**
187
+
188
+ | Prop | 类型 | 默认 | 说明 |
189
+ | --- | --- | --- | --- |
190
+ | label \* | `ReactNode` | — | 分组标题 |
191
+ | options \* | `SelectOption<T>[]` | — | 分组内选项 |
192
+ | pinned | `boolean` | `false` | 稳定提升到菜单顶部,其他项目保持原始顺序 |
193
+
194
+
164
195
  ---
165
196
  [← 回到索引](../llms.md)
@@ -16,15 +16,31 @@ import { Switch } from "@fangxinyan/lumina";
16
16
  <Switch checked={v} onChange={setV} label="开启通知" />
17
17
  ```
18
18
 
19
- ### 原生表单
19
+ ### Lumina 表单校验
20
20
 
21
- 开启后按 name / value 参与原生表单提交,required 可交给浏览器校验。
21
+ 通过 Form.Item 与 message 提供一致的组件反馈,不再触发浏览器原生 required 气泡。name / value 仍会透传到真实 checkbox。
22
22
 
23
23
  ```tsx
24
- <form onSubmit={(event) => event.preventDefault()}>
25
- <Switch name="notifications" value="enabled" required label="开启通知" />
24
+ <Form
25
+ layout="inline"
26
+ onFinish={() => message.success({ key: "switch-validation", content: "通知已开启" })}
27
+ onFinishFailed={() => message.warning({ key: "switch-validation", content: "请先开启通知" })}
28
+ >
29
+ <Form.Item
30
+ name="notifications"
31
+ valuePropName="checked"
32
+ rules={[{
33
+ required: true,
34
+ message: "请开启通知",
35
+ validator: (_rule, checked) => checked
36
+ ? Promise.resolve()
37
+ : Promise.reject(new Error("请开启通知")),
38
+ }]}
39
+ >
40
+ <Switch name="notifications" value="enabled" label="开启通知" />
41
+ </Form.Item>
26
42
  <Button type="submit">验证提交</Button>
27
- </form>
43
+ </Form>
28
44
  ```
29
45
 
30
46
  ### 尺寸
@@ -66,6 +82,7 @@ checkedChildren / unCheckedChildren 在轨道内显示简短文字(如 ON/OFF)
66
82
  | size | `"sm" | "md"` | `"md"` | 尺寸 |
67
83
  | name / value | `string` | — | 原生表单字段名与开启时提交的值 |
68
84
  | required / form | `boolean / string` | — | 原生必填约束与关联 form id |
85
+ | invalid | `boolean` | `false` | 错误态,可由 Form.Item 自动注入 |
69
86
  | disabled | `boolean` | `false` | 禁用 |
70
87
 
71
88
 
package/docs/llms.md CHANGED
@@ -3,7 +3,7 @@
3
3
  > 拟态风格的 React 18 组件库,目标是 Electron 桌面应用。**写给 AI 编程助手**的按需文档 —— 每个组件单独一个 `.md`,避免一次性读取全部。示例源自 playground 的 demo,可直接复制运行。
4
4
 
5
5
  - **包名**: `@fangxinyan/lumina`
6
- - **版本**: `0.8.0`
6
+ - **版本**: `0.9.0`
7
7
  - **React 最低版本**: 18
8
8
  - **环境**: 带打包器的 React 工程(Vite / Next.js / Webpack / Remix / Electron + Vite 等)
9
9
  - **零运行时依赖**: 只依赖 `react` / `react-dom` (peer deps)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fangxinyan/lumina",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Lumina — Neumorphic component library for Electron & React apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",