UNPKG

@angular/material

Version:
1 lines 29.5 kB
{"version":3,"file":"_option-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/core/option/option-parent.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/core/option/optgroup.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/core/option/optgroup.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/core/option/option.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/core/option/option.html"],"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 {InjectionToken, Signal} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n disableRipple?: boolean | Signal<boolean>;\n multiple?: boolean;\n inertGroups?: boolean;\n hideSingleSelectionIndicator?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT = new InjectionToken<MatOptionParentComponent>(\n 'MAT_OPTION_PARENT_COMPONENT',\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.dev/license\n */\n\nimport {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n Input,\n InjectionToken,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n// when the text will be read out so sometimes it comes in too late or never if the user\n// navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n// won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n// doesn't read out the text at all. Furthermore, on\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n selector: 'mat-optgroup',\n exportAs: 'matOptgroup',\n templateUrl: 'optgroup.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: 'optgroup.css',\n host: {\n 'class': 'mat-mdc-optgroup',\n '[attr.role]': '_inert ? null : \"group\"',\n '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n '[attr.aria-labelledby]': '_inert ? null : _labelId',\n },\n providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup {\n /** Label for the option group. */\n @Input() label: string;\n\n /** whether the option group is disabled. */\n @Input({transform: booleanAttribute}) disabled: boolean = false;\n\n /** Unique id for the underlying label. */\n _labelId: string = inject(_IdGenerator).getId('mat-optgroup-label-');\n\n /** Whether the group is in inert a11y mode. */\n _inert: boolean;\n\n constructor(...args: unknown[]);\n\n constructor() {\n const parent = inject<MatOptionParentComponent>(MAT_OPTION_PARENT_COMPONENT, {optional: true});\n this._inert = parent?.inertGroups ?? false;\n }\n}\n","<span\n class=\"mat-mdc-optgroup-label\"\n role=\"presentation\"\n [class.mdc-list-item--disabled]=\"disabled\"\n [id]=\"_labelId\">\n <span class=\"mdc-list-item__primary-text\">{{ label }} <ng-content></ng-content></span>\n</span>\n\n<ng-content select=\"mat-option, ng-container\"></ng-content>\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 {_IdGenerator, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {ENTER, hasModifierKey, SPACE} from '@angular/cdk/keycodes';\nimport {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ElementRef,\n ChangeDetectorRef,\n AfterViewChecked,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n QueryList,\n ViewChild,\n booleanAttribute,\n inject,\n isSignal,\n Signal,\n signal,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {MAT_OPTGROUP, MatOptgroup} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\nimport {MatRipple} from '../ripple/ripple';\nimport {MatPseudoCheckbox} from '../selection/pseudo-checkbox/pseudo-checkbox';\nimport {_StructuralStylesLoader} from '../focus-indicators/structural-styles';\nimport {_CdkPrivateStyleLoader, _VisuallyHiddenLoader} from '@angular/cdk/private';\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange<T = any> {\n constructor(\n /** Reference to the option that emitted the event. */\n public source: MatOption<T>,\n /** Whether the change in the option's value was a result of a user action. */\n public isUserInput = false,\n ) {}\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n selector: 'mat-option',\n exportAs: 'matOption',\n host: {\n 'role': 'option',\n '[class.mdc-list-item--selected]': 'selected',\n '[class.mat-mdc-option-multiple]': 'multiple',\n '[class.mat-mdc-option-active]': 'active',\n '[class.mdc-list-item--disabled]': 'disabled',\n '[id]': 'id',\n // Set aria-selected to false for non-selected items and true for selected items. Conform to\n // [WAI ARIA Listbox authoring practices guide](\n // https://www.w3.org/WAI/ARIA/apg/patterns/listbox/), \"If any options are selected, each\n // selected option has either aria-selected or aria-checked set to true. All options that are\n // selectable but not selected have either aria-selected or aria-checked set to false.\" Align\n // aria-selected implementation of Chips and List components.\n //\n // Set `aria-selected=\"false\"` on not-selected listbox options to fix VoiceOver announcing\n // every option as \"selected\" (#21491).\n '[attr.aria-selected]': 'selected',\n '[attr.aria-disabled]': 'disabled.toString()',\n '(click)': '_selectViaInteraction()',\n '(keydown)': '_handleKeydown($event)',\n 'class': 'mat-mdc-option mdc-list-item',\n },\n styleUrl: 'option.css',\n templateUrl: 'option.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatPseudoCheckbox, MatRipple],\n})\nexport class MatOption<T = any> implements FocusableOption, AfterViewChecked, OnDestroy {\n private _element = inject<ElementRef<HTMLElement>>(ElementRef);\n _changeDetectorRef = inject(ChangeDetectorRef);\n private _parent = inject<MatOptionParentComponent>(MAT_OPTION_PARENT_COMPONENT, {optional: true});\n group = inject<MatOptgroup>(MAT_OPTGROUP, {optional: true});\n\n private _signalDisableRipple = false;\n private _selected = false;\n private _active = false;\n private _mostRecentViewValue = '';\n\n /** Whether the wrapping component is in multiple selection mode. */\n get multiple() {\n return this._parent && this._parent.multiple;\n }\n\n /** Whether or not the option is currently selected. */\n get selected(): boolean {\n return this._selected;\n }\n\n /** The form value of the option. */\n @Input() value: T;\n\n /** The unique ID of the option. */\n @Input() id: string = inject(_IdGenerator).getId('mat-option-');\n\n /** Whether the option is disabled. */\n @Input({transform: booleanAttribute})\n get disabled(): boolean {\n return (this.group && this.group.disabled) || this._disabled();\n }\n set disabled(value: boolean) {\n this._disabled.set(value);\n }\n private _disabled = signal(false);\n\n /** Whether ripples for the option are disabled. */\n get disableRipple(): boolean {\n return this._signalDisableRipple\n ? (this._parent!.disableRipple as Signal<boolean>)()\n : !!this._parent?.disableRipple;\n }\n\n /** Whether to display checkmark for single-selection. */\n get hideSingleSelectionIndicator(): boolean {\n return !!(this._parent && this._parent.hideSingleSelectionIndicator);\n }\n\n /** Event emitted when the option is selected or deselected. */\n // tslint:disable-next-line:no-output-on-prefix\n @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange<T>>();\n\n /** Element containing the option's text. */\n @ViewChild('text', {static: true}) _text: ElementRef<HTMLElement> | undefined;\n\n /** Emits when the state of the option changes and any parents have to be notified. */\n readonly _stateChanges = new Subject<void>();\n\n constructor(...args: unknown[]);\n constructor() {\n const styleLoader = inject(_CdkPrivateStyleLoader);\n styleLoader.load(_StructuralStylesLoader);\n styleLoader.load(_VisuallyHiddenLoader);\n this._signalDisableRipple = !!this._parent && isSignal(this._parent.disableRipple);\n }\n\n /**\n * Whether or not the option is currently active and ready to be selected.\n * An active option displays styles as if it is focused, but the\n * focus is actually retained somewhere else. This comes in handy\n * for components like autocomplete where focus must remain on the input.\n */\n get active(): boolean {\n return this._active;\n }\n\n /**\n * The displayed value of the option. It is necessary to show the selected option in the\n * select's trigger.\n */\n get viewValue(): string {\n // TODO(kara): Add input property alternative for node envs.\n return (this._text?.nativeElement.textContent || '').trim();\n }\n\n /** Selects the option. */\n select(emitEvent = true): void {\n if (!this._selected) {\n this._selected = true;\n this._changeDetectorRef.markForCheck();\n\n if (emitEvent) {\n this._emitSelectionChangeEvent();\n }\n }\n }\n\n /** Deselects the option. */\n deselect(emitEvent = true): void {\n if (this._selected) {\n this._selected = false;\n this._changeDetectorRef.markForCheck();\n\n if (emitEvent) {\n this._emitSelectionChangeEvent();\n }\n }\n }\n\n /** Sets focus onto this option. */\n focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n const element = this._getHostElement();\n\n if (typeof element.focus === 'function') {\n element.focus(options);\n }\n }\n\n /**\n * This method sets display styles on the option to make it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setActiveStyles(): void {\n if (!this._active) {\n this._active = true;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * This method removes display styles on the option that made it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setInactiveStyles(): void {\n if (this._active) {\n this._active = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel(): string {\n return this.viewValue;\n }\n\n /** Ensures the option is selected when activated from the keyboard. */\n _handleKeydown(event: KeyboardEvent): void {\n if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n this._selectViaInteraction();\n\n // Prevent the page from scrolling down and form submits.\n event.preventDefault();\n }\n }\n\n /**\n * `Selects the option while indicating the selection came from the user. Used to\n * determine if the select's view -> model callback should be invoked.`\n */\n _selectViaInteraction(): void {\n if (!this.disabled) {\n this._selected = this.multiple ? !this._selected : true;\n this._changeDetectorRef.markForCheck();\n this._emitSelectionChangeEvent(true);\n }\n }\n\n /** Returns the correct tabindex for the option depending on disabled state. */\n // This method is only used by `MatLegacyOption`. Keeping it here to avoid breaking the types.\n // That's because `MatLegacyOption` use `MatOption` type in a few places such as\n // `MatOptionSelectionChange`. It is safe to delete this when `MatLegacyOption` is deleted.\n _getTabIndex(): string {\n return this.disabled ? '-1' : '0';\n }\n\n /** Gets the host DOM element. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n\n ngAfterViewChecked() {\n // Since parent components could be using the option's label to display the selected values\n // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n // relatively cheap, however we still limit them only to selected options in order to avoid\n // hitting the DOM too often.\n if (this._selected) {\n const viewValue = this.viewValue;\n\n if (viewValue !== this._mostRecentViewValue) {\n if (this._mostRecentViewValue) {\n this._stateChanges.next();\n }\n\n this._mostRecentViewValue = viewValue;\n }\n }\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n\n /** Emits the selection change event. */\n private _emitSelectionChangeEvent(isUserInput = false): void {\n this.onSelectionChange.emit(new MatOptionSelectionChange<T>(this, isUserInput));\n }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(\n optionIndex: number,\n options: QueryList<MatOption>,\n optionGroups: QueryList<MatOptgroup>,\n): number {\n if (optionGroups.length) {\n let optionsArray = options.toArray();\n let groups = optionGroups.toArray();\n let groupCounter = 0;\n\n for (let i = 0; i < optionIndex + 1; i++) {\n if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n groupCounter++;\n }\n }\n\n return groupCounter;\n }\n\n return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(\n optionOffset: number,\n optionHeight: number,\n currentScrollPosition: number,\n panelHeight: number,\n): number {\n if (optionOffset < currentScrollPosition) {\n return optionOffset;\n }\n\n if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n return Math.max(0, optionOffset - panelHeight + optionHeight);\n }\n\n return currentScrollPosition;\n}\n","<!-- Set aria-hidden=\"true\" to this DOM node and other decorative nodes in this file. This might\n be contributing to issue where sometimes VoiceOver focuses on a TextNode in the a11y tree instead\n of the Option node (#23202). Most assistive technology will generally ignore non-role,\n non-text-content elements. Adding aria-hidden seems to make VoiceOver behave more consistently. -->\n@if (multiple) {\n <mat-pseudo-checkbox\n class=\"mat-mdc-option-pseudo-checkbox\"\n [disabled]=\"disabled\"\n [state]=\"selected ? 'checked' : 'unchecked'\"\n aria-hidden=\"true\"></mat-pseudo-checkbox>\n}\n\n<ng-content select=\"mat-icon\"></ng-content>\n\n<span class=\"mdc-list-item__primary-text\" #text><ng-content></ng-content></span>\n\n<!-- Render checkmark at the end for single-selection. -->\n@if (!multiple && selected && !hideSingleSelectionIndicator) {\n <mat-pseudo-checkbox\n class=\"mat-mdc-option-pseudo-checkbox\"\n [disabled]=\"disabled\"\n state=\"checked\"\n aria-hidden=\"true\"\n appearance=\"minimal\"></mat-pseudo-checkbox>\n}\n\n<!-- See a11y notes inside optgroup.ts for context behind this element. -->\n@if (group && group._inert) {\n <span class=\"cdk-visually-hidden\">({{ group.label }})</span>\n}\n\n<div class=\"mat-mdc-option-ripple mat-focus-indicator\" aria-hidden=\"true\" mat-ripple\n [matRippleTrigger]=\"_getHostElement()\" [matRippleDisabled]=\"disabled || disableRipple\">\n</div>\n"],"names":["MAT_OPTION_PARENT_COMPONENT","InjectionToken","MAT_OPTGROUP","MatOptgroup","label","disabled","_labelId","inject","_IdGenerator","getId","_inert","constructor","parent","optional","inertGroups","deps","target","i0","ɵɵFactoryTarget","Component","ɵcmp","ɵɵngDeclareComponent","minVersion","version","type","isStandalone","selector","inputs","booleanAttribute","host","properties","classAttribute","providers","provide","useExisting","styles","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","decorators","exportAs","template","Input","transform","MatOptionSelectionChange","source","isUserInput","MatOption","_element","ElementRef","_changeDetectorRef","ChangeDetectorRef","_parent","group","_signalDisableRipple","_selected","_active","_mostRecentViewValue","multiple","selected","value","id","_disabled","set","signal","disableRipple","hideSingleSelectionIndicator","onSelectionChange","EventEmitter","_text","_stateChanges","Subject","styleLoader","_CdkPrivateStyleLoader","load","_StructuralStylesLoader","_VisuallyHiddenLoader","isSignal","active","viewValue","nativeElement","textContent","trim","select","emitEvent","markForCheck","_emitSelectionChangeEvent","deselect","focus","_origin","options","element","_getHostElement","setActiveStyles","setInactiveStyles","getLabel","_handleKeydown","event","keyCode","ENTER","SPACE","hasModifierKey","_selectViaInteraction","preventDefault","_getTabIndex","ngAfterViewChecked","next","ngOnDestroy","complete","emit","outputs","attributes","listeners","viewQueries","propertyName","first","predicate","descendants","static","ngImport","dependencies","kind","MatPseudoCheckbox","MatRipple","imports","Output","ViewChild","args","_countGroupLabelsBeforeOption","optionIndex","optionGroups","length","optionsArray","toArray","groups","groupCounter","i","_getOptionScrollPosition","optionOffset","optionHeight","currentScrollPosition","panelHeight","Math","max"],"mappings":"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"}