Skip to content

Commit d946055

Browse files
committed
perf(material/slide-toggle): Optimize :state descendant selectors
1 parent 29e67e6 commit d946055

File tree

1 file changed

+59
-48
lines changed

1 file changed

+59
-48
lines changed

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

Lines changed: 59 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -113,22 +113,22 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
113113
}
114114

115115
@include token-utils.use-tokens($_mdc-slots...) {
116-
.mdc-switch:enabled:hover:not(:focus):not(:active) & {
116+
.mdc-switch:enabled:hover:not(:focus):not(:active) > & {
117117
@include token-utils.create-token-slot(background, unselected-hover-track-color);
118118
}
119119

120-
.mdc-switch:enabled:focus:not(:active) & {
120+
.mdc-switch:enabled:focus:not(:active) > & {
121121
@include token-utils.create-token-slot(background, unselected-focus-track-color);
122122
}
123123

124-
.mdc-switch:enabled:active & {
124+
.mdc-switch:enabled:active > & {
125125
@include token-utils.create-token-slot(background, unselected-pressed-track-color);
126126
}
127127

128-
#{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
129-
#{$_interactive-disabled-selector}:focus:not(:active) &,
130-
#{$_interactive-disabled-selector}:active &,
131-
.mdc-switch.mdc-switch--disabled & {
128+
#{$_interactive-disabled-selector}:hover:not(:focus):not(:active) > &,
129+
#{$_interactive-disabled-selector}:focus:not(:active) > &,
130+
#{$_interactive-disabled-selector}:active > &,
131+
.mdc-switch.mdc-switch--disabled > & {
132132
@include token-utils.create-token-slot(background, disabled-unselected-track-color);
133133
}
134134
}
@@ -162,22 +162,22 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
162162
}
163163

164164
@include token-utils.use-tokens($_mdc-slots...) {
165-
.mdc-switch:enabled:hover:not(:focus):not(:active) & {
165+
.mdc-switch:enabled:hover:not(:focus):not(:active) > & {
166166
@include token-utils.create-token-slot(background, selected-hover-track-color);
167167
}
168168

169-
.mdc-switch:enabled:focus:not(:active) & {
169+
.mdc-switch:enabled:focus:not(:active) > & {
170170
@include token-utils.create-token-slot(background, selected-focus-track-color);
171171
}
172172

173-
.mdc-switch:enabled:active & {
173+
.mdc-switch:enabled:active > & {
174174
@include token-utils.create-token-slot(background, selected-pressed-track-color);
175175
}
176176

177-
#{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
178-
#{$_interactive-disabled-selector}:focus:not(:active) &,
179-
#{$_interactive-disabled-selector}:active &,
180-
.mdc-switch.mdc-switch--disabled & {
177+
#{$_interactive-disabled-selector}:hover:not(:focus):not(:active) > &,
178+
#{$_interactive-disabled-selector}:focus:not(:active) > &,
179+
#{$_interactive-disabled-selector}:active > &,
180+
.mdc-switch.mdc-switch--disabled > & {
181181
@include token-utils.create-token-slot(background, disabled-selected-track-color);
182182
}
183183
}
@@ -266,16 +266,19 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
266266
@include token-utils.create-token-slot(height, with-icon-handle-size);
267267
}
268268

269-
.mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) & {
269+
// stylelint-disable-next-line max-line-length
270+
.mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
270271
@include token-utils.create-token-slot(width, pressed-handle-size);
271272
@include token-utils.create-token-slot(height, pressed-handle-size);
272273
}
273274

274-
.mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) & {
275+
// stylelint-disable-next-line max-line-length
276+
.mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
275277
@include token-utils.create-token-slot(margin, selected-pressed-handle-horizontal-margin);
276278
}
277279

278-
.mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) & {
280+
// stylelint-disable-next-line max-line-length
281+
.mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
279282
@include token-utils.create-token-slot(margin, unselected-pressed-handle-horizontal-margin);
280283
}
281284

@@ -310,46 +313,49 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
310313

311314
@include token-utils.use-tokens($_mdc-slots...) {
312315
&::after {
313-
.mdc-switch--selected:enabled & {
316+
.mdc-switch--selected:enabled > .mdc-switch__handle-track > & {
314317
@include token-utils.create-token-slot(background, selected-handle-color);
315318
}
316319

317-
.mdc-switch--selected:enabled:hover:not(:focus):not(:active) & {
320+
.mdc-switch--selected:enabled:hover:not(:focus):not(:active) > .mdc-switch__handle-track > & {
318321
@include token-utils.create-token-slot(background, selected-hover-handle-color);
319322
}
320323

321-
.mdc-switch--selected:enabled:focus:not(:active) & {
324+
.mdc-switch--selected:enabled:focus:not(:active) > .mdc-switch__handle-track > & {
322325
@include token-utils.create-token-slot(background, selected-focus-handle-color);
323326
}
324327

325-
.mdc-switch--selected:enabled:active & {
328+
.mdc-switch--selected:enabled:active > .mdc-switch__handle-track > & {
326329
@include token-utils.create-token-slot(background, selected-pressed-handle-color);
327330
}
328331

329-
#{$_interactive-disabled-selector}.mdc-switch--selected:hover:not(:focus):not(:active) &,
330-
#{$_interactive-disabled-selector}.mdc-switch--selected:focus:not(:active) &,
331-
#{$_interactive-disabled-selector}.mdc-switch--selected:active &,
332-
.mdc-switch--selected.mdc-switch--disabled & {
333-
@include token-utils.create-token-slot(background, disabled-selected-handle-color);
332+
#{$_interactive-disabled-selector}.mdc-switch--selected:hover:not(:focus):not(:active),
333+
#{$_interactive-disabled-selector}.mdc-switch--selected:focus:not(:active),
334+
#{$_interactive-disabled-selector}.mdc-switch--selected:active,
335+
.mdc-switch--selected.mdc-switch--disabled {
336+
> .mdc-switch__handle-track > & {
337+
@include token-utils.create-token-slot(background, disabled-selected-handle-color);
338+
}
334339
}
335340

336-
.mdc-switch--unselected:enabled & {
341+
.mdc-switch--unselected:enabled > .mdc-switch__handle-track > & {
337342
@include token-utils.create-token-slot(background, unselected-handle-color);
338343
}
339344

340-
.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) & {
345+
// stylelint-disable-next-line max-line-length
346+
.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) > .mdc-switch__handle-track > & {
341347
@include token-utils.create-token-slot(background, unselected-hover-handle-color);
342348
}
343349

344-
.mdc-switch--unselected:enabled:focus:not(:active) & {
350+
.mdc-switch--unselected:enabled:focus:not(:active) > .mdc-switch__handle-track > & {
345351
@include token-utils.create-token-slot(background, unselected-focus-handle-color);
346352
}
347353

348-
.mdc-switch--unselected:enabled:active & {
354+
.mdc-switch--unselected:enabled:active > .mdc-switch__handle-track > & {
349355
@include token-utils.create-token-slot(background, unselected-pressed-handle-color);
350356
}
351357

352-
.mdc-switch--unselected.mdc-switch--disabled & {
358+
.mdc-switch--unselected.mdc-switch--disabled > .mdc-switch__handle-track > & {
353359
@include token-utils.create-token-slot(background, disabled-unselected-handle-color);
354360
}
355361
}
@@ -369,15 +375,17 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
369375
top: 0;
370376

371377
@include token-utils.use-tokens($_mdc-slots...) {
372-
.mdc-switch:enabled & {
378+
.mdc-switch:enabled > .mdc-switch__handle-track > .mdc-switch__handle > & {
373379
@include token-utils.create-token-slot(box-shadow, handle-elevation-shadow);
374380
}
375381

376-
#{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
377-
#{$_interactive-disabled-selector}:focus:not(:active) &,
378-
#{$_interactive-disabled-selector}:active &,
379-
.mdc-switch.mdc-switch--disabled & {
380-
@include token-utils.create-token-slot(box-shadow, disabled-handle-elevation-shadow);
382+
#{$_interactive-disabled-selector}:hover:not(:focus):not(:active),
383+
#{$_interactive-disabled-selector}:focus:not(:active),
384+
#{$_interactive-disabled-selector}:active,
385+
.mdc-switch.mdc-switch--disabled {
386+
> .mdc-switch__handle-track > .mdc-switch__handle > & {
387+
@include token-utils.create-token-slot(box-shadow, disabled-handle-elevation-shadow);
388+
}
381389
}
382390
}
383391
}
@@ -406,7 +414,7 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
406414
display: block;
407415
}
408416

409-
.mdc-switch:hover & {
417+
.mdc-switch:hover > .mdc-switch__handle-track > .mdc-switch__handle > & {
410418
opacity: 0.04;
411419
transition: 75ms opacity cubic-bezier(0, 0, 0.2, 1);
412420
}
@@ -417,32 +425,35 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
417425
}
418426

419427
@include token-utils.use-tokens($_mdc-slots...) {
420-
#{$_interactive-disabled-selector}:enabled:focus &,
421-
#{$_interactive-disabled-selector}:enabled:active &,
422-
#{$_interactive-disabled-selector}:enabled:hover:not(:focus) &,
423-
.mdc-switch--unselected:enabled:hover:not(:focus) & {
424-
@include token-utils.create-token-slot(background, unselected-hover-state-layer-color);
428+
#{$_interactive-disabled-selector}:enabled:focus,
429+
#{$_interactive-disabled-selector}:enabled:active,
430+
#{$_interactive-disabled-selector}:enabled:hover:not(:focus),
431+
.mdc-switch--unselected:enabled:hover:not(:focus) {
432+
> .mdc-switch__handle-track > .mdc-switch__handle > & {
433+
@include token-utils.create-token-slot(background, unselected-hover-state-layer-color);
434+
}
425435
}
426436

427-
.mdc-switch--unselected:enabled:focus & {
437+
.mdc-switch--unselected:enabled:focus > .mdc-switch__handle-track > .mdc-switch__handle > & {
428438
@include token-utils.create-token-slot(background, unselected-focus-state-layer-color);
429439
}
430440

431-
.mdc-switch--unselected:enabled:active & {
441+
.mdc-switch--unselected:enabled:active > .mdc-switch__handle-track > .mdc-switch__handle > & {
432442
@include token-utils.create-token-slot(background, unselected-pressed-state-layer-color);
433443
@include token-utils.create-token-slot(opacity, unselected-pressed-state-layer-opacity);
434444
transition: opacity 75ms linear;
435445
}
436446

437-
.mdc-switch--selected:enabled:hover:not(:focus) & {
447+
// stylelint-disable-next-line max-line-length
448+
.mdc-switch--selected:enabled:hover:not(:focus) > .mdc-switch__handle-track > .mdc-switch__handle > & {
438449
@include token-utils.create-token-slot(background, selected-hover-state-layer-color);
439450
}
440451

441-
.mdc-switch--selected:enabled:focus & {
452+
.mdc-switch--selected:enabled:focus > .mdc-switch__handle-track > .mdc-switch__handle > & {
442453
@include token-utils.create-token-slot(background, selected-focus-state-layer-color);
443454
}
444455

445-
.mdc-switch--selected:enabled:active & {
456+
.mdc-switch--selected:enabled:active > .mdc-switch__handle-track > .mdc-switch__handle > & {
446457
@include token-utils.create-token-slot(background, selected-pressed-state-layer-color);
447458
@include token-utils.create-token-slot(opacity, selected-pressed-state-layer-opacity);
448459
transition: opacity 75ms linear;

0 commit comments

Comments
 (0)