Skip to content

Commit 7856471

Browse files
committed
fix(material/slider): add tick mark to end of slider
add tick mark to end of slider for visual users to see end of slider. passes 3:1 color contrast ratio with background fixes b/286300099
1 parent d0cf8bf commit 7856471

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

src/material/slider/slider.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@
77
<div class="mdc-slider__track--active">
88
<div #trackActive class="mdc-slider__track--active_fill"></div>
99
</div>
10+
<div class="mdc-slider__end-tick-mark-container">
11+
@if (_cachedWidth) {
12+
@for (tickMark of _tickMarks; track i; let i = $index) {
13+
<div
14+
class="mdc-slider__tick-mark--inactive"
15+
[style]="_calcEndTickMarkTransform(i)">
16+
</div>
17+
}
18+
}
19+
</div>
1020
@if (showTickMarks) {
1121
<div class="mdc-slider__tick-marks" #tickMarkContainer>
1222
@if (_cachedWidth) {

src/material/slider/slider.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ $_mat-slots: (tokens-mat-slider.$prefix, tokens-mat-slider.get-token-slots());
276276
}
277277
}
278278

279+
.mdc-slider__end-tick-mark-container,
279280
.mdc-slider__tick-marks {
280281
align-items: center;
281282
box-sizing: border-box;

src/material/slider/slider.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,10 +587,29 @@ export class MatSlider implements AfterViewInit, OnDestroy, _MatSlider {
587587
trackStyle.transform = styles.transform;
588588
}
589589

590+
/**
591+
* Returns the translateX positioning for the end tick mark to visually
592+
* indicate the end of the slider
593+
* */
594+
_calcEndTickMarkTransform(index: number): string {
595+
// Only show the last tick mark
596+
if (index === this._tickMarks.length - 1) {
597+
const translateX = this._tickMarkTrackWidth;
598+
return `transform: translateX(${translateX}px)`;
599+
} else {
600+
// Hide other tick marks
601+
return 'display: none';
602+
}
603+
}
604+
590605
/** Returns the translateX positioning for a tick mark based on it's index. */
591606
_calcTickMarkTransform(index: number): string {
592607
// TODO(wagnermaciel): See if we can avoid doing this and just using flex to position these.
593608
const translateX = index * (this._tickMarkTrackWidth / (this._tickMarks.length - 1));
609+
// Don't show last tick mark twice since last tick mark is permanent
610+
if (index === this._tickMarks.length - 1) {
611+
return `translateX(-100%)`;
612+
}
594613
return `translateX(${translateX}px`;
595614
}
596615

tools/public_api_guard/material/slider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export class MatSlider implements AfterViewInit, OnDestroy, _MatSlider {
2828
_cachedLeft: number;
2929
// (undocumented)
3030
_cachedWidth: number;
31+
_calcEndTickMarkTransform(index: number): string;
3132
_calcTickMarkTransform(index: number): string;
3233
// (undocumented)
3334
readonly _cdr: ChangeDetectorRef;

0 commit comments

Comments
 (0)