blob: db38bcf94a9f676104cdf330b6890ccfe5808fc6 [file] [log] [blame]
{"version":3,"file":"material-button-toggle.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/material/button-toggle/button-toggle.ts","../../src/material/button-toggle/button-toggle-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} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n InjectionToken,\n Inject,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanDisableRipple,\n mixinDisableRipple,\n CanDisableRippleCtor,\n} from '@angular/material/core';\n\n\n/** Acceptable types for a button toggle. */\nexport type ToggleType = 'checkbox' | 'radio';\n\n/** Possible appearance styles for the button toggle. */\nexport type MatButtonToggleAppearance = 'legacy' | 'standard';\n\n/**\n * Represents the default options for the button toggle that can be configured\n * using the `MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS` injection token.\n */\nexport interface MatButtonToggleDefaultOptions {\n appearance?: MatButtonToggleAppearance;\n}\n\n/**\n * Injection token that can be used to configure the\n * default options for all button toggles within an app.\n */\nexport const MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS =\n new InjectionToken<MatButtonToggleDefaultOptions>('MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS');\n\n\n\n/**\n * Provider Expression that allows mat-button-toggle-group to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * @docs-private\n */\nexport const MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatButtonToggleGroup),\n multi: true\n};\n\n/**\n * @deprecated Use `MatButtonToggleGroup` instead.\n * @breaking-change 8.0.0\n */\nexport class MatButtonToggleGroupMultiple {}\n\nlet _uniqueIdCounter = 0;\n\n/** Change event object emitted by MatButtonToggle. */\nexport class MatButtonToggleChange {\n constructor(\n /** The MatButtonToggle that emits the event. */\n public source: MatButtonToggle,\n\n /** The value assigned to the MatButtonToggle. */\n public value: any) {}\n}\n\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\n@Directive({\n selector: 'mat-button-toggle-group',\n providers: [\n MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,\n {provide: MatButtonToggleGroupMultiple, useExisting: MatButtonToggleGroup},\n ],\n host: {\n 'role': 'group',\n 'class': 'mat-button-toggle-group',\n '[attr.aria-disabled]': 'disabled',\n '[class.mat-button-toggle-vertical]': 'vertical',\n '[class.mat-button-toggle-group-appearance-standard]': 'appearance === \"standard\"',\n },\n exportAs: 'matButtonToggleGroup',\n})\nexport class MatButtonToggleGroup implements ControlValueAccessor, OnInit, AfterContentInit {\n private _vertical = false;\n private _multiple = false;\n private _disabled = false;\n private _selectionModel: SelectionModel<MatButtonToggle>;\n\n /**\n * Reference to the raw value that the consumer tried to assign. The real\n * value will exclude any values from this one that don't correspond to a\n * toggle. Useful for the cases where the value is assigned before the toggles\n * have been initialized or at the same that they're being swapped out.\n */\n private _rawValue: any;\n\n /**\n * The method to be called in order to update ngModel.\n * Now `ngModel` binding is not supported in multiple selection mode.\n */\n _controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n _onTouched: () => any = () => {};\n\n /** Child button toggle buttons. */\n @ContentChildren(forwardRef(() => MatButtonToggle)) _buttonToggles: QueryList<MatButtonToggle>;\n\n /** The appearance for all the buttons in the group. */\n @Input() appearance: MatButtonToggleAppearance;\n\n /** `name` attribute for the underlying `input` element. */\n @Input()\n get name(): string { return this._name; }\n set name(value: string) {\n this._name = value;\n\n if (this._buttonToggles) {\n this._buttonToggles.forEach(toggle => {\n toggle.name = this._name;\n toggle._markForCheck();\n });\n }\n }\n private _name = `mat-button-toggle-group-${_uniqueIdCounter++}`;\n\n /** Whether the toggle group is vertical. */\n @Input()\n get vertical(): boolean { return this._vertical; }\n set vertical(value: boolean) {\n this._vertical = coerceBooleanProperty(value);\n }\n\n /** Value of the toggle group. */\n @Input()\n get value(): any {\n const selected = this._selectionModel ? this._selectionModel.selected : [];\n\n if (this.multiple) {\n return selected.map(toggle => toggle.value);\n }\n\n return selected[0] ? selected[0].value : undefined;\n }\n set value(newValue: any) {\n this._setSelectionByValue(newValue);\n this.valueChange.emit(this.value);\n }\n\n /**\n * Event that emits whenever the value of the group changes.\n * Used to facilitate two-way data binding.\n * @docs-private\n */\n @Output() readonly valueChange = new EventEmitter<any>();\n\n /** Selected button toggles in the group. */\n get selected() {\n const selected = this._selectionModel.selected;\n return this.multiple ? selected : (selected[0] || null);\n }\n\n /** Whether multiple button toggles can be selected. */\n @Input()\n get multiple(): boolean { return this._multiple; }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n\n /** Whether multiple button toggle group is disabled. */\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._buttonToggles) {\n this._buttonToggles.forEach(toggle => toggle._markForCheck());\n }\n }\n\n /** Event emitted when the group's value changes. */\n @Output() readonly change: EventEmitter<MatButtonToggleChange> =\n new EventEmitter<MatButtonToggleChange>();\n\n constructor(\n private _changeDetector: ChangeDetectorRef,\n @Optional() @Inject(MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS)\n defaultOptions?: MatButtonToggleDefaultOptions) {\n\n this.appearance =\n defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n }\n\n ngOnInit() {\n this._selectionModel = new SelectionModel<MatButtonToggle>(this.multiple, undefined, false);\n }\n\n ngAfterContentInit() {\n this._selectionModel.select(...this._buttonToggles.filter(toggle => toggle.checked));\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value Value to be set to the model.\n */\n writeValue(value: any) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: any) {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent(): void {\n const selected = this.selected;\n const source = Array.isArray(selected) ? selected[selected.length - 1] : selected;\n const event = new MatButtonToggleChange(source!, this.value);\n this._controlValueAccessorChangeFn(event.value);\n this.change.emit(event);\n }\n\n /**\n * Syncs a button toggle's selected state with the model value.\n * @param toggle Toggle to be synced.\n * @param select Whether the toggle should be selected.\n * @param isUserInput Whether the change was a result of a user interaction.\n * @param deferEvents Whether to defer emitting the change events.\n */\n _syncButtonToggle(toggle: MatButtonToggle,\n select: boolean,\n isUserInput = false,\n deferEvents = false) {\n // Deselect the currently-selected toggle, if we're in single-selection\n // mode and the button being toggled isn't selected at the moment.\n if (!this.multiple && this.selected && !toggle.checked) {\n (this.selected as MatButtonToggle).checked = false;\n }\n\n if (select) {\n this._selectionModel.select(toggle);\n } else {\n this._selectionModel.deselect(toggle);\n }\n\n // We need to defer in some cases in order to avoid \"changed after checked errors\", however\n // the side-effect is that we may end up updating the model value out of sequence in others\n // The `deferEvents` flag allows us to decide whether to do it on a case-by-case basis.\n if (deferEvents) {\n Promise.resolve(() => this._updateModelValue(isUserInput));\n } else {\n this._updateModelValue(isUserInput);\n }\n }\n\n /** Checks whether a button toggle is selected. */\n _isSelected(toggle: MatButtonToggle) {\n return this._selectionModel.isSelected(toggle);\n }\n\n /** Determines whether a button toggle should be checked on init. */\n _isPrechecked(toggle: MatButtonToggle) {\n if (typeof this._rawValue === 'undefined') {\n return false;\n }\n\n if (this.multiple && Array.isArray(this._rawValue)) {\n return this._rawValue.some(value => toggle.value != null && value === toggle.value);\n }\n\n return toggle.value === this._rawValue;\n }\n\n /** Updates the selection state of the toggles in the group based on a value. */\n private _setSelectionByValue(value: any|any[]) {\n this._rawValue = value;\n\n if (!this._buttonToggles) {\n return;\n }\n\n if (this.multiple && value) {\n if (!Array.isArray(value)) {\n throw Error('Value must be an array in multiple-selection mode.');\n }\n\n this._clearSelection();\n value.forEach((currentValue: any) => this._selectValue(currentValue));\n } else {\n this._clearSelection();\n this._selectValue(value);\n }\n }\n\n /** Clears the selected toggles. */\n private _clearSelection() {\n this._selectionModel.clear();\n this._buttonToggles.forEach(toggle => toggle.checked = false);\n }\n\n /** Selects a value if there's a toggle that corresponds to it. */\n private _selectValue(value: any) {\n const correspondingOption = this._buttonToggles.find(toggle => {\n return toggle.value != null && toggle.value === value;\n });\n\n if (correspondingOption) {\n correspondingOption.checked = true;\n this._selectionModel.select(correspondingOption);\n }\n }\n\n /** Syncs up the group's value with the model and emits the change event. */\n private _updateModelValue(isUserInput: boolean) {\n // Only emit the change event for user input.\n if (isUserInput) {\n this._emitChangeEvent();\n }\n\n // Note: we emit this one no matter whether it was a user interaction, because\n // it is used by Angular to sync up the two-way data binding.\n this.valueChange.emit(this.value);\n }\n}\n\n// Boilerplate for applying mixins to the MatButtonToggle class.\n/** @docs-private */\nclass MatButtonToggleBase {}\nconst _MatButtonToggleMixinBase: CanDisableRippleCtor & typeof MatButtonToggleBase =\n mixinDisableRipple(MatButtonToggleBase);\n\n/** Single button inside of a toggle group. */\n@Component({\n moduleId: module.id,\n selector: 'mat-button-toggle',\n templateUrl: 'button-toggle.html',\n styleUrls: ['button-toggle.css'],\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matButtonToggle',\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disableRipple'],\n host: {\n '[class.mat-button-toggle-standalone]': '!buttonToggleGroup',\n '[class.mat-button-toggle-checked]': 'checked',\n '[class.mat-button-toggle-disabled]': 'disabled',\n '[class.mat-button-toggle-appearance-standard]': 'appearance === \"standard\"',\n 'class': 'mat-button-toggle',\n // Always reset the tabindex to -1 so it doesn't conflict with the one on the `button`,\n // but can still receive focus from things like cdkFocusInitial.\n '[attr.tabindex]': '-1',\n '[attr.id]': 'id',\n '[attr.name]': 'null',\n '(focus)': 'focus()',\n }\n})\nexport class MatButtonToggle extends _MatButtonToggleMixinBase implements OnInit,\n CanDisableRipple, OnDestroy {\n\n private _isSingleSelector = false;\n private _checked = false;\n\n /**\n * Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will\n * take precedence so this may be omitted.\n */\n @Input('aria-label') ariaLabel: string;\n\n /**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\n @Input('aria-labelledby') ariaLabelledby: string | null = null;\n\n /** Type of the button toggle. Either 'radio' or 'checkbox'. */\n _type: ToggleType;\n\n @ViewChild('button', {static: false}) _buttonElement: ElementRef<HTMLButtonElement>;\n\n /** The parent button toggle group (exclusive selection). Optional. */\n buttonToggleGroup: MatButtonToggleGroup;\n\n /** Unique ID for the underlying `button` element. */\n get buttonId(): string { return `${this.id}-button`; }\n\n /** The unique ID for this button toggle. */\n @Input() id: string;\n\n /** HTML's 'name' attribute used to group radios for unique selection. */\n @Input() name: string;\n\n /** MatButtonToggleGroup reads this to assign its own value. */\n @Input() value: any;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** The appearance style of the button. */\n @Input()\n get appearance(): MatButtonToggleAppearance {\n return this.buttonToggleGroup ? this.buttonToggleGroup.appearance : this._appearance;\n }\n set appearance(value: MatButtonToggleAppearance) {\n this._appearance = value;\n }\n private _appearance: MatButtonToggleAppearance;\n\n /** Whether the button is checked. */\n @Input()\n get checked(): boolean {\n return this.buttonToggleGroup ? this.buttonToggleGroup._isSelected(this) : this._checked;\n }\n set checked(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._checked) {\n this._checked = newValue;\n\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._syncButtonToggle(this, this._checked);\n }\n\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Whether the button is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\n }\n set disabled(value: boolean) { this._disabled = coerceBooleanProperty(value); }\n private _disabled: boolean = false;\n\n /** Event emitted when the group value changes. */\n @Output() readonly change: EventEmitter<MatButtonToggleChange> =\n new EventEmitter<MatButtonToggleChange>();\n\n constructor(@Optional() toggleGroup: MatButtonToggleGroup,\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef<HTMLElement>,\n private _focusMonitor: FocusMonitor,\n // @breaking-change 8.0.0 `defaultTabIndex` to be made a required parameter.\n @Attribute('tabindex') defaultTabIndex: string,\n @Optional() @Inject(MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS)\n defaultOptions?: MatButtonToggleDefaultOptions) {\n super();\n\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n this.buttonToggleGroup = toggleGroup;\n this.appearance =\n defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n }\n\n ngOnInit() {\n this._isSingleSelector = this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\n this._type = this._isSingleSelector ? 'radio' : 'checkbox';\n this.id = this.id || `mat-button-toggle-${_uniqueIdCounter++}`;\n\n if (this._isSingleSelector) {\n this.name = this.buttonToggleGroup.name;\n }\n\n if (this.buttonToggleGroup && this.buttonToggleGroup._isPrechecked(this)) {\n this.checked = true;\n }\n\n this._focusMonitor.monitor(this._elementRef, true);\n }\n\n ngOnDestroy() {\n const group = this.buttonToggleGroup;\n\n this._focusMonitor.stopMonitoring(this._elementRef);\n\n // Remove the toggle from the selection once it's destroyed. Needs to happen\n // on the next tick in order to avoid \"changed after checked\" errors.\n if (group && group._isSelected(this)) {\n group._syncButtonToggle(this, false, false, true);\n }\n }\n\n /** Focuses the button. */\n focus(): void {\n this._buttonElement.nativeElement.focus();\n }\n\n /** Checks the button toggle due to an interaction with the underlying native button. */\n _onButtonClick() {\n const newChecked = this._isSingleSelector ? true : !this._checked;\n\n if (newChecked !== this._checked) {\n this._checked = newChecked;\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._syncButtonToggle(this, this._checked, true);\n this.buttonToggleGroup._onTouched();\n }\n }\n // Emit a change event when it's the single selector\n this.change.emit(new MatButtonToggleChange(this, this.value));\n }\n\n /**\n * Marks the button toggle as needing checking for change detection.\n * This method is exposed because the parent button toggle group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When the group value changes, the button will not be notified.\n // Use `markForCheck` to explicit update button toggle's status.\n this._changeDetectorRef.markForCheck();\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 {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatButtonToggle, MatButtonToggleGroup} from './button-toggle';\n\n\n@NgModule({\n imports: [MatCommonModule, MatRippleModule],\n exports: [MatCommonModule, MatButtonToggleGroup, MatButtonToggle],\n declarations: [MatButtonToggleGroup, MatButtonToggle],\n})\nexport class MatButtonToggleModule {}\n"],"names":["__extends","d","b","__","this","constructor","extendStatics","prototype","Object","create","setPrototypeOf","__proto__","Array","p","hasOwnProperty","MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS","InjectionToken","MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","MatButtonToggleGroup","multi","MatButtonToggleGroupMultiple","_uniqueIdCounter","MatButtonToggleChange","source","value","_changeDetector","defaultOptions","_vertical","_multiple","_disabled","_controlValueAccessorChangeFn","_onTouched","_name","valueChange","EventEmitter","change","appearance","defineProperty","_this","_buttonToggles","forEach","toggle","name","_markForCheck","coerceBooleanProperty","selected","_selectionModel","multiple","map","undefined","newValue","_setSelectionByValue","emit","ngOnInit","SelectionModel","ngAfterContentInit","_a","select","apply","filter","checked","writeValue","markForCheck","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disabled","_emitChangeEvent","isArray","length","event","_syncButtonToggle","isUserInput","deferEvents","deselect","_updateModelValue","_isSelected","isSelected","_isPrechecked","_rawValue","some","Error","_clearSelection","currentValue","_selectValue","clear","correspondingOption","find","type","Directive","args","selector","providers","host","role","class","[attr.aria-disabled]","[class.mat-button-toggle-vertical]","[class.mat-button-toggle-group-appearance-standard]","exportAs","ChangeDetectorRef","decorators","Optional","Inject","ContentChildren","MatButtonToggle","Input","vertical","Output","MatButtonToggleBase","_MatButtonToggleMixinBase","mixinDisableRipple","_super","toggleGroup","_changeDetectorRef","_elementRef","_focusMonitor","defaultTabIndex","call","_isSingleSelector","_checked","ariaLabelledby","parsedTabIndex","Number","tabIndex","buttonToggleGroup","tslib_1.__extends","id","_appearance","_type","monitor","ngOnDestroy","group","stopMonitoring","focus","_buttonElement","nativeElement","_onButtonClick","newChecked","Component","template","styles","encapsulation","ViewEncapsulation","None","changeDetection","ChangeDetectionStrategy","OnPush","inputs","[class.mat-button-toggle-standalone]","[class.mat-button-toggle-checked]","[class.mat-button-toggle-disabled]","[class.mat-button-toggle-appearance-standard]","[attr.name]","(focus)","ElementRef","FocusMonitor","String","Attribute","propDecorators","ViewChild","static","MatButtonToggleModule","NgModule","imports","MatCommonModule","MatRippleModule","exports","declarations"],"mappings":"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"}