@mezzanine-ui/system 0.16.0 → 1.0.0-beta.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 (58) hide show
  1. package/_system.scss +46 -7
  2. package/effect/_effect.scss +78 -0
  3. package/effect/_index.scss +1 -0
  4. package/effect/constants.d.ts +1 -0
  5. package/effect/constants.js +3 -0
  6. package/effect/index.d.ts +2 -0
  7. package/effect/index.js +1 -0
  8. package/effect/typings.d.ts +32 -0
  9. package/motion/_motion.scss +47 -11
  10. package/motion/duration.d.ts +1 -1
  11. package/motion/duration.js +6 -5
  12. package/motion/easing.d.ts +1 -1
  13. package/motion/easing.js +3 -4
  14. package/package.json +1 -1
  15. package/palette/_index.scss +3 -1
  16. package/palette/_palette.scss +3 -203
  17. package/palette/_primitives.scss +269 -0
  18. package/palette/_semantic.scss +549 -0
  19. package/palette/constants.d.ts +1 -1
  20. package/palette/constants.js +2 -2
  21. package/palette/index.js +1 -1
  22. package/palette/typings.d.ts +86 -0
  23. package/radius/_index.scss +1 -0
  24. package/radius/_radius.scss +71 -0
  25. package/radius/constants.d.ts +1 -0
  26. package/radius/constants.js +3 -0
  27. package/radius/index.d.ts +3 -0
  28. package/radius/index.js +2 -0
  29. package/radius/radius.d.ts +18 -0
  30. package/radius/radius.js +32 -0
  31. package/size/_size.scss +6 -1
  32. package/size/size.d.ts +2 -0
  33. package/spacing/_index.scss +3 -1
  34. package/spacing/_primitives.scss +155 -0
  35. package/spacing/_semantic.scss +663 -0
  36. package/spacing/_spacing.scss +2 -18
  37. package/spacing/constants.d.ts +1 -0
  38. package/spacing/constants.js +2 -1
  39. package/spacing/index.js +1 -1
  40. package/spacing/toSpacingCssVar.d.ts +1 -0
  41. package/spacing/toSpacingCssVar.js +1 -0
  42. package/spacing/typings.d.ts +81 -0
  43. package/transition/_transition.scss +25 -9
  44. package/typography/SF-Mono/SFMonoMedium.woff +0 -0
  45. package/typography/SF-Mono/SFMonoRegular.woff +0 -0
  46. package/typography/SF-Mono/SFMonoSemibold.woff +0 -0
  47. package/typography/_index.scss +4 -1
  48. package/typography/_primitives.scss +318 -0
  49. package/typography/_semantic.scss +237 -0
  50. package/typography/_sf-mono.scss +34 -0
  51. package/typography/_typography.scss +4 -248
  52. package/typography/_utils.scss +4 -0
  53. package/typography/index.js +1 -0
  54. package/typography/typings.d.ts +9 -1
  55. package/typography/typings.js +4 -0
  56. package/z-index/_z-index.scss +1 -1
  57. package/palette/_constants.scss +0 -267
  58. package/palette/_utils.scss +0 -47
@@ -0,0 +1,549 @@
1
+ @use '../utils/list';
2
+ @use '../utils/map';
3
+ @use 'sass:string';
4
+ @use './primitives' as primitive;
5
+
6
+ $prefix: mzn-color;
7
+
8
+ // 定義所有情境類型
9
+ $semantic-contexts: (
10
+ layer,
11
+ background,
12
+ text,
13
+ icon,
14
+ border,
15
+ separator,
16
+ overlay,
17
+ surface,
18
+ shadow
19
+ );
20
+
21
+ $semantic-colors: (
22
+ layer: (
23
+ 01: (
24
+ light: primitive.variable(gray, 100),
25
+ dark: primitive.variable(black-base, black),
26
+ ),
27
+ 02: (
28
+ light: primitive.variable(white-base, white),
29
+ dark: primitive.variable(gray, 900),
30
+ ),
31
+ 03: (
32
+ light: primitive.variable(gray, 50),
33
+ dark: primitive.variable(gray, 800),
34
+ ),
35
+ ),
36
+ background: (
37
+ base: (
38
+ light: primitive.variable(white-base, white),
39
+ dark: primitive.variable(gray, 900),
40
+ ),
41
+ menu: (
42
+ light: primitive.variable(white-base, white),
43
+ dark: primitive.variable(gray, 950),
44
+ ),
45
+ inverse: (
46
+ light: primitive.variable(white-base, white),
47
+ dark: primitive.variable(gray, 950),
48
+ ),
49
+ fixed-dark: (
50
+ light: primitive.variable(gray, 700),
51
+ dark: primitive.variable(gray, 950),
52
+ ),
53
+ fixed-solid: (
54
+ light: primitive.variable(gray, 800),
55
+ dark: primitive.variable(gray, 800),
56
+ ),
57
+ neutral-ghost: (
58
+ light: primitive.variable(gray, 50),
59
+ dark: primitive.variable(gray, 950),
60
+ ),
61
+ neutral-faint: (
62
+ light: primitive.variable(gray, 100),
63
+ dark: primitive.variable(gray, 800),
64
+ ),
65
+ neutral-subtle: (
66
+ light: primitive.variable(gray, 200),
67
+ dark: primitive.variable(gray, 700),
68
+ ),
69
+ neutral-light: (
70
+ light: primitive.variable(gray, 300),
71
+ dark: primitive.variable(gray, 600),
72
+ ),
73
+ neutral: (
74
+ light: primitive.variable(gray, 400),
75
+ dark: primitive.variable(gray, 500),
76
+ ),
77
+ neutral-strong: (
78
+ light: primitive.variable(gray, 600),
79
+ dark: primitive.variable(gray, 400),
80
+ ),
81
+ neutral-solid: (
82
+ light: primitive.variable(gray, 700),
83
+ dark: primitive.variable(gray, 300),
84
+ ),
85
+ brand-ghost: (
86
+ light: primitive.variable(brand, 50),
87
+ dark: primitive.variable(brand, 950),
88
+ ),
89
+ brand-faint: (
90
+ light: primitive.variable(brand, 100),
91
+ dark: primitive.variable(brand, 900),
92
+ ),
93
+ brand-subtle: (
94
+ light: primitive.variable(brand, 200),
95
+ dark: primitive.variable(brand, 800),
96
+ ),
97
+ brand-light: (
98
+ light: primitive.variable(brand, 300),
99
+ dark: primitive.variable(brand, 700),
100
+ ),
101
+ brand: (
102
+ light: primitive.variable(brand, 500),
103
+ dark: primitive.variable(brand, 500),
104
+ ),
105
+ brand-strong: (
106
+ light: primitive.variable(brand, 700),
107
+ dark: primitive.variable(brand, 300),
108
+ ),
109
+ brand-solid: (
110
+ light: primitive.variable(brand, 800),
111
+ dark: primitive.variable(brand, 200),
112
+ ),
113
+ error-ghost: (
114
+ light: primitive.variable(red, 50),
115
+ dark: primitive.variable(red, 950),
116
+ ),
117
+ error-faint: (
118
+ light: primitive.variable(red, 100),
119
+ dark: primitive.variable(red, 900),
120
+ ),
121
+ error-subtle: (
122
+ light: primitive.variable(red, 200),
123
+ dark: primitive.variable(red, 800),
124
+ ),
125
+ error-light: (
126
+ light: primitive.variable(red, 300),
127
+ dark: primitive.variable(red, 700),
128
+ ),
129
+ error: (
130
+ light: primitive.variable(red, 500),
131
+ dark: primitive.variable(red, 500),
132
+ ),
133
+ error-strong: (
134
+ light: primitive.variable(red, 700),
135
+ dark: primitive.variable(red, 400),
136
+ ),
137
+ error-solid: (
138
+ light: primitive.variable(red, 800),
139
+ dark: primitive.variable(red, 300),
140
+ ),
141
+ warning-ghost: (
142
+ light: primitive.variable(yellow, 50),
143
+ dark: primitive.variable(yellow, 950),
144
+ ),
145
+ warning-faint: (
146
+ light: primitive.variable(yellow, 100),
147
+ dark: primitive.variable(yellow, 900),
148
+ ),
149
+ warning: (
150
+ light: primitive.variable(yellow, 500),
151
+ dark: primitive.variable(yellow, 500),
152
+ ),
153
+ success-ghost: (
154
+ light: primitive.variable(green, 50),
155
+ dark: primitive.variable(green, 950),
156
+ ),
157
+ success-faint: (
158
+ light: primitive.variable(green, 100),
159
+ dark: primitive.variable(green, 950),
160
+ ),
161
+ success: (
162
+ light: primitive.variable(green, 500),
163
+ dark: primitive.variable(green, 500),
164
+ ),
165
+ info-ghost: (
166
+ light: primitive.variable(blue, 50),
167
+ dark: primitive.variable(blue, 950),
168
+ ),
169
+ info-faint: (
170
+ light: primitive.variable(blue, 100),
171
+ dark: primitive.variable(blue, 900),
172
+ ),
173
+ info: (
174
+ light: primitive.variable(blue, 500),
175
+ dark: primitive.variable(blue, 500),
176
+ ),
177
+ ),
178
+ text: (
179
+ fixed-light: (
180
+ light: primitive.variable(white-base, white),
181
+ dark: primitive.variable(white-base, white),
182
+ ),
183
+ neutral-faint: (
184
+ light: primitive.variable(gray, 300),
185
+ dark: primitive.variable(gray, 600),
186
+ ),
187
+ neutral-light: (
188
+ light: primitive.variable(gray, 400),
189
+ dark: primitive.variable(gray, 500),
190
+ ),
191
+ neutral: (
192
+ light: primitive.variable(gray, 500),
193
+ dark: primitive.variable(gray, 400),
194
+ ),
195
+ neutral-strong: (
196
+ light: primitive.variable(gray, 700),
197
+ dark: primitive.variable(gray, 300),
198
+ ),
199
+ neutral-solid: (
200
+ light: primitive.variable(gray, 900),
201
+ dark: primitive.variable(white-base, white),
202
+ ),
203
+ brand: (
204
+ light: primitive.variable(brand, 500),
205
+ dark: primitive.variable(brand, 400),
206
+ ),
207
+ brand-strong: (
208
+ light: primitive.variable(brand, 700),
209
+ dark: primitive.variable(brand, 200),
210
+ ),
211
+ brand-solid: (
212
+ light: primitive.variable(brand, 800),
213
+ dark: primitive.variable(brand, 100),
214
+ ),
215
+ error: (
216
+ light: primitive.variable(red, 500),
217
+ dark: primitive.variable(red, 500),
218
+ ),
219
+ error-strong: (
220
+ light: primitive.variable(red, 700),
221
+ dark: primitive.variable(red, 300),
222
+ ),
223
+ error-solid: (
224
+ light: primitive.variable(red, 800),
225
+ dark: primitive.variable(red, 200),
226
+ ),
227
+ warning: (
228
+ light: primitive.variable(yellow, 500),
229
+ dark: primitive.variable(yellow, 500),
230
+ ),
231
+ warning-strong: (
232
+ light: primitive.variable(yellow, 700),
233
+ dark: primitive.variable(yellow, 400),
234
+ ),
235
+ success: (
236
+ light: primitive.variable(green, 500),
237
+ dark: primitive.variable(green, 400),
238
+ ),
239
+ info: (
240
+ light: primitive.variable(blue, 500),
241
+ dark: primitive.variable(blue, 400),
242
+ ),
243
+ info-strong: (
244
+ light: primitive.variable(blue, 700),
245
+ dark: primitive.variable(blue, 300),
246
+ ),
247
+ ),
248
+ icon: (
249
+ fixed-light: (
250
+ light: primitive.variable(white-base, white),
251
+ dark: primitive.variable(white-base, white),
252
+ ),
253
+ neutral-faint: (
254
+ light: primitive.variable(gray, 300),
255
+ dark: primitive.variable(gray, 600),
256
+ ),
257
+ neutral-light: (
258
+ light: primitive.variable(gray, 400),
259
+ dark: primitive.variable(gray, 500),
260
+ ),
261
+ neutral: (
262
+ light: primitive.variable(gray, 500),
263
+ dark: primitive.variable(gray, 400),
264
+ ),
265
+ neutral-strong: (
266
+ light: primitive.variable(gray, 700),
267
+ dark: primitive.variable(gray, 300),
268
+ ),
269
+ neutral-bold: (
270
+ light: primitive.variable(gray, 800),
271
+ dark: primitive.variable(gray, 100),
272
+ ),
273
+ neutral-solid: (
274
+ light: primitive.variable(gray, 900),
275
+ dark: primitive.variable(white-base, white),
276
+ ),
277
+ brand: (
278
+ light: primitive.variable(brand, 500),
279
+ dark: primitive.variable(brand, 400),
280
+ ),
281
+ brand-strong: (
282
+ light: primitive.variable(brand, 800),
283
+ dark: primitive.variable(brand, 200),
284
+ ),
285
+ brand-solid: (
286
+ light: primitive.variable(brand, 900),
287
+ dark: primitive.variable(brand, 100),
288
+ ),
289
+ error: (
290
+ light: primitive.variable(red, 500),
291
+ dark: primitive.variable(red, 500),
292
+ ),
293
+ error-strong: (
294
+ light: primitive.variable(red, 600),
295
+ dark: primitive.variable(red, 400),
296
+ ),
297
+ error-solid: (
298
+ light: primitive.variable(red, 700),
299
+ dark: primitive.variable(red, 300),
300
+ ),
301
+ warning: (
302
+ light: primitive.variable(yellow, 500),
303
+ dark: primitive.variable(yellow, 500),
304
+ ),
305
+ warning-strong: (
306
+ light: primitive.variable(yellow, 700),
307
+ dark: primitive.variable(yellow, 400),
308
+ ),
309
+ success: (
310
+ light: primitive.variable(green, 500),
311
+ dark: primitive.variable(green, 400),
312
+ ),
313
+ success-strong: (
314
+ light: primitive.variable(green, 700),
315
+ dark: primitive.variable(green, 300),
316
+ ),
317
+ info: (
318
+ light: primitive.variable(blue, 500),
319
+ dark: primitive.variable(blue, 500),
320
+ ),
321
+ info-strong: (
322
+ light: primitive.variable(blue, 700),
323
+ dark: primitive.variable(blue, 300),
324
+ ),
325
+ ),
326
+ border: (
327
+ ghost: (
328
+ light: primitive.variable(black-base, black-alpha-0),
329
+ dark: primitive.variable(black-base, black-alpha-0),
330
+ ),
331
+ fixed-light: (
332
+ light: primitive.variable(white-base, white),
333
+ dark: primitive.variable(white-base, white),
334
+ ),
335
+ fixed-light-alpha: (
336
+ light: primitive.variable(white-base, white-alpha-20),
337
+ dark: primitive.variable(white-base, white-alpha-20),
338
+ ),
339
+ neutral-faint: (
340
+ light: primitive.variable(gray, 200),
341
+ dark: primitive.variable(gray, 700),
342
+ ),
343
+ neutral-light: (
344
+ light: primitive.variable(gray, 300),
345
+ dark: primitive.variable(gray, 600),
346
+ ),
347
+ neutral: (
348
+ light: primitive.variable(gray, 400),
349
+ dark: primitive.variable(gray, 500),
350
+ ),
351
+ neutral-strong: (
352
+ light: primitive.variable(gray, 600),
353
+ dark: primitive.variable(gray, 300),
354
+ ),
355
+ brand: (
356
+ light: primitive.variable(brand, 500),
357
+ dark: primitive.variable(brand, 500),
358
+ ),
359
+ error-subtle: (
360
+ light: primitive.variable(red, 300),
361
+ dark: primitive.variable(red, 600),
362
+ ),
363
+ error: (
364
+ light: primitive.variable(red, 500),
365
+ dark: primitive.variable(red, 500),
366
+ ),
367
+ warning-subtle: (
368
+ light: primitive.variable(yellow, 300),
369
+ dark: primitive.variable(yellow, 600),
370
+ ),
371
+ warning: (
372
+ light: primitive.variable(yellow, 500),
373
+ dark: primitive.variable(yellow, 500),
374
+ ),
375
+ ),
376
+ separator: (
377
+ ghost: (
378
+ light: primitive.variable(black-base, black-alpha-0),
379
+ dark: primitive.variable(black-base, black-alpha-0),
380
+ ),
381
+ neutral-faint: (
382
+ light: primitive.variable(gray, 200),
383
+ dark: primitive.variable(gray, 700),
384
+ ),
385
+ neutral-light: (
386
+ light: primitive.variable(gray, 300),
387
+ dark: primitive.variable(gray, 600),
388
+ ),
389
+ neutral: (
390
+ light: primitive.variable(gray, 400),
391
+ dark: primitive.variable(gray, 500),
392
+ ),
393
+ brand: (
394
+ light: primitive.variable(brand, 500),
395
+ dark: primitive.variable(brand, 500),
396
+ ),
397
+ ),
398
+ overlay: (
399
+ strong: (
400
+ light: primitive.variable(black-base, black-alpha-60),
401
+ dark: primitive.variable(black-base, black-alpha-60),
402
+ ),
403
+ default: (
404
+ light: primitive.variable(black-base, black-alpha-40),
405
+ dark: primitive.variable(black-base, black-alpha-40),
406
+ ),
407
+ subtle: (
408
+ light: primitive.variable(black-base, black-alpha-30),
409
+ dark: primitive.variable(black-base, black-alpha-30),
410
+ ),
411
+ ),
412
+ surface: (
413
+ solid: (
414
+ light: primitive.variable(white-base, white-alpha-90),
415
+ dark: primitive.variable(black-base, black-alpha-80),
416
+ ),
417
+ strong: (
418
+ light: primitive.variable(white-base, white-alpha-60),
419
+ dark: primitive.variable(black-base, black-alpha-60),
420
+ ),
421
+ subtle: (
422
+ light: primitive.variable(white-base, white-alpha-30),
423
+ dark: primitive.variable(black-base, black-alpha-30),
424
+ ),
425
+ ghost: (
426
+ light: primitive.variable(white-base, white-alpha-10),
427
+ dark: primitive.variable(black-base, black-alpha-10),
428
+ ),
429
+ ),
430
+ shadow: (
431
+ dark: (
432
+ light: primitive.variable(black-base, black-alpha-10),
433
+ dark: primitive.variable(black-base, black-alpha-90),
434
+ ),
435
+ dark-light: (
436
+ light: primitive.variable(black-base, black-alpha-8),
437
+ dark: primitive.variable(black-base, black-alpha-20),
438
+ ),
439
+ dark-faint: (
440
+ light: primitive.variable(black-base, black-alpha-5),
441
+ dark: primitive.variable(black-base, black-alpha-20),
442
+ ),
443
+ dark-ghost: (
444
+ light: primitive.variable(black-base, black-alpha-3),
445
+ dark: primitive.variable(black-base, black-alpha-10),
446
+ ),
447
+ light-faint: (
448
+ light: primitive.variable(white-base, white-alpha-5),
449
+ dark: primitive.variable(white-base, white-alpha-5),
450
+ ),
451
+ brand: (
452
+ light: primitive.variable(brand-base, brand-alpha-30),
453
+ dark: primitive.variable(brand-base, brand-alpha-20),
454
+ ),
455
+ ),
456
+ );
457
+
458
+ // 驗證 context 是否有效
459
+ @function is-valid-context($context) {
460
+ @return list.index($semantic-contexts, $context) != null;
461
+ }
462
+
463
+ // 驗證 tone 是否對該 context 有效
464
+ @function is-valid-tone($context, $tone, $colors: $semantic-colors) {
465
+ @if not is-valid-context($context) {
466
+ @return false;
467
+ }
468
+
469
+ $context-map: map.get($colors, $context);
470
+
471
+ @if not $context-map {
472
+ @return false;
473
+ }
474
+
475
+ @return map.has-key($context-map, $tone);
476
+ }
477
+
478
+ // 取得特定 context 的所有 tones
479
+ @function get-context-tones($context, $colors: $semantic-colors) {
480
+ @if not is-valid-context($context) {
481
+ @error 'Invalid context "#{$context}". Valid contexts are: #{$semantic-contexts}';
482
+ }
483
+
484
+ $context-map: map.get($colors, $context);
485
+
486
+ @if not $context-map {
487
+ @return ();
488
+ }
489
+
490
+ @return map.keys($context-map);
491
+ }
492
+
493
+ // 取得 CSS 變數名稱
494
+ @function get-semantic-var-name($context, $tone) {
495
+ @return --#{$prefix}-#{$context}-#{$tone};
496
+ }
497
+
498
+ // 取得 semantic color 的 CSS 變數引用
499
+ @function variable($context, $tone, $alpha: null) {
500
+ @if not is-valid-context($context) {
501
+ @error 'Invalid context "#{$context}". Valid contexts are: #{$semantic-contexts}';
502
+ }
503
+
504
+ $var-ref: var(#{get-semantic-var-name($context, $tone)});
505
+
506
+ // 如果沒有指定 alpha,直接返回 CSS 變數
507
+ @if not $alpha {
508
+ @return $var-ref;
509
+ }
510
+
511
+ // 驗證 alpha 範圍 (0-100)
512
+ @if $alpha < 0 or $alpha > 100 {
513
+ @error 'Alpha value must be between 0 and 100, got #{$alpha}';
514
+ }
515
+
516
+ // 使用 color-mix 來動態設定透明度
517
+ @return string.unquote('color-mix(in srgb, #{$var-ref} #{$alpha}%, transparent)');
518
+ }
519
+
520
+ // 檢查顏色值是否已定義(包括 CSS 變數)
521
+ @function is-semantic-color-defined($value) {
522
+ @return $value != null;
523
+ }
524
+
525
+ // 生成所有 semantic color CSS 變數
526
+ // mode: 'light' 或 'dark'
527
+ @mixin variables($mode: light, $colors: ()) {
528
+ $colors: map.deep-merge($semantic-colors, $colors);
529
+
530
+ @each $context, $tones in $colors {
531
+ @if not is-valid-context($context) {
532
+ @error 'Invalid context "#{$context}" in semantic colors map. Valid contexts are: #{$semantic-contexts}';
533
+ }
534
+
535
+ @each $tone, $modes in $tones {
536
+ @if not is-valid-tone($context, $tone, $colors) {
537
+ $valid-tones: get-context-tones($context, $colors);
538
+
539
+ @error 'Invalid tone "#{$tone}" for context "#{$context}". Valid tones are: #{$valid-tones}';
540
+ }
541
+
542
+ $color: map.get($modes, $mode);
543
+
544
+ @if is-semantic-color-defined($color) {
545
+ #{get-semantic-var-name($context, $tone)}: #{$color};
546
+ }
547
+ }
548
+ }
549
+ }
@@ -1 +1 @@
1
- export declare const palettePrefix = "mzn-color";
1
+ export declare const colorSemanticPrefix = "mzn-color";
@@ -1,3 +1,3 @@
1
- const palettePrefix = 'mzn-color';
1
+ const colorSemanticPrefix = 'mzn-color';
2
2
 
3
- export { palettePrefix };
3
+ export { colorSemanticPrefix };
package/palette/index.js CHANGED
@@ -1 +1 @@
1
- export { palettePrefix } from './constants.js';
1
+ export { colorSemanticPrefix } from './constants.js';
@@ -1,9 +1,95 @@
1
+ /** @deprecated Legacy */
1
2
  export type MainColor = 'primary' | 'secondary' | 'error' | 'warning' | 'success';
3
+ /** @deprecated Legacy */
2
4
  export type GradualMainColor = `${MainColor}-${'light' | 'dark'}`;
5
+ /** @deprecated Legacy */
3
6
  export type StatefulMainColor = `${MainColor}-${'hover-bg' | 'active-bg'}`;
7
+ /** @deprecated Legacy */
4
8
  export type MainContrastTextColor = `on-${MainColor}`;
9
+ /** @deprecated Legacy */
5
10
  export type TextColor = `text-${'primary' | 'secondary' | 'disabled'}`;
11
+ /** @deprecated Legacy */
6
12
  export type ActionForegroundColor = `action-${'active' | 'inactive' | 'disabled'}`;
13
+ /** @deprecated Legacy */
7
14
  export type ActionBackgroundColor = `action-${'disabled-bg'}`;
15
+ /** @deprecated Legacy */
8
16
  export type ActionColor = ActionForegroundColor | ActionBackgroundColor;
17
+ /** @deprecated Legacy */
9
18
  export type Color = MainColor | GradualMainColor | MainContrastTextColor | TextColor | ActionColor | 'bg' | 'surface' | 'border' | 'divider';
19
+ /**
20
+ * Semantic color contexts - 語意化顏色的使用情境
21
+ */
22
+ export type SemanticContext = 'layer' | 'background' | 'text' | 'icon' | 'border' | 'separator' | 'overlay' | 'surface' | 'shadow';
23
+ /**
24
+ * Layer tones - 圖層層級
25
+ */
26
+ export type LayerTone = '01' | '02' | '03';
27
+ /**
28
+ * Background tones - 背景顏色調性
29
+ */
30
+ export type BackgroundTone = 'base' | 'menu' | 'inverse' | 'fixed-dark' | 'neutral-ghost' | 'neutral-faint' | 'neutral-subtle' | 'neutral' | 'neutral-strong' | 'neutral-solid' | 'brand-ghost' | 'brand-faint' | 'brand-subtle' | 'brand-light' | 'brand' | 'brand-strong' | 'brand-solid' | 'error-ghost' | 'error-faint' | 'error-subtle' | 'error-light' | 'error' | 'error-strong' | 'error-solid' | 'warning-ghost' | 'warning-faint' | 'warning' | 'success-ghost' | 'success-faint' | 'success' | 'info-ghost' | 'info-faint' | 'info';
31
+ /**
32
+ * Text tones - 文字顏色調性
33
+ */
34
+ export type TextTone = 'fixed-light' | 'neutral-faint' | 'neutral-light' | 'neutral' | 'neutral-strong' | 'neutral-solid' | 'brand' | 'brand-strong' | 'brand-solid' | 'error' | 'error-strong' | 'error-solid' | 'warning' | 'warning-strong' | 'success' | 'info' | 'info-strong';
35
+ /**
36
+ * Icon tones - 圖示顏色調性
37
+ */
38
+ export type IconTone = 'fixed-light' | 'neutral-faint' | 'neutral-light' | 'neutral' | 'neutral-strong' | 'neutral-bold' | 'neutral-solid' | 'brand' | 'brand-strong' | 'brand-solid' | 'error' | 'error-strong' | 'error-solid' | 'warning' | 'warning-strong' | 'success' | 'success-strong' | 'info' | 'info-strong';
39
+ /**
40
+ * Border tones - 邊框顏色調性
41
+ */
42
+ export type BorderTone = 'fixed-light' | 'fixed-light-alpha' | 'neutral-faint' | 'neutral-light' | 'neutral' | 'neutral-strong' | 'brand' | 'error-subtle' | 'error' | 'warning-subtle' | 'warning';
43
+ /**
44
+ * Separator tones - 分隔線顏色調性
45
+ */
46
+ export type SeparatorTone = 'neutral-faint' | 'neutral-light' | 'neutral' | 'brand';
47
+ /**
48
+ * Overlay tones - 遮罩顏色調性
49
+ */
50
+ export type OverlayTone = 'strong' | 'default' | 'subtle';
51
+ /**
52
+ * Surface tones - 表面顏色調性(半透明)
53
+ */
54
+ export type SurfaceTone = 'solid' | 'strong' | 'subtle' | 'ghost';
55
+ /**
56
+ * Shadow tones - 陰影顏色調性
57
+ */
58
+ export type ShadowTone = 'dark' | 'dark-light' | 'dark-faint' | 'dark-ghost' | 'light-faint' | 'brand';
59
+ /**
60
+ * 所有 semantic tones 的聯集型別
61
+ */
62
+ export type SemanticTone = LayerTone | BackgroundTone | TextTone | IconTone | BorderTone | SeparatorTone | OverlayTone | SurfaceTone | ShadowTone;
63
+ /**
64
+ * Context 與對應 Tone 的映射型別
65
+ */
66
+ export type SemanticToneMap = {
67
+ layer: LayerTone;
68
+ background: BackgroundTone;
69
+ text: TextTone;
70
+ icon: IconTone;
71
+ border: BorderTone;
72
+ separator: SeparatorTone;
73
+ overlay: OverlayTone;
74
+ surface: SurfaceTone;
75
+ shadow: ShadowTone;
76
+ };
77
+ /**
78
+ * 取得特定 context 的 tone 型別
79
+ * @example
80
+ * type BgTone = SemanticToneFor<'background'>;
81
+ */
82
+ export type SemanticToneFor<C extends SemanticContext> = SemanticToneMap[C];
83
+ /**
84
+ * Semantic color 完整型別 - context + tone 組合
85
+ * @example
86
+ * const color: SemanticColor = 'background-brand';
87
+ * const color2: SemanticColor = 'text-neutral';
88
+ */
89
+ export type SemanticColor = {
90
+ [C in SemanticContext]: `${C}-${SemanticToneFor<C>}`;
91
+ }[SemanticContext];
92
+ /**
93
+ * Color mode - 顏色模式
94
+ */
95
+ export type ColorMode = 'light' | 'dark';
@@ -0,0 +1 @@
1
+ @forward './radius';