@fangxinyan/lumina 0.1.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 (319) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +110 -0
  3. package/dist/Accordion-GSBY5T5U.css +38 -0
  4. package/dist/Accordion.cjs +13 -0
  5. package/dist/Accordion.cjs.map +1 -0
  6. package/dist/Accordion.d.cts +21 -0
  7. package/dist/Accordion.d.ts +21 -0
  8. package/dist/Accordion.js +4 -0
  9. package/dist/Accordion.js.map +1 -0
  10. package/dist/Alert-LSKBYDRI.css +35 -0
  11. package/dist/Alert.cjs +13 -0
  12. package/dist/Alert.cjs.map +1 -0
  13. package/dist/Alert.d.cts +17 -0
  14. package/dist/Alert.d.ts +17 -0
  15. package/dist/Alert.js +4 -0
  16. package/dist/Alert.js.map +1 -0
  17. package/dist/AppShell-RCALXUCZ.css +162 -0
  18. package/dist/AppShell.cjs +24 -0
  19. package/dist/AppShell.cjs.map +1 -0
  20. package/dist/AppShell.d.cts +68 -0
  21. package/dist/AppShell.d.ts +68 -0
  22. package/dist/AppShell.js +3 -0
  23. package/dist/AppShell.js.map +1 -0
  24. package/dist/Avatar-OXDSG5Q6.css +36 -0
  25. package/dist/Avatar.cjs +12 -0
  26. package/dist/Avatar.cjs.map +1 -0
  27. package/dist/Avatar.d.cts +15 -0
  28. package/dist/Avatar.d.ts +15 -0
  29. package/dist/Avatar.js +3 -0
  30. package/dist/Avatar.js.map +1 -0
  31. package/dist/Button-5UI7QXGU.css +96 -0
  32. package/dist/Button.cjs +17 -0
  33. package/dist/Button.cjs.map +1 -0
  34. package/dist/Button.d.cts +41 -0
  35. package/dist/Button.d.ts +41 -0
  36. package/dist/Button.js +4 -0
  37. package/dist/Button.js.map +1 -0
  38. package/dist/Calendar-LHZELUDL.css +65 -0
  39. package/dist/Calendar.cjs +13 -0
  40. package/dist/Calendar.cjs.map +1 -0
  41. package/dist/Calendar.d.cts +16 -0
  42. package/dist/Calendar.d.ts +16 -0
  43. package/dist/Calendar.js +4 -0
  44. package/dist/Calendar.js.map +1 -0
  45. package/dist/Card-2CHHFD4Y.css +28 -0
  46. package/dist/Card.cjs +16 -0
  47. package/dist/Card.cjs.map +1 -0
  48. package/dist/Card.d.cts +25 -0
  49. package/dist/Card.d.ts +25 -0
  50. package/dist/Card.js +3 -0
  51. package/dist/Card.js.map +1 -0
  52. package/dist/Cascader-TO2QMSLJ.css +76 -0
  53. package/dist/Cascader.cjs +13 -0
  54. package/dist/Cascader.cjs.map +1 -0
  55. package/dist/Cascader.d.cts +23 -0
  56. package/dist/Cascader.d.ts +23 -0
  57. package/dist/Cascader.js +4 -0
  58. package/dist/Cascader.js.map +1 -0
  59. package/dist/Checkbox-SKJATVSN.css +72 -0
  60. package/dist/Checkbox.cjs +17 -0
  61. package/dist/Checkbox.cjs.map +1 -0
  62. package/dist/Checkbox.d.cts +33 -0
  63. package/dist/Checkbox.d.ts +33 -0
  64. package/dist/Checkbox.js +4 -0
  65. package/dist/Checkbox.js.map +1 -0
  66. package/dist/Divider-Z37INS5E.css +49 -0
  67. package/dist/Divider.cjs +12 -0
  68. package/dist/Divider.cjs.map +1 -0
  69. package/dist/Divider.d.cts +12 -0
  70. package/dist/Divider.d.ts +12 -0
  71. package/dist/Divider.js +3 -0
  72. package/dist/Divider.js.map +1 -0
  73. package/dist/Empty-VM23UNLQ.css +138 -0
  74. package/dist/Empty.cjs +20 -0
  75. package/dist/Empty.cjs.map +1 -0
  76. package/dist/Empty.d.cts +37 -0
  77. package/dist/Empty.d.ts +37 -0
  78. package/dist/Empty.js +3 -0
  79. package/dist/Empty.js.map +1 -0
  80. package/dist/Icon.cjs +16 -0
  81. package/dist/Icon.cjs.map +1 -0
  82. package/dist/Icon.d.cts +21 -0
  83. package/dist/Icon.d.ts +21 -0
  84. package/dist/Icon.js +3 -0
  85. package/dist/Icon.js.map +1 -0
  86. package/dist/Image-WYWORJT4.css +106 -0
  87. package/dist/Image.cjs +17 -0
  88. package/dist/Image.cjs.map +1 -0
  89. package/dist/Image.d.cts +30 -0
  90. package/dist/Image.d.ts +30 -0
  91. package/dist/Image.js +4 -0
  92. package/dist/Image.js.map +1 -0
  93. package/dist/Input-Z526ARZP.css +66 -0
  94. package/dist/Input.cjs +17 -0
  95. package/dist/Input.cjs.map +1 -0
  96. package/dist/Input.d.cts +36 -0
  97. package/dist/Input.d.ts +36 -0
  98. package/dist/Input.js +4 -0
  99. package/dist/Input.js.map +1 -0
  100. package/dist/List-W5BW4D2P.css +26 -0
  101. package/dist/List.cjs +12 -0
  102. package/dist/List.cjs.map +1 -0
  103. package/dist/List.d.cts +20 -0
  104. package/dist/List.d.ts +20 -0
  105. package/dist/List.js +3 -0
  106. package/dist/List.js.map +1 -0
  107. package/dist/Modal-AYKNIWWQ.css +79 -0
  108. package/dist/Modal.cjs +18 -0
  109. package/dist/Modal.cjs.map +1 -0
  110. package/dist/Modal.d.cts +27 -0
  111. package/dist/Modal.d.ts +27 -0
  112. package/dist/Modal.js +5 -0
  113. package/dist/Modal.js.map +1 -0
  114. package/dist/Pagination-6FFOI4NM.css +35 -0
  115. package/dist/Pagination.cjs +13 -0
  116. package/dist/Pagination.cjs.map +1 -0
  117. package/dist/Pagination.d.cts +19 -0
  118. package/dist/Pagination.d.ts +19 -0
  119. package/dist/Pagination.js +4 -0
  120. package/dist/Pagination.js.map +1 -0
  121. package/dist/Popover-WXEVUYBG.css +15 -0
  122. package/dist/Popover.cjs +12 -0
  123. package/dist/Popover.cjs.map +1 -0
  124. package/dist/Popover.d.cts +16 -0
  125. package/dist/Popover.d.ts +16 -0
  126. package/dist/Popover.js +3 -0
  127. package/dist/Popover.js.map +1 -0
  128. package/dist/Progress-IXRSO5TW.css +63 -0
  129. package/dist/Progress.cjs +16 -0
  130. package/dist/Progress.cjs.map +1 -0
  131. package/dist/Progress.d.cts +26 -0
  132. package/dist/Progress.d.ts +26 -0
  133. package/dist/Progress.js +3 -0
  134. package/dist/Progress.js.map +1 -0
  135. package/dist/Select-DDJJBQEL.css +263 -0
  136. package/dist/Select.cjs +14 -0
  137. package/dist/Select.cjs.map +1 -0
  138. package/dist/Select.d.cts +68 -0
  139. package/dist/Select.d.ts +68 -0
  140. package/dist/Select.js +5 -0
  141. package/dist/Select.js.map +1 -0
  142. package/dist/Slider-RE4HZQKF.css +59 -0
  143. package/dist/Slider.cjs +12 -0
  144. package/dist/Slider.cjs.map +1 -0
  145. package/dist/Slider.d.cts +18 -0
  146. package/dist/Slider.d.ts +18 -0
  147. package/dist/Slider.js +3 -0
  148. package/dist/Slider.js.map +1 -0
  149. package/dist/Switch-NP7KKJOX.css +44 -0
  150. package/dist/Switch.cjs +12 -0
  151. package/dist/Switch.cjs.map +1 -0
  152. package/dist/Switch.d.cts +18 -0
  153. package/dist/Switch.d.ts +18 -0
  154. package/dist/Switch.js +3 -0
  155. package/dist/Switch.js.map +1 -0
  156. package/dist/Table-ZDPGWLH3.css +139 -0
  157. package/dist/Table.cjs +18 -0
  158. package/dist/Table.cjs.map +1 -0
  159. package/dist/Table.d.cts +57 -0
  160. package/dist/Table.d.ts +57 -0
  161. package/dist/Table.js +5 -0
  162. package/dist/Table.js.map +1 -0
  163. package/dist/Tabs-A27TSZOP.css +95 -0
  164. package/dist/Tabs.cjs +16 -0
  165. package/dist/Tabs.cjs.map +1 -0
  166. package/dist/Tabs.d.cts +35 -0
  167. package/dist/Tabs.d.ts +35 -0
  168. package/dist/Tabs.js +3 -0
  169. package/dist/Tabs.js.map +1 -0
  170. package/dist/Tag-EYOY3UWG.css +49 -0
  171. package/dist/Tag.cjs +17 -0
  172. package/dist/Tag.cjs.map +1 -0
  173. package/dist/Tag.d.cts +27 -0
  174. package/dist/Tag.d.ts +27 -0
  175. package/dist/Tag.js +4 -0
  176. package/dist/Tag.js.map +1 -0
  177. package/dist/Theme.cjs +44 -0
  178. package/dist/Theme.cjs.map +1 -0
  179. package/dist/Theme.d.cts +127 -0
  180. package/dist/Theme.d.ts +127 -0
  181. package/dist/Theme.js +3 -0
  182. package/dist/Theme.js.map +1 -0
  183. package/dist/Toast-ERHDN3WG.css +45 -0
  184. package/dist/Toast.cjs +17 -0
  185. package/dist/Toast.cjs.map +1 -0
  186. package/dist/Toast.d.cts +26 -0
  187. package/dist/Toast.d.ts +26 -0
  188. package/dist/Toast.js +4 -0
  189. package/dist/Toast.js.map +1 -0
  190. package/dist/Tooltip-RT4BOVTD.css +23 -0
  191. package/dist/Tooltip.cjs +12 -0
  192. package/dist/Tooltip.cjs.map +1 -0
  193. package/dist/Tooltip.d.cts +13 -0
  194. package/dist/Tooltip.d.ts +13 -0
  195. package/dist/Tooltip.js +3 -0
  196. package/dist/Tooltip.js.map +1 -0
  197. package/dist/chunk-2VA2HSL4.cjs +121 -0
  198. package/dist/chunk-2VA2HSL4.cjs.map +1 -0
  199. package/dist/chunk-2W2AJUZW.js +118 -0
  200. package/dist/chunk-2W2AJUZW.js.map +1 -0
  201. package/dist/chunk-3QWHDCHJ.js +53 -0
  202. package/dist/chunk-3QWHDCHJ.js.map +1 -0
  203. package/dist/chunk-3WAFIUDQ.js +85 -0
  204. package/dist/chunk-3WAFIUDQ.js.map +1 -0
  205. package/dist/chunk-4AA22BOG.js +63 -0
  206. package/dist/chunk-4AA22BOG.js.map +1 -0
  207. package/dist/chunk-4GT5TOHP.js +18 -0
  208. package/dist/chunk-4GT5TOHP.js.map +1 -0
  209. package/dist/chunk-5EYI27B6.js +64 -0
  210. package/dist/chunk-5EYI27B6.js.map +1 -0
  211. package/dist/chunk-6YVW3VYL.js +51 -0
  212. package/dist/chunk-6YVW3VYL.js.map +1 -0
  213. package/dist/chunk-77NP67ML.cjs +70 -0
  214. package/dist/chunk-77NP67ML.cjs.map +1 -0
  215. package/dist/chunk-7CKHWCEA.cjs +110 -0
  216. package/dist/chunk-7CKHWCEA.cjs.map +1 -0
  217. package/dist/chunk-7H453VPW.cjs +20 -0
  218. package/dist/chunk-7H453VPW.cjs.map +1 -0
  219. package/dist/chunk-7NM5BRUX.js +91 -0
  220. package/dist/chunk-7NM5BRUX.js.map +1 -0
  221. package/dist/chunk-7U6I44RV.cjs +283 -0
  222. package/dist/chunk-7U6I44RV.cjs.map +1 -0
  223. package/dist/chunk-AAMYURWQ.cjs +87 -0
  224. package/dist/chunk-AAMYURWQ.cjs.map +1 -0
  225. package/dist/chunk-ALFDP5WX.cjs +70 -0
  226. package/dist/chunk-ALFDP5WX.cjs.map +1 -0
  227. package/dist/chunk-C5TGQ7CV.cjs +114 -0
  228. package/dist/chunk-C5TGQ7CV.cjs.map +1 -0
  229. package/dist/chunk-F3NHM4GX.js +20 -0
  230. package/dist/chunk-F3NHM4GX.js.map +1 -0
  231. package/dist/chunk-FI7QO3I5.cjs +90 -0
  232. package/dist/chunk-FI7QO3I5.cjs.map +1 -0
  233. package/dist/chunk-FMG3ZPGK.js +88 -0
  234. package/dist/chunk-FMG3ZPGK.js.map +1 -0
  235. package/dist/chunk-G3UWXSNQ.js +71 -0
  236. package/dist/chunk-G3UWXSNQ.js.map +1 -0
  237. package/dist/chunk-GEYMWUW6.js +146 -0
  238. package/dist/chunk-GEYMWUW6.js.map +1 -0
  239. package/dist/chunk-HTP6UEVR.js +48 -0
  240. package/dist/chunk-HTP6UEVR.js.map +1 -0
  241. package/dist/chunk-I2ERCHFV.cjs +58 -0
  242. package/dist/chunk-I2ERCHFV.cjs.map +1 -0
  243. package/dist/chunk-I7SSCSFH.js +253 -0
  244. package/dist/chunk-I7SSCSFH.js.map +1 -0
  245. package/dist/chunk-IGHLSNXT.cjs +109 -0
  246. package/dist/chunk-IGHLSNXT.cjs.map +1 -0
  247. package/dist/chunk-IKI5CS4L.cjs +91 -0
  248. package/dist/chunk-IKI5CS4L.cjs.map +1 -0
  249. package/dist/chunk-ITGCHU3Y.cjs +94 -0
  250. package/dist/chunk-ITGCHU3Y.cjs.map +1 -0
  251. package/dist/chunk-JNFCTYJT.cjs +31 -0
  252. package/dist/chunk-JNFCTYJT.cjs.map +1 -0
  253. package/dist/chunk-JWFVSBVX.cjs +30 -0
  254. package/dist/chunk-JWFVSBVX.cjs.map +1 -0
  255. package/dist/chunk-K5MHL732.js +81 -0
  256. package/dist/chunk-K5MHL732.js.map +1 -0
  257. package/dist/chunk-K67KIKX4.cjs +67 -0
  258. package/dist/chunk-K67KIKX4.cjs.map +1 -0
  259. package/dist/chunk-KF4MCHZL.cjs +105 -0
  260. package/dist/chunk-KF4MCHZL.cjs.map +1 -0
  261. package/dist/chunk-M6CGYGEO.js +91 -0
  262. package/dist/chunk-M6CGYGEO.js.map +1 -0
  263. package/dist/chunk-M6OTFXZA.js +48 -0
  264. package/dist/chunk-M6OTFXZA.js.map +1 -0
  265. package/dist/chunk-NWJW5KLN.js +29 -0
  266. package/dist/chunk-NWJW5KLN.js.map +1 -0
  267. package/dist/chunk-NXOAYNG2.cjs +52 -0
  268. package/dist/chunk-NXOAYNG2.cjs.map +1 -0
  269. package/dist/chunk-NZPJ7BUB.cjs +22 -0
  270. package/dist/chunk-NZPJ7BUB.cjs.map +1 -0
  271. package/dist/chunk-OUJBCNWD.js +52 -0
  272. package/dist/chunk-OUJBCNWD.js.map +1 -0
  273. package/dist/chunk-OXYFB2ZI.js +35 -0
  274. package/dist/chunk-OXYFB2ZI.js.map +1 -0
  275. package/dist/chunk-Q33V7MSK.js +79 -0
  276. package/dist/chunk-Q33V7MSK.js.map +1 -0
  277. package/dist/chunk-QESLHLTG.cjs +107 -0
  278. package/dist/chunk-QESLHLTG.cjs.map +1 -0
  279. package/dist/chunk-QPZZNSRB.js +65 -0
  280. package/dist/chunk-QPZZNSRB.js.map +1 -0
  281. package/dist/chunk-QT7SJITQ.cjs +114 -0
  282. package/dist/chunk-QT7SJITQ.cjs.map +1 -0
  283. package/dist/chunk-RMD6KQ4H.cjs +56 -0
  284. package/dist/chunk-RMD6KQ4H.cjs.map +1 -0
  285. package/dist/chunk-T5AH4FCV.js +280 -0
  286. package/dist/chunk-T5AH4FCV.js.map +1 -0
  287. package/dist/chunk-U6ODMPTI.cjs +74 -0
  288. package/dist/chunk-U6ODMPTI.cjs.map +1 -0
  289. package/dist/chunk-V2ZUOEXM.cjs +73 -0
  290. package/dist/chunk-V2ZUOEXM.cjs.map +1 -0
  291. package/dist/chunk-VJN637MT.js +49 -0
  292. package/dist/chunk-VJN637MT.js.map +1 -0
  293. package/dist/chunk-VMHNKD3N.cjs +56 -0
  294. package/dist/chunk-VMHNKD3N.cjs.map +1 -0
  295. package/dist/chunk-VXITDXLW.js +28 -0
  296. package/dist/chunk-VXITDXLW.js.map +1 -0
  297. package/dist/chunk-XFRP2MBR.js +87 -0
  298. package/dist/chunk-XFRP2MBR.js.map +1 -0
  299. package/dist/chunk-XRZ5OKZH.js +101 -0
  300. package/dist/chunk-XRZ5OKZH.js.map +1 -0
  301. package/dist/chunk-Y6FVCCUE.js +34 -0
  302. package/dist/chunk-Y6FVCCUE.js.map +1 -0
  303. package/dist/chunk-YVO7XO4W.cjs +149 -0
  304. package/dist/chunk-YVO7XO4W.cjs.map +1 -0
  305. package/dist/chunk-ZMDVK2U3.cjs +302 -0
  306. package/dist/chunk-ZMDVK2U3.cjs.map +1 -0
  307. package/dist/chunk-ZXM247EM.cjs +123 -0
  308. package/dist/chunk-ZXM247EM.cjs.map +1 -0
  309. package/dist/index.cjs +249 -0
  310. package/dist/index.cjs.map +1 -0
  311. package/dist/index.d.cts +35 -0
  312. package/dist/index.d.ts +35 -0
  313. package/dist/index.js +35 -0
  314. package/dist/index.js.map +1 -0
  315. package/dist/shared-NJHRNLRH.css +4 -0
  316. package/dist/styles.css +2068 -0
  317. package/dist/tokens-HWQ7KWPG.css +153 -0
  318. package/dist/tokens.css +153 -0
  319. package/package.json +77 -0
@@ -0,0 +1,153 @@
1
+ /* ============================================================================
2
+ * Lumina · Design Tokens
3
+ * Override at :root or any ancestor element (e.g. <AppShell>) via data-* attrs.
4
+ * ========================================================================== */
5
+
6
+ :root {
7
+ /* ---- Surface (light) ---- */
8
+ --bg: #e8eef5;
9
+ --bg-raised: #edf2f8;
10
+ --bg-sunken: #dde4ed;
11
+ --fg: #3a4558;
12
+ --fg-muted: #7b8599;
13
+ --fg-subtle: #9ca7ba;
14
+ --border: rgba(130, 148, 175, 0.14);
15
+ --divider: rgba(130, 148, 175, 0.18);
16
+
17
+ /* ---- Shadows ---- */
18
+ --shadow-dark: rgba(163, 177, 198, 0.55);
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
+
25
+ /* Distance multiplier (tweakable at runtime) */
26
+ --d: 1;
27
+
28
+ --neu-out:
29
+ var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
30
+ calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
31
+
32
+ --neu-out-sm:
33
+ calc(var(--shadow-offset) * 0.5) calc(var(--shadow-offset) * 0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-dark),
34
+ calc(var(--shadow-offset) * -0.5) calc(var(--shadow-offset) * -0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-light);
35
+
36
+ --neu-out-lg:
37
+ calc(var(--shadow-offset) * 1.6) calc(var(--shadow-offset) * 1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-dark),
38
+ calc(var(--shadow-offset) * -1.6) calc(var(--shadow-offset) * -1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-light);
39
+
40
+ --neu-in:
41
+ inset var(--shadow-inset-offset) var(--shadow-inset-offset) var(--shadow-inset-blur) var(--shadow-dark),
42
+ inset calc(var(--shadow-inset-offset) * -1) calc(var(--shadow-inset-offset) * -1) var(--shadow-inset-blur) var(--shadow-light);
43
+
44
+ --neu-in-sm:
45
+ 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),
46
+ 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);
47
+
48
+ --neu-flat:
49
+ 1px 1px 2px var(--shadow-dark),
50
+ -1px -1px 2px var(--shadow-light);
51
+
52
+ /* ---- Accent (default sky) ---- */
53
+ --accent: oklch(68% 0.14 235);
54
+ --accent-ink: oklch(42% 0.12 235);
55
+ --accent-soft: oklch(92% 0.04 235);
56
+ --accent-glow: oklch(68% 0.14 235 / 0.35);
57
+
58
+ /* ---- Semantic ---- */
59
+ --info: oklch(68% 0.14 235);
60
+ --success: oklch(68% 0.14 150);
61
+ --warning: oklch(75% 0.14 75);
62
+ --danger: oklch(64% 0.18 25);
63
+
64
+ /* ---- Radius ---- */
65
+ --r-xs: 8px;
66
+ --r-sm: 12px;
67
+ --r-md: 16px;
68
+ --r-lg: 20px;
69
+ --r-xl: 28px;
70
+ --r-pill: 999px;
71
+
72
+ /* ---- Spacing ---- */
73
+ --gap-1: 4px;
74
+ --gap-2: 8px;
75
+ --gap-3: 12px;
76
+ --gap-4: 16px;
77
+ --gap-5: 20px;
78
+ --gap-6: 24px;
79
+ --gap-8: 32px;
80
+ --gap-10: 40px;
81
+
82
+ /* ---- Control sizes (density) ---- */
83
+ --ctrl-h: 40px;
84
+ --ctrl-pad-x: 18px;
85
+
86
+ /* ---- Type ---- */
87
+ --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
88
+ "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans SC",
89
+ "Noto Sans CJK SC", sans-serif;
90
+ --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Consolas, monospace;
91
+ --font-display: "SF Pro Display", var(--font-sans);
92
+
93
+ /* ---- Motion ---- */
94
+ --ease: cubic-bezier(0.22, 0.61, 0.36, 1);
95
+ --dur-fast: 140ms;
96
+ --dur: 220ms;
97
+ --dur-slow: 360ms;
98
+ }
99
+
100
+ /* ---- Dark theme ----
101
+ 深色模式的拟态不能照搬浅色思路:白色高光会变成刺眼的白圈。
102
+ 这里做法:保留深色阴影给"下沉"深度,把"上凸高光"压到很低 alpha,
103
+ 让整体更接近 flat-with-depth 而不是强烈的 3D 凸起。 */
104
+ :root[data-theme="dark"],
105
+ [data-theme="dark"] {
106
+ --bg: #1b2030;
107
+ --bg-raised: #242a3c;
108
+ --bg-sunken: #151a27;
109
+ --fg: #d8deeb;
110
+ --fg-muted: #8b94ab;
111
+ --fg-subtle: #5f6a82;
112
+ --border: rgba(0, 0, 0, 0.35);
113
+ --divider: rgba(255, 255, 255, 0.06);
114
+ /* 强 dark shadow 提供深度;light 高光几乎不可见,去掉白圈效果 */
115
+ --shadow-dark: rgba(0, 0, 0, 0.55);
116
+ --shadow-light: rgba(130, 145, 180, 0.06);
117
+ /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
118
+ --shadow-offset: 4px;
119
+ --shadow-blur: 10px;
120
+ --shadow-inset-offset: 3px;
121
+ --shadow-inset-blur: 7px;
122
+ --accent-soft: oklch(35% 0.06 235);
123
+ --accent-ink: oklch(82% 0.09 235);
124
+ --accent-glow: oklch(68% 0.14 235 / 0.18);
125
+ }
126
+
127
+ /* 深色模式的 accent-glow 统一降低强度,避免按钮外圈过亮 */
128
+ [data-theme="dark"][data-accent="sky"] { --accent-soft: oklch(35% 0.08 235); --accent-ink: oklch(82% 0.10 235); --accent-glow: oklch(68% 0.14 235 / 0.18); }
129
+ [data-theme="dark"][data-accent="coral"] { --accent-soft: oklch(38% 0.09 35); --accent-ink: oklch(84% 0.10 35); --accent-glow: oklch(72% 0.16 35 / 0.18); }
130
+ [data-theme="dark"][data-accent="mint"] { --accent-soft: oklch(36% 0.08 165); --accent-ink: oklch(83% 0.10 165); --accent-glow: oklch(72% 0.13 165 / 0.18); }
131
+ [data-theme="dark"][data-accent="violet"] { --accent-soft: oklch(36% 0.09 290); --accent-ink: oklch(82% 0.11 290); --accent-glow: oklch(66% 0.16 290 / 0.18); }
132
+ [data-theme="dark"][data-accent="amber"] { --accent-soft: oklch(38% 0.08 75); --accent-ink: oklch(85% 0.10 75); --accent-glow: oklch(76% 0.14 75 / 0.18); }
133
+ [data-theme="dark"][data-accent="rose"] { --accent-soft: oklch(38% 0.09 10); --accent-ink: oklch(84% 0.11 10); --accent-glow: oklch(68% 0.17 10 / 0.18); }
134
+
135
+ /* ---- Accent palette ---- */
136
+ [data-accent="sky"] { --accent: oklch(68% 0.14 235); --accent-ink: oklch(42% 0.12 235); --accent-soft: oklch(92% 0.04 235); --accent-glow: oklch(68% 0.14 235 / 0.35); }
137
+ [data-accent="coral"] { --accent: oklch(72% 0.16 35); --accent-ink: oklch(48% 0.14 35); --accent-soft: oklch(94% 0.04 35); --accent-glow: oklch(72% 0.16 35 / 0.35); }
138
+ [data-accent="mint"] { --accent: oklch(72% 0.13 165); --accent-ink: oklch(46% 0.11 165); --accent-soft: oklch(93% 0.04 165); --accent-glow: oklch(72% 0.13 165 / 0.35); }
139
+ [data-accent="violet"] { --accent: oklch(66% 0.16 290); --accent-ink: oklch(44% 0.14 290); --accent-soft: oklch(93% 0.04 290); --accent-glow: oklch(66% 0.16 290 / 0.35); }
140
+ [data-accent="amber"] { --accent: oklch(76% 0.14 75); --accent-ink: oklch(50% 0.12 75); --accent-soft: oklch(94% 0.05 75); --accent-glow: oklch(76% 0.14 75 / 0.35); }
141
+ [data-accent="rose"] { --accent: oklch(68% 0.17 10); --accent-ink: oklch(46% 0.15 10); --accent-soft: oklch(93% 0.04 10); --accent-glow: oklch(68% 0.17 10 / 0.35); }
142
+
143
+ /* (dark-mode per-accent overrides are defined above, with --accent-glow included) */
144
+
145
+ /* ---- Density ---- */
146
+ [data-density="compact"] {
147
+ --gap-3: 8px; --gap-4: 12px; --gap-5: 14px; --gap-6: 18px; --gap-8: 24px;
148
+ --ctrl-h: 34px; --ctrl-pad-x: 14px;
149
+ }
150
+ [data-density="spacious"] {
151
+ --gap-3: 16px; --gap-4: 20px; --gap-5: 26px; --gap-6: 32px; --gap-8: 44px;
152
+ --ctrl-h: 46px; --ctrl-pad-x: 22px;
153
+ }
@@ -0,0 +1,153 @@
1
+ /* ============================================================================
2
+ * Lumina · Design Tokens
3
+ * Override at :root or any ancestor element (e.g. <AppShell>) via data-* attrs.
4
+ * ========================================================================== */
5
+
6
+ :root {
7
+ /* ---- Surface (light) ---- */
8
+ --bg: #e8eef5;
9
+ --bg-raised: #edf2f8;
10
+ --bg-sunken: #dde4ed;
11
+ --fg: #3a4558;
12
+ --fg-muted: #7b8599;
13
+ --fg-subtle: #9ca7ba;
14
+ --border: rgba(130, 148, 175, 0.14);
15
+ --divider: rgba(130, 148, 175, 0.18);
16
+
17
+ /* ---- Shadows ---- */
18
+ --shadow-dark: rgba(163, 177, 198, 0.55);
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
+
25
+ /* Distance multiplier (tweakable at runtime) */
26
+ --d: 1;
27
+
28
+ --neu-out:
29
+ var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
30
+ calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
31
+
32
+ --neu-out-sm:
33
+ calc(var(--shadow-offset) * 0.5) calc(var(--shadow-offset) * 0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-dark),
34
+ calc(var(--shadow-offset) * -0.5) calc(var(--shadow-offset) * -0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-light);
35
+
36
+ --neu-out-lg:
37
+ calc(var(--shadow-offset) * 1.6) calc(var(--shadow-offset) * 1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-dark),
38
+ calc(var(--shadow-offset) * -1.6) calc(var(--shadow-offset) * -1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-light);
39
+
40
+ --neu-in:
41
+ inset var(--shadow-inset-offset) var(--shadow-inset-offset) var(--shadow-inset-blur) var(--shadow-dark),
42
+ inset calc(var(--shadow-inset-offset) * -1) calc(var(--shadow-inset-offset) * -1) var(--shadow-inset-blur) var(--shadow-light);
43
+
44
+ --neu-in-sm:
45
+ 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),
46
+ 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);
47
+
48
+ --neu-flat:
49
+ 1px 1px 2px var(--shadow-dark),
50
+ -1px -1px 2px var(--shadow-light);
51
+
52
+ /* ---- Accent (default sky) ---- */
53
+ --accent: oklch(68% 0.14 235);
54
+ --accent-ink: oklch(42% 0.12 235);
55
+ --accent-soft: oklch(92% 0.04 235);
56
+ --accent-glow: oklch(68% 0.14 235 / 0.35);
57
+
58
+ /* ---- Semantic ---- */
59
+ --info: oklch(68% 0.14 235);
60
+ --success: oklch(68% 0.14 150);
61
+ --warning: oklch(75% 0.14 75);
62
+ --danger: oklch(64% 0.18 25);
63
+
64
+ /* ---- Radius ---- */
65
+ --r-xs: 8px;
66
+ --r-sm: 12px;
67
+ --r-md: 16px;
68
+ --r-lg: 20px;
69
+ --r-xl: 28px;
70
+ --r-pill: 999px;
71
+
72
+ /* ---- Spacing ---- */
73
+ --gap-1: 4px;
74
+ --gap-2: 8px;
75
+ --gap-3: 12px;
76
+ --gap-4: 16px;
77
+ --gap-5: 20px;
78
+ --gap-6: 24px;
79
+ --gap-8: 32px;
80
+ --gap-10: 40px;
81
+
82
+ /* ---- Control sizes (density) ---- */
83
+ --ctrl-h: 40px;
84
+ --ctrl-pad-x: 18px;
85
+
86
+ /* ---- Type ---- */
87
+ --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
88
+ "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans SC",
89
+ "Noto Sans CJK SC", sans-serif;
90
+ --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Consolas, monospace;
91
+ --font-display: "SF Pro Display", var(--font-sans);
92
+
93
+ /* ---- Motion ---- */
94
+ --ease: cubic-bezier(0.22, 0.61, 0.36, 1);
95
+ --dur-fast: 140ms;
96
+ --dur: 220ms;
97
+ --dur-slow: 360ms;
98
+ }
99
+
100
+ /* ---- Dark theme ----
101
+ 深色模式的拟态不能照搬浅色思路:白色高光会变成刺眼的白圈。
102
+ 这里做法:保留深色阴影给"下沉"深度,把"上凸高光"压到很低 alpha,
103
+ 让整体更接近 flat-with-depth 而不是强烈的 3D 凸起。 */
104
+ :root[data-theme="dark"],
105
+ [data-theme="dark"] {
106
+ --bg: #1b2030;
107
+ --bg-raised: #242a3c;
108
+ --bg-sunken: #151a27;
109
+ --fg: #d8deeb;
110
+ --fg-muted: #8b94ab;
111
+ --fg-subtle: #5f6a82;
112
+ --border: rgba(0, 0, 0, 0.35);
113
+ --divider: rgba(255, 255, 255, 0.06);
114
+ /* 强 dark shadow 提供深度;light 高光几乎不可见,去掉白圈效果 */
115
+ --shadow-dark: rgba(0, 0, 0, 0.55);
116
+ --shadow-light: rgba(130, 145, 180, 0.06);
117
+ /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
118
+ --shadow-offset: 4px;
119
+ --shadow-blur: 10px;
120
+ --shadow-inset-offset: 3px;
121
+ --shadow-inset-blur: 7px;
122
+ --accent-soft: oklch(35% 0.06 235);
123
+ --accent-ink: oklch(82% 0.09 235);
124
+ --accent-glow: oklch(68% 0.14 235 / 0.18);
125
+ }
126
+
127
+ /* 深色模式的 accent-glow 统一降低强度,避免按钮外圈过亮 */
128
+ [data-theme="dark"][data-accent="sky"] { --accent-soft: oklch(35% 0.08 235); --accent-ink: oklch(82% 0.10 235); --accent-glow: oklch(68% 0.14 235 / 0.18); }
129
+ [data-theme="dark"][data-accent="coral"] { --accent-soft: oklch(38% 0.09 35); --accent-ink: oklch(84% 0.10 35); --accent-glow: oklch(72% 0.16 35 / 0.18); }
130
+ [data-theme="dark"][data-accent="mint"] { --accent-soft: oklch(36% 0.08 165); --accent-ink: oklch(83% 0.10 165); --accent-glow: oklch(72% 0.13 165 / 0.18); }
131
+ [data-theme="dark"][data-accent="violet"] { --accent-soft: oklch(36% 0.09 290); --accent-ink: oklch(82% 0.11 290); --accent-glow: oklch(66% 0.16 290 / 0.18); }
132
+ [data-theme="dark"][data-accent="amber"] { --accent-soft: oklch(38% 0.08 75); --accent-ink: oklch(85% 0.10 75); --accent-glow: oklch(76% 0.14 75 / 0.18); }
133
+ [data-theme="dark"][data-accent="rose"] { --accent-soft: oklch(38% 0.09 10); --accent-ink: oklch(84% 0.11 10); --accent-glow: oklch(68% 0.17 10 / 0.18); }
134
+
135
+ /* ---- Accent palette ---- */
136
+ [data-accent="sky"] { --accent: oklch(68% 0.14 235); --accent-ink: oklch(42% 0.12 235); --accent-soft: oklch(92% 0.04 235); --accent-glow: oklch(68% 0.14 235 / 0.35); }
137
+ [data-accent="coral"] { --accent: oklch(72% 0.16 35); --accent-ink: oklch(48% 0.14 35); --accent-soft: oklch(94% 0.04 35); --accent-glow: oklch(72% 0.16 35 / 0.35); }
138
+ [data-accent="mint"] { --accent: oklch(72% 0.13 165); --accent-ink: oklch(46% 0.11 165); --accent-soft: oklch(93% 0.04 165); --accent-glow: oklch(72% 0.13 165 / 0.35); }
139
+ [data-accent="violet"] { --accent: oklch(66% 0.16 290); --accent-ink: oklch(44% 0.14 290); --accent-soft: oklch(93% 0.04 290); --accent-glow: oklch(66% 0.16 290 / 0.35); }
140
+ [data-accent="amber"] { --accent: oklch(76% 0.14 75); --accent-ink: oklch(50% 0.12 75); --accent-soft: oklch(94% 0.05 75); --accent-glow: oklch(76% 0.14 75 / 0.35); }
141
+ [data-accent="rose"] { --accent: oklch(68% 0.17 10); --accent-ink: oklch(46% 0.15 10); --accent-soft: oklch(93% 0.04 10); --accent-glow: oklch(68% 0.17 10 / 0.35); }
142
+
143
+ /* (dark-mode per-accent overrides are defined above, with --accent-glow included) */
144
+
145
+ /* ---- Density ---- */
146
+ [data-density="compact"] {
147
+ --gap-3: 8px; --gap-4: 12px; --gap-5: 14px; --gap-6: 18px; --gap-8: 24px;
148
+ --ctrl-h: 34px; --ctrl-pad-x: 14px;
149
+ }
150
+ [data-density="spacious"] {
151
+ --gap-3: 16px; --gap-4: 20px; --gap-5: 26px; --gap-6: 32px; --gap-8: 44px;
152
+ --ctrl-h: 46px; --ctrl-pad-x: 22px;
153
+ }
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "@fangxinyan/lumina",
3
+ "version": "0.1.0",
4
+ "description": "Lumina — Neumorphic component library for Electron & React apps",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./styles": "./dist/styles.css",
16
+ "./tokens": "./dist/tokens.css",
17
+ "./*": {
18
+ "types": "./dist/*.d.ts",
19
+ "import": "./dist/*.js",
20
+ "require": "./dist/*.cjs"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "README.md",
26
+ "LICENSE"
27
+ ],
28
+ "sideEffects": [
29
+ "*.css"
30
+ ],
31
+ "scripts": {
32
+ "dev": "vite",
33
+ "build": "vite build",
34
+ "build:lib": "tsup",
35
+ "preview": "vite preview",
36
+ "typecheck": "tsc --noEmit",
37
+ "prepublishOnly": "npm run typecheck && npm run build:lib"
38
+ },
39
+ "peerDependencies": {
40
+ "react": ">=18",
41
+ "react-dom": ">=18"
42
+ },
43
+ "devDependencies": {
44
+ "@types/react": "^18.3.3",
45
+ "@types/react-dom": "^18.3.0",
46
+ "@vitejs/plugin-react": "^4.3.1",
47
+ "postcss": "^8.5.10",
48
+ "postcss-import": "^16.1.1",
49
+ "react": "^18.3.1",
50
+ "react-dom": "^18.3.1",
51
+ "tsup": "^8.2.4",
52
+ "typescript": "^5.5.4",
53
+ "vite": "^5.4.2"
54
+ },
55
+ "keywords": [
56
+ "react",
57
+ "ui",
58
+ "component-library",
59
+ "neumorphism",
60
+ "electron",
61
+ "typescript",
62
+ "lumina"
63
+ ],
64
+ "author": "fangxinyan",
65
+ "license": "MIT",
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "git+https://github.com/LHorTL/lumina.git"
69
+ },
70
+ "homepage": "https://github.com/LHorTL/lumina#readme",
71
+ "bugs": {
72
+ "url": "https://github.com/LHorTL/lumina/issues"
73
+ },
74
+ "publishConfig": {
75
+ "access": "public"
76
+ }
77
+ }