@@ -47,43 +47,60 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms";
4747@Component ( {
4848 selector : "ibm-slider" ,
4949 template : `
50- <div
51- class="bx--slider"
52- [ngClass]="{'bx--slider--disabled': disabled}">
50+ <ng-container *ngIf="!skeleton; else skeletonTemplate">
5351 <div
54- #thumb
55- class="bx--slider__thumb"
56- tabindex="0"
57- [ngStyle]="{'left.%': getFractionComplete() * 100}"
58- (mousedown)="onMouseDown($event)"
59- (keydown)="onKeyDown($event)">
52+ class="bx--slider"
53+ [ngClass]="{'bx--slider--disabled': disabled}">
54+ <div
55+ #thumb
56+ class="bx--slider__thumb"
57+ tabindex="0"
58+ [ngStyle]="{'left.%': getFractionComplete() * 100}"
59+ (mousedown)="onMouseDown($event)"
60+ (keydown)="onKeyDown($event)">
61+ </div>
62+ <div
63+ #track
64+ class="bx--slider__track"
65+ (click)="onClick($event)">
66+ </div>
67+ <div
68+ class="bx--slider__filled-track"
69+ [ngStyle]="{transform: 'translate(0%, -50%)' + scaleX(getFractionComplete())}">
70+ </div>
71+ <input
72+ #range
73+ aria-label="slider"
74+ class="bx--slider__input"
75+ type="range"
76+ [step]="step"
77+ [min]="min"
78+ [max]="max"
79+ [value]="value">
6080 </div>
61- <div
62- #track
63- class="bx--slider__track"
64- (click)="onClick($event)">
65- </div>
66- <div
67- class="bx--slider__filled-track"
68- [ngStyle]="{transform: 'translate(0%, -50%)' + scaleX(getFractionComplete())}">
81+ <label [id]="bottomRangeId" class="bx--slider__range-label">
82+ <ng-content select="[minLabel]"></ng-content>
83+ </label>
84+ <label [id]="topRangeId" class="bx--slider__range-label">
85+ <ng-content select="[maxLabel]"></ng-content>
86+ </label>
87+ <ng-content select="input"></ng-content>
88+ </ng-container>
89+
90+ <ng-template #skeletonTemplate>
91+ <div class="bx--form-item">
92+ <label class="bx--label bx--skeleton"></label>
93+ <div class="bx--slider-container bx--skeleton">
94+ <span class="bx--slider__range-label"></span>
95+ <div class="bx--slider">
96+ <div class="bx--slider__thumb"></div>
97+ <div class="bx--slider__track"></div>
98+ <div class="bx--slider__filled-track"></div>
99+ </div>
100+ <span class="bx--slider__range-label"></span>
101+ </div>
69102 </div>
70- <input
71- #range
72- aria-label="slider"
73- class="bx--slider__input"
74- type="range"
75- [step]="step"
76- [min]="min"
77- [max]="max"
78- [value]="value">
79- </div>
80- <label [id]="bottomRangeId" class="bx--slider__range-label">
81- <ng-content select="[minLabel]"></ng-content>
82- </label>
83- <label [id]="topRangeId" class="bx--slider__range-label">
84- <ng-content select="[maxLabel]"></ng-content>
85- </label>
86- <ng-content select="input"></ng-content>
103+ </ng-template>
87104 ` ,
88105 providers : [
89106 {
@@ -130,6 +147,8 @@ export class Slider implements AfterViewInit, OnDestroy, ControlValueAccessor {
130147 @Input ( ) id = `slider-${ Slider . count ++ } ` ;
131148 /** Value used to "multiply" the `step` when using arrow keys to select values */
132149 @Input ( ) shiftMultiplier = 4 ;
150+ /** Set to `true` for a loading slider */
151+ @Input ( ) skeleton = false ;
133152 /** Disables the range visually and functionally */
134153 @Input ( ) set disabled ( v ) {
135154 this . _disabled = v ;
@@ -214,6 +233,10 @@ export class Slider implements AfterViewInit, OnDestroy, ControlValueAccessor {
214233
215234 /** Returns the amount of "completeness" as a fraction of the total track width */
216235 getFractionComplete ( ) {
236+ if ( ! this . track ) {
237+ return 0 ;
238+ }
239+
217240 const trackWidth = this . track . nativeElement . getBoundingClientRect ( ) . width ;
218241 return this . slidAmount / trackWidth ;
219242 }
@@ -236,6 +259,10 @@ export class Slider implements AfterViewInit, OnDestroy, ControlValueAccessor {
236259
237260 /** Converts a given "real" value to a px value we can update the view with */
238261 convertToPx ( value ) {
262+ if ( ! this . track ) {
263+ return 0 ;
264+ }
265+
239266 const trackWidth = this . track . nativeElement . getBoundingClientRect ( ) . width ;
240267 if ( value >= this . max ) {
241268 return trackWidth ;
0 commit comments