blob: 6fc7c46b2d693af9a886bdf5e56f39d6bce58581 [file] [log] [blame]
{"version":3,"file":"material-slider.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/material/slider/slider.ts","../../src/material/slider/slider-module.ts"],"sourcesContent":["/*! *****************************************************************************\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","/**\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","/**\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"],"names":["__extends","d","b","__","this","constructor","extendStatics","prototype","Object","create","setPrototypeOf","__proto__","Array","p","hasOwnProperty","MAT_SLIDER_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","MatSlider","multi","MatSliderChange","MatSliderBase","_elementRef","_MatSliderMixinBase","mixinTabIndex","mixinColor","mixinDisabled","_super","elementRef","_focusMonitor","_changeDetectorRef","_dir","tabIndex","_animationMode","_this","call","_invert","_max","_min","_step","_thumbLabel","_tickInterval","_value","_vertical","change","EventEmitter","input","valueChange","onTouched","_percent","_isSliding","_isActive","_tickIntervalPercent","_sliderDimensions","_controlValueAccessorChangeFn","_dirChangeSubscription","Subscription","EMPTY","parseInt","tslib_1.__extends","defineProperty","value","coerceBooleanProperty","v","coerceNumberProperty","_calculatePercentage","markForCheck","_roundToDecimal","toString","split","pop","length","parseFloat","toFixed","displayWith","focus","_focusHostElement","blur","_blurHostElement","_clamp","vertical","invert","percent","disabled","_isMinValue","thumbLabel","axis","scale","transform","_shouldInvertMouseCoords","_thumbGap","_getDirection","tickSize","backgroundSize","sign","rotate","styles","_invertAxis","ngOnInit","monitor","subscribe","origin","detectChanges","ngOnDestroy","stopMonitoring","unsubscribe","_onMouseenter","_getSliderDimensions","_updateTickIntervalPercent","_onMousedown","event","button","oldValue","_updateValueFromPosition","x","clientX","y","clientY","_emitInputEvent","_emitChangeEvent","_onSlide","_onSlideStart","preventDefault","center","_valueOnSlideStart","_onSlideEnd","_onFocus","_onBlur","_onKeydown","hasModifierKey","keyCode","PAGE_UP","_increment","PAGE_DOWN","END","max","HOME","min","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","_onKeyup","numSteps","step","pos","offset","top","left","size","height","width","posComponent","exactValue","_calculateValue","closestValue","Math","round","emit","_createChangeEvent","tickInterval","trackSize","pixelsPerStep","stepsPerTick","ceil","pixelsPerTick","source","percentage","_sliderWrapper","nativeElement","getBoundingClientRect","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","type","Component","args","selector","exportAs","providers","host","(focus)","(blur)","(mousedown)","(keydown)","(keyup)","(mouseenter)","(slide)","(slideend)","(slidestart)","class","role","[tabIndex]","[attr.aria-disabled]","[attr.aria-valuemax]","[attr.aria-valuemin]","[attr.aria-valuenow]","[attr.aria-orientation]","[class.mat-slider-disabled]","[class.mat-slider-has-ticks]","[class.mat-slider-horizontal]","[class.mat-slider-axis-inverted]","[class.mat-slider-sliding]","[class.mat-slider-thumb-label-showing]","[class.mat-slider-vertical]","[class.mat-slider-min-value]","[class.mat-slider-hide-last-tick]","[class._mat-animation-noopable]","template","inputs","encapsulation","ViewEncapsulation","None","changeDetection","ChangeDetectionStrategy","OnPush","ChangeDetectorRef","Directionality","decorators","Optional","String","Attribute","Inject","ANIMATION_MODULE_TYPE","propDecorators","Input","Output","ViewChild","static","MatSliderModule","NgModule","imports","CommonModule","MatCommonModule","exports","declarations","HAMMER_GESTURE_CONFIG","useClass","GestureConfig"],"mappings":"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"}