{"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, Input } 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 @Input() isMasked: boolean = false;\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 || !!this.isMasked)\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","isMasked","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:///"}