UNPKG

@angular/material

Version:
1 lines 52.2 kB
{"version":3,"file":"button-toggle.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/button-toggle/button-toggle.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/button-toggle/button-toggle.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/button-toggle/button-toggle-module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {_IdGenerator, FocusMonitor} from '@angular/cdk/a11y';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n DOWN_ARROW,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n hasModifierKey,\n} from '@angular/cdk/keycodes';\nimport {_CdkPrivateStyleLoader} from '@angular/cdk/private';\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostAttributeToken,\n inject,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n signal,\n ViewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {_animationsDisabled, _StructuralStylesLoader, MatPseudoCheckbox, MatRipple} from '../core';\n\n/**\n * @deprecated No longer used.\n * @breaking-change 11.0.0\n */\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 /**\n * Default appearance to be used by button toggles. Can be overridden by explicitly\n * setting an appearance on a button toggle or group.\n */\n appearance?: MatButtonToggleAppearance;\n /** Whether icon indicators should be hidden for single-selection button toggle groups. */\n hideSingleSelectionIndicator?: boolean;\n /** Whether icon indicators should be hidden for multiple-selection button toggle groups. */\n hideMultipleSelectionIndicator?: boolean;\n /** Whether disabled toggle buttons should be interactive. */\n disabledInteractive?: boolean;\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 = new InjectionToken<MatButtonToggleDefaultOptions>(\n 'MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS',\n {\n providedIn: 'root',\n factory: () => ({\n hideSingleSelectionIndicator: false,\n hideMultipleSelectionIndicator: false,\n disabledInteractive: false,\n }),\n },\n);\n\n/**\n * Injection token that can be used to reference instances of `MatButtonToggleGroup`.\n * It serves as alternative token to the actual `MatButtonToggleGroup` class which\n * could cause unnecessary retention of the class and its component metadata.\n */\nexport const MAT_BUTTON_TOGGLE_GROUP = new InjectionToken<MatButtonToggleGroup>(\n 'MatButtonToggleGroup',\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/** Change event object emitted by button toggle. */\nexport class MatButtonToggleChange {\n constructor(\n /** The button toggle that emits the event. */\n public source: MatButtonToggle,\n\n /** The value assigned to the button toggle. */\n public value: any,\n ) {}\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: MAT_BUTTON_TOGGLE_GROUP, useExisting: MatButtonToggleGroup},\n ],\n host: {\n 'class': 'mat-button-toggle-group',\n '(keydown)': '_keydown($event)',\n '[attr.role]': \"multiple ? 'group' : 'radiogroup'\",\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 _changeDetector = inject(ChangeDetectorRef);\n private _dir = inject(Directionality, {optional: true});\n\n private _multiple = false;\n private _disabled = false;\n private _disabledInteractive = 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), {\n // Note that this would technically pick up toggles\n // from nested groups, but that's not a case that we support.\n descendants: true,\n })\n _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 {\n return this._name;\n }\n set name(value: string) {\n this._name = value;\n this._markButtonsForCheck();\n }\n private _name = inject(_IdGenerator).getId('mat-button-toggle-group-');\n\n /** Whether the toggle group is vertical. */\n @Input({transform: booleanAttribute}) vertical: boolean;\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(): MatButtonToggle | MatButtonToggle[] {\n const selected = this._selectionModel ? this._selectionModel.selected : [];\n return this.multiple ? selected : selected[0] || null;\n }\n\n /** Whether multiple button toggles can be selected. */\n @Input({transform: booleanAttribute})\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: boolean) {\n this._multiple = value;\n this._markButtonsForCheck();\n }\n\n /** Whether multiple button toggle group is disabled. */\n @Input({transform: booleanAttribute})\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = value;\n this._markButtonsForCheck();\n }\n\n /** Whether buttons in the group should be interactive while they're disabled. */\n @Input({transform: booleanAttribute})\n get disabledInteractive(): boolean {\n return this._disabledInteractive;\n }\n set disabledInteractive(value: boolean) {\n this._disabledInteractive = value;\n this._markButtonsForCheck();\n }\n\n /** The layout direction of the toggle button group. */\n get dir(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Event emitted when the group's value changes. */\n @Output() readonly change: EventEmitter<MatButtonToggleChange> =\n new EventEmitter<MatButtonToggleChange>();\n\n /** Whether checkmark indicator for single-selection button toggle groups is hidden. */\n @Input({transform: booleanAttribute})\n get hideSingleSelectionIndicator(): boolean {\n return this._hideSingleSelectionIndicator;\n }\n set hideSingleSelectionIndicator(value: boolean) {\n this._hideSingleSelectionIndicator = value;\n this._markButtonsForCheck();\n }\n private _hideSingleSelectionIndicator: boolean;\n\n /** Whether checkmark indicator for multiple-selection button toggle groups is hidden. */\n @Input({transform: booleanAttribute})\n get hideMultipleSelectionIndicator(): boolean {\n return this._hideMultipleSelectionIndicator;\n }\n set hideMultipleSelectionIndicator(value: boolean) {\n this._hideMultipleSelectionIndicator = value;\n this._markButtonsForCheck();\n }\n private _hideMultipleSelectionIndicator: boolean;\n\n constructor(...args: unknown[]);\n\n constructor() {\n const defaultOptions = inject<MatButtonToggleDefaultOptions>(\n MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,\n {optional: true},\n );\n\n this.appearance =\n defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n this.hideSingleSelectionIndicator = defaultOptions?.hideSingleSelectionIndicator ?? false;\n this.hideMultipleSelectionIndicator = defaultOptions?.hideMultipleSelectionIndicator ?? false;\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 if (!this.multiple) {\n this._initializeTabIndex();\n }\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 /** Handle keydown event calling to single-select button toggle. */\n protected _keydown(event: KeyboardEvent) {\n if (this.multiple || this.disabled || hasModifierKey(event)) {\n return;\n }\n\n const target = event.target as HTMLButtonElement;\n const buttonId = target.id;\n const index = this._buttonToggles.toArray().findIndex(toggle => {\n return toggle.buttonId === buttonId;\n });\n\n let nextButton: MatButtonToggle | null = null;\n switch (event.keyCode) {\n case SPACE:\n case ENTER:\n nextButton = this._buttonToggles.get(index) || null;\n break;\n case UP_ARROW:\n nextButton = this._getNextButton(index, -1);\n break;\n case LEFT_ARROW:\n nextButton = this._getNextButton(index, this.dir === 'ltr' ? -1 : 1);\n break;\n case DOWN_ARROW:\n nextButton = this._getNextButton(index, 1);\n break;\n case RIGHT_ARROW:\n nextButton = this._getNextButton(index, this.dir === 'ltr' ? 1 : -1);\n break;\n default:\n return;\n }\n\n if (nextButton) {\n event.preventDefault();\n nextButton._onButtonClick();\n nextButton.focus();\n }\n }\n\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent(toggle: MatButtonToggle): void {\n const event = new MatButtonToggleChange(toggle, this.value);\n this._rawValue = event.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(\n toggle: MatButtonToggle,\n select: boolean,\n isUserInput = false,\n deferEvents = false,\n ) {\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 (this._selectionModel) {\n if (select) {\n this._selectionModel.select(toggle);\n } else {\n this._selectionModel.deselect(toggle);\n }\n } else {\n deferEvents = true;\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().then(() => this._updateModelValue(toggle, isUserInput));\n } else {\n this._updateModelValue(toggle, isUserInput);\n }\n }\n\n /** Checks whether a button toggle is selected. */\n _isSelected(toggle: MatButtonToggle) {\n return this._selectionModel && 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 /** Initializes the tabindex attribute using the radio pattern. */\n private _initializeTabIndex() {\n this._buttonToggles.forEach(toggle => {\n toggle.tabIndex = -1;\n });\n if (this.selected) {\n (this.selected as MatButtonToggle).tabIndex = 0;\n } else {\n for (let i = 0; i < this._buttonToggles.length; i++) {\n const toggle = this._buttonToggles.get(i)!;\n\n if (!toggle.disabled) {\n toggle.tabIndex = 0;\n break;\n }\n }\n }\n }\n\n /** Obtain the subsequent toggle to which the focus shifts. */\n private _getNextButton(startIndex: number, offset: number): MatButtonToggle | null {\n const items = this._buttonToggles;\n\n for (let i = 1; i <= items.length; i++) {\n const index = (startIndex + offset * i + items.length) % items.length;\n const item = items.get(index);\n\n if (item && !item.disabled) {\n return item;\n }\n }\n\n return null;\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 const toggles = this._buttonToggles.toArray();\n\n if (this.multiple && value) {\n if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\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, toggles));\n } else {\n this._clearSelection();\n this._selectValue(value, toggles);\n }\n\n // In single selection mode we need at least one enabled toggle to always be focusable.\n if (!this.multiple && toggles.every(toggle => toggle.tabIndex === -1)) {\n for (const toggle of toggles) {\n if (!toggle.disabled) {\n toggle.tabIndex = 0;\n break;\n }\n }\n }\n }\n\n /** Clears the selected toggles. */\n private _clearSelection() {\n this._selectionModel.clear();\n this._buttonToggles.forEach(toggle => {\n toggle.checked = false;\n // If the button toggle is in single select mode, initialize the tabIndex.\n if (!this.multiple) {\n toggle.tabIndex = -1;\n }\n });\n }\n\n /** Selects a value if there's a toggle that corresponds to it. */\n private _selectValue(value: any, toggles: MatButtonToggle[]) {\n for (const toggle of toggles) {\n if (toggle.value === value) {\n toggle.checked = true;\n this._selectionModel.select(toggle);\n if (!this.multiple) {\n // If the button toggle is in single select mode, reset the tabIndex.\n toggle.tabIndex = 0;\n }\n break;\n }\n }\n }\n\n /** Syncs up the group's value with the model and emits the change event. */\n private _updateModelValue(toggle: MatButtonToggle, isUserInput: boolean) {\n // Only emit the change event for user input.\n if (isUserInput) {\n this._emitChangeEvent(toggle);\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 /** Marks all of the child button toggles to be checked. */\n private _markButtonsForCheck() {\n this._buttonToggles?.forEach(toggle => toggle._markForCheck());\n }\n}\n\n/** Single button inside of a toggle group. */\n@Component({\n selector: 'mat-button-toggle',\n templateUrl: 'button-toggle.html',\n styleUrl: 'button-toggle.css',\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matButtonToggle',\n changeDetection: ChangeDetectionStrategy.OnPush,\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-disabled-interactive]': 'disabledInteractive',\n '[class.mat-button-toggle-appearance-standard]': 'appearance === \"standard\"',\n 'class': 'mat-button-toggle',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.id]': 'id',\n '[attr.name]': 'null',\n '(focus)': 'focus()',\n 'role': 'presentation',\n },\n imports: [MatRipple, MatPseudoCheckbox],\n})\nexport class MatButtonToggle implements OnInit, AfterViewInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _focusMonitor = inject(FocusMonitor);\n private _idGenerator = inject(_IdGenerator);\n private _animationDisabled = _animationsDisabled();\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 /** Underlying native `button` element. */\n @ViewChild('button') _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 {\n return `${this.id}-button`;\n }\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 of the toggle. */\n @Input()\n get tabIndex(): number | null {\n return this._tabIndex();\n }\n set tabIndex(value: number | null) {\n this._tabIndex.set(value);\n }\n private _tabIndex: WritableSignal<number | null>;\n\n /** Whether ripples are disabled on the button toggle. */\n @Input({transform: booleanAttribute}) disableRipple: boolean;\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({transform: booleanAttribute})\n get checked(): boolean {\n return this.buttonToggleGroup ? this.buttonToggleGroup._isSelected(this) : this._checked;\n }\n set checked(value: boolean) {\n if (value !== this._checked) {\n this._checked = value;\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({transform: booleanAttribute})\n get disabled(): boolean {\n return this._disabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n private _disabled: boolean = false;\n\n /** Whether the button should remain interactive when it is disabled. */\n @Input({transform: booleanAttribute})\n get disabledInteractive(): boolean {\n return (\n this._disabledInteractive ||\n (this.buttonToggleGroup !== null && this.buttonToggleGroup.disabledInteractive)\n );\n }\n set disabledInteractive(value: boolean) {\n this._disabledInteractive = value;\n }\n private _disabledInteractive: boolean;\n\n /** Event emitted when the group value changes. */\n @Output() readonly change: EventEmitter<MatButtonToggleChange> =\n new EventEmitter<MatButtonToggleChange>();\n\n constructor(...args: unknown[]);\n\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n const toggleGroup = inject<MatButtonToggleGroup>(MAT_BUTTON_TOGGLE_GROUP, {optional: true})!;\n const defaultTabIndex = inject(new HostAttributeToken('tabindex'), {optional: true}) || '';\n const defaultOptions = inject<MatButtonToggleDefaultOptions>(\n MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,\n {optional: true},\n );\n\n this._tabIndex = signal<number | null>(parseInt(defaultTabIndex) || 0);\n this.buttonToggleGroup = toggleGroup;\n this.appearance =\n defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n this.disabledInteractive = defaultOptions?.disabledInteractive ?? false;\n }\n\n ngOnInit() {\n const group = this.buttonToggleGroup;\n this.id = this.id || this._idGenerator.getId('mat-button-toggle-');\n\n if (group) {\n if (group._isPrechecked(this)) {\n this.checked = true;\n } else if (group._isSelected(this) !== this._checked) {\n // As side effect of the circular dependency between the toggle group and the button,\n // we may end up in a state where the button is supposed to be checked on init, but it\n // isn't, because the checked value was assigned too early. This can happen when Ivy\n // assigns the static input value before the `ngOnInit` has run.\n group._syncButtonToggle(this, this._checked);\n }\n }\n }\n\n ngAfterViewInit() {\n // This serves two purposes:\n // 1. We don't want the animation to fire on the first render for pre-checked toggles so we\n // delay adding the class until the view is rendered.\n // 2. We don't want to animate if animations are disabled.\n if (!this._animationDisabled) {\n this._elementRef.nativeElement.classList.add('mat-button-toggle-animations-enabled');\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(options?: FocusOptions): void {\n this._buttonElement.nativeElement.focus(options);\n }\n\n /** Checks the button toggle due to an interaction with the underlying native button. */\n _onButtonClick() {\n if (this.disabled) {\n return;\n }\n\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\n if (this.isSingleSelector()) {\n const focusable = this.buttonToggleGroup._buttonToggles.find(toggle => {\n return toggle.tabIndex === 0;\n });\n // Modify the tabindex attribute of the last focusable button toggle to -1.\n if (focusable) {\n focusable.tabIndex = -1;\n }\n // Modify the tabindex attribute of the presently selected button toggle to 0.\n this.tabIndex = 0;\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 /** Gets the name that should be assigned to the inner DOM node. */\n _getButtonName(): string | null {\n if (this.isSingleSelector()) {\n return this.buttonToggleGroup.name;\n }\n return this.name || null;\n }\n\n /** Whether the toggle is in single selection mode. */\n isSingleSelector(): boolean {\n return this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\n }\n}\n","<button #button class=\"mat-button-toggle-button mat-focus-indicator\"\n type=\"button\"\n [id]=\"buttonId\"\n [attr.role]=\"isSingleSelector() ? 'radio' : 'button'\"\n [attr.tabindex]=\"disabled && !disabledInteractive ? -1 : tabIndex\"\n [attr.aria-pressed]=\"!isSingleSelector() ? checked : null\"\n [attr.aria-checked]=\"isSingleSelector() ? checked : null\"\n [disabled]=\"(disabled && !disabledInteractive) || null\"\n [attr.name]=\"_getButtonName()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-disabled]=\"disabled && disabledInteractive ? 'true' : null\"\n (click)=\"_onButtonClick()\">\n @if (buttonToggleGroup && (\n !buttonToggleGroup.multiple && !buttonToggleGroup.hideSingleSelectionIndicator ||\n buttonToggleGroup.multiple && !buttonToggleGroup.hideMultipleSelectionIndicator)\n ) {\n <div class=\"mat-button-toggle-checkbox-wrapper\">\n <mat-pseudo-checkbox\n [disabled]=\"disabled\"\n state=\"checked\"\n aria-hidden=\"true\"\n appearance=\"minimal\"/>\n </div>\n }\n\n <span class=\"mat-button-toggle-label-content\">\n <ng-content></ng-content>\n </span>\n</button>\n\n<span class=\"mat-button-toggle-focus-overlay\"></span>\n<span class=\"mat-button-toggle-ripple\" matRipple\n [matRippleTrigger]=\"button\"\n [matRippleDisabled]=\"disableRipple || disabled\">\n</span>\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.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {MatRippleModule} from '../core';\nimport {MatButtonToggle, MatButtonToggleGroup} from './button-toggle';\n\n@NgModule({\n imports: [MatRippleModule, MatButtonToggleGroup, MatButtonToggle],\n exports: [BidiModule, MatButtonToggleGroup, MatButtonToggle],\n})\nexport class MatButtonToggleModule {}\n"],"names":["MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS","InjectionToken","providedIn","factory","hideSingleSelectionIndicator","hideMultipleSelectionIndicator","disabledInteractive","MAT_BUTTON_TOGGLE_GROUP","MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","MatButtonToggleGroup","multi","MatButtonToggleChange","source","value","constructor","_changeDetector","inject","ChangeDetectorRef","_dir","Directionality","optional","_multiple","_disabled","_disabledInteractive","_selectionModel","_rawValue","_controlValueAccessorChangeFn","_onTouched","_buttonToggles","appearance","name","_name","_markButtonsForCheck","_IdGenerator","getId","vertical","selected","multiple","map","toggle","undefined","newValue","_setSelectionByValue","valueChange","emit","EventEmitter","disabled","dir","change","_hideSingleSelectionIndicator","_hideMultipleSelectionIndicator","defaultOptions","ngOnInit","SelectionModel","ngAfterContentInit","select","filter","checked","_initializeTabIndex","writeValue","markForCheck","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","_keydown","event","hasModifierKey","target","buttonId","id","index","toArray","findIndex","nextButton","keyCode","SPACE","ENTER","get","UP_ARROW","_getNextButton","LEFT_ARROW","DOWN_ARROW","RIGHT_ARROW","preventDefault","_onButtonClick","focus","_emitChangeEvent","_syncButtonToggle","isUserInput","deferEvents","deselect","Promise","resolve","then","_updateModelValue","_isSelected","isSelected","_isPrechecked","Array","isArray","some","forEach","tabIndex","i","length","startIndex","offset","items","item","toggles","ngDevMode","Error","_clearSelection","currentValue","_selectValue","every","clear","_markForCheck","deps","i0","ɵɵFactoryTarget","Directive","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","isStandalone","selector","inputs","booleanAttribute","outputs","host","listeners","properties","classAttribute","providers","queries","propertyName","predicate","MatButtonToggle","descendants","exportAs","ngImport","decorators","args","ContentChildren","Input","transform","Output","_changeDetectorRef","_elementRef","ElementRef","_focusMonitor","FocusMonitor","_idGenerator","_animationDisabled","_animationsDisabled","_checked","ariaLabel","ariaLabelledby","_buttonElement","buttonToggleGroup","_tabIndex","set","disableRipple","_appearance","_CdkPrivateStyleLoader","load","_StructuralStylesLoader","toggleGroup","defaultTabIndex","HostAttributeToken","signal","parseInt","debugName","group","ngAfterViewInit","nativeElement","classList","add","monitor","ngOnDestroy","stopMonitoring","options","newChecked","isSingleSelector","focusable","find","_getButtonName","Component","ɵcmp","ɵɵngDeclareComponent","attributes","viewQueries","first","template","styles","dependencies","kind","MatRipple","MatPseudoCheckbox","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","imports","ViewChild","MatButtonToggleModule","NgModule","MatRippleModule","exports","BidiModule","ɵinj","ɵɵngDeclareInjector"],"mappings":"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