@inchurch/matcha-theme 20.0.3

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 (112) hide show
  1. package/README.md +303 -0
  2. package/abstracts/_colors.scss +405 -0
  3. package/abstracts/_elevation.scss +102 -0
  4. package/abstracts/_functions.scss +1213 -0
  5. package/abstracts/_media-breakpoint.scss +23 -0
  6. package/abstracts/_typography.scss +127 -0
  7. package/base/_reset.scss +438 -0
  8. package/components/matcha-accordion.scss +157 -0
  9. package/components/matcha-audio-player.scss +32 -0
  10. package/components/matcha-autocomplete.scss +134 -0
  11. package/components/matcha-avatar.scss +161 -0
  12. package/components/matcha-badge.scss +120 -0
  13. package/components/matcha-breadcrumb.scss +126 -0
  14. package/components/matcha-button-toggle.scss +363 -0
  15. package/components/matcha-buttons.scss +784 -0
  16. package/components/matcha-calendar.scss +154 -0
  17. package/components/matcha-cards.scss +205 -0
  18. package/components/matcha-chart-card.scss +60 -0
  19. package/components/matcha-checkbox.scss +554 -0
  20. package/components/matcha-chip.scss +212 -0
  21. package/components/matcha-color-pick.scss +35 -0
  22. package/components/matcha-command-palette.scss +89 -0
  23. package/components/matcha-crop.scss +172 -0
  24. package/components/matcha-date.scss +81 -0
  25. package/components/matcha-divider.scss +45 -0
  26. package/components/matcha-draggable.scss +24 -0
  27. package/components/matcha-drawer.scss +235 -0
  28. package/components/matcha-drop-list.scss +390 -0
  29. package/components/matcha-emoji.scss +69 -0
  30. package/components/matcha-empty-state.scss +118 -0
  31. package/components/matcha-flag.scss +62 -0
  32. package/components/matcha-footer.scss +187 -0
  33. package/components/matcha-form-field.scss +552 -0
  34. package/components/matcha-form-section.scss +101 -0
  35. package/components/matcha-header.scss +325 -0
  36. package/components/matcha-highlight.scss +296 -0
  37. package/components/matcha-hint-text.scss +66 -0
  38. package/components/matcha-horizontal-tree.scss +317 -0
  39. package/components/matcha-icon.scss +106 -0
  40. package/components/matcha-image.scss +62 -0
  41. package/components/matcha-list.scss +212 -0
  42. package/components/matcha-menu.scss +86 -0
  43. package/components/matcha-modal.scss +234 -0
  44. package/components/matcha-nav.scss +450 -0
  45. package/components/matcha-notification.scss +197 -0
  46. package/components/matcha-option.scss +95 -0
  47. package/components/matcha-page-builder.scss +4186 -0
  48. package/components/matcha-paginator.scss +235 -0
  49. package/components/matcha-panel.scss +167 -0
  50. package/components/matcha-profile-card.scss +50 -0
  51. package/components/matcha-progress-bar.scss +209 -0
  52. package/components/matcha-radio.scss +528 -0
  53. package/components/matcha-ripple.scss +7 -0
  54. package/components/matcha-scrollbar.scss +35 -0
  55. package/components/matcha-scrollbox-shadow.scss +123 -0
  56. package/components/matcha-section.scss +105 -0
  57. package/components/matcha-select.scss +661 -0
  58. package/components/matcha-skeleton.scss +138 -0
  59. package/components/matcha-slide-toggle.scss +590 -0
  60. package/components/matcha-slider.scss +188 -0
  61. package/components/matcha-snack-bar.scss +266 -0
  62. package/components/matcha-spin.scss +252 -0
  63. package/components/matcha-spinner.scss +78 -0
  64. package/components/matcha-stepper.scss +177 -0
  65. package/components/matcha-table-cell.scss +41 -0
  66. package/components/matcha-table.scss +785 -0
  67. package/components/matcha-tabs.scss +469 -0
  68. package/components/matcha-text-editor.scss +151 -0
  69. package/components/matcha-time.scss +33 -0
  70. package/components/matcha-timepicker.scss +13 -0
  71. package/components/matcha-toolbar.scss +206 -0
  72. package/components/matcha-tooltip.scss +128 -0
  73. package/components/matcha-uploader.scss +215 -0
  74. package/css/matcha-style.css +76772 -0
  75. package/fonts/CircularStd-Black.eot +0 -0
  76. package/fonts/CircularStd-Black.svg +3426 -0
  77. package/fonts/CircularStd-Black.ttf +0 -0
  78. package/fonts/CircularStd-Black.woff +0 -0
  79. package/fonts/CircularStd-Black.woff2 +0 -0
  80. package/fonts/CircularStd-Bold.eot +0 -0
  81. package/fonts/CircularStd-Bold.otf +0 -0
  82. package/fonts/CircularStd-Bold.svg +13532 -0
  83. package/fonts/CircularStd-Bold.ttf +0 -0
  84. package/fonts/CircularStd-Bold.woff +0 -0
  85. package/fonts/CircularStd-Bold.woff2 +0 -0
  86. package/fonts/CircularStd-Medium.eot +0 -0
  87. package/fonts/CircularStd-Medium.otf +0 -0
  88. package/fonts/CircularStd-Medium.svg +13511 -0
  89. package/fonts/CircularStd-Medium.ttf +0 -0
  90. package/fonts/CircularStd-Medium.woff +0 -0
  91. package/fonts/CircularStd-Medium.woff2 +0 -0
  92. package/fonts/CircularStd-Regular.eot +0 -0
  93. package/fonts/CircularStd-Regular.otf +0 -0
  94. package/fonts/CircularStd-Regular.svg +2378 -0
  95. package/fonts/CircularStd-Regular.ttf +0 -0
  96. package/fonts/CircularStd-Regular.woff +0 -0
  97. package/fonts/CircularStd-Regular.woff2 +0 -0
  98. package/main.scss +262 -0
  99. package/package.json +11 -0
  100. package/tokens/_animations-tokens.scss +37 -0
  101. package/tokens/_breakpoints-tokens.scss +26 -0
  102. package/tokens/_color-tokens.scss +1153 -0
  103. package/tokens/_css-custom-properties.scss +568 -0
  104. package/tokens/_elevation-tokens.scss +33 -0
  105. package/tokens/_spacing-tokens.scss +94 -0
  106. package/tokens/_typography-tokens.scss +65 -0
  107. package/vendors/angular-editor.scss +56 -0
  108. package/vendors/angular-material-fixes.scss +297 -0
  109. package/vendors/calendar.scss +2880 -0
  110. package/vendors/charts.scss +92 -0
  111. package/vendors/ng5-slider.scss +56 -0
  112. package/vendors/ngx-material-timepicker.scss +50 -0
@@ -0,0 +1,469 @@
1
+ @use "sass:map";
2
+
3
+ @mixin _colorize-inactive-type-basic($theme, $color-functions) {
4
+ &[inactivetype="basic"] {
5
+ @each $colorName, $colorFn in $color-functions {
6
+ &[inactivecolor="#{'' + $colorName}"] {
7
+ .button-group matcha-tab-item {
8
+
9
+ button[matcha-button],
10
+ a[matcha-button] {
11
+ &:not([active-item="true"]) {
12
+ background: var(--matcha-color-surface, #{getSurface($theme)});
13
+ color: call(#{$colorFn}, $theme);
14
+ box-shadow: 0 0 0 0px inset;
15
+
16
+ .ripple {
17
+ background: call(#{$colorFn}Alpha, $theme); // ok: legacy ripple color token
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
23
+ }
24
+
25
+ &[disabled],
26
+ &[disabled]:not([disabled="false"]),
27
+ &[disabled="true"] {
28
+ &:not([active-item="true"]) {
29
+ .button-group matcha-tab-item {
30
+
31
+ button[matcha-button],
32
+ a[matcha-button] {
33
+ @include _disabled-basic-button($theme);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }
40
+
41
+ @mixin _colorize-inactive-type-outline($theme, $color-functions) {
42
+ &[inactivetype="outline"] {
43
+
44
+ //disabled false
45
+ &:not([disabled="true"]) {
46
+ @each $colorName, $colorFn in $color-functions {
47
+ &[inactivecolor="#{'' + $colorName}"] {
48
+ .button-group matcha-tab-item {
49
+
50
+ button[matcha-button],
51
+ a[matcha-button] {
52
+
53
+ //botão não ativo
54
+ &:not([active-item="true"]) {
55
+ color: call(#{$colorFn}, $theme);
56
+ background: transparent;
57
+ box-shadow: 0 0 0 2px call(#{$colorFn}, $theme) inset;
58
+
59
+ .ripple {
60
+ background: call(#{$colorFn}Alpha, $theme); // ok: legacy ripple color token
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ //disabled true
70
+ &[disabled],
71
+ &[disabled]:not([disabled="false"]),
72
+ &[disabled="true"] {
73
+ >.button-group matcha-tab-item {
74
+
75
+ button[matcha-button],
76
+ a[matcha-button] {
77
+
78
+ //botão não ativo
79
+ &:not([active-item="true"]) {
80
+ @include _disabled-outline-button($theme);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
87
+
88
+ @mixin _colorize-inactive-type-alpha($theme, $color-functions) {
89
+ &[inactivetype="alpha"] {
90
+ @each $colorName, $colorFn in $color-functions {
91
+ &[inactivecolor="#{'' + $colorName}"] {
92
+ .button-group matcha-tab-item {
93
+
94
+ button[matcha-button],
95
+ a[matcha-button] {
96
+ &:not([active-item="true"]) {
97
+ color: call(#{$colorFn}, $theme);
98
+ background: call(#{$colorFn}Alpha, $theme);
99
+ box-shadow: 0 0 0 0px;
100
+
101
+ .ripple {
102
+ background: call(#{$colorFn}ContrastAlpha, $theme); // ok: legacy ripple color token
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }
109
+
110
+ &[disabled],
111
+ &[disabled]:not([disabled="false"]),
112
+ &[disabled="true"] {
113
+ .button-group matcha-tab-item {
114
+
115
+ button[matcha-button],
116
+ a[matcha-button] {
117
+
118
+ //botão não ativo
119
+ &:not([active-item="true"]) {
120
+ @include _disabled-alpha-button($theme);
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
127
+
128
+ @mixin _colorize-inactive-type-link($theme, $color-functions) {
129
+
130
+ &[inactivetype="link"] {
131
+ @each $colorName, $colorFn in $color-functions {
132
+ &[inactivecolor="#{'' + $colorName}"] {
133
+ .button-group matcha-tab-item {
134
+
135
+ button[matcha-button],
136
+ a[matcha-button] {
137
+ &:not([active-item="true"]) {
138
+
139
+ background: transparent;
140
+ color: call(#{$colorFn}, $theme);
141
+ box-shadow: 0 0 0 0px;
142
+
143
+ .ripple {
144
+ background: call(#{$colorFn}Alpha, $theme); // ok: legacy ripple color token
145
+ }
146
+
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
152
+
153
+ &[disabled],
154
+ &[disabled]:not([disabled="false"]),
155
+ &[disabled="true"] {
156
+ .button-group matcha-tab-item {
157
+
158
+ button[matcha-button],
159
+ a[matcha-button] {
160
+
161
+ //botão não ativo
162
+ &:not([active-item="true"]) {
163
+ @include _disabled-link-button($theme);
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+
171
+
172
+
173
+
174
+ @mixin matcha-tabs($theme) {
175
+ $color-functions: (
176
+ red: getRed,
177
+ pink: getPink,
178
+ purple: getPurple,
179
+ deep-purple: getDeepPurple,
180
+ indigo: getIndigo,
181
+ blue: getBlue,
182
+ light-blue: getLightBlue,
183
+ cyan: getCyan,
184
+ teal: getTeal,
185
+ green: getGreen,
186
+ light-green: getLightGreen,
187
+ lime: getLime,
188
+ yellow: getYellow,
189
+ amber: getAmber,
190
+ orange: getOrange,
191
+ deep-orange: getDeepOrange,
192
+ brown: getBrown,
193
+ grey: getGrey,
194
+ blue-grey: getBlueGrey,
195
+ primary: getPrimary,
196
+ accent: getAccent,
197
+ success: getSuccess,
198
+ warn: getWarn,
199
+ danger: getDanger,
200
+ info: getInfo,
201
+ disabled: getDisabled,
202
+ );
203
+
204
+ matcha-tabs {
205
+ display: flex;
206
+ @include _colorize-inactive-type-basic($theme, $color-functions);
207
+ @include _colorize-inactive-type-outline($theme, $color-functions);
208
+ @include _colorize-inactive-type-alpha($theme, $color-functions);
209
+ @include _colorize-inactive-type-link($theme, $color-functions);
210
+
211
+ .button-group matcha-tab-item {
212
+ button[matcha-button],
213
+ a[matcha-button] {
214
+ &:focus-visible:not([disabled]):not([disabled="true"]) {
215
+ outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent, #{getAccent($theme)});
216
+ outline-offset: var(--matcha-state-focus-ring-offset, 2px);
217
+ }
218
+ }
219
+ }
220
+
221
+ &[disabled],
222
+ &[disabled]:not([disabled="false"]),
223
+ &[disabled="true"] {
224
+ .button-group matcha-tab-item {
225
+
226
+ button[matcha-button],
227
+ a[matcha-button] {
228
+ &[active-item="true"] {
229
+
230
+ &[outline],
231
+ &[outline]:not([outline="false"]),
232
+ &[outline="true"] {
233
+ @include _disabled-outline-button($theme);
234
+ }
235
+
236
+ &[basic],
237
+ &[basic]:not([basic="false"]),
238
+ &[basic="true"] {
239
+ @include _disabled-basic-button($theme);
240
+ }
241
+
242
+ &[alpha],
243
+ &[alpha]:not([alpha="false"]),
244
+ &[alpha="true"] {
245
+ @include _disabled-alpha-button($theme);
246
+ }
247
+
248
+ &[link],
249
+ &[link]:not([link="false"]),
250
+ &[link="true"] {
251
+ @include _disabled-link-button($theme);
252
+ }
253
+ }
254
+ }
255
+ }
256
+
257
+ }
258
+ }
259
+ }
260
+
261
+ .button-group {
262
+ &.gap-0 {
263
+ gap: 0 !important;
264
+
265
+ // Ajuste border-radius quando gap = 0
266
+ matcha-tab-item:first-child button[matcha-button] {
267
+ border-top-right-radius: 0;
268
+ border-bottom-right-radius: 0;
269
+ }
270
+
271
+ matcha-tab-item:last-child button[matcha-button] {
272
+ border-top-left-radius: 0;
273
+ border-bottom-left-radius: 0;
274
+ }
275
+
276
+ matcha-tab-item:not(:first-child):not(:last-child) button[matcha-button] {
277
+ border-radius: 0;
278
+ }
279
+ }
280
+ }
281
+
282
+ // =============================================================================
283
+ // MODERNIZED TAB STYLES — Aligned with Figma matcha/tab/item
284
+ // Tipo: Underline (classic nav) | Card (icon card)
285
+ // Estado: Default | Selecionado | Disabled
286
+ // =============================================================================
287
+
288
+ @mixin matcha-tabs-modern($theme) {
289
+ $is-dark: map.get($theme, is-dark);
290
+
291
+ // ── Underline Tab ──────────────────────────────────────────────────────
292
+ // Figma: bottom-border 4px, surface/card bg, accent when selected
293
+
294
+ .matcha-tab-underline {
295
+ display: flex;
296
+ align-items: stretch;
297
+ background: transparent; // herda fundo da página (funciona light + dark)
298
+ border-radius: var(--matcha-radius-md, 4px);
299
+ overflow: hidden;
300
+
301
+ // Subtle bottom divider on the container
302
+ border-bottom: var(--matcha-border-hairline, 1px) solid var(--matcha-color-surface-border, #{getDisabled($theme)});
303
+
304
+ .matcha-tab-item {
305
+ display: flex;
306
+ align-items: center;
307
+ justify-content: center;
308
+ gap: var(--matcha-space-100, 8px);
309
+ padding: var(--matcha-space-200, 16px) var(--matcha-space-500, 40px);
310
+ border: none;
311
+ background: none;
312
+ cursor: pointer;
313
+ position: relative;
314
+ overflow: hidden;
315
+ font-family: var(--matcha-font-family);
316
+ font-size: var(--matcha-text-body-lg, 16px);
317
+ font-weight: var(--matcha-weight-regular, 400);
318
+ line-height: var(--matcha-leading-body-lg, 24px);
319
+ color: var(--matcha-color-text-label, #{getBlueGrey($theme)});
320
+ white-space: nowrap;
321
+
322
+ // Bottom indicator (inactive: transparent, active: accent)
323
+ &::after {
324
+ content: '';
325
+ position: absolute;
326
+ bottom: 0;
327
+ left: 0;
328
+ right: 0;
329
+ height: 4px;
330
+ background: transparent;
331
+ transition: background var(--matcha-duration-instant, 80ms) linear;
332
+ }
333
+
334
+ // State layer
335
+ &::before {
336
+ content: '';
337
+ position: absolute;
338
+ inset: 0;
339
+ background: currentColor;
340
+ opacity: 0;
341
+ pointer-events: none;
342
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
343
+ }
344
+ &:hover:not(:disabled):not([disabled])::before { opacity: var(--matcha-state-hover, 0.08); }
345
+ &:active:not(:disabled):not([disabled])::before { opacity: var(--matcha-state-active, 0.12); }
346
+
347
+ // ── Selected ──
348
+ &.active,
349
+ &[aria-selected="true"] {
350
+ color: var(--matcha-color-accent, #{getAccent($theme)});
351
+ font-weight: var(--matcha-weight-semibold, 600);
352
+ line-height: var(--matcha-leading-title-sm, 22px);
353
+
354
+ &::after {
355
+ background: var(--matcha-color-accent, #{getAccent($theme)});
356
+ }
357
+ }
358
+
359
+ // ── Disabled ──
360
+ &:disabled,
361
+ &[disabled] {
362
+ opacity: 0.5;
363
+ pointer-events: none; cursor: default;
364
+ pointer-events: none;
365
+ }
366
+
367
+ // ── Focus ──
368
+ &:focus-visible {
369
+ outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent, #{getAccent($theme)});
370
+ outline-offset: var(--matcha-state-focus-ring-offset, 2px);
371
+ }
372
+ }
373
+
374
+ // Equal-width tabs (mobile/responsive)
375
+ &.matcha-tab-equal .matcha-tab-item {
376
+ flex: 1 0 0;
377
+ }
378
+ }
379
+
380
+ // ── Card Tab ───────────────────────────────────────────────────────────
381
+ // Figma: card with radius-md, 2px accent border when selected
382
+
383
+ .matcha-tab-card {
384
+ display: flex;
385
+ align-items: stretch;
386
+ gap: var(--matcha-space-100, 8px);
387
+ flex-wrap: wrap;
388
+
389
+ .matcha-tab-item {
390
+ display: flex;
391
+ align-items: center;
392
+ justify-content: center;
393
+ gap: var(--matcha-space-100, 8px);
394
+ padding: var(--matcha-space-100, 8px) var(--matcha-space-200, 16px);
395
+ border: 2px solid transparent;
396
+ border-radius: var(--matcha-radius-md, 4px);
397
+ background: var(--matcha-color-surface, #{getSurface($theme)});
398
+ cursor: pointer;
399
+ position: relative;
400
+ overflow: hidden;
401
+ font-family: var(--matcha-font-family);
402
+ font-size: var(--matcha-text-body-md, 14px);
403
+ font-weight: var(--matcha-weight-regular, 400);
404
+ line-height: var(--matcha-leading-body-md, 20px);
405
+ color: var(--matcha-color-text-label, #{getBlueGrey($theme)});
406
+
407
+ // State layer
408
+ &::before {
409
+ content: '';
410
+ position: absolute;
411
+ inset: 0;
412
+ background: currentColor;
413
+ opacity: 0;
414
+ border-radius: inherit;
415
+ pointer-events: none;
416
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
417
+ }
418
+ &:hover:not(:disabled):not([disabled])::before { opacity: var(--matcha-state-hover, 0.08); }
419
+ &:active:not(:disabled):not([disabled])::before { opacity: var(--matcha-state-active, 0.12); }
420
+
421
+ // ── Selected ──
422
+ &.active,
423
+ &[aria-selected="true"] {
424
+ border-color: var(--matcha-color-accent, #{getAccent($theme)});
425
+ color: var(--matcha-color-accent, #{getAccent($theme)});
426
+ font-weight: var(--matcha-weight-medium, 500);
427
+ }
428
+
429
+ // ── Disabled ──
430
+ &:disabled,
431
+ &[disabled] {
432
+ opacity: 0.5;
433
+ pointer-events: none; cursor: default;
434
+ pointer-events: none;
435
+ }
436
+
437
+ // ── Focus ──
438
+ &:focus-visible {
439
+ outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent, #{getAccent($theme)});
440
+ outline-offset: var(--matcha-state-focus-ring-offset, 2px);
441
+ }
442
+
443
+ // ── Vertical layout ──
444
+ &.matcha-tab-vertical {
445
+ flex-direction: column;
446
+ text-align: center;
447
+ }
448
+ }
449
+ }
450
+
451
+ // ── Icon inside tab items ──
452
+ .matcha-tab-underline,
453
+ .matcha-tab-card {
454
+ .matcha-tab-item {
455
+ matcha-icon {
456
+ flex-shrink: 0;
457
+ }
458
+ }
459
+ }
460
+ }
461
+
462
+ // ── Reduced motion ──────────────────────────────────────────────────────
463
+ @media (prefers-reduced-motion: reduce) {
464
+ .matcha-tab-underline .matcha-tab-item::before,
465
+ .matcha-tab-underline .matcha-tab-item::after,
466
+ .matcha-tab-card .matcha-tab-item::before {
467
+ transition: none;
468
+ }
469
+ }
@@ -0,0 +1,151 @@
1
+ @use "sass:map";
2
+
3
+ // =============================================================================
4
+ // matcha-text-editor.scss — Rich text editor wrapper (Tiptap)
5
+ // Aligned with Figma matcha/text-editor:
6
+ // Toolbar (icon-buttons) + Editor area (Tiptap content) + Footer (word count)
7
+ // Angular: matcha-text-editor
8
+ // =============================================================================
9
+
10
+ @mixin matcha-text-editor-theme($theme) {
11
+ $is-dark: map.get($theme, is-dark);
12
+
13
+ .matcha-text-editor {
14
+ background: var(--matcha-color-surface, #{getSurface($theme)});
15
+ border-color: var(--matcha-color-border, #{getGrey($theme)});
16
+
17
+ &:focus-within {
18
+ border-color: var(--matcha-color-accent, #{getAccent($theme)});
19
+ }
20
+ }
21
+
22
+ .matcha-text-editor__placeholder {
23
+ color: var(--matcha-color-text-placeholder, #{getBlueGrey($theme)});
24
+ }
25
+
26
+ .matcha-text-editor__content {
27
+ color: var(--matcha-color-fg, #{getForeground($theme)});
28
+ }
29
+
30
+ .matcha-text-editor__word-count {
31
+ color: var(--matcha-color-text-hint, #{getBlueGrey($theme)});
32
+ }
33
+
34
+ .matcha-text-editor__toolbar-btn--active {
35
+ background: var(--matcha-color-accent-alpha, #{getAccentAlpha($theme)});
36
+ color: var(--matcha-color-accent, #{getAccent($theme)});
37
+ }
38
+
39
+ // ── ProseMirror color overrides (need $theme) ──
40
+ .matcha-text-editor__content .ProseMirror {
41
+ a {
42
+ color: var(--matcha-color-accent, #{getAccent($theme)});
43
+ }
44
+
45
+ blockquote {
46
+ border-left-color: var(--matcha-color-accent, #{getAccent($theme)});
47
+ }
48
+ }
49
+ }
50
+
51
+ // ── Layout ──────────────────────────────────────────────────────────────────
52
+
53
+ .matcha-text-editor {
54
+ display: flex;
55
+ flex-direction: column;
56
+ width: 100%;
57
+ border: var(--matcha-border-hairline, 1px) solid transparent;
58
+ border-radius: var(--matcha-radius-lg, 8px);
59
+ overflow: hidden;
60
+ box-sizing: border-box;
61
+ transition: border-color var(--matcha-duration-instant, 80ms) linear;
62
+ }
63
+
64
+ // ── Toolbar ──
65
+ .matcha-text-editor__toolbar {
66
+ display: flex;
67
+ align-items: center;
68
+ gap: var(--matcha-space-025, 2px);
69
+ padding: var(--matcha-space-050, 4px) var(--matcha-space-100, 8px);
70
+ flex-wrap: wrap;
71
+ }
72
+
73
+ .matcha-text-editor__toolbar-group {
74
+ display: flex;
75
+ align-items: center;
76
+ gap: var(--matcha-space-025, 2px);
77
+ }
78
+
79
+ .matcha-text-editor__toolbar-sep {
80
+ width: 1px;
81
+ height: var(--matcha-icon-size-md, 24px);
82
+ margin: 0 var(--matcha-space-050, 4px);
83
+ opacity: 0.2;
84
+ }
85
+
86
+ // ── Editor content ──
87
+ .matcha-text-editor__content {
88
+ flex: 1;
89
+ min-height: 200px;
90
+ padding: var(--matcha-space-200, 16px);
91
+ font-family: var(--matcha-font-family);
92
+ font-size: var(--matcha-text-body-md, 14px);
93
+ line-height: var(--matcha-leading-body-md, 20px);
94
+ outline: none;
95
+
96
+ // Tiptap overrides
97
+ .ProseMirror {
98
+ outline: none;
99
+ min-height: inherit;
100
+
101
+ p { margin: 0 0 var(--matcha-space-100, 8px); }
102
+ h1, h2, h3 { font-family: var(--matcha-font-family); font-weight: 700; }
103
+ ul, ol { padding-left: var(--matcha-space-300, 24px); }
104
+ a { color: var(--matcha-color-accent); text-decoration: underline; }
105
+ blockquote {
106
+ border-left: var(--matcha-border-medium, 4px) solid var(--matcha-color-accent);
107
+ padding-left: var(--matcha-space-200, 16px);
108
+ margin-left: 0;
109
+ opacity: 0.8;
110
+ }
111
+ }
112
+ }
113
+
114
+ .matcha-text-editor__placeholder {
115
+ font-family: var(--matcha-font-family);
116
+ font-size: var(--matcha-text-body-md, 14px);
117
+ }
118
+
119
+ // ── Footer ──
120
+ .matcha-text-editor__footer {
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: flex-end;
124
+ padding: var(--matcha-space-100, 8px) var(--matcha-space-200, 16px);
125
+ }
126
+
127
+ .matcha-text-editor__word-count {
128
+ font-family: var(--matcha-font-family);
129
+ font-size: var(--matcha-text-caption, 11px);
130
+ }
131
+
132
+ // ── Responsive ──────────────────────────────────────────────────────────────
133
+
134
+ @include media-breakpoint('xs') {
135
+ .matcha-text-editor__content {
136
+ min-height: 160px;
137
+ padding: var(--matcha-space-150, 12px);
138
+ }
139
+
140
+ .matcha-text-editor__toolbar {
141
+ padding: var(--matcha-space-050, 4px);
142
+ }
143
+ }
144
+
145
+ // ── Reduced motion ──────────────────────────────────────────────────────────
146
+
147
+ @media (prefers-reduced-motion: reduce) {
148
+ .matcha-text-editor {
149
+ transition: none;
150
+ }
151
+ }
@@ -0,0 +1,33 @@
1
+ // =========================================================
2
+ // * Matcha Time Styles
3
+ // =========================================================
4
+ @mixin matcha-time-theme($theme) {
5
+ .matcha-time-input {
6
+ width: 100%;
7
+ font-size: 14px;
8
+ font-family: inherit;
9
+ line-height: 1.5;
10
+ background-color: transparent;
11
+ border: none;
12
+ outline: none;
13
+ cursor: pointer;
14
+
15
+ &::placeholder {
16
+ color: getGrey($theme);
17
+ }
18
+
19
+ &:disabled {
20
+ cursor: not-allowed;
21
+ opacity: 0.6;
22
+ color: getGrey($theme);
23
+ }
24
+ }
25
+
26
+ // Integração com matcha-form-field
27
+ matcha-form-field {
28
+ matcha-time {
29
+ width: 100%;
30
+ display: block;
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,13 @@
1
+ // =============================================================================
2
+ // matcha-timepicker.scss — Theme mixin (stub)
3
+ // Componente refatorado pra input + botão de ícone (native picker).
4
+ // Todo layout/visual do field vem de matcha-form-field.scss.
5
+ // Estrutura interna (.matcha-time-container / .matcha-time-input /
6
+ // .matcha-time-picker-button) é estilizada em matcha-time.component.scss.
7
+ // Mixin mantido vazio pra não quebrar main.scss.
8
+ // =============================================================================
9
+
10
+ @mixin matcha-timepicker-theme($theme) {
11
+ // Intencionalmente vazio — matcha-time não precisa de tema próprio hoje.
12
+ // Cores/borda/estado vêm do wrapper matcha-form-field.
13
+ }