@inchurch/matcha-theme 21.3.3 → 22.0.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 (93) hide show
  1. package/abstracts/_colors.scss +236 -229
  2. package/abstracts/_elevation.scss +108 -108
  3. package/abstracts/_functions.scss +321 -321
  4. package/abstracts/_media-breakpoint.scss +26 -26
  5. package/abstracts/_theme-api.scss +219 -219
  6. package/abstracts/_typography.scss +128 -128
  7. package/base/_reset.scss +445 -432
  8. package/components/app-page-header.scss +260 -260
  9. package/components/matcha-accordion.scss +293 -293
  10. package/components/matcha-audio-player.scss +31 -31
  11. package/components/matcha-autocomplete.scss +145 -145
  12. package/components/matcha-avatar.scss +440 -301
  13. package/components/matcha-badge.scss +120 -120
  14. package/components/matcha-breadcrumb.scss +231 -231
  15. package/components/matcha-button-toggle.scss +384 -384
  16. package/components/matcha-buttons.scss +913 -913
  17. package/components/matcha-calendar.scss +218 -218
  18. package/components/matcha-cards.scss +230 -230
  19. package/components/matcha-chart-card.scss +53 -53
  20. package/components/matcha-checkbox.scss +255 -255
  21. package/components/matcha-chip.scss +292 -292
  22. package/components/matcha-color-pick.scss +34 -34
  23. package/components/matcha-command-palette.scss +316 -316
  24. package/components/matcha-crop.scss +406 -406
  25. package/components/matcha-date.scss +81 -81
  26. package/components/matcha-divider.scss +100 -100
  27. package/components/matcha-draggable.scss +23 -23
  28. package/components/matcha-drawer.scss +376 -376
  29. package/components/matcha-drop-image.scss +14 -14
  30. package/components/matcha-drop-list.scss +430 -430
  31. package/components/matcha-emoji.scss +69 -69
  32. package/components/matcha-empty-state.scss +230 -230
  33. package/components/matcha-file-uploader.scss +471 -471
  34. package/components/matcha-flag.scss +103 -103
  35. package/components/matcha-footer.scss +91 -91
  36. package/components/matcha-form-field.scss +606 -606
  37. package/components/matcha-form-section.scss +100 -100
  38. package/components/matcha-header.scss +135 -135
  39. package/components/matcha-highlight.scss +164 -164
  40. package/components/matcha-hint-text.scss +90 -90
  41. package/components/matcha-horizontal-tree.scss +316 -316
  42. package/components/matcha-icon.scss +98 -98
  43. package/components/matcha-image.scss +61 -61
  44. package/components/matcha-list.scss +211 -211
  45. package/components/matcha-menu.scss +99 -99
  46. package/components/matcha-modal.scss +210 -210
  47. package/components/matcha-nav.scss +581 -581
  48. package/components/matcha-notification.scss +413 -413
  49. package/components/matcha-option.scss +170 -170
  50. package/components/matcha-page-builder.scss +4196 -4196
  51. package/components/matcha-paginator.scss +689 -689
  52. package/components/matcha-panel.scss +194 -194
  53. package/components/matcha-profile-card.scss +50 -50
  54. package/components/matcha-progress-bar.scss +313 -313
  55. package/components/matcha-radio.scss +320 -320
  56. package/components/matcha-ripple.scss +7 -7
  57. package/components/matcha-scrollbar.scss +33 -33
  58. package/components/matcha-scrollbox-shadow.scss +120 -120
  59. package/components/matcha-section.scss +102 -102
  60. package/components/matcha-select-multiple.scss +56 -56
  61. package/components/matcha-select.scss +667 -667
  62. package/components/matcha-skeleton.scss +155 -155
  63. package/components/matcha-slide-toggle.scss +369 -369
  64. package/components/matcha-slider.scss +285 -285
  65. package/components/matcha-snack-bar.scss +259 -259
  66. package/components/matcha-spin.scss +164 -164
  67. package/components/matcha-spinner.scss +97 -97
  68. package/components/matcha-status-pill.scss +38 -18
  69. package/components/matcha-stepper.scss +376 -376
  70. package/components/matcha-table-cell.scss +74 -41
  71. package/components/matcha-table.scss +579 -578
  72. package/components/matcha-tabs.scss +600 -600
  73. package/components/matcha-text-editor.scss +105 -105
  74. package/components/matcha-time.scss +33 -33
  75. package/components/matcha-timepicker.scss +13 -13
  76. package/components/matcha-toolbar.scss +359 -359
  77. package/components/matcha-tooltip.scss +224 -224
  78. package/components/matcha-tree-view.scss +257 -212
  79. package/layout/matcha-page-layout.scss +778 -778
  80. package/main.scss +329 -329
  81. package/package.json +1 -1
  82. package/tokens/_animations-tokens.scss +37 -37
  83. package/tokens/_breakpoints-tokens.scss +35 -35
  84. package/tokens/_color-tokens.scss +274 -261
  85. package/tokens/_elevation-tokens.scss +33 -33
  86. package/tokens/_emit-tokens.scss +324 -324
  87. package/tokens/_material-palette.scss +1149 -1149
  88. package/tokens/_primitives.scss +98 -98
  89. package/tokens/_semantic-aliases.scss +120 -120
  90. package/tokens/_spacing-tokens.scss +94 -94
  91. package/tokens/_static-tokens.scss +137 -137
  92. package/tokens/_typography-tokens.scss +65 -65
  93. package/vendors/charts.scss +90 -90
@@ -1,324 +1,324 @@
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 *;
7
- // =============================================================================
8
- // MATCHA — EMISSÃO DOS TOKENS DO TEMA (CSS custom properties)
9
- // =============================================================================
10
- // Lógica de emissão À MÃO (NÃO é gerado). Monta as --matcha-* de um tema.
11
- // Os DADOS vêm de arquivos próprios, Figma-sourced:
12
- // - cor: _color-tokens.scss ($matcha-color-tokens — synced via sync-tokens)
13
- // - primitivas: _primitives.scss (gerado · --matcha-prim-*)
14
- // - aliases: _semantic-aliases.scss (gerado · papel → primitiva)
15
- // - não-cor: migrarão p/ _static-tokens.scss (gerado de global.json — A2)
16
- // O mixin matcha-css-custom-properties($theme) (API PÚBLICA — nome preservado) emite
17
- // cor (via matcha-emit-color-properties) + estáticos + mode-dependent + aliases.
18
- // IMPORT ORDER: main.scss importa _color-tokens ANTES deste arquivo.
19
- // =============================================================================
20
- @use "sass:map";
21
-
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).
24
-
25
- // ═══════════════════════════════════════════════════════════════════════════
26
- // 4. MIXIN CANÔNICO — assinatura preservada (retrocompat).
27
- // ═══════════════════════════════════════════════════════════════════════════
28
- @mixin matcha-css-custom-properties($is-dark: false) {
29
- // API nova: recebe SÓ o modo (is-dark). As cores vêm das synced tokens do Figma
30
- // ($matcha-colors-light/dark), não de um mapa $theme construído por light-theme().
31
-
32
- // ── Cores semânticas (ver $matcha-color-tokens acima) ────────────────────
33
- // Aliases sólidos → var(--matcha-prim-*); derivados/alphas/cross-semantic → hex literal.
34
- @include matcha-emit-color-properties(
35
- if($is-dark, $matcha-colors-dark, $matcha-colors-light),
36
- if($is-dark, $matcha-prim-aliases-dark, $matcha-prim-aliases-light)
37
- );
38
-
39
- // ── Cores de PALETA como tokens (base mode-flipped) ───────────────────────
40
- // Alimentam as utility classes .color-red/.background-grey/.{name} etc. via var(),
41
- // substituindo o caminho compile-time getRed($theme)/Material. Value-preserving:
42
- // mesmo valor que getRed/getRedAlpha/getRedContrast (shade 500 light / 100 dark).
43
- // Mantém as classes funcionando (painel intacto) e theme-agnósticas no ponto de uso.
44
- $-palette-shade: if($is-dark, 100, 500);
45
- @each $-name, $-pal in (
46
- "red": $red, "pink": $pink, "purple": $purple, "deep-purple": $deep-purple, "indigo": $indigo,
47
- "blue": $blue, "light-blue": $light-blue, "cyan": $cyan, "teal": $teal, "green": $green,
48
- "light-green": $light-green, "lime": $lime, "yellow": $yellow, "amber": $amber, "orange": $orange,
49
- "deep-orange": $deep-orange, "brown": $brown, "grey": $grey, "blue-grey": $blue-grey
50
- ) {
51
- $-c: map.get($-pal, $-palette-shade);
52
- $-cc: map.get(map.get($-pal, 'contrast'), $-palette-shade);
53
- --matcha-color-#{$-name}: #{$-c};
54
- --matcha-color-#{$-name}-alpha: #{rgba($-c, 0.1)};
55
- --matcha-color-#{$-name}-contrast: #{$-cc};
56
- --matcha-color-#{$-name}-contrast-alpha: #{rgba($-cc, 0.1)};
57
- }
58
-
59
- // ── Feedback namespace (matcha/color/feedback/* canon DSV3) ───────────────
60
- // Aliases semânticos pros tokens base — namespace dedicado pra status/banners/
61
- // table row variants. Naming match Figma DSV3 (flat: feedback/info, sem suffix).
62
- --matcha-color-feedback-info: var(--matcha-color-info);
63
- --matcha-color-feedback-success: var(--matcha-color-success);
64
- --matcha-color-feedback-warn: var(--matcha-color-warn);
65
- --matcha-color-feedback-danger: var(--matcha-color-danger);
66
-
67
- // Variantes alpha pra row backgrounds, badges filled-alpha, etc.
68
- --matcha-color-feedback-info-alpha: var(--matcha-color-info-alpha);
69
- --matcha-color-feedback-success-alpha: var(--matcha-color-success-alpha);
70
- --matcha-color-feedback-warn-alpha: var(--matcha-color-warn-alpha);
71
- --matcha-color-feedback-danger-alpha: var(--matcha-color-danger-alpha);
72
-
73
- // Surface hover (bg tinted pra hover em row de table)
74
- --matcha-color-feedback-info-surface-hover: var(--matcha-color-info-surface-hover);
75
- --matcha-color-feedback-success-surface-hover: var(--matcha-color-success-surface-hover);
76
- --matcha-color-feedback-warn-surface-hover: var(--matcha-color-warn-surface-hover);
77
- --matcha-color-feedback-danger-surface-hover: var(--matcha-color-danger-surface-hover);
78
-
79
- // ── Spacing (14 tokens — matches matcha/space/* exato) ────────────────────
80
- // ── Tokens não-cor (gerados do Figma) — ver _static-tokens.scss (A2) ──
81
- @include matcha-static-tokens();
82
-
83
-
84
- // ── Border radius (8 tokens — matches matcha/radius/* exato) ─────────────
85
- // Alias legado pra usos em páginas de doc (refatorar depois pra usar radius-2xl)
86
- --matcha-radius-card: var(--matcha-radius-2xl);
87
-
88
- // ── Border width (4 tokens — matches matcha/border/* exato) ──────────────
89
-
90
- // ── Font family (1 token) ────────────────────────────────────────────────
91
-
92
- // ── Font size (13 tokens — matches matcha/font/size/* from Figma) ─────────
93
-
94
- // ── Font weight (8 tokens — matches matcha/font/weight/* exato) ──────────
95
- // Canônico Figma: extralight (200), light (300), normal (400), medium (500),
96
- // semi-bold (600), bold (700), extrabold (800), black (900)
97
- // Código mantém regular/semibold por retrocompat + aliases Figma-exatos
98
- --matcha-weight-regular: 400;
99
- --matcha-weight-semibold: 600;
100
-
101
- // ── Typography — 15 canonical text styles (1:1 com matcha/text/* Figma) ──
102
- // 13 styles publicados + `display` e `p-tiny` (recriados no Figma 2026-06-03).
103
- --matcha-text-display-hero: 36px; // matcha/text/Stat Card (EB 36/40/-1.2)
104
- --matcha-text-display: 32px; // matcha/text/display (Bold 32/40/-0.3)
105
- --matcha-text-headline: 24px; // matcha/text/headline (Bold 24/32/-0.3)
106
- --matcha-text-title-lg: 20px; // matcha/text/title-large (SemiBold 20/28)
107
- --matcha-text-title-md: 18px; // matcha/text/title-medium (SemiBold 18/24)
108
- --matcha-text-title-sm: 16px; // matcha/text/title-small (SemiBold 16/22)
109
- --matcha-text-title-xs: 14px; // matcha/text/title-tiny (ExtraBold 14/20)
110
- --matcha-text-body-lg: 16px; // matcha/text/p-large (Regular 16/24)
111
- --matcha-text-body-md: 14px; // matcha/text/p-medium (Regular 14/20)
112
- --matcha-text-body-sm: 12px; // matcha/text/p-small (Regular 12/16)
113
- --matcha-text-p-tiny: 11px; // matcha/text/p-tiny (Regular 11/14/0.3)
114
- --matcha-text-label-lg: 16px; // matcha/text/label-large (Medium 16/22)
115
- --matcha-text-label-md: 14px; // matcha/text/label-medium (Medium 14/20)
116
- --matcha-text-label-sm: 12px; // matcha/text/label-small (Medium 12/16)
117
- --matcha-text-overline: 10px; // matcha/text/Uppercase (SemiBold 10/14/1)
118
-
119
- // Shorthand aliases (usados massivamente em components/*.scss)
120
- --matcha-text-xs: var(--matcha-text-p-tiny); // 11px — legendas, metadados
121
- --matcha-text-sm: var(--matcha-text-body-sm); // 12px — texto auxiliar
122
- --matcha-text-md: var(--matcha-text-body-md); // 14px — corpo padrão
123
- --matcha-text-lg: var(--matcha-text-body-lg); // 16px — texto de destaque
124
- --matcha-text-xl: var(--matcha-text-title-md); // 18px — títulos de grupo
125
-
126
- // ── Line heights — canônico (matches Figma text styles) ──────────────────
127
- --matcha-leading-display-hero: 40px; // Stat Card
128
- --matcha-leading-display: 40px;
129
- --matcha-leading-headline: 32px;
130
- --matcha-leading-title-lg: 28px;
131
- --matcha-leading-title-md: 24px;
132
- --matcha-leading-title-sm: 22px;
133
- --matcha-leading-title-xs: 20px; // title-tiny
134
- --matcha-leading-body-lg: 24px;
135
- --matcha-leading-body-md: 20px;
136
- --matcha-leading-body-sm: 16px;
137
- --matcha-leading-p-tiny: 14px;
138
- --matcha-leading-label-lg: 22px;
139
- --matcha-leading-label-md: 20px;
140
- --matcha-leading-label-sm: 16px;
141
- --matcha-leading-overline: 14px; // Uppercase
142
-
143
- // ── Tracking (letter-spacing) — só styles com valor não-zero ─────────────
144
- --matcha-tracking-display-hero: -1.2px; // Stat Card
145
- --matcha-tracking-display: -0.3px;
146
- --matcha-tracking-headline: -0.3px;
147
- --matcha-tracking-overline: 1px; // Uppercase
148
- --matcha-tracking-p-tiny: 0.3px;
149
-
150
- // Shorthand aliases para line-heights (acompanham --matcha-text-*)
151
- --matcha-leading-xs: var(--matcha-leading-p-tiny); // 14px
152
- --matcha-leading-sm: var(--matcha-leading-body-sm); // 16px
153
- --matcha-leading-md: var(--matcha-leading-body-md); // 20px
154
- --matcha-leading-lg: var(--matcha-leading-body-lg); // 24px
155
- --matcha-leading-xl: var(--matcha-leading-title-md); // 24px
156
-
157
- // ── Line height primitives (4 tokens — matches matcha/line-height/*) ─────
158
-
159
- // ── Letter spacing (primitives + semantic aliases) ───────────────────────
160
- // Semantic aliases alinhados com Figma text styles
161
- --matcha-letter-spacing-button: 0.2px; // matcha/text/button-*
162
- --matcha-letter-spacing-caption: 0.3px; // matcha/text/caption + link-sm
163
-
164
- // ── Elevation (4 shadow tokens) ──────────────────────────────────────────
165
- --matcha-shadow-1: #{if($is-dark, $shadow-1-dark, $shadow-1-light)};
166
- --matcha-shadow-2: #{if($is-dark, $shadow-2-dark, $shadow-2-light)};
167
- --matcha-shadow-3: #{if($is-dark, $shadow-3-dark, $shadow-3-light)};
168
- --matcha-shadow-4: #{if($is-dark, $shadow-4-dark, $shadow-4-light)};
169
-
170
- // ── Vars estruturais de componente (mode-dependentes, ex-@if $is-dark) ───
171
- // Bordas que só existiam no dark + shimmer do skeleton. No light viram no-op
172
- // (0/transparent) pra não alterar layout. O $is-dark aqui é o seletor de modo
173
- // legítimo da emissão (mesmo papel dos shadows acima) — não é o $is-dark
174
- // espalhado nos componentes, que foi eliminado na migração runtime-theming.
175
- --matcha-skeleton-shimmer: #{if($is-dark, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.5))};
176
- --matcha-chart-card-border: #{if($is-dark, 1px solid rgba(#212121, 0.06), 0 solid transparent)};
177
- --matcha-section-border: #{if($is-dark, 1px solid rgba(#212121, 0.06), 0 solid transparent)};
178
- --matcha-calendar-border: #{if($is-dark, 1px solid var(--matcha-color-surface-border), 0 solid transparent)};
179
- --matcha-drawer-border: #{if($is-dark, 1px solid var(--matcha-color-surface-border), 0 solid transparent)};
180
- // .text-boxed (tarja de texto) — alpha sobre branco no dark / sobre preto no light.
181
- --matcha-color-text-boxed-bg: #{if($is-dark, rgba(255, 255, 255, 0.12), rgba(0, 0, 0, 0.12))};
182
- --matcha-color-text-boxed-fg: #{if($is-dark, rgba(255, 255, 255, 0.54), rgba(0, 0, 0, 0.54))};
183
-
184
- // ── Animation (4 tokens — matches matcha/duration/* from Figma) ──────────
185
-
186
- // ── Easing (4 tokens — matches matcha/easing/* from Figma) ───────────────
187
-
188
- // ── Opacity (7 tokens — matches matcha/opacity/* from Figma) ─────────────
189
- --matcha-opacity-overlay-soft: 0.40;
190
- // Específico do matcha/option (Figma DSV3 14237:113) — diferente do disabled global (0.38)
191
- --matcha-opacity-option-disabled: 0.5;
192
-
193
- // ── State layers (matches matcha/state-layer/* from Figma) ────────────────
194
- // Aliases legados (usados nos componentes atuais)
195
- --matcha-state-hover: var(--matcha-state-layer-hover);
196
- --matcha-state-active: var(--matcha-state-layer-pressed);
197
- --matcha-state-focus-ring-width: 2px;
198
- --matcha-state-focus-ring-offset: 2px;
199
-
200
- // ── Scrim / Overlay (Figma matcha/overlay Type=Modal / Type=Drawer) ──────
201
- --matcha-scrim-modal: rgba(0, 0, 0, 0.5);
202
- --matcha-scrim-modal-blur: 6px;
203
- --matcha-scrim-drawer: rgba(0, 0, 0, 0.3);
204
- --matcha-scrim-drawer-blur: 4px;
205
-
206
- // ── Icon sizes (4 tokens — matches matcha/icon/size/* exato) ─────────────
207
-
208
- // ── Avatar sizes (1:1 com Figma matcha/avatar — Type=Photo, Size variants)
209
- --matcha-avatar-xs: 24px;
210
- --matcha-avatar-sm: 32px;
211
- --matcha-avatar-md: 40px;
212
- --matcha-avatar-lg: 56px;
213
- --matcha-avatar-xl: 80px;
214
- --matcha-avatar-2xl: 96px;
215
- // Status indicator — 1:1 com Figma (Status ellipse em cada Size variant)
216
- --matcha-avatar-status-xs: 6px;
217
- --matcha-avatar-status-sm: 8px;
218
- --matcha-avatar-status-md: 10px;
219
- --matcha-avatar-status-lg: 12px;
220
- --matcha-avatar-status-xl: 14px;
221
- --matcha-avatar-status-2xl: 16px;
222
-
223
- // ── Z-index (8 tokens — matches matcha/z-index/* from Figma) ─────────────
224
- // Panel flutuante (matcha-panel) — acima de modal pra suportar select/menu
225
- // dentro de modal. Renderizado via portal-to-body fora de stacking contexts.
226
- --matcha-z-popover-floating: 10001;
227
-
228
- // ── Grid (22 tokens — 1:1 com matcha/grid/* do Figma) ────────────────────
229
- // Frames (breakpoints)
230
- // Chrome
231
- --matcha-grid-header-height-mobile: 48px;
232
- // Gutters (espaço entre colunas)
233
- // Column widths (largura INDIVIDUAL de coluna) — Figma verdadeiro
234
- // Content widths (área útil total) — Figma verdadeiro
235
-
236
- // Public-facing column widths (site institucional/landing — breakpoint-aware)
237
-
238
- // Horizontal offsets (distância da borda do frame ao primeiro col da grid)
239
-
240
- // ── Breakpoints (6 tokens — Tailwind-aligned, expostos como CSS vars) ────
241
- // Pra container queries, JS-side responsive logic (`matchMedia`) e media
242
- // queries inline (`@media (min-width: var(...))` em CSS moderno). Valores
243
- // alinhados ao padrão Tailwind/Chakra — familiares e cobrem todos os tiers
244
- // (mobile pequeno até desktop wide). 1:1 com Figma `matcha/bp/*`.
245
- //
246
- // NOTA: SCSS `@mixin breakpoint(...)` em `_breakpoints-tokens.scss` usa
247
- // valores Angular Material legacy (600/1024/1440/1920) — DESALINHADO destes.
248
- // Em refactors novos, prefira CSS custom prop `var(--matcha-bp-md)` em vez
249
- // do mixin SCSS.
250
-
251
- // ═════════════════════════════════════════════════════════════════════════
252
- // 16. NAMING-PARITY ALIASES
253
- // Aliases que espelham o nome exato das variables do Figma, garantindo que
254
- // dev possa referenciar o token pelo nome que vê no Figma.
255
- // ═════════════════════════════════════════════════════════════════════════
256
-
257
- // Figma: matcha/color/surface/background → ↔ --matcha-color-surface-bg
258
- --matcha-color-surface-background: var(--matcha-color-surface-bg);
259
- --matcha-color-surface-background-alpha: var(--matcha-color-surface-bg-alpha);
260
- --matcha-color-surface-background-inverse: var(--matcha-color-surface-bg-inverse);
261
-
262
- // Figma: matcha/color/neutral/default → ↔ --matcha-color-neutral
263
- --matcha-color-neutral-default: var(--matcha-color-neutral);
264
-
265
- // Figma: matcha/color/interaction/focus-ring → ↔ --matcha-color-focus-ring
266
- --matcha-color-interaction-focus-ring: var(--matcha-color-focus-ring);
267
-
268
- // Figma: matcha/z-index/{base,dropdown,…} → ↔ --matcha-z-{base,dropdown,…}
269
- --matcha-z-index-base: var(--matcha-z-base);
270
- --matcha-z-index-dropdown: var(--matcha-z-dropdown);
271
- --matcha-z-index-sticky: var(--matcha-z-sticky);
272
- --matcha-z-index-popover: var(--matcha-z-popover);
273
- --matcha-z-index-tooltip: var(--matcha-z-tooltip);
274
- --matcha-z-index-modal-bg: var(--matcha-z-modal-bg);
275
- --matcha-z-index-modal: var(--matcha-z-modal);
276
- --matcha-z-index-overlay: var(--matcha-z-overlay);
277
- --matcha-z-index-popover-floating: var(--matcha-z-popover-floating);
278
-
279
- // Figma: matcha/font/weight/semi-bold → ↔ --matcha-weight-semibold
280
- --matcha-font-weight-extralight: var(--matcha-weight-extralight);
281
- --matcha-font-weight-light: var(--matcha-weight-light);
282
- --matcha-font-weight-semi-bold: var(--matcha-weight-semibold);
283
- --matcha-font-weight-regular: var(--matcha-weight-regular);
284
- --matcha-font-weight-medium: var(--matcha-weight-medium);
285
- --matcha-font-weight-bold: var(--matcha-weight-bold);
286
- --matcha-font-weight-extrabold: var(--matcha-weight-extrabold);
287
- --matcha-font-weight-black: var(--matcha-weight-black);
288
-
289
- // ═════════════════════════════════════════════════════════════════════════
290
- // 17. GRADIENTS
291
- // Gradients tonais semânticos. Compostos por 2 stops (alpha → surface-card)
292
- // pra dar fade lateral em banners. Mantém compat com Figma — lá cada stop
293
- // é uma variable separada (gradients não são tipo nativo de variable).
294
- // Centralizar aqui evita repetir o linear-gradient em cada componente.
295
- // ═════════════════════════════════════════════════════════════════════════
296
-
297
- // Figma DSV3 (matcha/banner 19080:308): tone="info" mapeia pra primary-alpha
298
- // (#64b5f6 azul), não info-alpha (cyan/turquesa) — alinhamento visual com border + eyebrow.
299
- --matcha-gradient-banner-info: linear-gradient(
300
- 90deg,
301
- var(--matcha-color-primary-alpha) 0%,
302
- var(--matcha-color-surface-card) 100%
303
- );
304
- --matcha-gradient-banner-success: linear-gradient(
305
- 90deg,
306
- var(--matcha-color-success-alpha) 0%,
307
- var(--matcha-color-surface-card) 100%
308
- );
309
- --matcha-gradient-banner-warning: linear-gradient(
310
- 90deg,
311
- var(--matcha-color-warn-alpha) 0%,
312
- var(--matcha-color-surface-card) 100%
313
- );
314
- --matcha-gradient-banner-accent: linear-gradient(
315
- 90deg,
316
- var(--matcha-color-accent-alpha) 0%,
317
- var(--matcha-color-surface-card) 100%
318
- );
319
- --matcha-gradient-banner-danger: linear-gradient(
320
- 90deg,
321
- var(--matcha-color-danger-alpha) 0%,
322
- var(--matcha-color-surface-card) 100%
323
- );
324
- }
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 *;
7
+ // =============================================================================
8
+ // MATCHA — EMISSÃO DOS TOKENS DO TEMA (CSS custom properties)
9
+ // =============================================================================
10
+ // Lógica de emissão À MÃO (NÃO é gerado). Monta as --matcha-* de um tema.
11
+ // Os DADOS vêm de arquivos próprios, Figma-sourced:
12
+ // - cor: _color-tokens.scss ($matcha-color-tokens — synced via sync-tokens)
13
+ // - primitivas: _primitives.scss (gerado · --matcha-prim-*)
14
+ // - aliases: _semantic-aliases.scss (gerado · papel → primitiva)
15
+ // - não-cor: migrarão p/ _static-tokens.scss (gerado de global.json — A2)
16
+ // O mixin matcha-css-custom-properties($theme) (API PÚBLICA — nome preservado) emite
17
+ // cor (via matcha-emit-color-properties) + estáticos + mode-dependent + aliases.
18
+ // IMPORT ORDER: main.scss importa _color-tokens ANTES deste arquivo.
19
+ // =============================================================================
20
+ @use "sass:map";
21
+
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).
24
+
25
+ // ═══════════════════════════════════════════════════════════════════════════
26
+ // 4. MIXIN CANÔNICO — assinatura preservada (retrocompat).
27
+ // ═══════════════════════════════════════════════════════════════════════════
28
+ @mixin matcha-css-custom-properties($is-dark: false) {
29
+ // API nova: recebe SÓ o modo (is-dark). As cores vêm das synced tokens do Figma
30
+ // ($matcha-colors-light/dark), não de um mapa $theme construído por light-theme().
31
+
32
+ // ── Cores semânticas (ver $matcha-color-tokens acima) ────────────────────
33
+ // Aliases sólidos → var(--matcha-prim-*); derivados/alphas/cross-semantic → hex literal.
34
+ @include matcha-emit-color-properties(
35
+ if($is-dark, $matcha-colors-dark, $matcha-colors-light),
36
+ if($is-dark, $matcha-prim-aliases-dark, $matcha-prim-aliases-light)
37
+ );
38
+
39
+ // ── Cores de PALETA como tokens (base mode-flipped) ───────────────────────
40
+ // Alimentam as utility classes .color-red/.background-grey/.{name} etc. via var(),
41
+ // substituindo o caminho compile-time getRed($theme)/Material. Value-preserving:
42
+ // mesmo valor que getRed/getRedAlpha/getRedContrast (shade 500 light / 100 dark).
43
+ // Mantém as classes funcionando (painel intacto) e theme-agnósticas no ponto de uso.
44
+ $-palette-shade: if($is-dark, 100, 500);
45
+ @each $-name, $-pal in (
46
+ "red": $red, "pink": $pink, "purple": $purple, "deep-purple": $deep-purple, "indigo": $indigo,
47
+ "blue": $blue, "light-blue": $light-blue, "cyan": $cyan, "teal": $teal, "green": $green,
48
+ "light-green": $light-green, "lime": $lime, "yellow": $yellow, "amber": $amber, "orange": $orange,
49
+ "deep-orange": $deep-orange, "brown": $brown, "grey": $grey, "blue-grey": $blue-grey
50
+ ) {
51
+ $-c: map.get($-pal, $-palette-shade);
52
+ $-cc: map.get(map.get($-pal, 'contrast'), $-palette-shade);
53
+ --matcha-color-#{$-name}: #{$-c};
54
+ --matcha-color-#{$-name}-alpha: #{rgba($-c, 0.1)};
55
+ --matcha-color-#{$-name}-contrast: #{$-cc};
56
+ --matcha-color-#{$-name}-contrast-alpha: #{rgba($-cc, 0.1)};
57
+ }
58
+
59
+ // ── Feedback namespace (matcha/color/feedback/* canon DSV3) ───────────────
60
+ // Aliases semânticos pros tokens base — namespace dedicado pra status/banners/
61
+ // table row variants. Naming match Figma DSV3 (flat: feedback/info, sem suffix).
62
+ --matcha-color-feedback-info: var(--matcha-color-info);
63
+ --matcha-color-feedback-success: var(--matcha-color-success);
64
+ --matcha-color-feedback-warn: var(--matcha-color-warn);
65
+ --matcha-color-feedback-danger: var(--matcha-color-danger);
66
+
67
+ // Variantes alpha pra row backgrounds, badges filled-alpha, etc.
68
+ --matcha-color-feedback-info-alpha: var(--matcha-color-info-alpha);
69
+ --matcha-color-feedback-success-alpha: var(--matcha-color-success-alpha);
70
+ --matcha-color-feedback-warn-alpha: var(--matcha-color-warn-alpha);
71
+ --matcha-color-feedback-danger-alpha: var(--matcha-color-danger-alpha);
72
+
73
+ // Surface hover (bg tinted pra hover em row de table)
74
+ --matcha-color-feedback-info-surface-hover: var(--matcha-color-info-surface-hover);
75
+ --matcha-color-feedback-success-surface-hover: var(--matcha-color-success-surface-hover);
76
+ --matcha-color-feedback-warn-surface-hover: var(--matcha-color-warn-surface-hover);
77
+ --matcha-color-feedback-danger-surface-hover: var(--matcha-color-danger-surface-hover);
78
+
79
+ // ── Spacing (14 tokens — matches matcha/space/* exato) ────────────────────
80
+ // ── Tokens não-cor (gerados do Figma) — ver _static-tokens.scss (A2) ──
81
+ @include matcha-static-tokens();
82
+
83
+
84
+ // ── Border radius (8 tokens — matches matcha/radius/* exato) ─────────────
85
+ // Alias legado pra usos em páginas de doc (refatorar depois pra usar radius-2xl)
86
+ --matcha-radius-card: var(--matcha-radius-2xl);
87
+
88
+ // ── Border width (4 tokens — matches matcha/border/* exato) ──────────────
89
+
90
+ // ── Font family (1 token) ────────────────────────────────────────────────
91
+
92
+ // ── Font size (13 tokens — matches matcha/font/size/* from Figma) ─────────
93
+
94
+ // ── Font weight (8 tokens — matches matcha/font/weight/* exato) ──────────
95
+ // Canônico Figma: extralight (200), light (300), normal (400), medium (500),
96
+ // semi-bold (600), bold (700), extrabold (800), black (900)
97
+ // Código mantém regular/semibold por retrocompat + aliases Figma-exatos
98
+ --matcha-weight-regular: 400;
99
+ --matcha-weight-semibold: 600;
100
+
101
+ // ── Typography — 15 canonical text styles (1:1 com matcha/text/* Figma) ──
102
+ // 13 styles publicados + `display` e `p-tiny` (recriados no Figma 2026-06-03).
103
+ --matcha-text-display-hero: 36px; // matcha/text/Stat Card (EB 36/40/-1.2)
104
+ --matcha-text-display: 32px; // matcha/text/display (Bold 32/40/-0.3)
105
+ --matcha-text-headline: 24px; // matcha/text/headline (Bold 24/32/-0.3)
106
+ --matcha-text-title-lg: 20px; // matcha/text/title-large (SemiBold 20/28)
107
+ --matcha-text-title-md: 18px; // matcha/text/title-medium (SemiBold 18/24)
108
+ --matcha-text-title-sm: 16px; // matcha/text/title-small (SemiBold 16/22)
109
+ --matcha-text-title-xs: 14px; // matcha/text/title-tiny (ExtraBold 14/20)
110
+ --matcha-text-body-lg: 16px; // matcha/text/p-large (Regular 16/24)
111
+ --matcha-text-body-md: 14px; // matcha/text/p-medium (Regular 14/20)
112
+ --matcha-text-body-sm: 12px; // matcha/text/p-small (Regular 12/16)
113
+ --matcha-text-p-tiny: 11px; // matcha/text/p-tiny (Regular 11/14/0.3)
114
+ --matcha-text-label-lg: 16px; // matcha/text/label-large (Medium 16/22)
115
+ --matcha-text-label-md: 14px; // matcha/text/label-medium (Medium 14/20)
116
+ --matcha-text-label-sm: 12px; // matcha/text/label-small (Medium 12/16)
117
+ --matcha-text-overline: 10px; // matcha/text/Uppercase (SemiBold 10/14/1)
118
+
119
+ // Shorthand aliases (usados massivamente em components/*.scss)
120
+ --matcha-text-xs: var(--matcha-text-p-tiny); // 11px — legendas, metadados
121
+ --matcha-text-sm: var(--matcha-text-body-sm); // 12px — texto auxiliar
122
+ --matcha-text-md: var(--matcha-text-body-md); // 14px — corpo padrão
123
+ --matcha-text-lg: var(--matcha-text-body-lg); // 16px — texto de destaque
124
+ --matcha-text-xl: var(--matcha-text-title-md); // 18px — títulos de grupo
125
+
126
+ // ── Line heights — canônico (matches Figma text styles) ──────────────────
127
+ --matcha-leading-display-hero: 40px; // Stat Card
128
+ --matcha-leading-display: 40px;
129
+ --matcha-leading-headline: 32px;
130
+ --matcha-leading-title-lg: 28px;
131
+ --matcha-leading-title-md: 24px;
132
+ --matcha-leading-title-sm: 22px;
133
+ --matcha-leading-title-xs: 20px; // title-tiny
134
+ --matcha-leading-body-lg: 24px;
135
+ --matcha-leading-body-md: 20px;
136
+ --matcha-leading-body-sm: 16px;
137
+ --matcha-leading-p-tiny: 14px;
138
+ --matcha-leading-label-lg: 22px;
139
+ --matcha-leading-label-md: 20px;
140
+ --matcha-leading-label-sm: 16px;
141
+ --matcha-leading-overline: 14px; // Uppercase
142
+
143
+ // ── Tracking (letter-spacing) — só styles com valor não-zero ─────────────
144
+ --matcha-tracking-display-hero: -1.2px; // Stat Card
145
+ --matcha-tracking-display: -0.3px;
146
+ --matcha-tracking-headline: -0.3px;
147
+ --matcha-tracking-overline: 1px; // Uppercase
148
+ --matcha-tracking-p-tiny: 0.3px;
149
+
150
+ // Shorthand aliases para line-heights (acompanham --matcha-text-*)
151
+ --matcha-leading-xs: var(--matcha-leading-p-tiny); // 14px
152
+ --matcha-leading-sm: var(--matcha-leading-body-sm); // 16px
153
+ --matcha-leading-md: var(--matcha-leading-body-md); // 20px
154
+ --matcha-leading-lg: var(--matcha-leading-body-lg); // 24px
155
+ --matcha-leading-xl: var(--matcha-leading-title-md); // 24px
156
+
157
+ // ── Line height primitives (4 tokens — matches matcha/line-height/*) ─────
158
+
159
+ // ── Letter spacing (primitives + semantic aliases) ───────────────────────
160
+ // Semantic aliases alinhados com Figma text styles
161
+ --matcha-letter-spacing-button: 0.2px; // matcha/text/button-*
162
+ --matcha-letter-spacing-caption: 0.3px; // matcha/text/caption + link-sm
163
+
164
+ // ── Elevation (4 shadow tokens) ──────────────────────────────────────────
165
+ --matcha-shadow-1: #{if($is-dark, $shadow-1-dark, $shadow-1-light)};
166
+ --matcha-shadow-2: #{if($is-dark, $shadow-2-dark, $shadow-2-light)};
167
+ --matcha-shadow-3: #{if($is-dark, $shadow-3-dark, $shadow-3-light)};
168
+ --matcha-shadow-4: #{if($is-dark, $shadow-4-dark, $shadow-4-light)};
169
+
170
+ // ── Vars estruturais de componente (mode-dependentes, ex-@if $is-dark) ───
171
+ // Bordas que só existiam no dark + shimmer do skeleton. No light viram no-op
172
+ // (0/transparent) pra não alterar layout. O $is-dark aqui é o seletor de modo
173
+ // legítimo da emissão (mesmo papel dos shadows acima) — não é o $is-dark
174
+ // espalhado nos componentes, que foi eliminado na migração runtime-theming.
175
+ --matcha-skeleton-shimmer: #{if($is-dark, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.5))};
176
+ --matcha-chart-card-border: #{if($is-dark, 1px solid rgba(#212121, 0.06), 0 solid transparent)};
177
+ --matcha-section-border: #{if($is-dark, 1px solid rgba(#212121, 0.06), 0 solid transparent)};
178
+ --matcha-calendar-border: #{if($is-dark, 1px solid var(--matcha-color-surface-border), 0 solid transparent)};
179
+ --matcha-drawer-border: #{if($is-dark, 1px solid var(--matcha-color-surface-border), 0 solid transparent)};
180
+ // .text-boxed (tarja de texto) — alpha sobre branco no dark / sobre preto no light.
181
+ --matcha-color-text-boxed-bg: #{if($is-dark, rgba(255, 255, 255, 0.12), rgba(0, 0, 0, 0.12))};
182
+ --matcha-color-text-boxed-fg: #{if($is-dark, rgba(255, 255, 255, 0.54), rgba(0, 0, 0, 0.54))};
183
+
184
+ // ── Animation (4 tokens — matches matcha/duration/* from Figma) ──────────
185
+
186
+ // ── Easing (4 tokens — matches matcha/easing/* from Figma) ───────────────
187
+
188
+ // ── Opacity (7 tokens — matches matcha/opacity/* from Figma) ─────────────
189
+ --matcha-opacity-overlay-soft: 0.40;
190
+ // Específico do matcha/option (Figma DSV3 14237:113) — diferente do disabled global (0.38)
191
+ --matcha-opacity-option-disabled: 0.5;
192
+
193
+ // ── State layers (matches matcha/state-layer/* from Figma) ────────────────
194
+ // Aliases legados (usados nos componentes atuais)
195
+ --matcha-state-hover: var(--matcha-state-layer-hover);
196
+ --matcha-state-active: var(--matcha-state-layer-pressed);
197
+ --matcha-state-focus-ring-width: 2px;
198
+ --matcha-state-focus-ring-offset: 2px;
199
+
200
+ // ── Scrim / Overlay (Figma matcha/overlay Type=Modal / Type=Drawer) ──────
201
+ --matcha-scrim-modal: rgba(0, 0, 0, 0.5);
202
+ --matcha-scrim-modal-blur: 6px;
203
+ --matcha-scrim-drawer: rgba(0, 0, 0, 0.3);
204
+ --matcha-scrim-drawer-blur: 4px;
205
+
206
+ // ── Icon sizes (4 tokens — matches matcha/icon/size/* exato) ─────────────
207
+
208
+ // ── Avatar sizes (1:1 com Figma matcha/avatar — Type=Photo, Size variants)
209
+ --matcha-avatar-xs: 24px;
210
+ --matcha-avatar-sm: 32px;
211
+ --matcha-avatar-md: 40px;
212
+ --matcha-avatar-lg: 56px;
213
+ --matcha-avatar-xl: 80px;
214
+ --matcha-avatar-2xl: 96px;
215
+ // Status indicator — 1:1 com Figma (Status ellipse em cada Size variant)
216
+ --matcha-avatar-status-xs: 6px;
217
+ --matcha-avatar-status-sm: 8px;
218
+ --matcha-avatar-status-md: 10px;
219
+ --matcha-avatar-status-lg: 12px;
220
+ --matcha-avatar-status-xl: 14px;
221
+ --matcha-avatar-status-2xl: 16px;
222
+
223
+ // ── Z-index (8 tokens — matches matcha/z-index/* from Figma) ─────────────
224
+ // Panel flutuante (matcha-panel) — acima de modal pra suportar select/menu
225
+ // dentro de modal. Renderizado via portal-to-body fora de stacking contexts.
226
+ --matcha-z-popover-floating: 10001;
227
+
228
+ // ── Grid (22 tokens — 1:1 com matcha/grid/* do Figma) ────────────────────
229
+ // Frames (breakpoints)
230
+ // Chrome
231
+ --matcha-grid-header-height-mobile: 48px;
232
+ // Gutters (espaço entre colunas)
233
+ // Column widths (largura INDIVIDUAL de coluna) — Figma verdadeiro
234
+ // Content widths (área útil total) — Figma verdadeiro
235
+
236
+ // Public-facing column widths (site institucional/landing — breakpoint-aware)
237
+
238
+ // Horizontal offsets (distância da borda do frame ao primeiro col da grid)
239
+
240
+ // ── Breakpoints (6 tokens — Tailwind-aligned, expostos como CSS vars) ────
241
+ // Pra container queries, JS-side responsive logic (`matchMedia`) e media
242
+ // queries inline (`@media (min-width: var(...))` em CSS moderno). Valores
243
+ // alinhados ao padrão Tailwind/Chakra — familiares e cobrem todos os tiers
244
+ // (mobile pequeno até desktop wide). 1:1 com Figma `matcha/bp/*`.
245
+ //
246
+ // NOTA: SCSS `@mixin breakpoint(...)` em `_breakpoints-tokens.scss` usa
247
+ // valores Angular Material legacy (600/1024/1440/1920) — DESALINHADO destes.
248
+ // Em refactors novos, prefira CSS custom prop `var(--matcha-bp-md)` em vez
249
+ // do mixin SCSS.
250
+
251
+ // ═════════════════════════════════════════════════════════════════════════
252
+ // 16. NAMING-PARITY ALIASES
253
+ // Aliases que espelham o nome exato das variables do Figma, garantindo que
254
+ // dev possa referenciar o token pelo nome que vê no Figma.
255
+ // ═════════════════════════════════════════════════════════════════════════
256
+
257
+ // Figma: matcha/color/surface/background → ↔ --matcha-color-surface-bg
258
+ --matcha-color-surface-background: var(--matcha-color-surface-bg);
259
+ --matcha-color-surface-background-alpha: var(--matcha-color-surface-bg-alpha);
260
+ --matcha-color-surface-background-inverse: var(--matcha-color-surface-bg-inverse);
261
+
262
+ // Figma: matcha/color/neutral/default → ↔ --matcha-color-neutral
263
+ --matcha-color-neutral-default: var(--matcha-color-neutral);
264
+
265
+ // Figma: matcha/color/interaction/focus-ring → ↔ --matcha-color-focus-ring
266
+ --matcha-color-interaction-focus-ring: var(--matcha-color-focus-ring);
267
+
268
+ // Figma: matcha/z-index/{base,dropdown,…} → ↔ --matcha-z-{base,dropdown,…}
269
+ --matcha-z-index-base: var(--matcha-z-base);
270
+ --matcha-z-index-dropdown: var(--matcha-z-dropdown);
271
+ --matcha-z-index-sticky: var(--matcha-z-sticky);
272
+ --matcha-z-index-popover: var(--matcha-z-popover);
273
+ --matcha-z-index-tooltip: var(--matcha-z-tooltip);
274
+ --matcha-z-index-modal-bg: var(--matcha-z-modal-bg);
275
+ --matcha-z-index-modal: var(--matcha-z-modal);
276
+ --matcha-z-index-overlay: var(--matcha-z-overlay);
277
+ --matcha-z-index-popover-floating: var(--matcha-z-popover-floating);
278
+
279
+ // Figma: matcha/font/weight/semi-bold → ↔ --matcha-weight-semibold
280
+ --matcha-font-weight-extralight: var(--matcha-weight-extralight);
281
+ --matcha-font-weight-light: var(--matcha-weight-light);
282
+ --matcha-font-weight-semi-bold: var(--matcha-weight-semibold);
283
+ --matcha-font-weight-regular: var(--matcha-weight-regular);
284
+ --matcha-font-weight-medium: var(--matcha-weight-medium);
285
+ --matcha-font-weight-bold: var(--matcha-weight-bold);
286
+ --matcha-font-weight-extrabold: var(--matcha-weight-extrabold);
287
+ --matcha-font-weight-black: var(--matcha-weight-black);
288
+
289
+ // ═════════════════════════════════════════════════════════════════════════
290
+ // 17. GRADIENTS
291
+ // Gradients tonais semânticos. Compostos por 2 stops (alpha → surface-card)
292
+ // pra dar fade lateral em banners. Mantém compat com Figma — lá cada stop
293
+ // é uma variable separada (gradients não são tipo nativo de variable).
294
+ // Centralizar aqui evita repetir o linear-gradient em cada componente.
295
+ // ═════════════════════════════════════════════════════════════════════════
296
+
297
+ // Figma DSV3 (matcha/banner 19080:308): tone="info" mapeia pra primary-alpha
298
+ // (#64b5f6 azul), não info-alpha (cyan/turquesa) — alinhamento visual com border + eyebrow.
299
+ --matcha-gradient-banner-info: linear-gradient(
300
+ 90deg,
301
+ var(--matcha-color-primary-alpha) 0%,
302
+ var(--matcha-color-surface-card) 100%
303
+ );
304
+ --matcha-gradient-banner-success: linear-gradient(
305
+ 90deg,
306
+ var(--matcha-color-success-alpha) 0%,
307
+ var(--matcha-color-surface-card) 100%
308
+ );
309
+ --matcha-gradient-banner-warning: linear-gradient(
310
+ 90deg,
311
+ var(--matcha-color-warn-alpha) 0%,
312
+ var(--matcha-color-surface-card) 100%
313
+ );
314
+ --matcha-gradient-banner-accent: linear-gradient(
315
+ 90deg,
316
+ var(--matcha-color-accent-alpha) 0%,
317
+ var(--matcha-color-surface-card) 100%
318
+ );
319
+ --matcha-gradient-banner-danger: linear-gradient(
320
+ 90deg,
321
+ var(--matcha-color-danger-alpha) 0%,
322
+ var(--matcha-color-surface-card) 100%
323
+ );
324
+ }