@angular/material
Version:
Angular Material
1 lines • 86.4 kB
Source Map (JSON)
{"version":3,"file":"select.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/select/select-errors.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/select/select.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/select/select.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/select/select-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\n// Note that these have been copied over verbatim from\n// `material/select` so that we don't have to expose them publicly.\n\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nexport function getMatSelectDynamicMultipleError(): Error {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nexport function getMatSelectNonArrayValueError(): Error {\n return Error('Value must be an array in multiple-selection mode.');\n}\n\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nexport function getMatSelectNonFunctionValueError(): Error {\n return Error('`compareWith` must be a function.');\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 {_IdGenerator, ActiveDescendantKeyManager, LiveAnnouncer} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n A,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n hasModifierKey,\n LEFT_ARROW,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n createRepositionScrollStrategy,\n FlexibleOverlayPopoverLocation,\n OVERLAY_DEFAULT_CONFIG,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n DoCheck,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n HostAttributeToken,\n Renderer2,\n Injector,\n signal,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n NgForm,\n Validators,\n} from '@angular/forms';\nimport {_getEventTarget} from '@angular/cdk/platform';\nimport {FORM_FIELD} from '@angular/forms/signals';\nimport {\n _animationsDisabled,\n _countGroupLabelsBeforeOption,\n _ErrorStateTracker,\n _getOptionScrollPosition,\n ErrorStateMatcher,\n MAT_OPTGROUP,\n MAT_OPTION_PARENT_COMPONENT,\n MatOptgroup,\n MatOption,\n MatOptionSelectionChange,\n} from '../core';\nimport {MAT_FORM_FIELD, MatFormField, MatFormFieldControl} from '../form-field';\nimport {defer, merge, Observable, Subject} from 'rxjs';\nimport {filter, map, startWith, switchMap, take, takeUntil} from 'rxjs/operators';\nimport {\n getMatSelectDynamicMultipleError,\n getMatSelectNonArrayValueError,\n getMatSelectNonFunctionValueError,\n} from './select-errors';\n\n/** Injection token that determines the scroll handling while a select is open. */\nexport const MAT_SELECT_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'mat-select-scroll-strategy',\n {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return () => createRepositionScrollStrategy(injector);\n },\n },\n);\n\n/** Object that can be used to configure the default options for the select module. */\nexport interface MatSelectConfig {\n /** Whether option centering should be disabled. */\n disableOptionCentering?: boolean;\n\n /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\n typeaheadDebounceInterval?: number;\n\n /** Class or list of classes to be applied to the menu's overlay panel. */\n overlayPanelClass?: string | string[];\n\n /** Whether icon indicators should be hidden for single-selection. */\n hideSingleSelectionIndicator?: boolean;\n\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n panelWidth?: string | number | null;\n\n /**\n * Whether nullable options can be selected by default.\n * See `MatSelect.canSelectNullableOptions` for more information.\n */\n canSelectNullableOptions?: boolean;\n}\n\n/** Injection token that can be used to provide the default options the select module. */\nexport const MAT_SELECT_CONFIG = new InjectionToken<MatSelectConfig>('MAT_SELECT_CONFIG');\n\n/**\n * Injection token that can be used to reference instances of `MatSelectTrigger`. It serves as\n * alternative token to the actual `MatSelectTrigger` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const MAT_SELECT_TRIGGER = new InjectionToken<MatSelectTrigger>('MatSelectTrigger');\n\n/** Change event object that is emitted when the select value has changed. */\nexport class MatSelectChange<T = any> {\n constructor(\n /** Reference to the select that emitted the change event. */\n public source: MatSelect,\n /** Current value of the select that emitted the event. */\n public value: T,\n ) {}\n}\n\n@Component({\n selector: 'mat-select',\n exportAs: 'matSelect',\n templateUrl: 'select.html',\n styleUrl: 'select.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'role': 'combobox',\n 'aria-haspopup': 'listbox',\n 'class': 'mat-mdc-select',\n '[attr.id]': 'id',\n '[attr.tabindex]': 'disabled ? -1 : tabIndex',\n '[attr.aria-controls]': 'panelOpen ? id + \"-panel\" : null',\n '[attr.aria-expanded]': 'panelOpen',\n '[attr.aria-label]': 'ariaLabel || null',\n '[attr.aria-required]': 'required.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n '[class.mat-mdc-select-disabled]': 'disabled',\n '[class.mat-mdc-select-invalid]': 'errorState',\n '[class.mat-mdc-select-required]': 'required',\n '[class.mat-mdc-select-empty]': 'empty',\n '[class.mat-mdc-select-multiple]': 'multiple',\n '[class.mat-select-open]': 'panelOpen',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n },\n providers: [\n {provide: MatFormFieldControl, useExisting: MatSelect},\n {provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect},\n ],\n imports: [CdkOverlayOrigin, CdkConnectedOverlay],\n})\nexport class MatSelect\n implements\n AfterContentInit,\n OnChanges,\n OnDestroy,\n OnInit,\n DoCheck,\n ControlValueAccessor,\n MatFormFieldControl<any>\n{\n protected _viewportRuler = inject(ViewportRuler);\n protected _changeDetectorRef = inject(ChangeDetectorRef);\n readonly _elementRef = inject(ElementRef);\n private _dir = inject(Directionality, {optional: true});\n private _idGenerator = inject(_IdGenerator);\n private _renderer = inject(Renderer2);\n protected _parentFormField = inject<MatFormField>(MAT_FORM_FIELD, {optional: true});\n ngControl = inject(NgControl, {self: true, optional: true})!;\n private _liveAnnouncer = inject(LiveAnnouncer);\n protected _defaultOptions = inject(MAT_SELECT_CONFIG, {optional: true});\n protected _animationsDisabled = _animationsDisabled();\n protected _popoverLocation: FlexibleOverlayPopoverLocation | null;\n private _initialized = new Subject();\n private _cleanupDetach: (() => void) | undefined;\n\n /** All of the defined select options. */\n @ContentChildren(MatOption, {descendants: true}) options!: QueryList<MatOption>;\n\n // TODO(crisbeto): this is only necessary for the non-MDC select, but it's technically a\n // public API so we have to keep it. It should be deprecated and removed eventually.\n /** All of the defined groups of options. */\n @ContentChildren(MAT_OPTGROUP, {descendants: true}) optionGroups!: QueryList<MatOptgroup>;\n\n /** User-supplied override of the trigger element. */\n @ContentChild(MAT_SELECT_TRIGGER) customTrigger!: MatSelectTrigger;\n\n /**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n _positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: 'mat-mdc-select-panel-above',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n panelClass: 'mat-mdc-select-panel-above',\n },\n ];\n\n /** Scrolls a particular option into the view. */\n _scrollOptionIntoView(index: number): void {\n const option = this.options.toArray()[index];\n\n if (option) {\n const panel: HTMLElement = this.panel.nativeElement;\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const element = option._getHostElement();\n\n if (index === 0 && labelCount === 1) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n panel.scrollTop = 0;\n } else {\n panel.scrollTop = _getOptionScrollPosition(\n element.offsetTop,\n element.offsetHeight,\n panel.scrollTop,\n panel.offsetHeight,\n );\n }\n }\n }\n\n /** Called when the panel has been opened and the overlay has settled on its final position. */\n private _positioningSettled() {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n\n /** Creates a change event object that should be emitted by the select. */\n private _getChangeEvent(value: any) {\n return new MatSelectChange(this, value);\n }\n\n /** Factory function used to create a scroll strategy for this select. */\n private _scrollStrategyFactory = inject(MAT_SELECT_SCROLL_STRATEGY);\n\n /** Whether or not the overlay panel is open. */\n private _panelOpen = false;\n\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n /** Unique id for this input. */\n private _uid = this._idGenerator.getId('mat-select-');\n\n /** Current `aria-labelledby` value for the select trigger. */\n private _triggerAriaLabelledBy: string | null = null;\n\n /**\n * Keeps track of the previous form control assigned to the select.\n * Used to detect if it has changed.\n */\n private _previousControl: AbstractControl | null | undefined;\n\n /** Emits whenever the component is destroyed. */\n protected readonly _destroy = new Subject<void>();\n\n /** Tracks the error state of the select. */\n private _errorStateTracker: _ErrorStateTracker;\n\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n /**\n * Disable the automatic labeling to avoid issues like #27241.\n * @docs-private\n */\n readonly disableAutomaticLabeling = true;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input('aria-describedby') userAriaDescribedBy!: string;\n\n /** Deals with the selection logic. */\n _selectionModel!: SelectionModel<MatOption>;\n\n /** Manages keyboard events for options in the panel. */\n _keyManager!: ActiveDescendantKeyManager<MatOption>;\n\n /** Ideal origin for the overlay panel. */\n _preferredOverlayOrigin: CdkOverlayOrigin | ElementRef | undefined;\n\n /** Width of the overlay panel. */\n _overlayWidth!: string | number;\n\n /** `View -> model callback called when value changes` */\n _onChange: (value: any) => void = () => {};\n\n /** `View -> model callback called when select has been touched` */\n _onTouched = () => {};\n\n /** ID for the DOM node containing the select's value. */\n _valueId = this._idGenerator.getId('mat-select-value-');\n\n /** Strategy that will be used to handle scrolling while the select panel is open. */\n _scrollStrategy: ScrollStrategy;\n\n _overlayPanelClass: string | string[] = this._defaultOptions?.overlayPanelClass || '';\n\n /** Whether the select is focused. */\n get focused(): boolean {\n return this._focused || this._panelOpen;\n }\n private _focused = false;\n\n /** A name for this control that can be used by `mat-form-field`. */\n controlType = 'mat-select';\n\n /** Trigger that opens the select. */\n @ViewChild('trigger') trigger!: ElementRef;\n\n /** Panel containing the select options. */\n @ViewChild('panel') panel!: ElementRef;\n\n /** Overlay pane containing the options. */\n @ViewChild(CdkConnectedOverlay)\n protected _overlayDir!: CdkConnectedOverlay;\n\n /** Classes to be passed to the select panel. Supports the same syntax as `ngClass`. */\n @Input() panelClass!: string | string[] | Set<string> | {[key: string]: any};\n\n /** Whether the select is disabled. */\n @Input({transform: booleanAttribute})\n disabled: boolean = false;\n\n /** Whether ripples in the select are disabled. */\n @Input({transform: booleanAttribute})\n get disableRipple() {\n return this._disableRipple();\n }\n set disableRipple(value: boolean) {\n this._disableRipple.set(value);\n }\n private _disableRipple = signal(false);\n\n /** Tab index of the select. */\n @Input({\n transform: (value: unknown) => (value == null ? 0 : numberAttribute(value)),\n })\n tabIndex: number = 0;\n\n /** Whether checkmark indicator for single-selection options 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._syncParentProperties();\n }\n private _hideSingleSelectionIndicator: boolean =\n this._defaultOptions?.hideSingleSelectionIndicator ?? false;\n\n /** Placeholder to be shown if no value has been selected. */\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n private _placeholder!: string;\n\n /** Whether the component is required. */\n @Input({transform: booleanAttribute})\n get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: boolean) {\n this._required = value;\n this.stateChanges.next();\n }\n private _required: boolean | undefined;\n\n /** Whether the user should be allowed to select multiple options. */\n @Input({transform: booleanAttribute})\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: boolean) {\n if (this._selectionModel && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectDynamicMultipleError();\n }\n\n this._multiple = value;\n }\n private _multiple: boolean = false;\n\n /** Whether to center the active option over the trigger. */\n @Input({transform: booleanAttribute})\n disableOptionCentering = this._defaultOptions?.disableOptionCentering ?? false;\n\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n @Input()\n get compareWith() {\n return this._compareWith;\n }\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonFunctionValueError();\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n\n /** Value of the select control. */\n @Input()\n get value(): any {\n return this._value;\n }\n set value(newValue: any) {\n const hasAssigned = this._assignValue(newValue);\n\n if (hasAssigned) {\n this._onChange(newValue);\n }\n }\n private _value: any;\n\n /** Aria label of the select. */\n @Input('aria-label') ariaLabel: string = '';\n\n /** Input that can be used to specify the `aria-labelledby` attribute. */\n @Input('aria-labelledby') ariaLabelledby!: string;\n\n /** Object used to control when error messages are shown. */\n @Input()\n get errorStateMatcher() {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value: ErrorStateMatcher) {\n this._errorStateTracker.matcher = value;\n }\n\n /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\n @Input({transform: numberAttribute})\n typeaheadDebounceInterval!: number;\n\n /**\n * Function used to sort the values in a select in multiple mode.\n * Follows the same logic as `Array.prototype.sort`.\n */\n @Input() sortComparator!: (a: MatOption, b: MatOption, options: MatOption[]) => number;\n\n /** Unique id of the element. */\n @Input()\n get id(): string {\n return this._id;\n }\n set id(value: string) {\n this._id = value || this._uid;\n this.stateChanges.next();\n }\n private _id!: string;\n\n /** Whether the select is in an error state. */\n get errorState() {\n return this._errorStateTracker.errorState;\n }\n set errorState(value: boolean) {\n this._errorStateTracker.errorState = value;\n }\n\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n @Input() panelWidth: string | number | null =\n this._defaultOptions && typeof this._defaultOptions.panelWidth !== 'undefined'\n ? this._defaultOptions.panelWidth\n : 'auto';\n\n /**\n * By default selecting an option with a `null` or `undefined` value will reset the select's\n * value. Enable this option if the reset behavior doesn't match your requirements and instead\n * the nullable options should become selected. The value of this input can be controlled app-wide\n * using the `MAT_SELECT_CONFIG` injection token.\n */\n @Input({transform: booleanAttribute})\n canSelectNullableOptions: boolean = this._defaultOptions?.canSelectNullableOptions ?? false;\n\n /** Combined stream of all of the child options' change events. */\n readonly optionSelectionChanges: Observable<MatOptionSelectionChange> = defer(() => {\n const options = this.options;\n\n if (options) {\n return options.changes.pipe(\n startWith(options),\n switchMap(() => merge(...options.map(option => option.onSelectionChange))),\n );\n }\n\n return this._initialized.pipe(switchMap(() => this.optionSelectionChanges));\n });\n\n /** Event emitted when the select panel has been toggled. */\n @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the select has been opened. */\n @Output('opened') readonly _openedStream: Observable<void> = this.openedChange.pipe(\n filter(o => o),\n map(() => {}),\n );\n\n /** Event emitted when the select has been closed. */\n @Output('closed') readonly _closedStream: Observable<void> = this.openedChange.pipe(\n filter(o => !o),\n map(() => {}),\n );\n\n /** Event emitted when the selected value has been changed by the user. */\n @Output() readonly selectionChange = new EventEmitter<MatSelectChange>();\n\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n constructor() {\n const defaultErrorStateMatcher = inject(ErrorStateMatcher);\n const parentForm = inject(NgForm, {optional: true});\n const parentFormGroup = inject(FormGroupDirective, {optional: true});\n const tabIndex = inject(new HostAttributeToken('tabindex'), {optional: true});\n const defaultPopoverConfig = inject(OVERLAY_DEFAULT_CONFIG, {optional: true});\n const formField = inject(FORM_FIELD, {optional: true, self: true});\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n // Note that we only want to set this when the defaults pass it in, otherwise it should\n // stay as `undefined` so that it falls back to the default in the key manager.\n if (this._defaultOptions?.typeaheadDebounceInterval != null) {\n this.typeaheadDebounceInterval = this._defaultOptions.typeaheadDebounceInterval;\n }\n\n this._errorStateTracker = new _ErrorStateTracker(\n defaultErrorStateMatcher,\n formField || this.ngControl,\n parentFormGroup,\n parentForm,\n this.stateChanges,\n );\n\n this._scrollStrategy = this._scrollStrategyFactory();\n this.tabIndex = tabIndex == null ? 0 : parseInt(tabIndex) || 0;\n this._popoverLocation = defaultPopoverConfig?.usePopover === false ? null : 'inline';\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n }\n\n ngOnInit() {\n this._selectionModel = new SelectionModel<MatOption>(this.multiple);\n this.stateChanges.next();\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._destroy))\n .subscribe(() => {\n if (this.panelOpen) {\n this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);\n this._changeDetectorRef.detectChanges();\n }\n });\n }\n\n ngAfterContentInit() {\n this._initialized.next();\n this._initialized.complete();\n\n this._initKeyManager();\n\n this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n event.added.forEach(option => option.select());\n event.removed.forEach(option => option.deselect());\n });\n\n this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n\n ngDoCheck() {\n const newAriaLabelledby = this._getTriggerAriaLabelledby();\n const ngControl = this.ngControl;\n\n // We have to manage setting the `aria-labelledby` ourselves, because part of its value\n // is computed as a result of a content query which can cause this binding to trigger a\n // \"changed after checked\" error.\n if (newAriaLabelledby !== this._triggerAriaLabelledBy) {\n const element: HTMLElement = this._elementRef.nativeElement;\n this._triggerAriaLabelledBy = newAriaLabelledby;\n if (newAriaLabelledby) {\n element.setAttribute('aria-labelledby', newAriaLabelledby);\n } else {\n element.removeAttribute('aria-labelledby');\n }\n }\n\n if (ngControl) {\n // The disabled state might go out of sync if the form group is swapped out. See #17860.\n if (this._previousControl !== ngControl.control) {\n if (\n this._previousControl !== undefined &&\n ngControl.disabled !== null &&\n ngControl.disabled !== this.disabled\n ) {\n this.disabled = ngControl.disabled;\n }\n\n this._previousControl = ngControl.control;\n }\n\n this.updateErrorState();\n }\n }\n\n ngOnChanges(changes: SimpleChanges<this>) {\n // Updating the disabled state is handled by the input, but we need to additionally let\n // the parent form field know to run change detection when the disabled state changes.\n if (changes['disabled'] || changes['userAriaDescribedBy']) {\n this.stateChanges.next();\n }\n\n if (changes['typeaheadDebounceInterval'] && this._keyManager) {\n this._keyManager.withTypeAhead(this.typeaheadDebounceInterval);\n }\n\n if (changes['panelClass'] && this.panelClass instanceof Set) {\n this.panelClass = Array.from(this.panelClass);\n }\n }\n\n ngOnDestroy() {\n this._cleanupDetach?.();\n this._keyManager?.destroy();\n this._destroy.next();\n this._destroy.complete();\n this.stateChanges.complete();\n }\n\n /** Toggles the overlay panel open or closed. */\n toggle(): void {\n this.panelOpen ? this.close() : this.open();\n }\n\n /** Opens the overlay panel. */\n open(): void {\n if (!this._canOpen()) {\n return;\n }\n\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this._parentFormField) {\n this._preferredOverlayOrigin = this._parentFormField.getConnectedOverlayOrigin();\n }\n\n this._cleanupDetach?.();\n this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);\n this._panelOpen = true;\n this._overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this._positioningSettled();\n });\n this._overlayDir.attachOverlay();\n this._keyManager.withHorizontalOrientation(null);\n this._highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n\n // Required for the MDC form field to pick up when the overlay has been opened.\n this.stateChanges.next();\n\n // Simulate the animation event before we moved away from `@angular/animations`.\n Promise.resolve().then(() => this.openedChange.emit(true));\n }\n\n /** Closes the overlay panel and focuses the host element. */\n close(): void {\n if (this._panelOpen) {\n this._panelOpen = false;\n this._exitAndDetach();\n this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');\n this._changeDetectorRef.markForCheck();\n this._onTouched();\n // Required for the MDC form field to pick up when the overlay has been closed.\n this.stateChanges.next();\n\n // Simulate the animation event before we moved away from `@angular/animations`.\n Promise.resolve().then(() => this.openedChange.emit(false));\n }\n }\n\n /** Triggers the exit animation and detaches the overlay at the end. */\n private _exitAndDetach() {\n if (this._animationsDisabled || !this.panel) {\n this._detachOverlay();\n return;\n }\n\n this._cleanupDetach?.();\n this._cleanupDetach = () => {\n cleanupEvent();\n clearTimeout(exitFallbackTimer);\n this._cleanupDetach = undefined;\n };\n\n const panel: HTMLElement = this.panel.nativeElement;\n const cleanupEvent = this._renderer.listen(panel, 'animationend', (event: AnimationEvent) => {\n if (event.animationName === '_mat-select-exit') {\n this._cleanupDetach?.();\n this._detachOverlay();\n }\n });\n\n // Since closing the overlay depends on the animation, we have a fallback in case the panel\n // doesn't animate. This can happen in some internal tests that do `* {animation: none}`.\n const exitFallbackTimer = setTimeout(() => {\n this._cleanupDetach?.();\n this._detachOverlay();\n }, 200);\n\n panel.classList.add('mat-select-panel-exit');\n }\n\n /** Detaches the current overlay directive. */\n private _detachOverlay() {\n this._overlayDir.detachOverlay();\n // Some of the overlay detachment logic depends on change detection.\n // Mark for check to ensure that things get picked up in a timely manner.\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n this._assignValue(value);\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: () => {}): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /** Whether or not the overlay panel is open. */\n get panelOpen(): boolean {\n return this._panelOpen;\n }\n\n /** The currently selected option. */\n get selected(): MatOption | MatOption[] {\n return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];\n }\n\n /** The value displayed in the trigger. */\n get triggerValue(): string {\n if (this.empty) {\n return '';\n }\n\n if (this._multiple) {\n const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n\n if (this._isRtl()) {\n selectedOptions.reverse();\n }\n\n // TODO(crisbeto): delimiter should be configurable for proper localization.\n return selectedOptions.join(', ');\n }\n\n return this._selectionModel.selected[0].viewValue;\n }\n\n /** Refreshes the error state of the select. */\n updateErrorState() {\n this._errorStateTracker.updateErrorState();\n }\n\n /** Whether the element is in RTL mode. */\n _isRtl(): boolean {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n\n /** Handles all keydown events on the select. */\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n\n /** Handles keyboard events while the select is closed. */\n private _handleClosedKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey =\n keyCode === DOWN_ARROW ||\n keyCode === UP_ARROW ||\n keyCode === LEFT_ARROW ||\n keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n\n // Open the select on ALT + arrow key to match the native <select>\n if (\n (!manager.isTyping() && isOpenKey && !hasModifierKey(event)) ||\n ((this.multiple || event.altKey) && isArrowKey)\n ) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n } else if (!this.multiple) {\n const previouslySelectedOption = this.selected;\n manager.onKeydown(event);\n const selectedOption = this.selected;\n\n // Since the value has changed, we need to announce it ourselves.\n if (selectedOption && previouslySelectedOption !== selectedOption) {\n // We set a duration on the live announcement, because we want the live element to be\n // cleared after a while so that users can't navigate to it using the arrow keys.\n this._liveAnnouncer.announce((selectedOption as MatOption).viewValue, 10000);\n }\n }\n }\n\n /** Handles keyboard events when the selected is open. */\n private _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n const isTyping = manager.isTyping();\n\n if (isArrowKey && event.altKey) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.close();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (\n !isTyping &&\n (keyCode === ENTER || keyCode === SPACE) &&\n manager.activeItem &&\n !hasModifierKey(event)\n ) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n } else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n\n this.options.forEach(option => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n } else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n\n manager.onKeydown(event);\n\n if (\n this._multiple &&\n isArrowKey &&\n event.shiftKey &&\n manager.activeItem &&\n manager.activeItemIndex !== previouslyFocusedIndex\n ) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n\n /** Handles keyboard events coming from the overlay. */\n protected _handleOverlayKeydown(event: KeyboardEvent): void {\n // TODO(crisbeto): prior to #30363 this was being handled inside the overlay directive, but we\n // need control over the animation timing so we do it manually. We should remove the `keydown`\n // listener from `.mat-mdc-select-panel` and handle all the events here. That may cause\n // further test breakages so it's left for a follow-up.\n if (event.keyCode === ESCAPE && !hasModifierKey(event)) {\n event.preventDefault();\n this.close();\n }\n }\n\n _onFocus() {\n if (!this.disabled) {\n this._focused = true;\n this.stateChanges.next();\n }\n }\n\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n _onBlur() {\n this._focused = false;\n this._keyManager?.cancelTypeahead();\n\n if (!this.disabled && !this.panelOpen) {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n }\n\n /** Whether the select has a value. */\n get empty(): boolean {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n\n private _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl) {\n this._value = this.ngControl.value;\n }\n\n this._setSelectionByValue(this._value);\n this.stateChanges.next();\n });\n }\n\n /**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n */\n private _setSelectionByValue(value: any | any[]): void {\n this.options.forEach(option => option.setInactiveStyles());\n this._selectionModel.clear();\n\n if (this.multiple && value) {\n if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonArrayValueError();\n }\n\n value.forEach((currentValue: any) => this._selectOptionByValue(currentValue));\n this._sortValues();\n } else {\n const correspondingOption = this._selectOptionByValue(value);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManager.updateActiveItem(correspondingOption);\n } else if (!this.panelOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManager.updateActiveItem(-1);\n }\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n private _selectOptionByValue(value: any): MatOption | undefined {\n const correspondingOption = this.options.find((option: MatOption) => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n if (this._selectionModel.isSelected(option)) {\n return false;\n }\n\n try {\n // Treat null as a special reset value.\n return (\n (option.value != null || this.canSelectNullableOptions) &&\n this._compareWith(option.value, value)\n );\n } catch (error) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n\n return correspondingOption;\n }\n\n /** Assigns a specific value to the select. Returns whether the value has changed. */\n private _assignValue(newValue: any | any[]): boolean {\n // Always re-assign an array, because it might have been mutated.\n if (newValue !== this._value || (this._multiple && Array.isArray(newValue))) {\n if (this.options) {\n this._setSelectionByValue(newValue);\n }\n\n this._value = newValue;\n return true;\n }\n return false;\n }\n\n // `skipPredicate` determines if key manager should avoid putting a given option in the tab\n // order. Allow disabled list items to receive focus via keyboard to align with WAI ARIA\n // recommendation.\n //\n // Normally WAI ARIA's instructions are to exclude disabled items from the tab order, but it\n // makes a few exceptions for compound widgets.\n //\n // From [Developing a Keyboard Interface](\n // https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/):\n // \"For the following composite widget elements, keep them focusable when disabled: Options in a\n // Listbox...\"\n //\n // The user can focus disabled options using the keyboard, but the user cannot click disabled\n // options.\n private _skipPredicate = (option: MatOption) => {\n if (this.panelOpen) {\n // Support keyboard focusing disabled options in an ARIA listbox.\n return false;\n }\n\n // When the panel is closed, skip over disabled options. Support options via the UP/DOWN arrow\n // keys on a closed select. ARIA listbox interaction pattern is less relevant when the panel is\n // closed.\n return option.disabled;\n };\n\n /** Gets how wide the overlay panel should be. */\n private _getOverlayWidth(\n preferredOrigin: ElementRef<ElementRef> | CdkOverlayOrigin | undefined,\n ): string | number {\n if (this.panelWidth === 'auto') {\n const refToMeasure =\n preferredOrigin instanceof CdkOverlayOrigin\n ? preferredOrigin.elementRef\n : preferredOrigin || this._elementRef;\n return refToMeasure.nativeElement.getBoundingClientRect().width;\n }\n\n return this.panelWidth === null ? '' : this.panelWidth;\n }\n /** Syncs the parent state with the individual options. */\n _syncParentProperties(): void {\n if (this.options) {\n for (const option of this.options) {\n option._changeDetectorRef.markForCheck();\n }\n }\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<MatOption>(this.options)\n .withTypeAhead(this.typeaheadDebounceInterval)\n .withVerticalOrientation()\n .withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr')\n .withHomeAndEnd()\n .withPageUpDown()\n .withAllowedModifierKeys(['shiftKey'])\n .skipPredicate(this._skipPredicate);\n\n this._keyManager.tabOut.subscribe(() => {\n if (this.panelOpen) {\n // Select the active item when tabbing away. This is consistent with how the native\n // select behaves. Note that we only want to do this in single selection mode.\n if (!this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.close();\n }\n });\n\n this._keyManager.change.subscribe(() => {\n if (this._panelOpen && this.panel) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n } else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n\n /** Drops current option subscriptions and IDs and resets from scratch. */\n private _resetOptions(): void {\n const changedOrDestroyed = merge(this.options.changes, this._destroy);\n\n this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n this._onSelect(event.source, event.isUserInput);\n\n if (event.isUserInput && !this.multiple && this._panelOpen) {\n this.close();\n this.focus();\n }\n });\n\n // Listen to changes in the internal state of the options and react accordingly.\n // Handles cases like the labels of the selected options changing.\n merge(...this.options.map(option => option._stateChanges))\n .pipe(takeUntil(changedOrDestroyed))\n .subscribe(() => {\n // `_stateChanges` can fire as a result of a change in the label's DOM value which may\n // be the result of an expression changing. We have to use `detectChanges` in order\n // to avoid \"changed after checked\" errors (see #14793).\n this._changeDetectorRef.detectChanges();\n this.stateChanges.next();\n });\n }\n\n /** Invoked when an option is clicked. */\n private _onSelect(option: MatOption, isUserInput: boolean): void {\n const wasSelected = this._selectionModel.isSelected(option);\n\n if (!this.canSelectNullableOptions && option.value == null && !this._multiple) {\n option.deselect();\n this._selectionModel.clear();\n\n if (this.value != null) {\n this._propagateChanges(option.value);\n }\n } else {\n if (wasSelected !== option.selected) {\n option.selected\n ? this._selectionModel.select(option)\n : this._selectionModel.deselect(option);\n }\n\n if (isUserInput) {\n this._keyManager.setActiveItem(option);\n }\n\n if (this.multiple) {\n this._sortValues();\n\n if (isUserInput) {\n // In case the user selected the option with their mouse, we\n // want to restore focus back to the trigger, in order to\n // prevent the select keyboard controls from clashing with\n // the ones from `mat-option`.\n this.focus();\n }\n }\n }\n\n if (wasSelected !== this._selectionModel.isSelected(option)) {\n this._propagateChanges();\n }\n\n this.stateChanges.next();\n }\n\n /** Sorts the selected values in the selected based on their order in the panel. */\n private _sortValues() {\n if (this.multiple) {\n const options = this.options.toArray();\n\n this._selectionModel.sort((a, b) => {\n return this.sortComparator\n ? this.sortComparator(a, b, options)\n : options.indexOf(a) - options.indexOf(b);\n });\n this.stateChanges.next();\n }\n }\n\n /** Emits change event to set the model value. */\n private _propagateChanges(fallbackValue?: any): void {\n let valueToEmit: any;\n\n if (this.multiple) {\n valueToEmit = (this.selected as MatOption[]).map(option => option.value);\n } else {\n valueToEmit = this.selected ? (this.selected as MatOption).value : fallbackValue;\n }\n\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this.selectionChange.emit(this._getChangeEvent(valueToEmit));\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first *enabled* option.\n */\n private _highlightCorrectOption(): void {\n if (this._keyManager) {\n if (this.empty) {\n // Find the index of the first *enabled* option. Avoid calling `_keyManager.setActiveItem`\n // because it activates the first option that passes the skip predicate, rather than the\n // first *enabled* option.\n let firstEnabledOptionIndex = -1;\n for (let index = 0; index < this.options.length; index++) {\n const option = this.options.get(index)!;\n if (!option.disabled) {\n firstEnabledOptionIndex = index;\n break;\n }\n }\n\n this._keyManager.setActiveItem(firstEnabledOptionIndex);\n } else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n }\n\n /** Whether the panel is allowed to open. */\n protected _canOpen(): boolean {\n return !this._panelOpen && !this.disabled && this.options?.length > 0 && !!this._overlayDir;\n }\n\n /** Focuses the select element. */\n focus(options?: FocusOptions): void {\n this._elementRef.nativeElement.focus(options);\n }\n\n /** Gets the aria-labelledby for the select panel. */\n _getPanelAriaLabelledby(): string | null {\n if (this.ariaLabel) {\n return null;\n }\n\n const labelId = this._parentFormField?.getLabelId() || null;\n const labelExpression = labelId ? labelId + ' ' : '';\n return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n }\n\n /** Determines the `aria-activedescendant` to be set on the host. */\n _getAriaActiveDescendant(): string | null {\n if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n return this._keyManager.activeItem.id;\n }\n\n return null;\n }\n\n /** Gets the aria-labelledby of the select component trigger. */\n private _getTriggerAriaLabelledby(): string | null {\n if (this.ariaLabel) {\n return null;\n }\n\n let value = this._parentFormField?.getLabelId() || '';\n\n if (this.ariaLabelledby) {\n value += ' ' + this.ariaLabelledby;\n }\n\n // The value should not be used for the trigger's aria-labelledby,\n // but this currently \"breaks\" accessibility tests since they complain\n // there is no aria-labelledby. This is because they are not setting an\n // appropriate label on the form field or select.\n // TODO: remove this conditional after fixing clients by ensuring their\n // selects have a label applied.\n if (!value) {\n value = this._valueId;\n }\n\n return value;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get describedByIds(): string[] {\n const element = this._elementRef.nativeElement;\n const existingDescribedBy = element.getAttribute('aria-describedby');\n\n return existingDescribedBy?.split(' ') || [];\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids: string[]) {\n const element = this._elementRef.nativeElement;\n\n if (ids.length) {\n element.setAttribute('aria-describedby', ids.join(' '));\n } else {\n element.removeAttribute('aria-describedby');\n }\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick(event: MouseEvent) {\n const target = _getEventTarget(event) as HTMLElement | null;\n\n // Since the overlay is inside the form field, this handler can fire for interactions\n // with the container. Note that while it's redundant to select both for the popover\n // and select panel, we need to do it because it tests the clicks can occur after\n // the panel was detached from the popover.\n if (\n target &&\n (target.tagName === 'MAT-OPTION' ||\n target.classList.contains('cdk-overlay-backdrop') ||\n target.closest('.mat-mdc-select-panel'))\n ) {\n return;\n }\n\n this.focus();\n this.open();\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n // Since the panel doesn't overlap the trigger, we\n // want the label to only float when there's a value.\n return this.panelOpen || !this.empty || (this.focused && !!this.placeholder);\n }\n}\n\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\n@Directive({\n selector: 'mat-select-trigger',\n providers: [{provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger}],\n})\nexport class MatSelectTrigger {}\n","<div\n cdk-overlay-origin\n class=\"mat-mdc-select-trigger\"\n (click)=\"open()\"\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n #trigger\n>\n <div class=\"mat-mdc-select-value\" [attr.id]=\"_valueId\">\n @if (empty) {\n <span class=\"mat-mdc-select-placeholder mat-mdc-select-min-line\">{{placeholder}}</span>\n } @else {\n <span class=\"mat-mdc-select-value-text\">\n @if (customTrigger) {\n <ng-content select=\"mat-select-trigger\"></ng-content>\n } @else {\n <span class=\"mat-mdc-select-min-line\">{{triggerValue}}</span>\n }\n </span>\n }\n </div>\n\n <div class=\"mat-mdc-select-arrow-wrapper\">\n <div class=\"mat-mdc-select-arrow\">\n <!-- Use an inline SVG, because it works better than a CSS triangle in high contrast mode. -->\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M7 10l5 5 5-5z\" />\n </svg>\n </div>\n </div>\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayPanelClass]=\"_overlayPanelClass\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayOrigin]=\"_preferredOverlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayWidth]=\"_overlayWidth\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayUsePopover]=\"_popoverLocation\"\n (detach)=\"close()\"\n (backdropClick)=\"close()\"\n (overlayKeydown)=\"_handleOverlayKeydown($event)\">\n <!-- `mat-undefined` is weird, but we were using it internally -->\n <div\n #panel\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open\"\n [class]=\"panelClass\"\n [class.mat-select-panel-animations-enabled]=\"!_animationsDisabled\"\n [class.mat-primary]=\"_parentFormField?.color === 'primary'\"\n [class.mat-accent]=\"_parentFormField?.color === 'accent'\"\n [class.mat-warn]=\"_parentFormField?.color === 'warn'\"\n [class.mat-undefined]=\"!_parentFormField?.color\"\n [attr.id]=\"id + '-panel'\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"_getPanelAriaLabelledby()\"\n (keydown)=\"_handleKeydown($event)\">\n <ng-content></ng-content>\n </div>\n</ng-template>\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {NgModule} from '@angular/core';\nimport {MatOptionModule} from '../core';\nimport {MatFormFieldModule} from '../form-field';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {MatSelect, MatSelectTrigger} from './select';\nimport {BidiModule} from '@angular/cdk/bidi';\n\n@NgModule({\n imports: [OverlayModule, MatOptionModule, MatSelect, MatSelectTrigger],\n exports: [\n BidiModule,\n CdkScrollableModule,\n MatFormFieldModule,\n MatSelect,\n MatSelectTrigger,\n MatOptionModule,\n ],\n})\nexport class MatSelectModule {}\n"],"names":[],"mappings":"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"}