@inchurch/matcha-theme 21.1.0 → 21.2.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.
@@ -1,3 +1,7 @@
1
+ @use "functions" as *;
2
+ @use "../tokens/primitives" as *;
3
+ @use "sass:list";
4
+
1
5
  // Shade-classes SÓ das primitivas do Figma ($matcha-primitives — gerado de
2
6
  // tokens/matcha/primitives/colors.json pelo gen-primitives). Cada classe consome
3
7
  // var(--matcha-prim-{família}-{shade}); o contraste é computado em build a partir
@@ -9,7 +13,7 @@
9
13
  $-skip: ("common", "brand", "neutral");
10
14
 
11
15
  @each $family, $shades in $matcha-primitives {
12
- @if not index($-skip, $family) {
16
+ @if not list.index($-skip, $family) {
13
17
  @each $shade, $hex in $shades {
14
18
  .#{$family}-#{$shade} {
15
19
  background-color: var(--matcha-prim-#{$family}-#{$shade}) !important;
@@ -1,3 +1,9 @@
1
+ @use "../tokens/elevation-tokens" as *;
2
+ @use "functions" as *;
3
+ @use "sass:map";
4
+ @use "sass:math";
5
+ @use "sass:meta";
6
+
1
7
  // -------------------------------------------------------------------------------------------------------------------
2
8
  // @ Elevations Mixins
3
9
  //
@@ -36,7 +42,7 @@
36
42
  // Applies the correct css rules to an element to give it the elevation specified by $zValue.
37
43
  // The $zValue must be between 0 and 24.
38
44
  @mixin elevation($zValue, $color: $elevation-color, $opacity: $elevation-opacity) {
39
- @if type-of($zValue) !=number or not unitless($zValue) {
45
+ @if meta.type-of($zValue) !=number or not math.is-unitless($zValue) {
40
46
  @error '$zValue must be a unitless number';
41
47
  }
42
48
 
@@ -44,9 +50,9 @@
44
50
  @error '$zValue must be between 0 and 24';
45
51
  }
46
52
 
47
- box-shadow: #{map-get(_get-umbra-map($color, $opacity), $zValue)},
48
- #{map-get(_get-penumbra-map($color, $opacity), $zValue)},
49
- #{map-get(_get-ambient-map($color, $opacity), $zValue)};
53
+ box-shadow: #{map.get(get-umbra-map($color, $opacity), $zValue)},
54
+ #{map.get(get-penumbra-map($color, $opacity), $zValue)},
55
+ #{map.get(get-ambient-map($color, $opacity), $zValue)};
50
56
  }
51
57
 
52
58
  @mixin _theme-elevation($zValue, $elevation-color, $opacity: $elevation-opacity) {
@@ -56,14 +62,14 @@
56
62
  // Applies the elevation to an element in a manner that allows
57
63
  // consumers to override it via the Material elevation classes.
58
64
  @mixin overridable-elevation($zValue, $color: $elevation-color, $opacity: $elevation-opacity) {
59
- &:not([class*="#{$_elevation-prefix}"]) {
65
+ &:not([class*="#{$elevation-prefix}"]) {
60
66
  @include elevation($zValue, $color, $opacity);
61
67
  }
62
68
  }
63
69
 
64
70
  @mixin _theme-overridable-elevation($zValue, $theme, $opacity: $elevation-opacity) {
65
- $foreground: map-get($theme, foreground);
66
- $elevation-color: map-get($foreground, elevation);
71
+ $foreground: map.get($theme, foreground);
72
+ $elevation-color: map.get($foreground, elevation);
67
73
  $elevation-color-or-default: if($elevation-color ==null, $elevation-color, $elevation-color);
68
74
 
69
75
  @include overridable-elevation($zValue, $elevation-color-or-default, $opacity);
@@ -88,14 +94,14 @@
88
94
  }
89
95
 
90
96
  // Css class generator for shadows
91
- // $_elevation-prefix: "matcha-elevation-z";
97
+ // $elevation-prefix: "matcha-elevation-z";
92
98
  @mixin elevation-theme($is-dark: false) {
93
99
  // API nova: recebe SÓ o modo. Cor da sombra preservada por modo
94
100
  // (light #1A2C1E / dark black — valores que vinham de foreground.elevation).
95
101
  $elevation-color: if($is-dark, black, #1A2C1E);
96
102
 
97
103
  @for $zValue from 0 through 24 {
98
- .#{$_elevation-prefix}#{$zValue} {
104
+ .#{$elevation-prefix}#{$zValue} {
99
105
  @include _theme-elevation($zValue, $elevation-color);
100
106
  }
101
107
  }
@@ -1,5 +1,8 @@
1
1
  @use "sass:map";
2
+ @use "sass:math";
2
3
  @use "sass:color";
4
+ @use "sass:meta";
5
+ @use "sass:string";
3
6
 
4
7
  // -------------------------------------------------------------------------------------------------------------------
5
8
  // @ Theme functions — REMOVIDAS no major (API velha)
@@ -157,7 +160,7 @@
157
160
  }
158
161
 
159
162
  // Guard against unquoting non-string values, because it's deprecated.
160
- @return if(type-of($font-family)==string, unquote($font-family), $font-family);
163
+ @return if(meta.type-of($font-family)==string, string.unquote($font-family), $font-family);
161
164
  }
162
165
 
163
166
  // -------------------------------------------------------------------------------------------------------------------
@@ -165,8 +168,8 @@
165
168
  // --------------------------------------------------------------------------------------------------------------------
166
169
  // A collection of functions that can be used to apply elevation to a material
167
170
 
168
- @function _get-umbra-map($color, $opacity) {
169
- $shadow-color: if(type-of($color)==color, rgba($color, $opacity * 0.033), $color);
171
+ @function get-umbra-map($color, $opacity) {
172
+ $shadow-color: if(meta.type-of($color)==color, rgba($color, $opacity * 0.033), $color);
170
173
 
171
174
  @return (0: "0px 0px 0px 0px #{$shadow-color}",
172
175
  1: "0px 2px 2px 0px #{$shadow-color}",
@@ -196,8 +199,8 @@
196
199
  );
197
200
  }
198
201
 
199
- @function _get-penumbra-map($color, $opacity) {
200
- $shadow-color: if(type-of($color)==color, rgba($color, $opacity * 0.033), $color);
202
+ @function get-penumbra-map($color, $opacity) {
203
+ $shadow-color: if(meta.type-of($color)==color, rgba($color, $opacity * 0.033), $color);
201
204
 
202
205
  @return (0: "0px 0px 0px 0px #{$shadow-color}",
203
206
  1: "0px 2px 2px 0px #{$shadow-color}",
@@ -227,8 +230,8 @@
227
230
  );
228
231
  }
229
232
 
230
- @function _get-ambient-map($color, $opacity) {
231
- $shadow-color: if(type-of($color)==color, rgba($color, $opacity * 0.033), $color);
233
+ @function get-ambient-map($color, $opacity) {
234
+ $shadow-color: if(meta.type-of($color)==color, rgba($color, $opacity * 0.033), $color);
232
235
 
233
236
  @return (0: "0px 0px 0px 0px #{$shadow-color}",
234
237
  1: "0px 2px 2px 0px #{$shadow-color}",
@@ -282,4 +285,37 @@ $base-font-size: 16px;
282
285
  @else {
283
286
  @return $value-in-px;
284
287
  }
285
- }
288
+ }
289
+
290
+ // ── Color helpers (movidos de _theme-api p/ quebrar ciclo @use) ──────────────
291
+ @function matcha-yiq($color) {
292
+ $r: color.channel($color, "red", $space: rgb);
293
+ $g: color.channel($color, "green", $space: rgb);
294
+ $b: color.channel($color, "blue", $space: rgb);
295
+ @return math.div(($r * 299) + ($g * 587) + ($b * 114), 1000);
296
+ }
297
+
298
+ @function matcha-text-on($color) {
299
+ @return if(matcha-yiq($color) >= 150, #1a1d21, #ffffff);
300
+ }
301
+
302
+ @function matcha-contrast-on($color) {
303
+ @return if(matcha-yiq($color) >= 150, rgba(0, 0, 0, .87), #ffffff);
304
+ }
305
+
306
+ @function matcha-contrast-alpha-on($color) {
307
+ @return if(matcha-yiq($color) >= 150, rgba(0, 0, 0, .1), rgba(255, 255, 255, .1));
308
+ }
309
+
310
+ @function matcha-role-tokens($role, $seed, $surface-bg, $is-dark) {
311
+ @return (
312
+ #{$role}: $seed,
313
+ #{$role}-hover: color.scale($seed, $lightness: if($is-dark, 18%, -12%)),
314
+ #{$role}-pressed: color.scale($seed, $lightness: if($is-dark, 32%, -20%)),
315
+ #{$role}-alpha: rgba($seed, .1),
316
+ #{$role}-contrast: matcha-contrast-on($seed),
317
+ #{$role}-contrast-alpha: matcha-contrast-alpha-on($seed),
318
+ #{$role}-surface-hover: color.mix($seed, $surface-bg, 10%),
319
+ #{$role}-surface-pressed: color.mix($seed, $surface-bg, 22%),
320
+ );
321
+ }
@@ -1,3 +1,6 @@
1
+ @use "../tokens/breakpoints-tokens" as *;
2
+ @use "sass:map";
3
+
1
4
  // -------------------------------------------------------------------------------------------------------------------
2
5
  // @ Theme mixins
3
6
  // --------------------------------------------------------------------------------------------------------------------
@@ -12,7 +15,7 @@
12
15
 
13
16
  */
14
17
  @mixin media-breakpoint($breakpointName) {
15
- $mediaQuery: map-get($breakpoints, $breakpointName);
18
+ $mediaQuery: map.get($breakpoints, $breakpointName);
16
19
  @if ($mediaQuery == null) {
17
20
  @content;
18
21
  } @else {
@@ -1,3 +1,5 @@
1
+ @use "functions" as *;
2
+ @use "../tokens/color-tokens" as *;
1
3
  // =============================================================================
2
4
  // MATCHA THEME API — criação de temas por override de CSS custom properties
3
5
  // =============================================================================
@@ -54,43 +56,30 @@ $-matcha-required-seeds: (surface-bg, surface, text-primary, accent, primary, su
54
56
 
55
57
  // ── Helpers de contraste ────────────────────────────────────────────────────
56
58
  // Luminância perceptual aproximada (YIQ, 0–255).
57
- @function matcha-yiq($color) {
58
- $r: color.channel($color, "red", $space: rgb);
59
- $g: color.channel($color, "green", $space: rgb);
60
- $b: color.channel($color, "blue", $space: rgb);
61
- @return math.div(($r * 299) + ($g * 587) + ($b * 114), 1000);
62
- }
63
59
 
64
60
  // Foreground de texto opaco sobre $color (padrão dos tokens *-text-on).
65
- @function matcha-text-on($color) {
66
- @return if(matcha-yiq($color) >= 150, #1a1d21, #ffffff);
67
- }
68
61
 
69
62
  // Foreground de contraste no padrão dos tokens *-contrast (preto .87 / branco).
70
- @function matcha-contrast-on($color) {
71
- @return if(matcha-yiq($color) >= 150, rgba(0, 0, 0, .87), #ffffff);
72
- }
73
63
 
74
- @function matcha-contrast-alpha-on($color) {
75
- @return if(matcha-yiq($color) >= 150, rgba(0, 0, 0, .1), rgba(255, 255, 255, .1));
64
+ // ── Emissor genérico de --matcha-color-* ─────────────────────────────────────
65
+ // Movido de _emit-tokens para quebrar o ciclo @use (emit-tokens color-tokens
66
+ // theme-api → emit-tokens). Self-contained (só sass:map). Usado por
67
+ // matcha-define-theme (abaixo) e por matcha-css-custom-properties (emit-tokens, via @use).
68
+ @mixin matcha-emit-color-properties($colors, $aliases: ()) {
69
+ @each $token, $value in $colors {
70
+ $alias: map.get($aliases, $token);
71
+ @if $alias {
72
+ --matcha-color-#{$token}: var(#{$alias});
73
+ } @else {
74
+ --matcha-color-#{$token}: #{$value};
75
+ }
76
+ }
76
77
  }
77
78
 
78
79
  // ── Derivação de família de papel (primary/accent/feedback) ────────────────
79
80
  // Gera <role>, <role>-hover/-pressed/-alpha/-contrast/-contrast-alpha/
80
81
  // -surface-hover/-surface-pressed a partir do seed. Direção do hover segue a
81
82
  // base: temas light escurecem no hover, temas dark clareiam (padrão DSV3).
82
- @function matcha-role-tokens($role, $seed, $surface-bg, $is-dark) {
83
- @return (
84
- #{$role}: $seed,
85
- #{$role}-hover: color.scale($seed, $lightness: if($is-dark, 18%, -12%)),
86
- #{$role}-pressed: color.scale($seed, $lightness: if($is-dark, 32%, -20%)),
87
- #{$role}-alpha: rgba($seed, .1),
88
- #{$role}-contrast: matcha-contrast-on($seed),
89
- #{$role}-contrast-alpha: matcha-contrast-alpha-on($seed),
90
- #{$role}-surface-hover: color.mix($seed, $surface-bg, 10%),
91
- #{$role}-surface-pressed: color.mix($seed, $surface-bg, 22%),
92
- );
93
- }
94
83
 
95
84
  // ── Construção do mapa completo de cores do tema ────────────────────────────
96
85
  // Parte dos defaults da base (light/dark), aplica as famílias derivadas dos
@@ -1,3 +1,4 @@
1
+ @use "functions" as *;
1
2
  // -------------------------------------------------------------------------------------------------------------------
2
3
  // @ Typography mixins
3
4
  // -------------------------------------------------------------------------------------------------------------------
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/media-breakpoint" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  // =============================================================================
@@ -1,3 +1,4 @@
1
+ @use "matcha-buttons" as *;
1
2
  @mixin _colorize-inactive-type-solid-button-toggle-item($theme, $color-functions) {
2
3
 
3
4
  &:not([inactivetype]),
@@ -30,7 +31,7 @@
30
31
  button[matcha-button],
31
32
  a[matcha-button] {
32
33
  &:not([active]) {
33
- @include _disabled-solid-button($theme);
34
+ @include disabled-solid-button($theme);
34
35
  }
35
36
  }
36
37
  }
@@ -68,7 +69,7 @@
68
69
  button[matcha-button],
69
70
  a[matcha-button] {
70
71
  &:not([active]) {
71
- @include _disabled-basic-button($theme);
72
+ @include disabled-basic-button($theme);
72
73
  }
73
74
  }
74
75
  }
@@ -115,7 +116,7 @@
115
116
 
116
117
  //botão não ativo
117
118
  &:not([active]) {
118
- @include _disabled-outline-button($theme);
119
+ @include disabled-outline-button($theme);
119
120
  }
120
121
  }
121
122
  }
@@ -155,7 +156,7 @@
155
156
 
156
157
  //botão não ativo
157
158
  &:not([active]) {
158
- @include _disabled-alpha-button($theme);
159
+ @include disabled-alpha-button($theme);
159
160
  }
160
161
  }
161
162
  }
@@ -198,7 +199,7 @@
198
199
 
199
200
  //botão não ativo
200
201
  &:not([active]) {
201
- @include _disabled-link-button($theme);
202
+ @include disabled-link-button($theme);
202
203
  }
203
204
  }
204
205
  }
@@ -245,28 +246,28 @@ matcha-button-toggle {
245
246
  &[outline],
246
247
  &[outline]:not([outline="false"]),
247
248
  &[outline="true"] {
248
- @include _disabled-outline-button($theme);
249
+ @include disabled-outline-button($theme);
249
250
  }
250
251
 
251
252
  &[basic],
252
253
  &[basic]:not([basic="false"]),
253
254
  &[basic="true"] {
254
- @include _disabled-basic-button($theme);
255
+ @include disabled-basic-button($theme);
255
256
  }
256
257
 
257
258
  &[alpha],
258
259
  &[alpha]:not([alpha="false"]),
259
260
  &[alpha="true"] {
260
- @include _disabled-alpha-button($theme);
261
+ @include disabled-alpha-button($theme);
261
262
  }
262
263
 
263
264
  &[link],
264
265
  &[link]:not([link="false"]),
265
266
  &[link="true"] {
266
- @include _disabled-link-button($theme);
267
+ @include disabled-link-button($theme);
267
268
  }
268
269
 
269
- @include _disabled-solid-button($theme);
270
+ @include disabled-solid-button($theme);
270
271
  }
271
272
  }
272
273
  }
@@ -1,3 +1,6 @@
1
+ @use "../abstracts/media-breakpoint" as *;
2
+ @use "../abstracts/functions" as *;
3
+ @use "../tokens/breakpoints-tokens" as *;
1
4
  // =============================================================================
2
5
  // matcha-buttons.scss — Button & Icon Button (modernized)
3
6
  // Aligned with Figma: matcha/button + matcha/icon-button
@@ -8,35 +11,35 @@
8
11
 
9
12
  // ── Disabled mixins ─────────────────────────────────────────────────────────
10
13
 
11
- @mixin _disabled-solid-button($theme) {
14
+ @mixin disabled-solid-button($theme) {
12
15
  background: var(--matcha-color-disabled-bg);
13
16
  color: var(--matcha-color-disabled-fg);
14
17
  box-shadow: 0 0 0 0px inset;
15
18
  pointer-events: none;
16
19
  }
17
20
 
18
- @mixin _disabled-basic-button($theme) {
21
+ @mixin disabled-basic-button($theme) {
19
22
  background: var(--matcha-color-surface);
20
23
  color: var(--matcha-color-disabled-bg);
21
24
  box-shadow: 0 0 0 0px inset;
22
25
  pointer-events: none;
23
26
  }
24
27
 
25
- @mixin _disabled-outline-button($theme) {
28
+ @mixin disabled-outline-button($theme) {
26
29
  background: transparent;
27
30
  color: var(--matcha-color-disabled-bg);
28
31
  box-shadow: 0 0 0 var(--matcha-border-thin, 2px) inset;
29
32
  pointer-events: none;
30
33
  }
31
34
 
32
- @mixin _disabled-alpha-button($theme) {
35
+ @mixin disabled-alpha-button($theme) {
33
36
  background: var(--matcha-color-disabled-bg-alpha, var(--matcha-color-interaction-disabled-bg-alpha));
34
37
  color: var(--matcha-color-disabled-bg);
35
38
  box-shadow: 0 0 0 0px inset;
36
39
  pointer-events: none;
37
40
  }
38
41
 
39
- @mixin _disabled-link-button($theme) {
42
+ @mixin disabled-link-button($theme) {
40
43
  background: transparent;
41
44
  color: var(--matcha-color-disabled-bg);
42
45
  box-shadow: 0 0 0 0px inset;
@@ -141,6 +144,19 @@ a[matcha-link] {
141
144
  border: none;
142
145
  border-radius: var(--matcha-radius-lg, 8px);
143
146
 
147
+ // Figma matcha/button usa DOIS feedbacks combinados:
148
+ // 1. Cor do bg muda (accent-default → accent-hover → accent-pressed)
149
+ // 2. State-layer overlay por cima (matcha/color/state-layer/fg)
150
+ // - Filled: opacity 0.15 hover / 0.30 active
151
+ // - Outline/Ghost: opacity 0.10 hover / 0.20 active
152
+ // ::before aplica o state-layer; :hover/:active ou .is-state-* ativam.
153
+ // NOTA: declarada ANTES das regras aninhadas (evita a deprecação mixed-decls);
154
+ // é onde o hoisting do Sass já a colocava — output byte-idêntico.
155
+ transition:
156
+ background-color 150ms cubic-bezier(0.4, 0, 0.2, 1),
157
+ box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1),
158
+ color 150ms cubic-bezier(0.4, 0, 0.2, 1);
159
+
144
160
  * { pointer-events: none; }
145
161
 
146
162
  // Figma spec: ícones dentro de button herdam a foreground color do botão
@@ -154,17 +170,6 @@ a[matcha-link] {
154
170
 
155
171
  @include generate-matcha-button-size-classes($helper-breakpoints);
156
172
 
157
- // Figma matcha/button usa DOIS feedbacks combinados:
158
- // 1. Cor do bg muda (accent-default → accent-hover → accent-pressed)
159
- // 2. State-layer overlay por cima (matcha/color/state-layer/fg)
160
- // - Filled: opacity 0.15 hover / 0.30 active
161
- // - Outline/Ghost: opacity 0.10 hover / 0.20 active
162
- // ::before aplica o state-layer; :hover/:active ou .is-state-* ativam.
163
- transition:
164
- background-color 150ms cubic-bezier(0.4, 0, 0.2, 1),
165
- box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1),
166
- color 150ms cubic-bezier(0.4, 0, 0.2, 1);
167
-
168
173
  &::before {
169
174
  content: '';
170
175
  position: absolute;
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/media-breakpoint" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  // =============================================================================
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/media-breakpoint" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  // =============================================================================
@@ -1,3 +1,5 @@
1
+ @use "../abstracts/media-breakpoint" as *;
2
+ @use "../tokens/breakpoints-tokens" as *;
1
3
  // =============================================================================
2
4
  // matcha-form-field.scss — Theme mixin (stacked pattern, Figma matcha/field/_base)
3
5
  // Border colors vêm do data-color (component SCSS). Theme mixin cuida de:
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/media-breakpoint" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  // =============================================================================
@@ -1,3 +1,6 @@
1
+ @use "../abstracts/media-breakpoint" as *;
2
+ @use "../abstracts/functions" as *;
3
+ @use "../tokens/breakpoints-tokens" as *;
1
4
  // =============================================================================
2
5
  // matcha-hint-text.scss — Hint/error/warning/info/success text
3
6
  // Aligned with Figma matcha/hint-text: Tipo(4) × Tamanho(SM/MD) = 8 variants
@@ -1,3 +1,6 @@
1
+ @use "../abstracts/media-breakpoint" as *;
2
+ @use "../abstracts/functions" as *;
3
+ @use "../tokens/breakpoints-tokens" as *;
1
4
  @use "sass:map";
2
5
 
3
6
  // =============================================================================
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/media-breakpoint" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  // =============================================================================
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/media-breakpoint" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  // =============================================================================
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/media-breakpoint" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  // =============================================================================
@@ -153,7 +153,10 @@
153
153
  line-height: 24px;
154
154
  }
155
155
 
156
- // Tipografia do value por size (Figma): SM/MD body-md 14/20 · LG body-lg 16/24
156
+ // Tipografia do value por size: SM/tiny body-sm 12/16 · MD body-md 14/20 · LG body-lg 16/24.
157
+ // O tier SM usa a MESMA escala do input nativo (matcha-form-field.scss aplica
158
+ // --matcha-text-body-sm nesse tier). Antes o select herdava 14/20 junto do MD e ficava
159
+ // 2px maior que input/date dentro do MESMO matcha-field size="small".
157
160
  matcha-form-field[size="lg"] .matcha-select-value,
158
161
  matcha-form-field[size="lg"] .matcha-select-combobox-input,
159
162
  matcha-form-field[size="large"] .matcha-select-value,
@@ -165,12 +168,15 @@
165
168
  }
166
169
  matcha-form-field[size="sm"] .matcha-select-value,
167
170
  matcha-form-field[size="sm"] .matcha-select-combobox-input,
168
- matcha-form-field[size="md"] .matcha-select-value,
169
- matcha-form-field[size="md"] .matcha-select-combobox-input,
170
171
  matcha-form-field[size="tiny"] .matcha-select-value,
171
172
  matcha-form-field[size="tiny"] .matcha-select-combobox-input,
172
173
  matcha-form-field[size="small"] .matcha-select-value,
173
- matcha-form-field[size="small"] .matcha-select-combobox-input,
174
+ matcha-form-field[size="small"] .matcha-select-combobox-input {
175
+ font-size: var(--matcha-text-body-sm, 12px);
176
+ line-height: var(--matcha-leading-body-sm, 16px);
177
+ }
178
+ matcha-form-field[size="md"] .matcha-select-value,
179
+ matcha-form-field[size="md"] .matcha-select-combobox-input,
174
180
  matcha-form-field[size="medium"] .matcha-select-value,
175
181
  matcha-form-field[size="medium"] .matcha-select-combobox-input {
176
182
  font-size: 14px;
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/media-breakpoint" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  // =============================================================================
@@ -1,3 +1,6 @@
1
+ @use "../abstracts/media-breakpoint" as *;
2
+ @use "../abstracts/functions" as *;
3
+ @use "../tokens/breakpoints-tokens" as *;
1
4
  @use "sass:map";
2
5
 
3
6
  // =============================================================================
@@ -360,6 +360,16 @@
360
360
  --matcha-table-cell-bg: var(--matcha-table-row-bg-hover-striped);
361
361
  }
362
362
 
363
+ // Variante de hover accent (input `rowHover="accent"` → classe host
364
+ // `matcha-table-hover-accent`). Rebinda a var de hover no PRÓPRIO `<table>`,
365
+ // com especificidade acima do default — dispensa o consumer de furar o
366
+ // encapsulamento com `::ng-deep`. Substitui o override manual repetido em
367
+ // members/visitors/history/datas-comemorativas.
368
+ &.matcha-table-hover-accent {
369
+ --matcha-table-row-bg-hover: var(--matcha-color-accent-surface-hover);
370
+ --matcha-table-row-bg-hover-striped: var(--matcha-color-accent-surface-hover);
371
+ }
372
+
363
373
  tbody tr.is-selected td {
364
374
  --matcha-table-cell-bg: var(--matcha-table-row-bg-selected);
365
375
  }
@@ -1,3 +1,4 @@
1
+ @use "matcha-buttons" as *;
1
2
  @use "sass:map";
2
3
 
3
4
  @mixin _colorize-inactive-type-basic($theme, $color-functions) {
@@ -30,7 +31,7 @@
30
31
 
31
32
  button[matcha-button],
32
33
  a[matcha-button] {
33
- @include _disabled-basic-button($theme);
34
+ @include disabled-basic-button($theme);
34
35
  }
35
36
  }
36
37
  }
@@ -77,7 +78,7 @@
77
78
 
78
79
  //botão não ativo
79
80
  &:not([active-item="true"]) {
80
- @include _disabled-outline-button($theme);
81
+ @include disabled-outline-button($theme);
81
82
  }
82
83
  }
83
84
  }
@@ -117,7 +118,7 @@
117
118
 
118
119
  //botão não ativo
119
120
  &:not([active-item="true"]) {
120
- @include _disabled-alpha-button($theme);
121
+ @include disabled-alpha-button($theme);
121
122
  }
122
123
  }
123
124
  }
@@ -160,7 +161,7 @@
160
161
 
161
162
  //botão não ativo
162
163
  &:not([active-item="true"]) {
163
- @include _disabled-link-button($theme);
164
+ @include disabled-link-button($theme);
164
165
  }
165
166
  }
166
167
  }
@@ -207,25 +208,25 @@ matcha-tabs {
207
208
  &[outline],
208
209
  &[outline]:not([outline="false"]),
209
210
  &[outline="true"] {
210
- @include _disabled-outline-button($theme);
211
+ @include disabled-outline-button($theme);
211
212
  }
212
213
 
213
214
  &[basic],
214
215
  &[basic]:not([basic="false"]),
215
216
  &[basic="true"] {
216
- @include _disabled-basic-button($theme);
217
+ @include disabled-basic-button($theme);
217
218
  }
218
219
 
219
220
  &[alpha],
220
221
  &[alpha]:not([alpha="false"]),
221
222
  &[alpha="true"] {
222
- @include _disabled-alpha-button($theme);
223
+ @include disabled-alpha-button($theme);
223
224
  }
224
225
 
225
226
  &[link],
226
227
  &[link]:not([link="false"]),
227
228
  &[link="true"] {
228
- @include _disabled-link-button($theme);
229
+ @include disabled-link-button($theme);
229
230
  }
230
231
  }
231
232
  }
@@ -1,3 +1,5 @@
1
+ @use "../abstracts/media-breakpoint" as *;
2
+ @use "../abstracts/elevation" as *;
1
3
  // -----------------------------------------------------------------------------------------------------
2
4
  // @Page Layouts Theming
3
5
  // -----------------------------------------------------------------------------------------------------
package/main.scss CHANGED
@@ -1,108 +1,198 @@
1
1
  // TOKENS
2
- @import "./tokens/animations-tokens";
3
- @import "./tokens/breakpoints-tokens";
4
- @import "./tokens/material-palette"; // paletas Material legadas ($mat-*, $blue-grey, …) — consumidas só pelo old API (palette/light-theme/dark-theme). A aposentar com o Track B.
5
- @import "./tokens/elevation-tokens";
6
- @import "./tokens/spacing-tokens";
7
- @import "./tokens/typography-tokens";
8
- @import "./tokens/color-tokens"; // cor — papéis por modo (synced do Figma via sync-tokens)
9
- @import "./tokens/static-tokens"; // não-cor (gerado de global.json) — mixin matcha-static-tokens()
10
- @import "./tokens/emit-tokens"; // emissão — mixin matcha-css-custom-properties() (consome color-tokens + static-tokens)
11
- @import "./tokens/primitives"; // matcha-primitives() — Camada 1: CSS vars de primitivas (--matcha-prim-*) em :root
12
- @import "./tokens/semantic-aliases"; // $matcha-prim-aliases-{light,dark} — Camada 2: token semântico → primitiva (rota clássica emite var)
2
+ @forward "./tokens/animations-tokens";
3
+ @use "./tokens/animations-tokens" as *;
4
+ @forward "./tokens/breakpoints-tokens";
5
+ @use "./tokens/breakpoints-tokens" as *;
6
+ @forward "./tokens/material-palette";
7
+ @use "./tokens/material-palette" as *; // paletas Material legadas ($mat-*, $blue-grey, …) — consumidas só pelo old API (palette/light-theme/dark-theme). A aposentar com o Track B.
8
+ @forward "./tokens/elevation-tokens";
9
+ @use "./tokens/elevation-tokens" as *;
10
+ @forward "./tokens/spacing-tokens";
11
+ @use "./tokens/spacing-tokens" as *;
12
+ @forward "./tokens/typography-tokens";
13
+ @use "./tokens/typography-tokens" as *;
14
+ @forward "./tokens/color-tokens";
15
+ @use "./tokens/color-tokens" as *; // cor — papéis por modo (synced do Figma via sync-tokens)
16
+ @forward "./tokens/static-tokens";
17
+ @use "./tokens/static-tokens" as *; // não-cor (gerado de global.json) — mixin matcha-static-tokens()
18
+ @forward "./tokens/emit-tokens";
19
+ @use "./tokens/emit-tokens" as *; // emissão — mixin matcha-css-custom-properties() (consome color-tokens + static-tokens)
20
+ @forward "./tokens/primitives";
21
+ @use "./tokens/primitives" as *; // matcha-primitives() — Camada 1: CSS vars de primitivas (--matcha-prim-*) em :root
22
+ @forward "./tokens/semantic-aliases";
23
+ @use "./tokens/semantic-aliases" as *; // $matcha-prim-aliases-{light,dark} — Camada 2: token semântico → primitiva (rota clássica emite var)
13
24
 
14
25
  // FUNCTIONS
15
- @import "./abstracts/functions"; // map-contrast() palette() map-color() light-theme() dark-theme() matcha-typography-level() matcha-typography-config() _matcha-get-type-value() matcha-font-size() matcha-line-height() matcha-font-weight() matcha-letter-spacing() matcha-font-family() _get-umbra-map() _get-penumbra-map() _get-ambient-map() elevation-transition-property-value()
26
+ @forward "./abstracts/functions";
27
+ @use "./abstracts/functions" as *; // map-contrast() palette() map-color() light-theme() dark-theme() matcha-typography-level() matcha-typography-config() _matcha-get-type-value() matcha-font-size() matcha-line-height() matcha-font-weight() matcha-letter-spacing() matcha-font-family() _get-umbra-map() _get-penumbra-map() _get-ambient-map() elevation-transition-property-value()
16
28
 
17
29
  // MIXINS
18
- @import "./abstracts/theme-api"; // matcha-define-theme() matcha-build-color-map() matcha-role-tokens() matcha-text-on() matcha-contrast-on()
19
- @import "./abstracts/colors"; // colors-classes-static() colors-classes-dynamic()
20
- @import "./abstracts/elevation"; // elevation() _matcha-theme-elevation() matcha-overridable-elevation() _matcha-theme-overridable-elevation() elevation-transition() elevation-theme()
21
- @import "./abstracts/media-breakpoint"; // media-breakpoint()
30
+ @forward "./abstracts/theme-api";
31
+ @use "./abstracts/theme-api" as *; // matcha-define-theme() matcha-build-color-map() matcha-role-tokens() matcha-text-on() matcha-contrast-on()
32
+ @forward "./abstracts/colors";
33
+ @use "./abstracts/colors" as *; // colors-classes-static() colors-classes-dynamic()
34
+ @forward "./abstracts/elevation";
35
+ @use "./abstracts/elevation" as *; // elevation() _matcha-theme-elevation() matcha-overridable-elevation() _matcha-theme-overridable-elevation() elevation-transition() elevation-theme()
36
+ @forward "./abstracts/media-breakpoint";
37
+ @use "./abstracts/media-breakpoint" as *; // media-breakpoint()
22
38
 
23
39
  // TYPOGRAPHY
24
- @import "./abstracts/typography"; // matcha-typography-font-shorthand() matcha-typography-level-to-styles() matcha-reset-typography()
40
+ @forward "./abstracts/typography";
41
+ @use "./abstracts/typography" as *; // matcha-typography-font-shorthand() matcha-typography-level-to-styles() matcha-reset-typography()
25
42
 
26
43
  // BASE
27
- @import "./base/reset"; // base-body-reset-theme()
44
+ @forward "./base/reset";
45
+ @use "./base/reset" as *; // base-body-reset-theme()
28
46
 
29
47
  // COMPONENTS
30
- @import "./components/matcha-audio-player.scss"; //matcha-audio-player-theme($theme)
31
- @import "./components/matcha-autocomplete.scss"; // matcha-autocomplete-theme($theme)
32
- @import "./components/matcha-option.scss"; // matcha-option-theme($theme)
33
- @import "./components/matcha-panel.scss"; // matcha-panel-theme($theme)
34
- @import "./components/matcha-select.scss"; // matcha-select-theme($theme)
35
- @import "./components/matcha-select-multiple.scss"; // matcha-select-multiple-theme($theme)
36
- @import "./components/matcha-buttons.scss"; // matcha-button-theme($theme)
37
- @import "./components/matcha-button-toggle.scss"; // matcha-button-toggle-theme($theme)
38
- @import "./components/matcha-cards.scss"; // matcha-cards-theme($theme)
39
- @import "./components/matcha-color-pick.scss"; // matcha-color-pick-theme($theme)
40
- @import "./components/matcha-draggable.scss"; // matcha-draggable-theme($theme)
41
- @import "./components/matcha-drop-list.scss"; // matcha-drop-list-theme($theme)
42
- @import "./components/matcha-header.scss"; // matcha-header-theme($theme) — lib component DSV3
43
- @import "./components/app-page-header.scss"; // app-page-header-theme($theme) — page-header LEGACY da app
44
- @import "./components/matcha-horizontal-tree.scss"; // matcha-horizontal-tree-theme($theme)
45
- @import "./components/matcha-menu.scss"; // matcha-menu-theme($theme)
46
- @import "./components/matcha-progress-bar.scss"; // matcha-progress-bar-theme($theme)
47
- @import "./components/matcha-scrollbar.scss"; // matcha-scrollbar-theme($theme)
48
- @import "./components/matcha-scrollbox-shadow.scss"; // matcha-scrollbox-shadow-theme($theme)
49
- @import "./components/matcha-skeleton.scss"; // matcha-skeleton-theme($theme)
50
- @import "./components/matcha-table.scss"; // matcha-table-modern (canon DSV3 1:1 Figma)
51
- @import "./components/matcha-table-cell.scss"; // matcha-table-cell-theme($theme)
52
- @import "./components/matcha-tooltip.scss"; // matcha-tooltip-theme($theme)
53
- @import "./components/matcha-form-field.scss";
54
- @import "./components/matcha-checkbox.scss";
55
- @import "./components/matcha-accordion.scss";
56
- @import "./components/matcha-ripple.scss"; // matcha-ripple-theme($theme)
57
- @import "./components/matcha-spin.scss"; // matcha-spin-theme($theme)
58
- @import "./components/matcha-spinner.scss"; // matcha-spinner-theme($theme)
59
- @import "./components/matcha-hint-text.scss"; // matcha-hint-theme($theme)
60
- @import "./components/matcha-slide-toggle.scss"; // matcha-slide-toggle($theme)
61
- @import "./components/matcha-radio.scss"; // matcha-radio($theme)
62
- @import "./components/matcha-avatar.scss"; // matcha-avatar($theme)
63
- @import "./components/matcha-paginator.scss"; // matcha-paginator($theme)
64
- @import "./components/matcha-slider.scss"; // matcha-slider($theme)
65
- @import "./components/matcha-divider.scss"; // matcha-divider($theme)
66
- @import "./components/matcha-highlight.scss"; // matcha-highlight($theme)
67
- @import "./components/matcha-tabs.scss"; // matcha-tabs($theme)
68
- @import "./components/matcha-modal.scss"; // matcha-modal($theme)
69
- @import "./components/matcha-drawer.scss"; // matcha-drawer-theme($theme)
70
- @import "./components/matcha-chip.scss"; // matcha-chip($theme)
71
- @import "./components/matcha-status-pill.scss"; // matcha-status-pill
72
- @import "./components/matcha-date.scss"; // matcha-date-theme($theme)
73
- @import "./components/matcha-calendar.scss"; // matcha-calendar-theme($theme)
74
- @import "./components/matcha-page-builder.scss"; // matcha-page-builder($theme)
75
- @import "./components/matcha-snack-bar.scss"; // matcha-snack-bar-theme($theme)
76
- @import "./components/matcha-timepicker.scss"; // matcha-timepicker-theme($theme)
77
- @import "./components/matcha-badge.scss"; // matcha-badge-theme($theme)
78
- @import "./components/matcha-empty-state.scss"; // matcha-empty-state-theme($theme)
79
- @import "./components/matcha-tree-view.scss"; // matcha-tree-view-theme($theme)
80
- @import "./components/matcha-nav.scss"; // matcha-nav-theme($theme)
81
- @import "./components/matcha-list.scss"; // matcha-list-theme($theme)
82
- @import "./components/matcha-icon.scss"; // matcha-icon-theme($theme)
83
- @import "./components/matcha-text-editor.scss"; // matcha-text-editor-theme($theme)
84
- @import "./components/matcha-chart-card.scss"; // matcha-chart-card-theme($theme)
85
- @import "./components/matcha-crop.scss"; // matcha-crop-theme($theme)
86
- @import "./components/matcha-footer.scss"; // matcha-footer-theme($theme)
87
- @import "./components/matcha-file-uploader.scss"; // matcha-file-uploader-theme($theme)
88
- @import "./components/matcha-drop-image.scss"; // matcha-drop-image-theme($theme)
89
- @import "./components/matcha-notification.scss"; // matcha-notification-theme($theme)
90
- @import "./components/matcha-section.scss"; // matcha-section-theme($theme)
91
- @import "./components/matcha-form-section.scss"; // matcha-form-section-theme($theme)
92
- @import "./components/matcha-breadcrumb.scss"; // matcha-breadcrumb-theme($theme)
93
- @import "./components/matcha-image.scss"; // matcha-image-theme($theme)
94
- @import "./components/matcha-stepper.scss"; // matcha-stepper-theme($theme)
95
- @import "./components/matcha-toolbar.scss"; // matcha-toolbar-modern (canon DSV3 1:1 Figma 15866:92)
96
- @import "./components/matcha-command-palette.scss"; // matcha-command-palette-theme($theme)
97
- @import "./components/matcha-profile-card.scss"; // matcha-profile-card-theme($theme)
98
- @import "./components/matcha-flag.scss"; // matcha-flag-theme($theme)
99
- @import "./components/matcha-emoji.scss"; // matcha-emoji-theme($theme)
48
+ @forward "./components/matcha-audio-player";
49
+ @use "./components/matcha-audio-player" as *; //matcha-audio-player-theme($theme)
50
+ @forward "./components/matcha-autocomplete";
51
+ @use "./components/matcha-autocomplete" as *; // matcha-autocomplete-theme($theme)
52
+ @forward "./components/matcha-option";
53
+ @use "./components/matcha-option" as *; // matcha-option-theme($theme)
54
+ @forward "./components/matcha-panel";
55
+ @use "./components/matcha-panel" as *; // matcha-panel-theme($theme)
56
+ @forward "./components/matcha-select";
57
+ @use "./components/matcha-select" as *; // matcha-select-theme($theme)
58
+ @forward "./components/matcha-select-multiple";
59
+ @use "./components/matcha-select-multiple" as *; // matcha-select-multiple-theme($theme)
60
+ @forward "./components/matcha-buttons";
61
+ @use "./components/matcha-buttons" as *; // matcha-button-theme($theme)
62
+ @forward "./components/matcha-button-toggle";
63
+ @use "./components/matcha-button-toggle" as *; // matcha-button-toggle-theme($theme)
64
+ @forward "./components/matcha-cards";
65
+ @use "./components/matcha-cards" as *; // matcha-cards-theme($theme)
66
+ @forward "./components/matcha-color-pick";
67
+ @use "./components/matcha-color-pick" as *; // matcha-color-pick-theme($theme)
68
+ @forward "./components/matcha-draggable";
69
+ @use "./components/matcha-draggable" as *; // matcha-draggable-theme($theme)
70
+ @forward "./components/matcha-drop-list";
71
+ @use "./components/matcha-drop-list" as *; // matcha-drop-list-theme($theme)
72
+ @forward "./components/matcha-header";
73
+ @use "./components/matcha-header" as *; // matcha-header-theme($theme) — lib component DSV3
74
+ @forward "./components/app-page-header";
75
+ @use "./components/app-page-header" as *; // app-page-header-theme($theme) — page-header LEGACY da app
76
+ @forward "./components/matcha-horizontal-tree";
77
+ @use "./components/matcha-horizontal-tree" as *; // matcha-horizontal-tree-theme($theme)
78
+ @forward "./components/matcha-menu";
79
+ @use "./components/matcha-menu" as *; // matcha-menu-theme($theme)
80
+ @forward "./components/matcha-progress-bar";
81
+ @use "./components/matcha-progress-bar" as *; // matcha-progress-bar-theme($theme)
82
+ @forward "./components/matcha-scrollbar";
83
+ @use "./components/matcha-scrollbar" as *; // matcha-scrollbar-theme($theme)
84
+ @forward "./components/matcha-scrollbox-shadow";
85
+ @use "./components/matcha-scrollbox-shadow" as *; // matcha-scrollbox-shadow-theme($theme)
86
+ @forward "./components/matcha-skeleton";
87
+ @use "./components/matcha-skeleton" as *; // matcha-skeleton-theme($theme)
88
+ @forward "./components/matcha-table";
89
+ @use "./components/matcha-table" as *; // matcha-table-modern (canon DSV3 1:1 Figma)
90
+ @forward "./components/matcha-table-cell";
91
+ @use "./components/matcha-table-cell" as *; // matcha-table-cell-theme($theme)
92
+ @forward "./components/matcha-tooltip";
93
+ @use "./components/matcha-tooltip" as *; // matcha-tooltip-theme($theme)
94
+ @forward "./components/matcha-form-field";
95
+ @use "./components/matcha-form-field" as *;
96
+ @forward "./components/matcha-checkbox";
97
+ @use "./components/matcha-checkbox" as *;
98
+ @forward "./components/matcha-accordion";
99
+ @use "./components/matcha-accordion" as *;
100
+ @forward "./components/matcha-ripple";
101
+ @use "./components/matcha-ripple" as *; // matcha-ripple-theme($theme)
102
+ @forward "./components/matcha-spin";
103
+ @use "./components/matcha-spin" as *; // matcha-spin-theme($theme)
104
+ @forward "./components/matcha-spinner";
105
+ @use "./components/matcha-spinner" as *; // matcha-spinner-theme($theme)
106
+ @forward "./components/matcha-hint-text";
107
+ @use "./components/matcha-hint-text" as *; // matcha-hint-theme($theme)
108
+ @forward "./components/matcha-slide-toggle";
109
+ @use "./components/matcha-slide-toggle" as *; // matcha-slide-toggle($theme)
110
+ @forward "./components/matcha-radio";
111
+ @use "./components/matcha-radio" as *; // matcha-radio($theme)
112
+ @forward "./components/matcha-avatar";
113
+ @use "./components/matcha-avatar" as *; // matcha-avatar($theme)
114
+ @forward "./components/matcha-paginator";
115
+ @use "./components/matcha-paginator" as *; // matcha-paginator($theme)
116
+ @forward "./components/matcha-slider";
117
+ @use "./components/matcha-slider" as *; // matcha-slider($theme)
118
+ @forward "./components/matcha-divider";
119
+ @use "./components/matcha-divider" as *; // matcha-divider($theme)
120
+ @forward "./components/matcha-highlight";
121
+ @use "./components/matcha-highlight" as *; // matcha-highlight($theme)
122
+ @forward "./components/matcha-tabs";
123
+ @use "./components/matcha-tabs" as *; // matcha-tabs($theme)
124
+ @forward "./components/matcha-modal";
125
+ @use "./components/matcha-modal" as *; // matcha-modal($theme)
126
+ @forward "./components/matcha-drawer";
127
+ @use "./components/matcha-drawer" as *; // matcha-drawer-theme($theme)
128
+ @forward "./components/matcha-chip";
129
+ @use "./components/matcha-chip" as *; // matcha-chip($theme)
130
+ @forward "./components/matcha-status-pill";
131
+ @use "./components/matcha-status-pill" as *; // matcha-status-pill
132
+ @forward "./components/matcha-date";
133
+ @use "./components/matcha-date" as *; // matcha-date-theme($theme)
134
+ @forward "./components/matcha-calendar";
135
+ @use "./components/matcha-calendar" as *; // matcha-calendar-theme($theme)
136
+ @forward "./components/matcha-page-builder";
137
+ @use "./components/matcha-page-builder" as *; // matcha-page-builder($theme)
138
+ @forward "./components/matcha-snack-bar";
139
+ @use "./components/matcha-snack-bar" as *; // matcha-snack-bar-theme($theme)
140
+ @forward "./components/matcha-timepicker";
141
+ @use "./components/matcha-timepicker" as *; // matcha-timepicker-theme($theme)
142
+ @forward "./components/matcha-badge";
143
+ @use "./components/matcha-badge" as *; // matcha-badge-theme($theme)
144
+ @forward "./components/matcha-empty-state";
145
+ @use "./components/matcha-empty-state" as *; // matcha-empty-state-theme($theme)
146
+ @forward "./components/matcha-tree-view";
147
+ @use "./components/matcha-tree-view" as *; // matcha-tree-view-theme($theme)
148
+ @forward "./components/matcha-nav";
149
+ @use "./components/matcha-nav" as *; // matcha-nav-theme($theme)
150
+ @forward "./components/matcha-list";
151
+ @use "./components/matcha-list" as *; // matcha-list-theme($theme)
152
+ @forward "./components/matcha-icon";
153
+ @use "./components/matcha-icon" as *; // matcha-icon-theme($theme)
154
+ @forward "./components/matcha-text-editor";
155
+ @use "./components/matcha-text-editor" as *; // matcha-text-editor-theme($theme)
156
+ @forward "./components/matcha-chart-card";
157
+ @use "./components/matcha-chart-card" as *; // matcha-chart-card-theme($theme)
158
+ @forward "./components/matcha-crop";
159
+ @use "./components/matcha-crop" as *; // matcha-crop-theme($theme)
160
+ @forward "./components/matcha-footer";
161
+ @use "./components/matcha-footer" as *; // matcha-footer-theme($theme)
162
+ @forward "./components/matcha-file-uploader";
163
+ @use "./components/matcha-file-uploader" as *; // matcha-file-uploader-theme($theme)
164
+ @forward "./components/matcha-drop-image";
165
+ @use "./components/matcha-drop-image" as *; // matcha-drop-image-theme($theme)
166
+ @forward "./components/matcha-notification";
167
+ @use "./components/matcha-notification" as *; // matcha-notification-theme($theme)
168
+ @forward "./components/matcha-section";
169
+ @use "./components/matcha-section" as *; // matcha-section-theme($theme)
170
+ @forward "./components/matcha-form-section";
171
+ @use "./components/matcha-form-section" as *; // matcha-form-section-theme($theme)
172
+ @forward "./components/matcha-breadcrumb";
173
+ @use "./components/matcha-breadcrumb" as *; // matcha-breadcrumb-theme($theme)
174
+ @forward "./components/matcha-image";
175
+ @use "./components/matcha-image" as *; // matcha-image-theme($theme)
176
+ @forward "./components/matcha-stepper";
177
+ @use "./components/matcha-stepper" as *; // matcha-stepper-theme($theme)
178
+ @forward "./components/matcha-toolbar";
179
+ @use "./components/matcha-toolbar" as *; // matcha-toolbar-modern (canon DSV3 1:1 Figma 15866:92)
180
+ @forward "./components/matcha-command-palette";
181
+ @use "./components/matcha-command-palette" as *; // matcha-command-palette-theme($theme)
182
+ @forward "./components/matcha-profile-card";
183
+ @use "./components/matcha-profile-card" as *; // matcha-profile-card-theme($theme)
184
+ @forward "./components/matcha-flag";
185
+ @use "./components/matcha-flag" as *; // matcha-flag-theme($theme)
186
+ @forward "./components/matcha-emoji";
187
+ @use "./components/matcha-emoji" as *; // matcha-emoji-theme($theme)
100
188
 
101
189
  // LAYOUT
102
- @import "./layout/matcha-page-layout.scss"; // matcha-page-layout-theme($theme)
190
+ @forward "./layout/matcha-page-layout";
191
+ @use "./layout/matcha-page-layout" as *; // matcha-page-layout-theme($theme)
103
192
 
104
193
  // VENDORS
105
- @import "./vendors/charts.scss";
194
+ @forward "./vendors/charts";
195
+ @use "./vendors/charts" as *;
106
196
 
107
197
  // ─── FONT LOADING — Manrope (SELF-HOSTED · zero dependência externa) ─────────
108
198
  // REGRA DE OURO: fontes self-hosted, nunca @import/<link> do Google Fonts.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inchurch/matcha-theme",
3
- "version": "21.1.0",
3
+ "version": "21.2.0",
4
4
  "description": "Themes for matcha-design-system",
5
5
  "main": "main.scss",
6
6
  "scripts": {
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/functions" as *;
1
2
  // =============================================================================
2
3
  // MATCHA — TOKENS DE COR (papéis semânticos por modo) · SINCRONIZADO DO FIGMA
3
4
  // =============================================================================
@@ -30,4 +30,4 @@ $elevation-transition-duration: 280ms !default;
30
30
  $elevation-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !default;
31
31
  $elevation-color: black !default;
32
32
  $elevation-opacity: 1 !default;
33
- $_elevation-prefix: "elevation-z-";
33
+ $elevation-prefix: "elevation-z-";
@@ -1,3 +1,9 @@
1
+ @use "elevation-tokens" as *;
2
+ @use "static-tokens" as *;
3
+ @use "color-tokens" as *;
4
+ @use "semantic-aliases" as *;
5
+ @use "material-palette" as *;
6
+ @use "../abstracts/theme-api" as *;
1
7
  // =============================================================================
2
8
  // MATCHA — EMISSÃO DOS TOKENS DO TEMA (CSS custom properties)
3
9
  // =============================================================================
@@ -13,24 +19,8 @@
13
19
  // =============================================================================
14
20
  @use "sass:map";
15
21
 
16
- // ═══════════════════════════════════════════════════════════════════════════
17
- // 3. EMISSOR GENÉRICO mapa flat (token → valor) vira --matcha-color-<token>.
18
- // Usado pelo mixin canônico abaixo e por matcha-define-theme() (theme API).
19
- // ═══════════════════════════════════════════════════════════════════════════
20
- // $aliases (opcional): token → "--matcha-prim-*". Quando presente p/ um token, emite
21
- // `var(--matcha-prim-*)` (Camada 2 referencia a primitiva) em vez do hex literal.
22
- // A rota clássica (matcha-css-custom-properties) passa $matcha-prim-aliases-{light,dark};
23
- // matcha-define-theme() não passa (mantém hex computado dos seeds — whitelabel intacto).
24
- @mixin matcha-emit-color-properties($colors, $aliases: ()) {
25
- @each $token, $value in $colors {
26
- $alias: map.get($aliases, $token);
27
- @if $alias {
28
- --matcha-color-#{$token}: var(#{$alias});
29
- } @else {
30
- --matcha-color-#{$token}: #{$value};
31
- }
32
- }
33
- }
22
+ // matcha-emit-color-properties() foi MOVIDO para abstracts/_theme-api.scss (quebra o
23
+ // ciclo @use emit-tokens↔theme-api). Aqui fica disponível via `@use theme-api` (topo).
34
24
 
35
25
  // ═══════════════════════════════════════════════════════════════════════════
36
26
  // 4. MIXIN CANÔNICO — assinatura preservada (retrocompat).
@@ -1,3 +1,4 @@
1
+ @use "../abstracts/elevation" as *;
1
2
  @mixin vendor-chart($theme) {
2
3
  // theme-agnóstico: cores via var(--matcha-color-*) (runtime). $theme mantido só
3
4
  // na assinatura por retrocompat dos call sites (removido na limpeza de params).