{"version":3,"file":"268.js","mappings":"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","sources":["./src/app/layout/common/components/order-form/step-address/address-selector.abstract.ts","./src/app/layout/common/components/order-form/step-address/full-address-step.abstract.ts","./src/app/layout/common/components/order-form/step-address/hint-address-step.abstract.ts","./src/app/layout/common/components/order-form/step-address/index-address-step.abstract.ts","./src/app/layout/fresh/components/order-form/step-address/full-address-step/full-address-step.component.html","./src/app/layout/fresh/components/order-form/step-address/full-address-step/full-address-step.component.ts","./src/app/layout/fresh/components/order-form/step-address/index-address-step/index-address-step.component.html","./src/app/layout/fresh/components/order-form/step-address/index-address-step/index-address-step.component.ts","./src/app/layout/fresh/components/order-form/step-address/hint-address-step/hint-address-step.component.html","./src/app/layout/fresh/components/order-form/step-address/hint-address-step/hint-address-step.component.ts","./src/app/layout/fresh/components/order-form/step-address/address-selector.component.html","./src/app/layout/fresh/components/order-form/step-address/address-selector.component.ts","./src/app/shared/components/ez-input/ez-input.component.html","./src/app/shared/components/ez-input/ez-input.component.ts","./src/app/shared/components/ez-input/ez-input.directive.ts","./src/app/shared/components/ez-input/ez-right.directive.ts","./src/app/shared/components/modal/modal.component.html","./src/app/shared/components/modal/modal.component.ts","./src/app/shared/components/search-select/search-select.component.html","./src/app/shared/components/search-select/search-select.component.ts","./src/app/shared/components/switcher/switcher.component.ts","./src/app/shared/components/switcher/switcher.component.html","./src/app/shared/pipes/filter/filter.pipe.ts","./src/app/shared/pipes/sort-string/sort-string.pipe.ts","./src/app/shared/validators/text.validators.ts","./node_modules/@angular/material/fesm2022/select.mjs","./node_modules/@angular/material/fesm2022/tooltip.mjs","./node_modules/@angular/material/fesm2022/divider.mjs","./node_modules/ngx-mat-select-search/fesm2020/ngx-mat-select-search.mjs"],"sourcesContent":["import { FormStepAbstract } from '../../../../../shared/components/abstract/form-step.abstract';\nimport { FormControl } from '@angular/forms';\nimport { IAddressControl } from '../../../../../pages/ordering/interfaces/address-control.interface';\nimport { Observable, tap } from 'rxjs';\nimport { DeliveryType } from '../../../../../api/v1/models/delivery-type';\nimport { Outlet } from '../../../../../api/v1/models/outlet';\nimport { MatSelect } from '@angular/material/select';\nimport { SessionRepository } from '../../../../../shared/repositories/session.repository';\nimport { ConfigRepository } from '../../../../../shared/repositories/config.repository';\nimport { inject } from '@angular/core';\n\nexport class AddressSelectorAbstract extends FormStepAbstract {\n private sessionRepository: SessionRepository = inject(SessionRepository);\n private config: ConfigRepository = inject(ConfigRepository);\n\n override form: FormControl = new FormControl(null);\n\n selectedDeliveryType$: Observable = this.sessionRepository.selectedDeliveryType$;\n deliveryType = DeliveryType;\n\n restoSelectCtrl: FormControl = new FormControl(null);\n\n activeOutletId$: Observable = this.config.activeOutletId$.pipe(\n tap(id => this.restoSelectCtrl.setValue(id || null))\n )\n\n pickupAddress$ = this.config.address$;\n outlets$: Observable = this.sessionRepository.applicableOutlets$;\n addressFieldSettings$ = this.config.addressFieldSettings$\n\n onChangeResto(matSelect: MatSelect): void {\n this.config.setActiveOutlet(matSelect.value);\n }\n}\n","import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { Directive, inject, OnInit, ViewChild } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, Observable, Subscription, switchMap, tap } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { FormType } from 'src/app/shared/interfaces/form-type';\nimport { City, Street } from 'src/app/api/v1/models';\nimport { CitiesService } from 'src/app/services/cities.service';\nimport { FormStepAbstract } from '../../../../../shared/components/abstract/form-step.abstract';\nimport { AlphanumericValidator, FlatValidator } from '../../../../../shared/validators/text.validators';\n\ninterface IFullAddressControl {\n city: string | null,\n street: string | null,\n house: string | null,\n flat: string | null,\n building: string | null,\n porch: string | null,\n floor: string | null,\n streetClassifierId: string | null,\n}\n\n@UntilDestroy()\n@Directive()\nexport class FullAddressStepAbstract extends FormStepAbstract implements OnInit {\n private cities: CitiesService = inject(CitiesService);\n\n @ViewChild(CdkVirtualScrollViewport, { static: false }) cdkVirtualScrollViewPort: CdkVirtualScrollViewport;\n\n override form: FormGroup> = new FormGroup>({\n city: new FormControl('', {nonNullable: true, validators: [Validators.required]}),\n street: new FormControl('', {nonNullable: true, validators: [Validators.required]}),\n house: new FormControl('', {nonNullable: true, validators: [Validators.maxLength(10), AlphanumericValidator, Validators.required]}),\n flat: new FormControl('', {validators: [Validators.maxLength(15), FlatValidator], nonNullable: true}),\n building: new FormControl('', {validators: [Validators.maxLength(10), AlphanumericValidator], nonNullable: true}),\n porch: new FormControl('', {validators: [Validators.maxLength(10), AlphanumericValidator], nonNullable: true}),\n floor: new FormControl('', {validators: [Validators.maxLength(10), AlphanumericValidator], nonNullable: true}),\n streetClassifierId: new FormControl(null),\n });\n\n selectCity: City;\n selectStreetName: string | undefined;\n\n private isInitialChangeCity: boolean = true;\n\n isLoadingCities$: Observable = this.cities.isLoading$;\n cities$: Observable = this.cities.cities$.pipe(\n tap((cities: City[] | null): void => {\n const cityValue = this.form.controls.city.value;\n if (!cities || !cityValue) { return; }\n\n if (!this.checkCityExist(cities, cityValue)) {\n this.form.controls.city.setValue(null);\n this.form.controls.street.setValue(null);\n }\n })\n );\n\n private deliverySub: Subscription;\n\n override ngOnInit() {\n super.ngOnInit();\n\n this.form.controls.street.disable();\n\n if (this.form.controls.street.value) {\n this.selectStreetName = this.form.controls.street.value;\n this.form.controls.street.enable();\n }\n\n this.subscribeToDeliveryZone();\n }\n\n private subscribeToDeliveryZone(): void {\n this.deliverySub = this.form.valueChanges.pipe(\n debounceTime(1000),\n filter(formValue => !!formValue.city && !!formValue.street && !!formValue.house),\n switchMap(formValue => this.cities.getDeliveryZoneByAddress(this.form.value)),\n tap(result => {\n if (!result.deliveryZoneId) {\n this.form.controls.street.setErrors({ 'invalid': true });\n this.form.controls.house.setErrors({ 'invalid': true });\n }\n }),\n untilDestroyed(this),\n ).subscribe({\n error: err => {\n this.deliverySub.unsubscribe();\n this.subscribeToDeliveryZone();\n }\n })\n }\n\n onChangeCityOption($event: MatOptionSelectionChange, city: City): void {\n if (this.isInitialChangeCity) {\n this.isInitialChangeCity = false;\n this.selectCity = city;\n }\n\n if (!$event.isUserInput) {\n return;\n }\n this.selectCity = city;\n this.form.controls.street.setValue(null);\n this.form.controls.street.enable();\n }\n\n private checkCityExist(cities: City[], name: string): boolean {\n let result = false;\n\n if (!cities || !name) { return false }\n\n for (let i = 0; i < cities.length; i++) {\n if (cities[i].name == name) {\n result = true;\n break;\n }\n }\n\n return result;\n }\n\n onChangeStreet($event: MatOptionSelectionChange, street: Street): void {\n if (!$event.isUserInput) { return }\n this.selectStreetName = street.name;\n this.form.controls.streetClassifierId.setValue(street.classifierId || null);\n }\n\n}\n","import { Directive, inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { debounceTime, Observable, Subscription, switchMap, tap } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { CitiesService } from 'src/app/services/cities.service';\nimport { AddressHint } from 'src/app/api/v1/models';\nimport { FormType } from 'src/app/shared/interfaces/form-type';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { SessionRepository } from 'src/app/shared/repositories/session.repository';\nimport { FormStepAbstract } from '../../../../../shared/components/abstract/form-step.abstract';\nimport { AlphanumericValidator, FlatValidator } from '../../../../../shared/validators/text.validators';\n\ninterface IHintAddressControl {\n line1: string | null,\n city: string | null,\n street: string | null,\n house: string | null,\n flat: string | null,\n porch: string | null,\n floor: string | null,\n}\n\n@UntilDestroy()\n@Directive()\nexport class HintAddressStepAbstract extends FormStepAbstract implements OnInit {\n private citiesService: CitiesService = inject(CitiesService);\n private sessionRepository: SessionRepository = inject(SessionRepository);\n\n override form: FormGroup> = new FormGroup>({\n line1: new FormControl('', [Validators.required]),\n city: new FormControl('', [Validators.required]),\n street: new FormControl('', [Validators.required]),\n house: new FormControl('', [Validators.required]),\n flat: new FormControl('', {validators: [Validators.maxLength(15), FlatValidator], nonNullable: true}),\n porch: new FormControl('', {validators: [Validators.maxLength(10), AlphanumericValidator], nonNullable: true}),\n floor: new FormControl('', {validators: [Validators.maxLength(10), AlphanumericValidator], nonNullable: true}),\n });\n\n searchControl: FormControl = new FormControl('', {nonNullable: true});\n\n isLoadingHints$: Observable = this.citiesService.isLoadingHints$;\n isShowMessageHint: boolean = true;\n\n hints$: Observable = this.citiesService.hints$.pipe(\n tap(hints => this.isShowMessageHint = hints.length <= 0 )\n );\n\n selectedHint: AddressHint | null = null;\n\n deliverySub: Subscription;\n\n override ngOnInit() {\n super.ngOnInit()\n\n this.sessionRepository.deliveryAddress$.pipe(\n tap(deliveryAddress => {\n if(!deliveryAddress){\n this.form.reset();\n return;\n }\n this.searchControl.setValue(deliveryAddress.line1 || '')\n this.form.patchValue(deliveryAddress)\n }),\n untilDestroyed(this)\n ).subscribe();\n\n this.subscribeToDeliveryZone();\n }\n\n private subscribeToDeliveryZone(): void {\n this.deliverySub = this.form.valueChanges.pipe(\n debounceTime(1000),\n filter(formValue => !!formValue.line1 && !!formValue.house && !!formValue.street && !! formValue.city),\n switchMap(formValue => this.citiesService.getDeliveryZoneByAddress(this.form.value)),\n ).subscribe({\n error: err => {\n this.deliverySub.unsubscribe();\n this.subscribeToDeliveryZone();\n }\n })\n }\n\n onSearchAddress(value: string){\n this.citiesService.setHintSearchString(value);\n }\n\n onSelectAddress(hint: AddressHint){\n this.selectedHint = hint;\n\n if(!hint.city || !hint.street || !hint.house){\n this.isError = true;\n return\n }\n\n this.isError = false;\n\n this.form.controls.line1.setValue(hint.value);\n this.form.controls.city.setValue(hint.city || '');\n this.form.controls.street.setValue(hint.street || '');\n this.form.controls.house.setValue(hint.house || '');\n }\n}\n","import { inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, filter, Observable } from 'rxjs';\nimport { FormType } from 'src/app/shared/interfaces/form-type';\nimport { AddressChoice } from 'src/app/api/v1/models';\nimport { CitiesService } from 'src/app/services/cities.service';\nimport { FormStepAbstract } from '../../../../../shared/components/abstract/form-step.abstract';\n\ninterface IIndexAddressControl {\n postCode: string | null;\n street: string | null;\n house: string | null;\n city: string | null;\n}\n\n@UntilDestroy()\nexport class IndexAddressStepAbstract extends FormStepAbstract implements OnInit {\n private cities: CitiesService = inject(CitiesService);\n\n override form: FormGroup> = new FormGroup>({\n postCode: new FormControl(null, [Validators.required]),\n street: new FormControl(null, [Validators.required]),\n house: new FormControl(null),\n city: new FormControl(null),\n });\n\n isLoadingCities$: Observable = this.cities.isLoading$;\n postcodeAddress$: Observable = this.cities.postcodeAddress$;\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n this.form.controls.postCode.valueChanges.pipe(\n debounceTime(650),\n untilDestroyed(this),\n filter((postcode: string | null): postcode is string => !!postcode)\n ).subscribe((postcode: string) => {\n this.onChangePostcode(postcode);\n });\n }\n\n onChangePostcode(postcode: string): void {\n if (postcode.length < 5 || postcode.length > 10) {\n return;\n }\n this.cities.loadAddressByPostcode(postcode);\n }\n\n onChangeAddress(address: AddressChoice, $event: MatOptionSelectionChange): void {\n if (!$event.isUserInput) { return; }\n\n this.form.controls.house.setValue(address.building);\n this.form.controls.city.setValue(address.city);\n\n this.cities.getDeliveryZoneByCoordinates({\n lat: address.latitude,\n lng: address.longitude,\n }).pipe(\n untilDestroyed(this)\n ).subscribe();\n }\n\n}\n","
\n
\n \n
\n\n \n
\n \n City\n \n {{ city.name }}\n \n Required\n \n
\n\n
\n \n Street\n \n \n \n \n \n {{ street.name }}\n \n \n \n Required\n \n
\n\n
\n \n \n House\n Required\n \n
\n\n
\n \n \n Building\n \n
\n\n
\n \n \n Porch\n \n
\n\n
\n \n \n Flat\n \n
\n\n
\n \n \n Floor\n \n
\n
\n
\n\n\n Failed to load list of cities. Delivery is not available. Select pickup.\n\n","import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { FilterPipe } from '../../../../../../shared/pipes/filter/filter.pipe';\nimport { SortStringPipe } from '../../../../../../shared/pipes/sort-string/sort-string.pipe';\nimport { EzInputComponent } from '../../../../../../shared/components/ez-input/ez-input.component';\nimport { EzInputDirective } from '../../../../../../shared/components/ez-input/ez-input.directive';\nimport {\n FullAddressStepAbstract\n} from 'src/app/layout/common/components/order-form/step-address/full-address-step.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-full-address-step',\n templateUrl: './full-address-step.component.html',\n styleUrls: ['./full-address-step.component.scss'],\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FullAddressStepComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => FullAddressStepComponent),\n multi: true,\n }\n ],\n imports: [\n NgIf,\n NgFor,\n NgClass,\n AsyncPipe,\n ReactiveFormsModule,\n MatProgressSpinnerModule,\n MatFormFieldModule,\n MatSelectModule,\n MatOptionModule,\n NgxMatSelectSearchModule,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n MatInputModule,\n FilterPipe,\n SortStringPipe,\n EzInputComponent,\n EzInputDirective,\n ]\n})\nexport class FullAddressStepComponent extends FullAddressStepAbstract { }\n","
\n
\n \n
\n\n
\n
\n \n \n Postcode\n\n Required\n Minimum length {{ form.controls.postCode.errors!['min'].min }}\n Maximum length {{ form.controls.postCode.errors!['max'].max }}\n Incorrect format\n \n
\n
\n\n \n \n
\n \n Address Line 1\n \n {{ address.building }}, {{ address.street }}, {{ address.city }}\n \n Required\n \n
\n\n
\n \n \n Address Line 2\n \n
\n
\n
\n
\n","import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { EzInputComponent } from 'src/app/shared/components/ez-input/ez-input.component';\nimport { EzInputDirective } from 'src/app/shared/components/ez-input/ez-input.directive';\nimport {\n IndexAddressStepAbstract\n} from 'src/app/layout/common/components/order-form/step-address/index-address-step.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-index-address-step',\n templateUrl: './index-address-step.component.html',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IndexAddressStepComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => IndexAddressStepComponent),\n multi: true,\n }\n ],\n imports: [\n NgClass,\n NgFor,\n NgIf,\n AsyncPipe,\n ReactiveFormsModule,\n MatProgressSpinnerModule,\n MatFormFieldModule,\n MatSelectModule,\n MatOptionModule,\n MatInputModule,\n EzInputComponent,\n EzInputDirective,\n ]\n})\nexport class IndexAddressStepComponent extends IndexAddressStepAbstract { }\n","
\n
\n \n
\n Start typing to get a hint (minimum 4 characters)\n
\n \n\n
\n Must contain\n city\n street\n house\n
\n
\n\n
\n \n \n Porch\n \n
\n\n
\n \n \n Flat\n \n
\n\n
\n \n \n Floor\n \n
\n
\n","import { Component, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { EzInputComponent } from 'src/app/shared/components/ez-input/ez-input.component';\nimport { EzInputDirective } from 'src/app/shared/components/ez-input/ez-input.directive';\nimport { SearchSelectComponent } from 'src/app/shared/components/search-select/search-select.component';\nimport {\n HintAddressStepAbstract\n} from 'src/app/layout/common/components/order-form/step-address/hint-address-step.abstract';\n\n@Component({\n selector: 'app-hint-address-step',\n standalone: true,\n templateUrl: './hint-address-step.component.html',\n styleUrls: ['./hint-address-step.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HintAddressStepComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => HintAddressStepComponent),\n multi: true,\n }\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n EzInputComponent,\n EzInputDirective,\n PortalModule,\n SearchSelectComponent,\n ]\n})\nexport class HintAddressStepComponent extends HintAddressStepAbstract {}\n","\n\n\n \n 1; else singleOutlet\">\n
\n
\n \n Select restaurant\n \n {{ outlet.address }}\n \n \n
\n
\n
\n\n \n
\n
Restaurant address
\n
{{ pickupAddress$ | async }}
\n
\n
\n\n
\n
\n\n\n \n \n \n \n \n\n \n \n\n","import { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { Component, forwardRef } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { UntilDestroy } from '@ngneat/until-destroy';\n\nimport { FullAddressStepComponent } from './full-address-step/full-address-step.component';\nimport { IndexAddressStepComponent } from './index-address-step/index-address-step.component';\nimport { HintAddressStepComponent } from './hint-address-step/hint-address-step.component';\nimport {\n AddressSelectorAbstract\n} from '../../../../common/components/order-form/step-address/address-selector.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-address-selector',\n templateUrl: './address-selector.component.html',\n styleUrls: ['./address-selector.component.scss'],\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AddressSelectorComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AddressSelectorComponent),\n multi: true,\n }\n ],\n imports: [\n NgIf,\n NgFor,\n AsyncPipe,\n ReactiveFormsModule,\n NgTemplateOutlet,\n MatFormFieldModule,\n MatSelectModule,\n MatOptionModule,\n MatInputModule,\n FullAddressStepComponent,\n IndexAddressStepComponent,\n HintAddressStepComponent,\n ]\n})\nexport class AddressSelectorComponent extends AddressSelectorAbstract {}\n","\n","import { AfterContentInit, Component, ContentChild } from '@angular/core';\nimport { CommonModule, NgClass } from '@angular/common';\nimport { EzInputDirective } from './ez-input.directive';\nimport { EzRightDirective } from './ez-right.directive';\nimport { combineLatest, combineLatestWith, Observable, startWith } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { Validators } from '@angular/forms';\n\n@Component({\n selector: 'app-ez-input',\n standalone: true,\n templateUrl: './ez-input.component.html',\n styleUrls: ['./ez-input.component.scss'],\n imports: [\n CommonModule,\n NgClass,\n ]\n})\nexport class EzInputComponent implements AfterContentInit {\n @ContentChild(EzInputDirective) ezInput!: EzInputDirective;\n @ContentChild(EzRightDirective) content!: EzRightDirective;\n\n isFocus$: Observable;\n isActive$: Observable;\n\n isInvalidStatus$: Observable | undefined = undefined;\n\n isRequired: boolean = false;\n isReadOnly: boolean = false;\n\n ngAfterContentInit(): void {\n if (!this.ezInput || !this.ezInput.elementRef || !this.ezInput.control) { return }\n\n if (this.ezInput.control.control) {\n this.isRequired = this.ezInput.control.control.hasValidator(Validators.required);\n }\n\n this.isReadOnly = this.ezInput.elementRef.nativeElement.readonly;\n\n this.isInvalidStatus$ = combineLatest([\n this.ezInput.control.statusChanges?.pipe(startWith(this.ezInput.control.status)),\n this.ezInput.focused.pipe(startWith(false))\n ]).pipe(\n filter(() => !!this.ezInput.control.value || !!this.ezInput.control.touched),\n map(() => this.ezInput.control.status === 'INVALID'),\n );\n\n this.isFocus$ = this.ezInput.focused.pipe(\n startWith(false)\n );\n\n this.isActive$ = this.isFocus$.pipe(\n combineLatestWith(\n this.ezInput.control.valueChanges!.pipe(startWith(this.ezInput.control.control?.getRawValue()))\n ),\n map(([isFocus, value]) => isFocus || value !== '' || this.ezInput.elementRef.nativeElement.value !== '')\n )\n }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[appEzInput]',\n standalone: true,\n})\nexport class EzInputDirective {\n constructor(\n public elementRef: ElementRef,\n public control: NgControl,\n ) {}\n\n @Output() focused: EventEmitter = new EventEmitter();\n\n @HostListener('focusin')\n onFocusIn(){\n this.focused.emit(true)\n }\n\n @HostListener('focusout')\n onFocusOut(){\n this.focused.emit(false)\n }\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[appEzRight]',\n standalone: true\n})\nexport class EzRightDirective {\n constructor(public templateRef: TemplateRef) {}\n}\n","
\n
\n
\n
\n\n
\n
{{ title }}
\n \n \n
\n \n
\n
\n
\n\n
\n \n
\n\n \n\n
\n
\n
\n","import { AsyncPipe, NgClass, NgSwitch, NgSwitchCase, NgSwitchDefault } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, Output, Renderer2, ViewChild } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { Layout } from '../../../api/v1/models/layout';\nimport { ModalSwipeDirective } from '../../directives/modal-swipe/modal-swipe.directive';\nimport { OverlaySwipeDirective } from '../../directives/modal-swipe/overlay-swipe.directive';\nimport { BottomSwipeSheetDirective } from '../../directives/modal-swipe/bottom-swipe-sheet.directive';\nimport { ConfigRepository } from '../../repositories/config.repository';\nimport { BreakpointService } from '../../services/breakpoint.service';\nimport { MatIconModule } from \"@angular/material/icon\";\n\n@Component({\n selector: 'app-modal',\n templateUrl: './modal.component.html',\n standalone: true,\n imports: [NgClass, ModalSwipeDirective, OverlaySwipeDirective, BottomSwipeSheetDirective,\n NgSwitch, NgSwitchCase, NgSwitchDefault, AsyncPipe, MatIconModule,]\n})\nexport class ModalComponent implements OnDestroy {\n constructor(\n public breakPoint: BreakpointService,\n private renderer: Renderer2,\n private config: ConfigRepository,\n ) {}\n\n @ViewChild(ModalSwipeDirective) modalSwipe: ModalSwipeDirective;\n\n @Input() isDialog: boolean = false;\n @Input() isSmall: boolean = true;\n @Input() title?: string = '';\n @Input() additionalClass?: string;\n @Input() swipeDirection?: string = '';\n @Input() isHideHead: boolean = false;\n\n @Output() closeModal = new EventEmitter();\n\n layout$: Observable = this.config.layout$;\n\n layouts = Layout;\n\n onClose(): void {\n this.renderer.removeClass(document.documentElement, 'is-scroll');\n if (this.swipeDirection === 'bottom') {\n this.modalSwipe.hideModal('down');\n } else {\n this.modalSwipe.hideModal('right');\n }\n this.closeModal.emit();\n }\n\n ngOnDestroy(): void {\n this.renderer.removeClass(document.documentElement, 'is-scroll');\n }\n}\n","\n \n\n \n \n \n\n City, street, house number\n\n\n\n
\n
\n \n\n = 4\">\n
\n
\n \n
\n
\n\n
\n No results were found for your request\n
\n
\n
\n
\n
\n","import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { EzInputComponent } from '../ez-input/ez-input.component';\nimport { EzInputDirective } from '../ez-input/ez-input.directive';\nimport { CdkOverlayOrigin, Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { CdkPortal, PortalModule } from '@angular/cdk/portal';\nimport { AddressHint } from '../../../api/v1/models/address-hint';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { EzRightDirective } from '../ez-input/ez-right.directive';\n\n@Component({\n selector: 'app-search-select',\n standalone: true,\n templateUrl: './search-select.component.html',\n styleUrls: ['./search-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SearchSelectComponent),\n multi: true,\n }\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatProgressSpinnerModule,\n CdkOverlayOrigin,\n EzInputComponent,\n EzInputDirective,\n EzRightDirective,\n PortalModule,\n ],\n})\nexport class SearchSelectComponent implements ControlValueAccessor {\n constructor (\n private overlay: Overlay,\n ) {}\n\n formControl: FormControl = new FormControl('', {nonNullable: true});\n\n //TODO: Change to content projection\n @Input() hints: AddressHint[] | null = null;\n @Input() isLoading: boolean = false;\n\n @Output() searchValue: EventEmitter = new EventEmitter();\n @Output() selectHint: EventEmitter = new EventEmitter();\n\n @ViewChild(CdkPortal) portal!: CdkPortal;\n @ViewChild(CdkOverlayOrigin) origin!: CdkOverlayOrigin;\n\n isOpen: boolean = false;\n private overlayRef: OverlayRef;\n\n private currentValue: string = '';\n\n onChange: any = () => {};\n onTouched: any = () => {};\n\n registerOnChange (fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched (fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState (isDisabled: boolean): void {\n isDisabled ? this.formControl.disable() : this.formControl.enable();\n }\n\n writeValue (value: string): void {\n this.formControl.setValue(value)\n this.currentValue = value;\n }\n\n onInputSearch(value: string){\n this.searchValue.emit(value);\n }\n\n onOpenDropDown() {\n if (this.hints && this.hints.length === 0) {\n this.onInputSearch(this.formControl.value);\n }\n \n this.onTouched();\n if(this.isOpen){return}\n this.isOpen = true;\n\n const config = new OverlayConfig({\n positionStrategy: this.overlay.position().flexibleConnectedTo(this.origin.elementRef.nativeElement).withPositions([{\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n }]).withPush(true),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: '_clear',\n width: this.origin.elementRef.nativeElement.getBoundingClientRect().width\n });\n\n this.overlayRef = this.overlay.create(config);\n this.overlayRef.attach(this.portal);\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n this.isOpen = false;\n\n this.formControl.setValue(this.currentValue)\n });\n }\n\n onSelectAddress (hint: AddressHint) {\n this.formControl.setValue(hint.value);\n this.currentValue = hint.value;\n\n this.onChange(this.formControl.value);\n this.selectHint.emit(hint);\n\n this.overlayRef.detach();\n this.isOpen = false;\n }\n}\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'app-switcher',\n templateUrl: './switcher.component.html',\n styleUrls: ['./switcher.component.scss'],\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SwitcherComponent),\n multi: true,\n }\n ],\n imports: [\n NgClass\n ]\n})\nexport class SwitcherComponent implements ControlValueAccessor {\n @Input() values: unknown[];\n\n @Output() changeValue = new EventEmitter();\n\n activeIndex: number = 0;\n isDisabled: boolean = false;\n\n onSetActive (index: number): void {\n if(this.isDisabled) {return}\n if(index == this.activeIndex) {return}\n\n this.activeIndex = index;\n\n this.changeValue.emit(this.values[this.activeIndex]);\n this.onChange(this.values[this.activeIndex]);\n }\n\n onChange: any = () => {};\n onTouched: any = () => {};\n\n registerOnChange (fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched (fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState (isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n writeValue (obj: any): void {\n if(!obj) {return}\n const valueIndex = this.values.indexOf(obj);\n if(~valueIndex) {\n this.activeIndex = valueIndex;\n }\n }\n}\n","
\n
\n \n \n
\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filter',\n standalone: true\n})\nexport class FilterPipe implements PipeTransform {\n transform(listArray: any[] | null | undefined, field: string | null = null, search: string = ''): any[] {\n if(!listArray) {return []}\n const array = listArray.slice();\n\n if(!search || !search.trim()) {\n return array;\n }\n\n return array.filter(item => {\n if(field) {\n return item[field].toLowerCase().includes(search.toLowerCase());\n }\n return item.toLowerCase().includes(search.toLowerCase());\n })\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sortString',\n standalone: true\n})\nexport class SortStringPipe implements PipeTransform {\n transform(listArray: any[] | null | undefined, field: string | undefined, order: 'asc' | 'desc' = 'asc'): any[] {\n if(!listArray) {return []}\n if(!field) {return listArray}\n\n const array = [...listArray];\n const sortOrder = order === 'asc' ? 1 : -1;\n\n return array.sort((a, b) => {\n if(!a[field] || !b[field]) {return 0}\n return a[field].toLowerCase() > b[field].toLowerCase() ? sortOrder : -1 * sortOrder;\n })\n }\n}\n","import { Validators } from '@angular/forms';\n\nexport const AlphanumericValidator = Validators.pattern(/^[А-Яа-яA-Za-z0-9\\s]+$/);\nexport const FlatValidator = Validators.pattern(/^[A-Za-z0-9|\\.|\\,|\\s]+$/);\n","import * as i8 from '@angular/cdk/overlay';\nimport { Overlay, CdkConnectedOverlay, CdkOverlayOrigin, OverlayModule } from '@angular/cdk/overlay';\nimport * as i7 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, Directive, Optional, Inject, Self, Attribute, Input, ViewChild, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport * as i2 from '@angular/material/core';\nimport { mixinDisableRipple, mixinTabIndex, mixinDisabled, mixinErrorState, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MAT_OPTION_PARENT_COMPONENT, MatOption, MAT_OPTGROUP, MatOptionModule, MatCommonModule } from '@angular/material/core';\nimport * as i6 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i5 from '@angular/cdk/a11y';\nimport { removeAriaReferencedId, addAriaReferencedId, ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport * as i3 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE, hasModifierKey, A } from '@angular/cdk/keycodes';\nimport * as i4 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport { Subject, defer, merge } from 'rxjs';\nimport { startWith, switchMap, take, filter, map, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, query, animateChild, state, style, animate } from '@angular/animations';\n\n/**\n * The following are all the animations for the mat-select component, with each\n * const containing the metadata for one animation.\n *\n * The values below match the implementation of the AngularJS Material mat-select animation.\n * @docs-private\n */\nconst matSelectAnimations = {\n /**\n * This animation ensures the select's overlay panel animation (transformPanel) is called when\n * closing the select.\n * This is needed due to https://github.com/angular/angular/issues/23302\n */\n transformPanelWrap: trigger('transformPanelWrap', [\n transition('* => void', query('@transformPanel', [animateChild()], { optional: true })),\n ]),\n /** This animation transforms the select's overlay panel on and off the page. */\n transformPanel: trigger('transformPanel', [\n state('void', style({\n opacity: 0,\n transform: 'scale(1, 0.8)',\n })),\n transition('void => showing', animate('120ms cubic-bezier(0, 0, 0.2, 1)', style({\n opacity: 1,\n transform: 'scale(1, 1)',\n }))),\n transition('* => void', animate('100ms linear', style({ opacity: 0 }))),\n ]),\n};\n\n// Note that these have been copied over verbatim from\n// `material/select` so that we don't have to expose them publicly.\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nfunction getMatSelectDynamicMultipleError() {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nfunction getMatSelectNonArrayValueError() {\n return Error('Value must be an array in multiple-selection mode.');\n}\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nfunction getMatSelectNonFunctionValueError() {\n return Error('`compareWith` must be a function.');\n}\n\nlet nextUniqueId = 0;\n/** Injection token that determines the scroll handling while a select is open. */\nconst MAT_SELECT_SCROLL_STRATEGY = new InjectionToken('mat-select-scroll-strategy');\n/** @docs-private */\nfunction MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** Injection token that can be used to provide the default options the select module. */\nconst MAT_SELECT_CONFIG = new InjectionToken('MAT_SELECT_CONFIG');\n/** @docs-private */\nconst MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_SELECT_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/**\n * Injection token that can be used to reference instances of `MatSelectTrigger`. It serves as\n * alternative token to the actual `MatSelectTrigger` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SELECT_TRIGGER = new InjectionToken('MatSelectTrigger');\n/** Change event object that is emitted when the select value has changed. */\nclass MatSelectChange {\n constructor(\n /** Reference to the select that emitted the change event. */\n source, \n /** Current value of the select that emitted the event. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n// Boilerplate for applying mixins to MatSelect.\n/** @docs-private */\nconst _MatSelectMixinBase = mixinDisableRipple(mixinTabIndex(mixinDisabled(mixinErrorState(class {\n constructor(_elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, \n /**\n * Form control bound to the component.\n * Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n ngControl) {\n this._elementRef = _elementRef;\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this.ngControl = ngControl;\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n this.stateChanges = new Subject();\n }\n}))));\n/** Base class with all of the `MatSelect` functionality. */\nclass _MatSelectBase extends _MatSelectMixinBase {\n /** Whether the select is focused. */\n get focused() {\n return this._focused || this._panelOpen;\n }\n /** Placeholder to be shown if no value has been selected. */\n get placeholder() {\n return this._placeholder;\n }\n set placeholder(value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n /** Whether the component is required. */\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n /** Whether the user should be allowed to select multiple options. */\n get multiple() {\n return this._multiple;\n }\n set multiple(value) {\n if (this._selectionModel && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectDynamicMultipleError();\n }\n this._multiple = coerceBooleanProperty(value);\n }\n /** Whether to center the active option over the trigger. */\n get disableOptionCentering() {\n return this._disableOptionCentering;\n }\n set disableOptionCentering(value) {\n this._disableOptionCentering = coerceBooleanProperty(value);\n }\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n get compareWith() {\n return this._compareWith;\n }\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonFunctionValueError();\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n /** Value of the select control. */\n get value() {\n return this._value;\n }\n set value(newValue) {\n const hasAssigned = this._assignValue(newValue);\n if (hasAssigned) {\n this._onChange(newValue);\n }\n }\n /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\n get typeaheadDebounceInterval() {\n return this._typeaheadDebounceInterval;\n }\n set typeaheadDebounceInterval(value) {\n this._typeaheadDebounceInterval = coerceNumberProperty(value);\n }\n /** Unique id of the element. */\n get id() {\n return this._id;\n }\n set id(value) {\n this._id = value || this._uid;\n this.stateChanges.next();\n }\n constructor(_viewportRuler, _changeDetectorRef, _ngZone, _defaultErrorStateMatcher, elementRef, _dir, _parentForm, _parentFormGroup, _parentFormField, ngControl, tabIndex, scrollStrategyFactory, _liveAnnouncer, _defaultOptions) {\n super(elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n this._viewportRuler = _viewportRuler;\n this._changeDetectorRef = _changeDetectorRef;\n this._ngZone = _ngZone;\n this._dir = _dir;\n this._parentFormField = _parentFormField;\n this._liveAnnouncer = _liveAnnouncer;\n this._defaultOptions = _defaultOptions;\n /** Whether or not the overlay panel is open. */\n this._panelOpen = false;\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n this._compareWith = (o1, o2) => o1 === o2;\n /** Unique id for this input. */\n this._uid = `mat-select-${nextUniqueId++}`;\n /** Current `aria-labelledby` value for the select trigger. */\n this._triggerAriaLabelledBy = null;\n /** Emits whenever the component is destroyed. */\n this._destroy = new Subject();\n /** `View -> model callback called when value changes` */\n this._onChange = () => { };\n /** `View -> model callback called when select has been touched` */\n this._onTouched = () => { };\n /** ID for the DOM node containing the select's value. */\n this._valueId = `mat-select-value-${nextUniqueId++}`;\n /** Emits when the panel element is finished transforming in. */\n this._panelDoneAnimatingStream = new Subject();\n this._overlayPanelClass = this._defaultOptions?.overlayPanelClass || '';\n this._focused = false;\n /** A name for this control that can be used by `mat-form-field`. */\n this.controlType = 'mat-select';\n this._multiple = false;\n this._disableOptionCentering = this._defaultOptions?.disableOptionCentering ?? false;\n /** Aria label of the select. */\n this.ariaLabel = '';\n /** Combined stream of all of the child options' change events. */\n this.optionSelectionChanges = defer(() => {\n const options = this.options;\n if (options) {\n return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n }\n return this._ngZone.onStable.pipe(take(1), switchMap(() => this.optionSelectionChanges));\n });\n /** Event emitted when the select panel has been toggled. */\n this.openedChange = new EventEmitter();\n /** Event emitted when the select has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the select has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Event emitted when the selected value has been changed by the user. */\n this.selectionChange = new EventEmitter();\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n /**\n * Track which modal we have modified the `aria-owns` attribute of. When the combobox trigger is\n * inside an aria-modal, we apply aria-owns to the parent modal with the `id` of the options\n * panel. Track the modal we have changed so we can undo the changes on destroy.\n */\n this._trackedModal = null;\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n // Note that we only want to set this when the defaults pass it in, otherwise it should\n // stay as `undefined` so that it falls back to the default in the key manager.\n if (_defaultOptions?.typeaheadDebounceInterval != null) {\n this._typeaheadDebounceInterval = _defaultOptions.typeaheadDebounceInterval;\n }\n this._scrollStrategyFactory = scrollStrategyFactory;\n this._scrollStrategy = this._scrollStrategyFactory();\n this.tabIndex = parseInt(tabIndex) || 0;\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n }\n ngOnInit() {\n this._selectionModel = new SelectionModel(this.multiple);\n this.stateChanges.next();\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this._panelDoneAnimatingStream\n .pipe(distinctUntilChanged(), takeUntil(this._destroy))\n .subscribe(() => this._panelDoneAnimating(this.panelOpen));\n }\n ngAfterContentInit() {\n this._initKeyManager();\n this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n event.added.forEach(option => option.select());\n event.removed.forEach(option => option.deselect());\n });\n this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n ngDoCheck() {\n const newAriaLabelledby = this._getTriggerAriaLabelledby();\n const ngControl = this.ngControl;\n // We have to manage setting the `aria-labelledby` ourselves, because part of its value\n // is computed as a result of a content query which can cause this binding to trigger a\n // \"changed after checked\" error.\n if (newAriaLabelledby !== this._triggerAriaLabelledBy) {\n const element = this._elementRef.nativeElement;\n this._triggerAriaLabelledBy = newAriaLabelledby;\n if (newAriaLabelledby) {\n element.setAttribute('aria-labelledby', newAriaLabelledby);\n }\n else {\n element.removeAttribute('aria-labelledby');\n }\n }\n if (ngControl) {\n // The disabled state might go out of sync if the form group is swapped out. See #17860.\n if (this._previousControl !== ngControl.control) {\n if (this._previousControl !== undefined &&\n ngControl.disabled !== null &&\n ngControl.disabled !== this.disabled) {\n this.disabled = ngControl.disabled;\n }\n this._previousControl = ngControl.control;\n }\n this.updateErrorState();\n }\n }\n ngOnChanges(changes) {\n // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let\n // the parent form field know to run change detection when the disabled state changes.\n if (changes['disabled'] || changes['userAriaDescribedBy']) {\n this.stateChanges.next();\n }\n if (changes['typeaheadDebounceInterval'] && this._keyManager) {\n this._keyManager.withTypeAhead(this._typeaheadDebounceInterval);\n }\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._destroy.next();\n this._destroy.complete();\n this.stateChanges.complete();\n this._clearFromModal();\n }\n /** Toggles the overlay panel open or closed. */\n toggle() {\n this.panelOpen ? this.close() : this.open();\n }\n /** Opens the overlay panel. */\n open() {\n if (this._canOpen()) {\n this._applyModalPanelOwnership();\n this._panelOpen = true;\n this._keyManager.withHorizontalOrientation(null);\n this._highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * If the autocomplete trigger is inside of an `aria-modal` element, connect\n * that modal to the options panel with `aria-owns`.\n *\n * For some browser + screen reader combinations, when navigation is inside\n * of an `aria-modal` element, the screen reader treats everything outside\n * of that modal as hidden or invisible.\n *\n * This causes a problem when the combobox trigger is _inside_ of a modal, because the\n * options panel is rendered _outside_ of that modal, preventing screen reader navigation\n * from reaching the panel.\n *\n * We can work around this issue by applying `aria-owns` to the modal with the `id` of\n * the options panel. This effectively communicates to assistive technology that the\n * options panel is part of the same interaction as the modal.\n *\n * At time of this writing, this issue is present in VoiceOver.\n * See https://github.com/angular/components/issues/20694\n */\n _applyModalPanelOwnership() {\n // TODO(http://github.com/angular/components/issues/26853): consider de-duplicating this with\n // the `LiveAnnouncer` and any other usages.\n //\n // Note that the selector here is limited to CDK overlays at the moment in order to reduce the\n // section of the DOM we need to look through. This should cover all the cases we support, but\n // the selector can be expanded if it turns out to be too narrow.\n const modal = this._elementRef.nativeElement.closest('body > .cdk-overlay-container [aria-modal=\"true\"]');\n if (!modal) {\n // Most commonly, the autocomplete trigger is not inside a modal.\n return;\n }\n const panelId = `${this.id}-panel`;\n if (this._trackedModal) {\n removeAriaReferencedId(this._trackedModal, 'aria-owns', panelId);\n }\n addAriaReferencedId(modal, 'aria-owns', panelId);\n this._trackedModal = modal;\n }\n /** Clears the reference to the listbox overlay element from the modal it was added to. */\n _clearFromModal() {\n if (!this._trackedModal) {\n // Most commonly, the autocomplete trigger is not used inside a modal.\n return;\n }\n const panelId = `${this.id}-panel`;\n removeAriaReferencedId(this._trackedModal, 'aria-owns', panelId);\n this._trackedModal = null;\n }\n /** Closes the overlay panel and focuses the host element. */\n close() {\n if (this._panelOpen) {\n this._panelOpen = false;\n this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');\n this._changeDetectorRef.markForCheck();\n this._onTouched();\n }\n }\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value) {\n this._assignValue(value);\n }\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn) {\n this._onChange = fn;\n }\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n /** Whether or not the overlay panel is open. */\n get panelOpen() {\n return this._panelOpen;\n }\n /** The currently selected option. */\n get selected() {\n return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];\n }\n /** The value displayed in the trigger. */\n get triggerValue() {\n if (this.empty) {\n return '';\n }\n if (this._multiple) {\n const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n if (this._isRtl()) {\n selectedOptions.reverse();\n }\n // TODO(crisbeto): delimiter should be configurable for proper localization.\n return selectedOptions.join(', ');\n }\n return this._selectionModel.selected[0].viewValue;\n }\n /** Whether the element is in RTL mode. */\n _isRtl() {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n /** Handles all keydown events on the select. */\n _handleKeydown(event) {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n /** Handles keyboard events while the select is closed. */\n _handleClosedKeydown(event) {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW ||\n keyCode === UP_ARROW ||\n keyCode === LEFT_ARROW ||\n keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n // Open the select on ALT + arrow key to match the native \n event.preventDefault();\n this.close();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n }\n else if (!isTyping &&\n (keyCode === ENTER || keyCode === SPACE) &&\n manager.activeItem &&\n !hasModifierKey(event)) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n }\n else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n this.options.forEach(option => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n }\n else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n manager.onKeydown(event);\n if (this._multiple &&\n isArrowKey &&\n event.shiftKey &&\n manager.activeItem &&\n manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n _onFocus() {\n if (!this.disabled) {\n this._focused = true;\n this.stateChanges.next();\n }\n }\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n _onBlur() {\n this._focused = false;\n this._keyManager?.cancelTypeahead();\n if (!this.disabled && !this.panelOpen) {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n }\n /**\n * Callback that is invoked when the overlay panel has been attached.\n */\n _onAttached() {\n this._overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this._positioningSettled();\n });\n }\n /** Returns the theme to be used on the panel. */\n _getPanelTheme() {\n return this._parentFormField ? `mat-${this._parentFormField.color}` : '';\n }\n /** Whether the select has a value. */\n get empty() {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n _initializeSelection() {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl) {\n this._value = this.ngControl.value;\n }\n this._setSelectionByValue(this._value);\n this.stateChanges.next();\n });\n }\n /**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n */\n _setSelectionByValue(value) {\n this.options.forEach(option => option.setInactiveStyles());\n this._selectionModel.clear();\n if (this.multiple && value) {\n if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonArrayValueError();\n }\n value.forEach((currentValue) => this._selectOptionByValue(currentValue));\n this._sortValues();\n }\n else {\n const correspondingOption = this._selectOptionByValue(value);\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManager.updateActiveItem(correspondingOption);\n }\n else if (!this.panelOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManager.updateActiveItem(-1);\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n _selectOptionByValue(value) {\n const correspondingOption = this.options.find((option) => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n if (this._selectionModel.isSelected(option)) {\n return false;\n }\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n }\n catch (error) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n return correspondingOption;\n }\n /** Assigns a specific value to the select. Returns whether the value has changed. */\n _assignValue(newValue) {\n // Always re-assign an array, because it might have been mutated.\n if (newValue !== this._value || (this._multiple && Array.isArray(newValue))) {\n if (this.options) {\n this._setSelectionByValue(newValue);\n }\n this._value = newValue;\n return true;\n }\n return false;\n }\n _skipPredicate(item) {\n return item.disabled;\n }\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager(this.options)\n .withTypeAhead(this._typeaheadDebounceInterval)\n .withVerticalOrientation()\n .withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr')\n .withHomeAndEnd()\n .withPageUpDown()\n .withAllowedModifierKeys(['shiftKey'])\n .skipPredicate(this._skipPredicate);\n this._keyManager.tabOut.subscribe(() => {\n if (this.panelOpen) {\n // Select the active item when tabbing away. This is consistent with how the native\n // select behaves. Note that we only want to do this in single selection mode.\n if (!this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.close();\n }\n });\n this._keyManager.change.subscribe(() => {\n if (this._panelOpen && this.panel) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n /** Drops current option subscriptions and IDs and resets from scratch. */\n _resetOptions() {\n const changedOrDestroyed = merge(this.options.changes, this._destroy);\n this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n this._onSelect(event.source, event.isUserInput);\n if (event.isUserInput && !this.multiple && this._panelOpen) {\n this.close();\n this.focus();\n }\n });\n // Listen to changes in the internal state of the options and react accordingly.\n // Handles cases like the labels of the selected options changing.\n merge(...this.options.map(option => option._stateChanges))\n .pipe(takeUntil(changedOrDestroyed))\n .subscribe(() => {\n // `_stateChanges` can fire as a result of a change in the label's DOM value which may\n // be the result of an expression changing. We have to use `detectChanges` in order\n // to avoid \"changed after checked\" errors (see #14793).\n this._changeDetectorRef.detectChanges();\n this.stateChanges.next();\n });\n }\n /** Invoked when an option is clicked. */\n _onSelect(option, isUserInput) {\n const wasSelected = this._selectionModel.isSelected(option);\n if (option.value == null && !this._multiple) {\n option.deselect();\n this._selectionModel.clear();\n if (this.value != null) {\n this._propagateChanges(option.value);\n }\n }\n else {\n if (wasSelected !== option.selected) {\n option.selected\n ? this._selectionModel.select(option)\n : this._selectionModel.deselect(option);\n }\n if (isUserInput) {\n this._keyManager.setActiveItem(option);\n }\n if (this.multiple) {\n this._sortValues();\n if (isUserInput) {\n // In case the user selected the option with their mouse, we\n // want to restore focus back to the trigger, in order to\n // prevent the select keyboard controls from clashing with\n // the ones from `mat-option`.\n this.focus();\n }\n }\n }\n if (wasSelected !== this._selectionModel.isSelected(option)) {\n this._propagateChanges();\n }\n this.stateChanges.next();\n }\n /** Sorts the selected values in the selected based on their order in the panel. */\n _sortValues() {\n if (this.multiple) {\n const options = this.options.toArray();\n this._selectionModel.sort((a, b) => {\n return this.sortComparator\n ? this.sortComparator(a, b, options)\n : options.indexOf(a) - options.indexOf(b);\n });\n this.stateChanges.next();\n }\n }\n /** Emits change event to set the model value. */\n _propagateChanges(fallbackValue) {\n let valueToEmit = null;\n if (this.multiple) {\n valueToEmit = this.selected.map(option => option.value);\n }\n else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this.selectionChange.emit(this._getChangeEvent(valueToEmit));\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first *enabled* option.\n */\n _highlightCorrectOption() {\n if (this._keyManager) {\n if (this.empty) {\n // Find the index of the first *enabled* option. Avoid calling `_keyManager.setActiveItem`\n // because it activates the first option that passes the skip predicate, rather than the\n // first *enabled* option.\n let firstEnabledOptionIndex = -1;\n for (let index = 0; index < this.options.length; index++) {\n const option = this.options.get(index);\n if (!option.disabled) {\n firstEnabledOptionIndex = index;\n break;\n }\n }\n this._keyManager.setActiveItem(firstEnabledOptionIndex);\n }\n else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n }\n /** Whether the panel is allowed to open. */\n _canOpen() {\n return !this._panelOpen && !this.disabled && this.options?.length > 0;\n }\n /** Focuses the select element. */\n focus(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Gets the aria-labelledby for the select panel. */\n _getPanelAriaLabelledby() {\n if (this.ariaLabel) {\n return null;\n }\n const labelId = this._parentFormField?.getLabelId();\n const labelExpression = labelId ? labelId + ' ' : '';\n return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n }\n /** Determines the `aria-activedescendant` to be set on the host. */\n _getAriaActiveDescendant() {\n if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n return this._keyManager.activeItem.id;\n }\n return null;\n }\n /** Gets the aria-labelledby of the select component trigger. */\n _getTriggerAriaLabelledby() {\n if (this.ariaLabel) {\n return null;\n }\n const labelId = this._parentFormField?.getLabelId();\n let value = (labelId ? labelId + ' ' : '') + this._valueId;\n if (this.ariaLabelledby) {\n value += ' ' + this.ariaLabelledby;\n }\n return value;\n }\n /** Called when the overlay panel is done animating. */\n _panelDoneAnimating(isOpen) {\n this.openedChange.emit(isOpen);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n }\n else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n this.open();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n return this._panelOpen || !this.empty || (this._focused && !!this._placeholder);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: _MatSelectBase, deps: [{ token: i1.ViewportRuler }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i2.ErrorStateMatcher }, { token: i0.ElementRef }, { token: i3.Directionality, optional: true }, { token: i4.NgForm, optional: true }, { token: i4.FormGroupDirective, optional: true }, { token: MAT_FORM_FIELD, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: 'tabindex', attribute: true }, { token: MAT_SELECT_SCROLL_STRATEGY }, { token: i5.LiveAnnouncer }, { token: MAT_SELECT_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: _MatSelectBase, inputs: { userAriaDescribedBy: [\"aria-describedby\", \"userAriaDescribedBy\"], panelClass: \"panelClass\", placeholder: \"placeholder\", required: \"required\", multiple: \"multiple\", disableOptionCentering: \"disableOptionCentering\", compareWith: \"compareWith\", value: \"value\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], errorStateMatcher: \"errorStateMatcher\", typeaheadDebounceInterval: \"typeaheadDebounceInterval\", sortComparator: \"sortComparator\", id: \"id\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", _closedStream: \"closed\", selectionChange: \"selectionChange\", valueChange: \"valueChange\" }, viewQueries: [{ propertyName: \"trigger\", first: true, predicate: [\"trigger\"], descendants: true }, { propertyName: \"panel\", first: true, predicate: [\"panel\"], descendants: true }, { propertyName: \"_overlayDir\", first: true, predicate: CdkConnectedOverlay, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: _MatSelectBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i1.ViewportRuler }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i2.ErrorStateMatcher }, { type: i0.ElementRef }, { type: i3.Directionality, decorators: [{\n type: Optional\n }] }, { type: i4.NgForm, decorators: [{\n type: Optional\n }] }, { type: i4.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: i6.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }] }, { type: i4.NgControl, decorators: [{\n type: Self\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_SELECT_SCROLL_STRATEGY]\n }] }, { type: i5.LiveAnnouncer }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_SELECT_CONFIG]\n }] }]; }, propDecorators: { userAriaDescribedBy: [{\n type: Input,\n args: ['aria-describedby']\n }], trigger: [{\n type: ViewChild,\n args: ['trigger']\n }], panel: [{\n type: ViewChild,\n args: ['panel']\n }], _overlayDir: [{\n type: ViewChild,\n args: [CdkConnectedOverlay]\n }], panelClass: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], required: [{\n type: Input\n }], multiple: [{\n type: Input\n }], disableOptionCentering: [{\n type: Input\n }], compareWith: [{\n type: Input\n }], value: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], errorStateMatcher: [{\n type: Input\n }], typeaheadDebounceInterval: [{\n type: Input\n }], sortComparator: [{\n type: Input\n }], id: [{\n type: Input\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], selectionChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }] } });\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\nclass MatSelectTrigger {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatSelectTrigger, selector: \"mat-select-trigger\", providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSelectTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-select-trigger',\n providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger }],\n }]\n }] });\nclass MatSelect extends _MatSelectBase {\n constructor() {\n super(...arguments);\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n this.panelWidth = this._defaultOptions && typeof this._defaultOptions.panelWidth !== 'undefined'\n ? this._defaultOptions.panelWidth\n : 'auto';\n this._positions = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: 'mat-mdc-select-panel-above',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n panelClass: 'mat-mdc-select-panel-above',\n },\n ];\n this._hideSingleSelectionIndicator = this._defaultOptions?.hideSingleSelectionIndicator ?? false;\n // `skipPredicate` determines if key manager should avoid putting a given option in the tab\n // order. Allow disabled list items to receive focus via keyboard to align with WAI ARIA\n // recommendation.\n //\n // Normally WAI ARIA's instructions are to exclude disabled items from the tab order, but it\n // makes a few exceptions for compound widgets.\n //\n // From [Developing a Keyboard Interface](\n // https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/):\n // \"For the following composite widget elements, keep them focusable when disabled: Options in a\n // Listbox...\"\n //\n // The user can focus disabled options using the keyboard, but the user cannot click disabled\n // options.\n this._skipPredicate = (option) => {\n if (this.panelOpen) {\n // Support keyboard focusing disabled options in an ARIA listbox.\n return false;\n }\n // When the panel is closed, skip over disabled options. Support options via the UP/DOWN arrow\n // keys on a closed select. ARIA listbox interaction pattern is less relevant when the panel is\n // closed.\n return option.disabled;\n };\n }\n get shouldLabelFloat() {\n // Since the panel doesn't overlap the trigger, we\n // want the label to only float when there's a value.\n return this.panelOpen || !this.empty || (this.focused && !!this.placeholder);\n }\n ngOnInit() {\n super.ngOnInit();\n this._viewportRuler\n .change()\n .pipe(takeUntil(this._destroy))\n .subscribe(() => {\n if (this.panelOpen) {\n this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);\n this._changeDetectorRef.detectChanges();\n }\n });\n }\n open() {\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this._parentFormField) {\n this._preferredOverlayOrigin = this._parentFormField.getConnectedOverlayOrigin();\n }\n this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);\n super.open();\n // Required for the MDC form field to pick up when the overlay has been opened.\n this.stateChanges.next();\n }\n close() {\n super.close();\n // Required for the MDC form field to pick up when the overlay has been closed.\n this.stateChanges.next();\n }\n /** Scrolls the active option into view. */\n _scrollOptionIntoView(index) {\n const option = this.options.toArray()[index];\n if (option) {\n const panel = this.panel.nativeElement;\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const element = option._getHostElement();\n if (index === 0 && labelCount === 1) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n panel.scrollTop = 0;\n }\n else {\n panel.scrollTop = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, panel.scrollTop, panel.offsetHeight);\n }\n }\n }\n _positioningSettled() {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n _getChangeEvent(value) {\n return new MatSelectChange(this, value);\n }\n /** Gets how wide the overlay panel should be. */\n _getOverlayWidth(preferredOrigin) {\n if (this.panelWidth === 'auto') {\n const refToMeasure = preferredOrigin instanceof CdkOverlayOrigin\n ? preferredOrigin.elementRef\n : preferredOrigin || this._elementRef;\n return refToMeasure.nativeElement.getBoundingClientRect().width;\n }\n return this.panelWidth === null ? '' : this.panelWidth;\n }\n /** Whether checkmark indicator for single-selection options is hidden. */\n get hideSingleSelectionIndicator() {\n return this._hideSingleSelectionIndicator;\n }\n set hideSingleSelectionIndicator(value) {\n this._hideSingleSelectionIndicator = coerceBooleanProperty(value);\n this._syncParentProperties();\n }\n /** Syncs the parent state with the individual options. */\n _syncParentProperties() {\n if (this.options) {\n for (const option of this.options) {\n option._changeDetectorRef.markForCheck();\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSelect, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatSelect, selector: \"mat-select\", inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\", panelWidth: \"panelWidth\", hideSingleSelectionIndicator: \"hideSingleSelectionIndicator\" }, host: { attributes: { \"role\": \"combobox\", \"aria-autocomplete\": \"none\", \"aria-haspopup\": \"listbox\", \"ngSkipHydration\": \"\" }, listeners: { \"keydown\": \"_handleKeydown($event)\", \"focus\": \"_onFocus()\", \"blur\": \"_onBlur()\" }, properties: { \"attr.id\": \"id\", \"attr.tabindex\": \"tabIndex\", \"attr.aria-controls\": \"panelOpen ? id + \\\"-panel\\\" : null\", \"attr.aria-expanded\": \"panelOpen\", \"attr.aria-label\": \"ariaLabel || null\", \"attr.aria-required\": \"required.toString()\", \"attr.aria-disabled\": \"disabled.toString()\", \"attr.aria-invalid\": \"errorState\", \"attr.aria-activedescendant\": \"_getAriaActiveDescendant()\", \"class.mat-mdc-select-disabled\": \"disabled\", \"class.mat-mdc-select-invalid\": \"errorState\", \"class.mat-mdc-select-required\": \"required\", \"class.mat-mdc-select-empty\": \"empty\", \"class.mat-mdc-select-multiple\": \"multiple\" }, classAttribute: \"mat-mdc-select\" }, providers: [\n { provide: MatFormFieldControl, useExisting: MatSelect },\n { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect },\n ], queries: [{ propertyName: \"customTrigger\", first: true, predicate: MAT_SELECT_TRIGGER, descendants: true }, { propertyName: \"options\", predicate: MatOption, descendants: true }, { propertyName: \"optionGroups\", predicate: MAT_OPTGROUP, descendants: true }], exportAs: [\"matSelect\"], usesInheritance: true, ngImport: i0, template: \"
\\n
\\n {{placeholder}}\\n \\n {{triggerValue}}\\n \\n \\n
\\n\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n\\n\\n \\n \\n \\n\\n\", styles: [\".mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color);font-family:var(--mat-select-trigger-text-font);line-height:var(--mat-select-trigger-text-line-height);font-size:var(--mat-select-trigger-text-size);font-weight:var(--mat-select-trigger-text-weight);letter-spacing:var(--mat-select-trigger-text-tracking)}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color)}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:translateY(-8px)}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color)}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color)}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow{color:var(--mat-select-invalid-arrow-color)}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color)}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:GrayText}div.mat-mdc-select-panel{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:static;background-color:var(--mat-select-panel-background-color)}.cdk-high-contrast-active div.mat-mdc-select-panel{outline:solid 1px}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color)}._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}\"], dependencies: [{ kind: \"directive\", type: i7.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i7.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i7.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i7.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"directive\", type: i8.CdkConnectedOverlay, selector: \"[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]\", inputs: [\"cdkConnectedOverlayOrigin\", \"cdkConnectedOverlayPositions\", \"cdkConnectedOverlayPositionStrategy\", \"cdkConnectedOverlayOffsetX\", \"cdkConnectedOverlayOffsetY\", \"cdkConnectedOverlayWidth\", \"cdkConnectedOverlayHeight\", \"cdkConnectedOverlayMinWidth\", \"cdkConnectedOverlayMinHeight\", \"cdkConnectedOverlayBackdropClass\", \"cdkConnectedOverlayPanelClass\", \"cdkConnectedOverlayViewportMargin\", \"cdkConnectedOverlayScrollStrategy\", \"cdkConnectedOverlayOpen\", \"cdkConnectedOverlayDisableClose\", \"cdkConnectedOverlayTransformOriginOn\", \"cdkConnectedOverlayHasBackdrop\", \"cdkConnectedOverlayLockPosition\", \"cdkConnectedOverlayFlexibleDimensions\", \"cdkConnectedOverlayGrowAfterOpen\", \"cdkConnectedOverlayPush\"], outputs: [\"backdropClick\", \"positionChange\", \"attach\", \"detach\", \"overlayKeydown\", \"overlayOutsideClick\"], exportAs: [\"cdkConnectedOverlay\"] }, { kind: \"directive\", type: i8.CdkOverlayOrigin, selector: \"[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]\", exportAs: [\"cdkOverlayOrigin\"] }], animations: [matSelectAnimations.transformPanel], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSelect, decorators: [{\n type: Component,\n args: [{ selector: 'mat-select', exportAs: 'matSelect', inputs: ['disabled', 'disableRipple', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n 'role': 'combobox',\n 'aria-autocomplete': 'none',\n 'aria-haspopup': 'listbox',\n 'class': 'mat-mdc-select',\n '[attr.id]': 'id',\n '[attr.tabindex]': 'tabIndex',\n '[attr.aria-controls]': 'panelOpen ? id + \"-panel\" : null',\n '[attr.aria-expanded]': 'panelOpen',\n '[attr.aria-label]': 'ariaLabel || null',\n '[attr.aria-required]': 'required.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n 'ngSkipHydration': '',\n '[class.mat-mdc-select-disabled]': 'disabled',\n '[class.mat-mdc-select-invalid]': 'errorState',\n '[class.mat-mdc-select-required]': 'required',\n '[class.mat-mdc-select-empty]': 'empty',\n '[class.mat-mdc-select-multiple]': 'multiple',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n }, animations: [matSelectAnimations.transformPanel], providers: [\n { provide: MatFormFieldControl, useExisting: MatSelect },\n { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect },\n ], template: \"
\\n
\\n {{placeholder}}\\n \\n {{triggerValue}}\\n \\n \\n
\\n\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n\\n\\n \\n \\n \\n\\n\", styles: [\".mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color);font-family:var(--mat-select-trigger-text-font);line-height:var(--mat-select-trigger-text-line-height);font-size:var(--mat-select-trigger-text-size);font-weight:var(--mat-select-trigger-text-weight);letter-spacing:var(--mat-select-trigger-text-tracking)}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color)}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:translateY(-8px)}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color)}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color)}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow{color:var(--mat-select-invalid-arrow-color)}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color)}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:GrayText}div.mat-mdc-select-panel{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:static;background-color:var(--mat-select-panel-background-color)}.cdk-high-contrast-active div.mat-mdc-select-panel{outline:solid 1px}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color)}._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}\"] }]\n }], propDecorators: { options: [{\n type: ContentChildren,\n args: [MatOption, { descendants: true }]\n }], optionGroups: [{\n type: ContentChildren,\n args: [MAT_OPTGROUP, { descendants: true }]\n }], customTrigger: [{\n type: ContentChild,\n args: [MAT_SELECT_TRIGGER]\n }], panelWidth: [{\n type: Input\n }], hideSingleSelectionIndicator: [{\n type: Input\n }] } });\n\nclass MatSelectModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSelectModule, declarations: [MatSelect, MatSelectTrigger], imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule], exports: [CdkScrollableModule,\n MatFormFieldModule,\n MatSelect,\n MatSelectTrigger,\n MatOptionModule,\n MatCommonModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSelectModule, providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule, CdkScrollableModule,\n MatFormFieldModule,\n MatOptionModule,\n MatCommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatSelectModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule],\n exports: [\n CdkScrollableModule,\n MatFormFieldModule,\n MatSelect,\n MatSelectTrigger,\n MatOptionModule,\n MatCommonModule,\n ],\n declarations: [MatSelect, MatSelectTrigger],\n providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY, MAT_SELECT_SCROLL_STRATEGY_PROVIDER, MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY, MAT_SELECT_TRIGGER, MatSelect, MatSelectChange, MatSelectModule, MatSelectTrigger, _MatSelectBase, matSelectAnimations };\n","import { takeUntil, take } from 'rxjs/operators';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, ElementRef, Directive, Inject, Input, Optional, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, NgModule } from '@angular/core';\nimport * as i5 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i2 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport * as i3 from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport * as i4 from '@angular/cdk/bidi';\nimport * as i1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Subject } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Time in ms to throttle repositioning after scroll events. */\nconst SCROLL_THROTTLE_MS = 20;\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @docs-private\n */\nfunction getMatTooltipInvalidPositionError(position) {\n return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nconst MAT_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('mat-tooltip-scroll-strategy');\n/** @docs-private */\nfunction MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS });\n}\n/** @docs-private */\nconst MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY,\n};\n/** @docs-private */\nfunction MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY() {\n return {\n showDelay: 0,\n hideDelay: 0,\n touchendHideDelay: 1500,\n };\n}\n/** Injection token to be used to override the default options for `matTooltip`. */\nconst MAT_TOOLTIP_DEFAULT_OPTIONS = new InjectionToken('mat-tooltip-default-options', {\n providedIn: 'root',\n factory: MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY,\n});\n/**\n * CSS class that will be attached to the overlay panel.\n * @deprecated\n * @breaking-change 13.0.0 remove this variable\n */\nconst TOOLTIP_PANEL_CLASS = 'mat-mdc-tooltip-panel';\nconst PANEL_CLASS = 'tooltip-panel';\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });\n/**\n * Time between the user putting the pointer on a tooltip\n * trigger and the long press event being fired.\n */\nconst LONGPRESS_DELAY = 500;\n// These constants were taken from MDC's `numbers` object. We can't import them from MDC,\n// because they have some top-level references to `window` which break during SSR.\nconst MIN_VIEWPORT_TOOLTIP_THRESHOLD = 8;\nconst UNBOUNDED_ANCHOR_GAP = 8;\nconst MIN_HEIGHT = 24;\nconst MAX_WIDTH = 200;\nclass _MatTooltipBase {\n /** Allows the user to define the position of the tooltip relative to the parent element */\n get position() {\n return this._position;\n }\n set position(value) {\n if (value !== this._position) {\n this._position = value;\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n this._tooltipInstance?.show(0);\n this._overlayRef.updatePosition();\n }\n }\n }\n /**\n * Whether tooltip should be relative to the click or touch origin\n * instead of outside the element bounding box.\n */\n get positionAtOrigin() {\n return this._positionAtOrigin;\n }\n set positionAtOrigin(value) {\n this._positionAtOrigin = coerceBooleanProperty(value);\n this._detach();\n this._overlayRef = null;\n }\n /** Disables the display of the tooltip. */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n // If tooltip is disabled, hide immediately.\n if (this._disabled) {\n this.hide(0);\n }\n else {\n this._setupPointerEnterEventsIfNeeded();\n }\n }\n /** The default delay in ms before showing the tooltip after show is called */\n get showDelay() {\n return this._showDelay;\n }\n set showDelay(value) {\n this._showDelay = coerceNumberProperty(value);\n }\n /** The default delay in ms before hiding the tooltip after hide is called */\n get hideDelay() {\n return this._hideDelay;\n }\n set hideDelay(value) {\n this._hideDelay = coerceNumberProperty(value);\n if (this._tooltipInstance) {\n this._tooltipInstance._mouseLeaveHideDelay = this._hideDelay;\n }\n }\n /** The message to be displayed in the tooltip */\n get message() {\n return this._message;\n }\n set message(value) {\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message, 'tooltip');\n // If the message is not a string (e.g. number), convert it to a string and trim it.\n // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises\n // away the string-conversion: https://github.com/angular/components/issues/20684\n this._message = value != null ? String(value).trim() : '';\n if (!this._message && this._isTooltipVisible()) {\n this.hide(0);\n }\n else {\n this._setupPointerEnterEventsIfNeeded();\n this._updateTooltipMessage();\n this._ngZone.runOutsideAngular(() => {\n // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n Promise.resolve().then(() => {\n this._ariaDescriber.describe(this._elementRef.nativeElement, this.message, 'tooltip');\n });\n });\n }\n }\n /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n get tooltipClass() {\n return this._tooltipClass;\n }\n set tooltipClass(value) {\n this._tooltipClass = value;\n if (this._tooltipInstance) {\n this._setTooltipClass(this._tooltipClass);\n }\n }\n constructor(_overlay, _elementRef, _scrollDispatcher, _viewContainerRef, _ngZone, _platform, _ariaDescriber, _focusMonitor, scrollStrategy, _dir, _defaultOptions, _document) {\n this._overlay = _overlay;\n this._elementRef = _elementRef;\n this._scrollDispatcher = _scrollDispatcher;\n this._viewContainerRef = _viewContainerRef;\n this._ngZone = _ngZone;\n this._platform = _platform;\n this._ariaDescriber = _ariaDescriber;\n this._focusMonitor = _focusMonitor;\n this._dir = _dir;\n this._defaultOptions = _defaultOptions;\n this._position = 'below';\n this._positionAtOrigin = false;\n this._disabled = false;\n this._viewInitialized = false;\n this._pointerExitEventsInitialized = false;\n this._viewportMargin = 8;\n this._cssClassPrefix = 'mat';\n /**\n * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n * uses a long press gesture to show and hide, however it can conflict with the native browser\n * gestures. To work around the conflict, Angular Material disables native gestures on the\n * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n * elements). The different values for this option configure the touch event handling as follows:\n * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n * browser gestures on particular elements. In particular, it allows text selection on inputs\n * and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n * - `on` - Enables touch gestures for all elements and disables native\n * browser gestures with no exceptions.\n * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n * showing on touch devices.\n */\n this.touchGestures = 'auto';\n this._message = '';\n /** Manually-bound passive event listeners. */\n this._passiveListeners = [];\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n this._scrollStrategy = scrollStrategy;\n this._document = _document;\n if (_defaultOptions) {\n this._showDelay = _defaultOptions.showDelay;\n this._hideDelay = _defaultOptions.hideDelay;\n if (_defaultOptions.position) {\n this.position = _defaultOptions.position;\n }\n if (_defaultOptions.positionAtOrigin) {\n this.positionAtOrigin = _defaultOptions.positionAtOrigin;\n }\n if (_defaultOptions.touchGestures) {\n this.touchGestures = _defaultOptions.touchGestures;\n }\n }\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n }\n });\n }\n ngAfterViewInit() {\n // This needs to happen after view init so the initial values for all inputs have been set.\n this._viewInitialized = true;\n this._setupPointerEnterEventsIfNeeded();\n this._focusMonitor\n .monitor(this._elementRef)\n .pipe(takeUntil(this._destroyed))\n .subscribe(origin => {\n // Note that the focus monitor runs outside the Angular zone.\n if (!origin) {\n this._ngZone.run(() => this.hide(0));\n }\n else if (origin === 'keyboard') {\n this._ngZone.run(() => this.show());\n }\n });\n }\n /**\n * Dispose the tooltip when destroyed.\n */\n ngOnDestroy() {\n const nativeElement = this._elementRef.nativeElement;\n clearTimeout(this._touchstartTimeout);\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._tooltipInstance = null;\n }\n // Clean up the event listeners set in the constructor\n this._passiveListeners.forEach(([event, listener]) => {\n nativeElement.removeEventListener(event, listener, passiveListenerOptions);\n });\n this._passiveListeners.length = 0;\n this._destroyed.next();\n this._destroyed.complete();\n this._ariaDescriber.removeDescription(nativeElement, this.message, 'tooltip');\n this._focusMonitor.stopMonitoring(nativeElement);\n }\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n show(delay = this.showDelay, origin) {\n if (this.disabled || !this.message || this._isTooltipVisible()) {\n this._tooltipInstance?._cancelPendingAnimations();\n return;\n }\n const overlayRef = this._createOverlay(origin);\n this._detach();\n this._portal =\n this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n const instance = (this._tooltipInstance = overlayRef.attach(this._portal).instance);\n instance._triggerElement = this._elementRef.nativeElement;\n instance._mouseLeaveHideDelay = this._hideDelay;\n instance\n .afterHidden()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n this._setTooltipClass(this._tooltipClass);\n this._updateTooltipMessage();\n instance.show(delay);\n }\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n hide(delay = this.hideDelay) {\n const instance = this._tooltipInstance;\n if (instance) {\n if (instance.isVisible()) {\n instance.hide(delay);\n }\n else {\n instance._cancelPendingAnimations();\n this._detach();\n }\n }\n }\n /** Shows/hides the tooltip */\n toggle(origin) {\n this._isTooltipVisible() ? this.hide() : this.show(undefined, origin);\n }\n /** Returns true if the tooltip is currently visible to the user */\n _isTooltipVisible() {\n return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n }\n /** Create the overlay config and position strategy */\n _createOverlay(origin) {\n if (this._overlayRef) {\n const existingStrategy = this._overlayRef.getConfig()\n .positionStrategy;\n if ((!this.positionAtOrigin || !origin) && existingStrategy._origin instanceof ElementRef) {\n return this._overlayRef;\n }\n this._detach();\n }\n const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this.positionAtOrigin ? origin || this._elementRef : this._elementRef)\n .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)\n .withFlexibleDimensions(false)\n .withViewportMargin(this._viewportMargin)\n .withScrollableContainers(scrollableAncestors);\n strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {\n this._updateCurrentPositionClass(change.connectionPair);\n if (this._tooltipInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this._ngZone.run(() => this.hide(0));\n }\n }\n });\n this._overlayRef = this._overlay.create({\n direction: this._dir,\n positionStrategy: strategy,\n panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}`,\n scrollStrategy: this._scrollStrategy(),\n });\n this._updatePosition(this._overlayRef);\n this._overlayRef\n .detachments()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n this._overlayRef\n .outsidePointerEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n this._overlayRef\n .keydownEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe(event => {\n if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {\n event.preventDefault();\n event.stopPropagation();\n this._ngZone.run(() => this.hide(0));\n }\n });\n if (this._defaultOptions?.disableTooltipInteractivity) {\n this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`);\n }\n return this._overlayRef;\n }\n /** Detaches the currently-attached tooltip. */\n _detach() {\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n }\n this._tooltipInstance = null;\n }\n /** Updates the position of the current tooltip. */\n _updatePosition(overlayRef) {\n const position = overlayRef.getConfig().positionStrategy;\n const origin = this._getOrigin();\n const overlay = this._getOverlayPosition();\n position.withPositions([\n this._addOffset({ ...origin.main, ...overlay.main }),\n this._addOffset({ ...origin.fallback, ...overlay.fallback }),\n ]);\n }\n /** Adds the configured offset to a position. Used as a hook for child classes. */\n _addOffset(position) {\n return position;\n }\n /**\n * Returns the origin position and a fallback position based on the user's position preference.\n * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n */\n _getOrigin() {\n const isLtr = !this._dir || this._dir.value == 'ltr';\n const position = this.position;\n let originPosition;\n if (position == 'above' || position == 'below') {\n originPosition = { originX: 'center', originY: position == 'above' ? 'top' : 'bottom' };\n }\n else if (position == 'before' ||\n (position == 'left' && isLtr) ||\n (position == 'right' && !isLtr)) {\n originPosition = { originX: 'start', originY: 'center' };\n }\n else if (position == 'after' ||\n (position == 'right' && isLtr) ||\n (position == 'left' && !isLtr)) {\n originPosition = { originX: 'end', originY: 'center' };\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getMatTooltipInvalidPositionError(position);\n }\n const { x, y } = this._invertPosition(originPosition.originX, originPosition.originY);\n return {\n main: originPosition,\n fallback: { originX: x, originY: y },\n };\n }\n /** Returns the overlay position and a fallback position based on the user's preference */\n _getOverlayPosition() {\n const isLtr = !this._dir || this._dir.value == 'ltr';\n const position = this.position;\n let overlayPosition;\n if (position == 'above') {\n overlayPosition = { overlayX: 'center', overlayY: 'bottom' };\n }\n else if (position == 'below') {\n overlayPosition = { overlayX: 'center', overlayY: 'top' };\n }\n else if (position == 'before' ||\n (position == 'left' && isLtr) ||\n (position == 'right' && !isLtr)) {\n overlayPosition = { overlayX: 'end', overlayY: 'center' };\n }\n else if (position == 'after' ||\n (position == 'right' && isLtr) ||\n (position == 'left' && !isLtr)) {\n overlayPosition = { overlayX: 'start', overlayY: 'center' };\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getMatTooltipInvalidPositionError(position);\n }\n const { x, y } = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);\n return {\n main: overlayPosition,\n fallback: { overlayX: x, overlayY: y },\n };\n }\n /** Updates the tooltip message and repositions the overlay according to the new message length */\n _updateTooltipMessage() {\n // Must wait for the message to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the text.\n if (this._tooltipInstance) {\n this._tooltipInstance.message = this.message;\n this._tooltipInstance._markForCheck();\n this._ngZone.onMicrotaskEmpty.pipe(take(1), takeUntil(this._destroyed)).subscribe(() => {\n if (this._tooltipInstance) {\n this._overlayRef.updatePosition();\n }\n });\n }\n }\n /** Updates the tooltip class */\n _setTooltipClass(tooltipClass) {\n if (this._tooltipInstance) {\n this._tooltipInstance.tooltipClass = tooltipClass;\n this._tooltipInstance._markForCheck();\n }\n }\n /** Inverts an overlay position. */\n _invertPosition(x, y) {\n if (this.position === 'above' || this.position === 'below') {\n if (y === 'top') {\n y = 'bottom';\n }\n else if (y === 'bottom') {\n y = 'top';\n }\n }\n else {\n if (x === 'end') {\n x = 'start';\n }\n else if (x === 'start') {\n x = 'end';\n }\n }\n return { x, y };\n }\n /** Updates the class on the overlay panel based on the current position of the tooltip. */\n _updateCurrentPositionClass(connectionPair) {\n const { overlayY, originX, originY } = connectionPair;\n let newPosition;\n // If the overlay is in the middle along the Y axis,\n // it means that it's either before or after.\n if (overlayY === 'center') {\n // Note that since this information is used for styling, we want to\n // resolve `start` and `end` to their real values, otherwise consumers\n // would have to remember to do it themselves on each consumption.\n if (this._dir && this._dir.value === 'rtl') {\n newPosition = originX === 'end' ? 'left' : 'right';\n }\n else {\n newPosition = originX === 'start' ? 'left' : 'right';\n }\n }\n else {\n newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n }\n if (newPosition !== this._currentPosition) {\n const overlayRef = this._overlayRef;\n if (overlayRef) {\n const classPrefix = `${this._cssClassPrefix}-${PANEL_CLASS}-`;\n overlayRef.removePanelClass(classPrefix + this._currentPosition);\n overlayRef.addPanelClass(classPrefix + newPosition);\n }\n this._currentPosition = newPosition;\n }\n }\n /** Binds the pointer events to the tooltip trigger. */\n _setupPointerEnterEventsIfNeeded() {\n // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n if (this._disabled ||\n !this.message ||\n !this._viewInitialized ||\n this._passiveListeners.length) {\n return;\n }\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n // first tap from firing its click event or can cause the tooltip to open for clicks.\n if (this._platformSupportsMouseEvents()) {\n this._passiveListeners.push([\n 'mouseenter',\n event => {\n this._setupPointerExitEventsIfNeeded();\n let point = undefined;\n if (event.x !== undefined && event.y !== undefined) {\n point = event;\n }\n this.show(undefined, point);\n },\n ]);\n }\n else if (this.touchGestures !== 'off') {\n this._disableNativeGesturesIfNecessary();\n this._passiveListeners.push([\n 'touchstart',\n event => {\n const touch = event.targetTouches?.[0];\n const origin = touch ? { x: touch.clientX, y: touch.clientY } : undefined;\n // Note that it's important that we don't `preventDefault` here,\n // because it can prevent click events from firing on the element.\n this._setupPointerExitEventsIfNeeded();\n clearTimeout(this._touchstartTimeout);\n this._touchstartTimeout = setTimeout(() => this.show(undefined, origin), LONGPRESS_DELAY);\n },\n ]);\n }\n this._addListeners(this._passiveListeners);\n }\n _setupPointerExitEventsIfNeeded() {\n if (this._pointerExitEventsInitialized) {\n return;\n }\n this._pointerExitEventsInitialized = true;\n const exitListeners = [];\n if (this._platformSupportsMouseEvents()) {\n exitListeners.push([\n 'mouseleave',\n event => {\n const newTarget = event.relatedTarget;\n if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n this.hide();\n }\n },\n ], ['wheel', event => this._wheelListener(event)]);\n }\n else if (this.touchGestures !== 'off') {\n this._disableNativeGesturesIfNecessary();\n const touchendListener = () => {\n clearTimeout(this._touchstartTimeout);\n this.hide(this._defaultOptions.touchendHideDelay);\n };\n exitListeners.push(['touchend', touchendListener], ['touchcancel', touchendListener]);\n }\n this._addListeners(exitListeners);\n this._passiveListeners.push(...exitListeners);\n }\n _addListeners(listeners) {\n listeners.forEach(([event, listener]) => {\n this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\n });\n }\n _platformSupportsMouseEvents() {\n return !this._platform.IOS && !this._platform.ANDROID;\n }\n /** Listener for the `wheel` event on the element. */\n _wheelListener(event) {\n if (this._isTooltipVisible()) {\n const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);\n const element = this._elementRef.nativeElement;\n // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n // won't fire if the user scrolls away using the wheel without moving their cursor. We\n // work around it by finding the element under the user's cursor and closing the tooltip\n // if it's not the trigger.\n if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n this.hide();\n }\n }\n }\n /** Disables the native browser gestures, based on how the tooltip has been configured. */\n _disableNativeGesturesIfNecessary() {\n const gestures = this.touchGestures;\n if (gestures !== 'off') {\n const element = this._elementRef.nativeElement;\n const style = element.style;\n // If gestures are set to `auto`, we don't disable text selection on inputs and\n // textareas, because it prevents the user from typing into them on iOS Safari.\n if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\n style.userSelect =\n style.msUserSelect =\n style.webkitUserSelect =\n style.MozUserSelect =\n 'none';\n }\n // If we have `auto` gestures and the element uses native HTML dragging,\n // we don't set `-webkit-user-drag` because it prevents the native behavior.\n if (gestures === 'on' || !element.draggable) {\n style.webkitUserDrag = 'none';\n }\n style.touchAction = 'none';\n style.webkitTapHighlightColor = 'transparent';\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: _MatTooltipBase, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: _MatTooltipBase, inputs: { position: [\"matTooltipPosition\", \"position\"], positionAtOrigin: [\"matTooltipPositionAtOrigin\", \"positionAtOrigin\"], disabled: [\"matTooltipDisabled\", \"disabled\"], showDelay: [\"matTooltipShowDelay\", \"showDelay\"], hideDelay: [\"matTooltipHideDelay\", \"hideDelay\"], touchGestures: [\"matTooltipTouchGestures\", \"touchGestures\"], message: [\"matTooltip\", \"message\"], tooltipClass: [\"matTooltipClass\", \"tooltipClass\"] }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: _MatTooltipBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i2.Platform }, { type: i3.AriaDescriber }, { type: i3.FocusMonitor }, { type: undefined }, { type: i4.Directionality }, { type: undefined }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, propDecorators: { position: [{\n type: Input,\n args: ['matTooltipPosition']\n }], positionAtOrigin: [{\n type: Input,\n args: ['matTooltipPositionAtOrigin']\n }], disabled: [{\n type: Input,\n args: ['matTooltipDisabled']\n }], showDelay: [{\n type: Input,\n args: ['matTooltipShowDelay']\n }], hideDelay: [{\n type: Input,\n args: ['matTooltipHideDelay']\n }], touchGestures: [{\n type: Input,\n args: ['matTooltipTouchGestures']\n }], message: [{\n type: Input,\n args: ['matTooltip']\n }], tooltipClass: [{\n type: Input,\n args: ['matTooltipClass']\n }] } });\n/**\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n *\n * https://material.io/design/components/tooltips.html\n */\nclass MatTooltip extends _MatTooltipBase {\n constructor(overlay, elementRef, scrollDispatcher, viewContainerRef, ngZone, platform, ariaDescriber, focusMonitor, scrollStrategy, dir, defaultOptions, _document) {\n super(overlay, elementRef, scrollDispatcher, viewContainerRef, ngZone, platform, ariaDescriber, focusMonitor, scrollStrategy, dir, defaultOptions, _document);\n this._tooltipComponent = TooltipComponent;\n this._cssClassPrefix = 'mat-mdc';\n this._viewportMargin = MIN_VIEWPORT_TOOLTIP_THRESHOLD;\n }\n _addOffset(position) {\n const offset = UNBOUNDED_ANCHOR_GAP;\n const isLtr = !this._dir || this._dir.value == 'ltr';\n if (position.originY === 'top') {\n position.offsetY = -offset;\n }\n else if (position.originY === 'bottom') {\n position.offsetY = offset;\n }\n else if (position.originX === 'start') {\n position.offsetX = isLtr ? -offset : offset;\n }\n else if (position.originX === 'end') {\n position.offsetX = isLtr ? offset : -offset;\n }\n return position;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatTooltip, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i2.Platform }, { token: i3.AriaDescriber }, { token: i3.FocusMonitor }, { token: MAT_TOOLTIP_SCROLL_STRATEGY }, { token: i4.Directionality, optional: true }, { token: MAT_TOOLTIP_DEFAULT_OPTIONS, optional: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatTooltip, selector: \"[matTooltip]\", host: { properties: { \"class.mat-mdc-tooltip-disabled\": \"disabled\" }, classAttribute: \"mat-mdc-tooltip-trigger\" }, exportAs: [\"matTooltip\"], usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatTooltip, decorators: [{\n type: Directive,\n args: [{\n selector: '[matTooltip]',\n exportAs: 'matTooltip',\n host: {\n 'class': 'mat-mdc-tooltip-trigger',\n '[class.mat-mdc-tooltip-disabled]': 'disabled',\n },\n }]\n }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i2.Platform }, { type: i3.AriaDescriber }, { type: i3.FocusMonitor }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_TOOLTIP_SCROLL_STRATEGY]\n }] }, { type: i4.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_TOOLTIP_DEFAULT_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; } });\nclass _TooltipComponentBase {\n constructor(_changeDetectorRef, animationMode) {\n this._changeDetectorRef = _changeDetectorRef;\n /** Whether interactions on the page should close the tooltip */\n this._closeOnInteraction = false;\n /** Whether the tooltip is currently visible. */\n this._isVisible = false;\n /** Subject for notifying that the tooltip has been hidden from the view */\n this._onHide = new Subject();\n this._animationsDisabled = animationMode === 'NoopAnimations';\n }\n /**\n * Shows the tooltip with an animation originating from the provided origin\n * @param delay Amount of milliseconds to the delay showing the tooltip.\n */\n show(delay) {\n // Cancel the delayed hide if it is scheduled\n if (this._hideTimeoutId != null) {\n clearTimeout(this._hideTimeoutId);\n }\n this._showTimeoutId = setTimeout(() => {\n this._toggleVisibility(true);\n this._showTimeoutId = undefined;\n }, delay);\n }\n /**\n * Begins the animation to hide the tooltip after the provided delay in ms.\n * @param delay Amount of milliseconds to delay showing the tooltip.\n */\n hide(delay) {\n // Cancel the delayed show if it is scheduled\n if (this._showTimeoutId != null) {\n clearTimeout(this._showTimeoutId);\n }\n this._hideTimeoutId = setTimeout(() => {\n this._toggleVisibility(false);\n this._hideTimeoutId = undefined;\n }, delay);\n }\n /** Returns an observable that notifies when the tooltip has been hidden from view. */\n afterHidden() {\n return this._onHide;\n }\n /** Whether the tooltip is being displayed. */\n isVisible() {\n return this._isVisible;\n }\n ngOnDestroy() {\n this._cancelPendingAnimations();\n this._onHide.complete();\n this._triggerElement = null;\n }\n /**\n * Interactions on the HTML body should close the tooltip immediately as defined in the\n * material design spec.\n * https://material.io/design/components/tooltips.html#behavior\n */\n _handleBodyInteraction() {\n if (this._closeOnInteraction) {\n this.hide(0);\n }\n }\n /**\n * Marks that the tooltip needs to be checked in the next change detection run.\n * Mainly used for rendering the initial text before positioning a tooltip, which\n * can be problematic in components with OnPush change detection.\n */\n _markForCheck() {\n this._changeDetectorRef.markForCheck();\n }\n _handleMouseLeave({ relatedTarget }) {\n if (!relatedTarget || !this._triggerElement.contains(relatedTarget)) {\n if (this.isVisible()) {\n this.hide(this._mouseLeaveHideDelay);\n }\n else {\n this._finalizeAnimation(false);\n }\n }\n }\n /**\n * Callback for when the timeout in this.show() gets completed.\n * This method is only needed by the mdc-tooltip, and so it is only implemented\n * in the mdc-tooltip, not here.\n */\n _onShow() { }\n /** Event listener dispatched when an animation on the tooltip finishes. */\n _handleAnimationEnd({ animationName }) {\n if (animationName === this._showAnimation || animationName === this._hideAnimation) {\n this._finalizeAnimation(animationName === this._showAnimation);\n }\n }\n /** Cancels any pending animation sequences. */\n _cancelPendingAnimations() {\n if (this._showTimeoutId != null) {\n clearTimeout(this._showTimeoutId);\n }\n if (this._hideTimeoutId != null) {\n clearTimeout(this._hideTimeoutId);\n }\n this._showTimeoutId = this._hideTimeoutId = undefined;\n }\n /** Handles the cleanup after an animation has finished. */\n _finalizeAnimation(toVisible) {\n if (toVisible) {\n this._closeOnInteraction = true;\n }\n else if (!this.isVisible()) {\n this._onHide.next();\n }\n }\n /** Toggles the visibility of the tooltip element. */\n _toggleVisibility(isVisible) {\n // We set the classes directly here ourselves so that toggling the tooltip state\n // isn't bound by change detection. This allows us to hide it even if the\n // view ref has been detached from the CD tree.\n const tooltip = this._tooltip.nativeElement;\n const showClass = this._showAnimation;\n const hideClass = this._hideAnimation;\n tooltip.classList.remove(isVisible ? hideClass : showClass);\n tooltip.classList.add(isVisible ? showClass : hideClass);\n this._isVisible = isVisible;\n // It's common for internal apps to disable animations using `* { animation: none !important }`\n // which can break the opening sequence. Try to detect such cases and work around them.\n if (isVisible && !this._animationsDisabled && typeof getComputedStyle === 'function') {\n const styles = getComputedStyle(tooltip);\n // Use `getPropertyValue` to avoid issues with property renaming.\n if (styles.getPropertyValue('animation-duration') === '0s' ||\n styles.getPropertyValue('animation-name') === 'none') {\n this._animationsDisabled = true;\n }\n }\n if (isVisible) {\n this._onShow();\n }\n if (this._animationsDisabled) {\n tooltip.classList.add('_mat-animation-noopable');\n this._finalizeAnimation(isVisible);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: _TooltipComponentBase, deps: [{ token: i0.ChangeDetectorRef }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"16.1.1\", type: _TooltipComponentBase, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: _TooltipComponentBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; } });\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\nclass TooltipComponent extends _TooltipComponentBase {\n constructor(changeDetectorRef, _elementRef, animationMode) {\n super(changeDetectorRef, animationMode);\n this._elementRef = _elementRef;\n /* Whether the tooltip text overflows to multiple lines */\n this._isMultiline = false;\n this._showAnimation = 'mat-mdc-tooltip-show';\n this._hideAnimation = 'mat-mdc-tooltip-hide';\n }\n _onShow() {\n this._isMultiline = this._isTooltipMultiline();\n this._markForCheck();\n }\n /** Whether the tooltip text has overflown to the next line */\n _isTooltipMultiline() {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return rect.height > MIN_HEIGHT && rect.width >= MAX_WIDTH;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: TooltipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"16.1.1\", type: TooltipComponent, selector: \"mat-tooltip-component\", host: { attributes: { \"aria-hidden\": \"true\" }, listeners: { \"mouseleave\": \"_handleMouseLeave($event)\" }, properties: { \"style.zoom\": \"isVisible() ? 1 : null\" } }, viewQueries: [{ propertyName: \"_tooltip\", first: true, predicate: [\"tooltip\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"\\n
{{message}}
\\n\\n\", styles: [\".mdc-tooltip__surface{word-break:break-all;word-break:var(--mdc-tooltip-word-break, normal);overflow-wrap:anywhere}.mdc-tooltip--showing-transition .mdc-tooltip__surface-animation{transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-tooltip--hide-transition .mdc-tooltip__surface-animation{transition:opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-tooltip{position:fixed;display:none;z-index:9}.mdc-tooltip-wrapper--rich{position:relative}.mdc-tooltip--shown,.mdc-tooltip--showing,.mdc-tooltip--hide{display:inline-flex}.mdc-tooltip--shown.mdc-tooltip--rich,.mdc-tooltip--showing.mdc-tooltip--rich,.mdc-tooltip--hide.mdc-tooltip--rich{display:inline-block;left:-320px;position:absolute}.mdc-tooltip__surface{line-height:16px;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center}.mdc-tooltip__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}@media screen and (forced-colors: active){.mdc-tooltip__surface::before{border-color:CanvasText}}.mdc-tooltip--rich .mdc-tooltip__surface{align-items:flex-start;display:flex;flex-direction:column;min-height:24px;min-width:40px;max-width:320px;position:relative}.mdc-tooltip--multiline .mdc-tooltip__surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mdc-tooltip__surface,.mdc-tooltip--multiline .mdc-tooltip__surface[dir=rtl]{text-align:right}.mdc-tooltip__surface .mdc-tooltip__title{margin:0 8px}.mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(200px - (2 * 8px));margin:8px;text-align:left}[dir=rtl] .mdc-tooltip__surface .mdc-tooltip__content,.mdc-tooltip__surface .mdc-tooltip__content[dir=rtl]{text-align:right}.mdc-tooltip--rich .mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(320px - (2 * 8px));align-self:stretch}.mdc-tooltip__surface .mdc-tooltip__content-link{text-decoration:none}.mdc-tooltip--rich-actions,.mdc-tooltip__content,.mdc-tooltip__title{z-index:1}.mdc-tooltip__surface-animation{opacity:0;transform:scale(0.8);will-change:transform,opacity}.mdc-tooltip--shown .mdc-tooltip__surface-animation{transform:scale(1);opacity:1}.mdc-tooltip--hide .mdc-tooltip__surface-animation{transform:scale(1)}.mdc-tooltip__caret-surface-top,.mdc-tooltip__caret-surface-bottom{position:absolute;height:24px;width:24px;transform:rotate(35deg) skewY(20deg) scaleX(0.9396926208)}.mdc-tooltip__caret-surface-top .mdc-elevation-overlay,.mdc-tooltip__caret-surface-bottom .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip__caret-surface-bottom{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);outline:1px solid rgba(0,0,0,0);z-index:-1}@media screen and (forced-colors: active){.mdc-tooltip__caret-surface-bottom{outline-color:CanvasText}}.mat-mdc-tooltip{--mdc-plain-tooltip-container-shape:4px;--mdc-plain-tooltip-supporting-text-line-height:16px}.mat-mdc-tooltip .mdc-tooltip__surface{background-color:var(--mdc-plain-tooltip-container-color)}.mat-mdc-tooltip .mdc-tooltip__surface{border-radius:var(--mdc-plain-tooltip-container-shape)}.mat-mdc-tooltip .mdc-tooltip__caret-surface-top,.mat-mdc-tooltip .mdc-tooltip__caret-surface-bottom{border-radius:var(--mdc-plain-tooltip-container-shape)}.mat-mdc-tooltip .mdc-tooltip__surface{color:var(--mdc-plain-tooltip-supporting-text-color)}.mat-mdc-tooltip .mdc-tooltip__surface{font-family:var(--mdc-plain-tooltip-supporting-text-font);line-height:var(--mdc-plain-tooltip-supporting-text-line-height);font-size:var(--mdc-plain-tooltip-supporting-text-size);font-weight:var(--mdc-plain-tooltip-supporting-text-weight);letter-spacing:var(--mdc-plain-tooltip-supporting-text-tracking)}.mat-mdc-tooltip{position:relative;transform:scale(0)}.mat-mdc-tooltip::before{content:\\\"\\\";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards}\"], dependencies: [{ kind: \"directive\", type: i5.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: TooltipComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mat-tooltip-component', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n // Forces the element to have a layout in IE and Edge. This fixes issues where the element\n // won't be rendered if the animations are disabled or there is no web animations polyfill.\n '[style.zoom]': 'isVisible() ? 1 : null',\n '(mouseleave)': '_handleMouseLeave($event)',\n 'aria-hidden': 'true',\n }, template: \"\\n
{{message}}
\\n\\n\", styles: [\".mdc-tooltip__surface{word-break:break-all;word-break:var(--mdc-tooltip-word-break, normal);overflow-wrap:anywhere}.mdc-tooltip--showing-transition .mdc-tooltip__surface-animation{transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-tooltip--hide-transition .mdc-tooltip__surface-animation{transition:opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-tooltip{position:fixed;display:none;z-index:9}.mdc-tooltip-wrapper--rich{position:relative}.mdc-tooltip--shown,.mdc-tooltip--showing,.mdc-tooltip--hide{display:inline-flex}.mdc-tooltip--shown.mdc-tooltip--rich,.mdc-tooltip--showing.mdc-tooltip--rich,.mdc-tooltip--hide.mdc-tooltip--rich{display:inline-block;left:-320px;position:absolute}.mdc-tooltip__surface{line-height:16px;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center}.mdc-tooltip__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}@media screen and (forced-colors: active){.mdc-tooltip__surface::before{border-color:CanvasText}}.mdc-tooltip--rich .mdc-tooltip__surface{align-items:flex-start;display:flex;flex-direction:column;min-height:24px;min-width:40px;max-width:320px;position:relative}.mdc-tooltip--multiline .mdc-tooltip__surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mdc-tooltip__surface,.mdc-tooltip--multiline .mdc-tooltip__surface[dir=rtl]{text-align:right}.mdc-tooltip__surface .mdc-tooltip__title{margin:0 8px}.mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(200px - (2 * 8px));margin:8px;text-align:left}[dir=rtl] .mdc-tooltip__surface .mdc-tooltip__content,.mdc-tooltip__surface .mdc-tooltip__content[dir=rtl]{text-align:right}.mdc-tooltip--rich .mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(320px - (2 * 8px));align-self:stretch}.mdc-tooltip__surface .mdc-tooltip__content-link{text-decoration:none}.mdc-tooltip--rich-actions,.mdc-tooltip__content,.mdc-tooltip__title{z-index:1}.mdc-tooltip__surface-animation{opacity:0;transform:scale(0.8);will-change:transform,opacity}.mdc-tooltip--shown .mdc-tooltip__surface-animation{transform:scale(1);opacity:1}.mdc-tooltip--hide .mdc-tooltip__surface-animation{transform:scale(1)}.mdc-tooltip__caret-surface-top,.mdc-tooltip__caret-surface-bottom{position:absolute;height:24px;width:24px;transform:rotate(35deg) skewY(20deg) scaleX(0.9396926208)}.mdc-tooltip__caret-surface-top .mdc-elevation-overlay,.mdc-tooltip__caret-surface-bottom .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip__caret-surface-bottom{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);outline:1px solid rgba(0,0,0,0);z-index:-1}@media screen and (forced-colors: active){.mdc-tooltip__caret-surface-bottom{outline-color:CanvasText}}.mat-mdc-tooltip{--mdc-plain-tooltip-container-shape:4px;--mdc-plain-tooltip-supporting-text-line-height:16px}.mat-mdc-tooltip .mdc-tooltip__surface{background-color:var(--mdc-plain-tooltip-container-color)}.mat-mdc-tooltip .mdc-tooltip__surface{border-radius:var(--mdc-plain-tooltip-container-shape)}.mat-mdc-tooltip .mdc-tooltip__caret-surface-top,.mat-mdc-tooltip .mdc-tooltip__caret-surface-bottom{border-radius:var(--mdc-plain-tooltip-container-shape)}.mat-mdc-tooltip .mdc-tooltip__surface{color:var(--mdc-plain-tooltip-supporting-text-color)}.mat-mdc-tooltip .mdc-tooltip__surface{font-family:var(--mdc-plain-tooltip-supporting-text-font);line-height:var(--mdc-plain-tooltip-supporting-text-line-height);font-size:var(--mdc-plain-tooltip-supporting-text-size);font-weight:var(--mdc-plain-tooltip-supporting-text-weight);letter-spacing:var(--mdc-plain-tooltip-supporting-text-tracking)}.mat-mdc-tooltip{position:relative;transform:scale(0)}.mat-mdc-tooltip::before{content:\\\"\\\";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards}\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, propDecorators: { _tooltip: [{\n type: ViewChild,\n args: ['tooltip', {\n // Use a static query here since we interact directly with\n // the DOM which can happen before `ngAfterViewInit`.\n static: true,\n }]\n }] } });\n\n/**\n * Animations used by MatTooltip.\n * @docs-private\n */\nconst matTooltipAnimations = {\n /** Animation that transitions a tooltip in and out. */\n tooltipState: trigger('state', [\n // TODO(crisbeto): these values are based on MDC's CSS.\n // We should be able to use their styles directly once we land #19432.\n state('initial, void, hidden', style({ opacity: 0, transform: 'scale(0.8)' })),\n state('visible', style({ transform: 'scale(1)' })),\n transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),\n transition('* => hidden', animate('75ms cubic-bezier(0.4, 0, 1, 1)')),\n ]),\n};\n\nclass MatTooltipModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: MatTooltipModule, declarations: [MatTooltip, TooltipComponent], imports: [A11yModule, CommonModule, OverlayModule, MatCommonModule], exports: [MatTooltip, TooltipComponent, MatCommonModule, CdkScrollableModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatTooltipModule, providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [A11yModule, CommonModule, OverlayModule, MatCommonModule, MatCommonModule, CdkScrollableModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatTooltipModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [A11yModule, CommonModule, OverlayModule, MatCommonModule],\n exports: [MatTooltip, TooltipComponent, MatCommonModule, CdkScrollableModule],\n declarations: [MatTooltip, TooltipComponent],\n providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_TOOLTIP_DEFAULT_OPTIONS, MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY, MAT_TOOLTIP_SCROLL_STRATEGY, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, MatTooltip, MatTooltipModule, SCROLL_THROTTLE_MS, TOOLTIP_PANEL_CLASS, TooltipComponent, _MatTooltipBase, _TooltipComponentBase, getMatTooltipInvalidPositionError, matTooltipAnimations };\n","import * as i0 from '@angular/core';\nimport { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MatCommonModule } from '@angular/material/core';\n\nclass MatDivider {\n constructor() {\n this._vertical = false;\n this._inset = false;\n }\n /** Whether the divider is vertically aligned. */\n get vertical() {\n return this._vertical;\n }\n set vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\n /** Whether the divider is an inset divider. */\n get inset() {\n return this._inset;\n }\n set inset(value) {\n this._inset = coerceBooleanProperty(value);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatDivider, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"16.1.1\", type: MatDivider, selector: \"mat-divider\", inputs: { vertical: \"vertical\", inset: \"inset\" }, host: { attributes: { \"role\": \"separator\" }, properties: { \"attr.aria-orientation\": \"vertical ? \\\"vertical\\\" : \\\"horizontal\\\"\", \"class.mat-divider-vertical\": \"vertical\", \"class.mat-divider-horizontal\": \"!vertical\", \"class.mat-divider-inset\": \"inset\" }, classAttribute: \"mat-divider\" }, ngImport: i0, template: '', isInline: true, styles: [\".mat-divider{--mat-divider-width:1px;display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color);border-top-width:var(--mat-divider-width)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color);border-right-width:var(--mat-divider-width)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatDivider, decorators: [{\n type: Component,\n args: [{ selector: 'mat-divider', host: {\n 'role': 'separator',\n '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n '[class.mat-divider-vertical]': 'vertical',\n '[class.mat-divider-horizontal]': '!vertical',\n '[class.mat-divider-inset]': 'inset',\n 'class': 'mat-divider',\n }, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [\".mat-divider{--mat-divider-width:1px;display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color);border-top-width:var(--mat-divider-width)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color);border-right-width:var(--mat-divider-width)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}\"] }]\n }], propDecorators: { vertical: [{\n type: Input\n }], inset: [{\n type: Input\n }] } });\n\nclass MatDividerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatDividerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"16.1.1\", ngImport: i0, type: MatDividerModule, declarations: [MatDivider], imports: [MatCommonModule], exports: [MatDivider, MatCommonModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatDividerModule, imports: [MatCommonModule, MatCommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: MatDividerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [MatDivider, MatCommonModule],\n declarations: [MatDivider],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatDivider, MatDividerModule };\n","import { A, Z, ZERO, NINE, SPACE, HOME, END, ENTER, ESCAPE, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, EventEmitter, forwardRef, ElementRef, Component, ChangeDetectionStrategy, Inject, Optional, Input, Output, ViewChild, ContentChild, NgModule } from '@angular/core';\nimport * as i3 from '@angular/forms';\nimport { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport * as i11 from '@angular/material/core';\nimport { MatOption } from '@angular/material/core';\nimport * as i12 from '@angular/material/form-field';\nimport { MatFormField } from '@angular/material/form-field';\nimport * as i10 from '@angular/material/select';\nimport { MatSelect } from '@angular/material/select';\nimport { BehaviorSubject, of, combineLatest, Subject } from 'rxjs';\nimport { switchMap, map, startWith, delay, takeUntil, take, tap, filter } from 'rxjs/operators';\nimport * as i1 from '@angular/cdk/scrolling';\nimport * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i4 from '@angular/material/button';\nimport { MatButtonModule } from '@angular/material/button';\nimport * as i5 from '@angular/material/checkbox';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport * as i6 from '@angular/material/icon';\nimport { MatIconModule } from '@angular/material/icon';\nimport * as i7 from '@angular/material/progress-spinner';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport * as i8 from '@angular/material/tooltip';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport * as i9 from '@angular/material/divider';\nimport { MatDividerModule } from '@angular/material/divider';\n\n/**\n * Directive for providing a custom clear-icon.\n * e.g.\n * \n * delete\n * \n */\nclass MatSelectSearchClearDirective {\n}\nMatSelectSearchClearDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: MatSelectSearchClearDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatSelectSearchClearDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.0.2\", type: MatSelectSearchClearDirective, selector: \"[ngxMatSelectSearchClear]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: MatSelectSearchClearDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngxMatSelectSearchClear]'\n }]\n }] });\n\n/** List of inputs of NgxMatSelectSearchComponent that can be configured with a global default. */\nconst configurableDefaultOptions = [\n 'ariaLabel',\n 'clearSearchInput',\n 'closeIcon',\n 'closeSvgIcon',\n 'disableInitialFocus',\n 'disableScrollToActiveOnOptionsChanged',\n 'enableClearOnEscapePressed',\n 'hideClearSearchButton',\n 'noEntriesFoundLabel',\n 'placeholderLabel',\n 'preventHomeEndKeyPropagation',\n 'searching',\n];\n/**\n * InjectionToken that can be used to specify global options. e.g.\n *\n * ```typescript\n * providers: [\n * {\n * provide: MAT_SELECTSEARCH_DEFAULT_OPTIONS,\n * useValue: {\n * closeIcon: 'delete',\n * noEntriesFoundLabel: 'No options found'\n * }\n * }\n * ]\n * ```\n *\n * See the corresponding inputs of `MatSelectSearchComponent` for documentation.\n */\nconst MAT_SELECTSEARCH_DEFAULT_OPTIONS = new InjectionToken('mat-selectsearch-default-options');\n\n/**\n * Directive for providing a custom no entries found element.\n * e.g.\n * \n * \n * No entries found \n * \n * \n */\nclass MatSelectNoEntriesFoundDirective {\n}\nMatSelectNoEntriesFoundDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: MatSelectNoEntriesFoundDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatSelectNoEntriesFoundDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"15.0.2\", type: MatSelectNoEntriesFoundDirective, selector: \"[ngxMatSelectNoEntriesFound]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: MatSelectNoEntriesFoundDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngxMatSelectNoEntriesFound]'\n }]\n }] });\n\n/**\n * Copyright (c) 2018 Bithost GmbH 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/* tslint:disable:member-ordering component-selector */\n/**\n * Component providing an input field for searching MatSelect options.\n *\n * Example usage:\n *\n * interface Bank {\n * id: string;\n * name: string;\n * }\n *\n * @Component({\n * selector: 'my-app-data-selection',\n * template: `\n * \n * \n * \n * \n * \n * \n * {{bank.name}}\n * \n * \n * \n * `\n * })\n * export class DataSelectionComponent implements OnInit, OnDestroy {\n *\n * // control for the selected bank\n * public bankCtrl: FormControl = new FormControl();\n * // control for the MatSelect filter keyword\n * public bankFilterCtrl: FormControl = new FormControl();\n *\n * // list of banks\n * private banks: Bank[] = [{name: 'Bank A', id: 'A'}, {name: 'Bank B', id: 'B'}, {name: 'Bank C', id: 'C'}];\n * // list of banks filtered by search keyword\n * public filteredBanks: ReplaySubject = new ReplaySubject(1);\n *\n * // Subject that emits when the component has been destroyed.\n * private _onDestroy = new Subject();\n *\n *\n * ngOnInit() {\n * // load the initial bank list\n * this.filteredBanks.next(this.banks.slice());\n * // listen for search field value changes\n * this.bankFilterCtrl.valueChanges\n * .pipe(takeUntil(this._onDestroy))\n * .subscribe(() => {\n * this.filterBanks();\n * });\n * }\n *\n * ngOnDestroy() {\n * this._onDestroy.next();\n * this._onDestroy.complete();\n * }\n *\n * private filterBanks() {\n * if (!this.banks) {\n * return;\n * }\n *\n * // get the search keyword\n * let search = this.bankFilterCtrl.value;\n * if (!search) {\n * this.filteredBanks.next(this.banks.slice());\n * return;\n * } else {\n * search = search.toLowerCase();\n * }\n *\n * // filter the banks\n * this.filteredBanks.next(\n * this.banks.filter(bank => bank.name.toLowerCase().indexOf(search) > -1)\n * );\n * }\n * }\n */\nclass MatSelectSearchComponent {\n constructor(matSelect, changeDetectorRef, _viewportRuler, matOption = null, matFormField = null, defaultOptions) {\n this.matSelect = matSelect;\n this.changeDetectorRef = changeDetectorRef;\n this._viewportRuler = _viewportRuler;\n this.matOption = matOption;\n this.matFormField = matFormField;\n /** Label of the search placeholder */\n this.placeholderLabel = 'Suche';\n /** Type of the search input field */\n this.type = 'text';\n /** Font-based icon used for displaying Close-Icon */\n this.closeIcon = 'close';\n /** Label to be shown when no entries are found. Set to null if no message should be shown. */\n this.noEntriesFoundLabel = 'Keine Optionen gefunden';\n /**\n * Whether or not the search field should be cleared after the dropdown menu is closed.\n * Useful for server-side filtering. See [#3](https://github.com/bithost-gmbh/ngx-mat-select-search/issues/3)\n */\n this.clearSearchInput = true;\n /** Whether to show the search-in-progress indicator */\n this.searching = false;\n /** Disables initial focusing of the input field */\n this.disableInitialFocus = false;\n /** Enable clear input on escape pressed */\n this.enableClearOnEscapePressed = false;\n /**\n * Prevents home / end key being propagated to mat-select,\n * allowing to move the cursor within the search input instead of navigating the options\n */\n this.preventHomeEndKeyPropagation = false;\n /** Disables scrolling to active options when option list changes. Useful for server-side search */\n this.disableScrollToActiveOnOptionsChanged = false;\n /** Adds 508 screen reader support for search box */\n this.ariaLabel = 'dropdown search';\n /** Whether to show Select All Checkbox (for mat-select[multi=true]) */\n this.showToggleAllCheckbox = false;\n /** select all checkbox checked state */\n this.toggleAllCheckboxChecked = false;\n /** select all checkbox indeterminate state */\n this.toggleAllCheckboxIndeterminate = false;\n /** Display a message in a tooltip on the toggle-all checkbox */\n this.toggleAllCheckboxTooltipMessage = '';\n /** Define the position of the tooltip on the toggle-all checkbox. */\n this.toggleAllCheckboxTooltipPosition = 'below';\n /** Show/Hide the search clear button of the search input */\n this.hideClearSearchButton = false;\n /**\n * Always restore selected options on selectionChange for mode multi (e.g. for lazy loading/infinity scrolling).\n * Defaults to false, so selected options are only restored while filtering is active.\n */\n this.alwaysRestoreSelectedOptionsMulti = false;\n /** Output emitter to send to parent component with the toggle all boolean */\n this.toggleAll = new EventEmitter();\n this.onTouched = (_) => { };\n this._options$ = new BehaviorSubject(null);\n this.optionsList$ = this._options$.pipe(switchMap(_options => _options ?\n _options.changes.pipe(map(options => options.toArray()), startWith(_options.toArray())) : of(null)));\n this.optionsLength$ = this.optionsList$.pipe(map(options => options ? options.length : 0));\n this._formControl = new FormControl('');\n /** whether to show the no entries found message */\n this._showNoEntriesFound$ = combineLatest([\n this._formControl.valueChanges,\n this.optionsLength$\n ]).pipe(map(([value, optionsLength]) => this.noEntriesFoundLabel && value\n && optionsLength === this.getOptionsLengthOffset()));\n /** Subject that emits when the component has been destroyed. */\n this._onDestroy = new Subject();\n this.applyDefaultOptions(defaultOptions);\n }\n /** Current search value */\n get value() {\n return this._formControl.value;\n }\n /** Reference to the MatSelect options */\n set _options(_options) {\n this._options$.next(_options);\n }\n get _options() {\n return this._options$.getValue();\n }\n applyDefaultOptions(defaultOptions) {\n if (!defaultOptions) {\n return;\n }\n for (const key of configurableDefaultOptions) {\n if (defaultOptions.hasOwnProperty(key)) {\n this[key] = defaultOptions[key];\n }\n }\n }\n ngOnInit() {\n // set custom mat-option class if the component was placed inside a mat-option\n if (this.matOption) {\n this.matOption.disabled = true;\n this.matOption._getHostElement().classList.add('contains-mat-select-search');\n this.matOption._getHostElement().setAttribute('aria-hidden', 'true');\n }\n else {\n console.error(' must be placed inside a element');\n }\n // when the select dropdown panel is opened or closed\n this.matSelect.openedChange\n .pipe(delay(1), takeUntil(this._onDestroy))\n .subscribe((opened) => {\n if (opened) {\n this.updateInputWidth();\n // focus the search field when opening\n if (!this.disableInitialFocus) {\n this._focus();\n }\n }\n else {\n // clear it when closing\n if (this.clearSearchInput) {\n this._reset();\n }\n }\n });\n // set the first item active after the options changed\n this.matSelect.openedChange\n .pipe(take(1), switchMap((_) => {\n this._options = this.matSelect.options;\n // Closure variable for tracking the most recent first option.\n // In order to avoid avoid causing the list to\n // scroll to the top when options are added to the bottom of\n // the list (eg: infinite scroll), we compare only\n // the changes to the first options to determine if we\n // should set the first item as active.\n // This prevents unnecessary scrolling to the top of the list\n // when options are appended, but allows the first item\n // in the list to be set as active by default when there\n // is no active selection\n let previousFirstOption = this._options.toArray()[this.getOptionsLengthOffset()];\n return this._options.changes\n .pipe(tap(() => {\n // avoid \"expression has been changed\" error\n setTimeout(() => {\n // Convert the QueryList to an array\n const options = this._options.toArray();\n // The true first item is offset by 1\n const currentFirstOption = options[this.getOptionsLengthOffset()];\n const keyManager = this.matSelect._keyManager;\n if (keyManager && this.matSelect.panelOpen) {\n // set first item active and input width\n // Check to see if the first option in these changes is different from the previous.\n const firstOptionIsChanged = !this.matSelect.compareWith(previousFirstOption, currentFirstOption);\n // CASE: The first option is different now.\n // Indiciates we should set it as active and scroll to the top.\n if (firstOptionIsChanged\n || !keyManager.activeItem\n || !options.find(option => this.matSelect.compareWith(option, keyManager.activeItem))) {\n keyManager.setFirstItemActive();\n }\n // wait for panel width changes\n setTimeout(() => {\n this.updateInputWidth();\n });\n }\n // Update our reference\n previousFirstOption = currentFirstOption;\n });\n }));\n }))\n .pipe(takeUntil(this._onDestroy))\n .subscribe();\n // add or remove css class depending on whether to show the no entries found message\n // note: this is hacky\n this._showNoEntriesFound$.pipe(takeUntil(this._onDestroy)).subscribe(showNoEntriesFound => {\n // set no entries found class on mat option\n if (this.matOption) {\n if (showNoEntriesFound) {\n this.matOption._getHostElement().classList.add('mat-select-search-no-entries-found');\n }\n else {\n this.matOption._getHostElement().classList.remove('mat-select-search-no-entries-found');\n }\n }\n });\n // resize the input width when the viewport is resized, i.e. the trigger width could potentially be resized\n this._viewportRuler.change()\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n if (this.matSelect.panelOpen) {\n this.updateInputWidth();\n }\n });\n this.initMultipleHandling();\n this.optionsList$.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n // update view when available options change\n this.changeDetectorRef.markForCheck();\n });\n }\n _emitSelectAllBooleanToParent(state) {\n this.toggleAll.emit(state);\n }\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n _isToggleAllCheckboxVisible() {\n return this.matSelect.multiple && this.showToggleAllCheckbox;\n }\n /**\n * Handles the key down event with MatSelect.\n * Allows e.g. selecting with enter key, navigation with arrow keys, etc.\n * @param event\n */\n _handleKeydown(event) {\n // Prevent propagation for all alphanumeric characters in order to avoid selection issues\n if ((event.key && event.key.length === 1) ||\n (event.keyCode >= A && event.keyCode <= Z) ||\n (event.keyCode >= ZERO && event.keyCode <= NINE) ||\n (event.keyCode === SPACE)\n || (this.preventHomeEndKeyPropagation && (event.keyCode === HOME || event.keyCode === END))) {\n event.stopPropagation();\n }\n if (this.matSelect.multiple && event.key && event.keyCode === ENTER) {\n // Regain focus after multiselect, so we can further type\n setTimeout(() => this._focus());\n }\n // Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field\n if (this.enableClearOnEscapePressed === true && event.keyCode === ESCAPE && this.value) {\n this._reset(true);\n event.stopPropagation();\n }\n }\n /**\n * Handles the key up event with MatSelect.\n * Allows e.g. the announcing of the currently activeDescendant by screen readers.\n */\n _handleKeyup(event) {\n if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) {\n const ariaActiveDescendantId = this.matSelect._getAriaActiveDescendant();\n const index = this._options.toArray().findIndex(item => item.id === ariaActiveDescendantId);\n if (index !== -1) {\n this.unselectActiveDescendant();\n this.activeDescendant = this._options.toArray()[index]._getHostElement();\n this.activeDescendant.setAttribute('aria-selected', 'true');\n this.searchSelectInput.nativeElement.setAttribute('aria-activedescendant', ariaActiveDescendantId);\n }\n }\n }\n writeValue(value) {\n this._lastExternalInputValue = value;\n this._formControl.setValue(value);\n this.changeDetectorRef.markForCheck();\n }\n onBlur() {\n this.unselectActiveDescendant();\n this.onTouched();\n }\n registerOnChange(fn) {\n this._formControl.valueChanges.pipe(filter(value => value !== this._lastExternalInputValue), tap(() => this._lastExternalInputValue = undefined), takeUntil(this._onDestroy)).subscribe(fn);\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Focuses the search input field\n */\n _focus() {\n if (!this.searchSelectInput || !this.matSelect.panel) {\n return;\n }\n // save and restore scrollTop of panel, since it will be reset by focus()\n // note: this is hacky\n const panel = this.matSelect.panel.nativeElement;\n const scrollTop = panel.scrollTop;\n // focus\n this.searchSelectInput.nativeElement.focus();\n panel.scrollTop = scrollTop;\n }\n /**\n * Resets the current search value\n * @param focus whether to focus after resetting\n */\n _reset(focus) {\n this._formControl.setValue('');\n if (focus) {\n this._focus();\n }\n }\n /**\n * Initializes handling \n * Note: to improve this code, mat-select should be extended to allow disabling resetting the selection while filtering.\n */\n initMultipleHandling() {\n if (!this.matSelect.ngControl) {\n if (this.matSelect.multiple) {\n // note: the access to matSelect.ngControl (instead of matSelect.value / matSelect.valueChanges)\n // is necessary to properly work in multi-selection mode.\n console.error('the mat-select containing ngx-mat-select-search must have a ngModel or formControl directive when multiple=true');\n }\n return;\n }\n // if \n // store previously selected values and restore them when they are deselected\n // because the option is not available while we are currently filtering\n this.previousSelectedValues = this.matSelect.ngControl.value;\n this.matSelect.ngControl.valueChanges\n .pipe(takeUntil(this._onDestroy))\n .subscribe((values) => {\n let restoreSelectedValues = false;\n if (this.matSelect.multiple) {\n if ((this.alwaysRestoreSelectedOptionsMulti || (this._formControl.value && this._formControl.value.length))\n && this.previousSelectedValues && Array.isArray(this.previousSelectedValues)) {\n if (!values || !Array.isArray(values)) {\n values = [];\n }\n const optionValues = this.matSelect.options.map(option => option.value);\n this.previousSelectedValues.forEach(previousValue => {\n if (!values.some(v => this.matSelect.compareWith(v, previousValue))\n && !optionValues.some(v => this.matSelect.compareWith(v, previousValue))) {\n // if a value that was selected before is deselected and not found in the options, it was deselected\n // due to the filtering, so we restore it.\n values.push(previousValue);\n restoreSelectedValues = true;\n }\n });\n }\n }\n this.previousSelectedValues = values;\n if (restoreSelectedValues) {\n this.matSelect._onChange(values);\n }\n });\n }\n /**\n * Set the width of the innerSelectSearch to fit even custom scrollbars\n * And support all Operation Systems\n */\n updateInputWidth() {\n if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {\n return;\n }\n let element = this.innerSelectSearch.nativeElement;\n let panelElement;\n while (element = element.parentElement) {\n if (element.classList.contains('mat-select-panel')) {\n panelElement = element;\n break;\n }\n }\n if (panelElement) {\n this.innerSelectSearch.nativeElement.style.width = panelElement.clientWidth + 'px';\n }\n }\n /**\n * Determine the offset to length that can be caused by the optional matOption used as a search input.\n */\n getOptionsLengthOffset() {\n if (this.matOption) {\n return 1;\n }\n else {\n return 0;\n }\n }\n unselectActiveDescendant() {\n this.activeDescendant?.removeAttribute('aria-selected');\n this.searchSelectInput.nativeElement.removeAttribute('aria-activedescendant');\n }\n}\nMatSelectSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: MatSelectSearchComponent, deps: [{ token: MatSelect }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: MatOption, optional: true }, { token: MatFormField, optional: true }, { token: MAT_SELECTSEARCH_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatSelectSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.0.2\", type: MatSelectSearchComponent, selector: \"ngx-mat-select-search\", inputs: { placeholderLabel: \"placeholderLabel\", type: \"type\", closeIcon: \"closeIcon\", closeSvgIcon: \"closeSvgIcon\", noEntriesFoundLabel: \"noEntriesFoundLabel\", clearSearchInput: \"clearSearchInput\", searching: \"searching\", disableInitialFocus: \"disableInitialFocus\", enableClearOnEscapePressed: \"enableClearOnEscapePressed\", preventHomeEndKeyPropagation: \"preventHomeEndKeyPropagation\", disableScrollToActiveOnOptionsChanged: \"disableScrollToActiveOnOptionsChanged\", ariaLabel: \"ariaLabel\", showToggleAllCheckbox: \"showToggleAllCheckbox\", toggleAllCheckboxChecked: \"toggleAllCheckboxChecked\", toggleAllCheckboxIndeterminate: \"toggleAllCheckboxIndeterminate\", toggleAllCheckboxTooltipMessage: \"toggleAllCheckboxTooltipMessage\", toggleAllCheckboxTooltipPosition: \"toggleAllCheckboxTooltipPosition\", hideClearSearchButton: \"hideClearSearchButton\", alwaysRestoreSelectedOptionsMulti: \"alwaysRestoreSelectedOptionsMulti\" }, outputs: { toggleAll: \"toggleAll\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSelectSearchComponent),\n multi: true\n }\n ], queries: [{ propertyName: \"clearIcon\", first: true, predicate: MatSelectSearchClearDirective, descendants: true }, { propertyName: \"noEntriesFound\", first: true, predicate: MatSelectNoEntriesFoundDirective, descendants: true }], viewQueries: [{ propertyName: \"searchSelectInput\", first: true, predicate: [\"searchSelectInput\"], descendants: true, read: ElementRef, static: true }, { propertyName: \"innerSelectSearch\", first: true, predicate: [\"innerSelectSearch\"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: \"\\n\\n\\n\\n\\n\\n\\n \\n\\n \\n \\n\\n \\n\\n \\n\\n \\n\\n\\n
\\n \\n {{noEntriesFoundLabel}}\\n
\\n\\n\", styles: [\".mat-select-search-hidden{visibility:hidden}.mat-select-search-inner{position:absolute;top:0;left:0;width:100%;z-index:100;font-size:inherit;box-shadow:none}.mat-select-search-inner.mat-select-search-inner-multiple.mat-select-search-inner-toggle-all{display:flex;align-items:center}.mat-select-search-input{box-sizing:border-box;width:100%;border:none;font-family:inherit;font-size:inherit;color:currentColor;outline:none;background:none;padding:0 44px 0 16px;height:calc(3em - 1px);line-height:calc(3em - 1px)}:host-context([dir=rtl]) .mat-select-search-input{padding-right:16px;padding-left:44px}.mat-select-search-inner-toggle-all .mat-select-search-input{padding-left:5px}.mat-select-search-no-entries-found{padding-top:8px}.mat-select-search-clear{position:absolute;right:4px;top:0}:host-context([dir=rtl]) .mat-select-search-clear{right:auto;left:4px}.mat-select-search-spinner{position:absolute;right:16px;top:calc(50% - 8px)}:host-context([dir=rtl]) .mat-select-search-spinner{right:auto;left:16px}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search{position:sticky;top:-8px;z-index:1;opacity:1;margin-top:-8px;pointer-events:all}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mat-icon{margin-right:0;margin-left:0}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search mat-pseudo-checkbox{display:none}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mdc-list-item__primary-text{opacity:1}.mat-select-search-toggle-all-checkbox{padding-left:5px}:host-context([dir=rtl]) .mat-select-search-toggle-all-checkbox{padding-left:0;padding-right:5px}\\n\"], dependencies: [{ kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i3.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i3.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i3.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"component\", type: i4.MatIconButton, selector: \"button[mat-icon-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"component\", type: i5.MatCheckbox, selector: \"mat-checkbox\", inputs: [\"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matCheckbox\"] }, { kind: \"component\", type: i6.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i7.MatProgressSpinner, selector: \"mat-progress-spinner, mat-spinner\", inputs: [\"color\", \"mode\", \"value\", \"diameter\", \"strokeWidth\"], exportAs: [\"matProgressSpinner\"] }, { kind: \"directive\", type: i8.MatTooltip, selector: \"[matTooltip]\", exportAs: [\"matTooltip\"] }, { kind: \"component\", type: i9.MatDivider, selector: \"mat-divider\", inputs: [\"vertical\", \"inset\"] }, { kind: \"pipe\", type: i2.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: MatSelectSearchComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ngx-mat-select-search', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSelectSearchComponent),\n multi: true\n }\n ], changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n\\n\\n\\n\\n\\n\\n \\n\\n \\n \\n\\n \\n\\n \\n\\n \\n\\n\\n
\\n \\n {{noEntriesFoundLabel}}\\n
\\n\\n\", styles: [\".mat-select-search-hidden{visibility:hidden}.mat-select-search-inner{position:absolute;top:0;left:0;width:100%;z-index:100;font-size:inherit;box-shadow:none}.mat-select-search-inner.mat-select-search-inner-multiple.mat-select-search-inner-toggle-all{display:flex;align-items:center}.mat-select-search-input{box-sizing:border-box;width:100%;border:none;font-family:inherit;font-size:inherit;color:currentColor;outline:none;background:none;padding:0 44px 0 16px;height:calc(3em - 1px);line-height:calc(3em - 1px)}:host-context([dir=rtl]) .mat-select-search-input{padding-right:16px;padding-left:44px}.mat-select-search-inner-toggle-all .mat-select-search-input{padding-left:5px}.mat-select-search-no-entries-found{padding-top:8px}.mat-select-search-clear{position:absolute;right:4px;top:0}:host-context([dir=rtl]) .mat-select-search-clear{right:auto;left:4px}.mat-select-search-spinner{position:absolute;right:16px;top:calc(50% - 8px)}:host-context([dir=rtl]) .mat-select-search-spinner{right:auto;left:16px}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search{position:sticky;top:-8px;z-index:1;opacity:1;margin-top:-8px;pointer-events:all}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mat-icon{margin-right:0;margin-left:0}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search mat-pseudo-checkbox{display:none}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mdc-list-item__primary-text{opacity:1}.mat-select-search-toggle-all-checkbox{padding-left:5px}:host-context([dir=rtl]) .mat-select-search-toggle-all-checkbox{padding-left:0;padding-right:5px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i10.MatSelect, decorators: [{\n type: Inject,\n args: [MatSelect]\n }] }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: i11.MatOption, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MatOption]\n }] }, { type: i12.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MatFormField]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_SELECTSEARCH_DEFAULT_OPTIONS]\n }] }]; }, propDecorators: { placeholderLabel: [{\n type: Input\n }], type: [{\n type: Input\n }], closeIcon: [{\n type: Input\n }], closeSvgIcon: [{\n type: Input\n }], noEntriesFoundLabel: [{\n type: Input\n }], clearSearchInput: [{\n type: Input\n }], searching: [{\n type: Input\n }], disableInitialFocus: [{\n type: Input\n }], enableClearOnEscapePressed: [{\n type: Input\n }], preventHomeEndKeyPropagation: [{\n type: Input\n }], disableScrollToActiveOnOptionsChanged: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], showToggleAllCheckbox: [{\n type: Input\n }], toggleAllCheckboxChecked: [{\n type: Input\n }], toggleAllCheckboxIndeterminate: [{\n type: Input\n }], toggleAllCheckboxTooltipMessage: [{\n type: Input\n }], toggleAllCheckboxTooltipPosition: [{\n type: Input\n }], hideClearSearchButton: [{\n type: Input\n }], alwaysRestoreSelectedOptionsMulti: [{\n type: Input\n }], toggleAll: [{\n type: Output\n }], searchSelectInput: [{\n type: ViewChild,\n args: ['searchSelectInput', { read: ElementRef, static: true }]\n }], innerSelectSearch: [{\n type: ViewChild,\n args: ['innerSelectSearch', { read: ElementRef, static: true }]\n }], clearIcon: [{\n type: ContentChild,\n args: [MatSelectSearchClearDirective]\n }], noEntriesFound: [{\n type: ContentChild,\n args: [MatSelectNoEntriesFoundDirective]\n }] } });\n\n/**\n * Copyright (c) 2018 Bithost GmbH 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 */\nconst MatSelectSearchVersion = '7.0.2';\nclass NgxMatSelectSearchModule {\n}\nNgxMatSelectSearchModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: NgxMatSelectSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nNgxMatSelectSearchModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"15.0.2\", ngImport: i0, type: NgxMatSelectSearchModule, declarations: [MatSelectSearchComponent,\n MatSelectSearchClearDirective,\n MatSelectNoEntriesFoundDirective], imports: [CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatDividerModule], exports: [MatSelectSearchComponent,\n MatSelectSearchClearDirective,\n MatSelectNoEntriesFoundDirective] });\nNgxMatSelectSearchModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: NgxMatSelectSearchModule, imports: [CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatDividerModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.2\", ngImport: i0, type: NgxMatSelectSearchModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatDividerModule,\n ],\n declarations: [\n MatSelectSearchComponent,\n MatSelectSearchClearDirective,\n MatSelectNoEntriesFoundDirective\n ],\n exports: [\n MatSelectSearchComponent,\n MatSelectSearchClearDirective,\n MatSelectNoEntriesFoundDirective\n ]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SELECTSEARCH_DEFAULT_OPTIONS, MatSelectNoEntriesFoundDirective, MatSelectSearchClearDirective, MatSelectSearchComponent, MatSelectSearchVersion, NgxMatSelectSearchModule, configurableDefaultOptions };\n//# sourceMappingURL=ngx-mat-select-search.mjs.map\n"],"names":["AddressSelectorAbstract","FormStepAbstract","constructor","this","sessionRepository","inject","SessionRepository","config","ConfigRepository","form","FormControl","selectedDeliveryType$","deliveryType","DeliveryType","restoSelectCtrl","activeOutletId$","pipe","tap","id","setValue","pickupAddress$","address$","outlets$","applicableOutlets$","addressFieldSettings$","onChangeResto","matSelect","setActiveOutlet","value","FullAddressStepAbstract","cities","CitiesService","FormGroup","city","nonNullable","validators","Validators","required","street","house","maxLength","AlphanumericValidator","flat","FlatValidator","building","porch","floor","streetClassifierId","isInitialChangeCity","isLoadingCities$","isLoading$","cities$","cityValue","controls","checkCityExist","ngOnInit","super","disable","selectStreetName","enable","subscribeToDeliveryZone","deliverySub","valueChanges","debounceTime","filter","formValue","switchMap","getDeliveryZoneByAddress","result","deliveryZoneId","setErrors","invalid","untilDestroyed","subscribe","error","err","unsubscribe","onChangeCityOption","$event","selectCity","isUserInput","name","i","length","onChangeStreet","classifierId","static","t","_angular_core__WEBPACK_IMPORTED_MODULE_3__","lG2","viewQuery","rf","ctx","CdkVirtualScrollViewport","__decorate","UntilDestroy","HintAddressStepAbstract","citiesService","line1","searchControl","isLoadingHints$","isShowMessageHint","hints$","hints","selectedHint","deliveryAddress$","deliveryAddress","patchValue","reset","onSearchAddress","setHintSearchString","onSelectAddress","hint","isError","_angular_core__WEBPACK_IMPORTED_MODULE_4__","features","i0","IndexAddressStepAbstract","postCode","postcodeAddress$","postcode","onChangePostcode","loadAddressByPostcode","onChangeAddress","address","getDeliveryZoneByCoordinates","lat","latitude","lng","longitude","city_r13","_r16","$implicit","ctx_r15","street_r17","_r19","ctx_r18","ctx_r10","FullAddressStepComponent_ng_container_4_mat_option_7_Template","FullAddressStepComponent_ng_container_4_mat_error_8_Template","FullAddressStepComponent_ng_container_4_mat_option_18_Template","FullAddressStepComponent_ng_container_4_mat_option_21_Template","FullAddressStepComponent_ng_container_4_mat_error_22_Template","FullAddressStepComponent_ng_container_4_ng_container_28_Template","cities_r4","ctx_r1","hasError","streets","_r8","dirty","touched","FullAddressStepComponent_ng_template_6_span_0_Template","ctx_r3","FullAddressStepComponent","FullAddressStepComponent_1","core","Xpm","selectors","standalone","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","NG_VALIDATORS","decls","vars","consts","i18n_0","$localize","FullAddressStepComponent_div_2_Template","FullAddressStepComponent_ng_container_4_Template","FullAddressStepComponent_ng_template_6_Template","_c26","_r2","NgIf","NgFor","NgClass","AsyncPipe","ReactiveFormsModule","i1","MatProgressSpinnerModule","i2","MatFormFieldModule","i3","MatSelectModule","i4","i5","MatOptionModule","NgxMatSelectSearchModule","i6","CdkFixedSizeVirtualScroll","CdkVirtualForOf","MatInputModule","FilterPipe","SortStringPipe","EzInputComponent","EzInputDirective","styles","ctx_r2","errors","min","max","address_r10","_r13","ctx_r12","IndexAddressStepComponent_ng_container_15_ng_container_1_mat_option_8_Template","IndexAddressStepComponent_ng_container_15_ng_container_1_mat_error_9_Template","postcodeAddress_r6","ctx_r7","IndexAddressStepComponent_ng_container_15_ng_container_1_Template","IndexAddressStepComponent","IndexAddressStepComponent_1","IndexAddressStepComponent_div_3_Template","IndexAddressStepComponent_ng_container_11_Template","IndexAddressStepComponent_ng_container_12_Template","IndexAddressStepComponent_ng_container_13_Template","IndexAddressStepComponent_ng_container_14_Template","IndexAddressStepComponent_ng_container_15_Template","_c16","encapsulation","HintAddressStepComponent_div_7_span_3_Template","HintAddressStepComponent_div_7_span_4_Template","HintAddressStepComponent_div_7_span_5_Template","ctx_r0","HintAddressStepComponent","HintAddressStepComponent_div_7_Template","CommonModule","PortalModule","SearchSelectComponent","outlet_r13","storeId","_r11","AddressSelectorComponent_ng_template_2_ng_container_0_ng_container_1_mat_form_field_3_mat_option_5_Template","outlets_r6","AddressSelectorComponent_ng_template_2_ng_container_0_ng_container_1_mat_form_field_3_Template","_c2","ctx_r9","AddressSelectorComponent_ng_template_2_ng_container_0_ng_container_1_Template","AddressSelectorComponent_ng_template_2_ng_container_0_ng_template_2_Template","AddressSelectorComponent_ng_template_2_ng_container_0_Template","ctx_r22","ctx_r23","AddressSelectorComponent_ng_template_4_ng_container_0_ng_container_1_app_full_address_step_1_Template","AddressSelectorComponent_ng_template_4_ng_container_0_ng_container_1_app_index_address_step_2_Template","addressFieldSettings_r19","usesIndexSearch","ctx_r21","AddressSelectorComponent_ng_template_4_ng_container_0_ng_container_1_Template","AddressSelectorComponent_ng_template_4_ng_container_0_app_hint_address_step_2_Template","useAddressFormatType","AddressSelectorComponent_ng_template_4_ng_container_0_Template","ctx_r4","AddressSelectorComponent","AddressSelectorComponent_1","AddressSelectorComponent_ng_container_0_Template","AddressSelectorComponent_ng_template_2_Template","AddressSelectorComponent_ng_template_4_Template","Delivery","_r3","_r1","NgTemplateOutlet","content","templateRef","isInvalidStatus$","undefined","isRequired","isReadOnly","ngAfterContentInit","ezInput","elementRef","control","hasValidator","nativeElement","readonly","combineLatest","statusChanges","startWith","status","focused","map","isFocus$","isActive$","combineLatestWith","getRawValue","isFocus","_angular_core__WEBPACK_IMPORTED_MODULE_0__","contentQueries","dirIndex","EzRightDirective","EzInputComponent_div_4_Template","_c1","EventEmitter","onFocusIn","emit","onFocusOut","hostBindings","onClose","_r5","ModalComponent","breakPoint","renderer","isDialog","isSmall","title","swipeDirection","isHideHead","closeModal","layout$","layouts","Layout","removeClass","document","documentElement","modalSwipe","hideModal","ngOnDestroy","_angular_core__WEBPACK_IMPORTED_MODULE_6__","ModalSwipeDirective","ModalComponent_button_9_Template","ModalComponent_div_10_Template","additionalClass","isMobile","Fresh","isAndroid","_c3","OverlaySwipeDirective","BottomSwipeSheetDirective","NgSwitch","NgSwitchCase","NgSwitchDefault","MatIconModule","SearchSelectComponent_3_ng_template_0_Template","hint_r9","subtitle","_r15","ctx_r14","SearchSelectComponent_ng_template_6_ng_container_3_div_1_div_1_ng_container_2_Template","SearchSelectComponent_ng_template_6_ng_container_3_div_1_div_1_ng_container_3_Template","SearchSelectComponent_ng_template_6_ng_container_3_div_1_div_1_Template","ctx_r6","SearchSelectComponent_ng_template_6_ng_container_3_div_1_Template","SearchSelectComponent_ng_template_6_ng_container_3_div_2_Template","ctx_r5","SearchSelectComponent_ng_template_6_ng_content_2_Template","SearchSelectComponent_ng_template_6_ng_container_3_Template","_r0","isLoading","overlay","formControl","searchValue","selectHint","isOpen","currentValue","onChange","onTouched","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","writeValue","onInputSearch","onOpenDropDown","OverlayConfig","positionStrategy","position","flexibleConnectedTo","origin","withPositions","originX","originY","overlayX","overlayY","withPush","scrollStrategy","scrollStrategies","reposition","hasBackdrop","backdropClass","width","getBoundingClientRect","overlayRef","create","attach","portal","backdropClick","detach","CdkPortal","CdkOverlayOrigin","ngContentSelectors","_c4","SearchSelectComponent_3_Template","SearchSelectComponent_ng_template_6_Template","SwitcherComponent","changeValue","activeIndex","onSetActive","index","values","obj","valueIndex","indexOf","inputs","outputs","template","transform","listArray","field","search","array","slice","trim","item","toLowerCase","includes","Yjl","pure","order","sortOrder","sort","a","b","pattern","_c0","MatSelect_span_4_Template","placeholder","MatSelect_span_5_span_1_Template","triggerValue","MatSelect_span_5_ng_content_2_Template","MatSelect_span_5_Template","customTrigger","MatSelect_ng_template_10_Template","_r9","ctx_r8","_panelDoneAnimatingStream","next","toState","_handleKeydown","_getPanelTheme","panelClass","multiple","ariaLabel","_getPanelAriaLabelledby","matSelectAnimations","transformPanelWrap","trigger","transition","query","animateChild","optional","transformPanel","state","style","opacity","animate","nextUniqueId","MAT_SELECT_SCROLL_STRATEGY","InjectionToken","MAT_SELECT_CONFIG","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","deps","Overlay","useFactory","MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY","MAT_SELECT_TRIGGER","MatSelectChange","source","_MatSelectMixinBase","mixinDisableRipple","mixinTabIndex","mixinDisabled","mixinErrorState","_elementRef","_defaultErrorStateMatcher","_parentForm","_parentFormGroup","ngControl","stateChanges","Subject","_MatSelectBase","_focused","_panelOpen","_placeholder","_required","coerceBooleanProperty","_multiple","disableOptionCentering","_disableOptionCentering","compareWith","_compareWith","_selectionModel","_initializeSelection","_value","newValue","_assignValue","_onChange","typeaheadDebounceInterval","_typeaheadDebounceInterval","coerceNumberProperty","_id","_uid","_viewportRuler","_changeDetectorRef","_ngZone","_dir","_parentFormField","tabIndex","scrollStrategyFactory","_liveAnnouncer","_defaultOptions","o1","o2","_triggerAriaLabelledBy","_destroy","_onTouched","_valueId","_overlayPanelClass","overlayPanelClass","controlType","optionSelectionChanges","defer","options","changes","merge","option","onSelectionChange","onStable","take","openedChange","_openedStream","o","_closedStream","selectionChange","valueChange","_trackedModal","valueAccessor","_scrollStrategyFactory","_scrollStrategy","parseInt","SelectionModel","distinctUntilChanged","takeUntil","_panelDoneAnimating","panelOpen","_initKeyManager","changed","event","added","forEach","select","removed","deselect","_resetOptions","ngDoCheck","newAriaLabelledby","_getTriggerAriaLabelledby","element","setAttribute","removeAttribute","_previousControl","disabled","updateErrorState","ngOnChanges","userAriaDescribedBy","_keyManager","withTypeAhead","destroy","complete","_clearFromModal","toggle","close","open","_canOpen","_applyModalPanelOwnership","withHorizontalOrientation","_highlightCorrectOption","markForCheck","modal","closest","panelId","removeAriaReferencedId","addAriaReferencedId","_isRtl","selected","empty","selectedOptions","viewValue","reverse","join","_handleOpenKeydown","_handleClosedKeydown","keyCode","isArrowKey","DOWN_ARROW","UP_ARROW","LEFT_ARROW","RIGHT_ARROW","isOpenKey","ENTER","SPACE","manager","isTyping","hasModifierKey","altKey","preventDefault","previouslySelectedOption","onKeydown","selectedOption","announce","activeItem","A","ctrlKey","hasDeselectedOptions","some","opt","previouslyFocusedIndex","activeItemIndex","shiftKey","_selectViaInteraction","_onFocus","_onBlur","cancelTypeahead","_onAttached","_overlayDir","positionChange","detectChanges","_positioningSettled","color","isEmpty","Promise","resolve","then","_setSelectionByValue","setInactiveStyles","clear","Array","isArray","_selectOptionByValue","_sortValues","correspondingOption","updateActiveItem","find","isSelected","_skipPredicate","ActiveDescendantKeyManager","withVerticalOrientation","withHomeAndEnd","withPageUpDown","withAllowedModifierKeys","skipPredicate","tabOut","focus","change","panel","_scrollOptionIntoView","changedOrDestroyed","_onSelect","_stateChanges","wasSelected","setActiveItem","_propagateChanges","toArray","sortComparator","fallbackValue","valueToEmit","_getChangeEvent","firstEnabledOptionIndex","get","labelId","getLabelId","ariaLabelledby","_getAriaActiveDescendant","setDescribedByIds","ids","onContainerClick","shouldLabelFloat","ɵfac","MAT_FORM_FIELD","ɵdir","type","CdkConnectedOverlay","_t","first","errorStateMatcher","MatSelect","arguments","panelWidth","_positions","_hideSingleSelectionIndicator","hideSingleSelectionIndicator","_overlayWidth","_getOverlayWidth","_preferredOverlayOrigin","getConnectedOverlayOrigin","labelCount","_countGroupLabelsBeforeOption","optionGroups","_getHostElement","scrollTop","_getOptionScrollPosition","offsetTop","offsetHeight","preferredOrigin","_syncParentProperties","ɵMatSelect_BaseFactory","ɵcmp","MatOption","MAT_OPTGROUP","hostAttrs","hostVars","toString","errorState","disableRipple","exportAs","MatFormFieldControl","MAT_OPTION_PARENT_COMPONENT","dependencies","i7","i8","data","animation","changeDetection","ɵmod","ɵinj","providers","imports","OverlayModule","MatCommonModule","CdkScrollableModule","MAT_TOOLTIP_SCROLL_STRATEGY","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY","scrollThrottle","MAT_TOOLTIP_DEFAULT_OPTIONS","providedIn","factory","MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY","showDelay","hideDelay","touchendHideDelay","PANEL_CLASS","passiveListenerOptions","normalizePassiveListenerOptions","passive","_MatTooltipBase","_position","_overlayRef","_updatePosition","_tooltipInstance","show","updatePosition","positionAtOrigin","_positionAtOrigin","_detach","_disabled","hide","_setupPointerEnterEventsIfNeeded","_showDelay","_hideDelay","_mouseLeaveHideDelay","message","_message","_ariaDescriber","removeDescription","String","_isTooltipVisible","_updateTooltipMessage","runOutsideAngular","describe","tooltipClass","_tooltipClass","_setTooltipClass","_overlay","_scrollDispatcher","_viewContainerRef","_platform","_focusMonitor","_document","_viewInitialized","_pointerExitEventsInitialized","_viewportMargin","_cssClassPrefix","touchGestures","_passiveListeners","_destroyed","ngAfterViewInit","monitor","run","clearTimeout","_touchstartTimeout","dispose","listener","removeEventListener","stopMonitoring","delay","_cancelPendingAnimations","_createOverlay","_portal","ComponentPortal","_tooltipComponent","instance","_triggerElement","afterHidden","isVisible","existingStrategy","getConfig","_origin","ElementRef","scrollableAncestors","getAncestorScrollContainers","strategy","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","withScrollableContainers","positionChanges","_updateCurrentPositionClass","connectionPair","scrollableViewProperties","isOverlayClipped","direction","detachments","outsidePointerEvents","_handleBodyInteraction","keydownEvents","ESCAPE","stopPropagation","disableTooltipInteractivity","addPanelClass","hasAttached","_getOrigin","_getOverlayPosition","_addOffset","main","fallback","isLtr","originPosition","x","y","_invertPosition","overlayPosition","_markForCheck","onMicrotaskEmpty","newPosition","_currentPosition","classPrefix","removePanelClass","_platformSupportsMouseEvents","push","point","_setupPointerExitEventsIfNeeded","_disableNativeGesturesIfNecessary","touch","targetTouches","clientX","clientY","setTimeout","_addListeners","exitListeners","newTarget","relatedTarget","overlayElement","contains","_wheelListener","touchendListener","listeners","addEventListener","IOS","ANDROID","elementUnderPointer","elementFromPoint","gestures","nodeName","userSelect","msUserSelect","webkitUserSelect","MozUserSelect","draggable","webkitUserDrag","touchAction","webkitTapHighlightColor","MatTooltip","scrollDispatcher","viewContainerRef","ngZone","platform","ariaDescriber","focusMonitor","dir","defaultOptions","TooltipComponent","offsetY","offsetX","DOCUMENT","_TooltipComponentBase","animationMode","_closeOnInteraction","_isVisible","_onHide","_animationsDisabled","_hideTimeoutId","_showTimeoutId","_toggleVisibility","_handleMouseLeave","_finalizeAnimation","_onShow","_handleAnimationEnd","animationName","_showAnimation","_hideAnimation","toVisible","tooltip","_tooltip","showClass","hideClass","classList","remove","add","getComputedStyle","getPropertyValue","ANIMATION_MODULE_TYPE","changeDetectorRef","_isMultiline","_isTooltipMultiline","rect","height","MatTooltipModule","A11yModule","MatDivider","_vertical","_inset","vertical","inset","MatDividerModule","MatSelectSearchComponent_mat_checkbox_3_Template","_r7","_emitSelectAllBooleanToParent","checked","matFormField","toggleAllCheckboxChecked","toggleAllCheckboxIndeterminate","toggleAllCheckboxTooltipMessage","toggleAllCheckboxTooltipPosition","MatSelectSearchComponent_mat_spinner_6_Template","MatSelectSearchComponent_button_7_ng_content_1_Template","MatSelectSearchComponent_button_7_ng_template_2_Template","closeSvgIcon","closeIcon","MatSelectSearchComponent_button_7_Template","_r12","ctx_r11","_reset","clearIcon","MatSelectSearchComponent_div_10_ng_content_1_Template","MatSelectSearchComponent_div_10_ng_template_2_Template","noEntriesFoundLabel","MatSelectSearchComponent_div_10_Template","_r14","noEntriesFound","a0","a1","MatSelectSearchClearDirective","configurableDefaultOptions","MAT_SELECTSEARCH_DEFAULT_OPTIONS","MatSelectNoEntriesFoundDirective","MatSelectSearchComponent","matOption","placeholderLabel","clearSearchInput","searching","disableInitialFocus","enableClearOnEscapePressed","preventHomeEndKeyPropagation","disableScrollToActiveOnOptionsChanged","showToggleAllCheckbox","hideClearSearchButton","alwaysRestoreSelectedOptionsMulti","toggleAll","_","_options$","BehaviorSubject","optionsList$","_options","of","optionsLength$","_formControl","_showNoEntriesFound$","optionsLength","getOptionsLengthOffset","_onDestroy","applyDefaultOptions","getValue","key","hasOwnProperty","console","opened","updateInputWidth","_focus","previousFirstOption","currentFirstOption","keyManager","setFirstItemActive","showNoEntriesFound","initMultipleHandling","_isToggleAllCheckboxVisible","Z","ZERO","NINE","HOME","END","_handleKeyup","ariaActiveDescendantId","findIndex","unselectActiveDescendant","activeDescendant","searchSelectInput","_lastExternalInputValue","onBlur","previousSelectedValues","restoreSelectedValues","optionValues","previousValue","v","innerSelectSearch","panelElement","parentElement","clientWidth","MatFormField","i9","MatButtonModule","MatCheckboxModule"],"sourceRoot":"webpack:///"}