@mezzanine-ui/system 0.16.0 → 1.0.0-canary.1

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