@inchurch/matcha-theme 20.0.11 → 20.277.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.
- package/abstracts/_colors.scss +404 -404
- package/abstracts/_elevation.scss +102 -102
- package/abstracts/_functions.scss +1186 -1212
- package/abstracts/_media-breakpoint.scss +23 -23
- package/abstracts/_theme-api.scss +230 -0
- package/abstracts/_typography.scss +127 -127
- package/base/_reset.scss +438 -438
- package/components/app-page-header.scss +259 -0
- package/components/matcha-accordion.scss +293 -157
- package/components/matcha-audio-player.scss +1 -2
- package/components/matcha-autocomplete.scss +10 -11
- package/components/matcha-avatar.scss +173 -33
- package/components/matcha-badge.scss +15 -15
- package/components/matcha-breadcrumb.scss +231 -126
- package/components/matcha-button-toggle.scss +46 -2
- package/components/matcha-buttons.scss +908 -784
- package/components/matcha-calendar.scss +99 -35
- package/components/matcha-cards.scss +58 -33
- package/components/matcha-chart-card.scss +5 -12
- package/components/matcha-checkbox.scss +191 -490
- package/components/matcha-chip.scss +297 -212
- package/components/matcha-color-pick.scss +1 -2
- package/components/matcha-command-palette.scss +290 -63
- package/components/matcha-crop.scss +406 -172
- package/components/matcha-date.scss +81 -81
- package/components/matcha-divider.scss +86 -31
- package/components/matcha-draggable.scss +4 -5
- package/components/matcha-drawer.scss +207 -66
- package/components/matcha-drop-image.scss +14 -0
- package/components/matcha-drop-list.scss +87 -47
- package/components/matcha-emoji.scss +2 -2
- package/components/matcha-empty-state.scss +195 -83
- package/components/matcha-file-uploader.scss +462 -0
- package/components/matcha-flag.scss +93 -52
- package/components/matcha-footer.scss +67 -164
- package/components/matcha-form-field.scss +55 -3
- package/components/matcha-form-section.scss +100 -101
- package/components/matcha-header.scss +134 -325
- package/components/matcha-highlight.scss +65 -197
- package/components/matcha-hint-text.scss +25 -4
- package/components/matcha-horizontal-tree.scss +316 -317
- package/components/matcha-icon.scss +37 -45
- package/components/matcha-image.scss +2 -3
- package/components/matcha-list.scss +14 -15
- package/components/matcha-menu.scss +15 -2
- package/components/matcha-modal.scss +59 -86
- package/components/matcha-nav.scss +362 -231
- package/components/matcha-notification.scss +412 -197
- package/components/matcha-option.scss +98 -23
- package/components/matcha-page-builder.scss +16 -16
- package/components/matcha-paginator.scss +688 -235
- package/components/matcha-panel.scss +42 -27
- package/components/matcha-profile-card.scss +50 -50
- package/components/matcha-progress-bar.scss +257 -153
- package/components/matcha-radio.scss +244 -452
- package/components/matcha-scrollbar.scss +1 -2
- package/components/matcha-scrollbox-shadow.scss +120 -122
- package/components/matcha-section.scss +5 -9
- package/components/matcha-select-multiple.scss +56 -0
- package/components/matcha-select.scss +10 -10
- package/components/matcha-skeleton.scss +24 -7
- package/components/matcha-slide-toggle.scss +80 -301
- package/components/matcha-slider.scss +174 -77
- package/components/matcha-snack-bar.scss +123 -131
- package/components/matcha-spin.scss +12 -103
- package/components/matcha-spinner.scss +76 -57
- package/components/matcha-status-pill.scss +82 -0
- package/components/matcha-stepper.scss +376 -177
- package/components/matcha-table.scss +568 -785
- package/components/matcha-tabs.scss +622 -469
- package/components/matcha-text-editor.scss +78 -78
- package/components/matcha-time.scss +2 -2
- package/components/matcha-toolbar.scss +359 -206
- package/components/matcha-tooltip.scss +158 -62
- package/components/matcha-tree-view.scss +189 -0
- package/fonts/manrope/manrope-latin-ext.woff2 +0 -0
- package/fonts/manrope/manrope-latin.woff2 +0 -0
- package/layout/matcha-page-layout.scss +4 -4
- package/main.scss +237 -265
- package/package.json +1 -1
- package/tokens/_animations-tokens.scss +37 -37
- package/tokens/_breakpoints-tokens.scss +35 -26
- package/tokens/_color-tokens.scss +1149 -1152
- package/tokens/_css-custom-properties.scss +704 -568
- package/tokens/_primitives.scss +82 -0
- package/tokens/_semantic-aliases.scss +120 -0
- package/tokens/_spacing-tokens.scss +94 -94
- package/vendors/angular-editor.scss +56 -56
- package/vendors/angular-material-fixes.scss +297 -297
- package/vendors/charts.scss +92 -92
- package/vendors/ng5-slider.scss +56 -56
- package/vendors/ngx-material-timepicker.scss +50 -50
- package/components/matcha-uploader.scss +0 -215
- package/fonts/CircularStd-Black.eot +0 -0
- package/fonts/CircularStd-Black.svg +0 -3426
- package/fonts/CircularStd-Black.ttf +0 -0
- package/fonts/CircularStd-Black.woff +0 -0
- package/fonts/CircularStd-Black.woff2 +0 -0
- package/fonts/CircularStd-Bold.eot +0 -0
- package/fonts/CircularStd-Bold.otf +0 -0
- package/fonts/CircularStd-Bold.svg +0 -13532
- package/fonts/CircularStd-Bold.ttf +0 -0
- package/fonts/CircularStd-Bold.woff +0 -0
- package/fonts/CircularStd-Bold.woff2 +0 -0
- package/fonts/CircularStd-Medium.eot +0 -0
- package/fonts/CircularStd-Medium.otf +0 -0
- package/fonts/CircularStd-Medium.svg +0 -13511
- package/fonts/CircularStd-Medium.ttf +0 -0
- package/fonts/CircularStd-Medium.woff +0 -0
- package/fonts/CircularStd-Medium.woff2 +0 -0
- package/fonts/CircularStd-Regular.eot +0 -0
- package/fonts/CircularStd-Regular.otf +0 -0
- package/fonts/CircularStd-Regular.svg +0 -2378
- package/fonts/CircularStd-Regular.ttf +0 -0
- package/fonts/CircularStd-Regular.woff +0 -0
- package/fonts/CircularStd-Regular.woff2 +0 -0
|
@@ -16,32 +16,16 @@ $icon-size-md: 24px;
|
|
|
16
16
|
$icon-size-lg: 32px;
|
|
17
17
|
$icon-size-xl: 48px;
|
|
18
18
|
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
// para que o texto filho (ligature) renderize como glyph.
|
|
22
|
-
matcha-icon[library="symbols"] {
|
|
23
|
-
font-family: 'Material Symbols Rounded', sans-serif !important;
|
|
24
|
-
font-weight: normal;
|
|
25
|
-
font-style: normal;
|
|
26
|
-
letter-spacing: normal;
|
|
27
|
-
text-transform: none;
|
|
28
|
-
white-space: nowrap;
|
|
29
|
-
word-wrap: normal;
|
|
30
|
-
direction: ltr;
|
|
31
|
-
-webkit-font-smoothing: antialiased;
|
|
32
|
-
-moz-osx-font-smoothing: grayscale;
|
|
33
|
-
text-rendering: optimizeLegibility;
|
|
34
|
-
font-feature-settings: 'liga' !important;
|
|
35
|
-
overflow: hidden;
|
|
36
|
-
}
|
|
19
|
+
// matcha-icon[library="symbols"] — renderiza SVG inline via figma-icons.ts.
|
|
20
|
+
// Sem dependência de font externa. Apenas tamanho via [size="..."] tokens.
|
|
37
21
|
|
|
38
22
|
[class^="i-matcha-"],
|
|
39
23
|
[class*=" i-matcha-"],
|
|
40
24
|
matcha-icon[library="symbols"] {
|
|
41
|
-
font-size: var(--matcha-icon-size-md
|
|
42
|
-
width: var(--matcha-icon-size-md
|
|
43
|
-
height: var(--matcha-icon-size-md
|
|
44
|
-
line-height: var(--matcha-icon-size-md
|
|
25
|
+
font-size: var(--matcha-icon-size-md);
|
|
26
|
+
width: var(--matcha-icon-size-md);
|
|
27
|
+
height: var(--matcha-icon-size-md);
|
|
28
|
+
line-height: var(--matcha-icon-size-md);
|
|
45
29
|
|
|
46
30
|
&.i-size-xs,
|
|
47
31
|
&[size="xs"] {
|
|
@@ -53,50 +37,58 @@ matcha-icon[library="symbols"] {
|
|
|
53
37
|
|
|
54
38
|
&.i-size-sm,
|
|
55
39
|
&[size="sm"] {
|
|
56
|
-
font-size: var(--matcha-icon-size-sm
|
|
57
|
-
width: var(--matcha-icon-size-sm
|
|
58
|
-
height: var(--matcha-icon-size-sm
|
|
59
|
-
line-height: var(--matcha-icon-size-sm
|
|
40
|
+
font-size: var(--matcha-icon-size-sm);
|
|
41
|
+
width: var(--matcha-icon-size-sm);
|
|
42
|
+
height: var(--matcha-icon-size-sm);
|
|
43
|
+
line-height: var(--matcha-icon-size-sm);
|
|
60
44
|
}
|
|
61
45
|
|
|
62
46
|
&.i-size-md,
|
|
63
47
|
&[size="md"] {
|
|
64
|
-
font-size: var(--matcha-icon-size-md
|
|
65
|
-
width: var(--matcha-icon-size-md
|
|
66
|
-
height: var(--matcha-icon-size-md
|
|
67
|
-
line-height: var(--matcha-icon-size-md
|
|
48
|
+
font-size: var(--matcha-icon-size-md);
|
|
49
|
+
width: var(--matcha-icon-size-md);
|
|
50
|
+
height: var(--matcha-icon-size-md);
|
|
51
|
+
line-height: var(--matcha-icon-size-md);
|
|
68
52
|
}
|
|
69
53
|
|
|
70
54
|
&.i-size-lg,
|
|
71
55
|
&[size="lg"] {
|
|
72
|
-
font-size: var(--matcha-icon-size-lg
|
|
73
|
-
width: var(--matcha-icon-size-lg
|
|
74
|
-
height: var(--matcha-icon-size-lg
|
|
75
|
-
line-height: var(--matcha-icon-size-lg
|
|
56
|
+
font-size: var(--matcha-icon-size-lg);
|
|
57
|
+
width: var(--matcha-icon-size-lg);
|
|
58
|
+
height: var(--matcha-icon-size-lg);
|
|
59
|
+
line-height: var(--matcha-icon-size-lg);
|
|
76
60
|
}
|
|
77
61
|
|
|
78
62
|
&.i-size-xl,
|
|
79
63
|
&[size="xl"] {
|
|
80
|
-
font-size: var(--matcha-icon-size-xl
|
|
81
|
-
width: var(--matcha-icon-size-xl
|
|
82
|
-
height: var(--matcha-icon-size-xl
|
|
83
|
-
line-height: var(--matcha-icon-size-xl
|
|
64
|
+
font-size: var(--matcha-icon-size-xl);
|
|
65
|
+
width: var(--matcha-icon-size-xl);
|
|
66
|
+
height: var(--matcha-icon-size-xl);
|
|
67
|
+
line-height: var(--matcha-icon-size-xl);
|
|
84
68
|
}
|
|
85
69
|
}
|
|
86
70
|
|
|
87
71
|
// ── Theme mixin (color inheritance) ─────────────────────────────────────────
|
|
72
|
+
// Pattern CSS-var: `--matcha-icon-color` resolve a cor final.
|
|
73
|
+
// Cascateia naturalmente — qualquer parent pode override sem specificity battle.
|
|
74
|
+
//
|
|
75
|
+
// <!-- Override no consumer (sem [color] attr): -->
|
|
76
|
+
// .my-banner { --matcha-icon-color: var(--matcha-color-feedback-danger); }
|
|
77
|
+
//
|
|
78
|
+
// <!-- Override no proprio matcha-icon: -->
|
|
79
|
+
// <matcha-icon color="danger" /> // attr seta --matcha-icon-color via SCSS abaixo
|
|
88
80
|
@mixin matcha-icon-theme($theme) {
|
|
89
81
|
matcha-icon,
|
|
90
82
|
[class^="i-matcha-"],
|
|
91
83
|
[class*=" i-matcha-"] {
|
|
92
|
-
color: var(--matcha-color-icon-default
|
|
84
|
+
color: var(--matcha-icon-color, var(--matcha-color-icon-default));
|
|
93
85
|
|
|
94
|
-
&.color-fg, &[color="fg"] { color: var(--matcha-color-fg
|
|
95
|
-
&.color-accent, &[color="accent"] { color: var(--matcha-color-accent
|
|
96
|
-
&.color-primary, &[color="primary"] { color: var(--matcha-color-primary
|
|
97
|
-
&.color-danger, &[color="danger"] { color: var(--matcha-color-danger
|
|
98
|
-
&.color-warn, &[color="warn"] { color: var(--matcha-color-warn
|
|
99
|
-
&.color-success, &[color="success"] { color: var(--matcha-color-success
|
|
86
|
+
&.color-fg, &[color="fg"] { --matcha-icon-color: var(--matcha-color-fg); }
|
|
87
|
+
&.color-accent, &[color="accent"] { --matcha-icon-color: var(--matcha-color-accent); }
|
|
88
|
+
&.color-primary, &[color="primary"] { --matcha-icon-color: var(--matcha-color-primary); }
|
|
89
|
+
&.color-danger, &[color="danger"] { --matcha-icon-color: var(--matcha-color-danger); }
|
|
90
|
+
&.color-warn, &[color="warn"] { --matcha-icon-color: var(--matcha-color-warn); }
|
|
91
|
+
&.color-success, &[color="success"] { --matcha-icon-color: var(--matcha-color-success); }
|
|
100
92
|
|
|
101
93
|
&[disabled],
|
|
102
94
|
&.disabled {
|
|
@@ -8,14 +8,13 @@
|
|
|
8
8
|
// =============================================================================
|
|
9
9
|
|
|
10
10
|
@mixin matcha-image-theme($theme) {
|
|
11
|
-
$is-dark: map.get($theme, is-dark);
|
|
12
11
|
|
|
13
12
|
.matcha-image {
|
|
14
|
-
background: var(--matcha-color-surface
|
|
13
|
+
background: var(--matcha-color-surface);
|
|
15
14
|
}
|
|
16
15
|
|
|
17
16
|
.matcha-image__placeholder-icon {
|
|
18
|
-
color: var(--matcha-color-text-placeholder
|
|
17
|
+
color: var(--matcha-color-text-placeholder);
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
|
|
@@ -39,7 +39,6 @@
|
|
|
39
39
|
// =============================================================================
|
|
40
40
|
|
|
41
41
|
@mixin matcha-list-theme($theme) {
|
|
42
|
-
$is-dark: map.get($theme, is-dark);
|
|
43
42
|
|
|
44
43
|
// ── List container ──
|
|
45
44
|
matcha-list,
|
|
@@ -67,13 +66,13 @@
|
|
|
67
66
|
border-radius: var(--matcha-radius-md, 4px);
|
|
68
67
|
cursor: pointer;
|
|
69
68
|
outline: none;
|
|
70
|
-
color: var(--matcha-
|
|
69
|
+
color: var(--matcha-list-item-text, var(--matcha-color-fg));
|
|
71
70
|
text-decoration: none;
|
|
72
71
|
transition: background-color 150ms;
|
|
73
72
|
|
|
74
73
|
// Focus ring
|
|
75
74
|
&:focus-visible {
|
|
76
|
-
outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent
|
|
75
|
+
outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
|
|
77
76
|
outline-offset: var(--matcha-state-focus-ring-offset, 2px);
|
|
78
77
|
}
|
|
79
78
|
|
|
@@ -87,15 +86,15 @@
|
|
|
87
86
|
|
|
88
87
|
// Active/Selected
|
|
89
88
|
&.matcha-list-item--active {
|
|
90
|
-
background-color: var(--matcha-color-accent-surface,
|
|
89
|
+
background-color: var(--matcha-color-accent-surface, var(--matcha-color-accent-alpha));
|
|
91
90
|
|
|
92
91
|
.matcha-list-item__label {
|
|
93
|
-
color: var(--matcha-color-accent
|
|
92
|
+
color: var(--matcha-color-accent);
|
|
94
93
|
font-weight: 600;
|
|
95
94
|
}
|
|
96
95
|
|
|
97
96
|
.matcha-list-item__leading {
|
|
98
|
-
color: var(--matcha-color-accent
|
|
97
|
+
color: var(--matcha-color-accent);
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
100
|
}
|
|
@@ -115,7 +114,7 @@
|
|
|
115
114
|
display: flex;
|
|
116
115
|
align-items: center;
|
|
117
116
|
justify-content: center;
|
|
118
|
-
color: var(--matcha-color-hint,
|
|
117
|
+
color: var(--matcha-color-hint, var(--matcha-color-text-muted));
|
|
119
118
|
}
|
|
120
119
|
|
|
121
120
|
// ── Text area (label + description) ──
|
|
@@ -131,7 +130,7 @@
|
|
|
131
130
|
font-size: var(--matcha-text-body-md, 14px);
|
|
132
131
|
font-weight: var(--matcha-weight-regular, 400);
|
|
133
132
|
line-height: var(--matcha-leading-body-md, 20px);
|
|
134
|
-
color: var(--matcha-
|
|
133
|
+
color: var(--matcha-list-item-text, var(--matcha-color-fg));
|
|
135
134
|
overflow: hidden;
|
|
136
135
|
text-overflow: ellipsis;
|
|
137
136
|
white-space: nowrap;
|
|
@@ -141,7 +140,7 @@
|
|
|
141
140
|
font-size: var(--matcha-text-body-sm, 12px);
|
|
142
141
|
font-weight: var(--matcha-weight-regular, 400);
|
|
143
142
|
line-height: var(--matcha-leading-body-sm, 16px);
|
|
144
|
-
color: var(--matcha-color-hint,
|
|
143
|
+
color: var(--matcha-color-hint, var(--matcha-color-text-muted));
|
|
145
144
|
overflow: hidden;
|
|
146
145
|
text-overflow: ellipsis;
|
|
147
146
|
white-space: nowrap;
|
|
@@ -153,14 +152,14 @@
|
|
|
153
152
|
display: flex;
|
|
154
153
|
align-items: center;
|
|
155
154
|
gap: var(--matcha-space-100, 8px);
|
|
156
|
-
color: var(--matcha-color-hint,
|
|
155
|
+
color: var(--matcha-color-hint, var(--matcha-color-text-muted));
|
|
157
156
|
}
|
|
158
157
|
|
|
159
158
|
// ── Divider between items ──
|
|
160
159
|
.matcha-list-divider {
|
|
161
160
|
height: var(--matcha-border-hairline, 1px);
|
|
162
161
|
margin: var(--matcha-space-050, 4px) var(--matcha-space-200, 16px);
|
|
163
|
-
background-color: var(--matcha-color-border
|
|
162
|
+
background-color: var(--matcha-color-border);
|
|
164
163
|
opacity: var(--matcha-opacity-subtle, 0.10);
|
|
165
164
|
}
|
|
166
165
|
|
|
@@ -169,12 +168,12 @@
|
|
|
169
168
|
display: flex;
|
|
170
169
|
align-items: center;
|
|
171
170
|
padding: var(--matcha-space-200, 16px) var(--matcha-space-200, 16px) var(--matcha-space-075, 6px);
|
|
172
|
-
font-size: var(--matcha-text-
|
|
171
|
+
font-size: var(--matcha-text-p-tiny, 11px);
|
|
173
172
|
font-weight: var(--matcha-weight-medium, 500);
|
|
174
|
-
line-height: var(--matcha-leading-
|
|
173
|
+
line-height: var(--matcha-leading-p-tiny, 14px);
|
|
175
174
|
letter-spacing: var(--matcha-letter-spacing-wide, 0.5px);
|
|
176
175
|
text-transform: uppercase;
|
|
177
|
-
color: var(--matcha-color-hint,
|
|
176
|
+
color: var(--matcha-color-hint, var(--matcha-color-text-muted));
|
|
178
177
|
}
|
|
179
178
|
|
|
180
179
|
// ── 2-line variant (with description) ──
|
|
@@ -193,7 +192,7 @@
|
|
|
193
192
|
padding: var(--matcha-space-050, 4px) var(--matcha-space-200, 16px);
|
|
194
193
|
|
|
195
194
|
.matcha-list-item__label {
|
|
196
|
-
font-size: var(--matcha-text-
|
|
195
|
+
font-size: var(--matcha-text-label-sm, 13px);
|
|
197
196
|
}
|
|
198
197
|
}
|
|
199
198
|
}
|
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
// matcha-menu.scss — Dropdown context menu (modernized)
|
|
3
3
|
// =============================================================================
|
|
4
4
|
|
|
5
|
+
// matcha-menu é overlay-only: o host nunca deve ocupar espaço no fluxo.
|
|
6
|
+
// display:contents tira o host (e o matcha-panel interno) do layout sem
|
|
7
|
+
// afetar a popover — o overlay interno usa position:fixed/absolute. Sem isso,
|
|
8
|
+
// quando o menu é filho direto de um container flex/grid com `gap` (ex.:
|
|
9
|
+
// page-layout `.center.gap-outside` com gap 24px), o host vazio de altura ~0
|
|
10
|
+
// vira um flex item que consome `gap` dos DOIS lados → "phantom gap" duplo
|
|
11
|
+
// entre o elemento anterior e o seguinte. O matcha-toolbar já fazia isso
|
|
12
|
+
// scoped (`> matcha-menu`); aqui generaliza pra qualquer container.
|
|
13
|
+
matcha-menu,
|
|
14
|
+
matcha-menu > matcha-panel {
|
|
15
|
+
display: contents;
|
|
16
|
+
}
|
|
17
|
+
|
|
5
18
|
.matcha-menu-content {
|
|
6
19
|
button,
|
|
7
20
|
[matcha-button] {
|
|
@@ -47,7 +60,7 @@
|
|
|
47
60
|
font-weight: var(--matcha-weight-medium, 500);
|
|
48
61
|
|
|
49
62
|
&:focus-visible:not([disabled]) {
|
|
50
|
-
outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent
|
|
63
|
+
outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
|
|
51
64
|
outline-offset: var(--matcha-state-focus-ring-offset, 2px);
|
|
52
65
|
}
|
|
53
66
|
|
|
@@ -69,7 +82,7 @@
|
|
|
69
82
|
transform: translateY(-50%);
|
|
70
83
|
width: 0;
|
|
71
84
|
height: 0;
|
|
72
|
-
border-left: calc(var(--matcha-border-medium, 4px) + var(--matcha-border-hairline, 1px)) solid var(--matcha-color-hint,
|
|
85
|
+
border-left: calc(var(--matcha-border-medium, 4px) + var(--matcha-border-hairline, 1px)) solid var(--matcha-color-hint, var(--matcha-color-text-muted));
|
|
73
86
|
border-top: var(--matcha-border-medium, 4px) solid transparent;
|
|
74
87
|
border-bottom: var(--matcha-border-medium, 4px) solid transparent;
|
|
75
88
|
opacity: var(--matcha-opacity-secondary, 0.54);
|
|
@@ -69,26 +69,17 @@
|
|
|
69
69
|
to { opacity: 0; }
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
// Enter: scale 0.96 + translate -4 + fade (Material 3 emphasized motion).
|
|
73
|
+
// Mais sutil que 0.95/-8 — menos jumpy, mais "presença suave".
|
|
72
74
|
@keyframes matcha-modal-in {
|
|
73
|
-
from {
|
|
74
|
-
|
|
75
|
-
transform: scale(0.95) translateY(-8px);
|
|
76
|
-
}
|
|
77
|
-
to {
|
|
78
|
-
opacity: 1;
|
|
79
|
-
transform: scale(1) translateY(0);
|
|
80
|
-
}
|
|
75
|
+
from { opacity: 0; transform: scale(0.96) translateY(-4px); }
|
|
76
|
+
to { opacity: 1; transform: scale(1) translateY(0); }
|
|
81
77
|
}
|
|
82
78
|
|
|
79
|
+
// Exit: assimétrico — sai mais rápido que entra (180ms vs 200ms).
|
|
83
80
|
@keyframes matcha-modal-out {
|
|
84
|
-
from {
|
|
85
|
-
|
|
86
|
-
transform: scale(1) translateY(0);
|
|
87
|
-
}
|
|
88
|
-
to {
|
|
89
|
-
opacity: 0;
|
|
90
|
-
transform: scale(0.97) translateY(4px);
|
|
91
|
-
}
|
|
81
|
+
from { opacity: 1; transform: scale(1) translateY(0); }
|
|
82
|
+
to { opacity: 0; transform: scale(0.96) translateY(-4px); }
|
|
92
83
|
}
|
|
93
84
|
|
|
94
85
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -105,7 +96,6 @@
|
|
|
105
96
|
// =============================================================================
|
|
106
97
|
|
|
107
98
|
@mixin matcha-modal-theme($theme) {
|
|
108
|
-
$is-dark: map.get($theme, is-dark);
|
|
109
99
|
|
|
110
100
|
// ── Host element ──
|
|
111
101
|
matcha-modal {
|
|
@@ -118,10 +108,10 @@
|
|
|
118
108
|
|
|
119
109
|
@include generate-matcha-modal-sizes-classes($helper-breakpoints);
|
|
120
110
|
|
|
121
|
-
// Exit animation
|
|
111
|
+
// Exit animation (added by service before destroy) — accelerated 180ms.
|
|
122
112
|
&.matcha-modal--closing {
|
|
123
113
|
.matcha-modal {
|
|
124
|
-
animation: matcha-modal-out
|
|
114
|
+
animation: matcha-modal-out 180ms var(--matcha-easing-accelerated, cubic-bezier(0.4, 0, 1, 1)) forwards;
|
|
125
115
|
}
|
|
126
116
|
}
|
|
127
117
|
}
|
|
@@ -142,93 +132,76 @@
|
|
|
142
132
|
}
|
|
143
133
|
}
|
|
144
134
|
|
|
145
|
-
// ── Modal card ──
|
|
135
|
+
// ── Modal card (Figma DSV3 1:1) ──
|
|
136
|
+
// bg surface/card · radius 16 · shadow 8r@4y + 32r@12y · sem border.
|
|
146
137
|
.matcha-modal {
|
|
147
138
|
position: relative;
|
|
148
139
|
z-index: 999;
|
|
149
140
|
display: flex;
|
|
150
141
|
flex-direction: column;
|
|
142
|
+
// Perf: contain layout/paint pra browser não recalcular reflow da page atrás.
|
|
143
|
+
contain: layout paint;
|
|
151
144
|
border-radius: var(--matcha-radius-xl, 16px);
|
|
152
|
-
|
|
153
|
-
|
|
145
|
+
// Floating overlay sobre scrim — usa surface-card-strong (pure white
|
|
146
|
+
// no light, lifted dark) pra máximo destaque. Cards inline usam o card
|
|
147
|
+
// soft default (#f8faf8) mas modal precisa pop.
|
|
148
|
+
background-color: var(--matcha-color-surface-card-strong, var(--matcha-color-surface-card));
|
|
149
|
+
color: var(--matcha-color-fg);
|
|
154
150
|
overflow: hidden;
|
|
155
|
-
animation: matcha-modal-in var(--matcha-duration-
|
|
156
|
-
|
|
157
|
-
// Shadow level 3 (modals, drawers)
|
|
158
|
-
box-shadow: var(--matcha-shadow-3, #{if($is-dark, $shadow-3-dark, $shadow-3-light)});
|
|
151
|
+
animation: matcha-modal-in var(--matcha-duration-fast, 200ms) var(--matcha-easing-emphasized, cubic-bezier(0.2, 0, 0, 1));
|
|
159
152
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
153
|
+
// Figma DSV3 1:1: 0 4px 8px rgba(0,0,0,0.06), 0 12px 32px rgba(0,0,0,0.12)
|
|
154
|
+
box-shadow:
|
|
155
|
+
0 4px 8px rgba(0, 0, 0, 0.06),
|
|
156
|
+
0 12px 32px rgba(0, 0, 0, 0.12);
|
|
163
157
|
}
|
|
164
158
|
|
|
165
|
-
// ──
|
|
166
|
-
.matcha-modal
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
gap: var(--matcha-space-150, 12px);
|
|
171
|
-
padding: var(--matcha-space-200, 16px) var(--matcha-space-300, 24px);
|
|
172
|
-
flex-shrink: 0;
|
|
173
|
-
|
|
174
|
-
// Figma matcha/modal title: 20/800/28 (title-xl ExtraBold)
|
|
175
|
-
.matcha-modal-header__title {
|
|
176
|
-
flex: 1;
|
|
177
|
-
font-size: var(--matcha-text-title-xl, 20px);
|
|
178
|
-
font-weight: var(--matcha-weight-extrabold, 800);
|
|
179
|
-
line-height: var(--matcha-leading-title-xl, 28px);
|
|
180
|
-
color: var(--matcha-color-fg, #{getForeground($theme)});
|
|
181
|
-
}
|
|
159
|
+
// ── Section coloring (layout vive nos component SCSS — single source of truth) ──
|
|
160
|
+
// Theme só pinta: bg dos slots herda surface-card-strong do parent .matcha-modal,
|
|
161
|
+
// texto pega text-primary, dividers usam surface-border.
|
|
162
|
+
.matcha-modal-header__title {
|
|
163
|
+
color: var(--matcha-color-text-primary);
|
|
182
164
|
}
|
|
183
165
|
|
|
184
|
-
// ── Content ──
|
|
185
166
|
.matcha-modal-content {
|
|
186
|
-
|
|
187
|
-
overflow-y: auto;
|
|
188
|
-
overflow-x: hidden;
|
|
189
|
-
padding: var(--matcha-space-300, 24px);
|
|
190
|
-
max-height: calc(100vh - 300px);
|
|
191
|
-
color: var(--matcha-color-fg, #{getForeground($theme)});
|
|
192
|
-
|
|
193
|
-
// Smooth content resize
|
|
194
|
-
transition: max-height var(--matcha-duration-normal, 200ms) ease;
|
|
167
|
+
color: var(--matcha-color-text-primary);
|
|
195
168
|
}
|
|
196
169
|
|
|
197
|
-
// ──
|
|
198
|
-
.matcha-modal-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
justify-content: flex-end;
|
|
202
|
-
gap: var(--matcha-space-150, 12px);
|
|
203
|
-
padding: var(--matcha-space-200, 16px) var(--matcha-space-300, 24px);
|
|
204
|
-
flex-shrink: 0;
|
|
205
|
-
|
|
206
|
-
// Mobile: stack buttons vertically
|
|
207
|
-
@media (max-width: 575px) {
|
|
208
|
-
flex-direction: column-reverse;
|
|
209
|
-
|
|
210
|
-
.matcha-button {
|
|
211
|
-
width: 100%;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
170
|
+
// ── Focus ring on modal ──
|
|
171
|
+
.matcha-modal:focus-visible {
|
|
172
|
+
outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
|
|
173
|
+
outline-offset: var(--matcha-state-focus-ring-offset, 2px);
|
|
214
174
|
}
|
|
175
|
+
}
|
|
215
176
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
177
|
+
// ── Forced colors (Windows High Contrast) ──
|
|
178
|
+
// rgba/border hairline pode sumir; CanvasText/Canvas são system tokens visíveis.
|
|
179
|
+
@media (forced-colors: active) {
|
|
180
|
+
.matcha-modal {
|
|
181
|
+
border: 1px solid CanvasText;
|
|
182
|
+
background-color: Canvas !important;
|
|
220
183
|
}
|
|
184
|
+
.matcha-modal-backdrop {
|
|
185
|
+
background: rgba(0, 0, 0, 0.7) !important;
|
|
186
|
+
backdrop-filter: none !important;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
221
189
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
190
|
+
// ── Reduced transparency (acessibilidade visual) ──
|
|
191
|
+
// Usuários com dificuldade de ler texto sobre blur preferem solid bg.
|
|
192
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
193
|
+
.matcha-modal-backdrop {
|
|
194
|
+
background: rgba(0, 0, 0, 0.85) !important;
|
|
195
|
+
backdrop-filter: none !important;
|
|
227
196
|
}
|
|
197
|
+
}
|
|
228
198
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
199
|
+
// ── Print ──
|
|
200
|
+
// Convenção DSV3: chrome flutuante (modal/drawer/tooltip) some em impressão.
|
|
201
|
+
@media print {
|
|
202
|
+
.matcha-overlay-container,
|
|
203
|
+
.matcha-modal-backdrop,
|
|
204
|
+
matcha-modal {
|
|
205
|
+
display: none !important;
|
|
233
206
|
}
|
|
234
207
|
}
|