blob: db3bd8d79d6e937ea35b5db0409bfe4cd3a6878b [file] [log] [blame]
{"version":3,"file":"material-autocomplete.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/material/autocomplete/autocomplete.ts","../../src/material/autocomplete/autocomplete-trigger.ts","../../src/material/autocomplete/autocomplete-origin.ts","../../src/material/autocomplete/autocomplete-module.ts"],"sourcesContent":["/*! *****************************************************************************\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","/**\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","/**\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 {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"],"names":["__extends","d","b","__","this","constructor","extendStatics","prototype","Object","create","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY","autoActiveFirstOption","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY","overlay","scrollStrategies","reposition","getMatAutocompleteMissingPanelError","Error","setPrototypeOf","__proto__","Array","p","hasOwnProperty","_uniqueAutocompleteIdCounter","MatAutocompleteSelectedEvent","source","option","MatAutocompleteBase","_MatAutocompleteMixinBase","mixinDisableRipple","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS","InjectionToken","providedIn","factory","MatAutocomplete","_super","_changeDetectorRef","_elementRef","defaults","_this","call","showPanel","_isOpen","displayWith","optionSelected","EventEmitter","opened","closed","_classList","id","_autoActiveFirstOption","tslib_1.__extends","defineProperty","value","coerceBooleanProperty","length","split","reduce","classList","className","trim","_setVisibilityClasses","nativeElement","ngAfterContentInit","_keyManager","ActiveDescendantKeyManager","options","withWrap","_setVisibility","_setScrollTop","scrollTop","panel","_getScrollTop","markForCheck","_emitSelectEvent","event","emit","type","Component","args","selector","template","styles","encapsulation","ViewEncapsulation","None","changeDetection","ChangeDetectionStrategy","OnPush","exportAs","inputs","host","class","providers","provide","MAT_OPTION_PARENT_COMPONENT","useExisting","undefined","decorators","Inject","propDecorators","ContentChildren","MatOption","descendants","optionGroups","MatOptgroup","Input","panelWidth","Output","MatAutocompleteOrigin","elementRef","Directive","ElementRef","MAT_AUTOCOMPLETE_SCROLL_STRATEGY","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER","deps","Overlay","useFactory","MAT_AUTOCOMPLETE_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","MatAutocompleteTrigger","multi","_element","_overlay","_viewContainerRef","_zone","scrollStrategy","_dir","_formField","_document","_viewportRuler","_componentDestroyed","_autocompleteDisabled","_manuallyFloatingLabel","_viewportSubscription","Subscription","EMPTY","_canOpenOnNextFocus","_closeKeyEventStream","Subject","_windowBlurHandler","activeElement","panelOpen","_onChange","_onTouched","position","autocompleteAttribute","_overlayAttached","optionSelections","defer","autocomplete","merge","apply","map","onSelectionChange","onStable","asObservable","pipe","take","switchMap","window","runOutsideAngular","addEventListener","_scrollStrategy","ngOnChanges","changes","_positionStrategy","_setStrategyPositions","updatePosition","ngOnDestroy","removeEventListener","unsubscribe","_destroyPanel","complete","openPanel","_attachOverlay","_floatLabel","closePanel","_resetLabel","_overlayRef","hasAttached","detach","_closingActionsSubscription","detectChanges","tabOut","filter","_getOutsideClickStream","detachments","observableOf","MatOptionSelectionChange","activeItem","fromEvent","clickTarget","formField","contains","overlayElement","writeValue","Promise","resolve","then","_setTriggerValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disabled","_handleKeydown","keyCode","ESCAPE","preventDefault","activeOption","ENTER","_selectViaInteraction","_resetActiveItem","prevActiveItem","isArrowKey","UP_ARROW","DOWN_ARROW","TAB","onKeydown","_canOpen","_scrollToOption","_handleInput","target","parseFloat","_previousValue","_handleFocus","shouldAnimate","floatLabel","_animateAndLockLabel","index","activeItemIndex","labelCount","_countGroupLabelsBeforeOption","newScrollPosition","_getOptionScrollPosition","_subscribeToClosingActions","firstStable","optionChanges","tap","reapplyLastPosition","delay","wasOpen","panelClosingActions","subscribe","_setValueAndClose","dispose","toDisplay","inputValue","_control","_clearPreviousSelectedOption","focus","skip","forEach","selected","deselect","overlayRef","setOrigin","_getConnectedElement","updateSize","width","_getPanelWidth","_portal","TemplatePortal","_getOverlayConfig","keydownEvents","altKey","next","stopPropagation","change","attach","OverlayConfig","positionStrategy","_getOverlayPosition","direction","strategy","flexibleConnectedTo","withFlexibleDimensions","withPush","positions","belowPosition","originX","originY","overlayX","overlayY","abovePosition","panelClass","withPositions","connectedTo","getConnectedOverlayOrigin","_getHostWidth","getBoundingClientRect","setActiveItem","element","readOnly","[attr.autocomplete]","[attr.role]","[attr.aria-autocomplete]","[attr.aria-activedescendant]","[attr.aria-expanded]","[attr.aria-owns]","[attr.aria-haspopup]","(focusin)","(blur)","(input)","(keydown)","ViewContainerRef","NgZone","ChangeDetectorRef","Directionality","Optional","MatFormField","Host","DOCUMENT","ViewportRuler","autocompleteDisabled","MatAutocompleteModule","NgModule","imports","MatOptionModule","OverlayModule","MatCommonModule","CommonModule","exports","declarations"],"mappings":";;;;;;;+sCAuBA,SAAgBA,GAAUC,EAAGC,GAEzB,QAASC,KAAOC,KAAKC,YAAcJ,EADnCK,EAAcL,EAAGC,GAEjBD,EAAEM,UAAkB,OAANL,EAAaM,OAAOC,OAAOP,IAAMC,EAAGI,UAAYL,EAAEK,UAAW,GAAIJ,IC+CnF,QAAgBO,KACd,OAAQC,uBAAuB,GCLjC,QAAgBC,GAAyCC,GACvD,MAAA,YAAa,MAAAA,GAAQC,iBAAiBC,cAwBxC,QAAgBC,KACd,MAAOC,OAAM,6MF/Ef,GAAIX,GAAgB,SAASL,EAAGC,GAI5B,OAHAI,EAAgBE,OAAOU,iBAChBC,uBAA2BC,QAAS,SAAUnB,EAAGC,GAAKD,EAAEkB,UAAYjB,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAImB,KAAKnB,GAAOA,EAAEoB,eAAeD,KAAIpB,EAAEoB,GAAKnB,EAAEmB,MACpDpB,EAAGC,ICqBxBqB,EAA+B,eAIjC,QAAFC,GAEWC,EAEAC,GAFAtB,KAAXqB,OAAWA,EAEArB,KAAXsB,OAAWA,EACX,MAAAF,mBAKA,QAAAG,MAA2B,MAA3BA,MACMC,EACFC,EAAAA,mBAAmBF,GASVG,EACT,GAAIC,GAAAA,eAA8C,oCAChDC,WAAY,OACZC,QAASvB,IAQfwB,EAAA,SAAAC,GAkGE,QAAFD,GACYE,EACAC,EACkCC,GAH5C,GAAFC,GAIIJ,EAJJK,KAAApC,OAAAA,WACYmC,GAAZH,mBAAYA,EACAG,EAAZF,YAAYA,EA7EVE,EAAFE,WAAuB,EAIrBF,EAAFG,SAAqB,EAmBVH,EAAXI,YAA0D,KAoBrCJ,EAArBK,eACM,GAAIC,GAAAA,aAGWN,EAArBO,OAAkD,GAAID,GAAAA,aAGjCN,EAArBQ,OAAkD,GAAIF,GAAAA,aAoBpDN,EAAFS,cAGET,EAAFU,GAAe,oBAAoB1B,IAQ/BgB,EAAKW,yBAA2BZ,EAAS3B,wBAzB7C,MA/DqCwC,GAArCjB,EAAAC,GAUE3B,OAAF4C,eAAMlB,EAAN3B,UAAA,cAAE,WAAwB,MAAOH,MAAKsC,SAAWtC,KAAKqC,2CA0BpDjC,OAAF4C,eACMlB,EADN3B,UAAA,6BAAE,WACuC,MAAOH,MAAK8C,4BACnD,SAA0BG,GACxBjD,KAAK8C,uBAAyBI,EAAAA,sBAAsBD,oCAwBtD7C,OAAF4C,eACMlB,EADN3B,UAAA,iBAAE,SACc8C,GACRA,GAASA,EAAME,OACjBnD,KAAK4C,WAAaK,EAAMG,MAAM,KAAKC,OAAM,SAAEC,EAAWC,GAEpD,MADAD,GAAUC,EAAUC,SAAU,EACvBF,OAGTtD,KAAK4C,cAGP5C,KAAKyD,sBAAsBzD,KAAK4C,YAChC5C,KAAKiC,YAAYyB,cAAcH,UAAY,oCAgB7CzB,EAAF3B,UAAAwD,mBAAE,WACE3D,KAAK4D,YAAc,GAAIC,GAAAA,2BAAsC7D,KAAK8D,SAASC,WAE3E/D,KAAKgE,kBAOPlC,EAAF3B,UAAA8D,cAAE,SAAcC,GACRlE,KAAKmE,QACPnE,KAAKmE,MAAMT,cAAcQ,UAAYA,IAKzCpC,EAAF3B,UAAAiE,cAAE,WACE,MAAOpE,MAAKmE,MAAQnE,KAAKmE,MAAMT,cAAcQ,UAAY,GAI3DpC,EAAF3B,UAAA6D,eAAE,WACEhE,KAAKqC,YAAcrC,KAAK8D,QAAQX,OAChCnD,KAAKyD,sBAAsBzD,KAAK4C,YAChC5C,KAAKgC,mBAAmBqC,gBAI1BvC,EAAF3B,UAAAmE,iBAAE,SAAiBhD,GACnB,GAAUiD,GAAQ,GAAInD,GAA6BpB,KAAMsB,EACrDtB,MAAKwC,eAAegC,KAAKD,IAInBzC,EAAV3B,UAAAsD,sBAAE,SAA8BH,GAC5BA,EAAU,4BAA8BtD,KAAKqC,UAC7CiB,EAAU,4BAA8BtD,KAAKqC,0BAhJjDoC,KAACC,EAAAA,UAADC,OAAAC,SAAA,mBACEC,SAAU,wJACVC,QAAF,uoBACEC,cAAFC,EAAAA,kBAAAC,KACEC,gBAAFC,EAAAA,wBAAAC,OACEC,SAAF,kBACEC,QAAF,iBACEC,MACFC,MAAA,oBAEAC,YACAC,QAAAC,EAAAA,4BAAAC,YAAA9D,2FA3EA2C,SAAEoB,GAAFC,aAAArB,KAAAsB,EAAAA,OAAApB,MAAAjD,QAqKAI,EAAAkE,qIAnEAlC,UAAAW,KAAAwB,EAAAA,gBAAAtB,MAAAuB,EAAAA,WAAAC,aAAA,MAGAC,eAAA3B,KAAAwB,EAAAA,gBAAAtB,MAAA0B,EAAAA,eAGA9D,cAAAkC,KAAA6B,EAAAA,QAGA/F,wBAAAkE,KAAA6B,EAAAA,QAGAC,aAAA9B,KAAA6B,EAAAA,QAMA9D,iBAAAiC,KAAA+B,EAAAA,SAWA9D,SAAA+B,KAAA+B,EAAAA,SAGA7D,SAAA8B,KAAA+B,EAAAA,SAIAlD,YAAAmB,KAAA6B,EAAAA,MAAA3B,MAAA,YASA7C,ME9IA2E,EAAA,WAKE,QAAFA,GAEaC,GAAA1G,KAAb0G,WAAaA,EACb,sBARAjC,KAACkC,EAAAA,UAADhC,OACEC,SAAU,0BACVS,SAAU,gEARZZ,KAAmBmC,EAAAA,cAcnBH,KD2CaI,EACT,GAAIlF,GAAAA,eAAqC,oCAQhCmF,GACXpB,QAASmB,EACTE,MAAOC,EAAAA,SACPC,WAAYzG,GAOD0G,GACXxB,QAASyB,EAAAA,kBACTvB,YAAawB,EAAAA,WAAU,WAAO,MAAAC,KAC9BC,OAAO,GAcTD,EAAA,WAwGE,QAAFA,GAAsBE,EAAgDC,EAChDC,EACAC,EACA1F,EACkC2F,EACtBC,EACQC,EACUC,EAE9BC,GATpB,GAAF5F,GAAAnC,IAAsBA,MAAtBuH,SAAsBA,EAAgDvH,KAAtEwH,SAAsEA,EAChDxH,KAAtByH,kBAAsBA,EACAzH,KAAtB0H,MAAsBA,EACA1H,KAAtBgC,mBAAsBA,EAEYhC,KAAlC4H,KAAkCA,EACQ5H,KAA1C6H,WAA0CA,EACU7H,KAApD8H,UAAoDA,EAE9B9H,KAAtB+H,eAAsBA,EA1FZ/H,KAAVgI,qBAAgC,EACtBhI,KAAViI,uBAAkC,EAUxBjI,KAAVkI,wBAAmC,EAMzBlI,KAAVmI,sBAAkCC,EAAAA,aAAaC,MAOrCrI,KAAVsI,qBAAgC,EAGbtI,KAAnBuI,qBAA0C,GAAIC,GAAAA,QAMpCxI,KAAVyI,mBAA4B,WAIxBtG,EAAKmG,oBACDnG,EAAK2F,UAAUY,gBAAkBvG,EAAKoF,SAAS7D,eAAiBvB,EAAKwG,WAI3E3I,KAAF4I,UAAW,aAGT5I,KAAF6I,WAAY,aAYwB7I,KAApC8I,SAA2E,OAYlD9I,KAAzB+I,sBAAyD,MAyD/C/I,KAAVgJ,kBAAsC,EAqE3BhJ,KAAXiJ,iBAAoEC,EAAAA,MAAK,WACrE,MAAI/G,GAAKgH,cAAgBhH,EAAKgH,aAAarF,QACnCsF,EAAAA,MAAZC,UAAA,GAAqBlH,EAAKgH,aAAarF,QAAQwF,IAAG,SAAChI,GAAU,MAAAA,GAAOiI,qBAKzDpH,EAAKuF,MAAM8B,SACbC,eACAC,KAAKC,EAAAA,KAAK,GAAIC,EAAAA,UAAS,WAAO,MAAAzH,GAAK8G,sBAhHlB,mBAAXY,SACTnC,EAAMoC,kBAAiB,WACrBD,OAAOE,iBAAiB,OAAQ5H,EAAKsG,sBAIzCzI,KAAKgK,gBAAkBrC,EAggB3B,MAvhBEvH,QAAF4C,eACMqE,EADNlH,UAAA,4BAAE,WACsC,MAAOH,MAAKiI,2BAClD,SAAyBhF,GACvBjD,KAAKiI,sBAAwB/E,EAAAA,sBAAsBD,oCAuBrDoE,EAAFlH,UAAA8J,YAAE,SAAYC,GACNA,EAAkB,UAAKlK,KAAKmK,oBAC9BnK,KAAKoK,sBAAsBpK,KAAKmK,mBAE5BnK,KAAK2I,WACP3I,KAAgB,YAAEqK,mBAKxBhD,EAAFlH,UAAAmK,YAAE,WACwB,mBAAXT,SACTA,OAAOU,oBAAoB,OAAQvK,KAAKyI,oBAG1CzI,KAAKmI,sBAAsBqC,cAC3BxK,KAAKgI,qBAAsB,EAC3BhI,KAAKyK,gBACLzK,KAAKuI,qBAAqBmC,YAI5BtK,OAAF4C,eAAMqE,EAANlH,UAAA,iBAAE,WACE,MAAOH,MAAKgJ,kBAAoBhJ,KAAKmJ,aAAa9G,2CAKpDgF,EAAFlH,UAAAwK,UAAE,WACE3K,KAAK4K,iBACL5K,KAAK6K,eAIPxD,EAAFlH,UAAA2K,WAAE,WACE9K,KAAK+K,cAEA/K,KAAKgJ,mBAINhJ,KAAK2I,WAEP3I,KAAKmJ,aAAaxG,OAAO6B,OAG3BxE,KAAKmJ,aAAa7G,QAAUtC,KAAKgJ,kBAAmB,EAEhDhJ,KAAKgL,aAAehL,KAAKgL,YAAYC,gBACvCjL,KAAKgL,YAAYE,SACjBlL,KAAKmL,4BAA4BX,eAK9BxK,KAAKgI,qBAKRhI,KAAKgC,mBAAmBoJ,kBAQ5B/D,EAAFlH,UAAAkK,eAAE,WACMrK,KAAKgJ,kBACPhJ,KAAgB,YAAEqK,kBAQtBjK,OAAF4C,eAAMqE,EAANlH,UAAA,2BAAE,WAAA,GAAFgC,GAAAnC,IACI,OAAOoJ,GAAAA,MACLpJ,KAAKiJ,iBACLjJ,KAAKmJ,aAAavF,YAAYyH,OAAO3B,KAAK4B,EAAAA,OAAM,WAAO,MAAAnJ,GAAK6G,oBAC5DhJ,KAAKuI,qBACLvI,KAAKuL,yBACLvL,KAAKgL,YACDhL,KAAKgL,YAAYQ,cAAc9B,KAAK4B,EAAAA,OAAM,WAAO,MAAAnJ,GAAK6G,oBACtDyC,EAAAA,MACJ/B,KAEAJ,EAAAA,IAAG,SAAC/E,GAAS,MAAAA,aAAiBmH,GAAAA,yBAA2BnH,EAAQ,yCAkBrEnE,OAAF4C,eAAMqE,EAANlH,UAAA,oBAAE,WACE,MAAIH,MAAKmJ,cAAgBnJ,KAAKmJ,aAAavF,YAClC5D,KAAKmJ,aAAavF,YAAY+H,WAGhC,sCAIDtE,EAAVlH,UAAAoL,uBAAE,WAAA,GAAFpJ,GAAAnC,IACI,OAAOoJ,GAAAA,MACLwC,EAAAA,UAAU5L,KAAK8H,UAAW,SAC1B8D,EAAAA,UAAU5L,KAAK8H,UAAW,aAE3B4B,KAAK4B,EAAAA,OAAM,SAAC/G,GACjB,GAAYsH,GAActH,EAAY,OAC1BuH,EAAY3J,EAAK0F,WACnB1F,EAAK0F,WAAW5F,YAAYyB,cAAgB,IAEhD,OAAOvB,GAAK6G,kBACJ6C,IAAgB1J,EAAKoF,SAAS7D,iBAC5BoI,IAAcA,EAAUC,SAASF,OAChC1J,EAAK6I,cAAgB7I,EAAK6I,YAAYgB,eAAeD,SAASF,OAK7ExE,EAAFlH,UAAA8L,WAAE,SAAWhJ,GAAX,GAAFd,GAAAnC,IACIkM,SAAQC,QAAQ,MAAMC,KAAI,WAAO,MAAAjK,GAAKkK,iBAAiBpJ,MAIzDoE,EAAFlH,UAAAmM,iBAAE,SAAiBC,GACfvM,KAAK4I,UAAY2D,GAInBlF,EAAFlH,UAAAqM,kBAAE,SAAkBD,GAChBvM,KAAK6I,WAAa0D,GAIpBlF,EAAFlH,UAAAsM,iBAAE,SAAiBC,GACf1M,KAAKuH,SAAS7D,cAAciJ,SAAWD,GAGzCrF,EAAFlH,UAAAyM,eAAE,SAAerI,GACjB,GAAUsI,GAAUtI,EAAMsI,OAUtB,IAJIA,IAAYC,EAAAA,QACdvI,EAAMwI,iBAGJ/M,KAAKgN,cAAgBH,IAAYI,EAAAA,OAASjN,KAAK2I,UACjD3I,KAAKgN,aAAaE,wBAClBlN,KAAKmN,mBACL5I,EAAMwI,qBACD,IAAI/M,KAAKmJ,aAAc,CAClC,GAAYiE,GAAiBpN,KAAKmJ,aAAavF,YAAY+H,WAC/C0B,EAAaR,IAAYS,EAAAA,UAAYT,IAAYU,EAAAA,UAEnDvN,MAAK2I,WAAakE,IAAYW,EAAAA,IAChCxN,KAAKmJ,aAAavF,YAAY6J,UAAUlJ,GAC/B8I,GAAcrN,KAAK0N,YAC5B1N,KAAK2K,aAGH0C,GAAcrN,KAAKmJ,aAAavF,YAAY+H,aAAeyB,IAC7DpN,KAAK2N,oBAKXtG,EAAFlH,UAAAyN,aAAE,SAAarJ,GACf,GAAQsJ,GAAStJ,EAAY,OACrBtB,EAAgC4K,EAAO5K,KAGvB,YAAhB4K,EAAOpJ,OACTxB,EAAiB,IAATA,EAAc,KAAO6K,WAAW7K,IAQtCjD,KAAK+N,iBAAmB9K,IAC1BjD,KAAK+N,eAAiB9K,EACtBjD,KAAK4I,UAAU3F,GAEXjD,KAAK0N,YAAc1N,KAAK8H,UAAUY,gBAAkBnE,EAAMsJ,QAC5D7N,KAAK2K,cAKXtD,EAAFlH,UAAA6N,aAAE,WACOhO,KAAKsI,oBAECtI,KAAK0N,aACd1N,KAAK+N,eAAiB/N,KAAKuH,SAAS7D,cAAcT,MAClDjD,KAAK4K,iBACL5K,KAAK6K,aAAY,IAJjB7K,KAAKsI,qBAAsB,GAcvBjB,EAAVlH,UAAA0K,YAAE,SAAoBoD,OAAtB,KAAAA,IAAsBA,GAAtB,GACQjO,KAAK6H,YAA6C,SAA/B7H,KAAK6H,WAAWqG,aACjCD,EACFjO,KAAK6H,WAAWsG,uBAEhBnO,KAAK6H,WAAWqG,WAAa,SAG/BlO,KAAKkI,wBAAyB,IAK1Bb,EAAVlH,UAAA4K,YAAE,WACM/K,KAAKkI,yBACPlI,KAAK6H,WAAWqG,WAAa,OAC7BlO,KAAKkI,wBAAyB,IAa1Bb,EAAVlH,UAAAwN,gBAAE,WACF,GAAUS,GAAQpO,KAAKmJ,aAAavF,YAAYyK,iBAAmB,EACzDC,EAAaC,EAAAA,8BAA8BH,EAC7CpO,KAAKmJ,aAAarF,QAAS9D,KAAKmJ,aAAa/C,cAE3CoI,EAAoBC,EAAAA,yBACxBL,EAAQE,EAza4B,GA2apCtO,KAAKmJ,aAAa/E,gBAxaiB,IA4arCpE,MAAKmJ,aAAalF,cAAcuK,IAO1BnH,EAAVlH,UAAAuO,2BAAE,WAAA,GAAFvM,GAAAnC,KACU2O,EAAc3O,KAAK0H,MAAM8B,SAASC,eAAeC,KAAKC,EAAAA,KAAK,IAC3DiF,EAAgB5O,KAAKmJ,aAAarF,QAAQoG,QAAQR,KACtDmF,EAAAA,IAAG,WAAO,MAAA1M,GAAKgI,kBAAkB2E,wBAGjCC,EAAAA,MAAM,GAIR,OAAO3F,GAAAA,MAAMuF,EAAaC,GACrBlF,KAGGE,EAAAA,UAAS,WACrB,GAAoBoF,GAAU7M,EAAKwG,SAgBrB,OAfAxG,GAAKgL,mBACLhL,EAAKgH,aAAanF,iBAEd7B,EAAKwG,YACPxG,EAAgB,YAAEkI,iBAMd2E,IAAY7M,EAAKwG,WACnBxG,EAAKgH,aAAazG,OAAO8B,QAItBrC,EAAK8M,sBAGdtF,EAAAA,KAAK,IAERuF,UAAS,SAAC3K,GAAS,MAAApC,GAAKgN,kBAAkB5K,MAIzC8C,EAAVlH,UAAAsK,cAAE,WACMzK,KAAKgL,cACPhL,KAAK8K,aACL9K,KAAKgL,YAAYoE,UACjBpP,KAAKgL,YAAc,OAIf3D,EAAVlH,UAAAkM,iBAAE,SAAyBpJ,GAC3B,GAAUoM,GAAYrP,KAAKmJ,cAAgBnJ,KAAKmJ,aAAa5G,YACvDvC,KAAKmJ,aAAa5G,YAAYU,GAC9BA,EAIIqM,EAA0B,MAAbD,EAAoBA,EAAY,EAI/CrP,MAAK6H,WACP7H,KAAK6H,WAAW0H,SAAStM,MAAQqM,EAEjCtP,KAAKuH,SAAS7D,cAAcT,MAAQqM,EAGtCtP,KAAK+N,eAAiBuB,GAQhBjI,EAAVlH,UAAAgP,kBAAE,SAA0B5K,GACpBA,GAASA,EAAMlD,SACjBrB,KAAKwP,6BAA6BjL,EAAMlD,QACxCrB,KAAKqM,iBAAiB9H,EAAMlD,OAAO4B,OACnCjD,KAAK4I,UAAUrE,EAAMlD,OAAO4B,OAC5BjD,KAAKuH,SAAS7D,cAAc+L,QAC5BzP,KAAKmJ,aAAa7E,iBAAiBC,EAAMlD,SAG3CrB,KAAK8K,cAMCzD,EAAVlH,UAAAqP,6BAAE,SAAqCE,GACnC1P,KAAKmJ,aAAarF,QAAQ6L,QAAO,SAACrO,GAC5BA,GAAUoO,GAAQpO,EAAOsO,UAC3BtO,EAAOuO,cAKLxI,EAAVlH,UAAAyK,eAAE,WAAA,GAAFzI,GAAAnC,IACI,KAAKA,KAAKmJ,aACR,KAAMvI,IAGZ,IAAQkP,GAAa9P,KAAKgL,WAEjB8E,IA8BH9P,KAAKmK,kBAAkB4F,UAAU/P,KAAKgQ,wBACtCF,EAAWG,YAAYC,MAAOlQ,KAAKmQ,qBA9BnCnQ,KAAKoQ,QAAU,GAAIC,GAAAA,eAAerQ,KAAKmJ,aAAatE,SAAU7E,KAAKyH,mBACnEqI,EAAa9P,KAAKwH,SAASnH,OAAOL,KAAKsQ,qBACvCtQ,KAAKgL,YAAc8E,EAInBA,EAAWS,gBAAgBrB,UAAS,SAAC3K,IAG/BA,EAAMsI,UAAYC,EAAAA,QAAWvI,EAAMsI,UAAYS,EAAAA,UAAY/I,EAAMiM,UACnErO,EAAKgL,mBACLhL,EAAKoG,qBAAqBkI,OAI1BlM,EAAMmM,kBACNnM,EAAMwI,oBAIN/M,KAAK+H,iBACP/H,KAAKmI,sBAAwBnI,KAAK+H,eAAe4I,SAASzB,UAAS,WAC7D/M,EAAKwG,WAAamH,GACpBA,EAAWG,YAAYC,MAAO/N,EAAKgO,uBAUvCL,IAAeA,EAAW7E,gBAC5B6E,EAAWc,OAAO5Q,KAAKoQ,SACvBpQ,KAAKmL,4BAA8BnL,KAAK0O,6BAG9C,IAAUM,GAAUhP,KAAK2I,SAErB3I,MAAKmJ,aAAanF,iBAClBhE,KAAKmJ,aAAa7G,QAAUtC,KAAKgJ,kBAAmB,EAIhDhJ,KAAK2I,WAAaqG,IAAYhP,KAAK2I,WACrC3I,KAAKmJ,aAAazG,OAAO8B,QAIrB6C,EAAVlH,UAAAmQ,kBAAE,WACE,MAAO,IAAIO,GAAAA,eACTC,iBAAkB9Q,KAAK+Q,sBACvBpJ,eAAgB3H,KAAKgK,kBACrBkG,MAAOlQ,KAAKmQ,iBACZa,UAAWhR,KAAK4H,QAIZP,EAAVlH,UAAA4Q,oBAAE,WACF,GAAUE,GAAWjR,KAAKwH,SAASsB,WAC5BoI,oBAAoBlR,KAAKgQ,wBACzBmB,wBAAuB,GACvBC,UAAS,EAIZ,OAFApR,MAAKoK,sBAAsB6G,GAC3BjR,KAAKmK,kBAAoB8G,EAClBA,GAID5J,EAAVlH,UAAAiK,sBAAE,SAA8B0G,GAChC,GAkBQO,GAlBEC,GACJC,QAAS,QACTC,QAAS,SACTC,SAAU,QACVC,SAAU,OAENC,GACJJ,QAAS,QACTC,QAAS,MACTC,SAAU,QACVC,SAAU,SAKVE,WAAY,+BAMZP,GADoB,UAAlBrR,KAAK8I,UACM6I,GACc,UAAlB3R,KAAK8I,UACDwI,IAEAA,EAAeK,GAG9Bb,EAAiBe,cAAcR,IAGzBhK,EAAVlH,UAAA6P,qBAAE,WACE,MAAIhQ,MAAK8R,YACA9R,KAAK8R,YAAYpL,WAGnB1G,KAAK6H,WAAa7H,KAAK6H,WAAWkK,4BAA8B/R,KAAKuH,UAGtEF,EAAVlH,UAAAgQ,eAAE,WACE,MAAOnQ,MAAKmJ,aAAa5C,YAAcvG,KAAKgS,iBAItC3K,EAAVlH,UAAA6R,cAAE,WACE,MAAOhS,MAAKgQ,uBAAuBtM,cAAcuO,wBAAwB/B,OAOnE7I,EAAVlH,UAAAgN,iBAAE,WACEnN,KAAKmJ,aAAavF,YAAYsO,cAAclS,KAAKmJ,aAAa5I,sBAAwB,GAAK,IAIrF8G,EAAVlH,UAAAuN,SAAE,WACF,GAAUyE,GAAUnS,KAAKuH,SAAS7D,aAC9B,QAAQyO,EAAQC,WAAaD,EAAQxF,WAAa3M,KAAKiI,sCAvnB3DxD,KAACkC,EAAAA,UAADhC,OACEC,SAAU,oDACVW,MACE8M,sBAAuB,wBACvBC,cAAe,2CACfC,2BAA4B,uCAC5BC,+BAAgC,uDAChCC,uBAAwB,qDACxBC,mBAAoB,iEACpBC,uBAAwB,wBAGxBC,YAAa,iBACbC,SAAU,eACVC,UAAW,uBACXC,YAAa,0BAEf1N,SAAU,yBACVI,WAAYyB,2CA/FdzC,KAAEmC,EAAAA,aAbFnC,KAAEuC,EAAAA,UAsBFvC,KAAEuO,EAAAA,mBAHFvO,KAAEwO,EAAAA,SARFxO,KAAEyO,EAAAA,oBA2LFzO,SAAAoB,GAAAC,aAAArB,KAAesB,EAAAA,OAAfpB,MAAsBkC,OA1MtBpC,KAAQ0O,EAAAA,eAARrN,aAAArB,KA2Me2O,EAAAA,aArKf3O,KAAQ4O,EAAAA,aAARvN,aAAArB,KAsKe2O,EAAAA,WAtKf3O,KAsK2B6O,EAAAA,SAC3B7O,SAAAoB,GAAAC,aAAArB,KAAe2O,EAAAA,WAAf3O,KAA2BsB,EAAAA,OAA3BpB,MAAkC4O,EAAAA,cA/KlC9O,KAAQ+O,EAAAA,mCAuIRrK,eAAA1E,KAAG6B,EAAAA,MAAH3B,MAAS,qBASTmE,WAAArE,KAAG6B,EAAAA,MAAH3B,MAAS,6BAMTmN,cAAArN,KAAG6B,EAAAA,MAAH3B,MAAS,gCAMToE,wBAAAtE,KAAG6B,EAAAA,MAAH3B,MAAS,kBAMT8O,uBAAAhP,KAAG6B,EAAAA,MAAH3B,MAAS,8BAuhBT0C,KE3sBAqM,EAAA,WAAA,QAAAA,MAYoC,sBAZpCjP,KAACkP,EAAAA,SAADhP,OACEiP,SAAUC,EAAAA,gBAAiBC,EAAAA,cAAeC,EAAAA,gBAAiBC,EAAAA,cAC3DC,SACEnS,EACA+R,EAAAA,gBACAxM,EACAZ,EACAsN,EAAAA,iBAEFG,cAAepS,EAAiBuF,EAAwBZ,GACxDhB,WAAYqB,OAEd4M,wRF4B0C,+BAGD"}