blob: 74a5fd0525dc80dff4625f402c884713bd049182 [file] [log] [blame]
{"version":3,"file":"material-slider.umd.js","sources":["../../src/material/slider/slider-module.ts","../../src/material/slider/slider.ts","../../node_modules/tslib/tslib.es6.js"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {GestureConfig, MatCommonModule} from '@angular/material/core';\nimport {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';\nimport {MatSlider} from './slider';\n\n\n@NgModule({\n imports: [CommonModule, MatCommonModule],\n exports: [MatSlider, MatCommonModule],\n declarations: [MatSlider],\n providers: [{provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig}]\n})\nexport class MatSliderModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FocusMonitor, FocusOrigin} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {\n DOWN_ARROW,\n END,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW,\n hasModifierKey,\n} from '@angular/cdk/keycodes';\nimport {\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanColor,\n CanColorCtor,\n CanDisable,\n CanDisableCtor,\n HammerInput,\n HasTabIndex,\n HasTabIndexCtor,\n mixinColor,\n mixinDisabled,\n mixinTabIndex,\n} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\nimport {Subscription} from 'rxjs';\n\n/**\n * Visually, a 30px separation between tick marks looks best. This is very subjective but it is\n * the default separation we chose.\n */\nconst MIN_AUTO_TICK_SEPARATION = 30;\n\n/** The thumb gap size for a disabled slider. */\nconst DISABLED_THUMB_GAP = 7;\n\n/** The thumb gap size for a non-active slider at its minimum value. */\nconst MIN_VALUE_NONACTIVE_THUMB_GAP = 7;\n\n/** The thumb gap size for an active slider at its minimum value. */\nconst MIN_VALUE_ACTIVE_THUMB_GAP = 10;\n\n/**\n * Provider Expression that allows mat-slider to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)] and [formControl].\n * @docs-private\n */\nexport const MAT_SLIDER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlider),\n multi: true\n};\n\n/** A simple change event emitted by the MatSlider component. */\nexport class MatSliderChange {\n /** The MatSlider that changed. */\n source: MatSlider;\n\n /** The new value of the source slider. */\n value: number | null;\n}\n\n\n// Boilerplate for applying mixins to MatSlider.\n/** @docs-private */\nclass MatSliderBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatSliderMixinBase:\n HasTabIndexCtor &\n CanColorCtor &\n CanDisableCtor &\n typeof MatSliderBase =\n mixinTabIndex(mixinColor(mixinDisabled(MatSliderBase), 'accent'));\n\n/**\n * Allows users to select from a range of values by moving the slider thumb. It is similar in\n * behavior to the native `<input type=\"range\">` element.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-slider',\n exportAs: 'matSlider',\n providers: [MAT_SLIDER_VALUE_ACCESSOR],\n host: {\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n '(mousedown)': '_onMousedown($event)',\n '(keydown)': '_onKeydown($event)',\n '(keyup)': '_onKeyup()',\n '(mouseenter)': '_onMouseenter()',\n '(slide)': '_onSlide($event)',\n '(slideend)': '_onSlideEnd()',\n '(slidestart)': '_onSlideStart($event)',\n 'class': 'mat-slider',\n 'role': 'slider',\n '[tabIndex]': 'tabIndex',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuemin]': 'min',\n '[attr.aria-valuenow]': 'value',\n '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n '[class.mat-slider-disabled]': 'disabled',\n '[class.mat-slider-has-ticks]': 'tickInterval',\n '[class.mat-slider-horizontal]': '!vertical',\n '[class.mat-slider-axis-inverted]': '_invertAxis',\n '[class.mat-slider-sliding]': '_isSliding',\n '[class.mat-slider-thumb-label-showing]': 'thumbLabel',\n '[class.mat-slider-vertical]': 'vertical',\n '[class.mat-slider-min-value]': '_isMinValue',\n '[class.mat-slider-hide-last-tick]': 'disabled || _isMinValue && _thumbGap && _invertAxis',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n },\n templateUrl: 'slider.html',\n styleUrls: ['slider.css'],\n inputs: ['disabled', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatSlider extends _MatSliderMixinBase\n implements ControlValueAccessor, OnDestroy, CanDisable, CanColor, OnInit, HasTabIndex {\n /** Whether the slider is inverted. */\n @Input()\n get invert(): boolean { return this._invert; }\n set invert(value: boolean) {\n this._invert = coerceBooleanProperty(value);\n }\n private _invert = false;\n\n /** The maximum value that the slider can have. */\n @Input()\n get max(): number { return this._max; }\n set max(v: number) {\n this._max = coerceNumberProperty(v, this._max);\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n private _max: number = 100;\n\n /** The minimum value that the slider can have. */\n @Input()\n get min(): number { return this._min; }\n set min(v: number) {\n this._min = coerceNumberProperty(v, this._min);\n\n // If the value wasn't explicitly set by the user, set it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n private _min: number = 0;\n\n /** The values at which the thumb will snap. */\n @Input()\n get step(): number { return this._step; }\n set step(v: number) {\n this._step = coerceNumberProperty(v, this._step);\n\n if (this._step % 1 !== 0) {\n this._roundToDecimal = this._step.toString().split('.').pop()!.length;\n }\n\n // Since this could modify the label, we need to notify the change detection.\n this._changeDetectorRef.markForCheck();\n }\n private _step: number = 1;\n\n /** Whether or not to show the thumb label. */\n @Input()\n get thumbLabel(): boolean { return this._thumbLabel; }\n set thumbLabel(value: boolean) { this._thumbLabel = coerceBooleanProperty(value); }\n private _thumbLabel: boolean = false;\n\n /**\n * How often to show ticks. Relative to the step so that a tick always appears on a step.\n * Ex: Tick interval of 4 with a step of 3 will draw a tick every 4 steps (every 12 values).\n */\n @Input()\n get tickInterval() { return this._tickInterval; }\n set tickInterval(value: 'auto' | number) {\n if (value === 'auto') {\n this._tickInterval = 'auto';\n } else if (typeof value === 'number' || typeof value === 'string') {\n this._tickInterval = coerceNumberProperty(value, this._tickInterval as number);\n } else {\n this._tickInterval = 0;\n }\n }\n private _tickInterval: 'auto' | number = 0;\n\n /** Value of the slider. */\n @Input()\n get value(): number | null {\n // If the value needs to be read and it is still uninitialized, initialize it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n return this._value;\n }\n set value(v: number | null) {\n if (v !== this._value) {\n let value = coerceNumberProperty(v);\n\n // While incrementing by a decimal we can end up with values like 33.300000000000004.\n // Truncate it to ensure that it matches the label and to make it easier to work with.\n if (this._roundToDecimal) {\n value = parseFloat(value.toFixed(this._roundToDecimal));\n }\n\n this._value = value;\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n }\n private _value: number | null = null;\n\n /**\n * Function that will be used to format the value before it is displayed\n * in the thumb label. Can be used to format very large number in order\n * for them to fit into the slider thumb.\n */\n @Input() displayWith: (value: number | null) => string | number;\n\n /** Whether the slider is vertical. */\n @Input()\n get vertical(): boolean { return this._vertical; }\n set vertical(value: boolean) {\n this._vertical = coerceBooleanProperty(value);\n }\n private _vertical = false;\n\n /** Event emitted when the slider value has changed. */\n @Output() readonly change: EventEmitter<MatSliderChange> = new EventEmitter<MatSliderChange>();\n\n /** Event emitted when the slider thumb moves. */\n @Output() readonly input: EventEmitter<MatSliderChange> = new EventEmitter<MatSliderChange>();\n\n /**\n * Emits when the raw value of the slider changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<number | null> = new EventEmitter<number | null>();\n\n /** The value to be used for display purposes. */\n get displayValue(): string | number {\n if (this.displayWith) {\n return this.displayWith(this.value);\n }\n\n // Note that this could be improved further by rounding something like 0.999 to 1 or\n // 0.899 to 0.9, however it is very performance sensitive, because it gets called on\n // every change detection cycle.\n if (this._roundToDecimal && this.value && this.value % 1 !== 0) {\n return this.value.toFixed(this._roundToDecimal);\n }\n\n return this.value || 0;\n }\n\n /** set focus to the host element */\n focus() {\n this._focusHostElement();\n }\n\n /** blur the host element */\n blur() {\n this._blurHostElement();\n }\n\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n onTouched: () => any = () => {};\n\n /** The percentage of the slider that coincides with the value. */\n get percent(): number { return this._clamp(this._percent); }\n private _percent: number = 0;\n\n /**\n * Whether or not the thumb is sliding.\n * Used to determine if there should be a transition for the thumb and fill track.\n */\n _isSliding: boolean = false;\n\n /**\n * Whether or not the slider is active (clicked or sliding).\n * Used to shrink and grow the thumb as according to the Material Design spec.\n */\n _isActive: boolean = false;\n\n /**\n * Whether the axis of the slider is inverted.\n * (i.e. whether moving the thumb in the positive x or y direction decreases the slider's value).\n */\n get _invertAxis() {\n // Standard non-inverted mode for a vertical slider should be dragging the thumb from bottom to\n // top. However from a y-axis standpoint this is inverted.\n return this.vertical ? !this.invert : this.invert;\n }\n\n\n /** Whether the slider is at its minimum value. */\n get _isMinValue() {\n return this.percent === 0;\n }\n\n /**\n * The amount of space to leave between the slider thumb and the track fill & track background\n * elements.\n */\n get _thumbGap() {\n if (this.disabled) {\n return DISABLED_THUMB_GAP;\n }\n if (this._isMinValue && !this.thumbLabel) {\n return this._isActive ? MIN_VALUE_ACTIVE_THUMB_GAP : MIN_VALUE_NONACTIVE_THUMB_GAP;\n }\n return 0;\n }\n\n /** CSS styles for the track background element. */\n get _trackBackgroundStyles(): { [key: string]: string } {\n const axis = this.vertical ? 'Y' : 'X';\n const scale = this.vertical ? `1, ${1 - this.percent}, 1` : `${1 - this.percent}, 1, 1`;\n const sign = this._shouldInvertMouseCoords() ? '-' : '';\n\n return {\n // scale3d avoids some rendering issues in Chrome. See #12071.\n transform: `translate${axis}(${sign}${this._thumbGap}px) scale3d(${scale})`\n };\n }\n\n /** CSS styles for the track fill element. */\n get _trackFillStyles(): { [key: string]: string } {\n const axis = this.vertical ? 'Y' : 'X';\n const scale = this.vertical ? `1, ${this.percent}, 1` : `${this.percent}, 1, 1`;\n const sign = this._shouldInvertMouseCoords() ? '' : '-';\n\n return {\n // scale3d avoids some rendering issues in Chrome. See #12071.\n transform: `translate${axis}(${sign}${this._thumbGap}px) scale3d(${scale})`\n };\n }\n\n /** CSS styles for the ticks container element. */\n get _ticksContainerStyles(): { [key: string]: string } {\n let axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the ticks container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let sign = !this.vertical && this._getDirection() == 'rtl' ? '' : '-';\n let offset = this._tickIntervalPercent / 2 * 100;\n return {\n 'transform': `translate${axis}(${sign}${offset}%)`\n };\n }\n\n /** CSS styles for the ticks element. */\n get _ticksStyles(): { [key: string]: string } {\n let tickSize = this._tickIntervalPercent * 100;\n let backgroundSize = this.vertical ? `2px ${tickSize}%` : `${tickSize}% 2px`;\n let axis = this.vertical ? 'Y' : 'X';\n // Depending on the direction we pushed the ticks container, push the ticks the opposite\n // direction to re-center them but clip off the end edge. In RTL languages we need to flip the\n // ticks 180 degrees so we're really cutting off the end edge abd not the start.\n let sign = !this.vertical && this._getDirection() == 'rtl' ? '-' : '';\n let rotate = !this.vertical && this._getDirection() == 'rtl' ? ' rotate(180deg)' : '';\n let styles: { [key: string]: string } = {\n 'backgroundSize': backgroundSize,\n // Without translateZ ticks sometimes jitter as the slider moves on Chrome & Firefox.\n 'transform': `translateZ(0) translate${axis}(${sign}${tickSize / 2}%)${rotate}`\n };\n\n if (this._isMinValue && this._thumbGap) {\n let side = this.vertical ?\n (this._invertAxis ? 'Bottom' : 'Top') :\n (this._invertAxis ? 'Right' : 'Left');\n styles[`padding${side}`] = `${this._thumbGap}px`;\n }\n\n return styles;\n }\n\n get _thumbContainerStyles(): { [key: string]: string } {\n let axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the thumb container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let invertOffset =\n (this._getDirection() == 'rtl' && !this.vertical) ? !this._invertAxis : this._invertAxis;\n let offset = (invertOffset ? this.percent : 1 - this.percent) * 100;\n return {\n 'transform': `translate${axis}(-${offset}%)`\n };\n }\n\n /** The size of a tick interval as a percentage of the size of the track. */\n private _tickIntervalPercent: number = 0;\n\n /** The dimensions of the slider. */\n private _sliderDimensions: ClientRect | null = null;\n\n private _controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /** Decimal places to round to, based on the step amount. */\n private _roundToDecimal: number;\n\n /** Subscription to the Directionality change EventEmitter. */\n private _dirChangeSubscription = Subscription.EMPTY;\n\n /** The value of the slider when the slide start event fires. */\n private _valueOnSlideStart: number | null;\n\n /** Reference to the inner slider wrapper element. */\n @ViewChild('sliderWrapper', {static: false}) private _sliderWrapper: ElementRef;\n\n /**\n * Whether mouse events should be converted to a slider position by calculating their distance\n * from the right or bottom edge of the slider as opposed to the top or left.\n */\n private _shouldInvertMouseCoords() {\n return (this._getDirection() == 'rtl' && !this.vertical) ? !this._invertAxis : this._invertAxis;\n }\n\n /** The language direction for this slider element. */\n private _getDirection() {\n return (this._dir && this._dir.value == 'rtl') ? 'rtl' : 'ltr';\n }\n\n constructor(elementRef: ElementRef,\n private _focusMonitor: FocusMonitor,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _dir: Directionality,\n @Attribute('tabindex') tabIndex: string,\n // @breaking-change 8.0.0 `_animationMode` parameter to be made required.\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) {\n super(elementRef);\n\n this.tabIndex = parseInt(tabIndex) || 0;\n }\n\n ngOnInit() {\n this._focusMonitor\n .monitor(this._elementRef, true)\n .subscribe((origin: FocusOrigin) => {\n this._isActive = !!origin && origin !== 'keyboard';\n this._changeDetectorRef.detectChanges();\n });\n if (this._dir) {\n this._dirChangeSubscription = this._dir.change.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._dirChangeSubscription.unsubscribe();\n }\n\n _onMouseenter() {\n if (this.disabled) {\n return;\n }\n\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n\n _onMousedown(event: MouseEvent) {\n // Don't do anything if the slider is disabled or the\n // user is using anything other than the main mouse button.\n if (this.disabled || event.button !== 0) {\n return;\n }\n\n const oldValue = this.value;\n this._isSliding = false;\n this._focusHostElement();\n this._updateValueFromPosition({x: event.clientX, y: event.clientY});\n\n // Emit a change and input event if the value changed.\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n }\n\n _onSlide(event: HammerInput) {\n if (this.disabled) {\n return;\n }\n\n // The slide start event sometimes fails to fire on iOS, so if we're not already in the sliding\n // state, call the slide start handler manually.\n if (!this._isSliding) {\n this._onSlideStart(null);\n }\n\n // Prevent the slide from selecting anything else.\n event.preventDefault();\n\n let oldValue = this.value;\n this._updateValueFromPosition({x: event.center.x, y: event.center.y});\n\n // Native range elements always emit `input` events when the value changed while sliding.\n if (oldValue != this.value) {\n this._emitInputEvent();\n }\n }\n\n _onSlideStart(event: HammerInput | null) {\n if (this.disabled || this._isSliding) {\n return;\n }\n\n // Simulate mouseenter in case this is a mobile device.\n this._onMouseenter();\n\n this._isSliding = true;\n this._focusHostElement();\n this._valueOnSlideStart = this.value;\n\n if (event) {\n this._updateValueFromPosition({x: event.center.x, y: event.center.y});\n event.preventDefault();\n }\n }\n\n _onSlideEnd() {\n this._isSliding = false;\n\n if (this._valueOnSlideStart != this.value && !this.disabled) {\n this._emitChangeEvent();\n }\n this._valueOnSlideStart = null;\n }\n\n _onFocus() {\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n\n _onBlur() {\n this.onTouched();\n }\n\n _onKeydown(event: KeyboardEvent) {\n if (this.disabled || hasModifierKey(event)) {\n return;\n }\n\n const oldValue = this.value;\n\n switch (event.keyCode) {\n case PAGE_UP:\n this._increment(10);\n break;\n case PAGE_DOWN:\n this._increment(-10);\n break;\n case END:\n this.value = this.max;\n break;\n case HOME:\n this.value = this.min;\n break;\n case LEFT_ARROW:\n // NOTE: For a sighted user it would make more sense that when they press an arrow key on an\n // inverted slider the thumb moves in that direction. However for a blind user, nothing\n // about the slider indicates that it is inverted. They will expect left to be decrement,\n // regardless of how it appears on the screen. For speakers ofRTL languages, they probably\n // expect left to mean increment. Therefore we flip the meaning of the side arrow keys for\n // RTL. For inverted sliders we prefer a good a11y experience to having it \"look right\" for\n // sighted users, therefore we do not swap the meaning.\n this._increment(this._getDirection() == 'rtl' ? 1 : -1);\n break;\n case UP_ARROW:\n this._increment(1);\n break;\n case RIGHT_ARROW:\n // See comment on LEFT_ARROW about the conditions under which we flip the meaning.\n this._increment(this._getDirection() == 'rtl' ? -1 : 1);\n break;\n case DOWN_ARROW:\n this._increment(-1);\n break;\n default:\n // Return if the key is not one that we explicitly handle to avoid calling preventDefault on\n // it.\n return;\n }\n\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n\n this._isSliding = true;\n event.preventDefault();\n }\n\n _onKeyup() {\n this._isSliding = false;\n }\n\n /** Increments the slider by the given number of steps (negative number decrements). */\n private _increment(numSteps: number) {\n this.value = this._clamp((this.value || 0) + this.step * numSteps, this.min, this.max);\n }\n\n /** Calculate the new value from the new physical location. The value will always be snapped. */\n private _updateValueFromPosition(pos: {x: number, y: number}) {\n if (!this._sliderDimensions) {\n return;\n }\n\n let offset = this.vertical ? this._sliderDimensions.top : this._sliderDimensions.left;\n let size = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let posComponent = this.vertical ? pos.y : pos.x;\n\n // The exact value is calculated from the event and used to find the closest snap value.\n let percent = this._clamp((posComponent - offset) / size);\n\n if (this._shouldInvertMouseCoords()) {\n percent = 1 - percent;\n }\n\n // Since the steps may not divide cleanly into the max value, if the user\n // slid to 0 or 100 percent, we jump to the min/max value. This approach\n // is slightly more intuitive than using `Math.ceil` below, because it\n // follows the user's pointer closer.\n if (percent === 0) {\n this.value = this.min;\n } else if (percent === 1) {\n this.value = this.max;\n } else {\n const exactValue = this._calculateValue(percent);\n\n // This calculation finds the closest step by finding the closest\n // whole number divisible by the step relative to the min.\n const closestValue = Math.round((exactValue - this.min) / this.step) * this.step + this.min;\n\n // The value needs to snap to the min and max.\n this.value = this._clamp(closestValue, this.min, this.max);\n }\n }\n\n /** Emits a change event if the current value is different from the last emitted value. */\n private _emitChangeEvent() {\n this._controlValueAccessorChangeFn(this.value);\n this.valueChange.emit(this.value);\n this.change.emit(this._createChangeEvent());\n }\n\n /** Emits an input event when the current value is different from the last emitted value. */\n private _emitInputEvent() {\n this.input.emit(this._createChangeEvent());\n }\n\n /** Updates the amount of space between ticks as a percentage of the width of the slider. */\n private _updateTickIntervalPercent() {\n if (!this.tickInterval || !this._sliderDimensions) {\n return;\n }\n\n if (this.tickInterval == 'auto') {\n let trackSize = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let pixelsPerStep = trackSize * this.step / (this.max - this.min);\n let stepsPerTick = Math.ceil(MIN_AUTO_TICK_SEPARATION / pixelsPerStep);\n let pixelsPerTick = stepsPerTick * this.step;\n this._tickIntervalPercent = pixelsPerTick / trackSize;\n } else {\n this._tickIntervalPercent = this.tickInterval * this.step / (this.max - this.min);\n }\n }\n\n /** Creates a slider change object from the specified value. */\n private _createChangeEvent(value = this.value): MatSliderChange {\n let event = new MatSliderChange();\n\n event.source = this;\n event.value = value;\n\n return event;\n }\n\n /** Calculates the percentage of the slider that a value is. */\n private _calculatePercentage(value: number | null) {\n return ((value || 0) - this.min) / (this.max - this.min);\n }\n\n /** Calculates the value a percentage of the slider corresponds to. */\n private _calculateValue(percentage: number) {\n return this.min + percentage * (this.max - this.min);\n }\n\n /** Return a number between two numbers. */\n private _clamp(value: number, min = 0, max = 1) {\n return Math.max(min, Math.min(value, max));\n }\n\n /**\n * Get the bounding client rect of the slider track element.\n * The track is used rather than the native element to ignore the extra space that the thumb can\n * take up.\n */\n private _getSliderDimensions() {\n return this._sliderWrapper ? this._sliderWrapper.nativeElement.getBoundingClientRect() : null;\n }\n\n /**\n * Focuses the native element.\n * Currently only used to allow a blur event to fire but will be used with keyboard input later.\n */\n private _focusHostElement() {\n this._elementRef.nativeElement.focus();\n }\n\n /** Blurs the native element. */\n private _blurHostElement() {\n this._elementRef.nativeElement.blur();\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value: any) {\n this.value = value;\n }\n\n /**\n * Registers a callback to be triggered when the value has changed.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n\n /**\n * Registers a callback to be triggered when the component is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n /**\n * Sets whether the component should be disabled.\n * Implemented as part of ControlValueAccessor.\n * @param isDisabled\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"],"names":["HAMMER_GESTURE_CONFIG","GestureConfig","MatCommonModule","CommonModule","NgModule","ViewChild","Output","Input","Optional","Inject","ANIMATION_MODULE_TYPE","Attribute","Directionality","ChangeDetectorRef","ChangeDetectionStrategy","ViewEncapsulation","Component","DOWN_ARROW","RIGHT_ARROW","UP_ARROW","LEFT_ARROW","HOME","END","PAGE_DOWN","PAGE_UP","hasModifierKey","coerceBooleanProperty","coerceNumberProperty","Subscription","EventEmitter","tslib_1.__extends","mixinTabIndex","mixinColor","mixinDisabled","forwardRef","NG_VALUE_ACCESSOR"],"mappings":"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"}