@thalassic/themes 22.5.1 → 22.7.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 (39) hide show
  1. package/package.json +1 -1
  2. package/themes/thalassic/components/_checkbox.scss +9 -7
  3. package/themes/thalassic/components/_icon.scss +27 -7
  4. package/themes/thalassic/components/badge/_badge-color.scss +6 -0
  5. package/themes/thalassic/components/badge/_badge-position.scss +21 -0
  6. package/themes/thalassic/components/badge/_badge-size.scss +22 -0
  7. package/themes/thalassic/components/badge/_badge.scss +66 -0
  8. package/themes/thalassic/components/badge/_index.scss +4 -0
  9. package/themes/thalassic/components/button/_button-color.scss +4 -34
  10. package/themes/thalassic/components/button/_button-variant.scss +2 -1
  11. package/themes/thalassic/components/calendar/_calendar.scss +3 -3
  12. package/themes/thalassic/components/chip/_chip-color.scss +4 -35
  13. package/themes/thalassic/components/chip/_chip-control.scss +12 -35
  14. package/themes/thalassic/components/chip/_chip-variant.scss +5 -0
  15. package/themes/thalassic/components/date-time-picker/_mixins.scss +3 -3
  16. package/themes/thalassic/components/date-time-picker/_time-picker.scss +3 -3
  17. package/themes/thalassic/components/dialog/_dialog.scss +1 -1
  18. package/themes/thalassic/components/drawer/_drawer.scss +1 -1
  19. package/themes/thalassic/components/image-compare/_image-compare-orientation.scss +47 -0
  20. package/themes/thalassic/components/image-compare/_image-compare.scss +115 -0
  21. package/themes/thalassic/components/image-compare/_index.scss +2 -0
  22. package/themes/thalassic/components/index.scss +4 -0
  23. package/themes/thalassic/components/multi-select/_multi-select-size.scss +6 -6
  24. package/themes/thalassic/components/multi-select/_multi-select.scss +3 -0
  25. package/themes/thalassic/components/pagination/_pagination.scss +5 -0
  26. package/themes/thalassic/components/select/_select-size.scss +6 -6
  27. package/themes/thalassic/components/select/_select.scss +3 -0
  28. package/themes/thalassic/components/splitter/_index.scss +2 -0
  29. package/themes/thalassic/components/splitter/_splitter-orientation.scss +61 -0
  30. package/themes/thalassic/components/splitter/_splitter.scss +96 -0
  31. package/themes/thalassic/components/tabs/_tabs-orientation.scss +11 -0
  32. package/themes/thalassic/components/tabs/_tabs.scss +14 -0
  33. package/themes/thalassic/components/toast/_index.scss +2 -0
  34. package/themes/thalassic/components/toast/_toast-color.scss +43 -0
  35. package/themes/thalassic/components/toast/_toast.scss +226 -0
  36. package/themes/thalassic/components/toggle-group/_toggle-group-color.scss +4 -34
  37. package/themes/thalassic/components/tooltip/_tooltip-color.scss +3 -34
  38. package/themes/thalassic/mixins/_color-variants.scss +39 -0
  39. package/themes/thalassic/mixins/_index.scss +1 -0
@@ -38,6 +38,11 @@
38
38
  &-icon {
39
39
  width: var(--tls-pagination-button-icon-size);
40
40
  height: var(--tls-pagination-button-icon-size);
41
+
42
+ .tls-icon {
43
+ width: 100%;
44
+ height: 100%;
45
+ }
41
46
  }
42
47
  }
43
48
 
@@ -1,16 +1,16 @@
1
1
  .tls-select {
2
2
  &.tls-form-control--sm {
3
- --tls-select-icon-size: 0.625rem;
4
- --tls-select-clear-size: 0.625rem;
3
+ --tls-select-icon-size: 0.875rem;
4
+ --tls-select-clear-size: 0.875rem;
5
5
  }
6
6
 
7
7
  &.tls-form-control--md {
8
- --tls-select-icon-size: 0.75rem;
9
- --tls-select-clear-size: 0.75rem;
8
+ --tls-select-icon-size: 1rem;
9
+ --tls-select-clear-size: 1rem;
10
10
  }
11
11
 
12
12
  &.tls-form-control--lg {
13
- --tls-select-icon-size: 0.875rem;
14
- --tls-select-clear-size: 0.875rem;
13
+ --tls-select-icon-size: 1.125rem;
14
+ --tls-select-clear-size: 1.125rem;
15
15
  }
16
16
  }
@@ -67,6 +67,9 @@
67
67
  }
68
68
 
69
69
  .tls-select__chevron {
70
+ width: 100%;
71
+ height: 100%;
72
+
70
73
  transition: transform var(--motion-fast) var(--motion-ease-in-out);
71
74
  }
72
75
  }
@@ -0,0 +1,2 @@
1
+ @forward 'splitter';
2
+ @forward 'splitter-orientation';
@@ -0,0 +1,61 @@
1
+ .tls-splitter {
2
+ // Horizontal: panels sit side by side, separated by vertical gutters. The
3
+ // direct-child selector stops these rules from leaking into a nested splitter
4
+ // of the opposite orientation.
5
+ &--horizontal {
6
+ flex-direction: row;
7
+
8
+ > .tls-splitter-gutter {
9
+ inset-block: 0;
10
+
11
+ width: var(--tls-splitter-gutter-size);
12
+
13
+ cursor: col-resize;
14
+
15
+ // Centre the gutter on the seam. The inline slide mirrors in RTL, where
16
+ // the logical start edge sits on the opposite physical side.
17
+ transform: translateX(-50%);
18
+
19
+ --tls-splitter-handle-inline: var(--tls-splitter-handle-thickness);
20
+ --tls-splitter-handle-block: var(--tls-splitter-handle-length);
21
+
22
+ :root[dir='rtl'] & {
23
+ transform: translateX(50%);
24
+ }
25
+
26
+ // Vertical seam line down the centre of the gutter.
27
+ &::before {
28
+ inset-block: 0;
29
+ inset-inline-start: calc(50% - var(--tls-splitter-line-thickness) / 2);
30
+
31
+ width: var(--tls-splitter-line-thickness);
32
+ }
33
+ }
34
+ }
35
+
36
+ // Vertical: panels stack, separated by horizontal gutters.
37
+ &--vertical {
38
+ flex-direction: column;
39
+
40
+ > .tls-splitter-gutter {
41
+ inset-inline: 0;
42
+
43
+ height: var(--tls-splitter-gutter-size);
44
+
45
+ cursor: row-resize;
46
+
47
+ transform: translateY(-50%);
48
+
49
+ --tls-splitter-handle-inline: var(--tls-splitter-handle-length);
50
+ --tls-splitter-handle-block: var(--tls-splitter-handle-thickness);
51
+
52
+ // Horizontal seam line across the centre of the gutter.
53
+ &::before {
54
+ inset-inline: 0;
55
+ inset-block-start: calc(50% - var(--tls-splitter-line-thickness) / 2);
56
+
57
+ height: var(--tls-splitter-line-thickness);
58
+ }
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,96 @@
1
+ @use '../../mixins' as mixins;
2
+
3
+ .tls-splitter {
4
+ // Draggable hit area straddling the seam; larger than the visible line/handle.
5
+ --tls-splitter-gutter-size: var(--spacing-4);
6
+
7
+ // Thin seam line running the full length of the gutter.
8
+ --tls-splitter-line-color: var(--color-outline-variant);
9
+ --tls-splitter-line-thickness: 1px;
10
+
11
+ // Grab handle centred on the seam.
12
+ --tls-splitter-handle-color: var(--color-outline);
13
+ --tls-splitter-handle-hover-color: var(--color-primary);
14
+ --tls-splitter-handle-thickness: 4px;
15
+ --tls-splitter-handle-length: var(--spacing-8);
16
+ --tls-splitter-handle-radius: var(--radius-sm);
17
+
18
+ // Handle box, resolved per orientation on the gutter (see the orientation
19
+ // partial) and inherited by the handle. Defaults suit a horizontal splitter.
20
+ --tls-splitter-handle-inline: var(--tls-splitter-handle-thickness);
21
+ --tls-splitter-handle-block: var(--tls-splitter-handle-length);
22
+
23
+ position: relative;
24
+
25
+ width: 100%;
26
+ height: 100%;
27
+
28
+ display: flex;
29
+
30
+ overflow: hidden;
31
+
32
+ &--resizing {
33
+ user-select: none;
34
+ }
35
+
36
+ .tls-splitter-panel {
37
+ position: relative;
38
+
39
+ min-width: 0;
40
+ min-height: 0;
41
+
42
+ overflow: auto;
43
+ }
44
+
45
+ .tls-splitter-gutter {
46
+ position: absolute;
47
+ z-index: 1;
48
+
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+
53
+ background-color: transparent;
54
+
55
+ touch-action: none;
56
+
57
+ &:focus-visible {
58
+ outline: none;
59
+
60
+ .tls-splitter-gutter__handle {
61
+ background-color: var(--tls-splitter-handle-hover-color);
62
+ }
63
+ }
64
+
65
+ &:hover {
66
+ .tls-splitter-gutter__handle {
67
+ background-color: var(--tls-splitter-handle-hover-color);
68
+ }
69
+ }
70
+
71
+ // Seam line. Axis-specific sizing/insets live in the orientation partial.
72
+ &::before {
73
+ content: '';
74
+
75
+ position: absolute;
76
+
77
+ background-color: var(--tls-splitter-line-color);
78
+ }
79
+
80
+ &__handle {
81
+ // Lifts the handle above the seam line in paint order.
82
+ position: relative;
83
+
84
+ width: var(--tls-splitter-handle-inline);
85
+ height: var(--tls-splitter-handle-block);
86
+
87
+ border-radius: var(--tls-splitter-handle-radius);
88
+
89
+ background-color: var(--tls-splitter-handle-color);
90
+
91
+ @include mixins.motion(essential) {
92
+ transition: background-color var(--motion-fast);
93
+ }
94
+ }
95
+ }
96
+ }
@@ -1,4 +1,12 @@
1
1
  .tls-tabs {
2
+ // Horizontal
3
+ &.tls-tabs--horizontal {
4
+ .tls-tabs-header {
5
+ overflow-x: auto;
6
+ overflow-y: hidden;
7
+ }
8
+ }
9
+
2
10
  // Vertical
3
11
  &.tls-tabs--vertical {
4
12
  display: flex;
@@ -7,6 +15,9 @@
7
15
  .tls-tabs-header {
8
16
  flex-direction: column;
9
17
 
18
+ overflow-x: hidden;
19
+ overflow-y: auto;
20
+
10
21
  border-color: var(--tls-tabs-border-color);
11
22
  }
12
23
 
@@ -24,7 +24,19 @@
24
24
 
25
25
  border-color: var(--tls-tabs-border-color);
26
26
 
27
+ // Tabs that exceed the header's extent scroll instead of shrinking
28
+ // (e.g. a horizontal strip on a narrow viewport). The scrollbar is
29
+ // hidden so it never covers the active-tab indicator line, while
30
+ // wheel/touch/keyboard scrolling stays available.
31
+ scrollbar-width: none;
32
+
33
+ &::-webkit-scrollbar {
34
+ display: none;
35
+ }
36
+
27
37
  &__item {
38
+ flex-shrink: 0;
39
+
28
40
  display: flex;
29
41
 
30
42
  color: var(--tls-tabs-label-color);
@@ -53,6 +65,8 @@
53
65
  }
54
66
 
55
67
  &-button {
68
+ width: 100%;
69
+
56
70
  padding: var(--spacing-3) var(--spacing-6);
57
71
 
58
72
  // TODO: use mixin
@@ -0,0 +1,2 @@
1
+ @forward 'toast';
2
+ @forward 'toast-color';
@@ -0,0 +1,43 @@
1
+ .tls-toast {
2
+ &.tls-toast--primary {
3
+ --tls-toast-color: var(--color-on-primary-container);
4
+ --tls-toast-background-color: var(--color-primary-container);
5
+ --tls-toast-icon-color: var(--color-primary);
6
+ }
7
+
8
+ &.tls-toast--secondary {
9
+ --tls-toast-color: var(--color-on-secondary-container);
10
+ --tls-toast-background-color: var(--color-secondary-container);
11
+ --tls-toast-icon-color: var(--color-secondary);
12
+ }
13
+
14
+ &.tls-toast--tertiary {
15
+ --tls-toast-color: var(--color-on-tertiary-container);
16
+ --tls-toast-background-color: var(--color-tertiary-container);
17
+ --tls-toast-icon-color: var(--color-tertiary);
18
+ }
19
+
20
+ &.tls-toast--success {
21
+ --tls-toast-color: var(--color-on-success-container);
22
+ --tls-toast-background-color: var(--color-success-container);
23
+ --tls-toast-icon-color: var(--color-success);
24
+ }
25
+
26
+ &.tls-toast--info {
27
+ --tls-toast-color: var(--color-on-info-container);
28
+ --tls-toast-background-color: var(--color-info-container);
29
+ --tls-toast-icon-color: var(--color-info);
30
+ }
31
+
32
+ &.tls-toast--warning {
33
+ --tls-toast-color: var(--color-on-warning-container);
34
+ --tls-toast-background-color: var(--color-warning-container);
35
+ --tls-toast-icon-color: var(--color-warning);
36
+ }
37
+
38
+ &.tls-toast--danger {
39
+ --tls-toast-color: var(--color-on-danger-container);
40
+ --tls-toast-background-color: var(--color-danger-container);
41
+ --tls-toast-icon-color: var(--color-danger);
42
+ }
43
+ }
@@ -0,0 +1,226 @@
1
+ @use '../../mixins' as mixins;
2
+
3
+ @keyframes tls-toast-fade {
4
+ from {
5
+ opacity: 0;
6
+ }
7
+
8
+ to {
9
+ opacity: 1;
10
+ }
11
+ }
12
+
13
+ @keyframes tls-toast-progress {
14
+ from {
15
+ width: 100%;
16
+ }
17
+
18
+ to {
19
+ width: 0%;
20
+ }
21
+ }
22
+
23
+ .tls-toast-outlet {
24
+ position: fixed;
25
+ inset: 0;
26
+
27
+ pointer-events: none;
28
+ }
29
+
30
+ .tls-toast-region {
31
+ --tls-toast-region-inset: var(--spacing-4);
32
+ --tls-toast-width: 360px;
33
+
34
+ position: absolute;
35
+
36
+ width: var(--tls-toast-width);
37
+ max-width: calc(100vw - var(--tls-toast-region-inset) * 2);
38
+
39
+ pointer-events: auto;
40
+
41
+ &--top {
42
+ inset-block-start: var(--tls-toast-region-inset);
43
+ }
44
+
45
+ &--bottom {
46
+ inset-block-end: var(--tls-toast-region-inset);
47
+ }
48
+
49
+ &--start {
50
+ inset-inline-start: var(--tls-toast-region-inset);
51
+ }
52
+
53
+ &--end {
54
+ inset-inline-end: var(--tls-toast-region-inset);
55
+ }
56
+
57
+ &--center {
58
+ inset-inline: 0;
59
+
60
+ margin-inline: auto;
61
+ }
62
+
63
+ // Toasts are anchored to the region's block edge and overlap there; the outlet
64
+ // offsets them with transforms. The scale origin sits on that same edge so the
65
+ // pile shrinks toward the anchor.
66
+ &--top .tls-toast {
67
+ inset-block-start: 0;
68
+
69
+ transform-origin: top center;
70
+ }
71
+
72
+ &--bottom .tls-toast {
73
+ inset-block-end: 0;
74
+
75
+ transform-origin: bottom center;
76
+ }
77
+ }
78
+
79
+ .tls-toast {
80
+ position: absolute;
81
+ inset-inline: 0;
82
+
83
+ @include mixins.motion(essential) {
84
+ transition: transform var(--motion-default) var(--motion-ease-out);
85
+
86
+ &--enter {
87
+ animation: tls-toast-fade var(--motion-default) var(--motion-ease-out) both;
88
+ }
89
+
90
+ &--leave {
91
+ animation: tls-toast-fade var(--motion-default) var(--motion-ease-in) reverse both;
92
+ }
93
+ }
94
+
95
+ &__surface {
96
+ position: relative;
97
+
98
+ padding: var(--spacing-3) var(--spacing-4);
99
+
100
+ display: flex;
101
+ align-items: flex-start;
102
+ gap: var(--spacing-3);
103
+
104
+ border-radius: var(--radius-md);
105
+
106
+ background-color: var(--tls-toast-background-color);
107
+ box-shadow: var(--shadow-md);
108
+ opacity: var(--tls-toast-depth-opacity, 1);
109
+
110
+ color: var(--tls-toast-color);
111
+
112
+ @include mixins.motion(essential) {
113
+ transition: opacity var(--motion-default) var(--motion-ease-out);
114
+ }
115
+ }
116
+
117
+ &__icon {
118
+ width: 16px;
119
+ height: 16px;
120
+
121
+ flex-shrink: 0;
122
+
123
+ display: flex;
124
+
125
+ color: var(--tls-toast-icon-color);
126
+ }
127
+
128
+ &__body {
129
+ min-width: 0;
130
+
131
+ display: flex;
132
+ flex-direction: column;
133
+ gap: var(--spacing-1);
134
+
135
+ flex: 1;
136
+ }
137
+
138
+ &__title {
139
+ margin: 0;
140
+
141
+ font-size: var(--font-size-sm);
142
+ font-weight: var(--font-weight-semibold);
143
+ }
144
+
145
+ &__message {
146
+ margin: 0;
147
+
148
+ font-size: var(--font-size-sm);
149
+ line-height: 1.4;
150
+ overflow-wrap: anywhere;
151
+ }
152
+
153
+ &__action {
154
+ flex-shrink: 0;
155
+
156
+ margin-inline-start: calc(var(--spacing-2) * -1);
157
+ }
158
+
159
+ &__close {
160
+ flex-shrink: 0;
161
+
162
+ width: 28px;
163
+ height: 28px;
164
+
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: center;
168
+
169
+ border: none;
170
+ border-radius: var(--radius-sm);
171
+
172
+ background-color: transparent;
173
+
174
+ color: inherit;
175
+
176
+ cursor: pointer;
177
+
178
+ @include mixins.motion(essential) {
179
+ transition: background-color var(--motion-fast) var(--motion-ease-in-out);
180
+ }
181
+
182
+ &:hover {
183
+ background-color: rgb(var(--color-shadow) / 0.12);
184
+ }
185
+ }
186
+
187
+ &__close-icon {
188
+ width: 14px;
189
+ height: 14px;
190
+ }
191
+
192
+ // Countdown bar hugging the surface's block-end edge; its width animates from
193
+ // full to empty over the auto-dismiss delay. Only rendered under motion (the
194
+ // mixin hides it at the `none` level, so no misleading static bar is shown).
195
+ &__progress {
196
+ position: absolute;
197
+ inset-block-end: 0;
198
+ inset-inline-start: 0;
199
+
200
+ width: 100%;
201
+ height: 3px;
202
+
203
+ display: none;
204
+
205
+ border-end-start-radius: var(--radius-md);
206
+ border-end-end-radius: var(--radius-md);
207
+
208
+ background-color: var(--tls-toast-icon-color);
209
+ opacity: 0.9;
210
+
211
+ @include mixins.motion(essential) {
212
+ display: block;
213
+
214
+ animation: tls-toast-progress var(--tls-toast-duration, 5000ms) linear forwards;
215
+ }
216
+ }
217
+
218
+ // Freezes the bar while the stack is hovered / focused, in lockstep with the
219
+ // paused auto-dismiss timers. Gated by the same motion tier so it outranks the
220
+ // `animation` shorthand above (which resets `animation-play-state` to running).
221
+ &--paused &__progress {
222
+ @include mixins.motion(essential) {
223
+ animation-play-state: paused;
224
+ }
225
+ }
226
+ }
@@ -1,36 +1,6 @@
1
- .tls-toggle-group {
2
- &--primary {
3
- --tls-toggle-group-color: var(--color-primary);
4
- --tls-toggle-group-on-color: var(--color-on-primary);
5
- }
6
-
7
- &--secondary {
8
- --tls-toggle-group-color: var(--color-secondary);
9
- --tls-toggle-group-on-color: var(--color-on-secondary);
10
- }
11
-
12
- &--tertiary {
13
- --tls-toggle-group-color: var(--color-tertiary);
14
- --tls-toggle-group-on-color: var(--color-on-tertiary);
15
- }
16
-
17
- &--success {
18
- --tls-toggle-group-color: var(--color-success);
19
- --tls-toggle-group-on-color: var(--color-on-success);
20
- }
1
+ @use '../../mixins' as mixins;
21
2
 
22
- &--info {
23
- --tls-toggle-group-color: var(--color-info);
24
- --tls-toggle-group-on-color: var(--color-on-info);
25
- }
26
-
27
- &--warning {
28
- --tls-toggle-group-color: var(--color-warning);
29
- --tls-toggle-group-on-color: var(--color-on-warning);
30
- }
31
-
32
- &--danger {
33
- --tls-toggle-group-color: var(--color-danger);
34
- --tls-toggle-group-on-color: var(--color-on-danger);
35
- }
3
+ .tls-toggle-group {
4
+ @include mixins.color-variants('tls-toggle-group', $tonal: true);
5
+ @include mixins.tonal-swap('tls-toggle-group');
36
6
  }
@@ -1,36 +1,5 @@
1
- .tls-tooltip {
2
- &.tls-tooltip--primary {
3
- --tls-tooltip-on-color: var(--color-on-primary);
4
- --tls-tooltip-color: var(--color-primary);
5
- }
6
-
7
- &.tls-tooltip--secondary {
8
- --tls-tooltip-on-color: var(--color-on-secondary);
9
- --tls-tooltip-color: var(--color-secondary);
10
- }
11
-
12
- &.tls-tooltip--tertiary {
13
- --tls-tooltip-on-color: var(--color-on-tertiary);
14
- --tls-tooltip-color: var(--color-tertiary);
15
- }
16
-
17
- &.tls-tooltip--success {
18
- --tls-tooltip-on-color: var(--color-on-success);
19
- --tls-tooltip-color: var(--color-success);
20
- }
1
+ @use '../../mixins' as mixins;
21
2
 
22
- &.tls-tooltip--info {
23
- --tls-tooltip-on-color: var(--color-on-info);
24
- --tls-tooltip-color: var(--color-info);
25
- }
26
-
27
- &.tls-tooltip--warning {
28
- --tls-tooltip-on-color: var(--color-on-warning);
29
- --tls-tooltip-color: var(--color-warning);
30
- }
31
-
32
- &.tls-tooltip--danger {
33
- --tls-tooltip-on-color: var(--color-on-danger);
34
- --tls-tooltip-color: var(--color-danger);
35
- }
3
+ .tls-tooltip {
4
+ @include mixins.color-variants('tls-tooltip');
36
5
  }
@@ -0,0 +1,39 @@
1
+ $colors: primary, secondary, tertiary, success, info, warning, danger;
2
+
3
+ // Maps each theme hue onto a component's --<block>-color / --<block>-on-color pair.
4
+ // Expects the component to consume those two custom properties.
5
+ //
6
+ // With $tonal: true, each hue additionally exposes the container token pair
7
+ // (--<block>-color-container / --<block>-on-color-container) for a lower-emphasis,
8
+ // tonal appearance.
9
+ //
10
+ // $modifier prefixes the hue classes, so a component with a second, independently
11
+ // colored state can reuse the same mapping (e.g. $modifier: 'checked-' emits
12
+ // `--checked-primary` … `--checked-danger`).
13
+ @mixin color-variants($block, $tonal: false, $modifier: '') {
14
+ @each $color in $colors {
15
+ &.#{$block}--#{$modifier}#{$color} {
16
+ --#{$block}-color: var(--color-#{$color});
17
+ --#{$block}-on-color: var(--color-on-#{$color});
18
+
19
+ @if $tonal {
20
+ --#{$block}-color-container: var(--color-#{$color}-container);
21
+ --#{$block}-on-color-container: var(--color-on-#{$color}-container);
22
+ }
23
+ }
24
+ }
25
+ }
26
+
27
+ // Convenience for components with a single variant layer: a `tonal` class that swaps
28
+ // the active pair to the container pair, so one fill rule serves both filled and
29
+ // tonal. Requires color-variants(..., $tonal: true).
30
+ //
31
+ // Do NOT use for a component with a second variant layer (e.g. chip's base vs
32
+ // checked variant): swapping a shared token leaks the tonal treatment across the
33
+ // state boundary. Such components consume the container pair directly per rule.
34
+ @mixin tonal-swap($block, $modifier: '') {
35
+ &.#{$block}--#{$modifier}tonal {
36
+ --#{$block}-color: var(--#{$block}-color-container);
37
+ --#{$block}-on-color: var(--#{$block}-on-color-container);
38
+ }
39
+ }
@@ -1,3 +1,4 @@
1
+ @forward 'color-variants';
1
2
  @forward 'focus-ring';
2
3
  @forward 'motion';
3
4
  @forward 'panel-open';