Skip to content

Commit fb86562

Browse files
authored
refactor(material/slide-toggle): simplify structural styles (angular#29407)
Reworks the structural styles for the slide toggle to be smaller and easier to maintain.
1 parent e022ec0 commit fb86562

File tree

6 files changed

+506
-206
lines changed

6 files changed

+506
-206
lines changed

src/material/core/tokens/m2/mdc/_switch.scss

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,16 @@ $prefix: (mdc, switch);
5353
unselected-hover-state-layer-opacity: 0.04,
5454
// Opacity of ripple when unselected and pressed.
5555
unselected-pressed-state-layer-opacity: 0.1,
56+
57+
// Unused tokens
58+
handle-elevation: null,
59+
handle-shadow-color: null,
60+
disabled-handle-elevation: null,
5661
);
5762
}
5863

5964
// Tokens that can be configured through Angular Material's color theming API.
6065
@function get-color-tokens($theme) {
61-
$elevation: inspection.get-theme-color($theme, foreground, elevation);
6266
$is-dark: inspection.get-theme-type($theme) == dark;
6367
$on-surface: if($is-dark, #f5f5f5, #424242);
6468
$hairline: if($is-dark, #616161, #e0e0e0);
@@ -87,12 +91,6 @@ $prefix: (mdc, switch);
8791
disabled-unselected-track-color: $on-surface,
8892
// Color of slide-toggle handle's surface.
8993
handle-surface-color: surface,
90-
// Elevation level for handle.
91-
handle-elevation: 1,
92-
// Color of handle's shadow
93-
handle-shadow-color: if($elevation != null, $elevation, elevation.$color),
94-
// Elevation level for handle when disabled.
95-
disabled-handle-elevation: 0,
9694
// Color of icon (ex. checkmark) when selected
9795
selected-icon-color: $icon-color,
9896
// Color of handle when unselected and focused.
@@ -119,6 +117,10 @@ $prefix: (mdc, switch);
119117
unselected-pressed-track-color: $hairline,
120118
// Color of track when selected.
121119
unselected-track-color: $hairline,
120+
// Elevation level for handle.
121+
handle-elevation-shadow: elevation.get-box-shadow(1),
122+
// Elevation level for handle when disabled.
123+
disabled-handle-elevation-shadow: elevation.get-box-shadow(0),
122124
)
123125
);
124126
}

src/material/core/tokens/m3/mdc/_switch.scss

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
@use 'sass:map';
2+
@use '../../../style/elevation';
23
@use '../../token-utils';
34

45
// The prefix used to generate the fully qualified name for tokens in this file.
@@ -10,7 +11,17 @@ $prefix: (mdc, switch);
1011
/// @param {Map} $token-slots Possible token slots
1112
/// @return {Map} A set of tokens for the MDC switch
1213
@function get-tokens($systems, $exclude-hardcoded, $token-slots) {
13-
$mdc-tokens: token-utils.get-mdc-tokens('switch', $systems, $exclude-hardcoded);
14+
$tokens: token-utils.get-mdc-tokens('switch', $systems, $exclude-hardcoded);
15+
$elevation-tokens: (handle-elevation, disabled-handle-elevation);
16+
17+
@each $token in $elevation-tokens {
18+
$elevation: map.get($tokens, $token);
19+
20+
@if ($elevation != null) {
21+
$tokens: map.set($tokens, $token + '-shadow', elevation.get-box-shadow($elevation));
22+
}
23+
}
24+
1425
$variant-tokens: (
1526
primary: (), // Default, no overrides needed
1627
secondary: (
@@ -66,5 +77,5 @@ $prefix: (mdc, switch);
6677
),
6778
);
6879

69-
@return token-utils.namespace-tokens($prefix, ($mdc-tokens, $variant-tokens), $token-slots);
80+
@return token-utils.namespace-tokens($prefix, ($tokens, $variant-tokens), $token-slots);
7081
}

src/material/core/tokens/tests/test-validate-tokens.scss

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
@use '@material/list/list-theme' as mdc-list-theme;
1414
@use '@material/tooltip/plain-tooltip-theme' as mdc-plaintip-tooltip-theme;
1515
@use '@material/radio/radio-theme' as mdc-radio-theme;
16-
@use '@material/switch/switch-theme' as mdc-switch-theme;
1716
@use '@material/tab-indicator/tab-indicator-theme' as mdc-tab-indicator-theme;
1817
@use '@material/snackbar/snackbar-theme' as mdc-snackbar-theme;
1918
@use '@material/slider/slider-theme' as mdc-slider-theme;
@@ -34,7 +33,6 @@
3433
@use '../m2/mdc/outlined-card' as tokens-mdc-outlined-card;
3534
@use '../m2/mdc/plain-tooltip' as tokens-mdc-plain-tooltip;
3635
@use '../m2/mdc/radio' as tokens-mdc-radio;
37-
@use '../m2/mdc/switch' as tokens-mdc-switch;
3836
@use '../m2/mdc/tab-indicator' as tokens-mdc-tab-indicator;
3937
@use '../m2/mdc/snack-bar' as tokens-mdc-snack-bar;
4038
@use '../m2/mdc/slider' as tokens-mdc-slider;
@@ -99,11 +97,6 @@
9997
$slots: tokens-mdc-radio.get-token-slots(),
10098
$reference: mdc-radio-theme.$light-theme
10199
);
102-
@include validate-slots(
103-
$component: 'm2.mdc.switch',
104-
$slots: tokens-mdc-switch.get-token-slots(),
105-
$reference: mdc-switch-theme.$light-theme
106-
);
107100
@include validate-slots(
108101
$component: 'm2.mdc.tab-indicator',
109102
$slots: tokens-mdc-tab-indicator.get-token-slots(),

src/material/slide-toggle/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ sass_binary(
4242
src = "slide-toggle.scss",
4343
deps = [
4444
"//:mdc_sass_lib",
45+
"//src/cdk:sass_lib",
4546
"//src/material/core:core_scss_lib",
4647
],
4748
)

src/material/slide-toggle/_slide-toggle-theme.scss

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
@use '@material/switch/switch-theme' as mdc-switch-theme;
21
@use '../core/style/sass-utils';
32
@use '../core/theming/theming';
43
@use '../core/theming/inspection';
@@ -16,12 +15,12 @@
1615
@include _theme-from-tokens(inspection.get-theme-tokens($theme, base));
1716
} @else {
1817
@include sass-utils.current-selector-or-root() {
19-
$mat-tokens: tokens-mat-switch.get-unthemable-tokens();
20-
$mdc-tokens: tokens-mdc-switch.get-unthemable-tokens();
21-
@include mdc-switch-theme.theme($mdc-tokens);
18+
@include token-utils.create-token-values(tokens-mdc-switch.$prefix,
19+
tokens-mdc-switch.get-unthemable-tokens());
2220

2321
.mat-mdc-slide-toggle {
24-
@include token-utils.create-token-values(tokens-mat-switch.$prefix, $mat-tokens);
22+
@include token-utils.create-token-values(tokens-mat-switch.$prefix,
23+
tokens-mat-switch.get-unthemable-tokens());
2524
}
2625
}
2726
}
@@ -36,13 +35,12 @@
3635
@if inspection.get-theme-version($theme) == 1 {
3736
@include _theme-from-tokens(inspection.get-theme-tokens($theme, color), $options...);
3837
} @else {
39-
$is-dark: inspection.get-theme-type($theme) == dark;
40-
$mat-tokens: tokens-mat-switch.get-color-tokens($theme);
4138
$mdc-tokens: tokens-mdc-switch.get-color-tokens($theme);
4239

4340
// Add values for MDC slide toggles tokens
4441
@include sass-utils.current-selector-or-root() {
45-
@include mdc-switch-theme.theme($mdc-tokens);
42+
@include token-utils.create-token-values(tokens-mdc-switch.$prefix,
43+
tokens-mdc-switch.get-color-tokens($theme));
4644

4745
// TODO(wagnermaciel): Use our token system to define this css variable.
4846
--mdc-switch-disabled-label-text-color: #{inspection.get-theme-color(
@@ -52,19 +50,18 @@
5250
)};
5351

5452
.mat-mdc-slide-toggle {
55-
@include token-utils.create-token-values(tokens-mat-switch.$prefix, $mat-tokens);
53+
@include token-utils.create-token-values(tokens-mat-switch.$prefix,
54+
tokens-mat-switch.get-color-tokens($theme));
5655

5756
// Change the color palette related tokens to accent or warn if applicable
5857
&.mat-accent {
59-
@include mdc-switch-theme.theme(
60-
tokens-mdc-switch.private-get-color-palette-color-tokens($theme, accent)
61-
);
58+
@include token-utils.create-token-values(tokens-mdc-switch.$prefix,
59+
tokens-mdc-switch.private-get-color-palette-color-tokens($theme, accent));
6260
}
6361

6462
&.mat-warn {
65-
@include mdc-switch-theme.theme(
66-
tokens-mdc-switch.private-get-color-palette-color-tokens($theme, warn)
67-
);
63+
@include token-utils.create-token-values(tokens-mdc-switch.$prefix,
64+
tokens-mdc-switch.private-get-color-palette-color-tokens($theme, warn));
6865
}
6966
}
7067
}
@@ -77,15 +74,13 @@
7774
@if inspection.get-theme-version($theme) == 1 {
7875
@include _theme-from-tokens(inspection.get-theme-tokens($theme, typography));
7976
} @else {
80-
$mat-tokens: tokens-mat-switch.get-typography-tokens($theme);
81-
$mdc-tokens: tokens-mdc-switch.get-typography-tokens($theme);
82-
83-
// Add values for MDC slide toggle tokens
8477
@include sass-utils.current-selector-or-root() {
85-
@include mdc-switch-theme.theme($mdc-tokens);
78+
@include token-utils.create-token-values(tokens-mdc-switch.$prefix,
79+
tokens-mdc-switch.get-typography-tokens($theme));
8680

8781
.mat-mdc-slide-toggle {
88-
@include token-utils.create-token-values(tokens-mat-switch.$prefix, $mat-tokens);
82+
@include token-utils.create-token-values(tokens-mat-switch.$prefix,
83+
tokens-mat-switch.get-typography-tokens($theme));
8984
}
9085
}
9186
}
@@ -98,12 +93,12 @@
9893
@include _theme-from-tokens(inspection.get-theme-tokens($theme, density));
9994
} @else {
10095
@include sass-utils.current-selector-or-root() {
101-
$mat-tokens: tokens-mat-switch.get-density-tokens($theme);
102-
$mdc-tokens: tokens-mdc-switch.get-density-tokens($theme);
103-
@include mdc-switch-theme.theme(tokens-mdc-switch.get-density-tokens($theme));
96+
@include token-utils.create-token-values(tokens-mdc-switch.$prefix,
97+
tokens-mdc-switch.get-density-tokens($theme));
10498

10599
.mat-mdc-slide-toggle {
106-
@include token-utils.create-token-values(tokens-mat-switch.$prefix, $mat-tokens);
100+
@include token-utils.create-token-values(tokens-mat-switch.$prefix,
101+
tokens-mat-switch.get-density-tokens($theme));
107102
}
108103
}
109104
}
@@ -158,6 +153,6 @@
158153
// only the mdc-switch does.
159154
$mat-switch-tokens: token-utils.get-tokens-for($tokens, tokens-mat-switch.$prefix);
160155

161-
@include mdc-switch-theme.theme($mdc-switch-tokens);
156+
@include token-utils.create-token-values(tokens-mdc-switch.$prefix, $mdc-switch-tokens);
162157
@include token-utils.create-token-values(tokens-mat-switch.$prefix, $mat-switch-tokens);
163158
}

0 commit comments

Comments
 (0)