@inchurch/matcha-theme 20.276.0 → 20.278.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 (70) hide show
  1. package/abstracts/_functions.scss +0 -26
  2. package/abstracts/_theme-api.scss +230 -0
  3. package/base/_reset.scss +5 -1
  4. package/components/app-page-header.scss +16 -17
  5. package/components/matcha-accordion.scss +5 -6
  6. package/components/matcha-audio-player.scss +1 -2
  7. package/components/matcha-autocomplete.scss +10 -11
  8. package/components/matcha-avatar.scss +3 -3
  9. package/components/matcha-badge.scss +11 -11
  10. package/components/matcha-breadcrumb.scss +6 -7
  11. package/components/matcha-button-toggle.scss +2 -2
  12. package/components/matcha-buttons.scss +34 -34
  13. package/components/matcha-calendar.scss +31 -35
  14. package/components/matcha-cards.scss +31 -32
  15. package/components/matcha-chart-card.scss +5 -12
  16. package/components/matcha-checkbox.scss +13 -13
  17. package/components/matcha-chip.scss +2 -2
  18. package/components/matcha-color-pick.scss +1 -2
  19. package/components/matcha-command-palette.scss +17 -18
  20. package/components/matcha-crop.scss +0 -1
  21. package/components/matcha-date.scss +3 -3
  22. package/components/matcha-draggable.scss +4 -5
  23. package/components/matcha-drawer.scss +18 -28
  24. package/components/matcha-drop-list.scss +51 -52
  25. package/components/matcha-emoji.scss +2 -2
  26. package/components/{matcha-uploader.scss → matcha-file-uploader.scss} +193 -116
  27. package/components/matcha-footer.scss +3 -4
  28. package/components/matcha-form-field.scss +3 -3
  29. package/components/matcha-form-section.scss +5 -6
  30. package/components/matcha-header.scss +3 -4
  31. package/components/matcha-hint-text.scss +4 -4
  32. package/components/matcha-horizontal-tree.scss +15 -16
  33. package/components/matcha-icon.scss +27 -27
  34. package/components/matcha-image.scss +2 -3
  35. package/components/matcha-list.scss +11 -12
  36. package/components/matcha-menu.scss +2 -2
  37. package/components/matcha-modal.scss +5 -6
  38. package/components/matcha-nav.scss +16 -16
  39. package/components/matcha-notification.scss +3 -4
  40. package/components/matcha-option.scss +19 -0
  41. package/components/matcha-page-builder.scss +16 -16
  42. package/components/matcha-paginator.scss +6 -7
  43. package/components/matcha-panel.scss +4 -5
  44. package/components/matcha-profile-card.scss +3 -3
  45. package/components/matcha-progress-bar.scss +1 -1
  46. package/components/matcha-radio.scss +6 -6
  47. package/components/matcha-scrollbar.scss +1 -2
  48. package/components/matcha-scrollbox-shadow.scss +35 -37
  49. package/components/matcha-section.scss +5 -9
  50. package/components/matcha-select-multiple.scss +56 -0
  51. package/components/matcha-select.scss +7 -7
  52. package/components/matcha-skeleton.scss +6 -7
  53. package/components/matcha-slide-toggle.scss +33 -299
  54. package/components/matcha-slider.scss +5 -5
  55. package/components/matcha-snack-bar.scss +17 -18
  56. package/components/matcha-spin.scss +12 -103
  57. package/components/matcha-spinner.scss +1 -1
  58. package/components/matcha-stepper.scss +15 -16
  59. package/components/matcha-table.scss +14 -15
  60. package/components/matcha-tabs.scss +22 -24
  61. package/components/matcha-text-editor.scss +78 -78
  62. package/components/matcha-time.scss +2 -2
  63. package/components/matcha-toolbar.scss +1 -1
  64. package/components/matcha-tooltip.scss +14 -12
  65. package/main.scss +7 -2
  66. package/package.json +1 -1
  67. package/tokens/_color-tokens.scss +0 -3
  68. package/tokens/_css-custom-properties.scss +233 -179
  69. package/tokens/_primitives.scss +82 -0
  70. package/tokens/_semantic-aliases.scss +120 -0
@@ -1,7 +1,7 @@
1
1
  @use "sass:map";
2
2
 
3
3
  // =============================================================================
4
- // matcha-uploader.scss — File upload component (matcha/file-upload no Figma DSV3)
4
+ // matcha-file-uploader.scss — File upload component (matcha/file-uploader no Figma DSV3)
5
5
  //
6
6
  // 3 estados canon (16152:254):
7
7
  // Estado=Dropzone (16152:209) — área vazia com icon pill + title + hint + 2 botões
@@ -11,103 +11,106 @@
11
11
  // Width canon: 480px (component se adapta via max-width: 480px + width: 100%)
12
12
  // =============================================================================
13
13
 
14
- @mixin matcha-uploader-theme($theme) {
15
- $is-dark: map.get($theme, is-dark);
14
+ @mixin matcha-file-uploader-theme($theme) {
16
15
 
17
16
  // ── Dropzone ──
18
- .matcha-uploader-dropzone {
19
- background: var(--matcha-color-surface-background, var(--matcha-color-surface-bg, #{getBackground($theme)}));
20
- border-color: var(--matcha-color-surface-border, #{getGrey($theme)});
17
+ .matcha-file-uploader-dropzone {
18
+ background: var(--matcha-color-surface-background, var(--matcha-color-surface-bg));
19
+ border-color: var(--matcha-color-surface-border);
21
20
 
22
- &.matcha-uploader-dragover {
23
- background: var(--matcha-color-accent-alpha, #{getAccentAlpha($theme)});
24
- border-color: var(--matcha-color-accent, #{getAccent($theme)});
21
+ &.matcha-file-uploader-dragover {
22
+ background: var(--matcha-color-accent-alpha);
23
+ border-color: var(--matcha-color-accent);
25
24
  }
26
25
 
27
- &.matcha-uploader-disabled {
26
+ &.matcha-file-uploader-disabled {
28
27
  opacity: 0.5;
29
28
  cursor: not-allowed;
30
29
  pointer-events: none;
31
30
  }
32
31
  }
33
32
 
34
- .matcha-uploader-dropzone__icon-pill {
33
+ .matcha-file-uploader-dropzone__icon-pill {
35
34
  background: var(--matcha-color-interaction-disabled-bg, #282c34);
36
- color: var(--matcha-color-text-secondary, #{getBlueGrey($theme)});
35
+ color: var(--matcha-color-text-secondary);
37
36
  }
38
37
 
39
- .matcha-uploader-dropzone__title {
40
- color: var(--matcha-color-text-primary, #{getForeground($theme)});
38
+ .matcha-file-uploader-dropzone__title {
39
+ color: var(--matcha-color-text-primary);
41
40
  }
42
41
 
43
- .matcha-uploader-dropzone__optional {
42
+ .matcha-file-uploader-dropzone__optional {
44
43
  color: var(--matcha-color-interaction-disabled-fg, rgba(232, 234, 237, 0.38));
45
44
  }
46
45
 
47
- .matcha-uploader-dropzone__hint {
48
- color: var(--matcha-color-text-secondary, #{getBlueGrey($theme)});
49
- }
50
-
51
- // ── Buttons (dentro do dropzone) ──
52
- .matcha-uploader-btn--accent {
53
- border-color: var(--matcha-color-accent, #{getAccent($theme)});
54
- color: var(--matcha-color-text-primary, #{getForeground($theme)});
55
-
56
- &:hover:not([disabled]) {
57
- background: var(--matcha-color-accent-alpha, #{getAccentAlpha($theme)});
58
- }
59
-
60
- &[disabled] {
61
- opacity: 0.5;
62
- cursor: not-allowed;
63
- }
46
+ .matcha-file-uploader-dropzone__hint {
47
+ color: var(--matcha-color-text-secondary);
64
48
  }
65
49
 
66
50
  // ── File item ──
67
- .matcha-uploader-file {
68
- background: var(--matcha-color-surface-card, #{getSurface($theme)});
69
- border-color: var(--matcha-color-surface-border, #{getGrey($theme)});
51
+ .matcha-file-uploader-file {
52
+ background: var(--matcha-color-surface-card);
53
+ border-color: var(--matcha-color-surface-border);
70
54
  }
71
55
 
72
- .matcha-uploader-file__thumb {
73
- background: var(--matcha-color-elevation-surface-3, var(--matcha-color-surface-card, #{getSurface($theme)}));
74
- color: var(--matcha-color-text-muted, #{getBlueGrey($theme)});
56
+ .matcha-file-uploader-file__thumb {
57
+ background: var(--matcha-color-elevation-surface-3, var(--matcha-color-surface-card));
58
+ color: var(--matcha-color-text-muted);
75
59
  }
76
60
 
77
- .matcha-uploader-file__name {
78
- color: var(--matcha-color-text-primary, #{getForeground($theme)});
61
+ .matcha-file-uploader-file__name {
62
+ color: var(--matcha-color-text-primary);
79
63
  }
80
64
 
81
- .matcha-uploader-file__size {
82
- color: var(--matcha-color-text-secondary, #{getBlueGrey($theme)});
65
+ .matcha-file-uploader-file__size {
66
+ color: var(--matcha-color-text-secondary);
83
67
  }
84
68
 
85
- .matcha-uploader-file__progress {
86
- background: var(--matcha-color-surface-border, #{getGrey($theme)});
69
+ .matcha-file-uploader-file__progress {
70
+ background: var(--matcha-color-surface-border);
87
71
  }
88
72
 
89
- .matcha-uploader-file__progress-fill {
90
- background: var(--matcha-color-accent, #{getAccent($theme)});
73
+ .matcha-file-uploader-file__progress-fill {
74
+ background: var(--matcha-color-accent);
91
75
  }
92
76
 
93
- .matcha-uploader-file__percent {
94
- color: var(--matcha-color-text-secondary, #{getBlueGrey($theme)});
77
+ .matcha-file-uploader-file__percent {
78
+ color: var(--matcha-color-text-secondary);
95
79
  }
96
80
 
97
- .matcha-uploader-file__error-text {
98
- color: var(--matcha-color-danger, #{getDanger($theme)});
81
+ .matcha-file-uploader-file__error-text {
82
+ color: var(--matcha-color-danger);
99
83
  }
100
84
 
101
- .matcha-uploader-file__action {
102
- color: var(--matcha-color-text-secondary, #{getBlueGrey($theme)});
85
+ .matcha-file-uploader-file__action {
86
+ color: var(--matcha-color-text-secondary);
103
87
 
104
88
  &:hover {
105
89
  background: var(--matcha-color-surface-hover, transparent);
106
- color: var(--matcha-color-text-primary, #{getForeground($theme)});
90
+ color: var(--matcha-color-text-primary);
107
91
  }
108
92
 
109
- &.matcha-uploader-file__action--delete:hover {
110
- color: var(--matcha-color-danger, #{getDanger($theme)});
93
+ &.matcha-file-uploader-file__action--delete:hover {
94
+ color: var(--matcha-color-danger);
95
+ }
96
+ }
97
+
98
+ // ── Card layout (preview preenchido) ──
99
+ .matcha-file-uploader-card {
100
+ border-color: var(--matcha-color-surface-border);
101
+ }
102
+
103
+ // contain (logo/transparência): fundo neutro atrás da imagem inteira
104
+ .matcha-file-uploader-card--contain {
105
+ background: var(--matcha-color-surface-card);
106
+ }
107
+
108
+ .matcha-file-uploader-card__action {
109
+ background: var(--matcha-color-surface-card-alpha, var(--matcha-color-surface-card));
110
+ color: var(--matcha-color-text-primary);
111
+
112
+ &:hover {
113
+ background: var(--matcha-color-surface-card);
111
114
  }
112
115
  }
113
116
  }
@@ -117,13 +120,21 @@
117
120
  // ──────────────────────────────────────────────────────────────────────────────
118
121
 
119
122
  // Host — full-width; consumer aplica max-width externamente se quiser cap
120
- .matcha-uploader {
123
+ .matcha-file-uploader {
121
124
  display: block;
122
125
  width: 100%;
123
126
  }
124
127
 
125
- // ── Dropzone (Estado=Dropzone — Figma 16152:209) ─────────────────────────────
126
- .matcha-uploader-dropzone {
128
+ // ── Empty state wrapper (dropzone + ação secundária FORA do drop) ──────────
129
+ .matcha-file-uploader-empty {
130
+ display: flex;
131
+ flex-direction: column;
132
+ gap: var(--matcha-space-150, 12px);
133
+ width: 100%;
134
+ }
135
+
136
+ // ── Dropzone box (Estado=Dropzone — Figma 16152:209) — a zona INTEIRA é o alvo
137
+ .matcha-file-uploader-dropzone {
127
138
  display: flex;
128
139
  flex-direction: column;
129
140
  align-items: center;
@@ -135,10 +146,24 @@
135
146
  cursor: pointer;
136
147
  transition: background-color var(--matcha-duration-instant, 80ms) linear,
137
148
  border-color var(--matcha-duration-instant, 80ms) linear;
149
+
150
+ &:focus-visible {
151
+ outline: var(--matcha-border-thin, 2px) solid var(--matcha-color-accent, #009400);
152
+ outline-offset: 2px;
153
+ }
154
+ }
155
+
156
+ // layout="card": dropzone vazio compartilha a proporção do card preenchido
157
+ // (aspect-ratio aplicado inline via previewRatio) pra empty e filled terem a
158
+ // MESMA altura lado a lado. Sem isso, vazio é dimensionado por padding/conteúdo
159
+ // e preenchido por aspect-ratio → alturas divergentes.
160
+ .matcha-file-uploader-dropzone--card {
161
+ width: 100%;
162
+ overflow: hidden;
138
163
  }
139
164
 
140
165
  // Icon pill (bg interaction/disabled-bg + padding 40h/16v · icon 24×24)
141
- .matcha-uploader-dropzone__icon-pill {
166
+ .matcha-file-uploader-dropzone__icon-pill {
142
167
  display: inline-flex;
143
168
  align-items: center;
144
169
  justify-content: center;
@@ -154,7 +179,7 @@
154
179
  }
155
180
 
156
181
  // Text block — column gap 4px, center
157
- .matcha-uploader-dropzone__text {
182
+ .matcha-file-uploader-dropzone__text {
158
183
  display: flex;
159
184
  flex-direction: column;
160
185
  align-items: center;
@@ -164,7 +189,7 @@
164
189
  }
165
190
 
166
191
  // Title row (inline: title + optional)
167
- .matcha-uploader-dropzone__title-row {
192
+ .matcha-file-uploader-dropzone__title-row {
168
193
  display: inline-flex;
169
194
  align-items: center;
170
195
  justify-content: center;
@@ -172,21 +197,21 @@
172
197
  white-space: nowrap;
173
198
  }
174
199
 
175
- .matcha-uploader-dropzone__title {
200
+ .matcha-file-uploader-dropzone__title {
176
201
  font-family: var(--matcha-font-family);
177
202
  font-size: var(--matcha-text-label-md, 14px);
178
203
  font-weight: var(--matcha-weight-medium, 500);
179
204
  line-height: var(--matcha-leading-label-md, 20px);
180
205
  }
181
206
 
182
- .matcha-uploader-dropzone__optional {
207
+ .matcha-file-uploader-dropzone__optional {
183
208
  font-family: var(--matcha-font-family);
184
209
  font-size: var(--matcha-text-label-md, 14px);
185
210
  font-weight: var(--matcha-weight-medium, 500);
186
211
  line-height: var(--matcha-leading-label-md, 20px);
187
212
  }
188
213
 
189
- .matcha-uploader-dropzone__hint {
214
+ .matcha-file-uploader-dropzone__hint {
190
215
  margin: 0;
191
216
  font-family: var(--matcha-font-family);
192
217
  font-size: var(--matcha-text-body-sm, 12px);
@@ -196,42 +221,13 @@
196
221
  }
197
222
 
198
223
  // Actions row (slot secondary + select arquivo)
199
- .matcha-uploader-dropzone__actions {
200
- display: flex;
201
- gap: var(--matcha-space-100, 8px);
202
- align-items: center;
203
- justify-content: center;
204
- flex-wrap: wrap;
205
- }
206
-
207
- // Botão accent outline (Selecionar arquivo)
208
- .matcha-uploader-btn {
209
- display: inline-flex;
210
- align-items: center;
211
- justify-content: center;
212
- gap: var(--matcha-space-050, 4px);
213
- height: 32px;
214
- padding: 0 var(--matcha-space-100, 8px);
215
- background: transparent;
216
- border: var(--matcha-border-thin, 2px) solid transparent;
217
- border-radius: var(--matcha-radius-lg, 8px);
218
- cursor: pointer;
219
- font-family: var(--matcha-font-family);
220
- font-size: var(--matcha-text-label-sm, 12px);
221
- font-weight: var(--matcha-weight-medium, 500);
222
- line-height: var(--matcha-leading-label-sm, 16px);
223
- letter-spacing: 0.2px;
224
- white-space: nowrap;
225
- transition: background-color var(--matcha-duration-instant, 80ms) linear;
226
- }
227
-
228
224
  // Hidden input
229
- .matcha-uploader-input {
225
+ .matcha-file-uploader-input {
230
226
  display: none;
231
227
  }
232
228
 
233
229
  // ── File Item — Estados Enviando (16152:227) e Completo (16152:242) ──────────
234
- .matcha-uploader-file {
230
+ .matcha-file-uploader-file {
235
231
  display: flex;
236
232
  align-items: center;
237
233
  gap: var(--matcha-space-200, 16px);
@@ -241,19 +237,19 @@
241
237
  width: 100%;
242
238
 
243
239
  // Enviando: padding 20/24 (mais respiro vs. Figma original 16)
244
- &.matcha-uploader-file--uploading {
240
+ &.matcha-file-uploader-file--uploading {
245
241
  padding: var(--matcha-space-250, 20px) var(--matcha-space-300, 24px);
246
242
  }
247
243
 
248
244
  // Completo/Erro: padding 20/24 (mais respiro vs. Figma original 12/16)
249
- &.matcha-uploader-file--completed,
250
- &.matcha-uploader-file--error {
245
+ &.matcha-file-uploader-file--completed,
246
+ &.matcha-file-uploader-file--error {
251
247
  padding: var(--matcha-space-250, 20px) var(--matcha-space-300, 24px);
252
248
  }
253
249
  }
254
250
 
255
251
  // Thumbnail 64×36 (16:9 · radius lg)
256
- .matcha-uploader-file__thumb {
252
+ .matcha-file-uploader-file__thumb {
257
253
  display: flex;
258
254
  align-items: center;
259
255
  justify-content: center;
@@ -277,7 +273,7 @@
277
273
  }
278
274
 
279
275
  // Info column (flex-1)
280
- .matcha-uploader-file__info {
276
+ .matcha-file-uploader-file__info {
281
277
  display: flex;
282
278
  flex-direction: column;
283
279
  flex: 1 1 0;
@@ -285,19 +281,19 @@
285
281
  overflow: hidden;
286
282
 
287
283
  // Enviando: gap 6 (entre nome e progress bar)
288
- .matcha-uploader-file--uploading & {
284
+ .matcha-file-uploader-file--uploading & {
289
285
  gap: var(--matcha-space-075, 6px);
290
286
  }
291
287
 
292
288
  // Completo: gap 4 (entre nome e size)
293
- .matcha-uploader-file--completed &,
294
- .matcha-uploader-file--error & {
289
+ .matcha-file-uploader-file--completed &,
290
+ .matcha-file-uploader-file--error & {
295
291
  gap: var(--matcha-space-050, 4px);
296
292
  }
297
293
  }
298
294
 
299
295
  // File name — Manrope Medium 13/19 letter 0.2 (text/button-sm)
300
- .matcha-uploader-file__name {
296
+ .matcha-file-uploader-file__name {
301
297
  font-family: var(--matcha-font-family);
302
298
  font-size: var(--matcha-text-label-sm, 12px);
303
299
  font-weight: var(--matcha-weight-medium, 500);
@@ -309,7 +305,7 @@
309
305
  }
310
306
 
311
307
  // File size — Manrope Regular 11/14 letter 0.3 (text/caption)
312
- .matcha-uploader-file__size {
308
+ .matcha-file-uploader-file__size {
313
309
  font-family: var(--matcha-font-family);
314
310
  font-size: var(--matcha-text-p-tiny, 11px);
315
311
  font-weight: var(--matcha-weight-regular, 400);
@@ -318,7 +314,7 @@
318
314
  }
319
315
 
320
316
  // Error text — body-sm danger
321
- .matcha-uploader-file__error-text {
317
+ .matcha-file-uploader-file__error-text {
322
318
  font-family: var(--matcha-font-family);
323
319
  font-size: var(--matcha-text-body-sm, 12px);
324
320
  font-weight: var(--matcha-weight-regular, 400);
@@ -326,21 +322,21 @@
326
322
  }
327
323
 
328
324
  // ── Progress bar (height 4px · radius sm) ─────────────────────────────────────
329
- .matcha-uploader-file__progress {
325
+ .matcha-file-uploader-file__progress {
330
326
  width: 100%;
331
327
  height: 4px;
332
328
  border-radius: var(--matcha-radius-sm, 2px);
333
329
  overflow: hidden;
334
330
  }
335
331
 
336
- .matcha-uploader-file__progress-fill {
332
+ .matcha-file-uploader-file__progress-fill {
337
333
  height: 100%;
338
334
  border-radius: var(--matcha-radius-sm, 2px);
339
335
  transition: width var(--matcha-duration-moderate, 300ms) ease;
340
336
  }
341
337
 
342
338
  // Percent label — body-sm text-secondary
343
- .matcha-uploader-file__percent {
339
+ .matcha-file-uploader-file__percent {
344
340
  font-family: var(--matcha-font-family);
345
341
  font-size: var(--matcha-text-body-sm, 12px);
346
342
  font-weight: var(--matcha-weight-regular, 400);
@@ -349,7 +345,7 @@
349
345
  }
350
346
 
351
347
  // Cancel/Delete action button — 20×20 (icon size + bg transparent + hover)
352
- .matcha-uploader-file__action {
348
+ .matcha-file-uploader-file__action {
353
349
  display: inline-flex;
354
350
  align-items: center;
355
351
  justify-content: center;
@@ -371,23 +367,104 @@
371
367
  }
372
368
  }
373
369
 
370
+ // ── Card layout — preview preenchido 16:9 + ações no hover (Estado=Drop filled) ──
371
+ .matcha-file-uploader-card {
372
+ position: relative;
373
+ width: 100%;
374
+ // SEM margin-top: o card preenchido tem que alinhar o topo com o dropzone
375
+ // vazio quando lado a lado (layout card). margin-top desalinhava em 8px.
376
+ border: var(--matcha-border-hairline, 1px) solid transparent;
377
+ border-radius: var(--matcha-radius-lg, 8px);
378
+ overflow: hidden;
379
+ aspect-ratio: 16 / 9; // fallback; sobrescrito por [style.aspect-ratio]="previewRatio"
380
+ }
381
+
382
+ .matcha-file-uploader-card__img {
383
+ display: block;
384
+ width: 100%;
385
+ height: 100%;
386
+ object-fit: cover; // sobrescrito por [style.object-fit]="previewFit"
387
+ }
388
+
389
+ .matcha-file-uploader-card__actions {
390
+ position: absolute;
391
+ top: var(--matcha-space-100, 8px);
392
+ right: var(--matcha-space-100, 8px);
393
+ display: flex;
394
+ gap: var(--matcha-space-100, 8px);
395
+ opacity: 1; // persistente — descobrível e operável em touch (canon 20252:2253)
396
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
397
+ }
398
+
399
+ // Em dispositivos com hover, atenua no resting e destaca no hover/foco — mantém
400
+ // a tela limpa sem esconder a affordance onde não há hover (touch/totem).
401
+ @media (hover: hover) {
402
+ .matcha-file-uploader-card__actions { opacity: 0.72; }
403
+
404
+ .matcha-file-uploader-card:hover .matcha-file-uploader-card__actions,
405
+ .matcha-file-uploader-card:focus-within .matcha-file-uploader-card__actions {
406
+ opacity: 1;
407
+ }
408
+ }
409
+
410
+ .matcha-file-uploader-card__action {
411
+ display: inline-flex;
412
+ align-items: center;
413
+ justify-content: center;
414
+ width: 32px;
415
+ height: 32px;
416
+ padding: 0;
417
+ border: none;
418
+ border-radius: var(--matcha-radius-pill, 9999px);
419
+ cursor: pointer;
420
+ backdrop-filter: blur(8px);
421
+ transition: background-color var(--matcha-duration-instant, 80ms) linear;
422
+
423
+ matcha-icon {
424
+ --matcha-icon-size: 18px;
425
+ width: 18px;
426
+ height: 18px;
427
+ }
428
+ }
429
+
430
+ // ── Cropper inline (modo crop: imagem única) ──────────────────────────────
431
+ .matcha-file-uploader-cropper {
432
+ display: flex;
433
+ flex-direction: column;
434
+ gap: var(--matcha-space-150, 12px);
435
+ margin-top: var(--matcha-space-100, 8px);
436
+ }
437
+
438
+ .matcha-file-uploader-cropper matcha-crop {
439
+ display: block;
440
+ width: 100%;
441
+ min-height: 280px;
442
+ }
443
+
444
+ .matcha-file-uploader-cropper__actions {
445
+ display: flex;
446
+ justify-content: flex-end;
447
+ gap: var(--matcha-space-100, 8px);
448
+ }
449
+
374
450
  // ── Responsive ───────────────────────────────────────────────────────────────
375
451
  @include media-breakpoint('xs') {
376
- .matcha-uploader-dropzone {
452
+ .matcha-file-uploader-dropzone {
377
453
  padding: var(--matcha-space-300, 24px) var(--matcha-space-200, 16px);
378
454
  }
379
455
 
380
- .matcha-uploader-dropzone__icon-pill {
456
+ .matcha-file-uploader-dropzone__icon-pill {
381
457
  padding: var(--matcha-space-150, 12px) var(--matcha-space-400, 32px);
382
458
  }
383
459
  }
384
460
 
385
461
  // ── Reduced motion ───────────────────────────────────────────────────────────
386
462
  @media (prefers-reduced-motion: reduce) {
387
- .matcha-uploader-dropzone,
388
- .matcha-uploader-file__progress-fill,
389
- .matcha-uploader-btn,
390
- .matcha-uploader-file__action {
463
+ .matcha-file-uploader-dropzone,
464
+ .matcha-file-uploader-file__progress-fill,
465
+ .matcha-file-uploader-file__action,
466
+ .matcha-file-uploader-card__actions,
467
+ .matcha-file-uploader-card__action {
391
468
  transition: none;
392
469
  }
393
470
  }
@@ -12,12 +12,11 @@
12
12
  // =============================================================================
13
13
 
14
14
  @mixin matcha-footer-theme($theme) {
15
- $is-dark: map.get($theme, is-dark);
16
15
 
17
16
  .matcha-footer {
18
- background: var(--matcha-color-surface-card, #{getSurface($theme)});
19
- border-top: var(--matcha-border-hairline, 1px) solid var(--matcha-color-surface-border, #{getGrey($theme)});
20
- color: var(--matcha-color-text-label, #{getBlueGrey($theme)});
17
+ background: var(--matcha-color-surface-card);
18
+ border-top: var(--matcha-border-hairline, 1px) solid var(--matcha-color-surface-border);
19
+ color: var(--matcha-color-text-label);
21
20
  }
22
21
  }
23
22
 
@@ -516,16 +516,16 @@ matcha-form-field[readonly="true"] .matcha-form-field {
516
516
  input[type="date"],
517
517
  input[type="time"],
518
518
  textarea {
519
- color: var(--matcha-color-text-primary, #{getForeground($theme)});
519
+ color: var(--matcha-color-text-primary);
520
520
 
521
521
  &::placeholder {
522
- color: var(--matcha-color-text-placeholder, #{getGrey($theme)});
522
+ color: var(--matcha-color-text-placeholder);
523
523
  }
524
524
  }
525
525
 
526
526
  input:disabled,
527
527
  textarea:disabled {
528
- color: var(--matcha-color-interaction-disabled-fg, #{getDisabledContrast($theme)});
528
+ color: var(--matcha-color-interaction-disabled-fg);
529
529
  }
530
530
 
531
531
  // Disabled: muted text, cursor not-allowed (sinalização inequívoca de "não pode interagir").
@@ -9,31 +9,30 @@
9
9
  // =============================================================================
10
10
 
11
11
  @mixin matcha-form-section-theme($theme) {
12
- $is-dark: map.get($theme, is-dark);
13
12
 
14
13
  // ── Section (accent bar + title) ──
15
14
  .matcha-form-section {
16
15
  .matcha-form-section__bar {
17
- background: var(--matcha-color-accent, #{getAccent($theme)});
16
+ background: var(--matcha-color-accent);
18
17
  }
19
18
 
20
19
  .matcha-form-section__title {
21
- color: var(--matcha-color-fg, #{getForeground($theme)});
20
+ color: var(--matcha-color-fg);
22
21
  }
23
22
 
24
23
  .matcha-form-section__description {
25
- color: var(--matcha-color-text-secondary, #{getBlueGrey($theme)});
24
+ color: var(--matcha-color-text-secondary);
26
25
  }
27
26
  }
28
27
 
29
28
  // ── Sub-section (bullet + title) ──
30
29
  .matcha-form-subsection {
31
30
  .matcha-form-subsection__bullet {
32
- background: var(--matcha-color-fg, #{getForeground($theme)});
31
+ background: var(--matcha-color-fg);
33
32
  }
34
33
 
35
34
  .matcha-form-subsection__title {
36
- color: var(--matcha-color-fg, #{getForeground($theme)});
35
+ color: var(--matcha-color-fg);
37
36
  }
38
37
  }
39
38
  }
@@ -11,16 +11,15 @@
11
11
  // =============================================================================
12
12
 
13
13
  @mixin matcha-header-theme($theme) {
14
- $is-dark: map.get($theme, is-dark);
15
14
 
16
15
  matcha-header {
17
- background: var(--matcha-color-surface-card, #{getSurface($theme)});
16
+ background: var(--matcha-color-surface-card);
18
17
  // Border uses interaction/disabled-border (1:1 Figma matcha/header 15892:157):
19
18
  // dark = rgba(232,234,237,0.38); light = #c8d2ca. Semanticamente atípico —
20
19
  // o token canônico de "divisor de chrome" seria surface/border, mas Figma
21
20
  // bind explicitamente este. Trocar de volta se for revertido lá.
22
- border-bottom: var(--matcha-border-hairline, 1px) solid var(--matcha-color-interaction-disabled-border, #{getGrey($theme)});
23
- color: var(--matcha-color-text-primary, #{getForeground($theme)});
21
+ border-bottom: var(--matcha-border-hairline, 1px) solid var(--matcha-color-interaction-disabled-border);
22
+ color: var(--matcha-color-text-primary);
24
23
  }
25
24
  }
26
25
 
@@ -48,19 +48,19 @@
48
48
  @include generate-matcha-hint-size-classes($helper-breakpoints);
49
49
 
50
50
  &[type="error"] {
51
- color: var(--matcha-color-danger, #{getDanger($theme)});
51
+ color: var(--matcha-color-danger);
52
52
  }
53
53
 
54
54
  &[type="warning"] {
55
- color: var(--matcha-color-warn, #{getWarn($theme)});
55
+ color: var(--matcha-color-warn);
56
56
  }
57
57
 
58
58
  &[type="info"] {
59
- color: var(--matcha-color-info, #{getInfo($theme)});
59
+ color: var(--matcha-color-info);
60
60
  }
61
61
 
62
62
  &[type="success"] {
63
- color: var(--matcha-color-success, #{getSuccess($theme)});
63
+ color: var(--matcha-color-success);
64
64
  }
65
65
  }
66
66
  }