{"version":3,"file":"slide-toggle.js","sources":["../../packages/material/slide-toggle/slide-toggle.js","../../packages/material/slide-toggle/slide-toggle-module.js","../../packages/material/slide-toggle/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 { Attribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, Output, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Platform } from '@angular/cdk/platform';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { applyCssTransform, MatRipple, mixinColor, mixinDisabled, mixinDisableRipple, mixinTabIndex, } from '@angular/material/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FocusMonitor } from '@angular/cdk/a11y';\n// Increasing integer for generating unique ids for slide-toggle components.\nlet /** @type {?} */ nextUniqueId = 0;\nexport const /** @type {?} */ MAT_SLIDE_TOGGLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlideToggle),\n multi: true\n};\n/**\n * Change event object emitted by a MatSlideToggle.\n */\nexport class MatSlideToggleChange {\n}\nfunction MatSlideToggleChange_tsickle_Closure_declarations() {\n /** @type {?} */\n MatSlideToggleChange.prototype.source;\n /** @type {?} */\n MatSlideToggleChange.prototype.checked;\n}\n/**\n * \\@docs-private\n */\nexport class MatSlideToggleBase {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n}\nfunction MatSlideToggleBase_tsickle_Closure_declarations() {\n /** @type {?} */\n MatSlideToggleBase.prototype._renderer;\n /** @type {?} */\n MatSlideToggleBase.prototype._elementRef;\n}\nexport const /** @type {?} */ _MatSlideToggleMixinBase = mixinTabIndex(mixinColor(mixinDisableRipple(mixinDisabled(MatSlideToggleBase)), 'accent'));\n/**\n * Represents a slidable \"switch\" toggle that can be moved between on and off.\n */\nexport class MatSlideToggle extends _MatSlideToggleMixinBase {\n /**\n * @param {?} elementRef\n * @param {?} renderer\n * @param {?} _platform\n * @param {?} _focusMonitor\n * @param {?} _changeDetectorRef\n * @param {?} tabIndex\n */\n constructor(elementRef, renderer, _platform, _focusMonitor, _changeDetectorRef, tabIndex) {\n super(renderer, elementRef);\n this._platform = _platform;\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n this._uniqueId = `mat-slide-toggle-${++nextUniqueId}`;\n this._required = false;\n this._checked = false;\n /**\n * Name value will be applied to the input element if present\n */\n this.name = null;\n /**\n * A unique id for the slide-toggle input. If none is supplied, it will be auto-generated.\n */\n this.id = this._uniqueId;\n /**\n * Whether the label should appear after or before the slide-toggle. Defaults to 'after'\n */\n this.labelPosition = 'after';\n /**\n * Used to set the aria-label attribute on the underlying input element.\n */\n this.ariaLabel = null;\n /**\n * Used to set the aria-labelledby attribute on the underlying input element.\n */\n this.ariaLabelledby = null;\n /**\n * An event will be dispatched each time the slide-toggle changes its value.\n */\n this.change = new EventEmitter();\n this.tabIndex = parseInt(tabIndex) || 0;\n }\n /**\n * Whether the slide-toggle is required.\n * @return {?}\n */\n get required() { return this._required; }\n /**\n * @param {?} value\n * @return {?}\n */\n set required(value) { this._required = coerceBooleanProperty(value); }\n /**\n * Whether the slide-toggle element is checked or not\n * @return {?}\n */\n get checked() { return this._checked; }\n /**\n * @param {?} value\n * @return {?}\n */\n set checked(value) {\n this._checked = !!value;\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Returns the unique id for the visual hidden input.\n * @return {?}\n */\n get inputId() { return `${this.id || this._uniqueId}-input`; }\n /**\n * @return {?}\n */\n ngAfterContentInit() {\n this._slideRenderer = new SlideToggleRenderer(this._elementRef, this._platform);\n this._focusMonitor\n .monitor(this._inputElement.nativeElement, this._renderer, false)\n .subscribe(focusOrigin => this._onInputFocusChange(focusOrigin));\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._inputElement.nativeElement);\n }\n /**\n * This function will called if the underlying input changed its value through user interaction.\n * @param {?} event\n * @return {?}\n */\n _onChangeEvent(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the component's `change` output.\n event.stopPropagation();\n // Sync the value from the underlying input element with the slide-toggle component.\n this.checked = this._inputElement.nativeElement.checked;\n // Emit our custom change event if the native input emitted one.\n // It is important to only emit it, if the native input triggered one, because we don't want\n // to trigger a change event, when the `checked` variable changes programmatically.\n this._emitChangeEvent();\n }\n /**\n * @param {?} event\n * @return {?}\n */\n _onInputClick(event) {\n // In some situations the user will release the mouse on the label element. The label element\n // redirects the click to the underlying input element and will result in a value change.\n // Prevent the default behavior if dragging, because the value will be set after drag.\n if (this._slideRenderer.dragging) {\n event.preventDefault();\n }\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `slide-toggle` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n /**\n * Implemented as part of ControlValueAccessor.\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this.checked = !!value;\n }\n /**\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /**\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Implemented as a part of ControlValueAccessor.\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Focuses the slide-toggle.\n * @return {?}\n */\n focus() {\n this._focusMonitor.focusVia(this._inputElement.nativeElement, 'keyboard');\n }\n /**\n * Toggles the checked state of the slide-toggle.\n * @return {?}\n */\n toggle() {\n this.checked = !this.checked;\n }\n /**\n * Function is called whenever the focus changes for the input element.\n * @param {?} focusOrigin\n * @return {?}\n */\n _onInputFocusChange(focusOrigin) {\n if (!this._focusRipple && focusOrigin === 'keyboard') {\n // For keyboard focus show a persistent ripple as focus indicator.\n this._focusRipple = this._ripple.launch(0, 0, { persistent: true, centered: true });\n }\n else if (!focusOrigin) {\n this.onTouched();\n // Fade out and clear the focus ripple if one is currently present.\n if (this._focusRipple) {\n this._focusRipple.fadeOut();\n this._focusRipple = null;\n }\n }\n }\n /**\n * Emits a change event on the `change` output. Also notifies the FormControl about the change.\n * @return {?}\n */\n _emitChangeEvent() {\n let /** @type {?} */ event = new MatSlideToggleChange();\n event.source = this;\n event.checked = this.checked;\n this.onChange(this.checked);\n this.change.emit(event);\n }\n /**\n * @return {?}\n */\n _onDragStart() {\n if (!this.disabled) {\n this._slideRenderer.startThumbDrag(this.checked);\n }\n }\n /**\n * @param {?} event\n * @return {?}\n */\n _onDrag(event) {\n if (this._slideRenderer.dragging) {\n this._slideRenderer.updateThumbPosition(event.deltaX);\n }\n }\n /**\n * @return {?}\n */\n _onDragEnd() {\n if (this._slideRenderer.dragging) {\n let /** @type {?} */ _previousChecked = this.checked;\n this.checked = this._slideRenderer.dragPercentage > 50;\n if (_previousChecked !== this.checked) {\n this._emitChangeEvent();\n }\n // The drag should be stopped outside of the current event handler, because otherwise the\n // click event will be fired before and will revert the drag change.\n setTimeout(() => this._slideRenderer.stopThumbDrag());\n }\n }\n /**\n * Method being called whenever the label text changes.\n * @return {?}\n */\n _onLabelTextChange() {\n // This method is getting called whenever the label of the slide-toggle changes.\n // Since the slide-toggle uses the OnPush strategy we need to notify it about the change\n // that has been recognized by the cdkObserveContent directive.\n this._changeDetectorRef.markForCheck();\n }\n}\nMatSlideToggle.decorators = [\n { type: Component, args: [{selector: 'mat-slide-toggle',\n host: {\n 'class': 'mat-slide-toggle',\n '[id]': 'id',\n '[class.mat-checked]': 'checked',\n '[class.mat-disabled]': 'disabled',\n '[class.mat-slide-toggle-label-before]': 'labelPosition == \"before\"',\n },\n template: \"\",\n styles: [\".mat-slide-toggle{display:inline-block;height:24px;line-height:24px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(16px,0,0)}.mat-slide-toggle.mat-disabled .mat-slide-toggle-label,.mat-slide-toggle.mat-disabled .mat-slide-toggle-thumb-container{cursor:default}.mat-slide-toggle-label{display:flex;flex:1;flex-direction:row;align-items:center;cursor:pointer}.mat-slide-toggle-label-before .mat-slide-toggle-label{order:1}.mat-slide-toggle-label-before .mat-slide-toggle-bar{order:2}.mat-slide-toggle-bar,[dir=rtl] .mat-slide-toggle-label-before .mat-slide-toggle-bar{margin-right:8px;margin-left:0}.mat-slide-toggle-label-before .mat-slide-toggle-bar,[dir=rtl] .mat-slide-toggle-bar{margin-left:8px;margin-right:0}.mat-slide-toggle-bar-no-side-margin{margin-left:0;margin-right:0}.mat-slide-toggle-thumb-container{position:absolute;z-index:1;width:20px;height:20px;top:-3px;left:0;transform:translate3d(0,0,0);transition:all 80ms linear;transition-property:transform;cursor:-webkit-grab;cursor:grab}.mat-slide-toggle-thumb-container.mat-dragging,.mat-slide-toggle-thumb-container:active{cursor:-webkit-grabbing;cursor:grabbing;transition-duration:0s}.mat-slide-toggle-thumb{height:20px;width:20px;border-radius:50%;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}@media screen and (-ms-high-contrast:active){.mat-slide-toggle-thumb{background:#fff;border:solid 1px #000}}.mat-slide-toggle-bar{position:relative;width:36px;height:14px;border-radius:8px}@media screen and (-ms-high-contrast:active){.mat-slide-toggle-bar{background:#fff}}.mat-slide-toggle-input{bottom:0;left:10px}.mat-slide-toggle-bar,.mat-slide-toggle-thumb{transition:all 80ms linear;transition-property:background-color;transition-delay:50ms}.mat-slide-toggle-ripple{position:absolute;top:-13px;left:-13px;height:46px;width:46px;border-radius:50%;z-index:1;pointer-events:none}\"],\n providers: [MAT_SLIDE_TOGGLE_VALUE_ACCESSOR],\n inputs: ['disabled', 'disableRipple', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n },] },\n];\n/**\n * @nocollapse\n */\nMatSlideToggle.ctorParameters = () => [\n { type: ElementRef, },\n { type: Renderer2, },\n { type: Platform, },\n { type: FocusMonitor, },\n { type: ChangeDetectorRef, },\n { type: undefined, decorators: [{ type: Attribute, args: ['tabindex',] },] },\n];\nMatSlideToggle.propDecorators = {\n 'name': [{ type: Input },],\n 'id': [{ type: Input },],\n 'labelPosition': [{ type: Input },],\n 'ariaLabel': [{ type: Input, args: ['aria-label',] },],\n 'ariaLabelledby': [{ type: Input, args: ['aria-labelledby',] },],\n 'required': [{ type: Input },],\n 'checked': [{ type: Input },],\n 'change': [{ type: Output },],\n '_inputElement': [{ type: ViewChild, args: ['input',] },],\n '_ripple': [{ type: ViewChild, args: [MatRipple,] },],\n};\nfunction MatSlideToggle_tsickle_Closure_declarations() {\n /** @type {?} */\n MatSlideToggle.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatSlideToggle.ctorParameters;\n /** @type {?} */\n MatSlideToggle.propDecorators;\n /** @type {?} */\n MatSlideToggle.prototype.onChange;\n /** @type {?} */\n MatSlideToggle.prototype.onTouched;\n /** @type {?} */\n MatSlideToggle.prototype._uniqueId;\n /** @type {?} */\n MatSlideToggle.prototype._slideRenderer;\n /** @type {?} */\n MatSlideToggle.prototype._required;\n /** @type {?} */\n MatSlideToggle.prototype._checked;\n /**\n * Reference to the focus state ripple.\n * @type {?}\n */\n MatSlideToggle.prototype._focusRipple;\n /**\n * Name value will be applied to the input element if present\n * @type {?}\n */\n MatSlideToggle.prototype.name;\n /**\n * A unique id for the slide-toggle input. If none is supplied, it will be auto-generated.\n * @type {?}\n */\n MatSlideToggle.prototype.id;\n /**\n * Whether the label should appear after or before the slide-toggle. Defaults to 'after'\n * @type {?}\n */\n MatSlideToggle.prototype.labelPosition;\n /**\n * Used to set the aria-label attribute on the underlying input element.\n * @type {?}\n */\n MatSlideToggle.prototype.ariaLabel;\n /**\n * Used to set the aria-labelledby attribute on the underlying input element.\n * @type {?}\n */\n MatSlideToggle.prototype.ariaLabelledby;\n /**\n * An event will be dispatched each time the slide-toggle changes its value.\n * @type {?}\n */\n MatSlideToggle.prototype.change;\n /**\n * Reference to the underlying input element.\n * @type {?}\n */\n MatSlideToggle.prototype._inputElement;\n /**\n * Reference to the ripple directive on the thumb container.\n * @type {?}\n */\n MatSlideToggle.prototype._ripple;\n /** @type {?} */\n MatSlideToggle.prototype._platform;\n /** @type {?} */\n MatSlideToggle.prototype._focusMonitor;\n /** @type {?} */\n MatSlideToggle.prototype._changeDetectorRef;\n}\n/**\n * Renderer for the Slide Toggle component, which separates DOM modification in its own class\n */\nclass SlideToggleRenderer {\n /**\n * @param {?} elementRef\n * @param {?} platform\n */\n constructor(elementRef, platform) {\n /**\n * Whether the thumb is currently being dragged.\n */\n this.dragging = false;\n // We only need to interact with these elements when we're on the browser, so only grab\n // the reference in that case.\n if (platform.isBrowser) {\n this._thumbEl = elementRef.nativeElement.querySelector('.mat-slide-toggle-thumb-container');\n this._thumbBarEl = elementRef.nativeElement.querySelector('.mat-slide-toggle-bar');\n }\n }\n /**\n * Initializes the drag of the slide-toggle.\n * @param {?} checked\n * @return {?}\n */\n startThumbDrag(checked) {\n if (this.dragging) {\n return;\n }\n this._thumbBarWidth = this._thumbBarEl.clientWidth - this._thumbEl.clientWidth;\n this._thumbEl.classList.add('mat-dragging');\n this._previousChecked = checked;\n this.dragging = true;\n }\n /**\n * Resets the current drag and returns the new checked value.\n * @return {?}\n */\n stopThumbDrag() {\n if (!this.dragging) {\n return false;\n }\n this.dragging = false;\n this._thumbEl.classList.remove('mat-dragging');\n // Reset the transform because the component will take care of the thumb position after drag.\n applyCssTransform(this._thumbEl, '');\n return this.dragPercentage > 50;\n }\n /**\n * Updates the thumb containers position from the specified distance.\n * @param {?} distance\n * @return {?}\n */\n updateThumbPosition(distance) {\n this.dragPercentage = this._getDragPercentage(distance);\n // Calculate the moved distance based on the thumb bar width.\n let /** @type {?} */ dragX = (this.dragPercentage / 100) * this._thumbBarWidth;\n applyCssTransform(this._thumbEl, `translate3d(${dragX}px, 0, 0)`);\n }\n /**\n * Retrieves the percentage of thumb from the moved distance. Percentage as fraction of 100.\n * @param {?} distance\n * @return {?}\n */\n _getDragPercentage(distance) {\n let /** @type {?} */ percentage = (distance / this._thumbBarWidth) * 100;\n // When the toggle was initially checked, then we have to start the drag at the end.\n if (this._previousChecked) {\n percentage += 100;\n }\n return Math.max(0, Math.min(percentage, 100));\n }\n}\nfunction SlideToggleRenderer_tsickle_Closure_declarations() {\n /**\n * Reference to the thumb HTMLElement.\n * @type {?}\n */\n SlideToggleRenderer.prototype._thumbEl;\n /**\n * Reference to the thumb bar HTMLElement.\n * @type {?}\n */\n SlideToggleRenderer.prototype._thumbBarEl;\n /**\n * Width of the thumb bar of the slide-toggle.\n * @type {?}\n */\n SlideToggleRenderer.prototype._thumbBarWidth;\n /**\n * Previous checked state before drag started.\n * @type {?}\n */\n SlideToggleRenderer.prototype._previousChecked;\n /**\n * Percentage of the thumb while dragging. Percentage as fraction of 100.\n * @type {?}\n */\n SlideToggleRenderer.prototype.dragPercentage;\n /**\n * Whether the thumb is currently being dragged.\n * @type {?}\n */\n SlideToggleRenderer.prototype.dragging;\n}\n//# sourceMappingURL=slide-toggle.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 { ObserversModule } from '@angular/cdk/observers';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { NgModule } from '@angular/core';\nimport { GestureConfig, MatCommonModule, MatRippleModule, } from '@angular/material/core';\nimport { HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { MatSlideToggle } from './slide-toggle';\nexport class MatSlideToggleModule {\n}\nMatSlideToggleModule.decorators = [\n { type: NgModule, args: [{\n imports: [MatRippleModule, MatCommonModule, PlatformModule, ObserversModule, A11yModule],\n exports: [MatSlideToggle, MatCommonModule],\n declarations: [MatSlideToggle],\n providers: [\n { provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig }\n ],\n },] },\n];\n/**\n * @nocollapse\n */\nMatSlideToggleModule.ctorParameters = () => [];\nfunction MatSlideToggleModule_tsickle_Closure_declarations() {\n /** @type {?} */\n MatSlideToggleModule.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatSlideToggleModule.ctorParameters;\n}\n//# sourceMappingURL=slide-toggle-module.js.map","/**\n * Generated bundle index. Do not edit.\n */\nexport { MatSlideToggleModule, MAT_SLIDE_TOGGLE_VALUE_ACCESSOR, MatSlideToggleChange, MatSlideToggleBase, _MatSlideToggleMixinBase, MatSlideToggle } from './public-api';\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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"}