{"version":3,"file":"slider.js","sources":["../../packages/material/slider/slider.js","../../packages/material/slider/slider-module.js","../../packages/material/slider/index.js"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. 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 */\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { DOWN_ARROW, END, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW, } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, Optional, Output, Renderer2, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { mixinColor, mixinDisabled, } from '@angular/material/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { Subscription } from 'rxjs/Subscription';\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.\n */\nconst DISABLED_THUMB_GAP = 7;\n/**\n * The thumb gap size for a non-active slider at its minimum value.\n */\nconst MIN_VALUE_NONACTIVE_THUMB_GAP = 7;\n/**\n * The thumb gap size for an active slider at its minimum value.\n */\nconst MIN_VALUE_ACTIVE_THUMB_GAP = 10;\n/**\n * Provider Expression that allows mat-slider to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)] and [formControl].\n */\nexport const MAT_SLIDER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlider),\n multi: true\n};\n/**\n * A simple change event emitted by the MatSlider component.\n */\nexport class MatSliderChange {\n}\nfunction MatSliderChange_tsickle_Closure_declarations() {\n /**\n * The MatSlider that changed.\n * @type {?}\n */\n MatSliderChange.prototype.source;\n /**\n * The new value of the source slider.\n * @type {?}\n */\n MatSliderChange.prototype.value;\n}\n/**\n * \\@docs-private\n */\nexport class MatSliderBase {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n}\nfunction MatSliderBase_tsickle_Closure_declarations() {\n /** @type {?} */\n MatSliderBase.prototype._renderer;\n /** @type {?} */\n MatSliderBase.prototype._elementRef;\n}\nexport const /** @type {?} */ _MatSliderMixinBase = mixinColor(mixinDisabled(MatSliderBase), 'accent');\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 `` element.\n */\nexport class MatSlider extends _MatSliderMixinBase {\n /**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _focusMonitor\n * @param {?} _changeDetectorRef\n * @param {?} _dir\n */\n constructor(renderer, elementRef, _focusMonitor, _changeDetectorRef, _dir) {\n super(renderer, elementRef);\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._invert = false;\n this._max = 100;\n this._min = 0;\n this._step = 1;\n this._thumbLabel = false;\n this._tickInterval = 0;\n this._value = null;\n this._vertical = false;\n /**\n * Event emitted when the slider value has changed.\n */\n this.change = new EventEmitter();\n /**\n * Event emitted when the slider thumb moves.\n */\n this.input = new EventEmitter();\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n */\n this.onTouched = () => { };\n this._percent = 0;\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 this._isSliding = false;\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 this._isActive = false;\n /**\n * The size of a tick interval as a percentage of the size of the track.\n */\n this._tickIntervalPercent = 0;\n /**\n * The dimensions of the slider.\n */\n this._sliderDimensions = null;\n this._controlValueAccessorChangeFn = () => { };\n /**\n * Subscription to the Directionality change EventEmitter.\n */\n this._dirChangeSubscription = Subscription.EMPTY;\n }\n /**\n * Whether the slider is inverted.\n * @return {?}\n */\n get invert() { return this._invert; }\n /**\n * @param {?} value\n * @return {?}\n */\n set invert(value) {\n this._invert = coerceBooleanProperty(value);\n }\n /**\n * The maximum value that the slider can have.\n * @return {?}\n */\n get max() { return this._max; }\n /**\n * @param {?} v\n * @return {?}\n */\n set max(v) {\n this._max = coerceNumberProperty(v, this._max);\n this._percent = this._calculatePercentage(this._value);\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n /**\n * The minimum value that the slider can have.\n * @return {?}\n */\n get min() { return this._min; }\n /**\n * @param {?} v\n * @return {?}\n */\n set min(v) {\n this._min = coerceNumberProperty(v, this._min);\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 // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n /**\n * The values at which the thumb will snap.\n * @return {?}\n */\n get step() { return this._step; }\n /**\n * @param {?} v\n * @return {?}\n */\n set step(v) {\n this._step = coerceNumberProperty(v, this._step);\n if (this._step % 1 !== 0) {\n this._roundLabelTo = ((this._step.toString().split('.').pop())).length;\n }\n // Since this could modify the label, we need to notify the change detection.\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Whether or not to show the thumb label.\n * @return {?}\n */\n get thumbLabel() { return this._thumbLabel; }\n /**\n * @param {?} value\n * @return {?}\n */\n set thumbLabel(value) { this._thumbLabel = coerceBooleanProperty(value); }\n /**\n * @deprecated\n * @return {?}\n */\n get _thumbLabelDeprecated() { return this._thumbLabel; }\n /**\n * @param {?} value\n * @return {?}\n */\n set _thumbLabelDeprecated(value) { this._thumbLabel = value; }\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 * @return {?}\n */\n get tickInterval() { return this._tickInterval; }\n /**\n * @param {?} value\n * @return {?}\n */\n set tickInterval(value) {\n if (value === 'auto') {\n this._tickInterval = 'auto';\n }\n else if (typeof value === 'number' || typeof value === 'string') {\n this._tickInterval = coerceNumberProperty(value, /** @type {?} */ (this._tickInterval));\n }\n else {\n this._tickInterval = 0;\n }\n }\n /**\n * @deprecated\n * @return {?}\n */\n get _tickIntervalDeprecated() { return this.tickInterval; }\n /**\n * @param {?} v\n * @return {?}\n */\n set _tickIntervalDeprecated(v) { this.tickInterval = v; }\n /**\n * Value of the slider.\n * @return {?}\n */\n get value() {\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 /**\n * @param {?} v\n * @return {?}\n */\n set value(v) {\n if (v !== this._value) {\n this._value = coerceNumberProperty(v, this._value || 0);\n this._percent = this._calculatePercentage(this._value);\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Whether the slider is vertical.\n * @return {?}\n */\n get vertical() { return this._vertical; }\n /**\n * @param {?} value\n * @return {?}\n */\n set vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\n /**\n * The value to be used for display purposes.\n * @return {?}\n */\n get displayValue() {\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._roundLabelTo && this.value && this.value % 1 !== 0) {\n return this.value.toFixed(this._roundLabelTo);\n }\n return this.value || 0;\n }\n /**\n * The percentage of the slider that coincides with the value.\n * @return {?}\n */\n get percent() { return this._clamp(this._percent); }\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 * @return {?}\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 * Whether the slider is at its minimum value.\n * @return {?}\n */\n get _isMinValue() {\n return this.percent === 0;\n }\n /**\n * The amount of space to leave between the slider thumb and the track fill & track background\n * elements.\n * @return {?}\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 * @return {?}\n */\n get _trackBackgroundStyles() {\n let /** @type {?} */ axis = this.vertical ? 'Y' : 'X';\n let /** @type {?} */ sign = this._invertMouseCoords ? '-' : '';\n return {\n 'transform': `translate${axis}(${sign}${this._thumbGap}px) scale${axis}(${1 - this.percent})`\n };\n }\n /**\n * CSS styles for the track fill element.\n * @return {?}\n */\n get _trackFillStyles() {\n let /** @type {?} */ axis = this.vertical ? 'Y' : 'X';\n let /** @type {?} */ sign = this._invertMouseCoords ? '' : '-';\n return {\n 'transform': `translate${axis}(${sign}${this._thumbGap}px) scale${axis}(${this.percent})`\n };\n }\n /**\n * CSS styles for the ticks container element.\n * @return {?}\n */\n get _ticksContainerStyles() {\n let /** @type {?} */ 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 /** @type {?} */ sign = !this.vertical && this._direction == 'rtl' ? '' : '-';\n let /** @type {?} */ offset = this._tickIntervalPercent / 2 * 100;\n return {\n 'transform': `translate${axis}(${sign}${offset}%)`\n };\n }\n /**\n * CSS styles for the ticks element.\n * @return {?}\n */\n get _ticksStyles() {\n let /** @type {?} */ tickSize = this._tickIntervalPercent * 100;\n let /** @type {?} */ backgroundSize = this.vertical ? `2px ${tickSize}%` : `${tickSize}% 2px`;\n let /** @type {?} */ 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 /** @type {?} */ sign = !this.vertical && this._direction == 'rtl' ? '-' : '';\n let /** @type {?} */ rotate = !this.vertical && this._direction == 'rtl' ? ' rotate(180deg)' : '';\n let /** @type {?} */ styles = {\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 if (this._isMinValue && this._thumbGap) {\n let /** @type {?} */ side = this.vertical ?\n (this._invertAxis ? 'Bottom' : 'Top') :\n (this._invertAxis ? 'Right' : 'Left');\n styles[`padding${side}`] = `${this._thumbGap}px`;\n }\n return styles;\n }\n /**\n * @return {?}\n */\n get _thumbContainerStyles() {\n let /** @type {?} */ 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 /** @type {?} */ invertOffset = (this._direction == 'rtl' && !this.vertical) ? !this._invertAxis : this._invertAxis;\n let /** @type {?} */ offset = (invertOffset ? this.percent : 1 - this.percent) * 100;\n return {\n 'transform': `translate${axis}(-${offset}%)`\n };\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 * @return {?}\n */\n get _invertMouseCoords() {\n return (this._direction == 'rtl' && !this.vertical) ? !this._invertAxis : this._invertAxis;\n }\n /**\n * The language direction for this slider element.\n * @return {?}\n */\n get _direction() {\n return (this._dir && this._dir.value == 'rtl') ? 'rtl' : 'ltr';\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this._focusMonitor\n .monitor(this._elementRef.nativeElement, this._renderer, true)\n .subscribe((origin) => {\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 * @return {?}\n */\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef.nativeElement);\n this._dirChangeSubscription.unsubscribe();\n }\n /**\n * @return {?}\n */\n _onMouseenter() {\n if (this.disabled) {\n return;\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 * @param {?} event\n * @return {?}\n */\n _onClick(event) {\n if (this.disabled) {\n return;\n }\n let /** @type {?} */ oldValue = this.value;\n this._isSliding = false;\n this._focusHostElement();\n this._updateValueFromPosition({ x: event.clientX, y: event.clientY });\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 * @param {?} event\n * @return {?}\n */\n _onSlide(event) {\n if (this.disabled) {\n return;\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 // Prevent the slide from selecting anything else.\n event.preventDefault();\n let /** @type {?} */ oldValue = this.value;\n this._updateValueFromPosition({ x: event.center.x, y: event.center.y });\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 * @param {?} event\n * @return {?}\n */\n _onSlideStart(event) {\n if (this.disabled || this._isSliding) {\n return;\n }\n // Simulate mouseenter in case this is a mobile device.\n this._onMouseenter();\n this._isSliding = true;\n this._focusHostElement();\n this._valueOnSlideStart = this.value;\n if (event) {\n this._updateValueFromPosition({ x: event.center.x, y: event.center.y });\n event.preventDefault();\n }\n }\n /**\n * @return {?}\n */\n _onSlideEnd() {\n this._isSliding = false;\n if (this._valueOnSlideStart != this.value) {\n this._emitChangeEvent();\n }\n this._valueOnSlideStart = null;\n }\n /**\n * @return {?}\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 * @return {?}\n */\n _onBlur() {\n this.onTouched();\n }\n /**\n * @param {?} event\n * @return {?}\n */\n _onKeydown(event) {\n if (this.disabled) {\n return;\n }\n let /** @type {?} */ oldValue = this.value;\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._direction == '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._direction == '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 if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n this._isSliding = true;\n event.preventDefault();\n }\n /**\n * @return {?}\n */\n _onKeyup() {\n this._isSliding = false;\n }\n /**\n * Increments the slider by the given number of steps (negative number decrements).\n * @param {?} numSteps\n * @return {?}\n */\n _increment(numSteps) {\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 * @param {?} pos\n * @return {?}\n */\n _updateValueFromPosition(pos) {\n if (!this._sliderDimensions) {\n return;\n }\n let /** @type {?} */ offset = this.vertical ? this._sliderDimensions.top : this._sliderDimensions.left;\n let /** @type {?} */ size = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let /** @type {?} */ posComponent = this.vertical ? pos.y : pos.x;\n // The exact value is calculated from the event and used to find the closest snap value.\n let /** @type {?} */ percent = this._clamp((posComponent - offset) / size);\n if (this._invertMouseCoords) {\n percent = 1 - percent;\n }\n let /** @type {?} */ exactValue = this._calculateValue(percent);\n // This calculation finds the closest step by finding the closest whole number divisible by the\n // step relative to the min.\n let /** @type {?} */ closestValue = Math.round((exactValue - this.min) / this.step) * this.step + this.min;\n // The value needs to snap to the min and max.\n this.value = this._clamp(closestValue, this.min, this.max);\n }\n /**\n * Emits a change event if the current value is different from the last emitted value.\n * @return {?}\n */\n _emitChangeEvent() {\n this._controlValueAccessorChangeFn(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 * @return {?}\n */\n _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 * @return {?}\n */\n _updateTickIntervalPercent() {\n if (!this.tickInterval || !this._sliderDimensions) {\n return;\n }\n if (this.tickInterval == 'auto') {\n let /** @type {?} */ trackSize = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let /** @type {?} */ pixelsPerStep = trackSize * this.step / (this.max - this.min);\n let /** @type {?} */ stepsPerTick = Math.ceil(MIN_AUTO_TICK_SEPARATION / pixelsPerStep);\n let /** @type {?} */ pixelsPerTick = stepsPerTick * this.step;\n this._tickIntervalPercent = pixelsPerTick / trackSize;\n }\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 * @param {?=} value\n * @return {?}\n */\n _createChangeEvent(value = this.value) {\n let /** @type {?} */ event = new MatSliderChange();\n event.source = this;\n event.value = value;\n return event;\n }\n /**\n * Calculates the percentage of the slider that a value is.\n * @param {?} value\n * @return {?}\n */\n _calculatePercentage(value) {\n return ((value || 0) - this.min) / (this.max - this.min);\n }\n /**\n * Calculates the value a percentage of the slider corresponds to.\n * @param {?} percentage\n * @return {?}\n */\n _calculateValue(percentage) {\n return this.min + percentage * (this.max - this.min);\n }\n /**\n * Return a number between two numbers.\n * @param {?} value\n * @param {?=} min\n * @param {?=} max\n * @return {?}\n */\n _clamp(value, min = 0, max = 1) {\n return Math.max(min, Math.min(value, max));\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 * @return {?}\n */\n _getSliderDimensions() {\n return this._sliderWrapper ? this._sliderWrapper.nativeElement.getBoundingClientRect() : null;\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 * @return {?}\n */\n _focusHostElement() {\n this._elementRef.nativeElement.focus();\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * Registers a callback to eb triggered when the value has changed.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn Callback to be registered.\n * @return {?}\n */\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\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 * @return {?}\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Sets whether the component should be disabled.\n * Implemented as part of ControlValueAccessor.\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n}\nMatSlider.decorators = [\n { type: Component, args: [{selector: 'mat-slider',\n exportAs: 'matSlider',\n providers: [MAT_SLIDER_VALUE_ACCESSOR],\n host: {\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n '(click)': '_onClick($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': '0',\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 },\n template: \"
\",\n styles: [\".mat-slider{display:inline-block;position:relative;box-sizing:border-box;padding:8px;outline:0;vertical-align:middle}.mat-slider-wrapper{position:absolute}.mat-slider-track-wrapper{position:absolute;top:0;left:0;overflow:hidden}.mat-slider-track-fill{position:absolute;transform-origin:0 0;transition:transform .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}.mat-slider-track-background{position:absolute;transform-origin:100% 100%;transition:transform .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}.mat-slider-ticks-container{position:absolute;left:0;top:0;overflow:hidden}.mat-slider-ticks{background-repeat:repeat;background-clip:content-box;box-sizing:border-box;opacity:0;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}.mat-slider-thumb-container{position:absolute;z-index:1;transition:transform .4s cubic-bezier(.25,.8,.25,1)}.mat-slider-focus-ring{position:absolute;width:30px;height:30px;border-radius:50%;transform:scale(0);opacity:0;transition:transform .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1),opacity .4s cubic-bezier(.25,.8,.25,1)}.cdk-keyboard-focused .mat-slider-focus-ring{transform:scale(1);opacity:1}.mat-slider:not(.mat-slider-disabled) .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled) .mat-slider-thumb-label{cursor:-webkit-grab;cursor:grab}.mat-slider-sliding:not(.mat-slider-disabled) .mat-slider-thumb,.mat-slider-sliding:not(.mat-slider-disabled) .mat-slider-thumb-label,.mat-slider:not(.mat-slider-disabled) .mat-slider-thumb-label:active,.mat-slider:not(.mat-slider-disabled) .mat-slider-thumb:active{cursor:-webkit-grabbing;cursor:grabbing}.mat-slider-thumb{position:absolute;right:-10px;bottom:-10px;box-sizing:border-box;width:20px;height:20px;border:3px solid transparent;border-radius:50%;transform:scale(.7);transition:transform .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1),border-color .4s cubic-bezier(.25,.8,.25,1)}.mat-slider-thumb-label{display:none;align-items:center;justify-content:center;position:absolute;width:28px;height:28px;border-radius:50%;transition:transform .4s cubic-bezier(.25,.8,.25,1),border-radius .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}.mat-slider-thumb-label-text{z-index:1;opacity:0;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}.mat-slider-sliding .mat-slider-thumb-container,.mat-slider-sliding .mat-slider-track-background,.mat-slider-sliding .mat-slider-track-fill{transition-duration:0s}.mat-slider-has-ticks .mat-slider-wrapper::after{content:'';position:absolute;border-width:0;border-style:solid;opacity:0;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after,.mat-slider-has-ticks:hover:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after{opacity:1}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-disabled) .mat-slider-ticks,.mat-slider-has-ticks:hover:not(.mat-slider-disabled) .mat-slider-ticks{opacity:1}.mat-slider-thumb-label-showing .mat-slider-focus-ring{transform:scale(0);opacity:0}.mat-slider-thumb-label-showing .mat-slider-thumb-label{display:flex}.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:100% 100%}.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:0 0}.mat-slider:not(.mat-slider-disabled).cdk-focused.mat-slider-thumb-label-showing .mat-slider-thumb{transform:scale(0)}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label{border-radius:50% 50% 0}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label-text{opacity:1}.mat-slider:not(.mat-slider-disabled).cdk-mouse-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-program-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-touch-focused .mat-slider-thumb{border-width:2px;transform:scale(1)}.mat-slider-disabled .mat-slider-focus-ring{transform:scale(0);opacity:0}.mat-slider-disabled .mat-slider-thumb{border-width:4px;transform:scale(.5)}.mat-slider-disabled .mat-slider-thumb-label{display:none}.mat-slider-horizontal{height:48px;min-width:128px}.mat-slider-horizontal .mat-slider-wrapper{height:2px;top:23px;left:8px;right:8px}.mat-slider-horizontal .mat-slider-wrapper::after{height:2px;border-left-width:2px;right:0;top:0}.mat-slider-horizontal .mat-slider-track-wrapper{height:2px;width:100%}.mat-slider-horizontal .mat-slider-track-fill{height:2px;width:100%;transform:scaleX(0)}.mat-slider-horizontal .mat-slider-track-background{height:2px;width:100%;transform:scaleX(1)}.mat-slider-horizontal .mat-slider-ticks-container{height:2px;width:100%}.mat-slider-horizontal .mat-slider-ticks{height:2px;width:100%}.mat-slider-horizontal .mat-slider-thumb-container{width:100%;height:0;top:50%}.mat-slider-horizontal .mat-slider-focus-ring{top:-15px;right:-15px}.mat-slider-horizontal .mat-slider-thumb-label{right:-14px;top:-40px;transform:translateY(26px) scale(.01) rotate(45deg)}.mat-slider-horizontal .mat-slider-thumb-label-text{transform:rotate(-45deg)}.mat-slider-horizontal.cdk-focused .mat-slider-thumb-label{transform:rotate(45deg)}.mat-slider-vertical{width:48px;min-height:128px}.mat-slider-vertical .mat-slider-wrapper{width:2px;top:8px;bottom:8px;left:23px}.mat-slider-vertical .mat-slider-wrapper::after{width:2px;border-top-width:2px;bottom:0;left:0}.mat-slider-vertical .mat-slider-track-wrapper{height:100%;width:2px}.mat-slider-vertical .mat-slider-track-fill{height:100%;width:2px;transform:scaleY(0)}.mat-slider-vertical .mat-slider-track-background{height:100%;width:2px;transform:scaleY(1)}.mat-slider-vertical .mat-slider-ticks-container{width:2px;height:100%}.mat-slider-vertical .mat-slider-focus-ring{bottom:-15px;left:-15px}.mat-slider-vertical .mat-slider-ticks{width:2px;height:100%}.mat-slider-vertical .mat-slider-thumb-container{height:100%;width:0;left:50%}.mat-slider-vertical .mat-slider-thumb-label{bottom:-14px;left:-40px;transform:translateX(26px) scale(.01) rotate(-45deg)}.mat-slider-vertical .mat-slider-thumb-label-text{transform:rotate(45deg)}.mat-slider-vertical.cdk-focused .mat-slider-thumb-label{transform:rotate(-45deg)}[dir=rtl] .mat-slider-wrapper::after{left:0;right:auto}[dir=rtl] .mat-slider-horizontal .mat-slider-track-fill{transform-origin:100% 100%}[dir=rtl] .mat-slider-horizontal .mat-slider-track-background{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:100% 100%}\"],\n inputs: ['disabled', 'color'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n },] },\n];\n/**\n * @nocollapse\n */\nMatSlider.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: FocusMonitor, },\n { type: ChangeDetectorRef, },\n { type: Directionality, decorators: [{ type: Optional },] },\n];\nMatSlider.propDecorators = {\n 'invert': [{ type: Input },],\n 'max': [{ type: Input },],\n 'min': [{ type: Input },],\n 'step': [{ type: Input },],\n 'thumbLabel': [{ type: Input },],\n '_thumbLabelDeprecated': [{ type: Input, args: ['thumb-label',] },],\n 'tickInterval': [{ type: Input },],\n '_tickIntervalDeprecated': [{ type: Input, args: ['tick-interval',] },],\n 'value': [{ type: Input },],\n 'vertical': [{ type: Input },],\n 'change': [{ type: Output },],\n 'input': [{ type: Output },],\n '_sliderWrapper': [{ type: ViewChild, args: ['sliderWrapper',] },],\n};\nfunction MatSlider_tsickle_Closure_declarations() {\n /** @type {?} */\n MatSlider.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatSlider.ctorParameters;\n /** @type {?} */\n MatSlider.propDecorators;\n /** @type {?} */\n MatSlider.prototype._invert;\n /** @type {?} */\n MatSlider.prototype._max;\n /** @type {?} */\n MatSlider.prototype._min;\n /** @type {?} */\n MatSlider.prototype._step;\n /** @type {?} */\n MatSlider.prototype._thumbLabel;\n /** @type {?} */\n MatSlider.prototype._tickInterval;\n /** @type {?} */\n MatSlider.prototype._value;\n /** @type {?} */\n MatSlider.prototype._vertical;\n /**\n * Event emitted when the slider value has changed.\n * @type {?}\n */\n MatSlider.prototype.change;\n /**\n * Event emitted when the slider thumb moves.\n * @type {?}\n */\n MatSlider.prototype.input;\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * @type {?}\n */\n MatSlider.prototype.onTouched;\n /** @type {?} */\n MatSlider.prototype._percent;\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 * @type {?}\n */\n MatSlider.prototype._isSliding;\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 * @type {?}\n */\n MatSlider.prototype._isActive;\n /**\n * The size of a tick interval as a percentage of the size of the track.\n * @type {?}\n */\n MatSlider.prototype._tickIntervalPercent;\n /**\n * The dimensions of the slider.\n * @type {?}\n */\n MatSlider.prototype._sliderDimensions;\n /** @type {?} */\n MatSlider.prototype._controlValueAccessorChangeFn;\n /**\n * Decimal places to round to, based on the step amount.\n * @type {?}\n */\n MatSlider.prototype._roundLabelTo;\n /**\n * Subscription to the Directionality change EventEmitter.\n * @type {?}\n */\n MatSlider.prototype._dirChangeSubscription;\n /**\n * The value of the slider when the slide start event fires.\n * @type {?}\n */\n MatSlider.prototype._valueOnSlideStart;\n /**\n * Reference to the inner slider wrapper element.\n * @type {?}\n */\n MatSlider.prototype._sliderWrapper;\n /** @type {?} */\n MatSlider.prototype._focusMonitor;\n /** @type {?} */\n MatSlider.prototype._changeDetectorRef;\n /** @type {?} */\n MatSlider.prototype._dir;\n}\n//# sourceMappingURL=slider.js.map","/**\n * @license\n * Copyright Google Inc. 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 */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { BidiModule } from '@angular/cdk/bidi';\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';\nexport class MatSliderModule {\n}\nMatSliderModule.decorators = [\n { type: NgModule, args: [{\n imports: [CommonModule, MatCommonModule, BidiModule, A11yModule],\n exports: [MatSlider, MatCommonModule],\n declarations: [MatSlider],\n providers: [{ provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig }]\n },] },\n];\n/**\n * @nocollapse\n */\nMatSliderModule.ctorParameters = () => [];\nfunction MatSliderModule_tsickle_Closure_declarations() {\n /** @type {?} */\n MatSliderModule.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatSliderModule.ctorParameters;\n}\n//# sourceMappingURL=slider-module.js.map","/**\n * Generated bundle index. Do not edit.\n */\nexport { MatSliderModule, MAT_SLIDER_VALUE_ACCESSOR, MatSliderChange, MatSliderBase, _MatSliderMixinBase, MatSlider } from './public-api';\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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"}