blob: 16e5f1e2fdc9bb27aff0329057837214838b139c [file] [log] [blame]
{"version":3,"file":"material-autocomplete.umd.js","sources":["../../src/material/autocomplete/autocomplete-module.ts","../../src/material/autocomplete/autocomplete-trigger.ts","../../src/material/autocomplete/autocomplete-origin.ts","../../src/material/autocomplete/autocomplete.ts","../../node_modules/tslib/tslib.es6.js"],"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.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {MatOptionModule, MatCommonModule} from '@angular/material/core';\nimport {MatAutocomplete} from './autocomplete';\nimport {\n MatAutocompleteTrigger,\n MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './autocomplete-trigger';\nimport {MatAutocompleteOrigin} from './autocomplete-origin';\n\n@NgModule({\n imports: [MatOptionModule, OverlayModule, MatCommonModule, CommonModule],\n exports: [\n MatAutocomplete,\n MatOptionModule,\n MatAutocompleteTrigger,\n MatAutocompleteOrigin,\n MatCommonModule\n ],\n declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],\n providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER],\n})\nexport class MatAutocompleteModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directionality} from '@angular/cdk/bidi';\nimport {DOWN_ARROW, ENTER, ESCAPE, TAB, UP_ARROW} from '@angular/cdk/keycodes';\nimport {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n PositionStrategy,\n ScrollStrategy,\n ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {DOCUMENT} from '@angular/common';\nimport {filter, take, switchMap, delay, tap, map} from 'rxjs/operators';\nimport {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n forwardRef,\n Host,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n ViewContainerRef,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n _countGroupLabelsBeforeOption,\n _getOptionScrollPosition,\n MatOption,\n MatOptionSelectionChange,\n} from '@angular/material/core';\nimport {MatFormField} from '@angular/material/form-field';\nimport {Subscription, defer, fromEvent, merge, of as observableOf, Subject, Observable} from 'rxjs';\nimport {MatAutocomplete} from './autocomplete';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {MatAutocompleteOrigin} from './autocomplete-origin';\n\n\n/**\n * The following style constants are necessary to save here in order\n * to properly calculate the scrollTop of the panel. Because we are not\n * actually focusing the active item, scroll must be handled manually.\n */\n\n/** The height of each autocomplete option. */\nexport const AUTOCOMPLETE_OPTION_HEIGHT = 48;\n\n/** The total height of the autocomplete panel. */\nexport const AUTOCOMPLETE_PANEL_HEIGHT = 256;\n\n/** Injection token that determines the scroll handling while the autocomplete panel is open. */\nexport const MAT_AUTOCOMPLETE_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('mat-autocomplete-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY,\n};\n\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * @docs-private\n */\nexport const MAT_AUTOCOMPLETE_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatAutocompleteTrigger),\n multi: true\n};\n\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @docs-private\n */\nexport function getMatAutocompleteMissingPanelError(): Error {\n return Error('Attempting to open an undefined instance of `mat-autocomplete`. ' +\n 'Make sure that the id passed to the `matAutocomplete` is correct and that ' +\n 'you\\'re attempting to open it after the ngAfterContentInit hook.');\n}\n\n\n@Directive({\n selector: `input[matAutocomplete], textarea[matAutocomplete]`,\n host: {\n '[attr.autocomplete]': 'autocompleteAttribute',\n '[attr.role]': 'autocompleteDisabled ? null : \"combobox\"',\n '[attr.aria-autocomplete]': 'autocompleteDisabled ? null : \"list\"',\n '[attr.aria-activedescendant]': '(panelOpen && activeOption) ? activeOption.id : null',\n '[attr.aria-expanded]': 'autocompleteDisabled ? null : panelOpen.toString()',\n '[attr.aria-owns]': '(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id',\n '[attr.aria-haspopup]': '!autocompleteDisabled',\n // Note: we use `focusin`, as opposed to `focus`, in order to open the panel\n // a little earlier. This avoids issues where IE delays the focusing of the input.\n '(focusin)': '_handleFocus()',\n '(blur)': '_onTouched()',\n '(input)': '_handleInput($event)',\n '(keydown)': '_handleKeydown($event)',\n },\n exportAs: 'matAutocompleteTrigger',\n providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR]\n})\nexport class MatAutocompleteTrigger implements ControlValueAccessor, OnChanges, OnDestroy {\n private _overlayRef: OverlayRef | null;\n private _portal: TemplatePortal;\n private _componentDestroyed = false;\n private _autocompleteDisabled = false;\n private _scrollStrategy: () => ScrollStrategy;\n\n /** Old value of the native input. Used to work around issues with the `input` event on IE. */\n private _previousValue: string | number | null;\n\n /** Strategy that is used to position the panel. */\n private _positionStrategy: FlexibleConnectedPositionStrategy;\n\n /** Whether or not the label state is being overridden. */\n private _manuallyFloatingLabel = false;\n\n /** The subscription for closing actions (some are bound to document). */\n private _closingActionsSubscription: Subscription;\n\n /** Subscription to viewport size changes. */\n private _viewportSubscription = Subscription.EMPTY;\n\n /**\n * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\n * closed autocomplete from being reopened if the user switches to another browser tab and then\n * comes back.\n */\n private _canOpenOnNextFocus = true;\n\n /** Stream of keyboard events that can close the panel. */\n private readonly _closeKeyEventStream = new Subject<void>();\n\n /**\n * Event handler for when the window is blurred. Needs to be an\n * arrow function in order to preserve the context.\n */\n private _windowBlurHandler = () => {\n // If the user blurred the window while the autocomplete is focused, it means that it'll be\n // refocused when they come back. In this case we want to skip the first focus event, if the\n // pane was closed, in order to avoid reopening it unintentionally.\n this._canOpenOnNextFocus =\n this._document.activeElement !== this._element.nativeElement || this.panelOpen;\n }\n\n /** `View -> model callback called when value changes` */\n _onChange: (value: any) => void = () => {};\n\n /** `View -> model callback called when autocomplete has been touched` */\n _onTouched = () => {};\n\n /** The autocomplete panel to be attached to this trigger. */\n @Input('matAutocomplete') autocomplete: MatAutocomplete;\n\n /**\n * Position of the autocomplete panel relative to the trigger element. A position of `auto`\n * will render the panel underneath the trigger if there is enough space for it to fit in\n * the viewport, otherwise the panel will be shown above it. If the position is set to\n * `above` or `below`, the panel will always be shown above or below the trigger. no matter\n * whether it fits completely in the viewport.\n */\n @Input('matAutocompletePosition') position: 'auto' | 'above' | 'below' = 'auto';\n\n /**\n * Reference relative to which to position the autocomplete panel.\n * Defaults to the autocomplete trigger element.\n */\n @Input('matAutocompleteConnectedTo') connectedTo: MatAutocompleteOrigin;\n\n /**\n * `autocomplete` attribute to be set on the input element.\n * @docs-private\n */\n @Input('autocomplete') autocompleteAttribute: string = 'off';\n\n /**\n * Whether the autocomplete is disabled. When disabled, the element will\n * act as a regular input and the user won't be able to open the panel.\n */\n @Input('matAutocompleteDisabled')\n get autocompleteDisabled(): boolean { return this._autocompleteDisabled; }\n set autocompleteDisabled(value: boolean) {\n this._autocompleteDisabled = coerceBooleanProperty(value);\n }\n\n constructor(private _element: ElementRef<HTMLInputElement>, private _overlay: Overlay,\n private _viewContainerRef: ViewContainerRef,\n private _zone: NgZone,\n private _changeDetectorRef: ChangeDetectorRef,\n @Inject(MAT_AUTOCOMPLETE_SCROLL_STRATEGY) scrollStrategy: any,\n @Optional() private _dir: Directionality,\n @Optional() @Host() private _formField: MatFormField,\n @Optional() @Inject(DOCUMENT) private _document: any,\n // @breaking-change 8.0.0 Make `_viewportRuler` required.\n private _viewportRuler?: ViewportRuler) {\n\n if (typeof window !== 'undefined') {\n _zone.runOutsideAngular(() => {\n window.addEventListener('blur', this._windowBlurHandler);\n });\n }\n\n this._scrollStrategy = scrollStrategy;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['position'] && this._positionStrategy) {\n this._setStrategyPositions(this._positionStrategy);\n\n if (this.panelOpen) {\n this._overlayRef!.updatePosition();\n }\n }\n }\n\n ngOnDestroy() {\n if (typeof window !== 'undefined') {\n window.removeEventListener('blur', this._windowBlurHandler);\n }\n\n this._viewportSubscription.unsubscribe();\n this._componentDestroyed = true;\n this._destroyPanel();\n this._closeKeyEventStream.complete();\n }\n\n /** Whether or not the autocomplete panel is open. */\n get panelOpen(): boolean {\n return this._overlayAttached && this.autocomplete.showPanel;\n }\n private _overlayAttached: boolean = false;\n\n /** Opens the autocomplete suggestion panel. */\n openPanel(): void {\n this._attachOverlay();\n this._floatLabel();\n }\n\n /** Closes the autocomplete suggestion panel. */\n closePanel(): void {\n this._resetLabel();\n\n if (!this._overlayAttached) {\n return;\n }\n\n if (this.panelOpen) {\n // Only emit if the panel was visible.\n this.autocomplete.closed.emit();\n }\n\n this.autocomplete._isOpen = this._overlayAttached = false;\n\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n this._closingActionsSubscription.unsubscribe();\n }\n\n // Note that in some cases this can end up being called after the component is destroyed.\n // Add a check to ensure that we don't try to run change detection on a destroyed view.\n if (!this._componentDestroyed) {\n // We need to trigger change detection manually, because\n // `fromEvent` doesn't seem to do it at the proper time.\n // This ensures that the label is reset when the\n // user clicks outside.\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\n * within the viewport.\n */\n updatePosition(): void {\n if (this._overlayAttached) {\n this._overlayRef!.updatePosition();\n }\n }\n\n /**\n * A stream of actions that should close the autocomplete panel, including\n * when an option is selected, on blur, and when TAB is pressed.\n */\n get panelClosingActions(): Observable<MatOptionSelectionChange|null> {\n return merge(\n this.optionSelections,\n this.autocomplete._keyManager.tabOut.pipe(filter(() => this._overlayAttached)),\n this._closeKeyEventStream,\n this._getOutsideClickStream(),\n this._overlayRef ?\n this._overlayRef.detachments().pipe(filter(() => this._overlayAttached)) :\n observableOf()\n ).pipe(\n // Normalize the output so we return a consistent type.\n map(event => event instanceof MatOptionSelectionChange ? event : null)\n );\n }\n\n /** Stream of autocomplete option selections. */\n readonly optionSelections: Observable<MatOptionSelectionChange> = defer(() => {\n if (this.autocomplete && this.autocomplete.options) {\n return merge(...this.autocomplete.options.map(option => option.onSelectionChange));\n }\n\n // If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.\n // Return a stream that we'll replace with the real one once everything is in place.\n return this._zone.onStable\n .asObservable()\n .pipe(take(1), switchMap(() => this.optionSelections));\n }) as Observable<MatOptionSelectionChange>;\n\n /** The currently active option, coerced to MatOption type. */\n get activeOption(): MatOption | null {\n if (this.autocomplete && this.autocomplete._keyManager) {\n return this.autocomplete._keyManager.activeItem;\n }\n\n return null;\n }\n\n /** Stream of clicks outside of the autocomplete panel. */\n private _getOutsideClickStream(): Observable<any> {\n return merge(\n fromEvent(this._document, 'click') as Observable<MouseEvent>,\n fromEvent(this._document, 'touchend') as Observable<TouchEvent>\n )\n .pipe(filter(event => {\n const clickTarget = event.target as HTMLElement;\n const formField = this._formField ?\n this._formField._elementRef.nativeElement : null;\n\n return this._overlayAttached &&\n clickTarget !== this._element.nativeElement &&\n (!formField || !formField.contains(clickTarget)) &&\n (!!this._overlayRef && !this._overlayRef.overlayElement.contains(clickTarget));\n }));\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: any): void {\n Promise.resolve(null).then(() => this._setTriggerValue(value));\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => {}): void {\n this._onChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => {}) {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean) {\n this._element.nativeElement.disabled = isDisabled;\n }\n\n _handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (keyCode === ESCAPE) {\n event.preventDefault();\n }\n\n if (this.activeOption && keyCode === ENTER && this.panelOpen) {\n this.activeOption._selectViaInteraction();\n this._resetActiveItem();\n event.preventDefault();\n } else if (this.autocomplete) {\n const prevActiveItem = this.autocomplete._keyManager.activeItem;\n const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n\n if (this.panelOpen || keyCode === TAB) {\n this.autocomplete._keyManager.onKeydown(event);\n } else if (isArrowKey && this._canOpen()) {\n this.openPanel();\n }\n\n if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n this._scrollToOption();\n }\n }\n }\n\n _handleInput(event: KeyboardEvent): void {\n let target = event.target as HTMLInputElement;\n let value: number | string | null = target.value;\n\n // Based on `NumberValueAccessor` from forms.\n if (target.type === 'number') {\n value = value == '' ? null : parseFloat(value);\n }\n\n // If the input has a placeholder, IE will fire the `input` event on page load,\n // focus and blur, in addition to when the user actually changed the value. To\n // filter out all of the extra events, we save the value on focus and between\n // `input` events, and we check whether it changed.\n // See: https://connect.microsoft.com/IE/feedback/details/885747/\n if (this._previousValue !== value) {\n this._previousValue = value;\n this._onChange(value);\n\n if (this._canOpen() && this._document.activeElement === event.target) {\n this.openPanel();\n }\n }\n }\n\n _handleFocus(): void {\n if (!this._canOpenOnNextFocus) {\n this._canOpenOnNextFocus = true;\n } else if (this._canOpen()) {\n this._previousValue = this._element.nativeElement.value;\n this._attachOverlay();\n this._floatLabel(true);\n }\n }\n\n /**\n * In \"auto\" mode, the label will animate down as soon as focus is lost.\n * This causes the value to jump when selecting an option with the mouse.\n * This method manually floats the label until the panel can be closed.\n * @param shouldAnimate Whether the label should be animated when it is floated.\n */\n private _floatLabel(shouldAnimate = false): void {\n if (this._formField && this._formField.floatLabel === 'auto') {\n if (shouldAnimate) {\n this._formField._animateAndLockLabel();\n } else {\n this._formField.floatLabel = 'always';\n }\n\n this._manuallyFloatingLabel = true;\n }\n }\n\n /** If the label has been manually elevated, return it to its normal state. */\n private _resetLabel(): void {\n if (this._manuallyFloatingLabel) {\n this._formField.floatLabel = 'auto';\n this._manuallyFloatingLabel = false;\n }\n }\n\n /**\n * Given that we are not actually focusing active options, we must manually adjust scroll\n * to reveal options below the fold. First, we find the offset of the option from the top\n * of the panel. If that offset is below the fold, the new scrollTop will be the offset -\n * the panel height + the option height, so the active option will be just visible at the\n * bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop\n * will become the offset. If that offset is visible within the panel already, the scrollTop is\n * not adjusted.\n */\n private _scrollToOption(): void {\n const index = this.autocomplete._keyManager.activeItemIndex || 0;\n const labelCount = _countGroupLabelsBeforeOption(index,\n this.autocomplete.options, this.autocomplete.optionGroups);\n\n const newScrollPosition = _getOptionScrollPosition(\n index + labelCount,\n AUTOCOMPLETE_OPTION_HEIGHT,\n this.autocomplete._getScrollTop(),\n AUTOCOMPLETE_PANEL_HEIGHT\n );\n\n this.autocomplete._setScrollTop(newScrollPosition);\n }\n\n /**\n * This method listens to a stream of panel closing actions and resets the\n * stream every time the option list changes.\n */\n private _subscribeToClosingActions(): Subscription {\n const firstStable = this._zone.onStable.asObservable().pipe(take(1));\n const optionChanges = this.autocomplete.options.changes.pipe(\n tap(() => this._positionStrategy.reapplyLastPosition()),\n // Defer emitting to the stream until the next tick, because changing\n // bindings in here will cause \"changed after checked\" errors.\n delay(0)\n );\n\n // When the zone is stable initially, and when the option list changes...\n return merge(firstStable, optionChanges)\n .pipe(\n // create a new stream of panelClosingActions, replacing any previous streams\n // that were created, and flatten it so our stream only emits closing events...\n switchMap(() => {\n const wasOpen = this.panelOpen;\n this._resetActiveItem();\n this.autocomplete._setVisibility();\n\n if (this.panelOpen) {\n this._overlayRef!.updatePosition();\n\n // If the `panelOpen` state changed, we need to make sure to emit the `opened`\n // event, because we may not have emitted it when the panel was attached. This\n // can happen if the users opens the panel and there are no options, but the\n // options come in slightly later or as a result of the value changing.\n if (wasOpen !== this.panelOpen) {\n this.autocomplete.opened.emit();\n }\n }\n\n return this.panelClosingActions;\n }),\n // when the first closing event occurs...\n take(1))\n // set the value, close the panel, and complete.\n .subscribe(event => this._setValueAndClose(event));\n }\n\n /** Destroys the autocomplete suggestion panel. */\n private _destroyPanel(): void {\n if (this._overlayRef) {\n this.closePanel();\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n private _setTriggerValue(value: any): void {\n const toDisplay = this.autocomplete && this.autocomplete.displayWith ?\n this.autocomplete.displayWith(value) :\n value;\n\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n const inputValue = toDisplay != null ? toDisplay : '';\n\n // If it's used within a `MatFormField`, we should set it through the property so it can go\n // through change detection.\n if (this._formField) {\n this._formField._control.value = inputValue;\n } else {\n this._element.nativeElement.value = inputValue;\n }\n\n this._previousValue = inputValue;\n }\n\n /**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n */\n private _setValueAndClose(event: MatOptionSelectionChange | null): void {\n if (event && event.source) {\n this._clearPreviousSelectedOption(event.source);\n this._setTriggerValue(event.source.value);\n this._onChange(event.source.value);\n this._element.nativeElement.focus();\n this.autocomplete._emitSelectEvent(event.source);\n }\n\n this.closePanel();\n }\n\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n private _clearPreviousSelectedOption(skip: MatOption) {\n this.autocomplete.options.forEach(option => {\n if (option != skip && option.selected) {\n option.deselect();\n }\n });\n }\n\n private _attachOverlay(): void {\n if (!this.autocomplete) {\n throw getMatAutocompleteMissingPanelError();\n }\n\n let overlayRef = this._overlayRef;\n\n if (!overlayRef) {\n this._portal = new TemplatePortal(this.autocomplete.template, this._viewContainerRef);\n overlayRef = this._overlay.create(this._getOverlayConfig());\n this._overlayRef = overlayRef;\n\n // Use the `keydownEvents` in order to take advantage of\n // the overlay event targeting provided by the CDK overlay.\n overlayRef.keydownEvents().subscribe(event => {\n // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n if (event.keyCode === ESCAPE || (event.keyCode === UP_ARROW && event.altKey)) {\n this._resetActiveItem();\n this._closeKeyEventStream.next();\n\n // We need to stop propagation, otherwise the event will eventually\n // reach the input itself and cause the overlay to be reopened.\n event.stopPropagation();\n event.preventDefault();\n }\n });\n\n if (this._viewportRuler) {\n this._viewportSubscription = this._viewportRuler.change().subscribe(() => {\n if (this.panelOpen && overlayRef) {\n overlayRef.updateSize({width: this._getPanelWidth()});\n }\n });\n }\n } else {\n // Update the trigger, panel width and direction, in case anything has changed.\n this._positionStrategy.setOrigin(this._getConnectedElement());\n overlayRef.updateSize({width: this._getPanelWidth()});\n }\n\n if (overlayRef && !overlayRef.hasAttached()) {\n overlayRef.attach(this._portal);\n this._closingActionsSubscription = this._subscribeToClosingActions();\n }\n\n const wasOpen = this.panelOpen;\n\n this.autocomplete._setVisibility();\n this.autocomplete._isOpen = this._overlayAttached = true;\n\n // We need to do an extra `panelOpen` check in here, because the\n // autocomplete won't be shown if there are no options.\n if (this.panelOpen && wasOpen !== this.panelOpen) {\n this.autocomplete.opened.emit();\n }\n }\n\n private _getOverlayConfig(): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this._getOverlayPosition(),\n scrollStrategy: this._scrollStrategy(),\n width: this._getPanelWidth(),\n direction: this._dir\n });\n }\n\n private _getOverlayPosition(): PositionStrategy {\n const strategy = this._overlay.position()\n .flexibleConnectedTo(this._getConnectedElement())\n .withFlexibleDimensions(false)\n .withPush(false);\n\n this._setStrategyPositions(strategy);\n this._positionStrategy = strategy;\n return strategy;\n }\n\n /** Sets the positions on a position strategy based on the directive's input state. */\n private _setStrategyPositions(positionStrategy: FlexibleConnectedPositionStrategy) {\n const belowPosition: ConnectedPosition = {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n };\n const abovePosition: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n\n // The overlay edge connected to the trigger should have squared corners, while\n // the opposite end has rounded corners. We apply a CSS class to swap the\n // border-radius based on the overlay position.\n panelClass: 'mat-autocomplete-panel-above'\n };\n\n let positions: ConnectedPosition[];\n\n if (this.position === 'above') {\n positions = [abovePosition];\n } else if (this.position === 'below') {\n positions = [belowPosition];\n } else {\n positions = [belowPosition, abovePosition];\n }\n\n positionStrategy.withPositions(positions);\n }\n\n private _getConnectedElement(): ElementRef {\n if (this.connectedTo) {\n return this.connectedTo.elementRef;\n }\n\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._element;\n }\n\n private _getPanelWidth(): number | string {\n return this.autocomplete.panelWidth || this._getHostWidth();\n }\n\n /** Returns the width of the input element, so the panel width can match it. */\n private _getHostWidth(): number {\n return this._getConnectedElement().nativeElement.getBoundingClientRect().width;\n }\n\n /**\n * Resets the active item to -1 so arrow events will activate the\n * correct options, or to 0 if the consumer opted into it.\n */\n private _resetActiveItem(): void {\n this.autocomplete._keyManager.setActiveItem(this.autocomplete.autoActiveFirstOption ? 0 : -1);\n }\n\n /** Determines whether the panel can be opened. */\n private _canOpen(): boolean {\n const element = this._element.nativeElement;\n return !element.readOnly && !element.disabled && !this._autocompleteDisabled;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef} from '@angular/core';\n\n/**\n * Directive applied to an element to make it usable\n * as a connection point for an autocomplete panel.\n */\n@Directive({\n selector: '[matAutocompleteOrigin]',\n exportAs: 'matAutocompleteOrigin',\n})\nexport class MatAutocompleteOrigin {\n constructor(\n /** Reference to the element on which the directive is applied. */\n public elementRef: ElementRef<HTMLElement>) { }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ActiveDescendantKeyManager} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CanDisableRipple,\n CanDisableRippleCtor,\n MAT_OPTION_PARENT_COMPONENT,\n MatOptgroup,\n MatOption,\n mixinDisableRipple,\n} from '@angular/material/core';\n\n\n/**\n * Autocomplete IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueAutocompleteIdCounter = 0;\n\n/** Event object that is emitted when an autocomplete option is selected. */\nexport class MatAutocompleteSelectedEvent {\n constructor(\n /** Reference to the autocomplete panel that emitted the event. */\n public source: MatAutocomplete,\n /** Option that was selected. */\n public option: MatOption) { }\n}\n\n\n// Boilerplate for applying mixins to MatAutocomplete.\n/** @docs-private */\nclass MatAutocompleteBase {}\nconst _MatAutocompleteMixinBase: CanDisableRippleCtor & typeof MatAutocompleteBase =\n mixinDisableRipple(MatAutocompleteBase);\n\n/** Default `mat-autocomplete` options that can be overridden. */\nexport interface MatAutocompleteDefaultOptions {\n /** Whether the first option should be highlighted when an autocomplete panel is opened. */\n autoActiveFirstOption?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-autocomplete`. */\nexport const MAT_AUTOCOMPLETE_DEFAULT_OPTIONS =\n new InjectionToken<MatAutocompleteDefaultOptions>('mat-autocomplete-default-options', {\n providedIn: 'root',\n factory: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY,\n });\n\n/** @docs-private */\nexport function MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY(): MatAutocompleteDefaultOptions {\n return {autoActiveFirstOption: false};\n}\n\n@Component({\n moduleId: module.id,\n selector: 'mat-autocomplete',\n templateUrl: 'autocomplete.html',\n styleUrls: ['autocomplete.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'matAutocomplete',\n inputs: ['disableRipple'],\n host: {\n 'class': 'mat-autocomplete'\n },\n providers: [\n {provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete}\n ]\n})\nexport class MatAutocomplete extends _MatAutocompleteMixinBase implements AfterContentInit,\n CanDisableRipple {\n\n /** Manages active item in option list based on key events. */\n _keyManager: ActiveDescendantKeyManager<MatOption>;\n\n /** Whether the autocomplete panel should be visible, depending on option length. */\n showPanel: boolean = false;\n\n /** Whether the autocomplete panel is open. */\n get isOpen(): boolean { return this._isOpen && this.showPanel; }\n _isOpen: boolean = false;\n\n // The @ViewChild query for TemplateRef here needs to be static because some code paths\n // lead to the overlay being created before change detection has finished for this component.\n // Notably, another component may trigger `focus` on the autocomplete-trigger.\n\n /** @docs-private */\n @ViewChild(TemplateRef, {static: true}) template: TemplateRef<any>;\n\n /** Element for the panel containing the autocomplete options. */\n @ViewChild('panel', {static: false}) panel: ElementRef;\n\n /** @docs-private */\n @ContentChildren(MatOption, {descendants: true}) options: QueryList<MatOption>;\n\n /** @docs-private */\n @ContentChildren(MatOptgroup) optionGroups: QueryList<MatOptgroup>;\n\n /** Function that maps an option's control value to its display value in the trigger. */\n @Input() displayWith: ((value: any) => string) | null = null;\n\n /**\n * Whether the first option should be highlighted when the autocomplete panel is opened.\n * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\n */\n @Input()\n get autoActiveFirstOption(): boolean { return this._autoActiveFirstOption; }\n set autoActiveFirstOption(value: boolean) {\n this._autoActiveFirstOption = coerceBooleanProperty(value);\n }\n private _autoActiveFirstOption: boolean;\n\n /**\n * Specify the width of the autocomplete panel. Can be any CSS sizing value, otherwise it will\n * match the width of its host.\n */\n @Input() panelWidth: string | number;\n\n /** Event that is emitted whenever an option from the list is selected. */\n @Output() readonly optionSelected: EventEmitter<MatAutocompleteSelectedEvent> =\n new EventEmitter<MatAutocompleteSelectedEvent>();\n\n /** Event that is emitted when the autocomplete panel is opened. */\n @Output() readonly opened: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event that is emitted when the autocomplete panel is closed. */\n @Output() readonly closed: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Takes classes set on the host mat-autocomplete element and applies them to the panel\n * inside the overlay container to allow for easy styling.\n */\n @Input('class')\n set classList(value: string) {\n if (value && value.length) {\n this._classList = value.split(' ').reduce((classList, className) => {\n classList[className.trim()] = true;\n return classList;\n }, {} as {[key: string]: boolean});\n } else {\n this._classList = {};\n }\n\n this._setVisibilityClasses(this._classList);\n this._elementRef.nativeElement.className = '';\n }\n _classList: {[key: string]: boolean} = {};\n\n /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n id: string = `mat-autocomplete-${_uniqueAutocompleteIdCounter++}`;\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef<HTMLElement>,\n @Inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS) defaults: MatAutocompleteDefaultOptions) {\n super();\n\n this._autoActiveFirstOption = !!defaults.autoActiveFirstOption;\n }\n\n ngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager<MatOption>(this.options).withWrap();\n // Set the initial visibility state.\n this._setVisibility();\n }\n\n /**\n * Sets the panel scrollTop. This allows us to manually scroll to display options\n * above or below the fold, as they are not actually being focused when active.\n */\n _setScrollTop(scrollTop: number): void {\n if (this.panel) {\n this.panel.nativeElement.scrollTop = scrollTop;\n }\n }\n\n /** Returns the panel's scrollTop. */\n _getScrollTop(): number {\n return this.panel ? this.panel.nativeElement.scrollTop : 0;\n }\n\n /** Panel should hide itself when the option list is empty. */\n _setVisibility() {\n this.showPanel = !!this.options.length;\n this._setVisibilityClasses(this._classList);\n this._changeDetectorRef.markForCheck();\n }\n\n /** Emits the `select` event. */\n _emitSelectEvent(option: MatOption): void {\n const event = new MatAutocompleteSelectedEvent(this, option);\n this.optionSelected.emit(event);\n }\n\n /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */\n private _setVisibilityClasses(classList: {[key: string]: boolean}) {\n classList['mat-autocomplete-visible'] = this.showPanel;\n classList['mat-autocomplete-hidden'] = !this.showPanel;\n }\n}\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"],"names":["MatCommonModule","MatOptionModule","OverlayModule","CommonModule","NgModule","Input","ViewportRuler","Optional","Inject","DOCUMENT","MatFormField","Host","Directionality","ChangeDetectorRef","NgZone","ViewContainerRef","Overlay","ElementRef","Directive","OverlayConfig","ESCAPE","UP_ARROW","TemplatePortal","take","switchMap","merge","delay","tap","_getOptionScrollPosition","_countGroupLabelsBeforeOption","TAB","DOWN_ARROW","ENTER","formField","filter","fromEvent","MatOptionSelectionChange","map","observableOf","coerceBooleanProperty","defer","Subject","Subscription","forwardRef","NG_VALUE_ACCESSOR","overlay","InjectionToken","Output","ContentChildren","MatOptgroup","MatOption","MAT_OPTION_PARENT_COMPONENT","ChangeDetectionStrategy","ViewEncapsulation","Component","ActiveDescendantKeyManager","EventEmitter","tslib_1.__extends","mixinDisableRipple"],"mappings":"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"}