Skip to content

Commit 56c7ff6

Browse files
authored
fix(material/slide-toggle): prevent icon label text-spacing cutoff (angular#33559)
Update slide-toggle icon styles to match the spacing-safe behavior used in mat-button so text spacing does not clip icon labels. Fixes b/520469171
1 parent 43a87a4 commit 56c7ff6

5 files changed

Lines changed: 30 additions & 1 deletion

File tree

src/dev-app/slide-toggle/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ ng_project(
1313
"//:node_modules/@angular/core",
1414
"//:node_modules/@angular/forms",
1515
"//src/material/button",
16+
"//src/material/icon",
1617
"//src/material/slide-toggle",
1718
],
1819
)

src/dev-app/slide-toggle/slide-toggle-demo.html

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,21 @@
2222
>No icon</mat-slide-toggle
2323
>
2424

25+
<p>With icon as part of the label.</p>
26+
27+
<mat-slide-toggle [(ngModel)]="firstToggle">
28+
<span class="demo-slide-toggle-label-with-icon">
29+
<mat-icon>notifications</mat-icon>
30+
Notifications
31+
</span>
32+
</mat-slide-toggle>
33+
<mat-slide-toggle labelPosition="before" [(ngModel)]="firstToggle">
34+
<span class="demo-slide-toggle-label-with-icon">
35+
<mat-icon>volume_up</mat-icon>
36+
Sounds
37+
</span>
38+
</mat-slide-toggle>
39+
2540
<p>With no label.</p>
2641

2742
<mat-slide-toggle aria-label="Toggle only" hideLabel color="primary" [(ngModel)]="firstToggle" />

src/dev-app/slide-toggle/slide-toggle-demo.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,9 @@
1313
border: 1px solid #ccc;
1414
padding: 16px;
1515
}
16+
17+
.demo-slide-toggle-label-with-icon {
18+
display: inline-flex;
19+
align-items: center;
20+
gap: 4px;
21+
}

src/dev-app/slide-toggle/slide-toggle-demo.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@
99
import {Component} from '@angular/core';
1010
import {FormsModule} from '@angular/forms';
1111
import {MatButtonModule} from '@angular/material/button';
12+
import {MatIconModule} from '@angular/material/icon';
1213
import {MatSlideToggleModule} from '@angular/material/slide-toggle';
1314

1415
@Component({
1516
selector: 'slide-toggle-demo',
1617
templateUrl: 'slide-toggle-demo.html',
1718
styleUrl: 'slide-toggle-demo.css',
18-
imports: [FormsModule, MatButtonModule, MatSlideToggleModule],
19+
imports: [FormsModule, MatButtonModule, MatIconModule, MatSlideToggleModule],
1920
})
2021
export class SlideToggleDemo {
2122
firstToggle = false;

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,12 @@ $fallbacks: m3-slide-toggle.get-tokens();
489489
// Remove the native outline since we use the ripple for focus indication.
490490
outline: 0;
491491

492+
& .mat-icon {
493+
// stylelint-disable material/no-prefixes
494+
min-height: fit-content;
495+
flex-shrink: 0;
496+
}
497+
492498
// The ripple needs extra specificity so the base ripple styling doesn't override its `position`.
493499
.mat-mdc-slide-toggle-ripple,
494500
.mdc-switch__ripple::after {

0 commit comments

Comments
 (0)