UNPKG

@angular/material

Version:
1 lines 47.9 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 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 = false;\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() {\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 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 = false;\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() {\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":[],"mappings":"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"}