@inchurch/matcha-theme 21.4.0 → 22.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/abstracts/_colors.scss +236 -236
  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 +446 -445
  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 +383 -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-contact.scss +35 -0
  25. package/components/matcha-crop.scss +406 -406
  26. package/components/matcha-date.scss +81 -81
  27. package/components/matcha-divider.scss +100 -100
  28. package/components/matcha-draggable.scss +23 -23
  29. package/components/matcha-drawer.scss +376 -376
  30. package/components/matcha-drop-image.scss +14 -14
  31. package/components/matcha-drop-list.scss +430 -430
  32. package/components/matcha-emoji.scss +69 -69
  33. package/components/matcha-empty-state.scss +230 -230
  34. package/components/matcha-file-uploader.scss +471 -471
  35. package/components/matcha-flag.scss +103 -103
  36. package/components/matcha-footer.scss +91 -91
  37. package/components/matcha-form-field.scss +606 -606
  38. package/components/matcha-form-section.scss +100 -100
  39. package/components/matcha-header.scss +135 -135
  40. package/components/matcha-highlight.scss +164 -164
  41. package/components/matcha-hint-text.scss +90 -90
  42. package/components/matcha-horizontal-tree.scss +316 -316
  43. package/components/matcha-icon.scss +98 -98
  44. package/components/matcha-image.scss +61 -61
  45. package/components/matcha-list.scss +211 -211
  46. package/components/matcha-menu.scss +99 -99
  47. package/components/matcha-modal.scss +210 -210
  48. package/components/matcha-nav.scss +581 -581
  49. package/components/matcha-notification.scss +413 -413
  50. package/components/matcha-option.scss +170 -170
  51. package/components/matcha-page-builder.scss +4196 -4196
  52. package/components/matcha-paginator.scss +689 -689
  53. package/components/matcha-panel.scss +194 -194
  54. package/components/matcha-profile-card.scss +50 -50
  55. package/components/matcha-progress-bar.scss +313 -313
  56. package/components/matcha-radio.scss +320 -320
  57. package/components/matcha-ripple.scss +7 -7
  58. package/components/matcha-scrollbar.scss +33 -33
  59. package/components/matcha-scrollbox-shadow.scss +120 -120
  60. package/components/matcha-section.scss +102 -102
  61. package/components/matcha-select-multiple.scss +56 -56
  62. package/components/matcha-select.scss +667 -667
  63. package/components/matcha-skeleton.scss +155 -155
  64. package/components/matcha-slide-toggle.scss +369 -369
  65. package/components/matcha-slider.scss +285 -285
  66. package/components/matcha-snack-bar.scss +259 -259
  67. package/components/matcha-spin.scss +164 -164
  68. package/components/matcha-spinner.scss +97 -97
  69. package/components/matcha-status-pill.scss +38 -18
  70. package/components/matcha-stepper.scss +376 -376
  71. package/components/matcha-table-cell.scss +49 -41
  72. package/components/matcha-table.scss +579 -579
  73. package/components/matcha-tabs.scss +600 -600
  74. package/components/matcha-text-editor.scss +105 -105
  75. package/components/matcha-time.scss +33 -33
  76. package/components/matcha-timepicker.scss +13 -13
  77. package/components/matcha-toolbar.scss +359 -359
  78. package/components/matcha-tooltip.scss +224 -224
  79. package/components/matcha-tree-view.scss +257 -257
  80. package/layout/matcha-page-layout.scss +778 -778
  81. package/main.scss +331 -329
  82. package/package.json +1 -1
  83. package/tokens/_animations-tokens.scss +37 -37
  84. package/tokens/_breakpoints-tokens.scss +35 -35
  85. package/tokens/_color-tokens.scss +274 -274
  86. package/tokens/_elevation-tokens.scss +33 -33
  87. package/tokens/_emit-tokens.scss +324 -324
  88. package/tokens/_material-palette.scss +1149 -1149
  89. package/tokens/_primitives.scss +98 -98
  90. package/tokens/_semantic-aliases.scss +120 -120
  91. package/tokens/_spacing-tokens.scss +94 -94
  92. package/tokens/_static-tokens.scss +137 -137
  93. package/tokens/_typography-tokens.scss +65 -65
  94. 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
+ }