@inchurch/matcha-theme 21.3.3 → 22.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/abstracts/_colors.scss +236 -229
  2. package/abstracts/_elevation.scss +108 -108
  3. package/abstracts/_functions.scss +321 -321
  4. package/abstracts/_media-breakpoint.scss +26 -26
  5. package/abstracts/_theme-api.scss +219 -219
  6. package/abstracts/_typography.scss +128 -128
  7. package/base/_reset.scss +445 -432
  8. package/components/app-page-header.scss +260 -260
  9. package/components/matcha-accordion.scss +293 -293
  10. package/components/matcha-audio-player.scss +31 -31
  11. package/components/matcha-autocomplete.scss +145 -145
  12. package/components/matcha-avatar.scss +440 -301
  13. package/components/matcha-badge.scss +120 -120
  14. package/components/matcha-breadcrumb.scss +231 -231
  15. package/components/matcha-button-toggle.scss +384 -384
  16. package/components/matcha-buttons.scss +913 -913
  17. package/components/matcha-calendar.scss +218 -218
  18. package/components/matcha-cards.scss +230 -230
  19. package/components/matcha-chart-card.scss +53 -53
  20. package/components/matcha-checkbox.scss +255 -255
  21. package/components/matcha-chip.scss +292 -292
  22. package/components/matcha-color-pick.scss +34 -34
  23. package/components/matcha-command-palette.scss +316 -316
  24. package/components/matcha-crop.scss +406 -406
  25. package/components/matcha-date.scss +81 -81
  26. package/components/matcha-divider.scss +100 -100
  27. package/components/matcha-draggable.scss +23 -23
  28. package/components/matcha-drawer.scss +376 -376
  29. package/components/matcha-drop-image.scss +14 -14
  30. package/components/matcha-drop-list.scss +430 -430
  31. package/components/matcha-emoji.scss +69 -69
  32. package/components/matcha-empty-state.scss +230 -230
  33. package/components/matcha-file-uploader.scss +471 -471
  34. package/components/matcha-flag.scss +103 -103
  35. package/components/matcha-footer.scss +91 -91
  36. package/components/matcha-form-field.scss +606 -606
  37. package/components/matcha-form-section.scss +100 -100
  38. package/components/matcha-header.scss +135 -135
  39. package/components/matcha-highlight.scss +164 -164
  40. package/components/matcha-hint-text.scss +90 -90
  41. package/components/matcha-horizontal-tree.scss +316 -316
  42. package/components/matcha-icon.scss +98 -98
  43. package/components/matcha-image.scss +61 -61
  44. package/components/matcha-list.scss +211 -211
  45. package/components/matcha-menu.scss +99 -99
  46. package/components/matcha-modal.scss +210 -210
  47. package/components/matcha-nav.scss +581 -581
  48. package/components/matcha-notification.scss +413 -413
  49. package/components/matcha-option.scss +170 -170
  50. package/components/matcha-page-builder.scss +4196 -4196
  51. package/components/matcha-paginator.scss +689 -689
  52. package/components/matcha-panel.scss +194 -194
  53. package/components/matcha-profile-card.scss +50 -50
  54. package/components/matcha-progress-bar.scss +313 -313
  55. package/components/matcha-radio.scss +320 -320
  56. package/components/matcha-ripple.scss +7 -7
  57. package/components/matcha-scrollbar.scss +33 -33
  58. package/components/matcha-scrollbox-shadow.scss +120 -120
  59. package/components/matcha-section.scss +102 -102
  60. package/components/matcha-select-multiple.scss +56 -56
  61. package/components/matcha-select.scss +667 -667
  62. package/components/matcha-skeleton.scss +155 -155
  63. package/components/matcha-slide-toggle.scss +369 -369
  64. package/components/matcha-slider.scss +285 -285
  65. package/components/matcha-snack-bar.scss +259 -259
  66. package/components/matcha-spin.scss +164 -164
  67. package/components/matcha-spinner.scss +97 -97
  68. package/components/matcha-status-pill.scss +38 -18
  69. package/components/matcha-stepper.scss +376 -376
  70. package/components/matcha-table-cell.scss +74 -41
  71. package/components/matcha-table.scss +579 -578
  72. package/components/matcha-tabs.scss +600 -600
  73. package/components/matcha-text-editor.scss +105 -105
  74. package/components/matcha-time.scss +33 -33
  75. package/components/matcha-timepicker.scss +13 -13
  76. package/components/matcha-toolbar.scss +359 -359
  77. package/components/matcha-tooltip.scss +224 -224
  78. package/components/matcha-tree-view.scss +257 -212
  79. package/layout/matcha-page-layout.scss +778 -778
  80. package/main.scss +329 -329
  81. package/package.json +1 -1
  82. package/tokens/_animations-tokens.scss +37 -37
  83. package/tokens/_breakpoints-tokens.scss +35 -35
  84. package/tokens/_color-tokens.scss +274 -261
  85. package/tokens/_elevation-tokens.scss +33 -33
  86. package/tokens/_emit-tokens.scss +324 -324
  87. package/tokens/_material-palette.scss +1149 -1149
  88. package/tokens/_primitives.scss +98 -98
  89. package/tokens/_semantic-aliases.scss +120 -120
  90. package/tokens/_spacing-tokens.scss +94 -94
  91. package/tokens/_static-tokens.scss +137 -137
  92. package/tokens/_typography-tokens.scss +65 -65
  93. package/vendors/charts.scss +90 -90
@@ -1,211 +1,211 @@
1
- @use "sass:map";
2
-
3
- // =============================================================================
4
- // matcha-list.scss — List & List Item (navigation, settings, content lists)
5
- // =============================================================================
6
-
7
- // ── State layer ─────────────────────────────────────────────────────────────
8
-
9
- .matcha-list-item {
10
- position: relative;
11
- overflow: hidden;
12
-
13
- &::before {
14
- content: '';
15
- position: absolute;
16
- inset: 0;
17
- background: currentColor;
18
- opacity: 0;
19
- border-radius: inherit;
20
- pointer-events: none;
21
- transition: opacity var(--matcha-duration-instant, 80ms) linear;
22
- }
23
-
24
- &:hover:not(.matcha-list-item--disabled)::before {
25
- opacity: var(--matcha-state-hover, 0.08);
26
- }
27
-
28
- &:active:not(.matcha-list-item--disabled)::before {
29
- opacity: var(--matcha-state-active, 0.12);
30
- }
31
-
32
- @media (prefers-reduced-motion: reduce) {
33
- &::before { transition: none; }
34
- }
35
- }
36
-
37
- // =============================================================================
38
- // Theme mixin
39
- // =============================================================================
40
-
41
- @mixin matcha-list-theme($theme) {
42
-
43
- // ── List container ──
44
- matcha-list,
45
- matcha-nav-list {
46
- display: block;
47
- padding: var(--matcha-space-100, 8px) 0;
48
-
49
- &.matcha-list-dense {
50
- matcha-list-item,
51
- .matcha-list-item {
52
- min-height: 36px;
53
- }
54
- }
55
- }
56
-
57
- // ── List item ──
58
- matcha-list-item,
59
- a[matcha-list-item],
60
- button[matcha-list-item],
61
- .matcha-list-item {
62
- display: flex;
63
- align-items: center;
64
- min-height: 48px;
65
- padding: var(--matcha-space-100, 8px) var(--matcha-space-200, 16px);
66
- border-radius: var(--matcha-radius-md, 4px);
67
- cursor: pointer;
68
- outline: none;
69
- color: var(--matcha-list-item-text, var(--matcha-color-fg));
70
- text-decoration: none;
71
- transition: background-color 150ms;
72
-
73
- // Focus ring
74
- &:focus-visible {
75
- outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
76
- outline-offset: var(--matcha-state-focus-ring-offset, 2px);
77
- }
78
-
79
- // Disabled
80
- &.matcha-list-item--disabled,
81
- &.matcha-list-item-disabled {
82
- opacity: var(--matcha-opacity-disabled, 0.38);
83
- pointer-events: none;
84
- cursor: default;
85
- }
86
-
87
- // Active/Selected
88
- &.matcha-list-item--active {
89
- background-color: var(--matcha-color-accent-surface, var(--matcha-color-accent-alpha));
90
-
91
- .matcha-list-item__label {
92
- color: var(--matcha-color-accent);
93
- font-weight: 600;
94
- }
95
-
96
- .matcha-list-item__leading {
97
- color: var(--matcha-color-accent);
98
- }
99
- }
100
- }
101
-
102
- // ── Item content layout ──
103
- .matcha-list-item-content,
104
- .matcha-list-item__content {
105
- display: flex;
106
- align-items: center;
107
- width: 100%;
108
- gap: var(--matcha-space-150, 12px);
109
- }
110
-
111
- // ── Leading (icon, avatar) ──
112
- .matcha-list-item__leading {
113
- flex-shrink: 0;
114
- display: flex;
115
- align-items: center;
116
- justify-content: center;
117
- color: var(--matcha-color-hint, var(--matcha-color-text-muted));
118
- }
119
-
120
- // ── Text area (label + description) ──
121
- .matcha-list-item__text {
122
- flex: 1;
123
- min-width: 0;
124
- display: flex;
125
- flex-direction: column;
126
- gap: var(--matcha-space-025, 2px);
127
- }
128
-
129
- .matcha-list-item__label {
130
- font-size: var(--matcha-text-body-md, 14px);
131
- font-weight: var(--matcha-weight-regular, 400);
132
- line-height: var(--matcha-leading-body-md, 20px);
133
- color: var(--matcha-list-item-text, var(--matcha-color-fg));
134
- overflow: hidden;
135
- text-overflow: ellipsis;
136
- white-space: nowrap;
137
- }
138
-
139
- .matcha-list-item__description {
140
- font-size: var(--matcha-text-body-sm, 12px);
141
- font-weight: var(--matcha-weight-regular, 400);
142
- line-height: var(--matcha-leading-body-sm, 16px);
143
- color: var(--matcha-color-hint, var(--matcha-color-text-muted));
144
- overflow: hidden;
145
- text-overflow: ellipsis;
146
- white-space: nowrap;
147
- }
148
-
149
- // ── Trailing (chevron, badge, switch, meta) ──
150
- .matcha-list-item__trailing {
151
- flex-shrink: 0;
152
- display: flex;
153
- align-items: center;
154
- gap: var(--matcha-space-100, 8px);
155
- color: var(--matcha-color-hint, var(--matcha-color-text-muted));
156
- }
157
-
158
- // ── Divider between items ──
159
- .matcha-list-divider {
160
- height: var(--matcha-border-hairline, 1px);
161
- margin: var(--matcha-space-050, 4px) var(--matcha-space-200, 16px);
162
- background-color: var(--matcha-color-border);
163
- opacity: var(--matcha-opacity-subtle, 0.10);
164
- }
165
-
166
- // ── Section header ──
167
- .matcha-list-subheader {
168
- display: flex;
169
- align-items: center;
170
- padding: var(--matcha-space-200, 16px) var(--matcha-space-200, 16px) var(--matcha-space-075, 6px);
171
- font-size: var(--matcha-text-p-tiny, 11px);
172
- font-weight: var(--matcha-weight-medium, 500);
173
- line-height: var(--matcha-leading-p-tiny, 14px);
174
- letter-spacing: var(--matcha-letter-spacing-wide, 0.5px);
175
- text-transform: uppercase;
176
- color: var(--matcha-color-hint, var(--matcha-color-text-muted));
177
- }
178
-
179
- // ── 2-line variant (with description) ──
180
- .matcha-list-item--two-line,
181
- matcha-list-item.matcha-list-item--two-line {
182
- min-height: 64px;
183
- padding-top: var(--matcha-space-150, 12px);
184
- padding-bottom: var(--matcha-space-150, 12px);
185
- }
186
-
187
- // ── Dense variant ──
188
- .matcha-list--dense {
189
- matcha-list-item,
190
- .matcha-list-item {
191
- min-height: 36px;
192
- padding: var(--matcha-space-050, 4px) var(--matcha-space-200, 16px);
193
-
194
- .matcha-list-item__label {
195
- font-size: var(--matcha-text-label-sm, 13px);
196
- }
197
- }
198
- }
199
-
200
- // ── Inset (leading space without icon) ──
201
- .matcha-list-item--inset {
202
- padding-left: calc(var(--matcha-space-200, 16px) + 36px);
203
- }
204
-
205
- @media (prefers-reduced-motion: reduce) {
206
- matcha-list-item,
207
- .matcha-list-item {
208
- transition: none;
209
- }
210
- }
211
- }
1
+ @use "sass:map";
2
+
3
+ // =============================================================================
4
+ // matcha-list.scss — List & List Item (navigation, settings, content lists)
5
+ // =============================================================================
6
+
7
+ // ── State layer ─────────────────────────────────────────────────────────────
8
+
9
+ .matcha-list-item {
10
+ position: relative;
11
+ overflow: hidden;
12
+
13
+ &::before {
14
+ content: '';
15
+ position: absolute;
16
+ inset: 0;
17
+ background: currentColor;
18
+ opacity: 0;
19
+ border-radius: inherit;
20
+ pointer-events: none;
21
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
22
+ }
23
+
24
+ &:hover:not(.matcha-list-item--disabled)::before {
25
+ opacity: var(--matcha-state-hover, 0.08);
26
+ }
27
+
28
+ &:active:not(.matcha-list-item--disabled)::before {
29
+ opacity: var(--matcha-state-active, 0.12);
30
+ }
31
+
32
+ @media (prefers-reduced-motion: reduce) {
33
+ &::before { transition: none; }
34
+ }
35
+ }
36
+
37
+ // =============================================================================
38
+ // Theme mixin
39
+ // =============================================================================
40
+
41
+ @mixin matcha-list-theme($theme) {
42
+
43
+ // ── List container ──
44
+ matcha-list,
45
+ matcha-nav-list {
46
+ display: block;
47
+ padding: var(--matcha-space-100, 8px) 0;
48
+
49
+ &.matcha-list-dense {
50
+ matcha-list-item,
51
+ .matcha-list-item {
52
+ min-height: 36px;
53
+ }
54
+ }
55
+ }
56
+
57
+ // ── List item ──
58
+ matcha-list-item,
59
+ a[matcha-list-item],
60
+ button[matcha-list-item],
61
+ .matcha-list-item {
62
+ display: flex;
63
+ align-items: center;
64
+ min-height: 48px;
65
+ padding: var(--matcha-space-100, 8px) var(--matcha-space-200, 16px);
66
+ border-radius: var(--matcha-radius-md, 4px);
67
+ cursor: pointer;
68
+ outline: none;
69
+ color: var(--matcha-list-item-text, var(--matcha-color-fg));
70
+ text-decoration: none;
71
+ transition: background-color 150ms;
72
+
73
+ // Focus ring
74
+ &:focus-visible {
75
+ outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
76
+ outline-offset: var(--matcha-state-focus-ring-offset, 2px);
77
+ }
78
+
79
+ // Disabled
80
+ &.matcha-list-item--disabled,
81
+ &.matcha-list-item-disabled {
82
+ opacity: var(--matcha-opacity-disabled, 0.38);
83
+ pointer-events: none;
84
+ cursor: default;
85
+ }
86
+
87
+ // Active/Selected
88
+ &.matcha-list-item--active {
89
+ background-color: var(--matcha-color-accent-surface, var(--matcha-color-accent-alpha));
90
+
91
+ .matcha-list-item__label {
92
+ color: var(--matcha-color-accent);
93
+ font-weight: 600;
94
+ }
95
+
96
+ .matcha-list-item__leading {
97
+ color: var(--matcha-color-accent);
98
+ }
99
+ }
100
+ }
101
+
102
+ // ── Item content layout ──
103
+ .matcha-list-item-content,
104
+ .matcha-list-item__content {
105
+ display: flex;
106
+ align-items: center;
107
+ width: 100%;
108
+ gap: var(--matcha-space-150, 12px);
109
+ }
110
+
111
+ // ── Leading (icon, avatar) ──
112
+ .matcha-list-item__leading {
113
+ flex-shrink: 0;
114
+ display: flex;
115
+ align-items: center;
116
+ justify-content: center;
117
+ color: var(--matcha-color-hint, var(--matcha-color-text-muted));
118
+ }
119
+
120
+ // ── Text area (label + description) ──
121
+ .matcha-list-item__text {
122
+ flex: 1;
123
+ min-width: 0;
124
+ display: flex;
125
+ flex-direction: column;
126
+ gap: var(--matcha-space-025, 2px);
127
+ }
128
+
129
+ .matcha-list-item__label {
130
+ font-size: var(--matcha-text-body-md, 14px);
131
+ font-weight: var(--matcha-weight-regular, 400);
132
+ line-height: var(--matcha-leading-body-md, 20px);
133
+ color: var(--matcha-list-item-text, var(--matcha-color-fg));
134
+ overflow: hidden;
135
+ text-overflow: ellipsis;
136
+ white-space: nowrap;
137
+ }
138
+
139
+ .matcha-list-item__description {
140
+ font-size: var(--matcha-text-body-sm, 12px);
141
+ font-weight: var(--matcha-weight-regular, 400);
142
+ line-height: var(--matcha-leading-body-sm, 16px);
143
+ color: var(--matcha-color-hint, var(--matcha-color-text-muted));
144
+ overflow: hidden;
145
+ text-overflow: ellipsis;
146
+ white-space: nowrap;
147
+ }
148
+
149
+ // ── Trailing (chevron, badge, switch, meta) ──
150
+ .matcha-list-item__trailing {
151
+ flex-shrink: 0;
152
+ display: flex;
153
+ align-items: center;
154
+ gap: var(--matcha-space-100, 8px);
155
+ color: var(--matcha-color-hint, var(--matcha-color-text-muted));
156
+ }
157
+
158
+ // ── Divider between items ──
159
+ .matcha-list-divider {
160
+ height: var(--matcha-border-hairline, 1px);
161
+ margin: var(--matcha-space-050, 4px) var(--matcha-space-200, 16px);
162
+ background-color: var(--matcha-color-border);
163
+ opacity: var(--matcha-opacity-subtle, 0.10);
164
+ }
165
+
166
+ // ── Section header ──
167
+ .matcha-list-subheader {
168
+ display: flex;
169
+ align-items: center;
170
+ padding: var(--matcha-space-200, 16px) var(--matcha-space-200, 16px) var(--matcha-space-075, 6px);
171
+ font-size: var(--matcha-text-p-tiny, 11px);
172
+ font-weight: var(--matcha-weight-medium, 500);
173
+ line-height: var(--matcha-leading-p-tiny, 14px);
174
+ letter-spacing: var(--matcha-letter-spacing-wide, 0.5px);
175
+ text-transform: uppercase;
176
+ color: var(--matcha-color-hint, var(--matcha-color-text-muted));
177
+ }
178
+
179
+ // ── 2-line variant (with description) ──
180
+ .matcha-list-item--two-line,
181
+ matcha-list-item.matcha-list-item--two-line {
182
+ min-height: 64px;
183
+ padding-top: var(--matcha-space-150, 12px);
184
+ padding-bottom: var(--matcha-space-150, 12px);
185
+ }
186
+
187
+ // ── Dense variant ──
188
+ .matcha-list--dense {
189
+ matcha-list-item,
190
+ .matcha-list-item {
191
+ min-height: 36px;
192
+ padding: var(--matcha-space-050, 4px) var(--matcha-space-200, 16px);
193
+
194
+ .matcha-list-item__label {
195
+ font-size: var(--matcha-text-label-sm, 13px);
196
+ }
197
+ }
198
+ }
199
+
200
+ // ── Inset (leading space without icon) ──
201
+ .matcha-list-item--inset {
202
+ padding-left: calc(var(--matcha-space-200, 16px) + 36px);
203
+ }
204
+
205
+ @media (prefers-reduced-motion: reduce) {
206
+ matcha-list-item,
207
+ .matcha-list-item {
208
+ transition: none;
209
+ }
210
+ }
211
+ }
@@ -1,99 +1,99 @@
1
- // =============================================================================
2
- // matcha-menu.scss — Dropdown context menu (modernized)
3
- // =============================================================================
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
-
18
- .matcha-menu-content {
19
- button,
20
- [matcha-button] {
21
- position: relative;
22
- overflow: hidden;
23
-
24
- &::before {
25
- content: '';
26
- position: absolute;
27
- inset: 0;
28
- background: currentColor;
29
- opacity: 0;
30
- border-radius: inherit;
31
- pointer-events: none;
32
- transition: opacity var(--matcha-duration-instant, 80ms) linear;
33
- }
34
-
35
- &:hover:not([disabled])::before { opacity: var(--matcha-state-hover, 0.08); }
36
- &:active:not([disabled])::before { opacity: var(--matcha-state-active, 0.12); }
37
-
38
- @media (prefers-reduced-motion: reduce) {
39
- &::before { transition: none; }
40
- }
41
-
42
- &[disabled] { pointer-events: none; }
43
- }
44
- }
45
-
46
- @mixin matcha-menu-theme($theme) {
47
- .matcha-menu-content {
48
- display: flex;
49
- flex-direction: column;
50
- padding: var(--matcha-space-100, 8px) 0;
51
-
52
- button,
53
- [matcha-button] {
54
- width: 100%;
55
- text-align: left;
56
- justify-content: flex-start;
57
- border-radius: 0;
58
- padding: var(--matcha-space-100, 8px) var(--matcha-space-200, 16px);
59
- height: var(--matcha-space-500, 40px);
60
- font-weight: var(--matcha-weight-medium, 500);
61
-
62
- &:focus-visible:not([disabled]) {
63
- outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
64
- outline-offset: var(--matcha-state-focus-ring-offset, 2px);
65
- }
66
-
67
- matcha-icon,
68
- .matcha-icon {
69
- margin-right: var(--matcha-space-150, 12px);
70
- }
71
- }
72
-
73
- .matcha-menu-item-has-submenu {
74
- position: relative;
75
- padding-right: calc(var(--matcha-space-400, 32px) + var(--matcha-space-050, 4px)); // 36
76
-
77
- &::after {
78
- content: '';
79
- position: absolute;
80
- right: var(--matcha-space-150, 12px);
81
- top: 50%;
82
- transform: translateY(-50%);
83
- width: 0;
84
- height: 0;
85
- border-left: calc(var(--matcha-border-medium, 4px) + var(--matcha-border-hairline, 1px)) solid var(--matcha-color-hint, var(--matcha-color-text-muted));
86
- border-top: var(--matcha-border-medium, 4px) solid transparent;
87
- border-bottom: var(--matcha-border-medium, 4px) solid transparent;
88
- opacity: var(--matcha-opacity-secondary, 0.54);
89
- transition: opacity var(--matcha-duration-instant, 80ms) linear;
90
- }
91
-
92
- &:hover::after { opacity: var(--matcha-opacity-high, 0.87); }
93
-
94
- @media (prefers-reduced-motion: reduce) {
95
- &::after { transition: none; }
96
- }
97
- }
98
- }
99
- }
1
+ // =============================================================================
2
+ // matcha-menu.scss — Dropdown context menu (modernized)
3
+ // =============================================================================
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
+
18
+ .matcha-menu-content {
19
+ button,
20
+ [matcha-button] {
21
+ position: relative;
22
+ overflow: hidden;
23
+
24
+ &::before {
25
+ content: '';
26
+ position: absolute;
27
+ inset: 0;
28
+ background: currentColor;
29
+ opacity: 0;
30
+ border-radius: inherit;
31
+ pointer-events: none;
32
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
33
+ }
34
+
35
+ &:hover:not([disabled])::before { opacity: var(--matcha-state-hover, 0.08); }
36
+ &:active:not([disabled])::before { opacity: var(--matcha-state-active, 0.12); }
37
+
38
+ @media (prefers-reduced-motion: reduce) {
39
+ &::before { transition: none; }
40
+ }
41
+
42
+ &[disabled] { pointer-events: none; }
43
+ }
44
+ }
45
+
46
+ @mixin matcha-menu-theme($theme) {
47
+ .matcha-menu-content {
48
+ display: flex;
49
+ flex-direction: column;
50
+ padding: var(--matcha-space-100, 8px) 0;
51
+
52
+ button,
53
+ [matcha-button] {
54
+ width: 100%;
55
+ text-align: left;
56
+ justify-content: flex-start;
57
+ border-radius: 0;
58
+ padding: var(--matcha-space-100, 8px) var(--matcha-space-200, 16px);
59
+ height: var(--matcha-space-500, 40px);
60
+ font-weight: var(--matcha-weight-medium, 500);
61
+
62
+ &:focus-visible:not([disabled]) {
63
+ outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
64
+ outline-offset: var(--matcha-state-focus-ring-offset, 2px);
65
+ }
66
+
67
+ matcha-icon,
68
+ .matcha-icon {
69
+ margin-right: var(--matcha-space-150, 12px);
70
+ }
71
+ }
72
+
73
+ .matcha-menu-item-has-submenu {
74
+ position: relative;
75
+ padding-right: calc(var(--matcha-space-400, 32px) + var(--matcha-space-050, 4px)); // 36
76
+
77
+ &::after {
78
+ content: '';
79
+ position: absolute;
80
+ right: var(--matcha-space-150, 12px);
81
+ top: 50%;
82
+ transform: translateY(-50%);
83
+ width: 0;
84
+ height: 0;
85
+ border-left: calc(var(--matcha-border-medium, 4px) + var(--matcha-border-hairline, 1px)) solid var(--matcha-color-hint, var(--matcha-color-text-muted));
86
+ border-top: var(--matcha-border-medium, 4px) solid transparent;
87
+ border-bottom: var(--matcha-border-medium, 4px) solid transparent;
88
+ opacity: var(--matcha-opacity-secondary, 0.54);
89
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
90
+ }
91
+
92
+ &:hover::after { opacity: var(--matcha-opacity-high, 0.87); }
93
+
94
+ @media (prefers-reduced-motion: reduce) {
95
+ &::after { transition: none; }
96
+ }
97
+ }
98
+ }
99
+ }