@skyux/lookup 14.12.0 → 14.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-lookup.mjs","sources":["../../../../../libs/components/lookup/src/lib/modules/shared/sky-lookup-resources.module.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-input.directive.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-search-async-disabled.pipe.ts","../../../../../libs/components/lookup/src/lib/modules/shared/sky-lookup-string-utils.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-adapter.service.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-default-search-function.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/types/autocomplete-message-type.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.component.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.component.html","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.module.ts","../../../../../libs/components/lookup/src/lib/modules/country-field/clone-country-data.ts","../../../../../libs/components/lookup/src/lib/modules/country-field/types/country-field-context-token.ts","../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.component.ts","../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.component.html","../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.module.ts","../../../../../libs/components/lookup/src/lib/modules/search/search-adapter.service.ts","../../../../../libs/components/lookup/src/lib/modules/search/search.component.ts","../../../../../libs/components/lookup/src/lib/modules/search/search.component.html","../../../../../libs/components/lookup/src/lib/modules/search/search.module.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal-item-selected.pipe.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/types/selection-modal-context.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal.component.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal.component.html","../../../../../libs/components/lookup/src/lib/modules/selection-modal/types/selection-modal-instance.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal.service.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup-adapter.service.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup-autocomplete-adapter.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/types/lookup-show-more-native-picker-context.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup-show-more-modal.component.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup-show-more-modal.component.html","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup.component.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup.component.html","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup.module.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/types/lookup-select-mode.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/types/lookup-show-more-custom-picker-context.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal.module.ts","../../../../../libs/components/lookup/src/skyux-lookup.ts"],"sourcesContent":["/* istanbul ignore file */\n\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-lookup' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n skyux_autocomplete_add: { message: 'New' },\n skyux_autocomplete_multiple_results: { message: '{0} results available.' },\n skyux_autocomplete_no_results: { message: 'No matches found' },\n skyux_autocomplete_one_result: { message: 'One result available.' },\n skyux_autocomplete_show_all: { message: 'Show all' },\n skyux_autocomplete_show_all_count: { message: 'Show all {0}' },\n skyux_autocomplete_show_matches_count: { message: 'Show matches ({0})' },\n skyux_country_field_dropdown_hint_text: {\n message: 'Type to search for a country',\n },\n skyux_country_field_search_placeholder: { message: 'Search for a country' },\n skyux_lookup_search_button_show_more: {\n message: 'Show all search results',\n },\n skyux_lookup_show_more_add: { message: 'New' },\n skyux_lookup_show_more_add_button_aria_label: { message: 'Add {0}' },\n skyux_lookup_show_more_displayed_items_updated: {\n message: 'Showing {1} items, with {0} selected.',\n },\n skyux_lookup_show_more_select_all_button_aria_label: {\n message: 'Select all {0}',\n },\n skyux_lookup_show_more_select_all_button_title: { message: 'Select all' },\n skyux_lookup_show_more_clear_all_button_aria_label: {\n message: 'Clear all selected {0}',\n },\n skyux_lookup_show_more_clear_all_button_title: { message: 'Clear all' },\n skyux_lookup_show_more_show_selected_option_title: {\n message: 'Show only selected {0}',\n },\n skyux_lookup_show_more_cancel: { message: 'Cancel' },\n skyux_lookup_show_more_modal_title: { message: 'Select {0}' },\n skyux_lookup_show_more_no_results: { message: 'No matches found' },\n skyux_lookup_show_more_select: { message: 'Select' },\n skyux_lookup_show_more_select_context: { message: 'Select {0}' },\n skyux_lookup_tokens_summary: { message: '{0} items selected' },\n skyux_search_aria_label_descriptor: { message: 'Search {0}' },\n skyux_search_dismiss: { message: 'Dismiss search' },\n skyux_search_label: { message: 'Search items' },\n skyux_search_open: { message: 'Open search' },\n skyux_search_placeholder: { message: 'Find in this list' },\n },\n 'FR-CA': {\n skyux_autocomplete_add: { message: 'Nouveau' },\n skyux_autocomplete_multiple_results: {\n message: '{0} résultats disponibles.',\n },\n skyux_autocomplete_no_results: { message: 'Aucune correspondance trouvée' },\n skyux_autocomplete_one_result: { message: 'Un résultat disponible.' },\n skyux_autocomplete_show_all: { message: 'Afficher tout' },\n skyux_autocomplete_show_all_count: { message: 'Afficher tout {0}' },\n skyux_autocomplete_show_matches_count: {\n message: 'Afficher les correspondances ({0})',\n },\n skyux_country_field_dropdown_hint_text: { message: 'Recherchez un pays' },\n skyux_country_field_search_placeholder: { message: 'Rechercher un pays' },\n skyux_lookup_search_button_show_more: {\n message: 'Afficher tous les résultats de la recherche',\n },\n skyux_lookup_show_more_add: { message: 'Nouveau' },\n skyux_lookup_show_more_add_button_aria_label: { message: 'Ajouter {0}' },\n skyux_lookup_show_more_displayed_items_updated: {\n message: '{1} éléments affichés, avec {0} sélectionné(s).',\n },\n skyux_lookup_show_more_select_all_button_aria_label: {\n message: 'Sélectionner tout {0}',\n },\n skyux_lookup_show_more_select_all_button_title: {\n message: 'Sélectionner tout',\n },\n skyux_lookup_show_more_clear_all_button_aria_label: {\n message: 'Supprimer tous les éléments sélectionnés {0}',\n },\n skyux_lookup_show_more_clear_all_button_title: { message: 'Effacer tout' },\n skyux_lookup_show_more_show_selected_option_title: {\n message: 'Montrer seulement ce qui est sélectionné {0}',\n },\n skyux_lookup_show_more_cancel: { message: 'Annuler' },\n skyux_lookup_show_more_modal_title: { message: 'Sélectionner {0}' },\n skyux_lookup_show_more_no_results: {\n message: 'Aucune correspondance trouvée',\n },\n skyux_lookup_show_more_select: { message: 'Sélectionner' },\n skyux_lookup_show_more_select_context: { message: 'Sélectionner {0}' },\n skyux_lookup_tokens_summary: { message: '{0} articles sélectionnés' },\n skyux_search_aria_label_descriptor: { message: 'Rechercher {0}' },\n skyux_search_dismiss: { message: 'Omettre la recherche' },\n skyux_search_label: { message: 'Rechercher des articles' },\n skyux_search_open: { message: 'Ouvrir la recherche' },\n skyux_search_placeholder: { message: 'Trouver dans cette liste' },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyLookupResourcesModule {}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { Observable, Subject, fromEvent as observableFromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteInputTextChange } from './types/autocomplete-input-text-change';\n\nconst SKY_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyAutocompleteInputDirective),\n multi: true,\n};\n\nconst SKY_AUTOCOMPLETE_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyAutocompleteInputDirective),\n multi: true,\n};\n\n@Directive({\n selector: 'input[skyAutocomplete], textarea[skyAutocomplete]',\n providers: [SKY_AUTOCOMPLETE_VALUE_ACCESSOR, SKY_AUTOCOMPLETE_VALIDATOR],\n standalone: false,\n})\nexport class SkyAutocompleteInputDirective\n implements OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n /**\n * The value for the `autocomplete` attribute on the form input.\n * @default \"off\"\n * @deprecated SKY UX only supports browser autofill on components where the direct input matches the return value. This input may not behave as expected due to the dropdown selection interaction.\n */\n @Input()\n public set autocompleteAttribute(value: string | undefined) {\n if (!value) {\n this.#_autocompleteAttribute = 'off';\n } else {\n this.#_autocompleteAttribute = value;\n }\n\n this.#renderer.setAttribute(\n this.#elementRef.nativeElement,\n 'autocomplete',\n this.#_autocompleteAttribute,\n );\n }\n\n public get autocompleteAttribute(): string {\n return this.#_autocompleteAttribute || 'off';\n }\n\n /**\n * Whether to disable the autocomplete field on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value ?? false;\n this.#renderer.setProperty(\n this.#elementRef.nativeElement,\n 'disabled',\n value,\n );\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n public get blur(): Observable<void> {\n return this.#blurObs;\n }\n\n public get displayWith(): string {\n return this.#_displayWith;\n }\n\n public set displayWith(value: string) {\n this.#_displayWith = value;\n this.inputTextValue = this.#getValueByKey();\n }\n\n public get focus(): Observable<void> {\n return this.#focusObs;\n }\n\n public get inputTextValue(): string {\n return this.#elementRef.nativeElement.value;\n }\n\n public set inputTextValue(value: string) {\n this.#elementRef.nativeElement.value = value || '';\n }\n\n public get textChanges(): Observable<SkyAutocompleteInputTextChange> {\n return this.#textChangesObs;\n }\n\n public get value(): any {\n return this.#_value;\n }\n\n public set value(value: any) {\n const isNewValue = value !== this.#_value;\n\n /* istanbul ignore else */\n if (isNewValue) {\n this.#_value = value;\n this.inputTextValue = this.#getValueByKey();\n this.onChange(this.#_value);\n\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n if (this.#isFirstChange && this.#control) {\n this.#control.markAsPristine();\n }\n\n if (this.#isFirstChange && this.#_value) {\n this.#isFirstChange = false;\n }\n }\n }\n\n #blur: Subject<void>;\n\n #blurObs: Observable<void>;\n\n #control: AbstractControl | undefined;\n\n readonly #elementRef = inject(ElementRef);\n\n #focus: Subject<void>;\n\n #focusObs: Observable<void>;\n\n #isFirstChange = true;\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #renderer = inject(Renderer2);\n\n #textChanges: Subject<SkyAutocompleteInputTextChange>;\n\n #textChangesObs: Observable<SkyAutocompleteInputTextChange>;\n\n #_autocompleteAttribute: string | undefined;\n\n #_disabled = false;\n\n #_displayWith = '';\n\n #_value: any;\n\n constructor() {\n this.#blur = new Subject<void>();\n this.#focus = new Subject<void>();\n this.#textChanges = new Subject<SkyAutocompleteInputTextChange>();\n\n this.#blurObs = this.#blur.asObservable();\n this.#focusObs = this.#focus.asObservable();\n this.#textChangesObs = this.#textChanges.asObservable();\n }\n\n public ngOnInit(): void {\n const element = this.#elementRef.nativeElement;\n\n this.#setAttributes(this.#elementRef);\n\n observableFromEvent(element, 'input')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n if (!this.disabled) {\n this.#textChanges.next({\n value: this.#elementRef.nativeElement.value,\n });\n }\n });\n\n observableFromEvent(element, 'blur')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n if (!this.disabled) {\n this.#blur.next();\n }\n });\n\n observableFromEvent(element, 'focus')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n if (!this.disabled) {\n this.#focus.next();\n }\n });\n\n observableFromEvent(element, 'change')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (!this.disabled) {\n this.#isFirstChange = false;\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.#blur.complete();\n this.#textChanges.complete();\n\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public writeValue(value: any): void {\n this.value = value;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n public restoreInputTextValueToPreviousState(): void {\n const modelValue = this.#getValueByKey();\n\n // If the search field contains text, make sure that the value\n // matches the selected descriptor key.\n if (this.inputTextValue !== modelValue) {\n this.inputTextValue = modelValue;\n }\n\n this.onTouched();\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n }\n return null;\n }\n\n // See: https://www.w3.org/TR/wai-aria-practices/#kbd_focus_activedescendant\n public setActiveDescendant(descendantId: string | null): void {\n if (descendantId) {\n this.#renderer.setAttribute(\n this.#elementRef.nativeElement,\n 'aria-activedescendant',\n descendantId,\n );\n } else {\n this.#renderer.removeAttribute(\n this.#elementRef.nativeElement,\n 'aria-activedescendant',\n );\n }\n }\n\n /**\n * Used to connect the input to the overlay.\n */\n public setAriaControls(overlayId: string | null): void {\n if (overlayId) {\n this.#renderer.setAttribute(\n this.#elementRef.nativeElement,\n 'aria-controls',\n overlayId,\n );\n } else {\n this.#renderer.removeAttribute(\n this.#elementRef.nativeElement,\n 'aria-controls',\n );\n }\n }\n\n // Angular automatically constructs these methods.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onChange(value: any): void {}\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouched(): void {}\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onValidatorChange = (): void => {};\n\n #setAttributes(elementRef: ElementRef): void {\n const element = elementRef.nativeElement;\n\n this.#renderer.setAttribute(\n element,\n 'autocomplete',\n this.autocompleteAttribute,\n );\n this.#renderer.setAttribute(element, 'autocapitalize', 'none');\n this.#renderer.setAttribute(element, 'autocorrect', 'off');\n this.#renderer.setAttribute(element, 'spellcheck', 'false');\n this.#renderer.addClass(element, 'sky-form-control');\n }\n\n #getValueByKey(): string {\n return this.value ? this.value[this.displayWith] : '';\n }\n}\n","import { EventEmitter, Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyAutocompleteSearchAsyncArgs } from './types/autocomplete-search-async-args';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skyAutocompleteSearchAsyncDisabled',\n standalone: false,\n})\nexport class SkyAutocompleteSearchAsyncDisabledPipe implements PipeTransform {\n public transform(\n searchAsync: EventEmitter<SkyAutocompleteSearchAsyncArgs>,\n searchAsyncDisabled: boolean | undefined,\n ): boolean {\n return searchAsyncDisabled || searchAsync.observers.length === 0;\n }\n}\n","/**\n * Removes diacritical characters from strings and replaces them with their normalized equivalent.\n * For example: è becomes e, Å becomes A.\n */\nexport function normalizeDiacritics(value: string): string {\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n","import {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n inject,\n} from '@angular/core';\nimport { SkyCoreAdapterService, SkyOverlayInstance } from '@skyux/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyAutocompleteAdapterService {\n readonly #coreAdapterService = inject(SkyCoreAdapterService);\n\n #renderer: Renderer2 = inject(RendererFactory2).createRenderer(\n undefined,\n null,\n );\n\n /**\n * Adds the className for the provided element.\n */\n public addCSSClass(element: HTMLElement, className: string): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (element) {\n this.#renderer.addClass(element, className);\n }\n }\n\n public getOverlayFocusableElements(\n overlay: SkyOverlayInstance,\n ): HTMLElement[] {\n return this.#coreAdapterService.getFocusableChildren(\n /* Sanity check - calling function also has null check */\n /* istanbul ignore next */\n overlay?.componentRef.location.nativeElement,\n { ignoreTabIndex: true },\n );\n }\n\n /**\n * Removes the className for the provided element.\n */\n public removeCSSClass(element: HTMLElement, className: string): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (element) {\n this.#renderer.removeClass(element, className);\n }\n }\n\n public setDropdownWidth(\n elementRef: ElementRef,\n dropdownRef: ElementRef,\n isInputBox: boolean,\n ): void {\n // `setTimeout` ensures that the input box size is correct when grabbing the width. When the input is initially focused a parent's `overflow-y: auto` value can cause the width to be incorrect during initial rendering.\n setTimeout(() => {\n const parentElement = isInputBox\n ? elementRef.nativeElement.closest('.sky-input-box')\n : elementRef.nativeElement;\n if (parentElement) {\n const width = parentElement.getBoundingClientRect().width;\n this.#renderer.setStyle(\n dropdownRef.nativeElement,\n 'width',\n `${width}px`,\n );\n }\n });\n }\n\n /**\n * Sets the `tabIndex` of the `element` to the provided `tabIndex`.\n */\n public setTabIndex(element: HTMLElement, tabIndex: number): void {\n element.tabIndex = tabIndex;\n }\n}\n","import { normalizeDiacritics } from '../shared/sky-lookup-string-utils';\n\nimport { SkyAutocompleteDefaultSearchFunctionOptions } from './types/autocomplete-default-search-function-options';\nimport { SkyAutocompleteSearchArgs } from './types/autocomplete-search-args';\nimport { SkyAutocompleteSearchFunction } from './types/autocomplete-search-function';\nimport { SkyAutocompleteSearchFunctionFilter } from './types/autocomplete-search-function-filter';\nimport { SkyAutocompleteSearchFunctionResponse } from './types/autocomplete-search-function-response';\n\nexport function skyAutocompleteDefaultSearchFunction(\n options: SkyAutocompleteDefaultSearchFunctionOptions,\n): SkyAutocompleteSearchFunction {\n const filterData = function (\n searchText: string,\n data: any[],\n args?: SkyAutocompleteSearchArgs,\n ): any[] {\n return data.filter((item: any) => {\n if (!options.searchFilters || !options.searchFilters.length) {\n return true;\n }\n\n // Find the first failing filter (we can skip the others if one fails).\n const failedFilter = options.searchFilters.find(\n (filter: SkyAutocompleteSearchFunctionFilter) => {\n return !filter.call({}, searchText, item, args);\n },\n );\n\n return failedFilter === undefined;\n });\n };\n\n const search = function (\n searchText: string,\n data: any[],\n args?: SkyAutocompleteSearchArgs,\n ): SkyAutocompleteSearchFunctionResponse {\n const results: any[] = [];\n\n const searchTextNormalized = normalizeDiacritics(searchText).toUpperCase();\n\n const filteredData = filterData(searchText, data, args);\n\n /* Autocomplete can now send empty text, return all filtered data in that scenario */\n if (searchText === '') {\n return filteredData;\n }\n\n for (let i = 0, n = filteredData.length; i < n; i++) {\n const result = filteredData[i];\n const isMatch = options.propertiesToSearch.find((property: string) => {\n let value = (result[property] || '').toString();\n value = normalizeDiacritics(value).toUpperCase();\n return value.indexOf(searchTextNormalized) > -1;\n });\n\n if (isMatch) {\n results.push(result);\n }\n }\n\n return results;\n };\n\n return search;\n}\n","/**\n * @internal\n */\nexport enum SkyAutocompleteMessageType {\n /**\n * Closes the dropdown.\n */\n CloseDropdown = 0,\n\n /**\n * Repositions the dropdown.\n */\n RepositionDropdown = 1,\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n booleanAttribute,\n inject,\n input,\n} from '@angular/core';\nimport {\n SKY_STACKING_CONTEXT,\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyLiveAnnouncerService,\n SkyOverlayInstance,\n SkyOverlayService,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n Subscription,\n from,\n fromEvent as observableFromEvent,\n of,\n} from 'rxjs';\nimport {\n debounceTime,\n delay,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n} from 'rxjs/operators';\n\nimport { normalizeDiacritics } from '../shared/sky-lookup-string-utils';\n\nimport { SkyAutocompleteAdapterService } from './autocomplete-adapter.service';\nimport { skyAutocompleteDefaultSearchFunction } from './autocomplete-default-search-function';\nimport { SkyAutocompleteInputDirective } from './autocomplete-input.directive';\nimport { SkyAutocompleteMessage } from './types/autocomplete-message';\nimport { SkyAutocompleteMessageType } from './types/autocomplete-message-type';\nimport { SkyAutocompleteSearchAsyncArgs } from './types/autocomplete-search-async-args';\nimport { SkyAutocompleteSearchAsyncResult } from './types/autocomplete-search-async-result';\nimport { SkyAutocompleteSearchFunction } from './types/autocomplete-search-function';\nimport { SkyAutocompleteSearchFunctionFilter } from './types/autocomplete-search-function-filter';\nimport { SkyAutocompleteSelectionChange } from './types/autocomplete-selection-change';\nimport { SkyAutocompleteShowMoreArgs } from './types/autocomplete-show-more-args';\n\n/**\n * @internal\n */\ninterface SkyAutocompleteSearchResult {\n elementId: string;\n data: any;\n}\n\nlet uniqueId = 0;\n\n@Component({\n selector: 'sky-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n providers: [SkyAutocompleteAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyAutocompleteComponent implements OnDestroy, AfterViewInit {\n //#region public_api\n\n /**\n * The HTML element ID of the element that labels\n * the autocomplete text input. This sets the input's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n /**\n * The static data source for the autocomplete component to search\n * when users enter text. For a dynamic data source, such as an array that\n * changes due to server calls, use `search` or `searchAsync` instead.\n * You can specify static data, such as an array of objects,\n * or you can pull data from a database.\n */\n @Input()\n public set data(value: any[] | undefined) {\n this.#_data = value ?? [];\n }\n\n public get data(): any[] {\n return this.#_data;\n }\n\n /**\n * How many milliseconds to wait before searching while users\n * enter text in the autocomplete field.\n * @default 0\n */\n @Input()\n public set debounceTime(value: number | undefined) {\n this.#_debounceTime = value ?? 0;\n }\n\n public get debounceTime(): number {\n return this.#_debounceTime;\n }\n\n /**\n * The object property to display in the text input after users\n * select an item in the dropdown list.\n * @default \"name\"\n */\n @Input()\n public set descriptorProperty(value: string | undefined) {\n this.#_descriptorProperty = value || 'name';\n }\n\n public get descriptorProperty(): string {\n return this.#_descriptorProperty;\n }\n\n /**\n * Hint text to show in the dropdown\n * @internal\n */\n @Input()\n public dropdownHintText: string | undefined;\n\n /**\n * @internal\n * Whether to display a button in the dropdown that opens a picker where users can view all options.\n */\n @Input()\n public set enableShowMore(value: boolean | undefined) {\n this.#_enableShowMore = !!value;\n this.#updateIsResultsVisible();\n }\n public get enableShowMore(): boolean {\n return this.#_enableShowMore;\n }\n\n /**\n * The observable of `SkyAutocompleteMessage` that can close the dropdown.\n * @internal\n */\n @Input()\n public set messageStream(value: Subject<SkyAutocompleteMessage> | undefined) {\n this.#_messageStream = value ?? new Subject<SkyAutocompleteMessage>();\n this.#initMessageStream();\n }\n\n public get messageStream(): Subject<SkyAutocompleteMessage> {\n return this.#_messageStream;\n }\n\n /**\n * @internal\n */\n @Input()\n public wrapperClass: string | undefined;\n\n /**\n * The object properties to search.\n * @default [\"name\"]\n * @deprecated We recommend against using this property. To search specific properties, use the `searchAsync` event instead.\n */\n @Input()\n public set propertiesToSearch(value: string[] | undefined) {\n this.#_propertiesToSearch = value ?? ['name'];\n\n this.#updateDefaultSearchOptions();\n }\n\n public get propertiesToSearch(): string[] {\n return this.#_propertiesToSearch;\n }\n\n /**\n * The function that dynamically manages the data to display in search results when users\n * change the text in the autocomplete field. The search function must return\n * an array or a promise of an array. The `search` property is particularly\n * useful when the data source does not live in the source code.\n * @deprecated We recommend against using this property. To call a remote data source, use the `searchAsync` event instead.\n */\n @Input()\n public set search(value: SkyAutocompleteSearchFunction | undefined) {\n this.#_search = value;\n this.searchOrDefault =\n value ||\n skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n });\n }\n\n public get search(): SkyAutocompleteSearchFunction | undefined {\n return this.#_search;\n }\n\n /**\n * The template that formats each search result in the dropdown list.\n * The autocomplete component injects search result values into the template\n * as `item` variables that reference all of the object properties of the search results.\n */\n @Input()\n public searchResultTemplate: TemplateRef<unknown> | undefined;\n\n /**\n * The minimum number of characters that users must enter before\n * the autocomplete component searches the data source and displays search\n * results in the dropdown list. Can be set to `0` to trigger `searchAsync` on focus\n * or return all items if using the `data` input.\n * @default 1\n */\n @Input()\n public set searchTextMinimumCharacters(value: number | undefined) {\n if (value !== undefined && value >= 0) {\n this.#_searchTextMinimumCharacters = value;\n } else {\n this.#_searchTextMinimumCharacters = 1;\n }\n }\n\n public get searchTextMinimumCharacters(): number {\n return this.#_searchTextMinimumCharacters;\n }\n\n /**\n * The array of functions to call against each search result. This filters\n * the search results when using the `data` input and the default search function.\n * When the `search` property specifies a custom search function, you must\n * manually apply filters inside that function. The function must return `true`\n * or `false` for each result to indicate whether to display it in the dropdown list.\n *\n * @deprecated We recommend against using this property. To filter results, use the `searchAsync` event instead.\n */\n @Input()\n public set searchFilters(\n value: SkyAutocompleteSearchFunctionFilter[] | undefined,\n ) {\n this.#_searchFilters = value;\n\n this.#updateDefaultSearchOptions();\n }\n\n public get searchFilters():\n | SkyAutocompleteSearchFunctionFilter[]\n | undefined {\n return this.#_searchFilters;\n }\n\n /**\n * The maximum number of search results to display in the dropdown list.\n * By default, the component displays all matching results.\n */\n @Input()\n public set searchResultsLimit(value: number | undefined) {\n this.#_searchResultsLimit = value || 0;\n }\n\n public get searchResultsLimit(): number {\n return this.#_searchResultsLimit;\n }\n\n /**\n * @internal\n * Whether to display a button that lets users add options to the data source.\n * @default false\n */\n @Input()\n public set showAddButton(value: boolean | undefined) {\n this.#_showAddButton = !!value;\n this.#updateIsResultsVisible();\n }\n public get showAddButton(): boolean {\n return this.#_showAddButton;\n }\n\n /**\n * The text to display when no search results are found.\n * @default \"No matches found\"\n */\n @Input()\n public noResultsFoundText: string | undefined;\n\n /**\n * @internal\n * Allows async search to be disabled even when a listener is specified for\n * the `searchAsync` output.\n * @default false\n */\n @Input()\n public searchAsyncDisabled: boolean | undefined = false;\n\n /**\n * When using `searchAsync`, allows the user to specify arbitrary\n * values not in the search results. This only works in combination\n * with `searchAsync`.\n * @default false\n */\n public allowAnyValue = input(false, { transform: booleanAttribute });\n\n /**\n * Highlights the search text in each search result. Set this to `false`\n * when your search returns results that aren't exact text matches, such as\n * returning \"Bob\" for \"Robert.\"\n * @default true\n */\n public highlightSearchText = input(true, { transform: booleanAttribute });\n\n /**\n * @internal\n * Fires when users select the button to add options to the data source.\n */\n @Output()\n public addClick = new EventEmitter<void>();\n\n /**\n * @internal\n * Fires when users select the button to view all options.\n */\n @Output()\n public showMoreClick = new EventEmitter<SkyAutocompleteShowMoreArgs>();\n\n /**\n * Fires when users select items in the dropdown list.\n */\n @Output()\n public selectionChange = new EventEmitter<SkyAutocompleteSelectionChange>();\n\n /**\n * Fires when users enter new search information and allows results to be\n * returned via an observable.\n */\n @Output()\n public searchAsync = new EventEmitter<SkyAutocompleteSearchAsyncArgs>();\n\n /**\n * @internal\n */\n @Output()\n public openChange = new EventEmitter<boolean>();\n\n //#endregion\n\n //#region template_properties\n\n public get searchResults(): SkyAutocompleteSearchResult[] {\n return this.#_searchResults || [];\n }\n\n public set searchResults(value: SkyAutocompleteSearchResult[]) {\n this.#_searchResults = value;\n }\n\n public get highlightText(): string[] {\n return this.#_highlightText || [];\n }\n\n public set highlightText(value: string[]) {\n this.#_highlightText = value;\n }\n\n public isOpen = false;\n\n public resultsListId: string;\n\n public resultsWrapperId: string;\n\n public searchText = '';\n\n public get showActionsArea(): boolean {\n return !!this.showAddButton || !!this.enableShowMore;\n }\n\n public isSearchingAsync = false;\n\n public searchResultsCount: number | undefined;\n\n //#endregion\n\n @ContentChild(SkyAutocompleteInputDirective)\n public set inputDirective(\n directive: SkyAutocompleteInputDirective | undefined,\n ) {\n if (!directive) {\n throw Error(\n [\n 'The SkyAutocompleteComponent requires a ContentChild input or',\n 'textarea bound with the SkyAutocomplete directive. For example:',\n '`<input type=\"text\" skyAutocomplete>`.',\n ].join(' '),\n );\n }\n\n if (this.#_inputDirective !== directive) {\n // Unsubscribe from old subscriptions on any previous input directive\n this.#inputDirectiveUnsubscribe.next();\n\n this.#_inputDirective = directive;\n\n this.#_inputDirective.displayWith = this.descriptorProperty;\n\n this.#_inputDirective.textChanges\n .pipe(\n takeUntil(this.#inputDirectiveUnsubscribe),\n debounceTime(this.debounceTime),\n switchMap((change) => {\n this.isSearchingAsync = true;\n return of(change);\n }),\n )\n .subscribe((change) => {\n this.#searchTextChanged(change.value);\n });\n\n // We delay this listener by 25ms to give things watching the value time to respond (such as the search button).\n this.#_inputDirective.blur\n .pipe(delay(25), takeUntil(this.#inputDirectiveUnsubscribe))\n .subscribe(() => {\n this.#handleInputExit();\n this.#closeDropdown();\n this.#cancelCurrentSearch();\n directive.onTouched();\n this.#hasFocus = false;\n this.#liveAnnounceService.clear();\n });\n\n this.#_inputDirective.focus\n .pipe(takeUntil(this.#inputDirectiveUnsubscribe))\n .subscribe(() => {\n this.#hasFocus = true;\n if (this.showActionsArea || this.dropdownHintText) {\n this.#openDropdown();\n }\n if (this.searchTextMinimumCharacters === 0) {\n this.isSearchingAsync = true;\n this.#searchTextChanged('');\n }\n });\n }\n }\n\n public get inputDirective(): SkyAutocompleteInputDirective | undefined {\n return this.#_inputDirective;\n }\n\n @ViewChild('resultsTemplateRef', { read: TemplateRef })\n public resultsTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('resultsRef', { read: ElementRef })\n public set resultsRef(value: ElementRef | undefined) {\n if (value) {\n this.#_resultsRef = value;\n this.#destroyAffixer();\n this.#createAffixer();\n }\n }\n\n public get resultsRef(): ElementRef | undefined {\n return this.#_resultsRef;\n }\n\n public searchOrDefault: SkyAutocompleteSearchFunction;\n\n protected isResultsVisible: Observable<boolean>;\n\n /**\n * Index that indicates which descendant of the overlay currently has focus.\n */\n #activeElementIndex = -1;\n\n readonly #adapterService = inject(SkyAutocompleteAdapterService);\n\n #affixer: SkyAffixer | undefined;\n\n readonly #affixService = inject(SkyAffixService);\n\n readonly #changeDetector = inject(ChangeDetectorRef);\n\n readonly #elementRef = inject(ElementRef);\n\n readonly #environmentInjector = inject(EnvironmentInjector);\n\n readonly #liveAnnounceService = inject(SkyLiveAnnouncerService);\n\n readonly #libResourceService = inject(SkyLibResourcesService);\n\n #hasFocus = false;\n\n readonly #inputBoxHostSvc = inject(SkyInputBoxHostService, {\n optional: true,\n });\n\n #inputDirectiveUnsubscribe = new Subject<void>();\n\n #messageStreamSub: Subscription | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #overlay: SkyOverlayInstance | undefined;\n\n readonly #overlayService = inject(SkyOverlayService);\n\n /**\n * Elements within the autocomplete dropdown that are focusable.\n * These are typically the search results and action buttons, but could also be\n * elements provided in the consumer's own template.\n */\n #overlayFocusableElements: HTMLElement[] = [];\n\n #currentSearchSub: Subscription | undefined;\n\n #isResultsVisible = new BehaviorSubject<boolean>(false);\n\n readonly #zIndex: Observable<number> | undefined = inject(\n SKY_STACKING_CONTEXT,\n { optional: true },\n )?.zIndex;\n\n #_data: any[] = [];\n\n #_debounceTime = 0;\n\n #_descriptorProperty = 'name';\n\n #_enableShowMore = false;\n\n #_highlightText: string[] | undefined;\n\n #_inputDirective: SkyAutocompleteInputDirective | undefined;\n\n #_messageStream = new Subject<SkyAutocompleteMessage>();\n\n #_propertiesToSearch = ['name'];\n\n #_resultsRef: ElementRef | undefined;\n\n #_search: SkyAutocompleteSearchFunction | undefined;\n\n #_searchFilters: SkyAutocompleteSearchFunctionFilter[] | undefined;\n\n #_searchResults: SkyAutocompleteSearchResult[] | undefined;\n\n #_searchResultsLimit = 0;\n\n #_searchTextMinimumCharacters = 1;\n\n #_showAddButton = false;\n\n constructor() {\n this.searchOrDefault = skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: ['name'],\n searchFilters: undefined,\n });\n\n const id = ++uniqueId;\n this.resultsListId = `sky-autocomplete-list-${id}`;\n this.resultsWrapperId = `sky-autocomplete-wrapper-${id}`;\n this.isResultsVisible = this.#isResultsVisible.asObservable();\n }\n\n public ngAfterViewInit(): void {\n this.#addInputEventListeners();\n }\n\n public ngOnDestroy(): void {\n this.#cancelCurrentSearch();\n this.#inputDirectiveUnsubscribe.next();\n this.#inputDirectiveUnsubscribe.complete();\n this.#isResultsVisible.complete();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#destroyAffixer();\n this.#destroyOverlay();\n this.openChange.complete();\n }\n\n public addButtonClicked(): void {\n this.addClick.emit();\n if (this.inputDirective) {\n this.inputDirective.restoreInputTextValueToPreviousState();\n }\n this.#closeDropdown();\n }\n\n public handleKeydown(event: KeyboardEvent): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (event.key) {\n const key = event.key.toLowerCase();\n const activeElement = this.#getActiveElement();\n const activeElementId = activeElement?.id;\n const targetIsSearchResult = this.searchResults.find(\n (r) => r.elementId === activeElementId,\n );\n\n switch (key) {\n case 'enter':\n if (targetIsSearchResult) {\n this.#selectSearchResultById(activeElementId);\n\n if (!this.showActionsArea && !this.dropdownHintText) {\n this.#closeDropdown();\n } else {\n this.#resetSearch();\n }\n } else {\n if (activeElement) {\n activeElement.dispatchEvent(new MouseEvent('click'));\n }\n }\n\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case 'tab':\n if (targetIsSearchResult) {\n this.#selectSearchResultById(activeElementId);\n } else {\n this.#handleInputExit();\n }\n\n this.#closeDropdown();\n break;\n\n case 'escape':\n this.#closeDropdown();\n break;\n\n case 'arrowdown':\n case 'down':\n this.#removeFocusedClass();\n if (\n this.#activeElementIndex ===\n this.#overlayFocusableElements.length - 1 ||\n this.#activeElementIndex === -1\n ) {\n this.#activeElementIndex = 0;\n } else {\n this.#activeElementIndex = this.#activeElementIndex + 1;\n }\n this.#addFocusedClass();\n this.#changeDetector.markForCheck();\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case 'arrowup':\n case 'up':\n this.#removeFocusedClass();\n if (this.#activeElementIndex <= 0) {\n this.#activeElementIndex =\n this.#overlayFocusableElements.length - 1;\n } else {\n this.#activeElementIndex = this.#activeElementIndex - 1;\n }\n this.#addFocusedClass();\n this.#changeDetector.markForCheck();\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n }\n\n #announceResults(): void {\n this.#libResourceService\n .getStrings({\n noResults: 'skyux_autocomplete_no_results',\n singleCountResult: 'skyux_autocomplete_one_result',\n multipleCountResults: [\n 'skyux_autocomplete_multiple_results',\n this.searchResultsCount,\n ],\n })\n .pipe(take(1))\n .subscribe((localizedStrings) => {\n let announcementString = '';\n if (this.searchResultsCount && this.searchResultsCount > 0) {\n announcementString =\n this.searchResultsCount === 1\n ? localizedStrings.singleCountResult\n : localizedStrings.multipleCountResults;\n this.#liveAnnounceService.announce(announcementString);\n } else if (this.searchResultsCount === 0) {\n this.#liveAnnounceService.announce(localizedStrings.noResults);\n }\n });\n }\n\n public moreButtonClicked(): void {\n this.showMoreClick.emit({ inputValue: this.searchText });\n if (this.inputDirective) {\n this.inputDirective.restoreInputTextValueToPreviousState();\n }\n this.#closeDropdown();\n }\n\n public onResultClick(id: string, event: MouseEvent): void {\n this.#selectSearchResultById(id);\n\n if (!this.showActionsArea && !this.dropdownHintText) {\n this.#closeDropdown();\n } else {\n this.#resetSearch();\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n public onResultMouseMove(id: number): void {\n if (id !== this.#activeElementIndex) {\n this.#removeFocusedClass();\n this.#activeElementIndex = id;\n this.#addFocusedClass();\n this.#changeDetector.markForCheck();\n }\n }\n\n public isElementFocused(ref: HTMLElement): boolean {\n return ref === this.#overlayFocusableElements[this.#activeElementIndex];\n }\n\n #searchTextChanged(searchText: string | undefined): void {\n // reaffix the dropdown during searching when the wait shrinks it.\n if (this.isOpen) {\n setTimeout(() => {\n if (this.#affixer) {\n this.#affixer.reaffix();\n }\n });\n }\n if (this.#hasFocus) {\n this.#openDropdown();\n if (!searchText?.trim() && this.searchTextMinimumCharacters !== 0) {\n this.#handleEmptySearchText();\n return;\n }\n\n const trimmedSearchText = searchText?.trim() || '';\n const isLongEnough =\n trimmedSearchText.length >= this.searchTextMinimumCharacters;\n const isDifferent =\n searchText !== this.searchText ||\n (this.searchText === '' && this.searchTextMinimumCharacters === 0);\n\n this.searchText = trimmedSearchText.trim();\n this.#updateIsResultsVisible();\n\n if (isLongEnough && isDifferent) {\n this.#performSearchAndUpdateResults();\n } else {\n this.isSearchingAsync = false;\n this.#changeDetector.markForCheck();\n }\n } else {\n this.isSearchingAsync = false;\n }\n }\n\n #handleEmptySearchText(): void {\n // Emit selectionChange if value has been cleared.\n if (this.inputDirective && this.inputDirective.value) {\n this.inputDirective.value = undefined;\n this.selectionChange.emit({ selectedItem: undefined });\n }\n\n if (!this.showActionsArea && !this.dropdownHintText) {\n this.#closeDropdown();\n } else {\n this.#resetSearch();\n }\n\n this.isSearchingAsync = false;\n this.#changeDetector.markForCheck();\n }\n\n #handleInputExit(): void {\n const inputDirective = this.inputDirective;\n const hasInputText = !!inputDirective?.inputTextValue.trim();\n\n if (!hasInputText && inputDirective?.value?.[this.descriptorProperty]) {\n inputDirective.value = undefined;\n this.selectionChange.emit({ selectedItem: undefined });\n } else if (hasInputText) {\n inputDirective?.restoreInputTextValueToPreviousState();\n }\n }\n\n #performSearchAndUpdateResults(): void {\n this.#cancelCurrentSearch();\n\n this.#currentSearchSub = this.#performSearch().subscribe({\n next: (result) => {\n const items = (\n result?.items as Record<string, unknown>[] | undefined\n )?.filter((item) => {\n return item && this.descriptorProperty in item;\n });\n\n this.searchResults =\n items?.map((r, i) => {\n const result: SkyAutocompleteSearchResult = {\n elementId: `${this.resultsListId}-item-${i}`,\n data: r,\n };\n return result;\n }) || [];\n\n this.searchResultsCount = result?.totalCount || 0;\n\n this.#displayResultsDropdown();\n },\n complete: () => {\n this.isSearchingAsync = false;\n this.#changeDetector.markForCheck();\n },\n });\n }\n\n #displayResultsDropdown(): void {\n this.highlightText = this.#getHighlightText(this.searchText);\n this.#removeFocusedClass();\n this.#removeActiveDescendant();\n if (this.searchResults.length > 0 && this.searchText) {\n this.#activeElementIndex = 0;\n } else {\n this.#activeElementIndex = -1;\n }\n\n this.#updateIsResultsVisible();\n this.#changeDetector.markForCheck();\n\n // Safety check\n /* istanbul ignore else */\n if (this.isOpen) {\n // Let the results populate in the DOM before recalculating placement.\n setTimeout(() => {\n if (this.#affixer) {\n this.#affixer.reaffix();\n this.#changeDetector.detectChanges();\n this.#initOverlayFocusableElements();\n }\n });\n } else {\n this.#openDropdown();\n this.#changeDetector.markForCheck();\n }\n }\n\n #performSearch(): Observable<SkyAutocompleteSearchAsyncResult | undefined> {\n if (!this.searchAsyncDisabled && this.searchAsync.observers.length > 0) {\n const searchAsyncArgs: SkyAutocompleteSearchAsyncArgs = {\n displayType: 'popover',\n offset: 0,\n searchText: this.searchText,\n };\n\n this.searchAsync.emit(searchAsyncArgs);\n\n return this.allowAnyValue()\n ? this.#combineSearchTextWithResult(searchAsyncArgs)\n : searchAsyncArgs.result?.pipe(take(1)) || of(undefined);\n }\n\n const result = this.searchOrDefault(this.searchText, this.data, {\n context: 'popover',\n });\n\n if (result instanceof Array) {\n return of({ items: result, totalCount: result.length });\n }\n\n return from(result).pipe(\n map((items) => {\n return { items, totalCount: items.length };\n }),\n );\n }\n\n #combineSearchTextWithResult(\n searchAsyncArgs: SkyAutocompleteSearchAsyncArgs,\n ): Observable<SkyAutocompleteSearchAsyncResult> {\n const searchTextItem = { [this.descriptorProperty]: this.searchText };\n const searchTextResult = { items: [searchTextItem], totalCount: 1 };\n\n if (searchAsyncArgs.result) {\n return searchAsyncArgs.result.pipe(\n take(1),\n map((result) => {\n if (\n (result.items as Record<string, string>[]).some(\n (item) => item[this.descriptorProperty] === this.searchText,\n )\n ) {\n return result;\n }\n\n // Include a result for the current search text as the first option\n // if no exact match is found in the results.\n return { ...result, items: [searchTextItem, ...result.items] };\n }),\n // Display the current search text immediately while async results load.\n startWith<SkyAutocompleteSearchAsyncResult>(searchTextResult),\n );\n }\n\n return of(searchTextResult);\n }\n\n #cancelCurrentSearch(): void {\n if (this.#currentSearchSub) {\n this.#currentSearchSub.unsubscribe();\n this.#currentSearchSub = undefined;\n }\n }\n\n /**\n * Returns the text to highlight based on exact matches, case-insensitive matches, and matches for corresponding diacritical characters (a will match à).\n */\n #getHighlightText(searchText: string): string[] {\n if (this.highlightSearchText()) {\n const normalizedSearchText = normalizeDiacritics(searchText)\n .toLocaleUpperCase()\n .trim();\n if (!normalizedSearchText) {\n return [];\n }\n\n let matchesToHighlight: string[] = [];\n for (let i = 0, n = this.searchResults.length; i < n; i++) {\n const value = this.searchResults[i].data[this.descriptorProperty]\n .toString()\n .toLocaleUpperCase() as string;\n const normalizedDataValue = normalizeDiacritics(value);\n\n let offset = 0;\n let index: number;\n while (\n (index = normalizedDataValue.indexOf(normalizedSearchText, offset)) >\n -1\n ) {\n const matchedString = value.slice(index, index + searchText.length);\n offset = index + searchText.length;\n matchesToHighlight = matchesToHighlight.concat(matchedString);\n }\n }\n\n // Remove any duplicates from the array.\n return [...new Set(matchesToHighlight)];\n }\n\n return [];\n }\n\n #selectSearchResultById(id: string): void {\n const result = this.searchResults.find((r) => r.elementId === id);\n /* istanbul ignore else */\n if (result) {\n const data = result.data;\n this.searchText = data[this.descriptorProperty];\n if (this.inputDirective) {\n this.inputDirective.value = data;\n }\n this.selectionChange.emit({ selectedItem: data });\n }\n }\n\n #openDropdown(): void {\n if (!this.#overlay && this.resultsTemplateRef) {\n const overlay = this.#overlayService.create({\n enableClose: false,\n enablePointerEvents: true,\n environmentInjector: this.#environmentInjector,\n wrapperClass: this.wrapperClass,\n });\n\n if (this.#zIndex) {\n this.#zIndex.pipe(takeUntil(overlay.closed)).subscribe((zIndex) => {\n overlay.componentRef.instance.zIndex = zIndex.toString(10);\n });\n }\n\n overlay.attachTemplate(this.resultsTemplateRef);\n\n this.#overlay = overlay;\n this.isOpen = true;\n this.#updateIsResultsVisible();\n this.#changeDetector.markForCheck();\n this.#updateAriaControls();\n this.#initOverlayFocusableElements();\n this.#announceResults();\n this.openChange.emit(true);\n }\n }\n\n #closeDropdown(): void {\n this.#resetSearch();\n this.isOpen = false;\n this.#destroyOverlay();\n this.#removeActiveDescendant();\n this.#updateAriaControls();\n this.#changeDetector.markForCheck();\n this.openChange.emit(false);\n }\n\n #setActiveDescendant(): void {\n const activeElement =\n this.#overlayFocusableElements[this.#activeElementIndex];\n /* Sanity check */\n /* istanbul ignore else */\n if (activeElement && this.inputDirective) {\n this.inputDirective.setActiveDescendant(activeElement.id);\n }\n }\n\n #removeActiveDescendant(): void {\n if (this.inputDirective) {\n this.inputDirective.setActiveDescendant(null);\n }\n }\n\n #updateAriaControls(): void {\n if (this.inputDirective) {\n this.inputDirective.setAriaControls(this.#overlay?.id || null);\n }\n }\n\n #resetSearch(): void {\n this.searchResults = [];\n this.searchText = '';\n this.highlightText = [];\n this.#removeFocusedClass();\n this.#activeElementIndex = -1;\n this.searchResultsCount = undefined;\n this.#removeActiveDescendant();\n this.#initOverlayFocusableElements();\n this.#updateIsResultsVisible();\n this.#changeDetector.markForCheck();\n }\n\n #addInputEventListeners(): void {\n const element = this.#elementRef.nativeElement;\n\n observableFromEvent<KeyboardEvent>(element, 'keydown')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((event) => {\n this.handleKeydown(event);\n });\n\n observableFromEvent(window, 'resize')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen && this.resultsRef) {\n this.#adapterService.setDropdownWidth(\n this.#elementRef,\n this.resultsRef,\n !!this.#inputBoxHostSvc,\n );\n }\n });\n }\n\n #destroyOverlay(): void {\n if (this.#overlay) {\n this.#overlayService.close(this.#overlay);\n this.#overlay = undefined;\n }\n }\n\n #createAffixer(): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (!this.#affixer && this.resultsRef) {\n const affixer = this.#affixService.createAffixer(this.resultsRef);\n\n this.#adapterService.setDropdownWidth(\n this.#elementRef,\n this.resultsRef,\n !!this.#inputBoxHostSvc,\n );\n\n affixer.affixTo(this.#elementRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n isSticky: true,\n placement: 'below',\n horizontalAlignment: 'left',\n });\n\n this.#affixer = affixer;\n }\n }\n\n #destroyAffixer(): void {\n if (this.#affixer) {\n this.#affixer.destroy();\n this.#affixer = undefined;\n }\n }\n\n #initMessageStream(): void {\n if (this.#messageStreamSub) {\n this.#messageStreamSub.unsubscribe();\n this.#messageStreamSub = undefined;\n }\n\n this.#messageStreamSub = this.messageStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((message) => {\n switch (message.type) {\n case SkyAutocompleteMessageType.CloseDropdown:\n this.#closeDropdown();\n break;\n case SkyAutocompleteMessageType.RepositionDropdown:\n // Settimeout waits for changes in DOM (e.g., tokens being removed)\n setTimeout(() => {\n /* istanbul ignore else */\n if (this.#affixer) {\n this.#affixer.reaffix();\n }\n });\n break;\n }\n });\n }\n\n #initOverlayFocusableElements(): void {\n // Wait for dropdown elements to render.\n setTimeout(() => {\n if (this.#overlay) {\n this.#overlayFocusableElements =\n this.#adapterService.getOverlayFocusableElements(this.#overlay);\n this.#overlayFocusableElements.forEach((el) => {\n this.#adapterService.setTabIndex(el, -1);\n });\n this.#addFocusedClass();\n this.#announceResults();\n }\n });\n }\n\n #getActiveElement(): HTMLElement {\n return this.#overlayFocusableElements[this.#activeElementIndex];\n }\n\n #removeFocusedClass(): void {\n if (this.#activeElementIndex > -1) {\n this.#adapterService.removeCSSClass(\n this.#overlayFocusableElements[this.#activeElementIndex],\n 'sky-autocomplete-descendant-focus',\n );\n }\n }\n\n #addFocusedClass(): void {\n if (this.#activeElementIndex > -1) {\n this.#adapterService.addCSSClass(\n this.#overlayFocusableElements[this.#activeElementIndex],\n 'sky-autocomplete-descendant-focus',\n );\n this.#setActiveDescendant();\n }\n }\n\n #updateDefaultSearchOptions(): void {\n // Reset default search if it is what is being used.\n if (this.search !== this.searchOrDefault) {\n this.searchOrDefault = skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n });\n }\n }\n\n #updateIsResultsVisible(): void {\n const isResultsVisible =\n (!!this.searchText || this.searchTextMinimumCharacters === 0) &&\n (!this.showActionsArea || this.searchResults.length > 0);\n if (isResultsVisible !== this.#isResultsVisible.getValue()) {\n this.#isResultsVisible.next(isResultsVisible);\n }\n }\n}\n","<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"\n isOpen &&\n !!(showActionsArea || dropdownHintText || (isResultsVisible | async))\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-controls]=\"\n isOpen &&\n (showActionsArea || dropdownHintText || (isResultsVisible | async))\n ? resultsListId\n : null\n \"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content />\n</div>\n\n<ng-template #resultsTemplateRef>\n <!-- We do not want the blur to fire here so that the dropdown does not close. This is why we are preventing the mousedown default. -->\n <div\n #resultsRef\n class=\"sky-autocomplete-results-container\"\n [attr.id]=\"resultsListId\"\n [skyThemeClass]=\"{ 'sky-shadow': 'default', 'sky-elevation-4': 'modern' }\"\n (mousedown)=\"$event.preventDefault()\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (isSearchingAsync && !allowAnyValue()) {\n <div class=\"sky-autocomplete-results-waiting\">\n <sky-wait [isWaiting]=\"true\" />\n </div>\n } @else {\n @if (isResultsVisible | async) {\n <div\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n >\n @for (result of searchResults; track result.data; let i = $index) {\n @if (\n (!searchResultsLimit || i < searchResultsLimit) &&\n !(enableShowMore && i >= 5)\n ) {\n <div\n #searchResultEl\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.data-descriptor-value]=\"result.data[descriptorProperty]\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (click)=\"onResultClick(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n />\n </div>\n }\n }\n @if (isSearchingAsync && allowAnyValue()) {\n <div class=\"sky-autocomplete-results-waiting\">\n <sky-wait [isWaiting]=\"true\" />\n </div>\n }\n @if (searchResults.length === 0) {\n <div class=\"sky-font-deemphasized sky-autocomplete-no-results\">\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n }\n </div>\n } @else if (dropdownHintText) {\n <div class=\"sky-autocomplete-dropdown-hint-text sky-font-deemphasized\">\n {{ dropdownHintText }}\n </div>\n }\n @if (showActionsArea) {\n <div class=\"sky-autocomplete-actions\">\n @if (\n enableShowMore &&\n (searchTextMinimumCharacters === 0 ||\n !searchText ||\n searchResults.length > 0)\n ) {\n <button\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (click)=\"moreButtonClicked()\"\n >\n @if (\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText &&\n searchTextMinimumCharacters !== 0\n ) {\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n }\n @if (\n ((searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) ||\n (searchTextMinimumCharacters === 0 &&\n searchResultsCount !== undefined &&\n searchResultsCount > 0)) &&\n !searchText\n ) {\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount\n | skyNumeric: { truncate: false }))\n }}\n }\n @if (searchText) {\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount\n | skyNumeric: { truncate: false }))\n }}\n }\n </button>\n }\n @if (\n (searchText || searchTextMinimumCharacters === 0) &&\n searchResults.length === 0\n ) {\n <div\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n }\n @if (showAddButton) {\n <button\n #addButtonEl\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (click)=\"addButtonClicked()\"\n >\n <sky-icon iconName=\"add\" />\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n }\n </div>\n }\n }\n </div>\n</ng-template>\n\n<ng-template #defaultSearchResultTemplate let-item=\"item\">\n {{ item[descriptorProperty] }}\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAffixModule, SkyIdModule, SkyNumericModule } from '@skyux/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTextHighlightModule, SkyWaitModule } from '@skyux/indicators';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkyAutocompleteInputDirective } from './autocomplete-input.directive';\nimport { SkyAutocompleteSearchAsyncDisabledPipe } from './autocomplete-search-async-disabled.pipe';\nimport { SkyAutocompleteComponent } from './autocomplete.component';\n\n@NgModule({\n declarations: [\n SkyAutocompleteComponent,\n SkyAutocompleteInputDirective,\n SkyAutocompleteSearchAsyncDisabledPipe,\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyAffixModule,\n SkyTextHighlightModule,\n SkyIconModule,\n SkyIdModule,\n SkyLookupResourcesModule,\n SkyNumericModule,\n SkyThemeModule,\n SkyWaitModule,\n ],\n exports: [SkyAutocompleteComponent, SkyAutocompleteInputDirective],\n})\nexport class SkyAutocompleteModule {}\n","import { type Country } from 'intl-tel-input/data';\n\nimport type { SkyCountryFieldCountry } from './types/country';\n\n/**\n * Clone the country data for each component instance to avoid overwriting\n * the global country data.\n */\nexport function cloneCountryData(\n data: Country[],\n locales: Intl.LocalesArgument,\n): SkyCountryFieldCountry[] {\n const clone = [...data];\n const displayNames = new Intl.DisplayNames(locales, { type: 'region' });\n\n return clone.map((country) => {\n const mapped: SkyCountryFieldCountry = {\n iso2: country.iso2,\n dialCode: country.dialCode,\n name:\n country.name ||\n displayNames.of(country.iso2.toUpperCase()) ||\n /* istanbul ignore next */ '',\n priority: country.priority,\n };\n\n if (country.areaCodes) {\n mapped.areaCodes = [...country.areaCodes];\n }\n\n return mapped;\n });\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { SkyCountryFieldContext } from './country-field-context';\n\n/**\n * @internal\n */\nexport const SKY_COUNTRY_FIELD_CONTEXT =\n new InjectionToken<SkyCountryFieldContext>('SkyCountryFieldContext');\n","import { coerceStringArray } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n Type,\n ViewChild,\n ViewEncapsulation,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NgControl,\n NgModel,\n UntypedFormControl,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport intlTelInput from 'intl-tel-input';\nimport { Observable, Subject, map } from 'rxjs';\n\nimport { SkyAutocompleteInputDirective } from '../autocomplete/autocomplete-input.directive';\nimport { SkyAutocompleteSelectionChange } from '../autocomplete/types/autocomplete-selection-change';\n\nimport { cloneCountryData } from './clone-country-data';\nimport { SkyCountryFieldCountry } from './types/country';\nimport { SkyCountryFieldContext } from './types/country-field-context';\nimport { SKY_COUNTRY_FIELD_CONTEXT } from './types/country-field-context-token';\n\nconst DEFAULT_COUNTRY_CODE = 'us';\n\nconst SKY_COUNTRY_FIELD_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyCountryFieldComponent),\n multi: true,\n};\n\nlet uniqueId = 0;\n\n@Component({\n selector: 'sky-country-field',\n templateUrl: './country-field.component.html',\n styleUrls: ['./country-field.component.scss'],\n providers: [SKY_COUNTRY_FIELD_VALIDATOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkyCountryFieldComponent\n implements ControlValueAccessor, OnDestroy, OnInit, Validator\n{\n /**\n * The value for the HTML `autocomplete` attribute on the form input.\n * @default 'off'\n * @deprecated SKY UX only supports browser autofill on components where the direct input matches the return value. This input may not behave as expected due to the dropdown selection interaction.\n */\n public autocompleteAttribute = input<string>();\n\n /**\n * The [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country code for the default country.\n * When search results include the default country, it appears at the top of the list.\n * @default \"us\"\n */\n public readonly defaultCountry = input<string, unknown>(\n DEFAULT_COUNTRY_CODE,\n {\n transform: (value) => String(value || DEFAULT_COUNTRY_CODE).toLowerCase(),\n },\n );\n\n /**\n * Whether to disable the country field on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public set disabled(isDisabled: boolean | undefined) {\n this.#_disabled = isDisabled ?? false;\n\n if (isDisabled) {\n this.countrySearchFormControl.disable();\n } else {\n this.countrySearchFormControl.enable();\n }\n\n this.#changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country codes for the countries that users can select. By default, all countries are available.\n */\n public readonly supportedCountryISOs = input<string[], unknown>([], {\n transform: (value) => coerceStringArray(value).map((v) => v.toLowerCase()),\n });\n\n /**\n * Fires when the selected country changes.\n */\n public readonly selectedCountryChange = output<SkyCountryFieldCountry>();\n\n /**\n * Fires when the country field is focused out.\n * @internal\n */\n // TODO: remove this if no longer needed after a scalable focus monitor service is implemented\n public countryFieldFocusout = output<FocusEvent>();\n\n public readonly countries = computed(() => this.#setupCountries());\n\n public readonly countrySearchFormControl = new UntypedFormControl();\n\n public searchTextMinimumCharacters = 2;\n\n @ViewChild(SkyAutocompleteInputDirective)\n public countrySearchAutocompleteDirective:\n | SkyAutocompleteInputDirective\n | undefined;\n\n public context: SkyCountryFieldContext | null = inject(\n SKY_COUNTRY_FIELD_CONTEXT,\n {\n optional: true,\n },\n );\n\n public inputId = `sky-country-field-input-${uniqueId++}`;\n protected ariaDescribedBy: Observable<string | undefined> | undefined;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n public readonly inputBoxHostSvc = inject(SkyInputBoxHostService, {\n optional: true,\n });\n\n readonly #changeDetector = inject(ChangeDetectorRef);\n\n #defaultCountryData: SkyCountryFieldCountry | undefined;\n\n readonly #injector = inject(Injector);\n\n #isInitialChange = true;\n\n #ngControl: NgControl | null = null;\n\n readonly #ngUnsubscribe = new Subject<void>();\n\n #_disabled = false;\n\n readonly #_selectedCountry = signal<SkyCountryFieldCountry | undefined>(\n undefined,\n );\n readonly #_selectedIsoCountry = computed(\n () => {\n let selectedCountry = this.#_selectedCountry();\n const selectedCountryIso = selectedCountry?.iso2?.toLowerCase();\n if (selectedCountryIso) {\n const isoCountry = this.countries().find(\n (country) => country.iso2 === selectedCountryIso,\n );\n if (isoCountry) {\n selectedCountry = isoCountry;\n }\n }\n return selectedCountry;\n },\n {\n equal: (a, b) => a?.name === b?.name,\n },\n );\n\n readonly #localeProvider = inject(SkyAppLocaleProvider);\n readonly #locale = toSignal(\n this.#localeProvider.getLocaleInfo().pipe(map((loc) => loc.locale)),\n {\n initialValue: this.#localeProvider.defaultLocale,\n },\n );\n\n constructor() {\n // Sync the form control with the resolved selected country.\n // This handles locale changes and ISO normalization reactively.\n effect(() => {\n const newCountry = this.#_selectedIsoCountry();\n this.countrySearchFormControl.setValue(newCountry);\n });\n }\n\n /**\n * Angular lifecycle hook for when the component is initialized\n * @internal\n */\n public ngOnInit(): void {\n this.#updateInputBox();\n\n this.#ngControl = this.#injector.get<NgControl | null>(\n NgControl as unknown as Type<NgControl>,\n null,\n );\n\n if (this.#ngControl) {\n this.#ngControl.valueAccessor = this;\n } else {\n /**\n * The initial change boolean is to determine if the form is setting the value. When no form\n * is present we don't want to ignore the first change.\n */\n this.#isInitialChange = false;\n }\n\n this.#changeDetector.markForCheck();\n }\n\n /**\n * Angular lifecycle hook for when the component is destructed.\n * @internal\n */\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Sets the component's touched value when the autocomplete is blurred\n * @internal\n */\n public onAutocompleteBlur(): void {\n this.onTouched();\n }\n\n /**\n * Sets the country to validate against based on the county's iso2 code.\n * @param newCountry The International Organization for Standardization's two-letter code\n * for the default country.\n * @internal\n */\n public onCountrySelected(newCountry: SkyAutocompleteSelectionChange): void {\n if (newCountry.selectedItem) {\n this.writeValue(\n this.countries().find(\n (countryInfo) => countryInfo.iso2 === newCountry.selectedItem.iso2,\n ),\n );\n } else {\n this.writeValue(undefined);\n }\n }\n\n /**\n * Called when the Autocomplete textarea loses focus\n * @internal\n */\n public onAutocompleteFocusout(e: FocusEvent): void {\n this.countryFieldFocusout.emit(e);\n }\n\n // Angular automatically constructs these methods.\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\n public onChange = (value: SkyCountryFieldCountry | undefined): void => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouched = (): void => {};\n\n public registerOnChange(\n fn: (value: SkyCountryFieldCountry | undefined) => void,\n ): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Allows Angular to disable the input.\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (control.value) {\n const supportedCountryISOs = this.supportedCountryISOs();\n const valueIso2 = control.value.iso2?.toLowerCase();\n if (\n (supportedCountryISOs.length > 0 &&\n supportedCountryISOs.indexOf(valueIso2) < 0) ||\n !this.countries().find((country) => country.iso2 === valueIso2)\n ) {\n return { unsupportedCountry: true };\n }\n }\n\n return null;\n }\n\n public writeValue(value: SkyCountryFieldCountry | undefined): void {\n const current = this.#_selectedIsoCountry();\n if (!this.#countriesAreEqual(current, value)) {\n this.#_selectedCountry.set(value);\n\n if (!this.#isInitialChange) {\n const resolved = this.#_selectedIsoCountry();\n this.onChange(resolved);\n this.onTouched();\n\n if (resolved) {\n this.selectedCountryChange.emit(resolved);\n }\n } else if (this.#ngControl?.control) {\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n this.#ngControl.control.markAsPristine();\n }\n\n this.#isInitialChange = false;\n } else if (!(this.#ngControl instanceof NgModel) || value !== null) {\n this.#isInitialChange = false;\n }\n\n this.#changeDetector.markForCheck();\n }\n\n protected onFocus($event: FocusEvent): void {\n ($event.target as HTMLTextAreaElement).select();\n }\n\n #countriesAreEqual(\n country1: SkyCountryFieldCountry | undefined,\n country2: SkyCountryFieldCountry | undefined,\n ): boolean {\n if (country1 && country2) {\n return country1.iso2 === country2.iso2;\n }\n\n // NOTE: We are doing this in this way because template forms will send through `null`\n // and then `undefined` on empty initialization. These are functionally equivalent but will\n // not pass a standard triple equals check.\n return !country1 && !country2;\n }\n\n #countriesEqual(\n a: SkyCountryFieldCountry,\n b: SkyCountryFieldCountry,\n ): boolean {\n return a.iso2 === b.iso2 && a.name === b.name;\n }\n\n #setupCountries(): SkyCountryFieldCountry[] {\n let countries = cloneCountryData(\n intlTelInput.getCountryData(),\n this.#locale(),\n );\n\n /* istanbul ignore else */\n if (!this.context?.inPhoneField) {\n /**\n * The library we get the country data from includes extra phone properties.\n * We want to remove these unless we are in a phone field\n */\n countries.forEach((country) => {\n delete country.dialCode;\n delete country.areaCodes;\n delete country.priority;\n });\n }\n\n const defaultCountry = this.defaultCountry();\n this.#defaultCountryData = countries.find(\n (country) => country.iso2 === defaultCountry,\n );\n countries = this.#sortCountriesWithSelectedAndDefault(countries);\n\n const supportedCountryISOs = this.supportedCountryISOs();\n if (supportedCountryISOs.length > 0) {\n countries = countries.filter((country: SkyCountryFieldCountry) => {\n return supportedCountryISOs.indexOf(country.iso2) >= 0;\n });\n }\n return countries;\n }\n\n #sortCountriesWithSelectedAndDefault(\n countries: SkyCountryFieldCountry[],\n ): SkyCountryFieldCountry[] {\n const selectedCountry = this.#_selectedCountry();\n let selectedCountryIndex: number;\n let selectedCountryData: SkyCountryFieldCountry;\n\n const sortedNewCountries = countries.sort((a, b) => {\n if (\n ((this.#defaultCountryData &&\n this.#countriesEqual(a, this.#defaultCountryData)) ||\n (a.name && b.name && a.name < b.name)) &&\n (!this.#defaultCountryData ||\n !this.#countriesEqual(this.#defaultCountryData, b))\n ) {\n return -1;\n } else {\n return 1;\n }\n });\n\n if (selectedCountry) {\n // Note: We are looking up this data here to ensure we are using the official data from the\n // library and not the data provided by the user on initialization of the component\n const foundCountry = countries.find(\n (country) => country.iso2 === selectedCountry.iso2.toLowerCase(),\n );\n\n if (foundCountry) {\n selectedCountryData = foundCountry;\n selectedCountryIndex = countries.indexOf(selectedCountryData);\n\n if (selectedCountryIndex >= 0) {\n countries.splice(selectedCountryIndex, 1);\n sortedNewCountries.splice(0, 0, selectedCountryData);\n }\n }\n }\n\n return countries;\n }\n\n #updateInputBox(): void {\n if (this.inputBoxHostSvc && this.inputTemplateRef) {\n this.inputId = this.inputBoxHostSvc.controlId;\n this.ariaDescribedBy = this.inputBoxHostSvc.ariaDescribedBy;\n\n this.inputBoxHostSvc.populate({\n inputTemplate: this.inputTemplateRef,\n });\n }\n }\n}\n","@if (!inputBoxHostSvc) {\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\" />\n}\n\n<ng-template #inputTemplateRef>\n <span\n class=\"sky-country-field-container\"\n [ngClass]=\"{\n 'sky-country-field-disabled': disabled\n }\"\n >\n <sky-autocomplete\n [ariaLabelledBy]=\"inputBoxHostSvc?.labelId ?? inputId\"\n [data]=\"countries()\"\n [dropdownHintText]=\"\n 'skyux_country_field_dropdown_hint_text' | skyLibResources\n \"\n [propertiesToSearch]=\"['name', 'iso2']\"\n [searchResultTemplate]=\"countrySearchResultTemplate\"\n [searchTextMinimumCharacters]=\"searchTextMinimumCharacters\"\n (selectionChange)=\"onCountrySelected($event)\"\n >\n <div class=\"sky-country-field-input\">\n <!-- The check for label text on the aria-label is to allow for backwards compatibility while also respecting label text functionality. -->\n <textarea\n class=\"sky-form-control\"\n name=\"selectedCountry\"\n rows=\"1\"\n skyAutocomplete\n [attr.aria-describedby]=\"ariaDescribedBy | async\"\n [attr.aria-label]=\"\n context?.inPhoneField\n ? ('skyux_country_field_dropdown_hint_text' | skyLibResources)\n : inputBoxHostSvc?.labelText\n ? undefined\n : ('skyux_country_field_dropdown_hint_text' | skyLibResources)\n \"\n [attr.id]=\"inputId\"\n [autocompleteAttribute]=\"autocompleteAttribute()\"\n [formControl]=\"countrySearchFormControl\"\n (blur)=\"onAutocompleteBlur()\"\n (focus)=\"onFocus($event)\"\n (focusout)=\"onAutocompleteFocusout($event)\"\n ></textarea>\n </div>\n </sky-autocomplete>\n </span>\n</ng-template>\n\n<ng-template #countrySearchResultTemplate let-item=\"item\">\n <div class=\"sky-country-field-search-result-flag\">\n <div [ngClass]=\"'iti__flag iti__' + item.iso2.toLowerCase()\"></div>\n </div>\n <div class=\"sky-country-field-search-result-info\">\n {{ item.name }}\n @if (context?.inPhoneField) {\n <span\n class=\"sky-font-deemphasized sky-country-field-search-result-dial-code\"\n >\n {{ item.dialCode }}\n </span>\n }\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyAutocompleteModule } from '../autocomplete/autocomplete.module';\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkyCountryFieldComponent } from './country-field.component';\n\n@NgModule({\n declarations: [SkyCountryFieldComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyAutocompleteModule,\n SkyIconModule,\n SkyLookupResourcesModule,\n SkyThemeModule,\n ],\n exports: [SkyCountryFieldComponent],\n})\nexport class SkyCountryFieldModule {}\n","import { ElementRef, Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkySearchAdapterService {\n public selectInput(searchEl: ElementRef): void {\n this.#getInputEl(searchEl).select();\n }\n\n public focusInput(searchEl: ElementRef): void {\n this.#getInputEl(searchEl).focus();\n }\n\n #getInputEl(searchEl: ElementRef): HTMLInputElement {\n return searchEl.nativeElement.querySelector('input');\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n afterNextRender,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n SkyBreakpoint,\n SkyContentInfo,\n SkyContentInfoProvider,\n SkyMediaQueryService,\n} from '@skyux/core';\n\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nimport { SkySearchAdapterService } from './search-adapter.service';\n\nconst EXPAND_MODE_RESPONSIVE = 'responsive';\nconst EXPAND_MODE_FIT = 'fit';\nconst EXPAND_MODE_NONE = 'none';\n\n@Component({\n selector: 'sky-search',\n templateUrl: './search.component.html',\n styleUrls: ['./search.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [SkySearchAdapterService],\n standalone: false,\n})\nexport class SkySearchComponent implements OnDestroy, OnInit, OnChanges {\n /**\n * The ARIA label for the search input. This sets the search input's `aria-label` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * Use a context-sensitive label, such as \"Search constituents.\" Context is especially important when multiple search inputs are in close proximity.\n * In toolbars, search inputs use the `listDescriptor` to provide context, and the ARIA label defaults to \"Search <listDescriptor>.\"\n * If the box includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n */\n @Input()\n public ariaLabel: string | undefined;\n\n /**\n * The HTML element ID of the element that labels\n * the search. This sets the search's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the box does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n\n /**\n * Fires when the search text is applied.\n */\n @Output()\n public searchApply = new EventEmitter<string>();\n\n /**\n * Fires when the search text is changed.\n */\n @Output()\n public searchChange = new EventEmitter<string>();\n\n /**\n * Fires when the search text is cleared.\n */\n @Output()\n public searchClear = new EventEmitter<void>();\n\n /**\n * Default search criteria for the input.\n */\n @Input()\n public searchText: string | undefined;\n\n /**\n * The expand mode for the search input. The valid options\n * include `\"responsive\"` to collapse the search input into a button on\n * mobile devices, `\"none\"` to *not* collapse the search input on mobile\n * devices, and `\"fit\"` to extend the search input to fit the width of its container.\n * @default \"responsive\"\n */\n @Input()\n public set expandMode(value: string | undefined) {\n this.#_expandMode = value ?? EXPAND_MODE_RESPONSIVE;\n }\n\n public get expandMode(): string {\n return this.#_expandMode;\n }\n\n /**\n * How many milliseconds to wait before searching after users enter text in the search input.\n * @default 0\n */\n @Input()\n public set debounceTime(value: number | undefined) {\n this.#_debounceTime = value ?? 0;\n this.#setupSearchChangedEvent();\n }\n\n public get debounceTime(): number {\n return this.#_debounceTime;\n }\n\n /**\n * Whether to disable the search.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value ?? false;\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * Placeholder text to display in the search input until users\n * enter search criteria.\n * @default \"Find in this list\"\n */\n @Input()\n public placeholderText: string | undefined;\n\n public clearButtonShown = false;\n\n public inputShown = true;\n\n public isCollapsible = true;\n\n public isFullWidth = false;\n\n public mobileSearchShown = false;\n\n public searchButtonShown = false;\n\n protected contentInfoObs: Observable<SkyContentInfo> | undefined;\n\n readonly #changeRef = inject(ChangeDetectorRef);\n\n #contentInfoProvider = inject(SkyContentInfoProvider, { optional: true });\n\n readonly #elRef = inject(ElementRef);\n\n readonly #searchAdapter = inject(SkySearchAdapterService);\n\n #searchUpdated = new Subject<string>();\n\n #searchUpdatedSub: Subscription | undefined;\n\n #_debounceTime = 0;\n\n #_disabled = false;\n\n #_expandMode = EXPAND_MODE_RESPONSIVE;\n\n readonly #destroyRef = inject(DestroyRef);\n readonly #injector = inject(Injector);\n readonly #mediaQuerySvc = inject(SkyMediaQueryService);\n readonly #breakpoint = toSignal(this.#mediaQuerySvc.breakpointChange);\n\n constructor() {\n this.contentInfoObs = this.#contentInfoProvider?.getInfo();\n }\n\n public ngOnInit(): void {\n if (this.#searchShouldCollapse()) {\n this.#mediaQuerySvc.breakpointChange\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((breakpoint) => {\n this.#mediaQueryCallback(breakpoint);\n });\n }\n\n this.#setupSearchChangedEvent();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.#expandModeBindingChanged(changes)) {\n switch (this.expandMode) {\n case EXPAND_MODE_NONE:\n this.isCollapsible = false;\n this.isFullWidth = false;\n break;\n case EXPAND_MODE_FIT:\n this.isCollapsible = false;\n this.isFullWidth = true;\n break;\n default:\n this.isCollapsible = true;\n this.isFullWidth = false;\n break;\n }\n }\n\n if (this.#searchBindingChanged(changes)) {\n this.#searchUpdated.next(this.searchText ?? '');\n this.clearButtonShown = !!(this.searchText && this.searchText !== '');\n if (this.#shouldOpenInput()) {\n this.inputShown = true;\n this.mobileSearchShown = true;\n this.searchButtonShown = false;\n }\n }\n this.#changeRef.detectChanges();\n }\n\n public clearSearchText(): void {\n this.searchText = '';\n this.clearButtonShown = false;\n\n this.#searchAdapter.focusInput(this.#elRef);\n this.#searchUpdated.next(this.searchText);\n\n this.searchApply.emit(this.searchText);\n\n this.searchClear.emit();\n }\n\n public enterPress(\n event: KeyboardEvent,\n searchText: string | undefined,\n ): void {\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.applySearchText(searchText);\n }\n }\n\n public applySearchText(searchText: string | undefined): void {\n // Double check that search text is defined before attempting to trim off whitespace\n if (searchText) {\n searchText = searchText.trim();\n }\n\n if (searchText !== this.searchText) {\n this.searchText = searchText;\n }\n this.clearButtonShown = !!(searchText && searchText !== '');\n if (searchText && searchText !== '') {\n this.#searchAdapter.selectInput(this.#elRef);\n }\n\n this.searchApply.emit(searchText);\n }\n\n public searchTextChanged(searchText: string): void {\n this.searchText = searchText;\n this.#searchUpdated.next(searchText);\n }\n\n public toggleSearchInput(showInput: boolean): void {\n if (this.#searchShouldCollapse()) {\n this.inputShown = showInput;\n\n if (showInput && this.#breakpoint() === 'xs') {\n this.mobileSearchShown = true;\n this.searchButtonShown = false;\n }\n\n if (showInput) {\n afterNextRender(\n () => {\n this.#searchAdapter.focusInput(this.#elRef);\n },\n { injector: this.#injector },\n );\n }\n }\n }\n\n protected onInputTransitionEnd(): void {\n if (!this.inputShown) {\n if (this.#breakpoint() === 'xs' && this.#searchShouldCollapse()) {\n this.searchButtonShown = true;\n }\n\n this.mobileSearchShown = false;\n }\n }\n\n public ngOnDestroy(): void {\n this.#searchUpdated.complete();\n this.#searchUpdatedSub?.unsubscribe();\n }\n\n #searchBindingChanged(changes: SimpleChanges): boolean {\n return (\n changes['searchText'] &&\n changes['searchText'].previousValue !== changes['searchText'].currentValue\n );\n }\n\n #expandModeBindingChanged(changes: SimpleChanges): boolean {\n return (\n changes['expandMode'] &&\n changes['expandMode'].previousValue !== changes['expandMode'].currentValue\n );\n }\n\n #shouldOpenInput(): boolean {\n return (\n this.searchText !== '' &&\n this.#breakpoint() === 'xs' &&\n this.#searchShouldCollapse()\n );\n }\n\n #mediaQueryCallback(breakpoint: SkyBreakpoint): void {\n if (this.#searchShouldCollapse()) {\n if (breakpoint === 'xs') {\n this.inputShown = false;\n } else if (!this.inputShown) {\n this.inputShown = true;\n this.searchButtonShown = false;\n this.mobileSearchShown = false;\n } else {\n this.mobileSearchShown = false;\n }\n }\n this.#changeRef.markForCheck();\n }\n\n #searchShouldCollapse(): boolean {\n return (\n (this.isCollapsible || this.isCollapsible === undefined) &&\n this.isFullWidth !== true\n );\n }\n\n #setupSearchChangedEvent(): void {\n this.#searchUpdatedSub?.unsubscribe();\n\n this.#searchUpdatedSub = this.#searchUpdated\n .pipe(debounceTime(this.debounceTime), distinctUntilChanged())\n .subscribe((value) => {\n this.searchChange.emit(value);\n });\n }\n}\n","<div class=\"sky-search-container\">\n <div class=\"sky-search-button-container\">\n <button\n class=\"sky-btn sky-btn-default sky-btn-icon sky-search-btn-open\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_search_open' | skyLibResources\"\n [hidden]=\"!searchButtonShown\"\n [ngClass]=\"{ 'sky-search-btn-open-applied': clearButtonShown }\"\n (click)=\"toggleSearchInput(true)\"\n >\n <ng-container *ngTemplateOutlet=\"searchIconTemplate\" />\n </button>\n </div>\n <div\n class=\"sky-search-dismiss-container\"\n [hidden]=\"searchButtonShown\"\n [ngClass]=\"{\n 'sky-search-dismiss-absolute': mobileSearchShown || isFullWidth\n }\"\n >\n <div class=\"sky-search-item-input\">\n <div\n class=\"sky-search-input-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"opacity\"\n [class.sky-search-input-hidden]=\"!inputShown\"\n [ngClass]=\"{\n 'sky-search-input-container-has-value': searchText?.trim()\n }\"\n [transitionTrigger]=\"inputShown\"\n (transitionEnd)=\"onInputTransitionEnd()\"\n >\n <sky-input-box [disabled]=\"disabled\">\n <input\n #searchInput=\"skyId\"\n class=\"sky-form-control sky-search-input sky-rounded-corners\"\n type=\"text\"\n skyId\n [attr.aria-label]=\"\n ariaLabelledBy\n ? undefined\n : ariaLabel ||\n ((contentInfoObs | async)?.descriptor?.type === 'text'\n ? ('skyux_search_aria_label_descriptor'\n | skyLibResources\n : (contentInfoObs | async)?.descriptor?.value)\n : ('skyux_search_label' | skyLibResources))\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.placeholder]=\"\n placeholderText || ('skyux_search_placeholder' | skyLibResources)\n \"\n [disabled]=\"disabled\"\n [ngModel]=\"searchText\"\n (keyup)=\"enterPress($event, searchText)\"\n (ngModelChange)=\"searchTextChanged($event)\"\n />\n <span\n class=\"sky-input-group-btn sky-input-group-clear sky-input-box-btn-inset\"\n [hidden]=\"!clearButtonShown\"\n >\n <button\n aria-hidden=\"true\"\n class=\"sky-btn sky-btn-default sky-search-btn sky-search-btn-clear\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"disabled\"\n (click)=\"clearSearchText()\"\n >\n <sky-icon iconName=\"close\" />\n </button>\n </span>\n <span\n *skyThemeIf=\"'default'\"\n class=\"sky-input-group-btn sky-input-box-btn-inset\"\n >\n <button\n class=\"sky-btn sky-btn-default sky-search-btn sky-search-btn-apply\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_search_label' | skyLibResources\"\n [disabled]=\"disabled\"\n (click)=\"applySearchText(searchText)\"\n >\n <ng-container *ngTemplateOutlet=\"searchIconTemplate\" />\n </button>\n </span>\n <div\n *skyThemeIf=\"'modern'\"\n aria-hidden=\"true\"\n class=\"sky-input-group-icon sky-input-box-icon-inset-left\"\n >\n <ng-container *ngTemplateOutlet=\"searchIconTemplate\" />\n </div>\n </sky-input-box>\n </div>\n </div>\n <div class=\"sky-search-item-dismiss\">\n @if (mobileSearchShown) {\n <button\n class=\"sky-btn sky-search-btn-dismiss\"\n type=\"button\"\n [attr.title]=\"'skyux_search_dismiss' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"toggleSearchInput(false)\"\n >\n <sky-icon *skyThemeIf=\"'default'\" iconName=\"chevron-left\" />\n <sky-icon *skyThemeIf=\"'modern'\" iconName=\"chevron-double-left\" />\n </button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #searchIconTemplate>\n <sky-icon iconName=\"search\" />\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule, _SkyTransitionEndHandlerDirective } from '@skyux/core';\nimport { SkyInputBoxModule } from '@skyux/forms';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkySearchComponent } from './search.component';\n\n@NgModule({\n declarations: [SkySearchComponent],\n imports: [\n CommonModule,\n SkyInputBoxModule,\n SkyLookupResourcesModule,\n FormsModule,\n SkyIconModule,\n SkyThemeModule,\n SkyIdModule,\n _SkyTransitionEndHandlerDirective,\n ],\n exports: [SkySearchComponent],\n})\nexport class SkySearchModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skySelectionModalItemSelected',\n})\nexport class SkySelectionModalItemSelectedPipe implements PipeTransform {\n public transform(id: unknown, selectedIdMap: Map<unknown, unknown>): boolean {\n return selectedIdMap.has(id);\n }\n}\n","import { SkyAutocompleteSearchAsyncFunction } from '../../autocomplete/types/autocomplete-search-async-function';\nimport { SkyLookupSelectModeType } from '../../lookup/types/lookup-select-mode-type';\nimport { SkyLookupShowMoreNativePickerConfig } from '../../lookup/types/lookup-show-more-native-picker-config';\n\n/**\n * @internal\n * Context for the selection modal. These values are provided by the selection modal service.\n */\nexport class SkySelectionModalContext {\n public descriptorProperty: string;\n\n public idProperty: string;\n\n public initialSearch: string;\n\n public initialValue: unknown[];\n\n public searchAsync: SkyAutocompleteSearchAsyncFunction;\n\n public selectionDescriptor: string;\n\n public selectMode: SkyLookupSelectModeType;\n\n public showAddButton: boolean;\n\n public userConfig: SkyLookupShowMoreNativePickerConfig;\n\n constructor(\n descriptorProperty: string,\n idProperty: string,\n initialSearch: string,\n initialValue: unknown[],\n searchAsync: SkyAutocompleteSearchAsyncFunction,\n selectMode: SkyLookupSelectModeType,\n selectionDescriptor: string,\n showAddButton: boolean,\n userConfig: SkyLookupShowMoreNativePickerConfig,\n ) {\n this.descriptorProperty = descriptorProperty;\n this.idProperty = idProperty;\n this.initialSearch = initialSearch;\n this.initialValue = initialValue;\n this.searchAsync = searchAsync;\n this.selectMode = selectMode;\n this.selectionDescriptor = selectionDescriptor;\n this.showAddButton = showAddButton;\n this.userConfig = userConfig;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n TemplateRef,\n inject,\n} from '@angular/core';\nimport {\n SkyIdService,\n SkyLiveAnnouncerService,\n SkyViewkeeperModule,\n} from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyWaitModule } from '@skyux/indicators';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyInfiniteScrollModule, SkyRepeaterModule } from '@skyux/lists';\nimport { SkyModalInstance, SkyModalModule } from '@skyux/modals';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { Subject, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { SkySearchModule } from '../search/search.module';\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkySelectionModalItemSelectedPipe } from './selection-modal-item-selected.pipe';\nimport { SkySelectionModalContext } from './types/selection-modal-context';\nimport { SkySelectionModalSearchResult } from './types/selection-modal-search-result';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-selection-modal',\n templateUrl: './selection-modal.component.html',\n styleUrls: ['./selection-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyCheckboxModule,\n SkyIconModule,\n SkyInfiniteScrollModule,\n SkyLookupResourcesModule,\n SkyModalModule,\n SkyRepeaterModule,\n SkySearchModule,\n SkySelectionModalItemSelectedPipe,\n SkyThemeModule,\n SkyToolbarModule,\n SkyWaitModule,\n SkyViewkeeperModule,\n ],\n})\nexport class SkySelectionModalComponent implements OnInit, OnDestroy {\n /**\n * @internal\n * Fires when users select the button to add new options to the list.\n */\n public addClick = new Subject<void>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public displayedItems: any[] = [];\n\n public hasMoreItems = false;\n\n /**\n * Used to associate this modal with its owning lookup component.\n */\n public id: string;\n\n public isLoadingMore = false;\n\n public isSearching = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public items: any[] = [];\n\n public onlyShowSelected = false;\n\n public repeaterItemTemplate: TemplateRef<unknown> | null = null;\n\n public searchText: string | undefined;\n\n public selectedIdMap = new Map<unknown, unknown>();\n\n #continuationData: unknown;\n\n #currentSearchSub: Subscription | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #offset = 0;\n\n protected readonly context = inject(SkySelectionModalContext);\n protected readonly modalInstance = inject(SkyModalInstance);\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #idSvc = inject(SkyIdService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n\n constructor() {\n this.id = this.#idSvc.generateId();\n }\n\n public ngOnInit(): void {\n this.repeaterItemTemplate = this.context.userConfig.itemTemplate || null;\n this.searchText = this.context.initialSearch;\n\n this.#createInitialSelectedItemsMap();\n this.#loadSearchResults();\n }\n\n public ngOnDestroy(): void {\n this.#cancelCurrentSearch();\n\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public addButtonClicked(): void {\n this.addClick.next();\n }\n\n public clearAll(): void {\n this.selectedIdMap = new Map(this.selectedIdMap);\n\n // Only deselect items that have been loaded; items that would be loaded\n // after an infinite scroll event should remain selected.\n for (const item of this.items) {\n this.selectedIdMap.delete(item[this.context.idProperty]);\n }\n\n this.updateDisplayedItems();\n\n this.#changeDetector.markForCheck();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public itemClick(selectedItem: any): void {\n if (this.context.selectMode === 'single') {\n this.onItemSelect(!selectedItem.selected, selectedItem);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public addItem(itemToAdd: any): void {\n // Add the selected item, then perform the search again in case the\n // newly-added item should be displayed as a search results.\n this.#offset = 0;\n this.onItemSelect(true, itemToAdd);\n this.#loadSearchResults();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public onItemSelect(newSelectState: boolean, itemToSelect: any): void {\n const itemId = itemToSelect[this.context.idProperty];\n\n // Create a new Map so the pipe transform will execute on the next\n // change detection cycle.\n this.selectedIdMap = new Map(this.selectedIdMap);\n\n if (this.context.selectMode === 'single') {\n if (newSelectState) {\n this.selectedIdMap.clear();\n this.selectedIdMap.set(itemId, itemToSelect);\n }\n } else {\n if (newSelectState) {\n this.selectedIdMap.set(itemId, itemToSelect);\n } else {\n this.selectedIdMap.delete(itemId);\n }\n }\n\n this.updateDisplayedItems();\n }\n\n public searchApplied(searchText: string): void {\n this.#offset = 0;\n this.searchText = searchText;\n\n this.#loadSearchResults();\n }\n\n public selectAll(): void {\n this.selectedIdMap = new Map();\n\n for (const item of this.items) {\n this.selectedIdMap.set(item[this.context.idProperty], item);\n }\n\n this.updateDisplayedItems();\n }\n\n public infiniteScrollEnd(): void {\n this.#cancelCurrentSearch();\n\n /* Sanity check - else case would only happen if this was called directly */\n /* istanbul ignore else */\n if (this.hasMoreItems) {\n this.isLoadingMore = true;\n\n this.#performSearch((result) => {\n this.items = this.items.concat(result.items);\n\n this.updateDisplayedItems();\n\n this.isLoadingMore = false;\n });\n }\n }\n\n public save(): void {\n const selectedItems = Array.from(\n this.selectedIdMap.values(),\n (itemData, index) => ({\n index,\n itemData,\n }),\n ).sort((a, b) => {\n return this.items.indexOf(a.itemData) < this.items.indexOf(b.itemData)\n ? -1\n : 1;\n });\n\n this.modalInstance.save(selectedItems);\n }\n\n public updateDisplayedItems(): void {\n const selectedItems = this.items.filter((item) =>\n this.selectedIdMap.has(item[this.context.idProperty]),\n );\n\n if (this.onlyShowSelected) {\n if (!this.searchText) {\n this.displayedItems = Array.from(this.selectedIdMap.values());\n } else {\n this.displayedItems = selectedItems;\n }\n } else {\n this.displayedItems = this.items;\n }\n\n setTimeout(() => {\n this.#announceSelectionState(\n selectedItems.length,\n this.displayedItems.length,\n );\n this.#changeDetector.markForCheck();\n });\n }\n\n #loadSearchResults(): void {\n this.#cancelCurrentSearch();\n\n this.isSearching = true;\n\n this.#performSearch((result) => {\n this.isSearching = false;\n this.items = result.items;\n });\n\n this.#changeDetector.markForCheck();\n }\n\n #createInitialSelectedItemsMap(): void {\n this.selectedIdMap = new Map(\n this.context.initialValue.map((item) => [\n (item as Record<string, unknown>)[this.context.idProperty],\n item,\n ]),\n );\n }\n\n #performSearch(\n processResults: (result: SkySelectionModalSearchResult) => void,\n ): void {\n this.#currentSearchSub = this.context\n .searchAsync({\n displayType: 'modal',\n offset: this.#offset,\n searchText: this.searchText || '',\n continuationData: this.#continuationData,\n })\n .pipe(take(1))\n .subscribe((result) => {\n processResults(result);\n\n this.#continuationData = result.continuationData;\n this.hasMoreItems = result.hasMore || false;\n this.#offset = this.items.length;\n\n this.updateDisplayedItems();\n\n this.#changeDetector.markForCheck();\n });\n }\n\n #cancelCurrentSearch(): void {\n if (this.#currentSearchSub) {\n this.#currentSearchSub.unsubscribe();\n this.#currentSearchSub = undefined;\n this.isLoadingMore = false;\n this.isSearching = false;\n }\n }\n\n #announceSelectionState(\n selectedItemCount: number,\n displayedItemCount: number,\n ): void {\n this.#resourcesSvc\n .getString(\n 'skyux_lookup_show_more_displayed_items_updated',\n selectedItemCount.toString(),\n displayedItemCount.toString(),\n )\n .pipe(take(1))\n .subscribe((resourceString) => {\n this.#liveAnnouncerSvc.announce(resourceString);\n });\n }\n}\n","<sky-modal\n class=\"sky-lookup-show-more-modal\"\n [attr.id]=\"id\"\n [ngClass]=\"'sky-lookup-show-more-modal-' + context.selectMode\"\n>\n <sky-modal-header>\n @if (context.userConfig?.title) {\n {{ context.userConfig.title }}\n } @else {\n {{\n 'skyux_lookup_show_more_modal_title'\n | skyLibResources: context.selectionDescriptor\n }}\n }\n </sky-modal-header>\n <sky-modal-content\n [skyViewkeeper]=\"['.sky-lookup-show-more-toolbar-wrapper']\"\n >\n <sky-wait [isWaiting]=\"isSearching\" />\n <div class=\"sky-lookup-show-more-toolbar-wrapper\">\n <sky-toolbar\n class=\"sky-lookup-show-more-modal-toolbar\"\n [listDescriptor]=\"context.selectionDescriptor\"\n >\n <sky-toolbar-section>\n <sky-toolbar-item>\n <sky-search\n [debounceTime]=\"250\"\n [searchText]=\"searchText\"\n (searchApply)=\"searchApplied($event)\"\n />\n </sky-toolbar-item>\n <sky-toolbar-view-actions>\n @if (context.showAddButton) {\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-add\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_add_button_aria_label'\n | skyLibResources: context.selectionDescriptor\n \"\n (click)=\"addButtonClicked()\"\n >\n <sky-icon iconName=\"add\" />\n {{ 'skyux_lookup_show_more_add' | skyLibResources }}\n </button>\n }\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n @if (context.selectMode === 'multiple') {\n <sky-toolbar class=\"sky-lookup-show-more-modal-multiselect-toolbar\">\n <sky-toolbar-section>\n <sky-toolbar-item>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-select-all-btn\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_select_all_button_aria_label'\n | skyLibResources: context.selectionDescriptor\n \"\n (click)=\"selectAll()\"\n >\n {{\n 'skyux_lookup_show_more_select_all_button_title'\n | skyLibResources\n }}\n </button>\n </sky-toolbar-item>\n <sky-toolbar-item>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-clear-all-btn\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_clear_all_button_aria_label'\n | skyLibResources: context.selectionDescriptor\n \"\n (click)=\"clearAll()\"\n >\n {{\n 'skyux_lookup_show_more_clear_all_button_title'\n | skyLibResources\n }}\n </button>\n </sky-toolbar-item>\n <sky-toolbar-view-actions>\n <sky-checkbox\n [labelText]=\"\n 'skyux_lookup_show_more_show_selected_option_title'\n | skyLibResources: context.selectionDescriptor\n \"\n [(checked)]=\"onlyShowSelected\"\n (change)=\"updateDisplayedItems()\"\n />\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n }\n </div>\n @if (!isSearching && displayedItems.length === 0) {\n <div class=\"sky-font-deemphasized sky-lookup-show-more-no-results\">\n {{ 'skyux_lookup_show_more_no_results' | skyLibResources }}\n </div>\n }\n <sky-repeater\n class=\"sky-lookup-show-more-repeater\"\n expandMode=\"none\"\n [ngClass]=\"{ 'hover-rows': context.selectMode === 'single' }\"\n >\n @for (item of displayedItems; track item) {\n <sky-repeater-item\n #repeaterItem\n [isSelected]=\"\n item[context.idProperty]\n | skySelectionModalItemSelected: selectedIdMap\n \"\n [itemName]=\"item[context.descriptorProperty]\"\n [selectable]=\"context.selectMode === 'multiple'\"\n (click)=\"itemClick(item)\"\n (keyup.enter)=\"itemClick(item)\"\n (isSelectedChange)=\"onItemSelect($event, item)\"\n >\n <sky-repeater-item-content>\n <ng-container\n *ngTemplateOutlet=\"\n repeaterItemTemplate ?? defaultItemTemplate;\n context: {\n item: item,\n checkboxId:\n context.selectMode === 'multiple'\n ? 'sky-checkbox-' +\n repeaterItem.contentId +\n '-item-checkbox-input'\n : undefined\n }\n \"\n />\n </sky-repeater-item-content>\n </sky-repeater-item>\n }\n </sky-repeater>\n <sky-infinite-scroll\n [enabled]=\"hasMoreItems && (!onlyShowSelected || !!searchText)\"\n [loading]=\"isLoadingMore\"\n (scrollEnd)=\"infiniteScrollEnd()\"\n />\n </sky-modal-content>\n <sky-modal-footer>\n <button\n class=\"sky-btn sky-btn-primary sky-lookup-show-more-modal-save\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_select_context'\n | skyLibResources: context.selectionDescriptor\n \"\n [disabled]=\"isSearching\"\n [skyThemeClass]=\"{\n 'sky-theme-margin-right-xs': 'default'\n }\"\n (click)=\"save()\"\n >\n {{ 'skyux_lookup_show_more_select' | skyLibResources }}\n </button>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-close\"\n type=\"button\"\n (click)=\"modalInstance.close()\"\n >\n {{ 'skyux_lookup_show_more_cancel' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n\n<ng-template #defaultItemTemplate let-item=\"item\" let-checkboxId=\"checkboxId\">\n @if (checkboxId) {\n <label class=\"selection-modal-item-label\" [attr.for]=\"checkboxId\">{{\n item[context.descriptorProperty]\n }}</label>\n } @else {\n {{ item[context.descriptorProperty] }}\n }\n</ng-template>\n","import { Observable, Subject } from 'rxjs';\n\nimport { SkySelectionModalCloseArgs } from './selection-modal-close-args';\n\n/**\n * Represents an instance of a selection modal.\n */\nexport class SkySelectionModalInstance {\n /**\n * An event that the selection modal instance emits when it closes.\n * It emits a `SkySelectionModalCloseArgs` object with a `selectedItems` property that includes\n * items selected by users on close or save and a `reason` property that indicates\n * whether the selection modal was saved or closed without saving.\n * The `reason` property accepts `\"cancel\"`, `\"close\"`, and `\"save\"`.\n */\n public get closed(): Observable<SkySelectionModalCloseArgs> {\n return this.#closedObs;\n }\n\n /**\n * @internal\n */\n public get itemAdded(): Observable<unknown> {\n return this.#itemAddedObs;\n }\n\n /**\n * @internal\n */\n public id: string;\n\n #closed = new Subject<SkySelectionModalCloseArgs>();\n #closedObs: Observable<SkySelectionModalCloseArgs>;\n #itemAdded = new Subject<unknown>();\n #itemAddedObs: Observable<unknown>;\n\n constructor(id: string) {\n this.id = id;\n\n this.#closedObs = this.#closed.asObservable();\n this.#itemAddedObs = this.#itemAdded.asObservable();\n }\n\n /**\n * @internal\n */\n public close(args: SkySelectionModalCloseArgs): void {\n this.#closed.next(args);\n this.#closed.complete();\n }\n\n /**\n * @internal\n */\n public addItem(itemToAdd: unknown): void {\n this.#itemAdded.next(itemToAdd);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SkyModalService } from '@skyux/modals';\n\nimport { Observable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteSearchAsyncResult } from '../autocomplete/types/autocomplete-search-async-result';\n\nimport { SkySelectionModalComponent } from './selection-modal.component';\nimport { SkySelectionModalAddClickEventArgs } from './types/selection-modal-add-click-event-args';\nimport { SkySelectionModalCloseArgs } from './types/selection-modal-close-args';\nimport { SkySelectionModalContext } from './types/selection-modal-context';\nimport { SkySelectionModalInstance } from './types/selection-modal-instance';\nimport { SkySelectionModalOpenArgs } from './types/selection-modal-open-args';\n\n/**\n * Displays a modal for selecting one or more values.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkySelectionModalService {\n #modalSvc: SkyModalService;\n\n // eslint-disable-next-line @angular-eslint/prefer-inject -- constructor injection is required to maintain the public API for consumers who may instantiate this service directly (e.g. `new SkySelectionModalService(...)`)\n constructor(modalSvc: SkyModalService) {\n this.#modalSvc = modalSvc;\n }\n\n /**\n * Opens the selection modal.\n * @param args Parameters for the selection modal.\n */\n public open(args: SkySelectionModalOpenArgs): SkySelectionModalInstance {\n const initialValue = args.value;\n\n const context = new SkySelectionModalContext(\n args.descriptorProperty,\n args.idProperty,\n args.initialSearch || '',\n initialValue || [],\n (searchArgs) => {\n return args.searchAsync({\n offset: searchArgs.offset,\n searchText: searchArgs.searchText,\n continuationData: searchArgs.continuationData,\n }) as Observable<SkyAutocompleteSearchAsyncResult>;\n },\n args.selectMode,\n args.selectionDescriptor ||\n (args.selectMode === 'single' ? 'item' : 'items'),\n args.showAddButton || false,\n {\n itemTemplate: args.itemTemplate,\n title: args.title,\n },\n );\n\n const modalInstance = this.#modalSvc.open(SkySelectionModalComponent, {\n providers: [\n {\n provide: SkySelectionModalContext,\n useValue: context,\n },\n ],\n size: 'large',\n wrapperClass: args.wrapperClass,\n });\n\n const instance = new SkySelectionModalInstance(\n modalInstance.componentInstance.id,\n );\n\n instance.itemAdded\n .pipe(takeUntil(modalInstance.closed))\n .subscribe((item) => {\n modalInstance.componentInstance.addItem(item);\n });\n\n modalInstance.closed.subscribe((modalCloseArgs) => {\n let closeArgs: SkySelectionModalCloseArgs;\n\n switch (modalCloseArgs.reason) {\n case 'save':\n closeArgs = {\n reason: 'save',\n selectedItems: modalCloseArgs.data.map(\n (item: { itemData: unknown }) => item.itemData,\n ),\n };\n break;\n case 'cancel':\n closeArgs = { reason: 'cancel' };\n break;\n default:\n closeArgs = { reason: 'close' };\n }\n\n instance.close(closeArgs);\n });\n\n const selectionModal = modalInstance.componentInstance;\n\n selectionModal.addClick\n .pipe(takeUntil(modalInstance.closed))\n .subscribe(() => {\n if (args.addClick) {\n const addArgs: SkySelectionModalAddClickEventArgs = {\n itemAdded(args) {\n selectionModal.addItem(args.item);\n },\n };\n\n args.addClick(addArgs);\n }\n });\n\n return instance;\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyLookupAdapterService {\n public focusInput(elRef: ElementRef): void {\n const inputEl: HTMLElement =\n elRef.nativeElement.querySelector('.sky-lookup-input');\n\n /* Sanity check */\n /* istanbul ignore else */\n if (inputEl) {\n inputEl.focus();\n }\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from '@angular/core';\n\nimport { skyAutocompleteDefaultSearchFunction } from '../autocomplete/autocomplete-default-search-function';\nimport { SkyAutocompleteSearchAsyncArgs } from '../autocomplete/types/autocomplete-search-async-args';\nimport { SkyAutocompleteSearchFunction } from '../autocomplete/types/autocomplete-search-function';\nimport { SkyAutocompleteSearchFunctionFilter } from '../autocomplete/types/autocomplete-search-function-filter';\n\n/**\n * @internal\n */\n@Directive()\nexport class SkyLookupAutocompleteAdapter {\n /**\n * How many milliseconds to wait before searching while users\n * enter text in the lookup field.\n * @default 0\n */\n @Input()\n public debounceTime: number | undefined;\n\n /**\n * The object property to display in the text input after users\n * select an item in the dropdown list.\n * @default \"name\"\n */\n @Input()\n public set descriptorProperty(value: string | undefined) {\n this.#_descriptorProperty = value || 'name';\n }\n\n public get descriptorProperty(): string {\n return this.#_descriptorProperty;\n }\n\n /**\n * The array of object properties to search when utilizing the `data` property and the built-in search function.\n * @default [\"name\"]\n * @deprecated Use the `searchAsync` event emitter and callback instead to provide data to the lookup component.\n */\n @Input()\n public set propertiesToSearch(value: string[] | undefined) {\n this.#_propertiesToSearch = value ?? ['name'];\n\n this.#updateDefaultSearchOptions();\n }\n\n public get propertiesToSearch(): string[] {\n return this.#_propertiesToSearch;\n }\n\n /**\n * The function that dynamically manages the data to display in search results when users\n * change the text in the lookup field. The search function must return\n * an array or a promise of an array. The `search` property is particularly\n * useful when the data source does not live in the source code.\n * @deprecated Use the `searchAsync` event emitter and callback instead to provide searched data to the lookup component.\n */\n @Input()\n public set search(value: SkyAutocompleteSearchFunction | undefined) {\n this.#_search = value;\n this.searchOrDefault =\n value ||\n skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n });\n }\n\n public get search(): SkyAutocompleteSearchFunction | undefined {\n return this.#_search;\n }\n\n /**\n * The template that formats each option in the dropdown list. The lookup component\n * injects values into the template as `item` variables that reference all of the object\n * properties of the search results.\n */\n @Input()\n public searchResultTemplate: TemplateRef<unknown> | undefined;\n\n /**\n * The minimum number of characters that users must enter before\n * the lookup component searches the data source and displays search results\n * in the dropdown list.\n * @default 1\n */\n @Input()\n public searchTextMinimumCharacters: number | undefined;\n\n /**\n * The array of functions to call against each search result in order\n * to filter the search results when using the `data` input and the default search function. When\n * using a custom search function via the `search` property filters must be\n * applied manually inside that function. The function must return `true` or\n * `false` for each result to indicate whether to display it in the dropdown list.\n * @deprecated Use the `searchAsync` event emitter and callback instead to provide searched data to the lookup component.\n */\n @Input()\n public set searchFilters(\n value: SkyAutocompleteSearchFunctionFilter[] | undefined,\n ) {\n this.#_searchFilters = value;\n\n this.#updateDefaultSearchOptions();\n }\n\n public get searchFilters():\n | SkyAutocompleteSearchFunctionFilter[]\n | undefined {\n return this.#_searchFilters;\n }\n\n /**\n * The maximum number of search results to display in the dropdown\n * list. By default, the lookup component displays all matching results.\n * This property has no effect on the results in the \"Show more\" picker.\n */\n @Input()\n public searchResultsLimit: number | undefined;\n\n /**\n * Fires when users enter new search information and allows results to be\n * returned via an observable. The event is also fired\n * when the \"Show more\" picker is opened without search text.\n */\n @Output()\n public searchAsync = new EventEmitter<SkyAutocompleteSearchAsyncArgs>();\n\n public searchOrDefault = skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: ['name'],\n searchFilters: undefined,\n });\n\n #_descriptorProperty = 'name';\n\n #_propertiesToSearch = ['name'];\n\n #_search: SkyAutocompleteSearchFunction | undefined;\n\n #_searchFilters: SkyAutocompleteSearchFunctionFilter[] | undefined;\n\n #updateDefaultSearchOptions(): void {\n // Reset default search if it is what is being used.\n if (this.search !== this.searchOrDefault) {\n this.searchOrDefault = skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n });\n }\n }\n}\n","import { SkyAutocompleteSearchFunction } from '../../autocomplete/types/autocomplete-search-function';\n\nimport { SkyLookupSelectModeType } from './lookup-select-mode-type';\nimport { SkyLookupShowMoreNativePickerConfig } from './lookup-show-more-native-picker-config';\n\n/**\n * @internal\n * Context for the show more native picker. These values are provided by the lookup component.\n */\nexport class SkyLookupShowMoreNativePickerContext {\n public descriptorProperty: string;\n\n public initialSearch: string;\n\n public initialValue: any[];\n\n public items: any[];\n\n public search: SkyAutocompleteSearchFunction;\n\n public selectMode: SkyLookupSelectModeType;\n\n public showAddButton: boolean;\n\n public userConfig: SkyLookupShowMoreNativePickerConfig;\n\n constructor(\n descriptorProperty: string,\n initialSearch: string,\n initialValue: any[],\n items: any[],\n search: SkyAutocompleteSearchFunction,\n selectMode: SkyLookupSelectModeType,\n showAddButton: boolean,\n userConfig: SkyLookupShowMoreNativePickerConfig,\n ) {\n this.descriptorProperty = descriptorProperty;\n this.initialSearch = initialSearch;\n this.initialValue = initialValue;\n this.items = items;\n this.search = search;\n this.selectMode = selectMode;\n this.showAddButton = showAddButton;\n this.userConfig = userConfig;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n TemplateRef,\n inject,\n} from '@angular/core';\nimport {\n SkyIdService,\n SkyLiveAnnouncerService,\n SkyViewkeeperModule,\n} from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyInfiniteScrollModule, SkyRepeaterModule } from '@skyux/lists';\nimport { SkyModalInstance, SkyModalModule } from '@skyux/modals';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { Subject, take } from 'rxjs';\n\nimport { SkySearchModule } from '../search/search.module';\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkyLookupShowMoreNativePickerContext } from './types/lookup-show-more-native-picker-context';\n\n/**\n * @internal\n * Internal component to implement the native picker.\n */\n@Component({\n selector: 'sky-lookup-show-more-modal',\n templateUrl: './lookup-show-more-modal.component.html',\n styleUrls: ['./lookup-show-more-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyCheckboxModule,\n SkyIconModule,\n SkyInfiniteScrollModule,\n SkyLookupResourcesModule,\n SkyModalModule,\n SkyRepeaterModule,\n SkySearchModule,\n SkyThemeModule,\n SkyToolbarModule,\n SkyViewkeeperModule,\n ],\n})\nexport class SkyLookupShowMoreModalComponent\n implements AfterViewInit, OnDestroy\n{\n /**\n * @internal\n * Fires when users select the button to add new options to the list.\n */\n public addClick = new Subject<void>();\n\n /**\n * Used to associate this modal with its owning lookup component.\n */\n public id: string;\n\n public items: any[] = [];\n\n public itemsLoading = false;\n\n public dataManagerConfig = {\n sortOptions: [\n {\n id: 'az',\n label: 'Alphabetical (A - Z)',\n descending: false,\n propertyName: 'name',\n },\n {\n id: 'za',\n label: 'Alphabetical (Z - A)',\n descending: true,\n propertyName: 'name',\n },\n ],\n };\n\n public displayedItems: any[] = [];\n\n public itemsHaveMore = false;\n\n public onlyShowSelected = false;\n\n public repeaterItemTemplate: TemplateRef<unknown> | null = null;\n\n public searchText = '';\n\n public selectedItems: { index: number; itemData: any }[] = [];\n\n #itemIndex = 0;\n #ngUnsubscribe = new Subject<void>();\n\n protected readonly modalInstance = inject(SkyModalInstance);\n protected readonly context = inject(SkyLookupShowMoreNativePickerContext);\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #idSvc = inject(SkyIdService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n\n constructor() {\n this.id = this.#idSvc.generateId();\n }\n\n public ngAfterViewInit(): void {\n this.repeaterItemTemplate = this.context.userConfig.itemTemplate || null;\n this.searchText = this.context.initialSearch;\n void this.addItems();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public addButtonClicked(): void {\n this.addClick.next();\n }\n\n public async addItems(): Promise<void> {\n this.itemsLoading = true;\n if (!this.items || this.items.length === 0) {\n const selectedItems: any[] = this.selectedItems.slice();\n\n this.items = this.context.items.map((item) => {\n return {\n value: item,\n selected: false,\n };\n });\n\n this.items.forEach((item) => {\n const isInitialValue: boolean =\n this.context.initialValue === item.value;\n\n const initialIsArray: boolean = Array.isArray(\n this.context.initialValue,\n );\n const initialValueContainsItem: boolean =\n this.context.initialValue.findIndex(\n (initialItem: any) => initialItem === item.value,\n ) >= 0;\n\n if (isInitialValue || (initialIsArray && initialValueContainsItem)) {\n item.selected = true;\n const itemIndex = this.items.indexOf(item);\n if (\n selectedItems.findIndex(\n (selectedItem) => selectedItem.index === itemIndex,\n ) < 0\n ) {\n selectedItems.push({ index: itemIndex, itemData: item.value });\n }\n }\n });\n\n this.selectedItems = selectedItems;\n await this.updateDataState();\n this.#changeDetector.markForCheck();\n }\n\n // if onlyShowSelected is checked, then only iterate through the initial selection\n const items = this.onlyShowSelected\n ? this.items.filter((item) => item.selected)\n : this.items;\n\n this.#itemIndex = this.#itemIndex + 10;\n\n const searchedItems = await this.searchItems(items);\n\n this.displayedItems = searchedItems.slice(0, this.#itemIndex);\n\n if (this.#itemIndex > searchedItems.length) {\n this.itemsHaveMore = false;\n } else {\n this.itemsHaveMore = true;\n }\n this.itemsLoading = false;\n\n this.#announceSelectionState(\n this.selectedItems.length,\n this.displayedItems.length,\n );\n\n this.#changeDetector.markForCheck();\n }\n\n public async clearAll(): Promise<void> {\n this.displayedItems.forEach((item) => {\n if (item.selected) {\n item.selected = false;\n }\n });\n this.selectedItems = [];\n await this.updateDataState();\n this.#changeDetector.markForCheck();\n }\n\n public itemClick(selectedItem: any): void {\n if (this.context.selectMode === 'single') {\n void this.onItemSelect(!selectedItem.selected, selectedItem);\n }\n }\n\n public onItemSelect(newSelectState: boolean, itemToSelect: any): void {\n const items = this.items;\n\n if (this.context.selectMode === 'single') {\n /* Sanity check - single select mode should only alow for a `true` select state */\n /* istanbul ignore else */\n if (newSelectState) {\n itemToSelect.selected = true;\n items.forEach((item) => {\n if (item.value !== itemToSelect.value) {\n item.selected = false;\n }\n });\n this.displayedItems.forEach((item) => {\n if (item.value !== itemToSelect.value) {\n item.selected = false;\n }\n });\n const itemIndex = items.findIndex(\n (item) => item.value === itemToSelect.value,\n );\n this.selectedItems = [\n { index: itemIndex, itemData: items[itemIndex].value },\n ];\n }\n } else {\n const selectedItems: { index: number; itemData: any }[] =\n this.selectedItems;\n const allItemsIndex = items.findIndex(\n (item) => item.value === itemToSelect.value,\n );\n const selectedItemsIndex = selectedItems.findIndex(\n (selectedItem) => selectedItem.index === allItemsIndex,\n );\n\n if (newSelectState && selectedItemsIndex === -1) {\n selectedItems.push({\n index: allItemsIndex,\n itemData: items[allItemsIndex].value,\n });\n } else if (!newSelectState && selectedItemsIndex !== -1) {\n selectedItems.splice(selectedItemsIndex, 1);\n }\n\n this.selectedItems = selectedItems;\n }\n\n void this.updateDataState();\n this.#changeDetector.markForCheck();\n }\n\n public searchApplied(searchText: string): void {\n /* istanbul ignore else */\n if (this.searchText !== searchText) {\n this.#itemIndex = 10;\n this.modalInstance.scrollContentToTop();\n }\n this.searchText = searchText;\n this.itemsLoading = true;\n this.#changeDetector.detectChanges();\n\n // We need to ensure that the scroll event makes it all the way through the infinite scroll workflow before updating the data state.\n // Without this, the infinite scroll can add items improperly because it can see the above scroll after the items finish searching.\n setTimeout(() => {\n void this.updateDataState();\n }, 100);\n }\n\n public searchItems(items: any[]): Promise<any[]> {\n const searchText = this.searchText;\n\n if (searchText) {\n const resultValues = this.context.search(\n searchText,\n items.map((item) => {\n return item.value;\n }),\n { context: 'modal' },\n );\n\n if (resultValues instanceof Array) {\n const result = items.filter(\n (item) => resultValues.indexOf(item.value) >= 0,\n );\n return Promise.resolve(result);\n } else {\n return resultValues.then((values) => {\n const result = items.filter(\n (item) => values.indexOf(item.value) >= 0,\n );\n return Promise.resolve(result);\n });\n }\n } else {\n return Promise.resolve(items);\n }\n }\n\n public async selectAll(): Promise<void> {\n const items = this.items;\n\n const selectedItems: { index: number; itemData: any }[] =\n this.selectedItems;\n\n this.displayedItems.forEach((item: any) => {\n if (!item.selected) {\n item.selected = true;\n\n const index = items.indexOf(item);\n\n /* istanbul ignore else */\n if (\n selectedItems.findIndex(\n (selectedItem) => selectedItem.index === index,\n ) < 0\n ) {\n selectedItems.push({\n index: index,\n itemData: items[index].value,\n });\n }\n }\n });\n\n this.selectedItems = selectedItems;\n await this.updateDataState();\n this.#changeDetector.markForCheck();\n }\n\n public async updateDataState(): Promise<void> {\n const items = this.items;\n\n const selectedItems: { index: number; itemData: any }[] =\n this.selectedItems;\n\n items?.forEach((item: any, index: number) => {\n item.selected =\n selectedItems.findIndex(\n (selectedItem) => selectedItem.index === index,\n ) !== -1;\n });\n\n let searchedItems = await this.searchItems(items);\n\n if (this.onlyShowSelected) {\n searchedItems = searchedItems.filter((item) => item.selected);\n }\n\n this.displayedItems = searchedItems.slice(0, this.#itemIndex);\n\n if (this.#itemIndex > searchedItems.length) {\n this.itemsHaveMore = false;\n } else {\n this.itemsHaveMore = true;\n }\n this.itemsLoading = false;\n\n this.#announceSelectionState(\n selectedItems.length,\n this.displayedItems.length,\n );\n\n this.#changeDetector.markForCheck();\n }\n\n public async updateItemData(data: any[]): Promise<void> {\n this.context.items = data;\n this.items = [];\n this.#itemIndex = 10;\n this.selectedItems.forEach((selectedItem) => {\n this.context.items.forEach((item: any, index: number) => {\n if (selectedItem.itemData === item) {\n selectedItem.index = index;\n }\n });\n });\n\n await this.addItems();\n\n this.#changeDetector.markForCheck();\n }\n\n #announceSelectionState(\n selectedItemCount: number,\n displayedItemCount: number,\n ): void {\n this.#resourcesSvc\n .getString(\n 'skyux_lookup_show_more_displayed_items_updated',\n selectedItemCount.toString(),\n displayedItemCount.toString(),\n )\n .pipe(take(1))\n .subscribe((resourcesString) => {\n this.#liveAnnouncerSvc.announce(resourcesString);\n });\n }\n}\n","<sky-modal\n class=\"sky-lookup-show-more-modal\"\n [attr.id]=\"id\"\n [ngClass]=\"'sky-lookup-show-more-modal-' + context.selectMode\"\n>\n <sky-modal-header>\n @if (context.userConfig?.title) {\n {{ context.userConfig.title }}\n } @else {\n {{\n 'skyux_lookup_show_more_modal_title'\n | skyLibResources: context.userConfig.selectionDescriptor\n }}\n }\n </sky-modal-header>\n <sky-modal-content\n [skyViewkeeper]=\"['.sky-lookup-show-more-toolbar-wrapper']\"\n >\n <div class=\"sky-lookup-show-more-toolbar-wrapper\">\n <sky-toolbar\n class=\"sky-lookup-show-more-modal-toolbar\"\n [listDescriptor]=\"context.userConfig.selectionDescriptor\"\n >\n <sky-toolbar-section>\n <sky-toolbar-item>\n <sky-search\n [debounceTime]=\"250\"\n [searchText]=\"searchText\"\n (searchApply)=\"searchApplied($event)\"\n />\n </sky-toolbar-item>\n <sky-toolbar-view-actions>\n @if (context.showAddButton) {\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-add\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_add_button_aria_label'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n (click)=\"addButtonClicked()\"\n >\n <sky-icon iconName=\"add\" />\n {{ 'skyux_lookup_show_more_add' | skyLibResources }}\n </button>\n }\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n @if (context.selectMode === 'multiple') {\n <sky-toolbar class=\"sky-lookup-show-more-modal-multiselect-toolbar\">\n <sky-toolbar-section>\n <sky-toolbar-item>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-select-all-btn\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_select_all_button_aria_label'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n (click)=\"selectAll()\"\n >\n {{\n 'skyux_lookup_show_more_select_all_button_title'\n | skyLibResources\n }}\n </button>\n </sky-toolbar-item>\n <sky-toolbar-item>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-clear-all-btn\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_clear_all_button_aria_label'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n (click)=\"clearAll()\"\n >\n {{\n 'skyux_lookup_show_more_clear_all_button_title'\n | skyLibResources\n }}\n </button>\n </sky-toolbar-item>\n <sky-toolbar-view-actions>\n <sky-checkbox\n [labelText]=\"\n 'skyux_lookup_show_more_show_selected_option_title'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n [(checked)]=\"onlyShowSelected\"\n (change)=\"updateDataState()\"\n />\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n }\n </div>\n @if (displayedItems.length === 0) {\n <div class=\"sky-font-deemphasized sky-lookup-show-more-no-results\">\n {{ 'skyux_lookup_show_more_no_results' | skyLibResources }}\n </div>\n }\n <sky-repeater class=\"sky-lookup-show-more-repeater\" expandMode=\"none\">\n @for (item of displayedItems; track item) {\n <sky-repeater-item\n #repeaterItem\n [selectable]=\"context.selectMode === 'multiple'\"\n [(isSelected)]=\"item.selected\"\n (click)=\"itemClick(item)\"\n (keyup.enter)=\"itemClick(item)\"\n (isSelectedChange)=\"onItemSelect($event, item)\"\n >\n <sky-repeater-item-content>\n <ng-container\n *ngTemplateOutlet=\"\n repeaterItemTemplate ?? defaultItemTemplate;\n context: {\n item: item.value,\n checkboxId:\n context.selectMode === 'multiple'\n ? 'sky-checkbox-' +\n repeaterItem.contentId +\n '-item-checkbox-input'\n : undefined\n }\n \"\n />\n </sky-repeater-item-content>\n </sky-repeater-item>\n }\n </sky-repeater>\n <sky-infinite-scroll\n [enabled]=\"itemsHaveMore\"\n [loading]=\"itemsLoading\"\n (scrollEnd)=\"addItems()\"\n />\n </sky-modal-content>\n <sky-modal-footer>\n <button\n class=\"sky-btn sky-btn-primary sky-lookup-show-more-modal-save\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_select_context'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n [skyThemeClass]=\"{\n 'sky-theme-margin-right-xs': 'default'\n }\"\n (click)=\"modalInstance.save(selectedItems)\"\n >\n {{ 'skyux_lookup_show_more_select' | skyLibResources }}\n </button>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-close\"\n type=\"button\"\n (click)=\"modalInstance.close()\"\n >\n {{ 'skyux_lookup_show_more_cancel' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n\n<ng-template #defaultItemTemplate let-item=\"item\" let-checkboxId=\"checkboxId\">\n @if (checkboxId) {\n <label class=\"selection-modal-item-label\" [attr.for]=\"checkboxId\">{{\n item[context.descriptorProperty]\n }}</label>\n } @else {\n {{ item[context.descriptorProperty] }}\n }\n</ng-template>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { SkyAppWindowRef, SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport {\n SkyToken,\n SkyTokensMessage,\n SkyTokensMessageType,\n} from '@skyux/indicators';\nimport { SkyModalInstance, SkyModalService } from '@skyux/modals';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { Observable, Subject, fromEvent as observableFromEvent } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteInputDirective } from '../autocomplete/autocomplete-input.directive';\nimport { SkyAutocompleteMessage } from '../autocomplete/types/autocomplete-message';\nimport { SkyAutocompleteMessageType } from '../autocomplete/types/autocomplete-message-type';\nimport { SkyAutocompleteSearchAsyncArgs } from '../autocomplete/types/autocomplete-search-async-args';\nimport { SkyAutocompleteSelectionChange } from '../autocomplete/types/autocomplete-selection-change';\nimport { SkyAutocompleteShowMoreArgs } from '../autocomplete/types/autocomplete-show-more-args';\nimport { SkySelectionModalService } from '../selection-modal/selection-modal.service';\nimport { SkySelectionModalInstance } from '../selection-modal/types/selection-modal-instance';\n\nimport { SkyLookupAdapterService } from './lookup-adapter.service';\nimport { SkyLookupAutocompleteAdapter } from './lookup-autocomplete-adapter';\nimport { SkyLookupShowMoreModalComponent } from './lookup-show-more-modal.component';\nimport { SkyLookupAddCallbackArgs } from './types/lookup-add-click-callback-args';\nimport { SkyLookupAddClickEventArgs } from './types/lookup-add-click-event-args';\nimport { SkyLookupSelectModeType } from './types/lookup-select-mode-type';\nimport { SkyLookupShowMoreConfig } from './types/lookup-show-more-config';\nimport { SkyLookupShowMoreNativePickerContext } from './types/lookup-show-more-native-picker-context';\n\n@Component({\n selector: 'sky-lookup',\n templateUrl: './lookup.component.html',\n styleUrls: ['./lookup.component.scss'],\n providers: [SkyLookupAdapterService],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyLookupComponent\n extends SkyLookupAutocompleteAdapter\n implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor\n{\n /**\n * The ARIA label for the typeahead search input. This sets the input's `aria-label` attribute to provide a text equivalent for\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the input includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @deprecated Use the input box `labelText` input instead.\n */\n @Input()\n public ariaLabel: string | undefined;\n\n /**\n * The HTML element ID of the element that labels\n * the typeahead search input. This sets the input's `aria-labelledby` attribute to provide a text equivalent for\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the input does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n * @deprecated Use the input box `labelText` input instead.\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n\n /**\n * The value to provide to the `autocomplete` attribute on the form input.\n * @default 'off'\n * @deprecated SKY UX only supports browser autofill on components where the direct input matches the return value. This input may not behave as expected due to the dropdown selection interaction.\n */\n @Input()\n public autocompleteAttribute: string | undefined;\n\n /**\n * The data source for the lookup component to search when users\n * enter text. You can specify static data, such as an array of objects, or\n * you can pull data from a database.\n *\n * @default []\n * @deprecated Use the `searchAsync` event emitter and callback instead to provide data to the lookup component.\n */\n @Input()\n public set data(value: any[] | undefined) {\n this.#_data = value;\n\n if (this.#openNativePicker && !this.#hasSearchAsync()) {\n this.#openNativePicker.componentInstance.updateItemData(value);\n }\n }\n\n public get data(): any[] {\n return this.#_data || [];\n }\n\n /**\n * Whether to disable the lookup field on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public disabled = false;\n\n /**\n * Whether the lookup field is required.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set required(value: boolean) {\n this.#_required = value;\n this.inputBoxHostSvc?.setRequired(value);\n }\n\n public get required(): boolean {\n return this.#_required;\n }\n\n /**\n * Whether to enable users to open a picker where they can view all options.\n * @default false\n */\n public readonly enableShowMore = input(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Placeholder text to display in the lookup field.\n */\n @Input()\n public placeholderText: string | undefined;\n\n /**\n * The object property that represents the object's unique identifier.\n * Specifying this property enables token animations and more efficient rendering.\n * This property is required when using `enableShowMore` and `searchAsync` together.\n */\n @Input()\n public idProperty: string | undefined;\n\n /**\n * Whether to display a button that lets users add options to the list.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public showAddButton = false;\n\n /**\n * Configuration options for the picker that displays all options.\n */\n @Input()\n public showMoreConfig: SkyLookupShowMoreConfig | undefined;\n\n /**\n * The ability for users to select one option or multiple options.\n * @default \"multiple\"\n */\n @Input()\n public set selectMode(value: SkyLookupSelectModeType | undefined) {\n const multipleToSingle: boolean =\n value === 'single' && this.selectMode === 'multiple';\n\n this.#_selectMode = value;\n this.#updateForSelectMode();\n\n if (multipleToSingle) {\n const value = this.#getValue();\n\n if (value?.length > 1) {\n // The `setTimeout` is needed to avoid a `ExpressionChangedAfterItHasBeenCheckedError` error in template forms.\n setTimeout(() => {\n this.#setValue([value[0]], { emitEvent: true });\n this.#changeDetector.detectChanges();\n });\n }\n }\n }\n\n public get selectMode(): SkyLookupSelectModeType {\n return this.#_selectMode || 'multiple';\n }\n\n /**\n * @internal\n */\n @Input()\n public wrapperClass: string | undefined;\n\n /**\n * Fires when users select the button to add options to the list.\n */\n @Output()\n public addClick = new EventEmitter<SkyLookupAddClickEventArgs>();\n\n /**\n * @internal\n */\n @Output()\n public openChange = new EventEmitter<boolean>();\n\n /**\n * @internal\n */\n @Output()\n public selectionModalOpenChange = new EventEmitter<boolean>();\n\n public get tokens(): SkyToken[] | undefined {\n return this.#_tokens;\n }\n\n public set tokens(tokens: SkyToken[] | undefined) {\n const value = this.#getValue();\n\n // Collapse the tokens into a single token if the user has selected many options.\n if (this.enableShowMore() && value.length > 5) {\n this.#resourcesService\n .getString('skyux_lookup_tokens_summary', value.length.toString())\n .pipe(take(1))\n .subscribe((label) => {\n this.#_tokens = [\n {\n value: { [this.descriptorProperty]: label },\n },\n ];\n this.#changeDetector.markForCheck();\n });\n } else {\n this.#_tokens = tokens;\n this.#changeDetector.markForCheck();\n }\n }\n\n /**\n * @internal\n * @deprecated This is exposed for unit tests only; refactor unit tests to\n * derive the control value a different way.\n */\n public get value(): any[] {\n return this.#getValue();\n }\n\n public autocompleteController = new Subject<SkyAutocompleteMessage>();\n public isInputFocused = false;\n public showMorePickerId: string | undefined;\n public tokensController = new Subject<SkyTokensMessage>();\n protected controlId: string | undefined;\n protected ariaDescribedBy: Observable<string | undefined> | undefined;\n\n @ViewChild(SkyAutocompleteInputDirective, {\n read: SkyAutocompleteInputDirective,\n static: false,\n })\n public set autocompleteInputDirective(\n value: SkyAutocompleteInputDirective | undefined,\n ) {\n this.#_autocompleteInputDirective = value;\n this.#updateForSelectMode();\n }\n\n public get autocompleteInputDirective():\n | SkyAutocompleteInputDirective\n | undefined {\n return this.#_autocompleteInputDirective;\n }\n\n @ViewChild('showMoreButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public showMoreButtonTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('lookupWrapper', {\n read: ElementRef,\n })\n public lookupWrapperRef: ElementRef | undefined;\n\n #idle = new Subject<void>();\n #markForTokenFocusOnKeyUp = false;\n #ngUnsubscribe = new Subject<void>();\n #notifyChange: ((value: any[]) => void) | undefined;\n #notifyTouched: (() => void) | undefined;\n #openNativePicker: SkyModalInstance | undefined;\n #openSelectionModal: SkySelectionModalInstance | undefined;\n #_required = false;\n\n #_autocompleteInputDirective: SkyAutocompleteInputDirective | undefined;\n #_data: any[] | undefined;\n #_selectMode: SkyLookupSelectModeType | undefined;\n #_tokens: SkyToken[] | undefined;\n #_value: any[] | undefined;\n\n readonly #adapter = inject(SkyLookupAdapterService);\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #elementRef = inject(ElementRef);\n readonly #idService = inject(SkyIdService);\n readonly #logSvc = inject(SkyLogService);\n readonly #modalService = inject(SkyModalService);\n readonly #resourcesService = inject(SkyLibResourcesService);\n readonly #selectionModalSvc = inject(SkySelectionModalService);\n readonly #windowRef = inject(SkyAppWindowRef);\n\n public readonly inputBoxHostSvc = inject(SkyInputBoxHostService, {\n optional: true,\n });\n\n public readonly themeSvc = inject(SkyThemeService, { optional: true });\n\n #getValue(): any[] {\n return this.#_value ? this.#_value : [];\n }\n\n #setValue(newValue: any[], options: { emitEvent: boolean }): void {\n this.#_value = newValue;\n\n if (this.selectMode === 'multiple' && !this.#pickerModalOpen()) {\n this.tokens = this.#parseTokens(newValue);\n }\n\n if (options.emitEvent) {\n this.#notifyChange?.(this.#_value);\n }\n\n this.#updateForSelectMode();\n }\n\n constructor() {\n super();\n\n const ngControl = inject(NgControl, { optional: true, self: true });\n\n if (ngControl) {\n ngControl.valueAccessor = this;\n }\n\n effect(() => {\n this.enableShowMore();\n this.#populateInputBox();\n });\n }\n\n public ngOnInit(): void {\n if (this.inputBoxHostSvc && this.inputTemplateRef) {\n this.controlId = this.inputBoxHostSvc.controlId;\n this.ariaDescribedBy = this.inputBoxHostSvc.ariaDescribedBy;\n\n this.#populateInputBox();\n\n this.inputBoxHostSvc?.setRequired(this.required);\n } else {\n this.controlId = this.#idService.generateId();\n }\n\n /* istanbul ignore else */\n if (this.themeSvc) {\n // This is required for the autocomplete directive to be set after elements\n // are rearranged when switching themes.\n this.themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngAfterViewInit(): void {\n if (!this.disabled) {\n this.#addEventListeners();\n }\n }\n\n public ngOnDestroy(): void {\n this.#removeEventListeners();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.addClick.complete();\n this.openChange.complete();\n this.tokensController.complete();\n }\n\n public addButtonClicked(): void {\n this.addClick.emit({\n itemAdded: (args: SkyLookupAddCallbackArgs) =>\n this.#onAddButtonComplete(args),\n });\n }\n\n public onAutocompleteSelectionChange(\n change: SkyAutocompleteSelectionChange,\n ): void {\n if (change.selectedItem) {\n this.#addToSelected(change.selectedItem);\n } else {\n this.#setValue([], { emitEvent: true });\n }\n }\n\n public onAutocompleteBlur(): void {\n this.#notifyTouched?.();\n }\n\n public onTokensChange(change: SkyToken[]): void {\n if (!change) {\n return;\n }\n\n if (this.tokens !== change) {\n if (change.length === 0) {\n this.#focusInput();\n }\n\n this.tokens = change;\n const value = change.map((token) => {\n return token.value;\n });\n\n this.#setValue(value, { emitEvent: true });\n }\n }\n\n protected onTokenSelected(): void {\n if (this.enableShowMore()) {\n this.openPicker('');\n }\n }\n\n public onTokensFocusIndexOverRange(): void {\n this.#windowRef.nativeWindow.setTimeout(() => {\n this.#focusInput();\n });\n }\n\n public onTokensKeyUp(event: KeyboardEvent): void {\n /* istanbul ignore else */\n if (this.selectMode !== 'single') {\n switch (event.key) {\n case 'Backspace':\n this.#sendTokensMessage(SkyTokensMessageType.RemoveActiveToken);\n this.#sendTokensMessage(SkyTokensMessageType.FocusPreviousToken);\n event.preventDefault();\n break;\n\n case 'Del':\n case 'Delete':\n this.#sendTokensMessage(SkyTokensMessageType.RemoveActiveToken);\n this.#windowRef.nativeWindow.setTimeout(() => {\n this.#sendTokensMessage(SkyTokensMessageType.FocusActiveToken);\n });\n event.preventDefault();\n break;\n }\n }\n }\n\n public onTokensRendered(): void {\n this.#sendAutocompleteMessage(\n SkyAutocompleteMessageType.RepositionDropdown,\n );\n }\n\n public writeValue(value: any[]): void {\n // Since we are dealing with arrays - clone the array being sent in to ensure we aren't modifying a consumers outer array\n this.#setValue(value ? value.slice() : [], { emitEvent: false });\n }\n\n public registerOnChange(fn: (value: any[]) => void): void {\n this.#notifyChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n // Allows Angular to disable the input.\n public setDisabledState(disabled: boolean): void {\n this.#removeEventListeners();\n\n if (!disabled) {\n this.#addEventListeners();\n }\n\n this.disabled = disabled;\n this.#changeDetector.markForCheck();\n }\n\n public clearSearchText(): void {\n if (this.autocompleteInputDirective) {\n this.autocompleteInputDirective.value = undefined;\n this.autocompleteInputDirective.inputTextValue = '';\n }\n }\n\n // Handles when to focus on the tokens.\n // Check for empty search text on keydown, before the escape key is fully pressed.\n // (Otherwise, a single character being escaped would register as empty on keyup.)\n // If empty on keydown, set a flag so that the appropriate action can be taken on keyup.\n public inputKeydown(event: KeyboardEvent): void {\n const value = (event.target as HTMLTextAreaElement).value;\n\n /* Sanity check as this should only be called when in multiple select mode */\n /* istanbul ignore else */\n if (this.selectMode !== 'single') {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n break;\n case 'ArrowLeft':\n case 'Backspace':\n case 'Left':\n if (value) {\n this.#markForTokenFocusOnKeyUp = false;\n } else {\n this.#markForTokenFocusOnKeyUp = true;\n }\n break;\n default:\n }\n }\n }\n\n public inputKeyup(event: KeyboardEvent): void {\n /* Sanity check as this should only be called when in multiple select mode */\n /* istanbul ignore else */\n if (this.selectMode !== 'single') {\n switch (event.key) {\n case 'Esc':\n case 'Escape':\n this.clearSearchText();\n event.preventDefault();\n break;\n case 'ArrowLeft':\n case 'Backspace':\n case 'Left':\n /* istanbul ignore else */\n if (this.#markForTokenFocusOnKeyUp) {\n this.#sendTokensMessage(SkyTokensMessageType.FocusLastToken);\n event.preventDefault();\n }\n break;\n default:\n }\n\n event.stopPropagation();\n }\n }\n\n public onSearchButtonClick(): void {\n /*istanbul ignore next*/\n if (this.disabled) {\n return;\n }\n this.#sendAutocompleteMessage(SkyAutocompleteMessageType.CloseDropdown);\n let isValueInTextBox = false;\n if (this.selectMode === 'single') {\n isValueInTextBox =\n this.autocompleteInputDirective?.value &&\n this.autocompleteInputDirective.inputTextValue ===\n this.autocompleteInputDirective.value[this.descriptorProperty];\n }\n\n let searchValue = '';\n\n if (!isValueInTextBox && this.autocompleteInputDirective) {\n searchValue = this.autocompleteInputDirective.inputTextValue;\n }\n\n this.openPicker(searchValue);\n this.autocompleteInputDirective?.restoreInputTextValueToPreviousState();\n }\n\n public onShowMoreClick(event: SkyAutocompleteShowMoreArgs): void {\n /* Sanity check */\n /* istanbul ignore else*/\n if (event) {\n this.openPicker(event.inputValue);\n }\n }\n\n public openPicker(initialSearch: string): void {\n if (this.showMoreConfig?.customPicker) {\n this.showMorePickerId = undefined;\n\n this.showMoreConfig.customPicker.open({\n items: this.data,\n initialSearch,\n initialValue: this.#getValue(),\n });\n } else {\n const initialValue = this.#getValue();\n this.selectionModalOpenChange.emit(true);\n\n if (this.#hasSearchAsync()) {\n this.#openSelectionModal =\n this.#createSelectionModalInstance(initialSearch);\n\n this.showMorePickerId = this.#openSelectionModal.id;\n\n this.#openSelectionModal.closed.subscribe((closeArgs) => {\n this.#processPickerResult(\n closeArgs.reason === 'save'\n ? closeArgs.selectedItems\n : initialValue,\n );\n this.selectionModalOpenChange.emit(false);\n });\n } else {\n this.#openNativePicker =\n this.#createNativePickerInstance(initialSearch);\n\n this.showMorePickerId = this.#openNativePicker.componentInstance.id;\n\n this.#openNativePicker.componentInstance.addClick.subscribe(() => {\n this.addButtonClicked();\n });\n\n this.#openNativePicker.closed.subscribe((closeArgs) => {\n let selectedItems: any[];\n\n if (closeArgs.reason === 'save') {\n selectedItems = [];\n\n this.data.forEach((item: any, dataIndex: number) => {\n if (\n closeArgs.data.some((savedItem: any) => {\n return savedItem.index === dataIndex;\n })\n ) {\n selectedItems.push(item);\n }\n });\n } else {\n selectedItems = initialValue;\n }\n\n this.#processPickerResult(selectedItems);\n this.selectionModalOpenChange.emit(false);\n });\n\n this.#changeDetector.markForCheck();\n }\n }\n }\n\n protected onAutocompleteOpenChange($event: boolean): void {\n if ($event) {\n this.openChange.emit(true);\n } else if (!this.#pickerModalOpen()) {\n this.openChange.emit(false);\n }\n }\n\n protected onFocus($event: FocusEvent): void {\n ($event.target as HTMLTextAreaElement).select();\n }\n\n #createSelectionModalInstance(\n initialSearch: string,\n ): SkySelectionModalInstance {\n const initialValue = this.#getValue();\n const modalConfig = this.showMoreConfig?.nativePickerConfig || {};\n\n if (!modalConfig.itemTemplate) {\n modalConfig.itemTemplate = this.searchResultTemplate;\n }\n\n if (this.idProperty === undefined) {\n this.#logSvc.error(\n \"The lookup component's 'idProperty' input is required when `enableShowMore` and 'searchAsync' are used together.\",\n );\n }\n\n return this.#selectionModalSvc.open({\n descriptorProperty: this.descriptorProperty,\n idProperty: this.idProperty!,\n searchAsync: (args) => {\n const searchAsyncArgs: SkyAutocompleteSearchAsyncArgs = {\n displayType: 'modal',\n offset: args.offset,\n searchText: args.searchText,\n continuationData: args.continuationData,\n };\n\n this.searchAsync.emit(searchAsyncArgs);\n\n return searchAsyncArgs.result;\n },\n selectMode: this.selectMode,\n addClick: () => {\n this.addButtonClicked();\n },\n initialSearch,\n itemTemplate: modalConfig.itemTemplate,\n selectionDescriptor: modalConfig.selectionDescriptor,\n showAddButton: this.showAddButton,\n title: modalConfig.title,\n value: initialValue,\n wrapperClass: this.wrapperClass,\n });\n }\n\n #createNativePickerInstance(initialSearch: string): SkyModalInstance {\n const initialValue = this.#getValue();\n const modalConfig = this.showMoreConfig?.nativePickerConfig || {};\n\n if (!modalConfig.itemTemplate) {\n modalConfig.itemTemplate = this.searchResultTemplate;\n }\n\n if (!modalConfig.selectionDescriptor) {\n modalConfig.selectionDescriptor =\n this.selectMode === 'single' ? 'item' : 'items';\n }\n\n const contextProviderValue = new SkyLookupShowMoreNativePickerContext(\n this.descriptorProperty,\n initialSearch,\n initialValue,\n this.data,\n this.searchOrDefault,\n this.selectMode,\n this.showAddButton,\n modalConfig,\n );\n\n return this.#modalService.open(SkyLookupShowMoreModalComponent, {\n providers: [\n {\n provide: SkyLookupShowMoreNativePickerContext,\n useValue: contextProviderValue,\n },\n {\n provide: SkyLookupAdapterService,\n useValue: this.#adapter,\n },\n ],\n size: 'large',\n wrapperClass: this.wrapperClass,\n });\n }\n\n #processPickerResult(selectedItems: any[] | undefined): void {\n this.#openSelectionModal = undefined;\n this.#openNativePicker = undefined;\n this.showMorePickerId = undefined;\n\n /* istanbul ignore next */\n selectedItems = selectedItems || [];\n\n this.#setValue(selectedItems, { emitEvent: true });\n this.#focusInput();\n this.#changeDetector.markForCheck();\n }\n\n public onSearchAsync(args: SkyAutocompleteSearchAsyncArgs): void {\n this.searchAsync.emit(args);\n }\n\n #addToSelected(item: any): void {\n const value = this.#getValue();\n\n let selectedItems: any[];\n\n if (this.selectMode === 'single') {\n selectedItems = [item];\n } else {\n selectedItems = value;\n\n const idProperty = this.idProperty || '';\n\n // If items have a unique identifier, don't allow the same item to be added twice.\n if (\n !this.idProperty ||\n !value.some(\n (existingItem) => existingItem[idProperty] === item[idProperty],\n )\n ) {\n selectedItems.push(item);\n }\n\n this.clearSearchText();\n }\n\n this.#setValue(selectedItems, { emitEvent: true });\n }\n\n #addEventListeners(): void {\n this.#idle = new Subject();\n this.#focusInputOnHostClick();\n }\n\n #removeEventListeners(): void {\n this.#idle.next();\n this.#idle.complete();\n }\n\n #focusInputOnHostClick(): void {\n let hostElement = !this.inputBoxHostSvc\n ? this.#elementRef.nativeElement\n : this.lookupWrapperRef?.nativeElement;\n const documentObj = this.#windowRef.nativeWindow.document;\n\n // Handles focusing the input when the host is clicked.\n // The input should NOT be focused if other elements (tokens, etc.)\n // are currently focused or being tabbed through.\n\n observableFromEvent<MouseEvent>(documentObj, 'click')\n .pipe(takeUntil(this.#idle))\n .subscribe(() => {\n hostElement = !this.inputBoxHostSvc\n ? this.#elementRef.nativeElement\n : this.lookupWrapperRef?.nativeElement;\n this.isInputFocused = hostElement.contains(document.activeElement);\n\n this.#changeDetector.markForCheck();\n });\n\n observableFromEvent<KeyboardEvent>(documentObj, 'focusin')\n .pipe(takeUntil(this.#idle))\n .subscribe(() => {\n hostElement = !this.inputBoxHostSvc\n ? this.#elementRef.nativeElement\n : this.lookupWrapperRef?.nativeElement;\n this.isInputFocused = hostElement.contains(document.activeElement);\n\n this.#changeDetector.markForCheck();\n });\n\n if (hostElement) {\n observableFromEvent(hostElement, 'mouseup')\n .pipe(takeUntil(this.#idle))\n .subscribe(() => {\n const classList = documentObj.activeElement.classList;\n if (!classList || !classList.contains('sky-token')) {\n this.#focusInput();\n }\n });\n }\n }\n\n #focusInput(): void {\n if (this.lookupWrapperRef) {\n this.#adapter.focusInput(this.lookupWrapperRef);\n }\n }\n\n #onAddButtonComplete(args: SkyLookupAddCallbackArgs): void {\n if (this.#openSelectionModal) {\n // Notify the selection modal of the new item. The selection\n // modal will decide whether the new item should be added\n // to the value when the user confirms or cancels the\n // selection modal.\n this.#openSelectionModal.addItem(args.item);\n } else {\n let addItemToValue: boolean | undefined;\n\n if (this.#hasSearchAsync()) {\n addItemToValue = true;\n } else {\n if (args.data) {\n this.data = args.data;\n }\n\n if (this.data.indexOf(args.item) >= 0) {\n if (this.#openNativePicker) {\n // Notify the picker of the new item. The picker will\n // decide whether the new item should be added to the\n // value when the user confirms or cancels the picker.\n (\n this.#openNativePicker\n .componentInstance as SkyLookupShowMoreModalComponent\n ).onItemSelect(true, { value: args.item, selected: false });\n } else {\n addItemToValue = true;\n }\n }\n }\n\n if (addItemToValue) {\n const oldValue = this.#getValue();\n const newValue =\n this.selectMode === 'multiple'\n ? oldValue.concat(args.item)\n : [args.item];\n\n this.#setValue(newValue, { emitEvent: true });\n }\n }\n }\n\n #parseTokens(data: any[]): SkyToken[] {\n return data.map((item: any) => {\n return {\n value: item,\n };\n });\n }\n\n #sendAutocompleteMessage(type: SkyAutocompleteMessageType): void {\n this.autocompleteController.next({ type });\n }\n\n #sendTokensMessage(type: SkyTokensMessageType): void {\n this.tokensController.next({ type });\n }\n\n #updateForSelectMode(): void {\n if (this.autocompleteInputDirective) {\n if (this.selectMode === 'single') {\n const value = this.#getValue();\n this.autocompleteInputDirective.value = value && value[0];\n } else {\n this.clearSearchText();\n }\n }\n }\n\n #hasSearchAsync(): boolean {\n return this.searchAsync.observers.length > 0;\n }\n\n #pickerModalOpen(): boolean {\n return !!(this.#openNativePicker || this.#openSelectionModal);\n }\n\n #populateInputBox(): void {\n if (this.inputBoxHostSvc && this.inputTemplateRef) {\n this.inputBoxHostSvc.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.enableShowMore()\n ? this.showMoreButtonTemplateRef\n : undefined,\n });\n }\n }\n}\n","@if (!inputBoxHostSvc) {\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\" />\n}\n\n<ng-template #inputTemplateRef>\n <div\n #lookupWrapper\n class=\"sky-lookup\"\n [ngClass]=\"{\n 'sky-lookup-focused': isInputFocused,\n 'sky-lookup-disabled': disabled,\n 'sky-lookup-single': selectMode === 'single'\n }\"\n >\n <sky-autocomplete\n [ariaLabelledBy]=\"ariaLabelledBy || inputBoxHostSvc?.labelId\"\n [attr.data-sky-lookup-show-more-picker-id]=\"showMorePickerId\"\n [data]=\"data\"\n [debounceTime]=\"debounceTime\"\n [descriptorProperty]=\"descriptorProperty\"\n [enableShowMore]=\"enableShowMore()\"\n [messageStream]=\"autocompleteController\"\n [propertiesToSearch]=\"propertiesToSearch\"\n [search]=\"searchOrDefault\"\n [searchAsyncDisabled]=\"searchAsync.observers.length === 0\"\n [searchFilters]=\"searchFilters\"\n [searchResultsLimit]=\"searchResultsLimit\"\n [searchResultTemplate]=\"searchResultTemplate\"\n [searchTextMinimumCharacters]=\"searchTextMinimumCharacters\"\n [showAddButton]=\"showAddButton\"\n [wrapperClass]=\"wrapperClass\"\n (addClick)=\"addButtonClicked()\"\n (searchAsync)=\"onSearchAsync($event)\"\n (selectionChange)=\"onAutocompleteSelectionChange($event)\"\n (showMoreClick)=\"onShowMoreClick($event)\"\n (openChange)=\"onAutocompleteOpenChange($event)\"\n >\n <div class=\"sky-lookup-search-flex-wrapper\">\n <div\n class=\"sky-lookup-search\"\n [ngClass]=\"{\n 'sky-field-status-active': isInputFocused && !disabled\n }\"\n >\n @if (selectMode === 'multiple') {\n <sky-tokens\n class=\"sky-lookup-tokens\"\n [disabled]=\"disabled\"\n [displayWith]=\"descriptorProperty\"\n [focusable]=\"false\"\n [messageStream]=\"tokensController\"\n [trackWith]=\"idProperty\"\n [tokens]=\"tokens\"\n (keyup)=\"onTokensKeyUp($event)\"\n (tokensChange)=\"onTokensChange($event)\"\n (tokensRendered)=\"onTokensRendered()\"\n (tokenSelected)=\"onTokenSelected()\"\n (focusIndexOverRange)=\"onTokensFocusIndexOverRange()\"\n >\n <textarea\n class=\"sky-form-control sky-lookup-input\"\n rows=\"1\"\n skyAutocomplete\n wrap=\"off\"\n [attr.aria-describedby]=\"ariaDescribedBy | async\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"controlId\"\n [attr.placeholder]=\"placeholderText\"\n [autocompleteAttribute]=\"autocompleteAttribute\"\n [disabled]=\"disabled\"\n (blur)=\"onAutocompleteBlur()\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"inputKeydown($event)\"\n (keyup)=\"inputKeyup($event)\"\n ></textarea>\n </sky-tokens>\n } @else if (selectMode === 'single') {\n <div class=\"sky-lookup-single-control\">\n <textarea\n class=\"sky-form-control sky-lookup-input\"\n rows=\"1\"\n skyAutocomplete\n wrap=\"off\"\n [attr.aria-describedby]=\"ariaDescribedBy | async\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"controlId\"\n [attr.placeholder]=\"placeholderText\"\n [autocompleteAttribute]=\"autocompleteAttribute\"\n [disabled]=\"disabled\"\n (blur)=\"onAutocompleteBlur()\"\n (focus)=\"onFocus($event)\"\n ></textarea>\n </div>\n }\n </div>\n @if (!inputBoxHostSvc && enableShowMore()) {\n <ng-container *ngTemplateOutlet=\"showMoreButtonTemplateRef\" />\n }\n </div>\n </sky-autocomplete>\n </div>\n</ng-template>\n\n<ng-template #showMoreButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'sky-btn-disabled': disabled }\"\n [attr.aria-label]=\"\n 'skyux_lookup_search_button_show_more' | skyLibResources\n \"\n (click)=\"onSearchButtonClick()\"\n >\n <sky-icon iconName=\"search\" iconSize=\"l\" />\n </button>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTokensModule } from '@skyux/indicators';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyAutocompleteModule } from '../autocomplete/autocomplete.module';\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkyLookupComponent } from './lookup.component';\n\n@NgModule({\n declarations: [SkyLookupComponent],\n imports: [\n CommonModule,\n SkyAutocompleteModule,\n SkyIconModule,\n SkyLookupResourcesModule,\n SkyThemeModule,\n SkyTokensModule,\n ],\n exports: [SkyLookupComponent],\n})\nexport class SkyLookupModule {}\n","/**\n * @deprecated Use `SkyLookupSelectModeType` instead.\n * @internal\n */\nexport enum SkyLookupSelectMode {\n /**\n * Restricts users to a single selection.\n */\n single = 'single',\n\n /**\n * Allows users to select multiple items.\n */\n multiple = 'multiple',\n}\n","/**\n * Specifies configuration options to launch a custom picker when users select\n * the button to view all options.\n */\nexport class SkyLookupShowMoreCustomPickerContext {\n /**\n * The options that users can select in the custom picker.\n */\n public items!: any[];\n /**\n * Search text to filter the contents of the custom picker.\n */\n public initialSearch!: string;\n /**\n * The current selections in the lookup field.\n */\n public initialValue!: any;\n}\n","import { NgModule } from '@angular/core';\n\n/**\n * @deprecated The `SkySelectionModalModule` is no longer needed and can be removed from your application.\n * @internal\n */\n@NgModule({})\nexport class SkySelectionModalModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableFromEvent","uniqueId","i4","i5","i7.SkyAutocompleteSearchAsyncDisabledPipe","map","i2","i3.SkyAutocompleteComponent","i4.SkyAutocompleteInputDirective","i3","i7","i6.SkySearchComponent","i9","i10","i11","i1","take","i2.SkyAutocompleteComponent","i3.SkyAutocompleteInputDirective","i6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAEA;;;;;AAKG;AAQH,MAAM,SAAS,GAAoC;AACjD,IAAA,OAAO,EAAE;AACP,QAAA,sBAAsB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC1C,QAAA,mCAAmC,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE;AAC1E,QAAA,6BAA6B,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;AAC9D,QAAA,6BAA6B,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE;AACnE,QAAA,2BAA2B,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;AACpD,QAAA,iCAAiC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;AAC9D,QAAA,qCAAqC,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;AACxE,QAAA,sCAAsC,EAAE;AACtC,YAAA,OAAO,EAAE,8BAA8B;AACxC,SAAA;AACD,QAAA,sCAAsC,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;AAC3E,QAAA,oCAAoC,EAAE;AACpC,YAAA,OAAO,EAAE,yBAAyB;AACnC,SAAA;AACD,QAAA,0BAA0B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC9C,QAAA,4CAA4C,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;AACpE,QAAA,8CAA8C,EAAE;AAC9C,YAAA,OAAO,EAAE,uCAAuC;AACjD,SAAA;AACD,QAAA,mDAAmD,EAAE;AACnD,YAAA,OAAO,EAAE,gBAAgB;AAC1B,SAAA;AACD,QAAA,8CAA8C,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;AACzE,QAAA,kDAAkD,EAAE;AAClD,YAAA,OAAO,EAAE,wBAAwB;AAClC,SAAA;AACD,QAAA,6CAA6C,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;AACvE,QAAA,iDAAiD,EAAE;AACjD,YAAA,OAAO,EAAE,wBAAwB;AAClC,SAAA;AACD,QAAA,6BAA6B,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;AACpD,QAAA,kCAAkC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;AAC7D,QAAA,iCAAiC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;AAClE,QAAA,6BAA6B,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;AACpD,QAAA,qCAAqC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;AAChE,QAAA,2BAA2B,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;AAC9D,QAAA,kCAAkC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;AAC7D,QAAA,oBAAoB,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;AACnD,QAAA,kBAAkB,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;AAC/C,QAAA,iBAAiB,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AAC7C,QAAA,wBAAwB,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE;AAC3D,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,sBAAsB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;AAC9C,QAAA,mCAAmC,EAAE;AACnC,YAAA,OAAO,EAAE,4BAA4B;AACtC,SAAA;AACD,QAAA,6BAA6B,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE;AAC3E,QAAA,6BAA6B,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE;AACrE,QAAA,2BAA2B,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;AACzD,QAAA,iCAAiC,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE;AACnE,QAAA,qCAAqC,EAAE;AACrC,YAAA,OAAO,EAAE,oCAAoC;AAC9C,SAAA;AACD,QAAA,sCAAsC,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;AACzE,QAAA,sCAAsC,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;AACzE,QAAA,oCAAoC,EAAE;AACpC,YAAA,OAAO,EAAE,6CAA6C;AACvD,SAAA;AACD,QAAA,0BAA0B,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;AAClD,QAAA,4CAA4C,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AACxE,QAAA,8CAA8C,EAAE;AAC9C,YAAA,OAAO,EAAE,iDAAiD;AAC3D,SAAA;AACD,QAAA,mDAAmD,EAAE;AACnD,YAAA,OAAO,EAAE,uBAAuB;AACjC,SAAA;AACD,QAAA,8CAA8C,EAAE;AAC9C,YAAA,OAAO,EAAE,mBAAmB;AAC7B,SAAA;AACD,QAAA,kDAAkD,EAAE;AAClD,YAAA,OAAO,EAAE,8CAA8C;AACxD,SAAA;AACD,QAAA,6CAA6C,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;AAC1E,QAAA,iDAAiD,EAAE;AACjD,YAAA,OAAO,EAAE,8CAA8C;AACxD,SAAA;AACD,QAAA,6BAA6B,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;AACrD,QAAA,kCAAkC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;AACnE,QAAA,iCAAiC,EAAE;AACjC,YAAA,OAAO,EAAE,+BAA+B;AACzC,SAAA;AACD,QAAA,6BAA6B,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;AAC1D,QAAA,qCAAqC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;AACtE,QAAA,2BAA2B,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE;AACrE,QAAA,kCAAkC,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;AACjE,QAAA,oBAAoB,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE;AACzD,QAAA,kBAAkB,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE;AAC1D,QAAA,iBAAiB,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE;AACrD,QAAA,wBAAwB,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE;AAClE,KAAA;CACF;AAED,sBAAsB,CAAC,YAAY,CAAC,SAAS,CAAC;AAE9C;;AAEG;MAIU,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAFzB,aAAa,CAAA,EAAA,CAAA,CAAA;AAEZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAFzB,aAAa,CAAA,EAAA,CAAA,CAAA;;2FAEZ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,aAAa,CAAC;AACzB,iBAAA;;;AC7FD,MAAM,+BAA+B,GAAG;AACtC,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC;AAC5D,IAAA,KAAK,EAAE,IAAI;CACZ;AAED,MAAM,0BAA0B,GAAG;AACjC,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC;AAC5D,IAAA,KAAK,EAAE,IAAI;CACZ;MAOY,6BAA6B,CAAA;AAGxC;;;;AAIG;IACH,IACW,qBAAqB,CAAC,KAAyB,EAAA;QACxD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;QACtC;aAAO;AACL,YAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;QACtC;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,cAAc,EACd,IAAI,CAAC,uBAAuB,CAC7B;IACH;AAEA,IAAA,IAAW,qBAAqB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,uBAAuB,IAAI,KAAK;IAC9C;AAEA;;;;AAIG;IACH,IACW,QAAQ,CAAC,KAA0B,EAAA;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,KAAK;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CACxB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,UAAU,EACV,KAAK,CACN;IACH;AAEA,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,aAAa;IAC3B;IAEA,IAAW,WAAW,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;IAC7C;AAEA,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;IAC7C;IAEA,IAAW,cAAc,CAAC,KAAa,EAAA;QACrC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;IACpD;AAEA,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAEA,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,OAAO;IACrB;IAEA,IAAW,KAAK,CAAC,KAAU,EAAA;AACzB,QAAA,MAAM,UAAU,GAAG,KAAK,KAAK,IAAI,CAAC,OAAO;;QAGzC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC3C,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;;;YAI3B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAChC;YAEA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE;AACvC,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC7B;QACF;IACF;AAEA,IAAA,KAAK;AAEL,IAAA,QAAQ;AAER,IAAA,QAAQ;AAEC,IAAA,WAAW;AAEpB,IAAA,MAAM;AAEN,IAAA,SAAS;AAET,IAAA,cAAc;AAEd,IAAA,cAAc;AAEL,IAAA,SAAS;AAElB,IAAA,YAAY;AAEZ,IAAA,eAAe;AAEf,IAAA,uBAAuB;AAEvB,IAAA,UAAU;AAEV,IAAA,aAAa;AAEb,IAAA,OAAO;AAEP,IAAA,WAAA,GAAA;AAxBS,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAMzC,IAAA,CAAA,cAAc,GAAG,IAAI;AAErB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;AAE3B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAQtC,IAAA,CAAA,UAAU,GAAG,KAAK;QAElB,IAAA,CAAA,aAAa,GAAG,EAAE;;;AA+IX,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAW,EAAE,CAAC;AA1IvC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,EAAQ;AAChC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,EAAQ;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,EAAkC;QAEjE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;QAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IACzD;IAEO,QAAQ,GAAA;AACb,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AAE9C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAErC,QAAAA,SAAmB,CAAC,OAAO,EAAE,OAAO;AACjC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;aACnC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;AAC5C,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEJ,QAAAA,SAAmB,CAAC,OAAO,EAAE,MAAM;AAChC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;aACnC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;AAEJ,QAAAA,SAAmB,CAAC,OAAO,EAAE,OAAO;AACjC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;aACnC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACpB;AACF,QAAA,CAAC,CAAC;AAEJ,QAAAA,SAAmB,CAAC,OAAO,EAAE,QAAQ;AAClC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;aACnC,SAAS,CAAC,MAAK;;AAEd,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC7B;AACF,QAAA,CAAC,CAAC;IACN;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAE5B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IAChC;AAEO,IAAA,UAAU,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAEO,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEO,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEO,IAAA,yBAAyB,CAAC,EAAc,EAAA;AAC7C,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;IAEO,oCAAoC,GAAA;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;;;AAIxC,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU;QAClC;QAEA,IAAI,CAAC,SAAS,EAAE;IAClB;AAEO,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEO,IAAA,QAAQ,CAAC,OAAwB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB;AACA,QAAA,OAAO,IAAI;IACb;;AAGO,IAAA,mBAAmB,CAAC,YAA2B,EAAA;QACpD,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,uBAAuB,EACvB,YAAY,CACb;QACH;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAC5B,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,uBAAuB,CACxB;QACH;IACF;AAEA;;AAEG;AACI,IAAA,eAAe,CAAC,SAAwB,EAAA;QAC7C,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,eAAe,EACf,SAAS,CACV;QACH;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAC5B,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,eAAe,CAChB;QACH;IACF;;;IAIO,QAAQ,CAAC,KAAU,EAAA,EAAS;;AAE5B,IAAA,SAAS,KAAU;AAK1B,IAAA,cAAc,CAAC,UAAsB,EAAA;AACnC,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa;AAExC,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,OAAO,EACP,cAAc,EACd,IAAI,CAAC,qBAAqB,CAC3B;QACD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACtD;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;IACvD;8GA/RW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAH7B,CAAC,+BAA+B,EAAE,0BAA0B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAG7D,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mDAAmD;AAC7D,oBAAA,SAAS,EAAE,CAAC,+BAA+B,EAAE,0BAA0B,CAAC;AACxE,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;sBASE;;sBAwBA;;;ACrEH;;AAEG;MAKU,sCAAsC,CAAA;IAC1C,SAAS,CACd,WAAyD,EACzD,mBAAwC,EAAA;QAExC,OAAO,mBAAmB,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;IAClE;8GANW,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAtC,sCAAsC,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,oCAAA,EAAA,CAAA,CAAA;;2FAAtC,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAJlD,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,oCAAoC;AAC1C,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;;ACVD;;;AAGG;AACG,SAAU,mBAAmB,CAAC,KAAa,EAAA;AAC/C,IAAA,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAC/D;;ACGA;;AAEG;MAEU,6BAA6B,CAAA;AAC/B,IAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAE5D,IAAA,SAAS,GAAc,MAAM,CAAC,gBAAgB,CAAC,CAAC,cAAc,CAC5D,SAAS,EACT,IAAI,CACL;AAED;;AAEG;IACI,WAAW,CAAC,OAAoB,EAAE,SAAiB,EAAA;;;QAGxD,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;QAC7C;IACF;AAEO,IAAA,2BAA2B,CAChC,OAA2B,EAAA;AAE3B,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,oBAAoB;;;AAGlD,QAAA,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,EAC5C,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB;IACH;AAEA;;AAEG;IACI,cAAc,CAAC,OAAoB,EAAE,SAAiB,EAAA;;;QAG3D,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC;QAChD;IACF;AAEO,IAAA,gBAAgB,CACrB,UAAsB,EACtB,WAAuB,EACvB,UAAmB,EAAA;;QAGnB,UAAU,CAAC,MAAK;YACd,MAAM,aAAa,GAAG;kBAClB,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB;AACnD,kBAAE,UAAU,CAAC,aAAa;YAC5B,IAAI,aAAa,EAAE;gBACjB,MAAM,KAAK,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACzD,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CACrB,WAAW,CAAC,aAAa,EACzB,OAAO,EACP,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CACb;YACH;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACI,WAAW,CAAC,OAAoB,EAAE,QAAgB,EAAA;AACvD,QAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ;IAC7B;8GAnEW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA7B,6BAA6B,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;;ACJK,SAAU,oCAAoC,CAClD,OAAoD,EAAA;AAEpD,IAAA,MAAM,UAAU,GAAG,UACjB,UAAkB,EAClB,IAAW,EACX,IAAgC,EAAA;AAEhC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAS,KAAI;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE;AAC3D,gBAAA,OAAO,IAAI;YACb;;YAGA,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAC7C,CAAC,MAA2C,KAAI;AAC9C,gBAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;AACjD,YAAA,CAAC,CACF;YAED,OAAO,YAAY,KAAK,SAAS;AACnC,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,UACb,UAAkB,EAClB,IAAW,EACX,IAAgC,EAAA;QAEhC,MAAM,OAAO,GAAU,EAAE;QAEzB,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QAE1E,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;;AAGvD,QAAA,IAAI,UAAU,KAAK,EAAE,EAAE;AACrB,YAAA,OAAO,YAAY;QACrB;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAgB,KAAI;AACnE,gBAAA,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE;gBAC/C,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;gBAChD,OAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;AACjD,YAAA,CAAC,CAAC;YAEF,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACtB;QACF;AAEA,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,OAAO,MAAM;AACf;;ACjEA;;AAEG;AACH,IAAY,0BAUX;AAVD,CAAA,UAAY,0BAA0B,EAAA;AACpC;;AAEG;AACH,IAAA,0BAAA,CAAA,0BAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB;AAEjB;;AAEG;AACH,IAAA,0BAAA,CAAA,0BAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAsB;AACxB,CAAC,EAVW,0BAA0B,KAA1B,0BAA0B,GAAA,EAAA,CAAA,CAAA;;ACoEtC,IAAIC,UAAQ,GAAG,CAAC;MAUH,wBAAwB,CAAA;AAWnC;;;;;;AAMG;IACH,IACW,IAAI,CAAC,KAAwB,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;IAC3B;AAEA,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;;;AAIG;IACH,IACW,YAAY,CAAC,KAAyB,EAAA;AAC/C,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,IAAI,CAAC;IAClC;AAEA,IAAA,IAAW,YAAY,GAAA;QACrB,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA;;;;AAIG;IACH,IACW,kBAAkB,CAAC,KAAyB,EAAA;AACrD,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,MAAM;IAC7C;AAEA,IAAA,IAAW,kBAAkB,GAAA;QAC3B,OAAO,IAAI,CAAC,oBAAoB;IAClC;AASA;;;AAGG;IACH,IACW,cAAc,CAAC,KAA0B,EAAA;AAClD,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK;QAC/B,IAAI,CAAC,uBAAuB,EAAE;IAChC;AACA,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AAEA;;;AAGG;IACH,IACW,aAAa,CAAC,KAAkD,EAAA;QACzE,IAAI,CAAC,eAAe,GAAG,KAAK,IAAI,IAAI,OAAO,EAA0B;QACrE,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA,IAAA,IAAW,aAAa,GAAA;QACtB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAQA;;;;AAIG;IACH,IACW,kBAAkB,CAAC,KAA2B,EAAA;QACvD,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC;QAE7C,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA,IAAA,IAAW,kBAAkB,GAAA;QAC3B,OAAO,IAAI,CAAC,oBAAoB;IAClC;AAEA;;;;;;AAMG;IACH,IACW,MAAM,CAAC,KAAgD,EAAA;AAChE,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,eAAe;YAClB,KAAK;AACL,gBAAA,oCAAoC,CAAC;oBACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oBAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,iBAAA,CAAC;IACN;AAEA,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,QAAQ;IACtB;AAUA;;;;;;AAMG;IACH,IACW,2BAA2B,CAAC,KAAyB,EAAA;QAC9D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,6BAA6B,GAAG,KAAK;QAC5C;aAAO;AACL,YAAA,IAAI,CAAC,6BAA6B,GAAG,CAAC;QACxC;IACF;AAEA,IAAA,IAAW,2BAA2B,GAAA;QACpC,OAAO,IAAI,CAAC,6BAA6B;IAC3C;AAEA;;;;;;;;AAQG;IACH,IACW,aAAa,CACtB,KAAwD,EAAA;AAExD,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAE5B,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA,IAAA,IAAW,aAAa,GAAA;QAGtB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAEA;;;AAGG;IACH,IACW,kBAAkB,CAAC,KAAyB,EAAA;AACrD,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,CAAC;IACxC;AAEA,IAAA,IAAW,kBAAkB,GAAA;QAC3B,OAAO,IAAI,CAAC,oBAAoB;IAClC;AAEA;;;;AAIG;IACH,IACW,aAAa,CAAC,KAA0B,EAAA;AACjD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK;QAC9B,IAAI,CAAC,uBAAuB,EAAE;IAChC;AACA,IAAA,IAAW,aAAa,GAAA;QACtB,OAAO,IAAI,CAAC,eAAe;IAC7B;;;AAuEA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,EAAE;IACnC;IAEA,IAAW,aAAa,CAAC,KAAoC,EAAA;AAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,EAAE;IACnC;IAEA,IAAW,aAAa,CAAC,KAAe,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAUA,IAAA,IAAW,eAAe,GAAA;QACxB,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc;IACtD;;IAQA,IACW,cAAc,CACvB,SAAoD,EAAA;QAEpD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,MAAM,KAAK,CACT;gBACE,+DAA+D;gBAC/D,iEAAiE;gBACjE,wCAAwC;AACzC,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ;QACH;AAEA,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;;AAEvC,YAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE;AAEtC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;YAEjC,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB;YAE3D,IAAI,CAAC,gBAAgB,CAAC;iBACnB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC,EAC1C,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAC/B,SAAS,CAAC,CAAC,MAAM,KAAI;AACnB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,gBAAA,OAAO,EAAE,CAAC,MAAM,CAAC;AACnB,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC;AACvC,YAAA,CAAC,CAAC;;YAGJ,IAAI,CAAC,gBAAgB,CAAC;AACnB,iBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC;iBAC1D,SAAS,CAAC,MAAK;gBACd,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,SAAS,CAAC,SAAS,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACnC,YAAA,CAAC,CAAC;YAEJ,IAAI,CAAC,gBAAgB,CAAC;AACnB,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC;iBAC/C,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;gBACrB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACjD,IAAI,CAAC,aAAa,EAAE;gBACtB;AACA,gBAAA,IAAI,IAAI,CAAC,2BAA2B,KAAK,CAAC,EAAE;AAC1C,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,oBAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;QACN;IACF;AAEA,IAAA,IAAW,cAAc,GAAA;QACvB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;IAKA,IACW,UAAU,CAAC,KAA6B,EAAA;QACjD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;AAEA,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,YAAY;IAC1B;AAMA;;AAEG;AACH,IAAA,mBAAmB;AAEV,IAAA,eAAe;AAExB,IAAA,QAAQ;AAEC,IAAA,aAAa;AAEb,IAAA,eAAe;AAEf,IAAA,WAAW;AAEX,IAAA,oBAAoB;AAEpB,IAAA,oBAAoB;AAEpB,IAAA,mBAAmB;AAE5B,IAAA,SAAS;AAEA,IAAA,gBAAgB;AAIzB,IAAA,0BAA0B;AAE1B,IAAA,iBAAiB;AAEjB,IAAA,cAAc;AAEd,IAAA,QAAQ;AAEC,IAAA,eAAe;AAExB;;;;AAIG;AACH,IAAA,yBAAyB;AAEzB,IAAA,iBAAiB;AAEjB,IAAA,iBAAiB;AAER,IAAA,OAAO;AAKhB,IAAA,MAAM;AAEN,IAAA,cAAc;AAEd,IAAA,oBAAoB;AAEpB,IAAA,gBAAgB;AAEhB,IAAA,eAAe;AAEf,IAAA,gBAAgB;AAEhB,IAAA,eAAe;AAEf,IAAA,oBAAoB;AAEpB,IAAA,YAAY;AAEZ,IAAA,QAAQ;AAER,IAAA,eAAe;AAEf,IAAA,eAAe;AAEf,IAAA,oBAAoB;AAEpB,IAAA,6BAA6B;AAE7B,IAAA,eAAe;AAEf,IAAA,WAAA,GAAA;AAzQA;;;;;AAKG;QAEI,IAAA,CAAA,mBAAmB,GAAwB,KAAK;AAEvD;;;;;AAKG;QACI,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,KAAK,0DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEpE;;;;;AAKG;QACI,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAC,IAAI,gEAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEzE;;;AAGG;AAEI,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;AAE1C;;;AAGG;AAEI,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA+B;AAEtE;;AAEG;AAEI,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAkC;AAE3E;;;AAGG;AAEI,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAkC;AAEvE;;AAEG;AAEI,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;QAsBxC,IAAA,CAAA,MAAM,GAAG,KAAK;QAMd,IAAA,CAAA,UAAU,GAAG,EAAE;QAMf,IAAA,CAAA,gBAAgB,GAAG,KAAK;AA4F/B;;AAEG;QACH,IAAA,CAAA,mBAAmB,GAAG,CAAC,CAAC;AAEf,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAIvD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AAEvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAElD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAEtD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAE7D,IAAA,CAAA,SAAS,GAAG,KAAK;AAER,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,sBAAsB,EAAE;AACzD,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;AAEF,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,OAAO,EAAQ;AAIhD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;AAI3B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEpD;;;;AAIG;QACH,IAAA,CAAA,yBAAyB,GAAkB,EAAE;AAI7C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAE9C,QAAA,IAAA,CAAA,OAAO,GAAmC,MAAM,CACvD,oBAAoB,EACpB,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,EAAE,MAAM;QAET,IAAA,CAAA,MAAM,GAAU,EAAE;QAElB,IAAA,CAAA,cAAc,GAAG,CAAC;QAElB,IAAA,CAAA,oBAAoB,GAAG,MAAM;QAE7B,IAAA,CAAA,gBAAgB,GAAG,KAAK;AAMxB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAA0B;AAEvD,QAAA,IAAA,CAAA,oBAAoB,GAAG,CAAC,MAAM,CAAC;QAU/B,IAAA,CAAA,oBAAoB,GAAG,CAAC;QAExB,IAAA,CAAA,6BAA6B,GAAG,CAAC;QAEjC,IAAA,CAAA,eAAe,GAAG,KAAK;AAGrB,QAAA,IAAI,CAAC,eAAe,GAAG,oCAAoC,CAAC;YAC1D,kBAAkB,EAAE,CAAC,MAAM,CAAC;AAC5B,YAAA,aAAa,EAAE,SAAS;AACzB,SAAA,CAAC;AAEF,QAAA,MAAM,EAAE,GAAG,EAAEA,UAAQ;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAA,sBAAA,EAAyB,EAAE,EAAE;AAClD,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAA,yBAAA,EAA4B,EAAE,EAAE;QACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IAC/D;IAEO,eAAe,GAAA;QACpB,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEO,WAAW,GAAA;QAChB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE;AACtC,QAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE;AAC1C,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;QAC9B,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IAC5B;IAEO,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,oCAAoC,EAAE;QAC5D;QACA,IAAI,CAAC,cAAc,EAAE;IACvB;AAEO,IAAA,aAAa,CAAC,KAAoB,EAAA;;;AAGvC,QAAA,IAAI,KAAK,CAAC,GAAG,EAAE;YACb,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;AACnC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C,YAAA,MAAM,eAAe,GAAG,aAAa,EAAE,EAAE;AACzC,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAClD,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,eAAe,CACvC;YAED,QAAQ,GAAG;AACT,gBAAA,KAAK,OAAO;oBACV,IAAI,oBAAoB,EAAE;AACxB,wBAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC;wBAE7C,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;4BACnD,IAAI,CAAC,cAAc,EAAE;wBACvB;6BAAO;4BACL,IAAI,CAAC,YAAY,EAAE;wBACrB;oBACF;yBAAO;wBACL,IAAI,aAAa,EAAE;4BACjB,aAAa,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;wBACtD;oBACF;oBAEA,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,eAAe,EAAE;oBACvB;AAEF,gBAAA,KAAK,KAAK;oBACR,IAAI,oBAAoB,EAAE;AACxB,wBAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC;oBAC/C;yBAAO;wBACL,IAAI,CAAC,gBAAgB,EAAE;oBACzB;oBAEA,IAAI,CAAC,cAAc,EAAE;oBACrB;AAEF,gBAAA,KAAK,QAAQ;oBACX,IAAI,CAAC,cAAc,EAAE;oBACrB;AAEF,gBAAA,KAAK,WAAW;AAChB,gBAAA,KAAK,MAAM;oBACT,IAAI,CAAC,mBAAmB,EAAE;oBAC1B,IACE,IAAI,CAAC,mBAAmB;AACtB,wBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;AAC3C,wBAAA,IAAI,CAAC,mBAAmB,KAAK,CAAC,CAAC,EAC/B;AACA,wBAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;oBAC9B;yBAAO;wBACL,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC;oBACzD;oBACA,IAAI,CAAC,gBAAgB,EAAE;AACvB,oBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;oBACnC,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,eAAe,EAAE;oBACvB;AAEF,gBAAA,KAAK,SAAS;AACd,gBAAA,KAAK,IAAI;oBACP,IAAI,CAAC,mBAAmB,EAAE;AAC1B,oBAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,EAAE;AACjC,wBAAA,IAAI,CAAC,mBAAmB;AACtB,4BAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;oBAC7C;yBAAO;wBACL,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC;oBACzD;oBACA,IAAI,CAAC,gBAAgB,EAAE;AACvB,oBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;oBACnC,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,eAAe,EAAE;oBACvB;;QAEN;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC;AACF,aAAA,UAAU,CAAC;AACV,YAAA,SAAS,EAAE,+BAA+B;AAC1C,YAAA,iBAAiB,EAAE,+BAA+B;AAClD,YAAA,oBAAoB,EAAE;gBACpB,qCAAqC;AACrC,gBAAA,IAAI,CAAC,kBAAkB;AACxB,aAAA;SACF;AACA,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,gBAAgB,KAAI;YAC9B,IAAI,kBAAkB,GAAG,EAAE;YAC3B,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,EAAE;gBAC1D,kBAAkB;oBAChB,IAAI,CAAC,kBAAkB,KAAK;0BACxB,gBAAgB,CAAC;AACnB,0BAAE,gBAAgB,CAAC,oBAAoB;AAC3C,gBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACxD;AAAO,iBAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,CAAC,EAAE;gBACxC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAChE;AACF,QAAA,CAAC,CAAC;IACN;IAEO,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACxD,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,oCAAoC,EAAE;QAC5D;QACA,IAAI,CAAC,cAAc,EAAE;IACvB;IAEO,aAAa,CAAC,EAAU,EAAE,KAAiB,EAAA;AAChD,QAAA,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAEhC,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACnD,IAAI,CAAC,cAAc,EAAE;QACvB;aAAO;YACL,IAAI,CAAC,YAAY,EAAE;QACrB;QAEA,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;IACzB;AAEO,IAAA,iBAAiB,CAAC,EAAU,EAAA;AACjC,QAAA,IAAI,EAAE,KAAK,IAAI,CAAC,mBAAmB,EAAE;YACnC,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;YAC7B,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;QACrC;IACF;AAEO,IAAA,gBAAgB,CAAC,GAAgB,EAAA;QACtC,OAAO,GAAG,KAAK,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACzE;AAEA,IAAA,kBAAkB,CAAC,UAA8B,EAAA;;AAE/C,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBACzB;AACF,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,2BAA2B,KAAK,CAAC,EAAE;gBACjE,IAAI,CAAC,sBAAsB,EAAE;gBAC7B;YACF;YAEA,MAAM,iBAAiB,GAAG,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;YAClD,MAAM,YAAY,GAChB,iBAAiB,CAAC,MAAM,IAAI,IAAI,CAAC,2BAA2B;AAC9D,YAAA,MAAM,WAAW,GACf,UAAU,KAAK,IAAI,CAAC,UAAU;AAC9B,iBAAC,IAAI,CAAC,UAAU,KAAK,EAAE,IAAI,IAAI,CAAC,2BAA2B,KAAK,CAAC,CAAC;AAEpE,YAAA,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE;YAC1C,IAAI,CAAC,uBAAuB,EAAE;AAE9B,YAAA,IAAI,YAAY,IAAI,WAAW,EAAE;gBAC/B,IAAI,CAAC,8BAA8B,EAAE;YACvC;iBAAO;AACL,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YACrC;QACF;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;IACF;IAEA,sBAAsB,GAAA;;QAEpB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACpD,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,SAAS;YACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QACxD;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACnD,IAAI,CAAC,cAAc,EAAE;QACvB;aAAO;YACL,IAAI,CAAC,YAAY,EAAE;QACrB;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;IAEA,gBAAgB,GAAA;AACd,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;QAC1C,MAAM,YAAY,GAAG,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,IAAI,EAAE;AAE5D,QAAA,IAAI,CAAC,YAAY,IAAI,cAAc,EAAE,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE;AACrE,YAAA,cAAc,CAAC,KAAK,GAAG,SAAS;YAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QACxD;aAAO,IAAI,YAAY,EAAE;YACvB,cAAc,EAAE,oCAAoC,EAAE;QACxD;IACF;IAEA,8BAA8B,GAAA;QAC5B,IAAI,CAAC,oBAAoB,EAAE;QAE3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC;AACvD,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;gBACf,MAAM,KAAK,GACT,MAAM,EAAE,KACT,EAAE,MAAM,CAAC,CAAC,IAAI,KAAI;AACjB,oBAAA,OAAO,IAAI,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI;AAChD,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,aAAa;oBAChB,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAClB,wBAAA,MAAM,MAAM,GAAgC;AAC1C,4BAAA,SAAS,EAAE,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE;AAC5C,4BAAA,IAAI,EAAE,CAAC;yBACR;AACD,wBAAA,OAAO,MAAM;oBACf,CAAC,CAAC,IAAI,EAAE;gBAEV,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE,UAAU,IAAI,CAAC;gBAEjD,IAAI,CAAC,uBAAuB,EAAE;YAChC,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YACrC,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,uBAAuB,GAAA;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QAC5D,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AACpD,YAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC/B;QAEA,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;;;AAInC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;;YAEf,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvB,oBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;oBACpC,IAAI,CAAC,6BAA6B,EAAE;gBACtC;AACF,YAAA,CAAC,CAAC;QACJ;aAAO;YACL,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;QACrC;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtE,YAAA,MAAM,eAAe,GAAmC;AACtD,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B;AAED,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;YAEtC,OAAO,IAAI,CAAC,aAAa;AACvB,kBAAE,IAAI,CAAC,4BAA4B,CAAC,eAAe;AACnD,kBAAE,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC;QAC5D;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE;AAC9D,YAAA,OAAO,EAAE,SAAS;AACnB,SAAA,CAAC;AAEF,QAAA,IAAI,MAAM,YAAY,KAAK,EAAE;AAC3B,YAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QACzD;AAEA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACtB,GAAG,CAAC,CAAC,KAAK,KAAI;YACZ,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE;QAC5C,CAAC,CAAC,CACH;IACH;AAEA,IAAA,4BAA4B,CAC1B,eAA+C,EAAA;AAE/C,QAAA,MAAM,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,EAAE;AACrE,QAAA,MAAM,gBAAgB,GAAG,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;AAEnE,QAAA,IAAI,eAAe,CAAC,MAAM,EAAE;AAC1B,YAAA,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAChC,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,MAAM,KAAI;gBACb,IACG,MAAM,CAAC,KAAkC,CAAC,IAAI,CAC7C,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC,UAAU,CAC5D,EACD;AACA,oBAAA,OAAO,MAAM;gBACf;;;AAIA,gBAAA,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE;AAChE,YAAA,CAAC,CAAC;;AAEF,YAAA,SAAS,CAAmC,gBAAgB,CAAC,CAC9D;QACH;AAEA,QAAA,OAAO,EAAE,CAAC,gBAAgB,CAAC;IAC7B;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;QACpC;IACF;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,UAAkB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC9B,YAAA,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,UAAU;AACxD,iBAAA,iBAAiB;AACjB,iBAAA,IAAI,EAAE;YACT,IAAI,CAAC,oBAAoB,EAAE;AACzB,gBAAA,OAAO,EAAE;YACX;YAEA,IAAI,kBAAkB,GAAa,EAAE;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACzD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;AAC7D,qBAAA,QAAQ;AACR,qBAAA,iBAAiB,EAAY;AAChC,gBAAA,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,KAAK,CAAC;gBAEtD,IAAI,MAAM,GAAG,CAAC;AACd,gBAAA,IAAI,KAAa;gBACjB,OACE,CAAC,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;oBAClE,CAAC,CAAC,EACF;AACA,oBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;AACnE,oBAAA,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC,MAAM;AAClC,oBAAA,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC;gBAC/D;YACF;;YAGA,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACzC;AAEA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,uBAAuB,CAAC,EAAU,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC;;QAEjE,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;YACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC/C,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI;YAClC;YACA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACnD;IACF;IAEA,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAC1C,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,mBAAmB,EAAE,IAAI;gBACzB,mBAAmB,EAAE,IAAI,CAAC,oBAAoB;gBAC9C,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,aAAA,CAAC;AAEF,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAChE,oBAAA,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5D,gBAAA,CAAC,CAAC;YACJ;AAEA,YAAA,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAE/C,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YACnC,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,6BAA6B,EAAE;YACpC,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;IACF;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;IAEA,oBAAoB,GAAA;QAClB,MAAM,aAAa,GACjB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC;;;AAG1D,QAAA,IAAI,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE;YACxC,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3D;IACF;IAEA,uBAAuB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC/C;IACF;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC;QAChE;IACF;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QACvB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;QACnC,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,6BAA6B,EAAE;QACpC,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;IAEA,uBAAuB,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AAE9C,QAAAD,SAAmB,CAAgB,OAAO,EAAE,SAAS;AAClD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;AACnC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC3B,QAAA,CAAC,CAAC;AAEJ,QAAAA,SAAmB,CAAC,MAAM,EAAE,QAAQ;AACjC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;aACnC,SAAS,CAAC,MAAK;;YAEd,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;AAClC,gBAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CACnC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,CAAC,CAAC,IAAI,CAAC,gBAAgB,CACxB;YACH;AACF,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QAC3B;IACF;IAEA,cAAc,GAAA;;;QAGZ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACrC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AAEjE,YAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CACnC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,CAAC,CAAC,IAAI,CAAC,gBAAgB,CACxB;YAED,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;gBAC9C,cAAc,EAAE,sBAAsB,CAAC,QAAQ;AAC/C,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,mBAAmB,EAAE,MAAM;AAC5B,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACzB;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QAC3B;IACF;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;QACpC;AAEA,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC3B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;AACnC,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,QAAQ,OAAO,CAAC,IAAI;gBAClB,KAAK,0BAA0B,CAAC,aAAa;oBAC3C,IAAI,CAAC,cAAc,EAAE;oBACrB;gBACF,KAAK,0BAA0B,CAAC,kBAAkB;;oBAEhD,UAAU,CAAC,MAAK;;AAEd,wBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,4BAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;wBACzB;AACF,oBAAA,CAAC,CAAC;oBACF;;AAEN,QAAA,CAAC,CAAC;IACN;IAEA,6BAA6B,GAAA;;QAE3B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,yBAAyB;oBAC5B,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACjE,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;oBAC5C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1C,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,gBAAgB,EAAE;YACzB;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACjE;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CACjC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EACxD,mCAAmC,CACpC;QACH;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAC9B,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EACxD,mCAAmC,CACpC;YACD,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;IAEA,2BAA2B,GAAA;;QAEzB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,eAAe,GAAG,oCAAoC,CAAC;gBAC1D,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,aAAA,CAAC;QACJ;IACF;IAEA,uBAAuB,GAAA;AACrB,QAAA,MAAM,gBAAgB,GACpB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,2BAA2B,KAAK,CAAC;AAC5D,aAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1D,IAAI,gBAAgB,KAAK,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC/C;IACF;8GAhmCW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,2BAAA,EAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAJxB,CAAC,6BAA6B,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA+T5B,6BAA6B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAkEF,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGnB,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjd7C,unMA+KA,EAAA,MAAA,EAAA,CAAA,g1JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,sCAAA,EAAA,IAAA,EAAA,oCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FD9Fa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;+BACE,kBAAkB,EAAA,SAAA,EAGjB,CAAC,6BAA6B,CAAC,mBACzB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,KAAK,EAAA,QAAA,EAAA,unMAAA,EAAA,MAAA,EAAA,CAAA,g1JAAA,CAAA,EAAA;;sBAWhB;;sBASA;;sBAcA;;sBAcA;;sBAaA;;sBAOA;;sBAaA;;sBAaA;;sBAQA;;sBAkBA;;sBAoBA;;sBAUA;;sBAsBA;;sBAmBA;;sBAcA;;sBAaA;;sBASA;;sBAuBA;;sBAOA;;sBAMA;;sBAOA;;sBAMA;;sBAyCA,YAAY;uBAAC,6BAA6B;;sBAkE1C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;;sBAGrD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;ME/alC,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,iBAlB9B,wBAAwB;YACxB,6BAA6B;AAC7B,YAAA,sCAAsC,aAGtC,YAAY;YACZ,WAAW;YACX,cAAc;YACd,sBAAsB;YACtB,aAAa;YACb,WAAW;YACX,wBAAwB;YACxB,gBAAgB;YAChB,cAAc;YACd,aAAa,CAAA,EAAA,OAAA,EAAA,CAEL,wBAAwB,EAAE,6BAA6B,CAAA,EAAA,CAAA,CAAA;AAEtD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAb9B,YAAY;YACZ,WAAW;YACX,cAAc;YACd,sBAAsB;YACtB,aAAa;YACb,WAAW;YACX,wBAAwB;YACxB,gBAAgB;YAChB,cAAc;YACd,aAAa,CAAA,EAAA,CAAA,CAAA;;2FAIJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBApBjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,wBAAwB;wBACxB,6BAA6B;wBAC7B,sCAAsC;AACvC,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,sBAAsB;wBACtB,aAAa;wBACb,WAAW;wBACX,wBAAwB;wBACxB,gBAAgB;wBAChB,cAAc;wBACd,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,wBAAwB,EAAE,6BAA6B,CAAC;AACnE,iBAAA;;;AC7BD;;;AAGG;AACG,SAAU,gBAAgB,CAC9B,IAAe,EACf,OAA6B,EAAA;AAE7B,IAAA,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;AACvB,IAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAEvE,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AAC3B,QAAA,MAAM,MAAM,GAA2B;YACrC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EACF,OAAO,CAAC,IAAI;gBACZ,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3C,2CAA2B,EAAE;YAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B;AAED,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QAC3C;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,CAAC;AACJ;;AC5BA;;AAEG;MACU,yBAAyB,GACpC,IAAI,cAAc,CAAyB,wBAAwB;;ACsCrE,MAAM,oBAAoB,GAAG,IAAI;AAEjC,MAAM,2BAA2B,GAAG;AAClC,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,IAAA,KAAK,EAAE,IAAI;CACZ;AAED,IAAI,QAAQ,GAAG,CAAC;MAWH,wBAAwB,CAAA;AAuBnC;;;;AAIG;IACH,IACW,QAAQ,CAAC,UAA+B,EAAA;AACjD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,KAAK;QAErC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE;QACzC;aAAO;AACL,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE;QACxC;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;AAEA,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,UAAU;IACxB;AAqDS,IAAA,eAAe;AAExB,IAAA,mBAAmB;AAEV,IAAA,SAAS;AAElB,IAAA,gBAAgB;AAEhB,IAAA,UAAU;AAED,IAAA,cAAc;AAEvB,IAAA,UAAU;AAED,IAAA,iBAAiB;AAGjB,IAAA,oBAAoB;AAmBpB,IAAA,eAAe;AACf,IAAA,OAAO;AAOhB,IAAA,WAAA,GAAA;AAzIA;;;;AAIG;QACI,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAE9C;;;;;AAKG;QACa,IAAA,CAAA,cAAc,GAAG,KAAK,CACpC,oBAAoB,2DAElB,SAAS,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAC,WAAW,EAAE,EAAA,CAE5E;AAwBD;;;AAGG;AACa,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAoB,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,GAAA,EAAA,CAAA,EAChE,SAAS,EAAE,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,GAC1E;AAEF;;AAEG;QACa,IAAA,CAAA,qBAAqB,GAAG,MAAM,EAA0B;AAExE;;;AAGG;;QAEI,IAAA,CAAA,oBAAoB,GAAG,MAAM,EAAc;QAElC,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAElD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,kBAAkB,EAAE;QAE5D,IAAA,CAAA,2BAA2B,GAAG,CAAC;AAO/B,QAAA,IAAA,CAAA,OAAO,GAAkC,MAAM,CACpD,yBAAyB,EACzB;AACE,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CACF;AAEM,QAAA,IAAA,CAAA,OAAO,GAAG,CAAA,wBAAA,EAA2B,QAAQ,EAAE,EAAE;AASxC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,sBAAsB,EAAE;AAC/D,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;AAEO,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAI3C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QAErC,IAAA,CAAA,gBAAgB,GAAG,IAAI;QAEvB,IAAA,CAAA,UAAU,GAAqB,IAAI;AAE1B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;QAE7C,IAAA,CAAA,UAAU,GAAG,KAAK;AAET,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CACjC,SAAS,6DACV;AACQ,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CACtC,MAAK;AACH,YAAA,IAAI,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE;YAC9C,MAAM,kBAAkB,GAAG,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;YAC/D,IAAI,kBAAkB,EAAE;gBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CACtC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,kBAAkB,CACjD;gBACD,IAAI,UAAU,EAAE;oBACd,eAAe,GAAG,UAAU;gBAC9B;YACF;AACA,YAAA,OAAO,eAAe;AACxB,QAAA,CAAC,iEAEC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,GAEvC;AAEQ,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC9C,IAAA,CAAA,OAAO,GAAG,QAAQ,CACzB,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,IAAI,CAACC,KAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,EACnE;AACE,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa;AACjD,SAAA,CACF;;;AAiFM,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,KAAyC,KAAU,EAAE,CAAC;;AAGlE,QAAA,IAAA,CAAA,SAAS,GAAG,MAAW,EAAE,CAAC;;;QA/E/B,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC9C,YAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,UAAU,CAAC;AACpD,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAClC,SAAuC,EACvC,IAAI,CACL;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI;QACtC;aAAO;AACL;;;AAGG;AACH,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;AAEA;;;AAGG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IAChC;AAEA;;;AAGG;IACI,kBAAkB,GAAA;QACvB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;;;AAKG;AACI,IAAA,iBAAiB,CAAC,UAA0C,EAAA;AACjE,QAAA,IAAI,UAAU,CAAC,YAAY,EAAE;YAC3B,IAAI,CAAC,UAAU,CACb,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CACnB,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,YAAY,CAAC,IAAI,CACnE,CACF;QACH;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC5B;IACF;AAEA;;;AAGG;AACI,IAAA,sBAAsB,CAAC,CAAa,EAAA;AACzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC;AASO,IAAA,gBAAgB,CACrB,EAAuD,EAAA;AAEvD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEO,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;AAGO,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEO,IAAA,QAAQ,CAAC,OAAwB,EAAA;AACtC,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE;YACxD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE;AACnD,YAAA,IACE,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;AAC9B,gBAAA,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;AAC7C,gBAAA,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,EAC/D;AACA,gBAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE;YACrC;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEO,IAAA,UAAU,CAAC,KAAyC,EAAA;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAC3C,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;AAEjC,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC5C,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE;gBAEhB,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3C;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;;;AAGnC,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE;YAC1C;AAEA,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;AAAO,aAAA,IAAI,EAAE,IAAI,CAAC,UAAU,YAAY,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE;AAClE,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;AAEU,IAAA,OAAO,CAAC,MAAkB,EAAA;AACjC,QAAA,MAAM,CAAC,MAA8B,CAAC,MAAM,EAAE;IACjD;IAEA,kBAAkB,CAChB,QAA4C,EAC5C,QAA4C,EAAA;AAE5C,QAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACxB,YAAA,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QACxC;;;;AAKA,QAAA,OAAO,CAAC,QAAQ,IAAI,CAAC,QAAQ;IAC/B;IAEA,eAAe,CACb,CAAyB,EACzB,CAAyB,EAAA;AAEzB,QAAA,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;IAC/C;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,SAAS,GAAG,gBAAgB,CAC9B,YAAY,CAAC,cAAc,EAAE,EAC7B,IAAI,CAAC,OAAO,EAAE,CACf;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE;AAC/B;;;AAGG;AACH,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBAC5B,OAAO,OAAO,CAAC,QAAQ;gBACvB,OAAO,OAAO,CAAC,SAAS;gBACxB,OAAO,OAAO,CAAC,QAAQ;AACzB,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,IAAI,CACvC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,cAAc,CAC7C;AACD,QAAA,SAAS,GAAG,IAAI,CAAC,oCAAoC,CAAC,SAAS,CAAC;AAEhE,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACxD,QAAA,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAA+B,KAAI;gBAC/D,OAAO,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,oCAAoC,CAClC,SAAmC,EAAA;AAEnC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAChD,QAAA,IAAI,oBAA4B;AAChC,QAAA,IAAI,mBAA2C;QAE/C,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACjD,YAAA,IACE,CAAC,CAAC,IAAI,CAAC,mBAAmB;gBACxB,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC;AACjD,iBAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;iBACtC,CAAC,IAAI,CAAC,mBAAmB;AACxB,oBAAA,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EACrD;gBACA,OAAO,CAAC,CAAC;YACX;iBAAO;AACL,gBAAA,OAAO,CAAC;YACV;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,eAAe,EAAE;;;YAGnB,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CACjC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CACjE;YAED,IAAI,YAAY,EAAE;gBAChB,mBAAmB,GAAG,YAAY;AAClC,gBAAA,oBAAoB,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC;AAE7D,gBAAA,IAAI,oBAAoB,IAAI,CAAC,EAAE;AAC7B,oBAAA,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;oBACzC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC;gBACtD;YACF;QACF;AAEA,QAAA,OAAO,SAAS;IAClB;IAEA,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACjD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS;YAC7C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe;AAE3D,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;gBAC5B,aAAa,EAAE,IAAI,CAAC,gBAAgB;AACrC,aAAA,CAAC;QACJ;IACF;8GAxYW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EALxB,CAAC,2BAA2B,CAAC,8FA4E7B,6BAA6B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAgBhC,WAAW,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxJrB,uwEAgEA,EAAA,MAAA,EAAA,CAAA,696IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDCa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,SAAA,EAGlB,CAAC,2BAA2B,CAAC,EAAA,eAAA,EACvB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,cACzB,KAAK,EAAA,QAAA,EAAA,uwEAAA,EAAA,MAAA,EAAA,CAAA,696IAAA,CAAA,EAAA;;sBA8BhB;;sBA2CA,SAAS;uBAAC,6BAA6B;;sBAevC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE;AAC7B,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,MAAM,EAAE,IAAI;AACb,qBAAA;;;MElIU,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAArB,qBAAqB,EAAA,YAAA,EAAA,CAZjB,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAErC,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,wBAAwB;AACxB,YAAA,cAAc,aAEN,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAEvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAV9B,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,wBAAwB;YACxB,cAAc,CAAA,EAAA,CAAA,CAAA;;2FAIL,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,wBAAwB,CAAC;AACxC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,aAAa;wBACb,wBAAwB;wBACxB,cAAc;AACf,qBAAA;oBACD,OAAO,EAAE,CAAC,wBAAwB,CAAC;AACpC,iBAAA;;;ACrBD;;AAEG;MAEU,uBAAuB,CAAA;AAC3B,IAAA,WAAW,CAAC,QAAoB,EAAA;QACrC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;IACrC;AAEO,IAAA,UAAU,CAAC,QAAoB,EAAA;QACpC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;IACpC;AAEA,IAAA,WAAW,CAAC,QAAoB,EAAA;QAC9B,OAAO,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;IACtD;8GAXW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACyBD,MAAM,sBAAsB,GAAG,YAAY;AAC3C,MAAM,eAAe,GAAG,KAAK;AAC7B,MAAM,gBAAgB,GAAG,MAAM;MAUlB,kBAAkB,CAAA;AA8C7B;;;;;;AAMG;IACH,IACW,UAAU,CAAC,KAAyB,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,sBAAsB;IACrD;AAEA,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA;;;AAGG;IACH,IACW,YAAY,CAAC,KAAyB,EAAA;AAC/C,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,IAAI,CAAC;QAChC,IAAI,CAAC,wBAAwB,EAAE;IACjC;AAEA,IAAA,IAAW,YAAY,GAAA;QACrB,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA;;;AAGG;IACH,IACW,QAAQ,CAAC,KAA0B,EAAA;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,KAAK;IAClC;AAEA,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,UAAU;IACxB;AAwBS,IAAA,UAAU;AAEnB,IAAA,oBAAoB;AAEX,IAAA,MAAM;AAEN,IAAA,cAAc;AAEvB,IAAA,cAAc;AAEd,IAAA,iBAAiB;AAEjB,IAAA,cAAc;AAEd,IAAA,UAAU;AAEV,IAAA,YAAY;AAEH,IAAA,WAAW;AACX,IAAA,SAAS;AACT,IAAA,cAAc;AACd,IAAA,WAAW;AAEpB,IAAA,WAAA,GAAA;AAhHA;;AAEG;AAEI,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAE/C;;AAEG;AAEI,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AAEhD;;AAEG;AAEI,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;QA2DtC,IAAA,CAAA,gBAAgB,GAAG,KAAK;QAExB,IAAA,CAAA,UAAU,GAAG,IAAI;QAEjB,IAAA,CAAA,aAAa,GAAG,IAAI;QAEpB,IAAA,CAAA,WAAW,GAAG,KAAK;QAEnB,IAAA,CAAA,iBAAiB,GAAG,KAAK;QAEzB,IAAA,CAAA,iBAAiB,GAAG,KAAK;AAIvB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAE/C,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEhE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAE3B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAEzD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAU;QAItC,IAAA,CAAA,cAAc,GAAG,CAAC;QAElB,IAAA,CAAA,UAAU,GAAG,KAAK;QAElB,IAAA,CAAA,YAAY,GAAG,sBAAsB;AAE5B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC7C,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAGnE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE;IAC5D;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;YAChC,IAAI,CAAC,cAAc,CAAC;AACjB,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,iBAAA,SAAS,CAAC,CAAC,UAAU,KAAI;AACxB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AACtC,YAAA,CAAC,CAAC;QACN;QAEA,IAAI,CAAC,wBAAwB,EAAE;IACjC;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE;AAC3C,YAAA,QAAQ,IAAI,CAAC,UAAU;AACrB,gBAAA,KAAK,gBAAgB;AACnB,oBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;oBACxB;AACF,gBAAA,KAAK,eAAe;AAClB,oBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;oBACvB;AACF,gBAAA;AACE,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;oBACxB;;QAEN;AAEA,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE;YACvC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;AAC/C,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;AACrE,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAChC;QACF;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;IACjC;IAEO,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAE7B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAEzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;IAEO,UAAU,CACf,KAAoB,EACpB,UAA8B,EAAA;AAE9B,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;AAC1D,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;QAClC;IACF;AAEO,IAAA,eAAe,CAAC,UAA8B,EAAA;;QAEnD,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;QAChC;AAEA,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAC9B;AACA,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,UAAU,IAAI,UAAU,KAAK,EAAE,CAAC;AAC3D,QAAA,IAAI,UAAU,IAAI,UAAU,KAAK,EAAE,EAAE;YACnC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9C;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;IACnC;AAEO,IAAA,iBAAiB,CAAC,UAAkB,EAAA;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;IACtC;AAEO,IAAA,iBAAiB,CAAC,SAAkB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;YAE3B,IAAI,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;AAC5C,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAChC;YAEA,IAAI,SAAS,EAAE;gBACb,eAAe,CACb,MAAK;oBACH,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC7C,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC7B;YACH;QACF;IACF;IAEU,oBAAoB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAC/D,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;YAC/B;AAEA,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAChC;IACF;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;IACvC;AAEA,IAAA,qBAAqB,CAAC,OAAsB,EAAA;AAC1C,QAAA,QACE,OAAO,CAAC,YAAY,CAAC;AACrB,YAAA,OAAO,CAAC,YAAY,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;IAE9E;AAEA,IAAA,yBAAyB,CAAC,OAAsB,EAAA;AAC9C,QAAA,QACE,OAAO,CAAC,YAAY,CAAC;AACrB,YAAA,OAAO,CAAC,YAAY,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;IAE9E;IAEA,gBAAgB,GAAA;AACd,QAAA,QACE,IAAI,CAAC,UAAU,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI;AAC3B,YAAA,IAAI,CAAC,qBAAqB,EAAE;IAEhC;AAEA,IAAA,mBAAmB,CAAC,UAAyB,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACzB;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC3B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAChC;iBAAO;AACL,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAChC;QACF;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;IAChC;IAEA,qBAAqB,GAAA;QACnB,QACE,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;AACvD,YAAA,IAAI,CAAC,WAAW,KAAK,IAAI;IAE7B;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;AAErC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;aAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,oBAAoB,EAAE;AAC5D,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC;IACN;8GAtTW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAHlB,CAAC,uBAAuB,CAAC,+CCvCtC,sxIAsHA,EAAA,MAAA,EAAA,CAAA,uhTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,GAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAQ,IAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FD5Ea,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;+BACE,YAAY,EAAA,aAAA,EAGP,iBAAiB,CAAC,IAAI,aAC1B,CAAC,uBAAuB,CAAC,EAAA,UAAA,EACxB,KAAK,EAAA,QAAA,EAAA,sxIAAA,EAAA,MAAA,EAAA,CAAA,uhTAAA,CAAA,EAAA;;sBAWhB;;sBAUA;;sBAMA;;sBAMA;;sBAMA;;sBAMA;;sBAUA;;sBAaA;;sBAcA;;sBAcA;;;ME9GU,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,CAbX,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAE/B,YAAY;YACZ,iBAAiB;YACjB,wBAAwB;YACxB,WAAW;YACX,aAAa;YACb,cAAc;YACd,WAAW;AACX,YAAA,iCAAiC,aAEzB,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAEjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAXxB,YAAY;YACZ,iBAAiB;YACjB,wBAAwB;YACxB,WAAW;YACX,aAAa;YACb,cAAc;YACd,WAAW,CAAA,EAAA,CAAA,CAAA;;2FAKF,eAAe,EAAA,UAAA,EAAA,CAAA;kBAd3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;AAClC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,wBAAwB;wBACxB,WAAW;wBACX,aAAa;wBACb,cAAc;wBACd,WAAW;wBACX,iCAAiC;AAClC,qBAAA;oBACD,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC9B,iBAAA;;;ACvBD;;AAEG;MAIU,iCAAiC,CAAA;IACrC,SAAS,CAAC,EAAW,EAAE,aAAoC,EAAA;AAChE,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B;8GAHW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,+BAAA,EAAA,CAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,+BAA+B;AACtC,iBAAA;;;ACHD;;;AAGG;MACU,wBAAwB,CAAA;AAmBnC,IAAA,WAAA,CACE,kBAA0B,EAC1B,UAAkB,EAClB,aAAqB,EACrB,YAAuB,EACvB,WAA+C,EAC/C,UAAmC,EACnC,mBAA2B,EAC3B,aAAsB,EACtB,UAA+C,EAAA;AAE/C,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;AACD;;ACdD;;AAEG;MAsBU,0BAA0B,CAAA;AAgCrC,IAAA,iBAAiB;AAEjB,IAAA,iBAAiB;AAEjB,IAAA,cAAc;AAEd,IAAA,OAAO;AAIE,IAAA,eAAe;AACf,IAAA,MAAM;AACN,IAAA,iBAAiB;AACjB,IAAA,aAAa;AAEtB,IAAA,WAAA,GAAA;AA9CA;;;AAGG;AACI,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;QAG9B,IAAA,CAAA,cAAc,GAAU,EAAE;QAE1B,IAAA,CAAA,YAAY,GAAG,KAAK;QAOpB,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,WAAW,GAAG,KAAK;;QAGnB,IAAA,CAAA,KAAK,GAAU,EAAE;QAEjB,IAAA,CAAA,gBAAgB,GAAG,KAAK;QAExB,IAAA,CAAA,oBAAoB,GAAgC,IAAI;AAIxD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAoB;AAMlD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;QAEpC,IAAA,CAAA,OAAO,GAAG,CAAC;AAEQ,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC1C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACnD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAGrD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;IACpC;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,IAAI,IAAI;QACxE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;QAE5C,IAAI,CAAC,8BAA8B,EAAE;QACrC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEO,WAAW,GAAA;QAChB,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IAChC;IAEO,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;;;AAIhD,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1D;QAEA,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;;AAGO,IAAA,SAAS,CAAC,YAAiB,EAAA;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;YACxC,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC;QACzD;IACF;;AAGO,IAAA,OAAO,CAAC,SAAc,EAAA;;;AAG3B,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC;QAClC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;;IAGO,YAAY,CAAC,cAAuB,EAAE,YAAiB,EAAA;QAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;;;QAIpD,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QAEhD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;YACxC,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;gBAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;YAC9C;QACF;aAAO;YACL,IAAI,cAAc,EAAE;gBAClB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;YAC9C;iBAAO;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;YACnC;QACF;QAEA,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEO,IAAA,aAAa,CAAC,UAAkB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAE5B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEO,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE;AAE9B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;QAC7D;QAEA,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEO,iBAAiB,GAAA;QACtB,IAAI,CAAC,oBAAoB,EAAE;;;AAI3B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,YAAA,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAI;AAC7B,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBAE5C,IAAI,CAAC,oBAAoB,EAAE;AAE3B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC5B,YAAA,CAAC,CAAC;QACJ;IACF;IAEO,IAAI,GAAA;QACT,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAC9B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAC3B,CAAC,QAAQ,EAAE,KAAK,MAAM;YACpB,KAAK;YACL,QAAQ;SACT,CAAC,CACH,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;kBACjE,CAAC;kBACD,CAAC;AACP,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;IACxC;IAEO,oBAAoB,GAAA;AACzB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAC3C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CACtD;AAED,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC/D;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,aAAa;YACrC;QACF;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK;QAClC;QAEA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,uBAAuB,CAC1B,aAAa,CAAC,MAAM,EACpB,IAAI,CAAC,cAAc,CAAC,MAAM,CAC3B;AACD,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAI;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AAC3B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;IAEA,8BAA8B,GAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAC1B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AACrC,YAAA,IAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAC1D,IAAI;AACL,SAAA,CAAC,CACH;IACH;AAEA,IAAA,cAAc,CACZ,cAA+D,EAAA;AAE/D,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC3B,aAAA,WAAW,CAAC;AACX,YAAA,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,IAAI,CAAC,OAAO;AACpB,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACjC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;SACzC;AACA,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;YACpB,cAAc,CAAC,MAAM,CAAC;AAEtB,YAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,gBAAgB;YAChD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK;YAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YAEhC,IAAI,CAAC,oBAAoB,EAAE;AAE3B,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B;IACF;IAEA,uBAAuB,CACrB,iBAAyB,EACzB,kBAA0B,EAAA;AAE1B,QAAA,IAAI,CAAC;AACF,aAAA,SAAS,CACR,gDAAgD,EAChD,iBAAiB,CAAC,QAAQ,EAAE,EAC5B,kBAAkB,CAAC,QAAQ,EAAE;AAE9B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,cAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC;AACjD,QAAA,CAAC,CAAC;IACN;8GA5QW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1DvC,g5MAsLA,EAAA,MAAA,EAAA,CAAA,qaAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3II,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACvB,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAJnB,iCAAiC,EAAA,IAAA,EAAA,+BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAOxB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBArBtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,eAAA,EAGd,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,aAAa;wBACb,uBAAuB;wBACvB,wBAAwB;wBACxB,cAAc;wBACd,iBAAiB;wBACjB,eAAe;wBACf,iCAAiC;wBACjC,cAAc;wBACd,gBAAgB;wBAChB,aAAa;wBACb,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,g5MAAA,EAAA,MAAA,EAAA,CAAA,qaAAA,CAAA,EAAA;;;AEpDH;;AAEG;MACU,yBAAyB,CAAA;AACpC;;;;;;AAMG;AACH,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,aAAa;IAC3B;AAOA,IAAA,OAAO,GAAG,IAAI,OAAO,EAA8B;AACnD,IAAA,UAAU;AACV,IAAA,UAAU,GAAG,IAAI,OAAO,EAAW;AACnC,IAAA,aAAa;AAEb,IAAA,WAAA,CAAY,EAAU,EAAA;AACpB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;QAEZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;QAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;IACrD;AAEA;;AAEG;AACI,IAAA,KAAK,CAAC,IAAgC,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IACzB;AAEA;;AAEG;AACI,IAAA,OAAO,CAAC,SAAkB,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;IACjC;AACD;;AC1CD;;AAEG;MAIU,wBAAwB,CAAA;AACnC,IAAA,SAAS;;AAGT,IAAA,WAAA,CAAY,QAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;IAC3B;AAEA;;;AAGG;AACI,IAAA,IAAI,CAAC,IAA+B,EAAA;AACzC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK;QAE/B,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAC1C,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,IAAI,EAAE,EACxB,YAAY,IAAI,EAAE,EAClB,CAAC,UAAU,KAAI;YACb,OAAO,IAAI,CAAC,WAAW,CAAC;gBACtB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;AAC9C,aAAA,CAAiD;AACpD,QAAA,CAAC,EACD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,mBAAmB;aACrB,IAAI,CAAC,UAAU,KAAK,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,EACnD,IAAI,CAAC,aAAa,IAAI,KAAK,EAC3B;YACE,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CACF;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,EAAE;AACpE,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,wBAAwB;AACjC,oBAAA,QAAQ,EAAE,OAAO;AAClB,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,SAAA,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,yBAAyB,CAC5C,aAAa,CAAC,iBAAiB,CAAC,EAAE,CACnC;AAED,QAAA,QAAQ,CAAC;AACN,aAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;AACpC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,QAAA,CAAC,CAAC;QAEJ,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,KAAI;AAChD,YAAA,IAAI,SAAqC;AAEzC,YAAA,QAAQ,cAAc,CAAC,MAAM;AAC3B,gBAAA,KAAK,MAAM;AACT,oBAAA,SAAS,GAAG;AACV,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CACpC,CAAC,IAA2B,KAAK,IAAI,CAAC,QAAQ,CAC/C;qBACF;oBACD;AACF,gBAAA,KAAK,QAAQ;AACX,oBAAA,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;oBAChC;AACF,gBAAA;AACE,oBAAA,SAAS,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;;AAGnC,YAAA,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3B,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAG,aAAa,CAAC,iBAAiB;AAEtD,QAAA,cAAc,CAAC;AACZ,aAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;aACpC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,MAAM,OAAO,GAAuC;AAClD,oBAAA,SAAS,CAAC,IAAI,EAAA;AACZ,wBAAA,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBACnC,CAAC;iBACF;AAED,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,OAAO,QAAQ;IACjB;8GAjGW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA;;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AClBD;;AAEG;MAEU,uBAAuB,CAAA;AAC3B,IAAA,UAAU,CAAC,KAAiB,EAAA;QACjC,MAAM,OAAO,GACX,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC;;;QAIxD,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,EAAE;QACjB;IACF;8GAVW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACQD;;AAEG;MAEU,4BAA4B,CAAA;AADzC,IAAA,WAAA,GAAA;AA8GE;;;;AAIG;AAEI,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAkC;QAEhE,IAAA,CAAA,eAAe,GAAG,oCAAoC,CAAC;YAC5D,kBAAkB,EAAE,CAAC,MAAM,CAAC;AAC5B,YAAA,aAAa,EAAE,SAAS;AACzB,SAAA,CAAC;QAEF,IAAA,CAAA,oBAAoB,GAAG,MAAM;AAE7B,QAAA,IAAA,CAAA,oBAAoB,GAAG,CAAC,MAAM,CAAC;AAehC,IAAA;AAlIC;;;;AAIG;IACH,IACW,kBAAkB,CAAC,KAAyB,EAAA;AACrD,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,MAAM;IAC7C;AAEA,IAAA,IAAW,kBAAkB,GAAA;QAC3B,OAAO,IAAI,CAAC,oBAAoB;IAClC;AAEA;;;;AAIG;IACH,IACW,kBAAkB,CAAC,KAA2B,EAAA;QACvD,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC;QAE7C,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA,IAAA,IAAW,kBAAkB,GAAA;QAC3B,OAAO,IAAI,CAAC,oBAAoB;IAClC;AAEA;;;;;;AAMG;IACH,IACW,MAAM,CAAC,KAAgD,EAAA;AAChE,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,eAAe;YAClB,KAAK;AACL,gBAAA,oCAAoC,CAAC;oBACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oBAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,iBAAA,CAAC;IACN;AAEA,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,QAAQ;IACtB;AAmBA;;;;;;;AAOG;IACH,IACW,aAAa,CACtB,KAAwD,EAAA;AAExD,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAE5B,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA,IAAA,IAAW,aAAa,GAAA;QAGtB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAuBA,IAAA,oBAAoB;AAEpB,IAAA,oBAAoB;AAEpB,IAAA,QAAQ;AAER,IAAA,eAAe;IAEf,2BAA2B,GAAA;;QAEzB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,eAAe,GAAG,oCAAoC,CAAC;gBAC1D,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,aAAA,CAAC;QACJ;IACF;8GA1IW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;sBAOE;;sBAQA;;sBAcA;;sBAkBA;;sBAoBA;;sBASA;;sBAWA;;sBAoBA;;sBAQA;;;AC9HH;;;AAGG;MACU,oCAAoC,CAAA;AAiB/C,IAAA,WAAA,CACE,kBAA0B,EAC1B,aAAqB,EACrB,YAAmB,EACnB,KAAY,EACZ,MAAqC,EACrC,UAAmC,EACnC,aAAsB,EACtB,UAA+C,EAAA;AAE/C,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;AACD;;ACfD;;;AAGG;MAoBU,+BAA+B,CAAA;AA+C1C,IAAA,UAAU;AACV,IAAA,cAAc;AAIL,IAAA,eAAe;AACf,IAAA,MAAM;AACN,IAAA,iBAAiB;AACjB,IAAA,aAAa;AAEtB,IAAA,WAAA,GAAA;AAtDA;;;AAGG;AACI,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;QAO9B,IAAA,CAAA,KAAK,GAAU,EAAE;QAEjB,IAAA,CAAA,YAAY,GAAG,KAAK;AAEpB,QAAA,IAAA,CAAA,iBAAiB,GAAG;AACzB,YAAA,WAAW,EAAE;AACX,gBAAA;AACE,oBAAA,EAAE,EAAE,IAAI;AACR,oBAAA,KAAK,EAAE,sBAAsB;AAC7B,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,YAAY,EAAE,MAAM;AACrB,iBAAA;AACD,gBAAA;AACE,oBAAA,EAAE,EAAE,IAAI;AACR,oBAAA,KAAK,EAAE,sBAAsB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,YAAY,EAAE,MAAM;AACrB,iBAAA;AACF,aAAA;SACF;QAEM,IAAA,CAAA,cAAc,GAAU,EAAE;QAE1B,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,gBAAgB,GAAG,KAAK;QAExB,IAAA,CAAA,oBAAoB,GAAgC,IAAI;QAExD,IAAA,CAAA,UAAU,GAAG,EAAE;QAEf,IAAA,CAAA,aAAa,GAAuC,EAAE;QAE7D,IAAA,CAAA,UAAU,GAAG,CAAC;AACd,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;AAEjB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oCAAoC,CAAC;AAChE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACnD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAGrD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;IACpC;IAEO,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,IAAI,IAAI;QACxE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AAC5C,QAAA,KAAK,IAAI,CAAC,QAAQ,EAAE;IACtB;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IAChC;IAEO,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;AAEO,IAAA,MAAM,QAAQ,GAAA;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1C,MAAM,aAAa,GAAU,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAEvD,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBAC3C,OAAO;AACL,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,QAAQ,EAAE,KAAK;iBAChB;AACH,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBAC1B,MAAM,cAAc,GAClB,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,KAAK;AAE1C,gBAAA,MAAM,cAAc,GAAY,KAAK,CAAC,OAAO,CAC3C,IAAI,CAAC,OAAO,CAAC,YAAY,CAC1B;gBACD,MAAM,wBAAwB,GAC5B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CACjC,CAAC,WAAgB,KAAK,WAAW,KAAK,IAAI,CAAC,KAAK,CACjD,IAAI,CAAC;gBAER,IAAI,cAAc,KAAK,cAAc,IAAI,wBAAwB,CAAC,EAAE;AAClE,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;oBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,oBAAA,IACE,aAAa,CAAC,SAAS,CACrB,CAAC,YAAY,KAAK,YAAY,CAAC,KAAK,KAAK,SAAS,CACnD,GAAG,CAAC,EACL;AACA,wBAAA,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;oBAChE;gBACF;AACF,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;QACrC;;AAGA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC;AACjB,cAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;AAC3C,cAAE,IAAI,CAAC,KAAK;QAEd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE;QAEtC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAEnD,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;QAE7D,IAAI,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAEzB,QAAA,IAAI,CAAC,uBAAuB,CAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,EACzB,IAAI,CAAC,cAAc,CAAC,MAAM,CAC3B;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;AAEO,IAAA,MAAM,QAAQ,GAAA;QACnB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACnC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACvB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;AAEO,IAAA,SAAS,CAAC,YAAiB,EAAA;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;YACxC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC;QAC9D;IACF;IAEO,YAAY,CAAC,cAAuB,EAAE,YAAiB,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QAExB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;;;YAGxC,IAAI,cAAc,EAAE;AAClB,gBAAA,YAAY,CAAC,QAAQ,GAAG,IAAI;AAC5B,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBACrB,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE;AACrC,wBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;oBACvB;AACF,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBACnC,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE;AACrC,wBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;oBACvB;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAC/B,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,CAC5C;gBACD,IAAI,CAAC,aAAa,GAAG;AACnB,oBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;iBACvD;YACH;QACF;aAAO;AACL,YAAA,MAAM,aAAa,GACjB,IAAI,CAAC,aAAa;AACpB,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CACnC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,CAC5C;AACD,YAAA,MAAM,kBAAkB,GAAG,aAAa,CAAC,SAAS,CAChD,CAAC,YAAY,KAAK,YAAY,CAAC,KAAK,KAAK,aAAa,CACvD;AAED,YAAA,IAAI,cAAc,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE;gBAC/C,aAAa,CAAC,IAAI,CAAC;AACjB,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK;AACrC,iBAAA,CAAC;YACJ;iBAAO,IAAI,CAAC,cAAc,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE;AACvD,gBAAA,aAAa,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAC7C;AAEA,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;QACpC;AAEA,QAAA,KAAK,IAAI,CAAC,eAAe,EAAE;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;AAEO,IAAA,aAAa,CAAC,UAAkB,EAAA;;AAErC,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;QACzC;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;;;QAIpC,UAAU,CAAC,MAAK;AACd,YAAA,KAAK,IAAI,CAAC,eAAe,EAAE;QAC7B,CAAC,EAAE,GAAG,CAAC;IACT;AAEO,IAAA,WAAW,CAAC,KAAY,EAAA;AAC7B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;QAElC,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CACtC,UAAU,EACV,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACjB,OAAO,IAAI,CAAC,KAAK;YACnB,CAAC,CAAC,EACF,EAAE,OAAO,EAAE,OAAO,EAAE,CACrB;AAED,YAAA,IAAI,YAAY,YAAY,KAAK,EAAE;gBACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CACzB,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAChD;AACD,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC;iBAAO;AACL,gBAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;oBAClC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CACzB,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAC1C;AACD,oBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;AAChC,gBAAA,CAAC,CAAC;YACJ;QACF;aAAO;AACL,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/B;IACF;AAEO,IAAA,MAAM,SAAS,GAAA;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAExB,QAAA,MAAM,aAAa,GACjB,IAAI,CAAC,aAAa;QAEpB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBAEpB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;;AAGjC,gBAAA,IACE,aAAa,CAAC,SAAS,CACrB,CAAC,YAAY,KAAK,YAAY,CAAC,KAAK,KAAK,KAAK,CAC/C,GAAG,CAAC,EACL;oBACA,aAAa,CAAC,IAAI,CAAC;AACjB,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK;AAC7B,qBAAA,CAAC;gBACJ;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;AAEO,IAAA,MAAM,eAAe,GAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAExB,QAAA,MAAM,aAAa,GACjB,IAAI,CAAC,aAAa;QAEpB,KAAK,EAAE,OAAO,CAAC,CAAC,IAAS,EAAE,KAAa,KAAI;AAC1C,YAAA,IAAI,CAAC,QAAQ;AACX,gBAAA,aAAa,CAAC,SAAS,CACrB,CAAC,YAAY,KAAK,YAAY,CAAC,KAAK,KAAK,KAAK,CAC/C,KAAK,CAAC,CAAC;AACZ,QAAA,CAAC,CAAC;QAEF,IAAI,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAEjD,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;QAC/D;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;QAE7D,IAAI,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAEzB,QAAA,IAAI,CAAC,uBAAuB,CAC1B,aAAa,CAAC,MAAM,EACpB,IAAI,CAAC,cAAc,CAAC,MAAM,CAC3B;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;IAEO,MAAM,cAAc,CAAC,IAAW,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,KAAI;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,KAAa,KAAI;AACtD,gBAAA,IAAI,YAAY,CAAC,QAAQ,KAAK,IAAI,EAAE;AAClC,oBAAA,YAAY,CAAC,KAAK,GAAG,KAAK;gBAC5B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;AAErB,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;IAEA,uBAAuB,CACrB,iBAAyB,EACzB,kBAA0B,EAAA;AAE1B,QAAA,IAAI,CAAC;AACF,aAAA,SAAS,CACR,gDAAgD,EAChD,iBAAiB,CAAC,QAAQ,EAAE,EAC5B,kBAAkB,CAAC,QAAQ,EAAE;AAE9B,aAAA,IAAI,CAACC,MAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,eAAe,KAAI;AAC7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,eAAe,CAAC;AAClD,QAAA,CAAC,CAAC;IACN;8GArWW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrD5C,knMA4KA,EAAA,MAAA,EAAA,CAAA,sPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpII,YAAY,mSACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACvB,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,oRACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGV,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAnB3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,aAAa;wBACb,uBAAuB;wBACvB,wBAAwB;wBACxB,cAAc;wBACd,iBAAiB;wBACjB,eAAe;wBACf,cAAc;wBACd,gBAAgB;wBAChB,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,knMAAA,EAAA,MAAA,EAAA,CAAA,sPAAA,CAAA,EAAA;;;AEUG,MAAO,kBACX,SAAQ,4BAA4B,CAAA;AAgCpC;;;;;;;AAOG;IACH,IACW,IAAI,CAAC,KAAwB,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QAEnB,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;YACrD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,CAAC,KAAK,CAAC;QAChE;IACF;AAEA,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE;IAC1B;AAUA;;;AAGG;IACH,IACW,QAAQ,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,KAAK,CAAC;IAC1C;AAEA,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,UAAU;IACxB;AAqCA;;;AAGG;IACH,IACW,UAAU,CAAC,KAA0C,EAAA;QAC9D,MAAM,gBAAgB,GACpB,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU;AAEtD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAI,CAAC,oBAAoB,EAAE;QAE3B,IAAI,gBAAgB,EAAE;AACpB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAE9B,YAAA,IAAI,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;;gBAErB,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC/C,oBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AACtC,gBAAA,CAAC,CAAC;YACJ;QACF;IACF;AAEA,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,UAAU;IACxC;AA0BA,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEA,IAAW,MAAM,CAAC,MAA8B,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;;QAG9B,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC;iBACF,SAAS,CAAC,6BAA6B,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;AAChE,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;gBACnB,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA;wBACE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,GAAG,KAAK,EAAE;AAC5C,qBAAA;iBACF;AACD,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,YAAA,CAAC,CAAC;QACN;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;QACrC;IACF;AAEA;;;;AAIG;AACH,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IACzB;IASA,IAIW,0BAA0B,CACnC,KAAgD,EAAA;AAEhD,QAAA,IAAI,CAAC,4BAA4B,GAAG,KAAK;QACzC,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEA,IAAA,IAAW,0BAA0B,GAAA;QAGnC,OAAO,IAAI,CAAC,4BAA4B;IAC1C;AAmBA,IAAA,KAAK;AACL,IAAA,yBAAyB;AACzB,IAAA,cAAc;AACd,IAAA,aAAa;AACb,IAAA,cAAc;AACd,IAAA,iBAAiB;AACjB,IAAA,mBAAmB;AACnB,IAAA,UAAU;AAEV,IAAA,4BAA4B;AAC5B,IAAA,MAAM;AACN,IAAA,YAAY;AACZ,IAAA,QAAQ;AACR,IAAA,OAAO;AAEE,IAAA,QAAQ;AACR,IAAA,eAAe;AACf,IAAA,WAAW;AACX,IAAA,UAAU;AACV,IAAA,OAAO;AACP,IAAA,aAAa;AACb,IAAA,iBAAiB;AACjB,IAAA,kBAAkB;AAClB,IAAA,UAAU;IAQnB,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE;IACzC;IAEA,SAAS,CAAC,QAAe,EAAE,OAA+B,EAAA;AACxD,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ;AAEvB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC3C;AAEA,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC;QAEA,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AA5OT;;;;AAIG;QAEI,IAAA,CAAA,QAAQ,GAAG,KAAK;AAgBvB;;;AAGG;QACa,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,KAAK,2DAC1C,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAgBF;;;AAGG;QAEI,IAAA,CAAA,aAAa,GAAG,KAAK;AA2C5B;;AAEG;AAEI,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAA8B;AAEhE;;AAEG;AAEI,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;AAE/C;;AAEG;AAEI,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,YAAY,EAAW;AAqCtD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,OAAO,EAA0B;QAC9D,IAAA,CAAA,cAAc,GAAG,KAAK;AAEtB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAoB;AAsCzD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,OAAO,EAAQ;QAC3B,IAAA,CAAA,yBAAyB,GAAG,KAAK;AACjC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;QAKpC,IAAA,CAAA,UAAU,GAAG,KAAK;AAQT,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAClD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACrD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;AAE7B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,sBAAsB,EAAE;AAC/D,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;QAEc,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAuBpE,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAEnE,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,aAAa,GAAG,IAAI;QAChC;QAEA,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,iBAAiB,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;IAEO,QAAQ,GAAA;QACb,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS;YAC/C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe;YAE3D,IAAI,CAAC,iBAAiB,EAAE;YAExB,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClD;aAAO;YACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;QAC/C;;AAGA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;;YAGjB,IAAI,CAAC,QAAQ,CAAC;AACX,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;iBACnC,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,YAAA,CAAC,CAAC;QACN;IACF;IAEO,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;IAEO,WAAW,GAAA;QAChB,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;IAClC;IAEO,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,SAAS,EAAE,CAAC,IAA8B,KACxC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAClC,SAAA,CAAC;IACJ;AAEO,IAAA,6BAA6B,CAClC,MAAsC,EAAA;AAEtC,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC;QAC1C;aAAO;YACL,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACzC;IACF;IAEO,kBAAkB,GAAA;AACvB,QAAA,IAAI,CAAC,cAAc,IAAI;IACzB;AAEO,IAAA,cAAc,CAAC,MAAkB,EAAA;QACtC,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AAC1B,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,IAAI,CAAC,WAAW,EAAE;YACpB;AAEA,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;gBACjC,OAAO,KAAK,CAAC,KAAK;AACpB,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC5C;IACF;IAEU,eAAe,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACrB;IACF;IAEO,2BAA2B,GAAA;QAChC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,MAAK;YAC3C,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,aAAa,CAAC,KAAoB,EAAA;;AAEvC,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AAChC,YAAA,QAAQ,KAAK,CAAC,GAAG;AACf,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;AAC/D,oBAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,kBAAkB,CAAC;oBAChE,KAAK,CAAC,cAAc,EAAE;oBACtB;AAEF,gBAAA,KAAK,KAAK;AACV,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;oBAC/D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,MAAK;AAC3C,wBAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;AAChE,oBAAA,CAAC,CAAC;oBACF,KAAK,CAAC,cAAc,EAAE;oBACtB;;QAEN;IACF;IAEO,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,wBAAwB,CAC3B,0BAA0B,CAAC,kBAAkB,CAC9C;IACH;AAEO,IAAA,UAAU,CAAC,KAAY,EAAA;;QAE5B,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAClE;AAEO,IAAA,gBAAgB,CAAC,EAA0B,EAAA;AAChD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;IACzB;AAEO,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC1B;;AAGO,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QACvC,IAAI,CAAC,qBAAqB,EAAE;QAE5B,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,kBAAkB,EAAE;QAC3B;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;IAEO,eAAe,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACnC,YAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,GAAG,SAAS;AACjD,YAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,GAAG,EAAE;QACrD;IACF;;;;;AAMO,IAAA,YAAY,CAAC,KAAoB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA8B,CAAC,KAAK;;;AAIzD,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AAChC,YAAA,QAAQ,KAAK,CAAC,GAAG;AACf,gBAAA,KAAK,OAAO;oBACV,KAAK,CAAC,cAAc,EAAE;oBACtB;AACF,gBAAA,KAAK,WAAW;AAChB,gBAAA,KAAK,WAAW;AAChB,gBAAA,KAAK,MAAM;oBACT,IAAI,KAAK,EAAE;AACT,wBAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;oBACxC;yBAAO;AACL,wBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;oBACvC;oBACA;gBACF;;QAEJ;IACF;AAEO,IAAA,UAAU,CAAC,KAAoB,EAAA;;;AAGpC,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AAChC,YAAA,QAAQ,KAAK,CAAC,GAAG;AACf,gBAAA,KAAK,KAAK;AACV,gBAAA,KAAK,QAAQ;oBACX,IAAI,CAAC,eAAe,EAAE;oBACtB,KAAK,CAAC,cAAc,EAAE;oBACtB;AACF,gBAAA,KAAK,WAAW;AAChB,gBAAA,KAAK,WAAW;AAChB,gBAAA,KAAK,MAAM;;AAET,oBAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,wBAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,cAAc,CAAC;wBAC5D,KAAK,CAAC,cAAc,EAAE;oBACxB;oBACA;gBACF;;YAGF,KAAK,CAAC,eAAe,EAAE;QACzB;IACF;IAEO,mBAAmB,GAAA;;AAExB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,wBAAwB,CAAC,0BAA0B,CAAC,aAAa,CAAC;QACvE,IAAI,gBAAgB,GAAG,KAAK;AAC5B,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;YAChC,gBAAgB;gBACd,IAAI,CAAC,0BAA0B,EAAE,KAAK;oBACtC,IAAI,CAAC,0BAA0B,CAAC,cAAc;wBAC5C,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACpE;QAEA,IAAI,WAAW,GAAG,EAAE;AAEpB,QAAA,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACxD,YAAA,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,cAAc;QAC9D;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AAC5B,QAAA,IAAI,CAAC,0BAA0B,EAAE,oCAAoC,EAAE;IACzE;AAEO,IAAA,eAAe,CAAC,KAAkC,EAAA;;;QAGvD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;QACnC;IACF;AAEO,IAAA,UAAU,CAAC,aAAqB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;AAEjC,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC;gBACpC,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,aAAa;AACb,gBAAA,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE;AAC/B,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;AAExC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,gBAAA,IAAI,CAAC,mBAAmB;AACtB,oBAAA,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC;gBAEnD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE;gBAEnD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AACtD,oBAAA,IAAI,CAAC,oBAAoB,CACvB,SAAS,CAAC,MAAM,KAAK;0BACjB,SAAS,CAAC;0BACV,YAAY,CACjB;AACD,oBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3C,gBAAA,CAAC,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,iBAAiB;AACpB,oBAAA,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC;gBAEjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,EAAE;gBAEnE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAK;oBAC/D,IAAI,CAAC,gBAAgB,EAAE;AACzB,gBAAA,CAAC,CAAC;gBAEF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AACpD,oBAAA,IAAI,aAAoB;AAExB,oBAAA,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE;wBAC/B,aAAa,GAAG,EAAE;wBAElB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,SAAiB,KAAI;4BACjD,IACE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAc,KAAI;AACrC,gCAAA,OAAO,SAAS,CAAC,KAAK,KAAK,SAAS;4BACtC,CAAC,CAAC,EACF;AACA,gCAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC1B;AACF,wBAAA,CAAC,CAAC;oBACJ;yBAAO;wBACL,aAAa,GAAG,YAAY;oBAC9B;AAEA,oBAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;AACxC,oBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3C,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YACrC;QACF;IACF;AAEU,IAAA,wBAAwB,CAAC,MAAe,EAAA;QAChD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B;IACF;AAEU,IAAA,OAAO,CAAC,MAAkB,EAAA;AACjC,QAAA,MAAM,CAAC,MAA8B,CAAC,MAAM,EAAE;IACjD;AAEA,IAAA,6BAA6B,CAC3B,aAAqB,EAAA;AAErB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,kBAAkB,IAAI,EAAE;AAEjE,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAC7B,YAAA,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB;QACtD;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,kHAAkH,CACnH;QACH;AAEA,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAClC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,UAAU,EAAE,IAAI,CAAC,UAAW;AAC5B,YAAA,WAAW,EAAE,CAAC,IAAI,KAAI;AACpB,gBAAA,MAAM,eAAe,GAAmC;AACtD,oBAAA,WAAW,EAAE,OAAO;oBACpB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;iBACxC;AAED,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;gBAEtC,OAAO,eAAe,CAAC,MAAM;YAC/B,CAAC;YACD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,MAAK;gBACb,IAAI,CAAC,gBAAgB,EAAE;YACzB,CAAC;YACD,aAAa;YACb,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;YACpD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,WAAW,CAAC,KAAK;AACxB,YAAA,KAAK,EAAE,YAAY;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,SAAA,CAAC;IACJ;AAEA,IAAA,2BAA2B,CAAC,aAAqB,EAAA;AAC/C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,kBAAkB,IAAI,EAAE;AAEjE,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAC7B,YAAA,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB;QACtD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;AACpC,YAAA,WAAW,CAAC,mBAAmB;AAC7B,gBAAA,IAAI,CAAC,UAAU,KAAK,QAAQ,GAAG,MAAM,GAAG,OAAO;QACnD;AAEA,QAAA,MAAM,oBAAoB,GAAG,IAAI,oCAAoC,CACnE,IAAI,CAAC,kBAAkB,EACvB,aAAa,EACb,YAAY,EACZ,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,WAAW,CACZ;AAED,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,+BAA+B,EAAE;AAC9D,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,oCAAoC;AAC7C,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,SAAA,CAAC;IACJ;AAEA,IAAA,oBAAoB,CAAC,aAAgC,EAAA;AACnD,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AACpC,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;AAGjC,QAAA,aAAa,GAAG,aAAa,IAAI,EAAE;QAEnC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IACrC;AAEO,IAAA,aAAa,CAAC,IAAoC,EAAA;AACvD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,cAAc,CAAC,IAAS,EAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAE9B,QAAA,IAAI,aAAoB;AAExB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AAChC,YAAA,aAAa,GAAG,CAAC,IAAI,CAAC;QACxB;aAAO;YACL,aAAa,GAAG,KAAK;AAErB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE;;YAGxC,IACE,CAAC,IAAI,CAAC,UAAU;gBAChB,CAAC,KAAK,CAAC,IAAI,CACT,CAAC,YAAY,KAAK,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAChE,EACD;AACA,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B;YAEA,IAAI,CAAC,eAAe,EAAE;QACxB;QAEA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpD;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,EAAE;QAC1B,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;IACvB;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC;AACtB,cAAE,IAAI,CAAC,WAAW,CAAC;AACnB,cAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ;;;;AAMzD,QAAAb,SAAmB,CAAa,WAAW,EAAE,OAAO;AACjD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;aAC1B,SAAS,CAAC,MAAK;AACd,YAAA,WAAW,GAAG,CAAC,IAAI,CAAC;AAClB,kBAAE,IAAI,CAAC,WAAW,CAAC;AACnB,kBAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa;YACxC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAElE,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,QAAA,CAAC,CAAC;AAEJ,QAAAA,SAAmB,CAAgB,WAAW,EAAE,SAAS;AACtD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;aAC1B,SAAS,CAAC,MAAK;AACd,YAAA,WAAW,GAAG,CAAC,IAAI,CAAC;AAClB,kBAAE,IAAI,CAAC,WAAW,CAAC;AACnB,kBAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa;YACxC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAElE,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,QAAA,CAAC,CAAC;QAEJ,IAAI,WAAW,EAAE;AACf,YAAAA,SAAmB,CAAC,WAAW,EAAE,SAAS;AACvC,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBAC1B,SAAS,CAAC,MAAK;AACd,gBAAA,MAAM,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS;gBACrD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;oBAClD,IAAI,CAAC,WAAW,EAAE;gBACpB;AACF,YAAA,CAAC,CAAC;QACN;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACjD;IACF;AAEA,IAAA,oBAAoB,CAAC,IAA8B,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;;;;;YAK5B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7C;aAAO;AACL,YAAA,IAAI,cAAmC;AAEvC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;gBAC1B,cAAc,GAAG,IAAI;YACvB;iBAAO;AACL,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,oBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;gBACvB;AAEA,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;;;;AAKxB,wBAAA,IAAI,CAAC;AACF,6BAAA,iBACJ,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;oBAC7D;yBAAO;wBACL,cAAc,GAAG,IAAI;oBACvB;gBACF;YACF;YAEA,IAAI,cAAc,EAAE;AAClB,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AACjC,gBAAA,MAAM,QAAQ,GACZ,IAAI,CAAC,UAAU,KAAK;sBAChB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;AAC3B,sBAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAEjB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC/C;QACF;IACF;AAEA,IAAA,YAAY,CAAC,IAAW,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;YAC5B,OAAO;AACL,gBAAA,KAAK,EAAE,IAAI;aACZ;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,wBAAwB,CAAC,IAAgC,EAAA;QACvD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAC5C;AAEA,IAAA,kBAAkB,CAAC,IAA0B,EAAA;QAC3C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACtC;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AAChC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;gBAC9B,IAAI,CAAC,0BAA0B,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;YAC3D;iBAAO;gBACL,IAAI,CAAC,eAAe,EAAE;YACxB;QACF;IACF;IAEA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;IAC9C;IAEA,gBAAgB,GAAA;QACd,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,mBAAmB,CAAC;IAC/D;IAEA,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACjD,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;gBAC5B,aAAa,EAAE,IAAI,CAAC,gBAAgB;AACpC,gBAAA,eAAe,EAAE,IAAI,CAAC,cAAc;sBAChC,IAAI,CAAC;AACP,sBAAE,SAAS;AACd,aAAA,CAAC;QACJ;IACF;8GAh4BW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EA2DT,gBAAgB,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAOhB,gBAAgB,+jBAoChB,gBAAgB,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,SAAA,EA3GzB,CAAC,uBAAuB,CAAC,sFAmNzB,6BAA6B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAChC,6BAA6B,EAAA,EAAA,EAAA,YAAA,EAAA,2BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAiB7B,WAAW,6HAMX,WAAW,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAMX,UAAU,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzSpB,ykJAyHA,EAAA,MAAA,EAAA,CAAA,yhOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAiB,wBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhB,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAgB,IAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FD5Da,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAT9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,SAAA,EAGX,CAAC,uBAAuB,CAAC,EAAA,aAAA,EACrB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,ykJAAA,EAAA,MAAA,EAAA,CAAA,yhOAAA,CAAA,EAAA;;sBAahB;;sBAWA;;sBAQA;;sBAWA;;sBAkBA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAOrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAqBrC;;sBAQA;;sBAOA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAMrC;;sBAOA;;sBA4BA;;sBAMA;;sBAMA;;sBAMA;;sBA6CA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,6BAA6B,EAAE;AACxC,wBAAA,IAAI,EAAE,6BAA6B;AACnC,wBAAA,MAAM,EAAE,KAAK;AACd,qBAAA;;sBAcA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,2BAA2B,EAAE;AACtC,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,MAAM,EAAE,IAAI;AACb,qBAAA;;sBAGA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE;AAC7B,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,MAAM,EAAE,IAAI;AACb,qBAAA;;sBAGA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE;AAC1B,wBAAA,IAAI,EAAE,UAAU;AACjB,qBAAA;;;MEnRU,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,CAXX,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAE/B,YAAY;YACZ,qBAAqB;YACrB,aAAa;YACb,wBAAwB;YACxB,cAAc;AACd,YAAA,eAAe,aAEP,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAEjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YATxB,YAAY;YACZ,qBAAqB;YACrB,aAAa;YACb,wBAAwB;YACxB,cAAc;YACd,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAIN,eAAe,EAAA,UAAA,EAAA,CAAA;kBAZ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;AAClC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,qBAAqB;wBACrB,aAAa;wBACb,wBAAwB;wBACxB,cAAc;wBACd,eAAe;AAChB,qBAAA;oBACD,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC9B,iBAAA;;;ACtBD;;;AAGG;IACS;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B;;AAEG;AACH,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAEjB;;AAEG;AACH,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EAVW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;;ACJ/B;;;AAGG;MACU,oCAAoC,CAAA;AAahD;;ACfD;;;AAGG;MAEU,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAvB,uBAAuB,EAAA,CAAA,CAAA;+GAAvB,uBAAuB,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,QAAQ;mBAAC,EAAE;;;ACNZ;;AAEG;;;;"}
1
+ {"version":3,"file":"skyux-lookup.mjs","sources":["../../../../../libs/components/lookup/src/lib/modules/shared/sky-lookup-resources.module.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-input.directive.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-search-async-disabled.pipe.ts","../../../../../libs/components/lookup/src/lib/modules/shared/sky-lookup-string-utils.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-adapter.service.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-default-search-function.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/types/autocomplete-message-type.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.component.ts","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.component.html","../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.module.ts","../../../../../libs/components/lookup/src/lib/modules/country-field/clone-country-data.ts","../../../../../libs/components/lookup/src/lib/modules/country-field/types/country-field-context-token.ts","../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.component.ts","../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.component.html","../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.module.ts","../../../../../libs/components/lookup/src/lib/modules/search/search-adapter.service.ts","../../../../../libs/components/lookup/src/lib/modules/search/search.component.ts","../../../../../libs/components/lookup/src/lib/modules/search/search.component.html","../../../../../libs/components/lookup/src/lib/modules/search/search.module.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal-item-selected.pipe.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/types/selection-modal-context.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal.component.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal.component.html","../../../../../libs/components/lookup/src/lib/modules/selection-modal/types/selection-modal-instance.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal.service.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup-adapter.service.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup-autocomplete-adapter.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/types/lookup-show-more-native-picker-context.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup-show-more-modal.component.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup-show-more-modal.component.html","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup.component.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup.component.html","../../../../../libs/components/lookup/src/lib/modules/lookup/lookup.module.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/types/lookup-select-mode.ts","../../../../../libs/components/lookup/src/lib/modules/lookup/types/lookup-show-more-custom-picker-context.ts","../../../../../libs/components/lookup/src/lib/modules/selection-modal/selection-modal.module.ts","../../../../../libs/components/lookup/src/skyux-lookup.ts"],"sourcesContent":["/* istanbul ignore file */\n\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-lookup' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n skyux_autocomplete_add: { message: 'New' },\n skyux_autocomplete_multiple_results: { message: '{0} results available.' },\n skyux_autocomplete_no_results: { message: 'No matches found' },\n skyux_autocomplete_one_result: { message: 'One result available.' },\n skyux_autocomplete_show_all: { message: 'Show all' },\n skyux_autocomplete_show_all_count: { message: 'Show all {0}' },\n skyux_autocomplete_show_matches_count: { message: 'Show matches ({0})' },\n skyux_country_field_dropdown_hint_text: {\n message: 'Type to search for a country',\n },\n skyux_country_field_search_placeholder: { message: 'Search for a country' },\n skyux_lookup_search_button_show_more: {\n message: 'Show all search results',\n },\n skyux_lookup_show_more_add: { message: 'New' },\n skyux_lookup_show_more_add_button_aria_label: { message: 'Add {0}' },\n skyux_lookup_show_more_displayed_items_updated: {\n message: 'Showing {1} items, with {0} selected.',\n },\n skyux_lookup_show_more_select_all_button_aria_label: {\n message: 'Select all {0}',\n },\n skyux_lookup_show_more_select_all_button_title: { message: 'Select all' },\n skyux_lookup_show_more_clear_all_button_aria_label: {\n message: 'Clear all selected {0}',\n },\n skyux_lookup_show_more_clear_all_button_title: { message: 'Clear all' },\n skyux_lookup_show_more_show_selected_option_title: {\n message: 'Show only selected {0}',\n },\n skyux_lookup_show_more_cancel: { message: 'Cancel' },\n skyux_lookup_show_more_modal_title: { message: 'Select {0}' },\n skyux_lookup_show_more_no_results: { message: 'No matches found' },\n skyux_lookup_show_more_select: { message: 'Select' },\n skyux_lookup_show_more_select_context: { message: 'Select {0}' },\n skyux_lookup_tokens_summary: { message: '{0} items selected' },\n skyux_search_aria_label_descriptor: { message: 'Search {0}' },\n skyux_search_dismiss: { message: 'Dismiss search' },\n skyux_search_label: { message: 'Search items' },\n skyux_search_open: { message: 'Open search' },\n skyux_search_placeholder: { message: 'Find in this list' },\n },\n 'FR-CA': {\n skyux_autocomplete_add: { message: 'Nouveau' },\n skyux_autocomplete_multiple_results: {\n message: '{0} résultats disponibles.',\n },\n skyux_autocomplete_no_results: { message: 'Aucune correspondance trouvée' },\n skyux_autocomplete_one_result: { message: 'Un résultat disponible.' },\n skyux_autocomplete_show_all: { message: 'Afficher tout' },\n skyux_autocomplete_show_all_count: { message: 'Afficher tout {0}' },\n skyux_autocomplete_show_matches_count: {\n message: 'Afficher les correspondances ({0})',\n },\n skyux_country_field_dropdown_hint_text: { message: 'Recherchez un pays' },\n skyux_country_field_search_placeholder: { message: 'Rechercher un pays' },\n skyux_lookup_search_button_show_more: {\n message: 'Afficher tous les résultats de la recherche',\n },\n skyux_lookup_show_more_add: { message: 'Nouveau' },\n skyux_lookup_show_more_add_button_aria_label: { message: 'Ajouter {0}' },\n skyux_lookup_show_more_displayed_items_updated: {\n message: '{1} éléments affichés, avec {0} sélectionné(s).',\n },\n skyux_lookup_show_more_select_all_button_aria_label: {\n message: 'Sélectionner tout {0}',\n },\n skyux_lookup_show_more_select_all_button_title: {\n message: 'Sélectionner tout',\n },\n skyux_lookup_show_more_clear_all_button_aria_label: {\n message: 'Supprimer tous les éléments sélectionnés {0}',\n },\n skyux_lookup_show_more_clear_all_button_title: { message: 'Effacer tout' },\n skyux_lookup_show_more_show_selected_option_title: {\n message: 'Montrer seulement ce qui est sélectionné {0}',\n },\n skyux_lookup_show_more_cancel: { message: 'Annuler' },\n skyux_lookup_show_more_modal_title: { message: 'Sélectionner {0}' },\n skyux_lookup_show_more_no_results: {\n message: 'Aucune correspondance trouvée',\n },\n skyux_lookup_show_more_select: { message: 'Sélectionner' },\n skyux_lookup_show_more_select_context: { message: 'Sélectionner {0}' },\n skyux_lookup_tokens_summary: { message: '{0} articles sélectionnés' },\n skyux_search_aria_label_descriptor: { message: 'Rechercher {0}' },\n skyux_search_dismiss: { message: 'Omettre la recherche' },\n skyux_search_label: { message: 'Rechercher des articles' },\n skyux_search_open: { message: 'Ouvrir la recherche' },\n skyux_search_placeholder: { message: 'Trouver dans cette liste' },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyLookupResourcesModule {}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { Observable, Subject, fromEvent as observableFromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteInputTextChange } from './types/autocomplete-input-text-change';\n\nconst SKY_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyAutocompleteInputDirective),\n multi: true,\n};\n\nconst SKY_AUTOCOMPLETE_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyAutocompleteInputDirective),\n multi: true,\n};\n\n@Directive({\n selector: 'input[skyAutocomplete], textarea[skyAutocomplete]',\n providers: [SKY_AUTOCOMPLETE_VALUE_ACCESSOR, SKY_AUTOCOMPLETE_VALIDATOR],\n standalone: false,\n})\nexport class SkyAutocompleteInputDirective\n implements OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n /**\n * The value for the `autocomplete` attribute on the form input.\n * @default \"off\"\n * @deprecated SKY UX only supports browser autofill on components where the direct input matches the return value. This input may not behave as expected due to the dropdown selection interaction.\n */\n @Input()\n public set autocompleteAttribute(value: string | undefined) {\n if (!value) {\n this.#_autocompleteAttribute = 'off';\n } else {\n this.#_autocompleteAttribute = value;\n }\n\n this.#renderer.setAttribute(\n this.#elementRef.nativeElement,\n 'autocomplete',\n this.#_autocompleteAttribute,\n );\n }\n\n public get autocompleteAttribute(): string {\n return this.#_autocompleteAttribute || 'off';\n }\n\n /**\n * Whether to disable the autocomplete field on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value ?? false;\n this.#renderer.setProperty(\n this.#elementRef.nativeElement,\n 'disabled',\n value,\n );\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n public get blur(): Observable<void> {\n return this.#blurObs;\n }\n\n public get displayWith(): string {\n return this.#_displayWith;\n }\n\n public set displayWith(value: string) {\n this.#_displayWith = value;\n this.inputTextValue = this.#getValueByKey();\n }\n\n public get focus(): Observable<void> {\n return this.#focusObs;\n }\n\n public get inputTextValue(): string {\n return this.#elementRef.nativeElement.value;\n }\n\n public set inputTextValue(value: string) {\n this.#elementRef.nativeElement.value = value || '';\n }\n\n public get textChanges(): Observable<SkyAutocompleteInputTextChange> {\n return this.#textChangesObs;\n }\n\n public get value(): any {\n return this.#_value;\n }\n\n public set value(value: any) {\n const isNewValue = value !== this.#_value;\n\n /* istanbul ignore else */\n if (isNewValue) {\n this.#_value = value;\n this.inputTextValue = this.#getValueByKey();\n this.onChange(this.#_value);\n\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n if (this.#isFirstChange && this.#control) {\n this.#control.markAsPristine();\n }\n\n if (this.#isFirstChange && this.#_value) {\n this.#isFirstChange = false;\n }\n }\n }\n\n #blur: Subject<void>;\n\n #blurObs: Observable<void>;\n\n #control: AbstractControl | undefined;\n\n readonly #elementRef = inject(ElementRef);\n\n #focus: Subject<void>;\n\n #focusObs: Observable<void>;\n\n #isFirstChange = true;\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #renderer = inject(Renderer2);\n\n #textChanges: Subject<SkyAutocompleteInputTextChange>;\n\n #textChangesObs: Observable<SkyAutocompleteInputTextChange>;\n\n #_autocompleteAttribute: string | undefined;\n\n #_disabled = false;\n\n #_displayWith = '';\n\n #_value: any;\n\n constructor() {\n this.#blur = new Subject<void>();\n this.#focus = new Subject<void>();\n this.#textChanges = new Subject<SkyAutocompleteInputTextChange>();\n\n this.#blurObs = this.#blur.asObservable();\n this.#focusObs = this.#focus.asObservable();\n this.#textChangesObs = this.#textChanges.asObservable();\n }\n\n public ngOnInit(): void {\n const element = this.#elementRef.nativeElement;\n\n this.#setAttributes(this.#elementRef);\n\n observableFromEvent(element, 'input')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n if (!this.disabled) {\n this.#textChanges.next({\n value: this.#elementRef.nativeElement.value,\n });\n }\n });\n\n observableFromEvent(element, 'blur')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n if (!this.disabled) {\n this.#blur.next();\n }\n });\n\n observableFromEvent(element, 'focus')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n if (!this.disabled) {\n this.#focus.next();\n }\n });\n\n observableFromEvent(element, 'change')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (!this.disabled) {\n this.#isFirstChange = false;\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.#blur.complete();\n this.#textChanges.complete();\n\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public writeValue(value: any): void {\n this.value = value;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n public restoreInputTextValueToPreviousState(): void {\n const modelValue = this.#getValueByKey();\n\n // If the search field contains text, make sure that the value\n // matches the selected descriptor key.\n if (this.inputTextValue !== modelValue) {\n this.inputTextValue = modelValue;\n }\n\n this.onTouched();\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n }\n return null;\n }\n\n // See: https://www.w3.org/TR/wai-aria-practices/#kbd_focus_activedescendant\n public setActiveDescendant(descendantId: string | null): void {\n if (descendantId) {\n this.#renderer.setAttribute(\n this.#elementRef.nativeElement,\n 'aria-activedescendant',\n descendantId,\n );\n } else {\n this.#renderer.removeAttribute(\n this.#elementRef.nativeElement,\n 'aria-activedescendant',\n );\n }\n }\n\n /**\n * Used to connect the input to the overlay.\n */\n public setAriaControls(overlayId: string | null): void {\n if (overlayId) {\n this.#renderer.setAttribute(\n this.#elementRef.nativeElement,\n 'aria-controls',\n overlayId,\n );\n } else {\n this.#renderer.removeAttribute(\n this.#elementRef.nativeElement,\n 'aria-controls',\n );\n }\n }\n\n // Angular automatically constructs these methods.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onChange(value: any): void {}\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouched(): void {}\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onValidatorChange = (): void => {};\n\n #setAttributes(elementRef: ElementRef): void {\n const element = elementRef.nativeElement;\n\n this.#renderer.setAttribute(\n element,\n 'autocomplete',\n this.autocompleteAttribute,\n );\n this.#renderer.setAttribute(element, 'autocapitalize', 'none');\n this.#renderer.setAttribute(element, 'autocorrect', 'off');\n this.#renderer.setAttribute(element, 'spellcheck', 'false');\n this.#renderer.addClass(element, 'sky-form-control');\n }\n\n #getValueByKey(): string {\n return this.value ? this.value[this.displayWith] : '';\n }\n}\n","import { EventEmitter, Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyAutocompleteSearchAsyncArgs } from './types/autocomplete-search-async-args';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skyAutocompleteSearchAsyncDisabled',\n standalone: false,\n})\nexport class SkyAutocompleteSearchAsyncDisabledPipe implements PipeTransform {\n public transform(\n searchAsync: EventEmitter<SkyAutocompleteSearchAsyncArgs>,\n searchAsyncDisabled: boolean | undefined,\n ): boolean {\n return searchAsyncDisabled || searchAsync.observers.length === 0;\n }\n}\n","/**\n * Removes diacritical characters from strings and replaces them with their normalized equivalent.\n * For example: è becomes e, Å becomes A.\n */\nexport function normalizeDiacritics(value: string): string {\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n","import {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n inject,\n} from '@angular/core';\nimport { SkyCoreAdapterService, SkyOverlayInstance } from '@skyux/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyAutocompleteAdapterService {\n readonly #coreAdapterService = inject(SkyCoreAdapterService);\n\n #renderer: Renderer2 = inject(RendererFactory2).createRenderer(\n undefined,\n null,\n );\n\n /**\n * Adds the className for the provided element.\n */\n public addCSSClass(element: HTMLElement, className: string): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (element) {\n this.#renderer.addClass(element, className);\n }\n }\n\n public getOverlayFocusableElements(\n overlay: SkyOverlayInstance,\n ): HTMLElement[] {\n return this.#coreAdapterService.getFocusableChildren(\n /* Sanity check - calling function also has null check */\n /* istanbul ignore next */\n overlay?.componentRef.location.nativeElement,\n { ignoreTabIndex: true },\n );\n }\n\n /**\n * Removes the className for the provided element.\n */\n public removeCSSClass(element: HTMLElement, className: string): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (element) {\n this.#renderer.removeClass(element, className);\n }\n }\n\n public setDropdownWidth(\n elementRef: ElementRef,\n dropdownRef: ElementRef,\n isInputBox: boolean,\n ): void {\n // `setTimeout` ensures that the input box size is correct when grabbing the width. When the input is initially focused a parent's `overflow-y: auto` value can cause the width to be incorrect during initial rendering.\n setTimeout(() => {\n const parentElement = isInputBox\n ? elementRef.nativeElement.closest('.sky-input-box')\n : elementRef.nativeElement;\n if (parentElement) {\n const width = parentElement.getBoundingClientRect().width;\n this.#renderer.setStyle(\n dropdownRef.nativeElement,\n 'width',\n `${width}px`,\n );\n }\n });\n }\n\n /**\n * Sets the `tabIndex` of the `element` to the provided `tabIndex`.\n */\n public setTabIndex(element: HTMLElement, tabIndex: number): void {\n element.tabIndex = tabIndex;\n }\n}\n","import { normalizeDiacritics } from '../shared/sky-lookup-string-utils';\n\nimport { SkyAutocompleteDefaultSearchFunctionOptions } from './types/autocomplete-default-search-function-options';\nimport { SkyAutocompleteSearchArgs } from './types/autocomplete-search-args';\nimport { SkyAutocompleteSearchFunction } from './types/autocomplete-search-function';\nimport { SkyAutocompleteSearchFunctionFilter } from './types/autocomplete-search-function-filter';\nimport { SkyAutocompleteSearchFunctionResponse } from './types/autocomplete-search-function-response';\n\nexport function skyAutocompleteDefaultSearchFunction(\n options: SkyAutocompleteDefaultSearchFunctionOptions,\n): SkyAutocompleteSearchFunction {\n const filterData = function (\n searchText: string,\n data: any[],\n args?: SkyAutocompleteSearchArgs,\n ): any[] {\n return data.filter((item: any) => {\n if (!options.searchFilters || !options.searchFilters.length) {\n return true;\n }\n\n // Find the first failing filter (we can skip the others if one fails).\n const failedFilter = options.searchFilters.find(\n (filter: SkyAutocompleteSearchFunctionFilter) => {\n return !filter.call({}, searchText, item, args);\n },\n );\n\n return failedFilter === undefined;\n });\n };\n\n const search = function (\n searchText: string,\n data: any[],\n args?: SkyAutocompleteSearchArgs,\n ): SkyAutocompleteSearchFunctionResponse {\n const results: any[] = [];\n\n const searchTextNormalized = normalizeDiacritics(searchText).toUpperCase();\n\n const filteredData = filterData(searchText, data, args);\n\n /* Autocomplete can now send empty text, return all filtered data in that scenario */\n if (searchText === '') {\n return filteredData;\n }\n\n for (let i = 0, n = filteredData.length; i < n; i++) {\n const result = filteredData[i];\n const isMatch = options.propertiesToSearch.find((property: string) => {\n let value = (result[property] || '').toString();\n value = normalizeDiacritics(value).toUpperCase();\n return value.indexOf(searchTextNormalized) > -1;\n });\n\n if (isMatch) {\n results.push(result);\n }\n }\n\n return results;\n };\n\n return search;\n}\n","/**\n * @internal\n */\nexport enum SkyAutocompleteMessageType {\n /**\n * Closes the dropdown.\n */\n CloseDropdown = 0,\n\n /**\n * Repositions the dropdown.\n */\n RepositionDropdown = 1,\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n booleanAttribute,\n inject,\n input,\n} from '@angular/core';\nimport {\n SKY_STACKING_CONTEXT,\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyLiveAnnouncerService,\n SkyOverlayInstance,\n SkyOverlayService,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n Subscription,\n from,\n fromEvent as observableFromEvent,\n of,\n} from 'rxjs';\nimport {\n debounceTime,\n delay,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n} from 'rxjs/operators';\n\nimport { normalizeDiacritics } from '../shared/sky-lookup-string-utils';\n\nimport { SkyAutocompleteAdapterService } from './autocomplete-adapter.service';\nimport { skyAutocompleteDefaultSearchFunction } from './autocomplete-default-search-function';\nimport { SkyAutocompleteInputDirective } from './autocomplete-input.directive';\nimport { SkyAutocompleteMessage } from './types/autocomplete-message';\nimport { SkyAutocompleteMessageType } from './types/autocomplete-message-type';\nimport { SkyAutocompleteSearchAsyncArgs } from './types/autocomplete-search-async-args';\nimport { SkyAutocompleteSearchAsyncResult } from './types/autocomplete-search-async-result';\nimport { SkyAutocompleteSearchFunction } from './types/autocomplete-search-function';\nimport { SkyAutocompleteSearchFunctionFilter } from './types/autocomplete-search-function-filter';\nimport { SkyAutocompleteSelectionChange } from './types/autocomplete-selection-change';\nimport { SkyAutocompleteShowMoreArgs } from './types/autocomplete-show-more-args';\n\n/**\n * @internal\n */\ninterface SkyAutocompleteSearchResult {\n elementId: string;\n data: any;\n}\n\nlet uniqueId = 0;\n\n@Component({\n selector: 'sky-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n providers: [SkyAutocompleteAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyAutocompleteComponent implements OnDestroy, AfterViewInit {\n //#region public_api\n\n /**\n * The HTML element ID of the element that labels\n * the autocomplete text input. This sets the input's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n /**\n * The static data source for the autocomplete component to search\n * when users enter text. For a dynamic data source, such as an array that\n * changes due to server calls, use `search` or `searchAsync` instead.\n * You can specify static data, such as an array of objects,\n * or you can pull data from a database.\n */\n @Input()\n public set data(value: any[] | undefined) {\n this.#_data = value ?? [];\n }\n\n public get data(): any[] {\n return this.#_data;\n }\n\n /**\n * How many milliseconds to wait before searching while users\n * enter text in the autocomplete field.\n * @default 0\n */\n @Input()\n public set debounceTime(value: number | undefined) {\n this.#_debounceTime = value ?? 0;\n }\n\n public get debounceTime(): number {\n return this.#_debounceTime;\n }\n\n /**\n * The object property to display in the text input after users\n * select an item in the dropdown list.\n * @default \"name\"\n */\n @Input()\n public set descriptorProperty(value: string | undefined) {\n this.#_descriptorProperty = value || 'name';\n }\n\n public get descriptorProperty(): string {\n return this.#_descriptorProperty;\n }\n\n /**\n * Hint text to show in the dropdown\n * @internal\n */\n @Input()\n public dropdownHintText: string | undefined;\n\n /**\n * @internal\n * Whether to display a button in the dropdown that opens a picker where users can view all options.\n */\n @Input()\n public set enableShowMore(value: boolean | undefined) {\n this.#_enableShowMore = !!value;\n this.#updateIsResultsVisible();\n }\n public get enableShowMore(): boolean {\n return this.#_enableShowMore;\n }\n\n /**\n * The observable of `SkyAutocompleteMessage` that can close the dropdown.\n * @internal\n */\n @Input()\n public set messageStream(value: Subject<SkyAutocompleteMessage> | undefined) {\n this.#_messageStream = value ?? new Subject<SkyAutocompleteMessage>();\n this.#initMessageStream();\n }\n\n public get messageStream(): Subject<SkyAutocompleteMessage> {\n return this.#_messageStream;\n }\n\n /**\n * @internal\n */\n @Input()\n public wrapperClass: string | undefined;\n\n /**\n * The object properties to search.\n * @default [\"name\"]\n * @deprecated We recommend against using this property. To search specific properties, use the `searchAsync` event instead.\n */\n @Input()\n public set propertiesToSearch(value: string[] | undefined) {\n this.#_propertiesToSearch = value ?? ['name'];\n\n this.#updateDefaultSearchOptions();\n }\n\n public get propertiesToSearch(): string[] {\n return this.#_propertiesToSearch;\n }\n\n /**\n * The function that dynamically manages the data to display in search results when users\n * change the text in the autocomplete field. The search function must return\n * an array or a promise of an array. The `search` property is particularly\n * useful when the data source does not live in the source code.\n * @deprecated We recommend against using this property. To call a remote data source, use the `searchAsync` event instead.\n */\n @Input()\n public set search(value: SkyAutocompleteSearchFunction | undefined) {\n this.#_search = value;\n this.searchOrDefault =\n value ||\n skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n });\n }\n\n public get search(): SkyAutocompleteSearchFunction | undefined {\n return this.#_search;\n }\n\n /**\n * The template that formats each search result in the dropdown list.\n * The autocomplete component injects search result values into the template\n * as `item` variables that reference all of the object properties of the search results.\n */\n @Input()\n public searchResultTemplate: TemplateRef<unknown> | undefined;\n\n /**\n * The minimum number of characters that users must enter before\n * the autocomplete component searches the data source and displays search\n * results in the dropdown list. Can be set to `0` to trigger `searchAsync` on focus\n * or return all items if using the `data` input.\n * @default 1\n */\n @Input()\n public set searchTextMinimumCharacters(value: number | undefined) {\n if (value !== undefined && value >= 0) {\n this.#_searchTextMinimumCharacters = value;\n } else {\n this.#_searchTextMinimumCharacters = 1;\n }\n }\n\n public get searchTextMinimumCharacters(): number {\n return this.#_searchTextMinimumCharacters;\n }\n\n /**\n * The array of functions to call against each search result. This filters\n * the search results when using the `data` input and the default search function.\n * When the `search` property specifies a custom search function, you must\n * manually apply filters inside that function. The function must return `true`\n * or `false` for each result to indicate whether to display it in the dropdown list.\n *\n * @deprecated We recommend against using this property. To filter results, use the `searchAsync` event instead.\n */\n @Input()\n public set searchFilters(\n value: SkyAutocompleteSearchFunctionFilter[] | undefined,\n ) {\n this.#_searchFilters = value;\n\n this.#updateDefaultSearchOptions();\n }\n\n public get searchFilters():\n | SkyAutocompleteSearchFunctionFilter[]\n | undefined {\n return this.#_searchFilters;\n }\n\n /**\n * The maximum number of search results to display in the dropdown list.\n * By default, the component displays all matching results.\n */\n @Input()\n public set searchResultsLimit(value: number | undefined) {\n this.#_searchResultsLimit = value || 0;\n }\n\n public get searchResultsLimit(): number {\n return this.#_searchResultsLimit;\n }\n\n /**\n * @internal\n * Whether to display a button that lets users add options to the data source.\n * @default false\n */\n @Input()\n public set showAddButton(value: boolean | undefined) {\n this.#_showAddButton = !!value;\n this.#updateIsResultsVisible();\n }\n public get showAddButton(): boolean {\n return this.#_showAddButton;\n }\n\n /**\n * The text to display when no search results are found.\n * @default \"No matches found\"\n */\n @Input()\n public noResultsFoundText: string | undefined;\n\n /**\n * @internal\n * Allows async search to be disabled even when a listener is specified for\n * the `searchAsync` output.\n * @default false\n */\n @Input()\n public searchAsyncDisabled: boolean | undefined = false;\n\n /**\n * When using `searchAsync`, allows the user to specify arbitrary\n * values not in the search results. This only works in combination\n * with `searchAsync`. On blur, the typed text is kept as the value\n * rather than reverted, using a matching search result if one is\n * available. Consumers should guard against values set before a\n * `searchAsync` call resolves.\n * @default false\n */\n public allowAnyValue = input(false, { transform: booleanAttribute });\n\n /**\n * Highlights the search text in each search result. Set this to `false`\n * when your search returns results that aren't exact text matches, such as\n * returning \"Bob\" for \"Robert.\"\n * @default true\n */\n public highlightSearchText = input(true, { transform: booleanAttribute });\n\n /**\n * @internal\n * Fires when users select the button to add options to the data source.\n */\n @Output()\n public addClick = new EventEmitter<void>();\n\n /**\n * @internal\n * Fires when users select the button to view all options.\n */\n @Output()\n public showMoreClick = new EventEmitter<SkyAutocompleteShowMoreArgs>();\n\n /**\n * Fires when users select items in the dropdown list.\n */\n @Output()\n public selectionChange = new EventEmitter<SkyAutocompleteSelectionChange>();\n\n /**\n * Fires when users enter new search information and allows results to be\n * returned via an observable.\n */\n @Output()\n public searchAsync = new EventEmitter<SkyAutocompleteSearchAsyncArgs>();\n\n /**\n * @internal\n */\n @Output()\n public openChange = new EventEmitter<boolean>();\n\n //#endregion\n\n //#region template_properties\n\n public get searchResults(): SkyAutocompleteSearchResult[] {\n return this.#_searchResults || [];\n }\n\n public set searchResults(value: SkyAutocompleteSearchResult[]) {\n this.#_searchResults = value;\n }\n\n public get highlightText(): string[] {\n return this.#_highlightText || [];\n }\n\n public set highlightText(value: string[]) {\n this.#_highlightText = value;\n }\n\n public isOpen = false;\n\n public resultsListId: string;\n\n public resultsWrapperId: string;\n\n public searchText = '';\n\n public get showActionsArea(): boolean {\n return !!this.showAddButton || !!this.enableShowMore;\n }\n\n public isSearchingAsync = false;\n\n public searchResultsCount: number | undefined;\n\n //#endregion\n\n @ContentChild(SkyAutocompleteInputDirective)\n public set inputDirective(\n directive: SkyAutocompleteInputDirective | undefined,\n ) {\n if (!directive) {\n throw Error(\n [\n 'The SkyAutocompleteComponent requires a ContentChild input or',\n 'textarea bound with the SkyAutocomplete directive. For example:',\n '`<input type=\"text\" skyAutocomplete>`.',\n ].join(' '),\n );\n }\n\n if (this.#_inputDirective !== directive) {\n // Unsubscribe from old subscriptions on any previous input directive\n this.#inputDirectiveUnsubscribe.next();\n\n this.#_inputDirective = directive;\n\n this.#_inputDirective.displayWith = this.descriptorProperty;\n\n this.#_inputDirective.textChanges\n .pipe(\n takeUntil(this.#inputDirectiveUnsubscribe),\n debounceTime(this.debounceTime),\n switchMap((change) => {\n this.isSearchingAsync = true;\n return of(change);\n }),\n )\n .subscribe((change) => {\n this.#searchTextChanged(change.value);\n });\n\n // We delay this listener by 25ms to give things watching the value time to respond (such as the search button).\n this.#_inputDirective.blur\n .pipe(delay(25), takeUntil(this.#inputDirectiveUnsubscribe))\n .subscribe(() => {\n this.#handleInputExit();\n this.#closeDropdown();\n this.#cancelCurrentSearch();\n directive.onTouched();\n this.#hasFocus = false;\n this.#liveAnnounceService.clear();\n });\n\n this.#_inputDirective.focus\n .pipe(takeUntil(this.#inputDirectiveUnsubscribe))\n .subscribe(() => {\n this.#hasFocus = true;\n if (this.showActionsArea || this.dropdownHintText) {\n this.#openDropdown();\n }\n if (this.searchTextMinimumCharacters === 0) {\n this.isSearchingAsync = true;\n this.#searchTextChanged('');\n }\n });\n }\n }\n\n public get inputDirective(): SkyAutocompleteInputDirective | undefined {\n return this.#_inputDirective;\n }\n\n @ViewChild('resultsTemplateRef', { read: TemplateRef })\n public resultsTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('resultsRef', { read: ElementRef })\n public set resultsRef(value: ElementRef | undefined) {\n if (value) {\n this.#_resultsRef = value;\n this.#destroyAffixer();\n this.#createAffixer();\n }\n }\n\n public get resultsRef(): ElementRef | undefined {\n return this.#_resultsRef;\n }\n\n public searchOrDefault: SkyAutocompleteSearchFunction;\n\n protected isResultsVisible: Observable<boolean>;\n\n /**\n * Index that indicates which descendant of the overlay currently has focus.\n */\n #activeElementIndex = -1;\n\n readonly #adapterService = inject(SkyAutocompleteAdapterService);\n\n #affixer: SkyAffixer | undefined;\n\n readonly #affixService = inject(SkyAffixService);\n\n readonly #changeDetector = inject(ChangeDetectorRef);\n\n readonly #elementRef = inject(ElementRef);\n\n readonly #environmentInjector = inject(EnvironmentInjector);\n\n readonly #liveAnnounceService = inject(SkyLiveAnnouncerService);\n\n readonly #libResourceService = inject(SkyLibResourcesService);\n\n #hasFocus = false;\n\n readonly #inputBoxHostSvc = inject(SkyInputBoxHostService, {\n optional: true,\n });\n\n #inputDirectiveUnsubscribe = new Subject<void>();\n\n #messageStreamSub: Subscription | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #overlay: SkyOverlayInstance | undefined;\n\n readonly #overlayService = inject(SkyOverlayService);\n\n /**\n * Elements within the autocomplete dropdown that are focusable.\n * These are typically the search results and action buttons, but could also be\n * elements provided in the consumer's own template.\n */\n #overlayFocusableElements: HTMLElement[] = [];\n\n #currentSearchSub: Subscription | undefined;\n\n #isResultsVisible = new BehaviorSubject<boolean>(false);\n\n readonly #zIndex: Observable<number> | undefined = inject(\n SKY_STACKING_CONTEXT,\n { optional: true },\n )?.zIndex;\n\n #_data: any[] = [];\n\n #_debounceTime = 0;\n\n #_descriptorProperty = 'name';\n\n #_enableShowMore = false;\n\n #_highlightText: string[] | undefined;\n\n #_inputDirective: SkyAutocompleteInputDirective | undefined;\n\n #_messageStream = new Subject<SkyAutocompleteMessage>();\n\n #_propertiesToSearch = ['name'];\n\n #_resultsRef: ElementRef | undefined;\n\n #_search: SkyAutocompleteSearchFunction | undefined;\n\n #_searchFilters: SkyAutocompleteSearchFunctionFilter[] | undefined;\n\n #_searchResults: SkyAutocompleteSearchResult[] | undefined;\n\n #_searchResultsLimit = 0;\n\n #_searchTextMinimumCharacters = 1;\n\n #_showAddButton = false;\n\n constructor() {\n this.searchOrDefault = skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: ['name'],\n searchFilters: undefined,\n });\n\n const id = ++uniqueId;\n this.resultsListId = `sky-autocomplete-list-${id}`;\n this.resultsWrapperId = `sky-autocomplete-wrapper-${id}`;\n this.isResultsVisible = this.#isResultsVisible.asObservable();\n }\n\n public ngAfterViewInit(): void {\n this.#addInputEventListeners();\n }\n\n public ngOnDestroy(): void {\n this.#cancelCurrentSearch();\n this.#inputDirectiveUnsubscribe.next();\n this.#inputDirectiveUnsubscribe.complete();\n this.#isResultsVisible.complete();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#destroyAffixer();\n this.#destroyOverlay();\n this.openChange.complete();\n }\n\n public addButtonClicked(): void {\n this.addClick.emit();\n if (this.inputDirective) {\n this.inputDirective.restoreInputTextValueToPreviousState();\n }\n this.#closeDropdown();\n }\n\n public handleKeydown(event: KeyboardEvent): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (event.key) {\n const key = event.key.toLowerCase();\n const activeElement = this.#getActiveElement();\n const activeElementId = activeElement?.id;\n const targetIsSearchResult = this.searchResults.find(\n (r) => r.elementId === activeElementId,\n );\n\n switch (key) {\n case 'enter':\n if (targetIsSearchResult) {\n this.#selectSearchResultById(activeElementId);\n\n if (!this.showActionsArea && !this.dropdownHintText) {\n this.#closeDropdown();\n } else {\n this.#resetSearch();\n }\n } else {\n if (activeElement) {\n activeElement.dispatchEvent(new MouseEvent('click'));\n }\n }\n\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case 'tab':\n if (targetIsSearchResult) {\n this.#selectSearchResultById(activeElementId);\n } else {\n this.#handleInputExit();\n }\n\n this.#closeDropdown();\n break;\n\n case 'escape':\n this.#closeDropdown();\n break;\n\n case 'arrowdown':\n case 'down':\n this.#removeFocusedClass();\n if (\n this.#activeElementIndex ===\n this.#overlayFocusableElements.length - 1 ||\n this.#activeElementIndex === -1\n ) {\n this.#activeElementIndex = 0;\n } else {\n this.#activeElementIndex = this.#activeElementIndex + 1;\n }\n this.#addFocusedClass();\n this.#changeDetector.markForCheck();\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case 'arrowup':\n case 'up':\n this.#removeFocusedClass();\n if (this.#activeElementIndex <= 0) {\n this.#activeElementIndex =\n this.#overlayFocusableElements.length - 1;\n } else {\n this.#activeElementIndex = this.#activeElementIndex - 1;\n }\n this.#addFocusedClass();\n this.#changeDetector.markForCheck();\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n }\n\n #announceResults(): void {\n this.#libResourceService\n .getStrings({\n noResults: 'skyux_autocomplete_no_results',\n singleCountResult: 'skyux_autocomplete_one_result',\n multipleCountResults: [\n 'skyux_autocomplete_multiple_results',\n this.searchResultsCount,\n ],\n })\n .pipe(take(1))\n .subscribe((localizedStrings) => {\n let announcementString = '';\n if (this.searchResultsCount && this.searchResultsCount > 0) {\n announcementString =\n this.searchResultsCount === 1\n ? localizedStrings.singleCountResult\n : localizedStrings.multipleCountResults;\n this.#liveAnnounceService.announce(announcementString);\n } else if (this.searchResultsCount === 0) {\n this.#liveAnnounceService.announce(localizedStrings.noResults);\n }\n });\n }\n\n public moreButtonClicked(): void {\n this.showMoreClick.emit({ inputValue: this.searchText });\n if (this.inputDirective) {\n this.inputDirective.restoreInputTextValueToPreviousState();\n }\n this.#closeDropdown();\n }\n\n public onResultClick(id: string, event: MouseEvent): void {\n this.#selectSearchResultById(id);\n\n if (!this.showActionsArea && !this.dropdownHintText) {\n this.#closeDropdown();\n } else {\n this.#resetSearch();\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n public onResultMouseMove(id: number): void {\n if (id !== this.#activeElementIndex) {\n this.#removeFocusedClass();\n this.#activeElementIndex = id;\n this.#addFocusedClass();\n this.#changeDetector.markForCheck();\n }\n }\n\n public isElementFocused(ref: HTMLElement): boolean {\n return ref === this.#overlayFocusableElements[this.#activeElementIndex];\n }\n\n #searchTextChanged(searchText: string | undefined): void {\n // reaffix the dropdown during searching when the wait shrinks it.\n if (this.isOpen) {\n setTimeout(() => {\n if (this.#affixer) {\n this.#affixer.reaffix();\n }\n });\n }\n if (this.#hasFocus) {\n this.#openDropdown();\n if (!searchText?.trim() && this.searchTextMinimumCharacters !== 0) {\n this.#handleEmptySearchText();\n return;\n }\n\n const trimmedSearchText = searchText?.trim() || '';\n const isLongEnough =\n trimmedSearchText.length >= this.searchTextMinimumCharacters;\n const isDifferent =\n searchText !== this.searchText ||\n (this.searchText === '' && this.searchTextMinimumCharacters === 0);\n\n this.searchText = trimmedSearchText.trim();\n this.#updateIsResultsVisible();\n\n if (isLongEnough && isDifferent) {\n this.#performSearchAndUpdateResults();\n } else {\n this.isSearchingAsync = false;\n this.#changeDetector.markForCheck();\n }\n } else {\n this.isSearchingAsync = false;\n }\n }\n\n #handleEmptySearchText(): void {\n // Emit selectionChange if value has been cleared.\n if (this.inputDirective && this.inputDirective.value) {\n this.inputDirective.value = undefined;\n this.selectionChange.emit({ selectedItem: undefined });\n }\n\n if (!this.showActionsArea && !this.dropdownHintText) {\n this.#closeDropdown();\n } else {\n this.#resetSearch();\n }\n\n this.isSearchingAsync = false;\n this.#changeDetector.markForCheck();\n }\n\n #handleInputExit(): void {\n const inputDirective = this.inputDirective;\n const hasInputText = !!inputDirective?.inputTextValue.trim();\n\n if (!hasInputText && inputDirective?.value?.[this.descriptorProperty]) {\n inputDirective.value = undefined;\n this.selectionChange.emit({ selectedItem: undefined });\n } else if (hasInputText && inputDirective) {\n if (this.allowAnyValue()) {\n // While a search is still in flight, `searchResults` may only\n // contain the provisional placeholder for the current search text\n // (see `#combineSearchTextWithResult`), not a confirmed match.\n const matchedResult = this.isSearchingAsync\n ? undefined\n : this.searchResults.find(\n (result) =>\n result.data[this.descriptorProperty] ===\n inputDirective.inputTextValue,\n );\n const selectedItem = matchedResult\n ? matchedResult.data\n : { [this.descriptorProperty]: inputDirective.inputTextValue };\n inputDirective.value = selectedItem;\n this.selectionChange.emit({ selectedItem });\n } else {\n inputDirective.restoreInputTextValueToPreviousState();\n }\n }\n }\n\n #performSearchAndUpdateResults(): void {\n this.#cancelCurrentSearch();\n\n this.#currentSearchSub = this.#performSearch().subscribe({\n next: (result) => {\n const items = (\n result?.items as Record<string, unknown>[] | undefined\n )?.filter((item) => {\n return item && this.descriptorProperty in item;\n });\n\n this.searchResults =\n items?.map((r, i) => {\n const result: SkyAutocompleteSearchResult = {\n elementId: `${this.resultsListId}-item-${i}`,\n data: r,\n };\n return result;\n }) || [];\n\n this.searchResultsCount = result?.totalCount || 0;\n\n this.#displayResultsDropdown();\n },\n complete: () => {\n this.isSearchingAsync = false;\n this.#changeDetector.markForCheck();\n },\n });\n }\n\n #displayResultsDropdown(): void {\n this.highlightText = this.#getHighlightText(this.searchText);\n this.#removeFocusedClass();\n this.#removeActiveDescendant();\n if (this.searchResults.length > 0 && this.searchText) {\n this.#activeElementIndex = 0;\n } else {\n this.#activeElementIndex = -1;\n }\n\n this.#updateIsResultsVisible();\n this.#changeDetector.markForCheck();\n\n // Safety check\n /* istanbul ignore else */\n if (this.isOpen) {\n // Let the results populate in the DOM before recalculating placement.\n setTimeout(() => {\n if (this.#affixer) {\n this.#affixer.reaffix();\n this.#changeDetector.detectChanges();\n this.#initOverlayFocusableElements();\n }\n });\n } else {\n this.#openDropdown();\n this.#changeDetector.markForCheck();\n }\n }\n\n #performSearch(): Observable<SkyAutocompleteSearchAsyncResult | undefined> {\n if (!this.searchAsyncDisabled && this.searchAsync.observers.length > 0) {\n const searchAsyncArgs: SkyAutocompleteSearchAsyncArgs = {\n displayType: 'popover',\n offset: 0,\n searchText: this.searchText,\n };\n\n this.searchAsync.emit(searchAsyncArgs);\n\n return this.allowAnyValue()\n ? this.#combineSearchTextWithResult(searchAsyncArgs)\n : searchAsyncArgs.result?.pipe(take(1)) || of(undefined);\n }\n\n const result = this.searchOrDefault(this.searchText, this.data, {\n context: 'popover',\n });\n\n if (result instanceof Array) {\n return of({ items: result, totalCount: result.length });\n }\n\n return from(result).pipe(\n map((items) => {\n return { items, totalCount: items.length };\n }),\n );\n }\n\n #combineSearchTextWithResult(\n searchAsyncArgs: SkyAutocompleteSearchAsyncArgs,\n ): Observable<SkyAutocompleteSearchAsyncResult> {\n const searchTextItem = { [this.descriptorProperty]: this.searchText };\n const searchTextResult = { items: [searchTextItem], totalCount: 1 };\n\n if (searchAsyncArgs.result) {\n return searchAsyncArgs.result.pipe(\n take(1),\n map((result) => {\n if (\n (result.items as Record<string, string>[]).some(\n (item) => item[this.descriptorProperty] === this.searchText,\n )\n ) {\n return result;\n }\n\n // Include a result for the current search text as the first option\n // if no exact match is found in the results.\n return { ...result, items: [searchTextItem, ...result.items] };\n }),\n // Display the current search text immediately while async results load.\n startWith<SkyAutocompleteSearchAsyncResult>(searchTextResult),\n );\n }\n\n return of(searchTextResult);\n }\n\n #cancelCurrentSearch(): void {\n if (this.#currentSearchSub) {\n this.#currentSearchSub.unsubscribe();\n this.#currentSearchSub = undefined;\n }\n }\n\n /**\n * Returns the text to highlight based on exact matches, case-insensitive matches, and matches for corresponding diacritical characters (a will match à).\n */\n #getHighlightText(searchText: string): string[] {\n if (this.highlightSearchText()) {\n const normalizedSearchText = normalizeDiacritics(searchText)\n .toLocaleUpperCase()\n .trim();\n if (!normalizedSearchText) {\n return [];\n }\n\n let matchesToHighlight: string[] = [];\n for (let i = 0, n = this.searchResults.length; i < n; i++) {\n const value = this.searchResults[i].data[this.descriptorProperty]\n .toString()\n .toLocaleUpperCase() as string;\n const normalizedDataValue = normalizeDiacritics(value);\n\n let offset = 0;\n let index: number;\n while (\n (index = normalizedDataValue.indexOf(normalizedSearchText, offset)) >\n -1\n ) {\n const matchedString = value.slice(index, index + searchText.length);\n offset = index + searchText.length;\n matchesToHighlight = matchesToHighlight.concat(matchedString);\n }\n }\n\n // Remove any duplicates from the array.\n return [...new Set(matchesToHighlight)];\n }\n\n return [];\n }\n\n #selectSearchResultById(id: string): void {\n const result = this.searchResults.find((r) => r.elementId === id);\n /* istanbul ignore else */\n if (result) {\n const data = result.data;\n this.searchText = data[this.descriptorProperty];\n if (this.inputDirective) {\n this.inputDirective.value = data;\n }\n this.selectionChange.emit({ selectedItem: data });\n }\n }\n\n #openDropdown(): void {\n if (!this.#overlay && this.resultsTemplateRef) {\n const overlay = this.#overlayService.create({\n enableClose: false,\n enablePointerEvents: true,\n environmentInjector: this.#environmentInjector,\n wrapperClass: this.wrapperClass,\n });\n\n if (this.#zIndex) {\n this.#zIndex.pipe(takeUntil(overlay.closed)).subscribe((zIndex) => {\n overlay.componentRef.instance.zIndex = zIndex.toString(10);\n });\n }\n\n overlay.attachTemplate(this.resultsTemplateRef);\n\n this.#overlay = overlay;\n this.isOpen = true;\n this.#updateIsResultsVisible();\n this.#changeDetector.markForCheck();\n this.#updateAriaControls();\n this.#initOverlayFocusableElements();\n this.#announceResults();\n this.openChange.emit(true);\n }\n }\n\n #closeDropdown(): void {\n this.#resetSearch();\n this.isOpen = false;\n this.#destroyOverlay();\n this.#removeActiveDescendant();\n this.#updateAriaControls();\n this.#changeDetector.markForCheck();\n this.openChange.emit(false);\n }\n\n #setActiveDescendant(): void {\n const activeElement =\n this.#overlayFocusableElements[this.#activeElementIndex];\n /* Sanity check */\n /* istanbul ignore else */\n if (activeElement && this.inputDirective) {\n this.inputDirective.setActiveDescendant(activeElement.id);\n }\n }\n\n #removeActiveDescendant(): void {\n if (this.inputDirective) {\n this.inputDirective.setActiveDescendant(null);\n }\n }\n\n #updateAriaControls(): void {\n if (this.inputDirective) {\n this.inputDirective.setAriaControls(this.#overlay?.id || null);\n }\n }\n\n #resetSearch(): void {\n this.searchResults = [];\n this.searchText = '';\n this.highlightText = [];\n this.#removeFocusedClass();\n this.#activeElementIndex = -1;\n this.searchResultsCount = undefined;\n this.#removeActiveDescendant();\n this.#initOverlayFocusableElements();\n this.#updateIsResultsVisible();\n this.#changeDetector.markForCheck();\n }\n\n #addInputEventListeners(): void {\n const element = this.#elementRef.nativeElement;\n\n observableFromEvent<KeyboardEvent>(element, 'keydown')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((event) => {\n this.handleKeydown(event);\n });\n\n observableFromEvent(window, 'resize')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen && this.resultsRef) {\n this.#adapterService.setDropdownWidth(\n this.#elementRef,\n this.resultsRef,\n !!this.#inputBoxHostSvc,\n );\n }\n });\n }\n\n #destroyOverlay(): void {\n if (this.#overlay) {\n this.#overlayService.close(this.#overlay);\n this.#overlay = undefined;\n }\n }\n\n #createAffixer(): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (!this.#affixer && this.resultsRef) {\n const affixer = this.#affixService.createAffixer(this.resultsRef);\n\n this.#adapterService.setDropdownWidth(\n this.#elementRef,\n this.resultsRef,\n !!this.#inputBoxHostSvc,\n );\n\n affixer.affixTo(this.#elementRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n isSticky: true,\n placement: 'below',\n horizontalAlignment: 'left',\n });\n\n this.#affixer = affixer;\n }\n }\n\n #destroyAffixer(): void {\n if (this.#affixer) {\n this.#affixer.destroy();\n this.#affixer = undefined;\n }\n }\n\n #initMessageStream(): void {\n if (this.#messageStreamSub) {\n this.#messageStreamSub.unsubscribe();\n this.#messageStreamSub = undefined;\n }\n\n this.#messageStreamSub = this.messageStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((message) => {\n switch (message.type) {\n case SkyAutocompleteMessageType.CloseDropdown:\n this.#closeDropdown();\n break;\n case SkyAutocompleteMessageType.RepositionDropdown:\n // Settimeout waits for changes in DOM (e.g., tokens being removed)\n setTimeout(() => {\n /* istanbul ignore else */\n if (this.#affixer) {\n this.#affixer.reaffix();\n }\n });\n break;\n }\n });\n }\n\n #initOverlayFocusableElements(): void {\n // Wait for dropdown elements to render.\n setTimeout(() => {\n if (this.#overlay) {\n this.#overlayFocusableElements =\n this.#adapterService.getOverlayFocusableElements(this.#overlay);\n this.#overlayFocusableElements.forEach((el) => {\n this.#adapterService.setTabIndex(el, -1);\n });\n this.#addFocusedClass();\n this.#announceResults();\n }\n });\n }\n\n #getActiveElement(): HTMLElement {\n return this.#overlayFocusableElements[this.#activeElementIndex];\n }\n\n #removeFocusedClass(): void {\n if (this.#activeElementIndex > -1) {\n this.#adapterService.removeCSSClass(\n this.#overlayFocusableElements[this.#activeElementIndex],\n 'sky-autocomplete-descendant-focus',\n );\n }\n }\n\n #addFocusedClass(): void {\n if (this.#activeElementIndex > -1) {\n this.#adapterService.addCSSClass(\n this.#overlayFocusableElements[this.#activeElementIndex],\n 'sky-autocomplete-descendant-focus',\n );\n this.#setActiveDescendant();\n }\n }\n\n #updateDefaultSearchOptions(): void {\n // Reset default search if it is what is being used.\n if (this.search !== this.searchOrDefault) {\n this.searchOrDefault = skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n });\n }\n }\n\n #updateIsResultsVisible(): void {\n const isResultsVisible =\n (!!this.searchText || this.searchTextMinimumCharacters === 0) &&\n (!this.showActionsArea || this.searchResults.length > 0);\n if (isResultsVisible !== this.#isResultsVisible.getValue()) {\n this.#isResultsVisible.next(isResultsVisible);\n }\n }\n}\n","<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"\n isOpen &&\n !!(showActionsArea || dropdownHintText || (isResultsVisible | async))\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-controls]=\"\n isOpen &&\n (showActionsArea || dropdownHintText || (isResultsVisible | async))\n ? resultsListId\n : null\n \"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content />\n</div>\n\n<ng-template #resultsTemplateRef>\n <!-- We do not want the blur to fire here so that the dropdown does not close. This is why we are preventing the mousedown default. -->\n <div\n #resultsRef\n class=\"sky-autocomplete-results-container\"\n [attr.id]=\"resultsListId\"\n [skyThemeClass]=\"{ 'sky-shadow': 'default', 'sky-elevation-4': 'modern' }\"\n (mousedown)=\"$event.preventDefault()\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (isSearchingAsync && !allowAnyValue()) {\n <div class=\"sky-autocomplete-results-waiting\">\n <sky-wait [isWaiting]=\"true\" />\n </div>\n } @else {\n @if (isResultsVisible | async) {\n <div\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n >\n @for (result of searchResults; track result.data; let i = $index) {\n @if (\n (!searchResultsLimit || i < searchResultsLimit) &&\n !(enableShowMore && i >= 5)\n ) {\n <div\n #searchResultEl\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.data-descriptor-value]=\"result.data[descriptorProperty]\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (click)=\"onResultClick(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n />\n </div>\n }\n }\n @if (isSearchingAsync && allowAnyValue()) {\n <div class=\"sky-autocomplete-results-waiting\">\n <sky-wait [isWaiting]=\"true\" />\n </div>\n }\n @if (searchResults.length === 0) {\n <div class=\"sky-font-deemphasized sky-autocomplete-no-results\">\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n }\n </div>\n } @else if (dropdownHintText) {\n <div class=\"sky-autocomplete-dropdown-hint-text sky-font-deemphasized\">\n {{ dropdownHintText }}\n </div>\n }\n @if (showActionsArea) {\n <div class=\"sky-autocomplete-actions\">\n @if (\n enableShowMore &&\n (searchTextMinimumCharacters === 0 ||\n !searchText ||\n searchResults.length > 0)\n ) {\n <button\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (click)=\"moreButtonClicked()\"\n >\n @if (\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText &&\n searchTextMinimumCharacters !== 0\n ) {\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n }\n @if (\n ((searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) ||\n (searchTextMinimumCharacters === 0 &&\n searchResultsCount !== undefined &&\n searchResultsCount > 0)) &&\n !searchText\n ) {\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount\n | skyNumeric: { truncate: false }))\n }}\n }\n @if (searchText) {\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount\n | skyNumeric: { truncate: false }))\n }}\n }\n </button>\n }\n @if (\n (searchText || searchTextMinimumCharacters === 0) &&\n searchResults.length === 0\n ) {\n <div\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n }\n @if (showAddButton) {\n <button\n #addButtonEl\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (click)=\"addButtonClicked()\"\n >\n <sky-icon iconName=\"add\" />\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n }\n </div>\n }\n }\n </div>\n</ng-template>\n\n<ng-template #defaultSearchResultTemplate let-item=\"item\">\n {{ item[descriptorProperty] }}\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAffixModule, SkyIdModule, SkyNumericModule } from '@skyux/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTextHighlightModule, SkyWaitModule } from '@skyux/indicators';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkyAutocompleteInputDirective } from './autocomplete-input.directive';\nimport { SkyAutocompleteSearchAsyncDisabledPipe } from './autocomplete-search-async-disabled.pipe';\nimport { SkyAutocompleteComponent } from './autocomplete.component';\n\n@NgModule({\n declarations: [\n SkyAutocompleteComponent,\n SkyAutocompleteInputDirective,\n SkyAutocompleteSearchAsyncDisabledPipe,\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyAffixModule,\n SkyTextHighlightModule,\n SkyIconModule,\n SkyIdModule,\n SkyLookupResourcesModule,\n SkyNumericModule,\n SkyThemeModule,\n SkyWaitModule,\n ],\n exports: [SkyAutocompleteComponent, SkyAutocompleteInputDirective],\n})\nexport class SkyAutocompleteModule {}\n","import { type Country } from 'intl-tel-input/data';\n\nimport type { SkyCountryFieldCountry } from './types/country';\n\n/**\n * Clone the country data for each component instance to avoid overwriting\n * the global country data.\n */\nexport function cloneCountryData(\n data: Country[],\n locales: Intl.LocalesArgument,\n): SkyCountryFieldCountry[] {\n const clone = [...data];\n const displayNames = new Intl.DisplayNames(locales, { type: 'region' });\n\n return clone.map((country) => {\n const mapped: SkyCountryFieldCountry = {\n iso2: country.iso2,\n dialCode: country.dialCode,\n name:\n country.name ||\n displayNames.of(country.iso2.toUpperCase()) ||\n /* istanbul ignore next */ '',\n priority: country.priority,\n };\n\n if (country.areaCodes) {\n mapped.areaCodes = [...country.areaCodes];\n }\n\n return mapped;\n });\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { SkyCountryFieldContext } from './country-field-context';\n\n/**\n * @internal\n */\nexport const SKY_COUNTRY_FIELD_CONTEXT =\n new InjectionToken<SkyCountryFieldContext>('SkyCountryFieldContext');\n","import { coerceStringArray } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n Type,\n ViewChild,\n ViewEncapsulation,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NgControl,\n NgModel,\n UntypedFormControl,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport intlTelInput from 'intl-tel-input';\nimport { Observable, Subject, map } from 'rxjs';\n\nimport { SkyAutocompleteInputDirective } from '../autocomplete/autocomplete-input.directive';\nimport { SkyAutocompleteSelectionChange } from '../autocomplete/types/autocomplete-selection-change';\n\nimport { cloneCountryData } from './clone-country-data';\nimport { SkyCountryFieldCountry } from './types/country';\nimport { SkyCountryFieldContext } from './types/country-field-context';\nimport { SKY_COUNTRY_FIELD_CONTEXT } from './types/country-field-context-token';\n\nconst DEFAULT_COUNTRY_CODE = 'us';\n\nconst SKY_COUNTRY_FIELD_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyCountryFieldComponent),\n multi: true,\n};\n\nlet uniqueId = 0;\n\n@Component({\n selector: 'sky-country-field',\n templateUrl: './country-field.component.html',\n styleUrls: ['./country-field.component.scss'],\n providers: [SKY_COUNTRY_FIELD_VALIDATOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkyCountryFieldComponent\n implements ControlValueAccessor, OnDestroy, OnInit, Validator\n{\n /**\n * The value for the HTML `autocomplete` attribute on the form input.\n * @default 'off'\n * @deprecated SKY UX only supports browser autofill on components where the direct input matches the return value. This input may not behave as expected due to the dropdown selection interaction.\n */\n public autocompleteAttribute = input<string>();\n\n /**\n * The [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country code for the default country.\n * When search results include the default country, it appears at the top of the list.\n * @default \"us\"\n */\n public readonly defaultCountry = input<string, unknown>(\n DEFAULT_COUNTRY_CODE,\n {\n transform: (value) => String(value || DEFAULT_COUNTRY_CODE).toLowerCase(),\n },\n );\n\n /**\n * Whether to disable the country field on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input()\n public set disabled(isDisabled: boolean | undefined) {\n this.#_disabled = isDisabled ?? false;\n\n if (isDisabled) {\n this.countrySearchFormControl.disable();\n } else {\n this.countrySearchFormControl.enable();\n }\n\n this.#changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country codes for the countries that users can select. By default, all countries are available.\n */\n public readonly supportedCountryISOs = input<string[], unknown>([], {\n transform: (value) => coerceStringArray(value).map((v) => v.toLowerCase()),\n });\n\n /**\n * Fires when the selected country changes.\n */\n public readonly selectedCountryChange = output<SkyCountryFieldCountry>();\n\n /**\n * Fires when the country field is focused out.\n * @internal\n */\n // TODO: remove this if no longer needed after a scalable focus monitor service is implemented\n public countryFieldFocusout = output<FocusEvent>();\n\n public readonly countries = computed(() => this.#setupCountries());\n\n public readonly countrySearchFormControl = new UntypedFormControl();\n\n public searchTextMinimumCharacters = 2;\n\n @ViewChild(SkyAutocompleteInputDirective)\n public countrySearchAutocompleteDirective:\n | SkyAutocompleteInputDirective\n | undefined;\n\n public context: SkyCountryFieldContext | null = inject(\n SKY_COUNTRY_FIELD_CONTEXT,\n {\n optional: true,\n },\n );\n\n public inputId = `sky-country-field-input-${uniqueId++}`;\n protected ariaDescribedBy: Observable<string | undefined> | undefined;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n public readonly inputBoxHostSvc = inject(SkyInputBoxHostService, {\n optional: true,\n });\n\n readonly #changeDetector = inject(ChangeDetectorRef);\n\n #defaultCountryData: SkyCountryFieldCountry | undefined;\n\n readonly #injector = inject(Injector);\n\n #isInitialChange = true;\n\n #ngControl: NgControl | null = null;\n\n readonly #ngUnsubscribe = new Subject<void>();\n\n #_disabled = false;\n\n readonly #_selectedCountry = signal<SkyCountryFieldCountry | undefined>(\n undefined,\n );\n readonly #_selectedIsoCountry = computed(\n () => {\n let selectedCountry = this.#_selectedCountry();\n const selectedCountryIso = selectedCountry?.iso2?.toLowerCase();\n if (selectedCountryIso) {\n const isoCountry = this.countries().find(\n (country) => country.iso2 === selectedCountryIso,\n );\n if (isoCountry) {\n selectedCountry = isoCountry;\n }\n }\n return selectedCountry;\n },\n {\n equal: (a, b) => a?.name === b?.name,\n },\n );\n\n readonly #localeProvider = inject(SkyAppLocaleProvider);\n readonly #locale = toSignal(\n this.#localeProvider.getLocaleInfo().pipe(map((loc) => loc.locale)),\n {\n initialValue: this.#localeProvider.defaultLocale,\n },\n );\n\n constructor() {\n // Sync the form control with the resolved selected country.\n // This handles locale changes and ISO normalization reactively.\n effect(() => {\n const newCountry = this.#_selectedIsoCountry();\n this.countrySearchFormControl.setValue(newCountry);\n });\n }\n\n /**\n * Angular lifecycle hook for when the component is initialized\n * @internal\n */\n public ngOnInit(): void {\n this.#updateInputBox();\n\n this.#ngControl = this.#injector.get<NgControl | null>(\n NgControl as unknown as Type<NgControl>,\n null,\n );\n\n if (this.#ngControl) {\n this.#ngControl.valueAccessor = this;\n } else {\n /**\n * The initial change boolean is to determine if the form is setting the value. When no form\n * is present we don't want to ignore the first change.\n */\n this.#isInitialChange = false;\n }\n\n this.#changeDetector.markForCheck();\n }\n\n /**\n * Angular lifecycle hook for when the component is destructed.\n * @internal\n */\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Sets the component's touched value when the autocomplete is blurred\n * @internal\n */\n public onAutocompleteBlur(): void {\n this.onTouched();\n }\n\n /**\n * Sets the country to validate against based on the county's iso2 code.\n * @param newCountry The International Organization for Standardization's two-letter code\n * for the default country.\n * @internal\n */\n public onCountrySelected(newCountry: SkyAutocompleteSelectionChange): void {\n if (newCountry.selectedItem) {\n this.writeValue(\n this.countries().find(\n (countryInfo) => countryInfo.iso2 === newCountry.selectedItem.iso2,\n ),\n );\n } else {\n this.writeValue(undefined);\n }\n }\n\n /**\n * Called when the Autocomplete textarea loses focus\n * @internal\n */\n public onAutocompleteFocusout(e: FocusEvent): void {\n this.countryFieldFocusout.emit(e);\n }\n\n // Angular automatically constructs these methods.\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\n public onChange = (value: SkyCountryFieldCountry | undefined): void => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouched = (): void => {};\n\n public registerOnChange(\n fn: (value: SkyCountryFieldCountry | undefined) => void,\n ): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Allows Angular to disable the input.\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (control.value) {\n const supportedCountryISOs = this.supportedCountryISOs();\n const valueIso2 = control.value.iso2?.toLowerCase();\n if (\n (supportedCountryISOs.length > 0 &&\n supportedCountryISOs.indexOf(valueIso2) < 0) ||\n !this.countries().find((country) => country.iso2 === valueIso2)\n ) {\n return { unsupportedCountry: true };\n }\n }\n\n return null;\n }\n\n public writeValue(value: SkyCountryFieldCountry | undefined): void {\n const current = this.#_selectedIsoCountry();\n if (!this.#countriesAreEqual(current, value)) {\n this.#_selectedCountry.set(value);\n\n if (!this.#isInitialChange) {\n const resolved = this.#_selectedIsoCountry();\n this.onChange(resolved);\n this.onTouched();\n\n if (resolved) {\n this.selectedCountryChange.emit(resolved);\n }\n } else if (this.#ngControl?.control) {\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n this.#ngControl.control.markAsPristine();\n }\n\n this.#isInitialChange = false;\n } else if (!(this.#ngControl instanceof NgModel) || value !== null) {\n this.#isInitialChange = false;\n }\n\n this.#changeDetector.markForCheck();\n }\n\n protected onFocus($event: FocusEvent): void {\n ($event.target as HTMLTextAreaElement).select();\n }\n\n #countriesAreEqual(\n country1: SkyCountryFieldCountry | undefined,\n country2: SkyCountryFieldCountry | undefined,\n ): boolean {\n if (country1 && country2) {\n return country1.iso2 === country2.iso2;\n }\n\n // NOTE: We are doing this in this way because template forms will send through `null`\n // and then `undefined` on empty initialization. These are functionally equivalent but will\n // not pass a standard triple equals check.\n return !country1 && !country2;\n }\n\n #countriesEqual(\n a: SkyCountryFieldCountry,\n b: SkyCountryFieldCountry,\n ): boolean {\n return a.iso2 === b.iso2 && a.name === b.name;\n }\n\n #setupCountries(): SkyCountryFieldCountry[] {\n let countries = cloneCountryData(\n intlTelInput.getCountryData(),\n this.#locale(),\n );\n\n /* istanbul ignore else */\n if (!this.context?.inPhoneField) {\n /**\n * The library we get the country data from includes extra phone properties.\n * We want to remove these unless we are in a phone field\n */\n countries.forEach((country) => {\n delete country.dialCode;\n delete country.areaCodes;\n delete country.priority;\n });\n }\n\n const defaultCountry = this.defaultCountry();\n this.#defaultCountryData = countries.find(\n (country) => country.iso2 === defaultCountry,\n );\n countries = this.#sortCountriesWithSelectedAndDefault(countries);\n\n const supportedCountryISOs = this.supportedCountryISOs();\n if (supportedCountryISOs.length > 0) {\n countries = countries.filter((country: SkyCountryFieldCountry) => {\n return supportedCountryISOs.indexOf(country.iso2) >= 0;\n });\n }\n return countries;\n }\n\n #sortCountriesWithSelectedAndDefault(\n countries: SkyCountryFieldCountry[],\n ): SkyCountryFieldCountry[] {\n const selectedCountry = this.#_selectedCountry();\n let selectedCountryIndex: number;\n let selectedCountryData: SkyCountryFieldCountry;\n\n const sortedNewCountries = countries.sort((a, b) => {\n if (\n ((this.#defaultCountryData &&\n this.#countriesEqual(a, this.#defaultCountryData)) ||\n (a.name && b.name && a.name < b.name)) &&\n (!this.#defaultCountryData ||\n !this.#countriesEqual(this.#defaultCountryData, b))\n ) {\n return -1;\n } else {\n return 1;\n }\n });\n\n if (selectedCountry) {\n // Note: We are looking up this data here to ensure we are using the official data from the\n // library and not the data provided by the user on initialization of the component\n const foundCountry = countries.find(\n (country) => country.iso2 === selectedCountry.iso2.toLowerCase(),\n );\n\n if (foundCountry) {\n selectedCountryData = foundCountry;\n selectedCountryIndex = countries.indexOf(selectedCountryData);\n\n if (selectedCountryIndex >= 0) {\n countries.splice(selectedCountryIndex, 1);\n sortedNewCountries.splice(0, 0, selectedCountryData);\n }\n }\n }\n\n return countries;\n }\n\n #updateInputBox(): void {\n if (this.inputBoxHostSvc && this.inputTemplateRef) {\n this.inputId = this.inputBoxHostSvc.controlId;\n this.ariaDescribedBy = this.inputBoxHostSvc.ariaDescribedBy;\n\n this.inputBoxHostSvc.populate({\n inputTemplate: this.inputTemplateRef,\n });\n }\n }\n}\n","@if (!inputBoxHostSvc) {\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\" />\n}\n\n<ng-template #inputTemplateRef>\n <span\n class=\"sky-country-field-container\"\n [ngClass]=\"{\n 'sky-country-field-disabled': disabled\n }\"\n >\n <sky-autocomplete\n [ariaLabelledBy]=\"inputBoxHostSvc?.labelId ?? inputId\"\n [data]=\"countries()\"\n [dropdownHintText]=\"\n 'skyux_country_field_dropdown_hint_text' | skyLibResources\n \"\n [propertiesToSearch]=\"['name', 'iso2']\"\n [searchResultTemplate]=\"countrySearchResultTemplate\"\n [searchTextMinimumCharacters]=\"searchTextMinimumCharacters\"\n (selectionChange)=\"onCountrySelected($event)\"\n >\n <div class=\"sky-country-field-input\">\n <!-- The check for label text on the aria-label is to allow for backwards compatibility while also respecting label text functionality. -->\n <textarea\n class=\"sky-form-control\"\n name=\"selectedCountry\"\n rows=\"1\"\n skyAutocomplete\n [attr.aria-describedby]=\"ariaDescribedBy | async\"\n [attr.aria-label]=\"\n context?.inPhoneField\n ? ('skyux_country_field_dropdown_hint_text' | skyLibResources)\n : inputBoxHostSvc?.labelText\n ? undefined\n : ('skyux_country_field_dropdown_hint_text' | skyLibResources)\n \"\n [attr.id]=\"inputId\"\n [autocompleteAttribute]=\"autocompleteAttribute()\"\n [formControl]=\"countrySearchFormControl\"\n (blur)=\"onAutocompleteBlur()\"\n (focus)=\"onFocus($event)\"\n (focusout)=\"onAutocompleteFocusout($event)\"\n ></textarea>\n </div>\n </sky-autocomplete>\n </span>\n</ng-template>\n\n<ng-template #countrySearchResultTemplate let-item=\"item\">\n <div class=\"sky-country-field-search-result-flag\">\n <div [ngClass]=\"'iti__flag iti__' + item.iso2.toLowerCase()\"></div>\n </div>\n <div class=\"sky-country-field-search-result-info\">\n {{ item.name }}\n @if (context?.inPhoneField) {\n <span\n class=\"sky-font-deemphasized sky-country-field-search-result-dial-code\"\n >\n {{ item.dialCode }}\n </span>\n }\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyAutocompleteModule } from '../autocomplete/autocomplete.module';\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkyCountryFieldComponent } from './country-field.component';\n\n@NgModule({\n declarations: [SkyCountryFieldComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyAutocompleteModule,\n SkyIconModule,\n SkyLookupResourcesModule,\n SkyThemeModule,\n ],\n exports: [SkyCountryFieldComponent],\n})\nexport class SkyCountryFieldModule {}\n","import { ElementRef, Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkySearchAdapterService {\n public selectInput(searchEl: ElementRef): void {\n this.#getInputEl(searchEl).select();\n }\n\n public focusInput(searchEl: ElementRef): void {\n this.#getInputEl(searchEl).focus();\n }\n\n #getInputEl(searchEl: ElementRef): HTMLInputElement {\n return searchEl.nativeElement.querySelector('input');\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n afterNextRender,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n SkyBreakpoint,\n SkyContentInfo,\n SkyContentInfoProvider,\n SkyMediaQueryService,\n} from '@skyux/core';\n\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nimport { SkySearchAdapterService } from './search-adapter.service';\n\nconst EXPAND_MODE_RESPONSIVE = 'responsive';\nconst EXPAND_MODE_FIT = 'fit';\nconst EXPAND_MODE_NONE = 'none';\n\n@Component({\n selector: 'sky-search',\n templateUrl: './search.component.html',\n styleUrls: ['./search.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [SkySearchAdapterService],\n standalone: false,\n})\nexport class SkySearchComponent implements OnDestroy, OnInit, OnChanges {\n /**\n * The ARIA label for the search input. This sets the search input's `aria-label` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * Use a context-sensitive label, such as \"Search constituents.\" Context is especially important when multiple search inputs are in close proximity.\n * In toolbars, search inputs use the `listDescriptor` to provide context, and the ARIA label defaults to \"Search <listDescriptor>.\"\n * If the box includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n */\n @Input()\n public ariaLabel: string | undefined;\n\n /**\n * The HTML element ID of the element that labels\n * the search. This sets the search's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the box does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n\n /**\n * Fires when the search text is applied.\n */\n @Output()\n public searchApply = new EventEmitter<string>();\n\n /**\n * Fires when the search text is changed.\n */\n @Output()\n public searchChange = new EventEmitter<string>();\n\n /**\n * Fires when the search text is cleared.\n */\n @Output()\n public searchClear = new EventEmitter<void>();\n\n /**\n * Default search criteria for the input.\n */\n @Input()\n public searchText: string | undefined;\n\n /**\n * The expand mode for the search input. The valid options\n * include `\"responsive\"` to collapse the search input into a button on\n * mobile devices, `\"none\"` to *not* collapse the search input on mobile\n * devices, and `\"fit\"` to extend the search input to fit the width of its container.\n * @default \"responsive\"\n */\n @Input()\n public set expandMode(value: string | undefined) {\n this.#_expandMode = value ?? EXPAND_MODE_RESPONSIVE;\n }\n\n public get expandMode(): string {\n return this.#_expandMode;\n }\n\n /**\n * How many milliseconds to wait before searching after users enter text in the search input.\n * @default 0\n */\n @Input()\n public set debounceTime(value: number | undefined) {\n this.#_debounceTime = value ?? 0;\n this.#setupSearchChangedEvent();\n }\n\n public get debounceTime(): number {\n return this.#_debounceTime;\n }\n\n /**\n * Whether to disable the search.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value ?? false;\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * Placeholder text to display in the search input until users\n * enter search criteria.\n * @default \"Find in this list\"\n */\n @Input()\n public placeholderText: string | undefined;\n\n public clearButtonShown = false;\n\n public inputShown = true;\n\n public isCollapsible = true;\n\n public isFullWidth = false;\n\n public mobileSearchShown = false;\n\n public searchButtonShown = false;\n\n protected contentInfoObs: Observable<SkyContentInfo> | undefined;\n\n readonly #changeRef = inject(ChangeDetectorRef);\n\n #contentInfoProvider = inject(SkyContentInfoProvider, { optional: true });\n\n readonly #elRef = inject(ElementRef);\n\n readonly #searchAdapter = inject(SkySearchAdapterService);\n\n #searchUpdated = new Subject<string>();\n\n #searchUpdatedSub: Subscription | undefined;\n\n #_debounceTime = 0;\n\n #_disabled = false;\n\n #_expandMode = EXPAND_MODE_RESPONSIVE;\n\n readonly #destroyRef = inject(DestroyRef);\n readonly #injector = inject(Injector);\n readonly #mediaQuerySvc = inject(SkyMediaQueryService);\n readonly #breakpoint = toSignal(this.#mediaQuerySvc.breakpointChange);\n\n constructor() {\n this.contentInfoObs = this.#contentInfoProvider?.getInfo();\n }\n\n public ngOnInit(): void {\n if (this.#searchShouldCollapse()) {\n this.#mediaQuerySvc.breakpointChange\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((breakpoint) => {\n this.#mediaQueryCallback(breakpoint);\n });\n }\n\n this.#setupSearchChangedEvent();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.#expandModeBindingChanged(changes)) {\n switch (this.expandMode) {\n case EXPAND_MODE_NONE:\n this.isCollapsible = false;\n this.isFullWidth = false;\n break;\n case EXPAND_MODE_FIT:\n this.isCollapsible = false;\n this.isFullWidth = true;\n break;\n default:\n this.isCollapsible = true;\n this.isFullWidth = false;\n break;\n }\n }\n\n if (this.#searchBindingChanged(changes)) {\n this.#searchUpdated.next(this.searchText ?? '');\n this.clearButtonShown = !!(this.searchText && this.searchText !== '');\n if (this.#shouldOpenInput()) {\n this.inputShown = true;\n this.mobileSearchShown = true;\n this.searchButtonShown = false;\n }\n }\n this.#changeRef.detectChanges();\n }\n\n public clearSearchText(): void {\n this.searchText = '';\n this.clearButtonShown = false;\n\n this.#searchAdapter.focusInput(this.#elRef);\n this.#searchUpdated.next(this.searchText);\n\n this.searchApply.emit(this.searchText);\n\n this.searchClear.emit();\n }\n\n public enterPress(\n event: KeyboardEvent,\n searchText: string | undefined,\n ): void {\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.applySearchText(searchText);\n }\n }\n\n public applySearchText(searchText: string | undefined): void {\n // Double check that search text is defined before attempting to trim off whitespace\n if (searchText) {\n searchText = searchText.trim();\n }\n\n if (searchText !== this.searchText) {\n this.searchText = searchText;\n }\n this.clearButtonShown = !!(searchText && searchText !== '');\n if (searchText && searchText !== '') {\n this.#searchAdapter.selectInput(this.#elRef);\n }\n\n this.searchApply.emit(searchText);\n }\n\n public searchTextChanged(searchText: string): void {\n this.searchText = searchText;\n this.#searchUpdated.next(searchText);\n }\n\n public toggleSearchInput(showInput: boolean): void {\n if (this.#searchShouldCollapse()) {\n this.inputShown = showInput;\n\n if (showInput && this.#breakpoint() === 'xs') {\n this.mobileSearchShown = true;\n this.searchButtonShown = false;\n }\n\n if (showInput) {\n afterNextRender(\n () => {\n this.#searchAdapter.focusInput(this.#elRef);\n },\n { injector: this.#injector },\n );\n }\n }\n }\n\n protected onInputTransitionEnd(): void {\n if (!this.inputShown) {\n if (this.#breakpoint() === 'xs' && this.#searchShouldCollapse()) {\n this.searchButtonShown = true;\n }\n\n this.mobileSearchShown = false;\n }\n }\n\n public ngOnDestroy(): void {\n this.#searchUpdated.complete();\n this.#searchUpdatedSub?.unsubscribe();\n }\n\n #searchBindingChanged(changes: SimpleChanges): boolean {\n return (\n changes['searchText'] &&\n changes['searchText'].previousValue !== changes['searchText'].currentValue\n );\n }\n\n #expandModeBindingChanged(changes: SimpleChanges): boolean {\n return (\n changes['expandMode'] &&\n changes['expandMode'].previousValue !== changes['expandMode'].currentValue\n );\n }\n\n #shouldOpenInput(): boolean {\n return (\n this.searchText !== '' &&\n this.#breakpoint() === 'xs' &&\n this.#searchShouldCollapse()\n );\n }\n\n #mediaQueryCallback(breakpoint: SkyBreakpoint): void {\n if (this.#searchShouldCollapse()) {\n if (breakpoint === 'xs') {\n this.inputShown = false;\n } else if (!this.inputShown) {\n this.inputShown = true;\n this.searchButtonShown = false;\n this.mobileSearchShown = false;\n } else {\n this.mobileSearchShown = false;\n }\n }\n this.#changeRef.markForCheck();\n }\n\n #searchShouldCollapse(): boolean {\n return (\n (this.isCollapsible || this.isCollapsible === undefined) &&\n this.isFullWidth !== true\n );\n }\n\n #setupSearchChangedEvent(): void {\n this.#searchUpdatedSub?.unsubscribe();\n\n this.#searchUpdatedSub = this.#searchUpdated\n .pipe(debounceTime(this.debounceTime), distinctUntilChanged())\n .subscribe((value) => {\n this.searchChange.emit(value);\n });\n }\n}\n","<div class=\"sky-search-container\">\n <div class=\"sky-search-button-container\">\n <button\n class=\"sky-btn sky-btn-default sky-btn-icon sky-search-btn-open\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_search_open' | skyLibResources\"\n [hidden]=\"!searchButtonShown\"\n [ngClass]=\"{ 'sky-search-btn-open-applied': clearButtonShown }\"\n (click)=\"toggleSearchInput(true)\"\n >\n <ng-container *ngTemplateOutlet=\"searchIconTemplate\" />\n </button>\n </div>\n <div\n class=\"sky-search-dismiss-container\"\n [hidden]=\"searchButtonShown\"\n [ngClass]=\"{\n 'sky-search-dismiss-absolute': mobileSearchShown || isFullWidth\n }\"\n >\n <div class=\"sky-search-item-input\">\n <div\n class=\"sky-search-input-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"opacity\"\n [class.sky-search-input-hidden]=\"!inputShown\"\n [ngClass]=\"{\n 'sky-search-input-container-has-value': searchText?.trim()\n }\"\n [transitionTrigger]=\"inputShown\"\n (transitionEnd)=\"onInputTransitionEnd()\"\n >\n <sky-input-box [disabled]=\"disabled\">\n <input\n #searchInput=\"skyId\"\n class=\"sky-form-control sky-search-input sky-rounded-corners\"\n type=\"text\"\n skyId\n [attr.aria-label]=\"\n ariaLabelledBy\n ? undefined\n : ariaLabel ||\n ((contentInfoObs | async)?.descriptor?.type === 'text'\n ? ('skyux_search_aria_label_descriptor'\n | skyLibResources\n : (contentInfoObs | async)?.descriptor?.value)\n : ('skyux_search_label' | skyLibResources))\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.placeholder]=\"\n placeholderText || ('skyux_search_placeholder' | skyLibResources)\n \"\n [disabled]=\"disabled\"\n [ngModel]=\"searchText\"\n (keyup)=\"enterPress($event, searchText)\"\n (ngModelChange)=\"searchTextChanged($event)\"\n />\n <span\n class=\"sky-input-group-btn sky-input-group-clear sky-input-box-btn-inset\"\n [hidden]=\"!clearButtonShown\"\n >\n <button\n aria-hidden=\"true\"\n class=\"sky-btn sky-btn-default sky-search-btn sky-search-btn-clear\"\n tabindex=\"-1\"\n type=\"button\"\n [disabled]=\"disabled\"\n (click)=\"clearSearchText()\"\n >\n <sky-icon iconName=\"close\" />\n </button>\n </span>\n <span\n *skyThemeIf=\"'default'\"\n class=\"sky-input-group-btn sky-input-box-btn-inset\"\n >\n <button\n class=\"sky-btn sky-btn-default sky-search-btn sky-search-btn-apply\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_search_label' | skyLibResources\"\n [disabled]=\"disabled\"\n (click)=\"applySearchText(searchText)\"\n >\n <ng-container *ngTemplateOutlet=\"searchIconTemplate\" />\n </button>\n </span>\n <div\n *skyThemeIf=\"'modern'\"\n aria-hidden=\"true\"\n class=\"sky-input-group-icon sky-input-box-icon-inset-left\"\n >\n <ng-container *ngTemplateOutlet=\"searchIconTemplate\" />\n </div>\n </sky-input-box>\n </div>\n </div>\n <div class=\"sky-search-item-dismiss\">\n @if (mobileSearchShown) {\n <button\n class=\"sky-btn sky-search-btn-dismiss\"\n type=\"button\"\n [attr.title]=\"'skyux_search_dismiss' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"toggleSearchInput(false)\"\n >\n <sky-icon *skyThemeIf=\"'default'\" iconName=\"chevron-left\" />\n <sky-icon *skyThemeIf=\"'modern'\" iconName=\"chevron-double-left\" />\n </button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #searchIconTemplate>\n <sky-icon iconName=\"search\" />\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule, _SkyTransitionEndHandlerDirective } from '@skyux/core';\nimport { SkyInputBoxModule } from '@skyux/forms';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkySearchComponent } from './search.component';\n\n@NgModule({\n declarations: [SkySearchComponent],\n imports: [\n CommonModule,\n SkyInputBoxModule,\n SkyLookupResourcesModule,\n FormsModule,\n SkyIconModule,\n SkyThemeModule,\n SkyIdModule,\n _SkyTransitionEndHandlerDirective,\n ],\n exports: [SkySearchComponent],\n})\nexport class SkySearchModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skySelectionModalItemSelected',\n})\nexport class SkySelectionModalItemSelectedPipe implements PipeTransform {\n public transform(id: unknown, selectedIdMap: Map<unknown, unknown>): boolean {\n return selectedIdMap.has(id);\n }\n}\n","import { SkyAutocompleteSearchAsyncFunction } from '../../autocomplete/types/autocomplete-search-async-function';\nimport { SkyLookupSelectModeType } from '../../lookup/types/lookup-select-mode-type';\nimport { SkyLookupShowMoreNativePickerConfig } from '../../lookup/types/lookup-show-more-native-picker-config';\n\n/**\n * @internal\n * Context for the selection modal. These values are provided by the selection modal service.\n */\nexport class SkySelectionModalContext {\n public descriptorProperty: string;\n\n public idProperty: string;\n\n public initialSearch: string;\n\n public initialValue: unknown[];\n\n public searchAsync: SkyAutocompleteSearchAsyncFunction;\n\n public selectionDescriptor: string;\n\n public selectMode: SkyLookupSelectModeType;\n\n public showAddButton: boolean;\n\n public userConfig: SkyLookupShowMoreNativePickerConfig;\n\n constructor(\n descriptorProperty: string,\n idProperty: string,\n initialSearch: string,\n initialValue: unknown[],\n searchAsync: SkyAutocompleteSearchAsyncFunction,\n selectMode: SkyLookupSelectModeType,\n selectionDescriptor: string,\n showAddButton: boolean,\n userConfig: SkyLookupShowMoreNativePickerConfig,\n ) {\n this.descriptorProperty = descriptorProperty;\n this.idProperty = idProperty;\n this.initialSearch = initialSearch;\n this.initialValue = initialValue;\n this.searchAsync = searchAsync;\n this.selectMode = selectMode;\n this.selectionDescriptor = selectionDescriptor;\n this.showAddButton = showAddButton;\n this.userConfig = userConfig;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n TemplateRef,\n inject,\n} from '@angular/core';\nimport {\n SkyIdService,\n SkyLiveAnnouncerService,\n SkyViewkeeperModule,\n} from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyWaitModule } from '@skyux/indicators';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyInfiniteScrollModule, SkyRepeaterModule } from '@skyux/lists';\nimport { SkyModalInstance, SkyModalModule } from '@skyux/modals';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { Subject, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { SkySearchModule } from '../search/search.module';\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkySelectionModalItemSelectedPipe } from './selection-modal-item-selected.pipe';\nimport { SkySelectionModalContext } from './types/selection-modal-context';\nimport { SkySelectionModalSearchResult } from './types/selection-modal-search-result';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-selection-modal',\n templateUrl: './selection-modal.component.html',\n styleUrls: ['./selection-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyCheckboxModule,\n SkyIconModule,\n SkyInfiniteScrollModule,\n SkyLookupResourcesModule,\n SkyModalModule,\n SkyRepeaterModule,\n SkySearchModule,\n SkySelectionModalItemSelectedPipe,\n SkyThemeModule,\n SkyToolbarModule,\n SkyWaitModule,\n SkyViewkeeperModule,\n ],\n})\nexport class SkySelectionModalComponent implements OnInit, OnDestroy {\n /**\n * @internal\n * Fires when users select the button to add new options to the list.\n */\n public addClick = new Subject<void>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public displayedItems: any[] = [];\n\n public hasMoreItems = false;\n\n /**\n * Used to associate this modal with its owning lookup component.\n */\n public id: string;\n\n public isLoadingMore = false;\n\n public isSearching = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public items: any[] = [];\n\n public onlyShowSelected = false;\n\n public repeaterItemTemplate: TemplateRef<unknown> | null = null;\n\n public searchText: string | undefined;\n\n public selectedIdMap = new Map<unknown, unknown>();\n\n #continuationData: unknown;\n\n #currentSearchSub: Subscription | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #offset = 0;\n\n protected readonly context = inject(SkySelectionModalContext);\n protected readonly modalInstance = inject(SkyModalInstance);\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #idSvc = inject(SkyIdService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n\n constructor() {\n this.id = this.#idSvc.generateId();\n }\n\n public ngOnInit(): void {\n this.repeaterItemTemplate = this.context.userConfig.itemTemplate || null;\n this.searchText = this.context.initialSearch;\n\n this.#createInitialSelectedItemsMap();\n this.#loadSearchResults();\n }\n\n public ngOnDestroy(): void {\n this.#cancelCurrentSearch();\n\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public addButtonClicked(): void {\n this.addClick.next();\n }\n\n public clearAll(): void {\n this.selectedIdMap = new Map(this.selectedIdMap);\n\n // Only deselect items that have been loaded; items that would be loaded\n // after an infinite scroll event should remain selected.\n for (const item of this.items) {\n this.selectedIdMap.delete(item[this.context.idProperty]);\n }\n\n this.updateDisplayedItems();\n\n this.#changeDetector.markForCheck();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public itemClick(selectedItem: any): void {\n if (this.context.selectMode === 'single') {\n this.onItemSelect(!selectedItem.selected, selectedItem);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public addItem(itemToAdd: any): void {\n // Add the selected item, then perform the search again in case the\n // newly-added item should be displayed as a search results.\n this.#offset = 0;\n this.onItemSelect(true, itemToAdd);\n this.#loadSearchResults();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public onItemSelect(newSelectState: boolean, itemToSelect: any): void {\n const itemId = itemToSelect[this.context.idProperty];\n\n // Create a new Map so the pipe transform will execute on the next\n // change detection cycle.\n this.selectedIdMap = new Map(this.selectedIdMap);\n\n if (this.context.selectMode === 'single') {\n if (newSelectState) {\n this.selectedIdMap.clear();\n this.selectedIdMap.set(itemId, itemToSelect);\n }\n } else {\n if (newSelectState) {\n this.selectedIdMap.set(itemId, itemToSelect);\n } else {\n this.selectedIdMap.delete(itemId);\n }\n }\n\n this.updateDisplayedItems();\n }\n\n public searchApplied(searchText: string): void {\n this.#offset = 0;\n this.searchText = searchText;\n\n this.#loadSearchResults();\n }\n\n public selectAll(): void {\n this.selectedIdMap = new Map();\n\n for (const item of this.items) {\n this.selectedIdMap.set(item[this.context.idProperty], item);\n }\n\n this.updateDisplayedItems();\n }\n\n public infiniteScrollEnd(): void {\n this.#cancelCurrentSearch();\n\n /* Sanity check - else case would only happen if this was called directly */\n /* istanbul ignore else */\n if (this.hasMoreItems) {\n this.isLoadingMore = true;\n\n this.#performSearch((result) => {\n this.items = this.items.concat(result.items);\n\n this.updateDisplayedItems();\n\n this.isLoadingMore = false;\n });\n }\n }\n\n public save(): void {\n const selectedItems = Array.from(\n this.selectedIdMap.values(),\n (itemData, index) => ({\n index,\n itemData,\n }),\n ).sort((a, b) => {\n return this.items.indexOf(a.itemData) < this.items.indexOf(b.itemData)\n ? -1\n : 1;\n });\n\n this.modalInstance.save(selectedItems);\n }\n\n public updateDisplayedItems(): void {\n const selectedItems = this.items.filter((item) =>\n this.selectedIdMap.has(item[this.context.idProperty]),\n );\n\n if (this.onlyShowSelected) {\n if (!this.searchText) {\n this.displayedItems = Array.from(this.selectedIdMap.values());\n } else {\n this.displayedItems = selectedItems;\n }\n } else {\n this.displayedItems = this.items;\n }\n\n setTimeout(() => {\n this.#announceSelectionState(\n selectedItems.length,\n this.displayedItems.length,\n );\n this.#changeDetector.markForCheck();\n });\n }\n\n #loadSearchResults(): void {\n this.#cancelCurrentSearch();\n\n this.isSearching = true;\n\n this.#performSearch((result) => {\n this.isSearching = false;\n this.items = result.items;\n });\n\n this.#changeDetector.markForCheck();\n }\n\n #createInitialSelectedItemsMap(): void {\n this.selectedIdMap = new Map(\n this.context.initialValue.map((item) => [\n (item as Record<string, unknown>)[this.context.idProperty],\n item,\n ]),\n );\n }\n\n #performSearch(\n processResults: (result: SkySelectionModalSearchResult) => void,\n ): void {\n this.#currentSearchSub = this.context\n .searchAsync({\n displayType: 'modal',\n offset: this.#offset,\n searchText: this.searchText || '',\n continuationData: this.#continuationData,\n })\n .pipe(take(1))\n .subscribe((result) => {\n processResults(result);\n\n this.#continuationData = result.continuationData;\n this.hasMoreItems = result.hasMore || false;\n this.#offset = this.items.length;\n\n this.updateDisplayedItems();\n\n this.#changeDetector.markForCheck();\n });\n }\n\n #cancelCurrentSearch(): void {\n if (this.#currentSearchSub) {\n this.#currentSearchSub.unsubscribe();\n this.#currentSearchSub = undefined;\n this.isLoadingMore = false;\n this.isSearching = false;\n }\n }\n\n #announceSelectionState(\n selectedItemCount: number,\n displayedItemCount: number,\n ): void {\n this.#resourcesSvc\n .getString(\n 'skyux_lookup_show_more_displayed_items_updated',\n selectedItemCount.toString(),\n displayedItemCount.toString(),\n )\n .pipe(take(1))\n .subscribe((resourceString) => {\n this.#liveAnnouncerSvc.announce(resourceString);\n });\n }\n}\n","<sky-modal\n class=\"sky-lookup-show-more-modal\"\n [attr.id]=\"id\"\n [ngClass]=\"'sky-lookup-show-more-modal-' + context.selectMode\"\n>\n <sky-modal-header>\n @if (context.userConfig?.title) {\n {{ context.userConfig.title }}\n } @else {\n {{\n 'skyux_lookup_show_more_modal_title'\n | skyLibResources: context.selectionDescriptor\n }}\n }\n </sky-modal-header>\n <sky-modal-content\n [skyViewkeeper]=\"['.sky-lookup-show-more-toolbar-wrapper']\"\n >\n <sky-wait [isWaiting]=\"isSearching\" />\n <div class=\"sky-lookup-show-more-toolbar-wrapper\">\n <sky-toolbar\n class=\"sky-lookup-show-more-modal-toolbar\"\n [listDescriptor]=\"context.selectionDescriptor\"\n >\n <sky-toolbar-section>\n <sky-toolbar-item>\n <sky-search\n [debounceTime]=\"250\"\n [searchText]=\"searchText\"\n (searchApply)=\"searchApplied($event)\"\n />\n </sky-toolbar-item>\n <sky-toolbar-view-actions>\n @if (context.showAddButton) {\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-add\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_add_button_aria_label'\n | skyLibResources: context.selectionDescriptor\n \"\n (click)=\"addButtonClicked()\"\n >\n <sky-icon iconName=\"add\" />\n {{ 'skyux_lookup_show_more_add' | skyLibResources }}\n </button>\n }\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n @if (context.selectMode === 'multiple') {\n <sky-toolbar class=\"sky-lookup-show-more-modal-multiselect-toolbar\">\n <sky-toolbar-section>\n <sky-toolbar-item>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-select-all-btn\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_select_all_button_aria_label'\n | skyLibResources: context.selectionDescriptor\n \"\n (click)=\"selectAll()\"\n >\n {{\n 'skyux_lookup_show_more_select_all_button_title'\n | skyLibResources\n }}\n </button>\n </sky-toolbar-item>\n <sky-toolbar-item>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-clear-all-btn\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_clear_all_button_aria_label'\n | skyLibResources: context.selectionDescriptor\n \"\n (click)=\"clearAll()\"\n >\n {{\n 'skyux_lookup_show_more_clear_all_button_title'\n | skyLibResources\n }}\n </button>\n </sky-toolbar-item>\n <sky-toolbar-view-actions>\n <sky-checkbox\n [labelText]=\"\n 'skyux_lookup_show_more_show_selected_option_title'\n | skyLibResources: context.selectionDescriptor\n \"\n [(checked)]=\"onlyShowSelected\"\n (change)=\"updateDisplayedItems()\"\n />\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n }\n </div>\n @if (!isSearching && displayedItems.length === 0) {\n <div class=\"sky-font-deemphasized sky-lookup-show-more-no-results\">\n {{ 'skyux_lookup_show_more_no_results' | skyLibResources }}\n </div>\n }\n <sky-repeater\n class=\"sky-lookup-show-more-repeater\"\n expandMode=\"none\"\n [ngClass]=\"{ 'hover-rows': context.selectMode === 'single' }\"\n >\n @for (item of displayedItems; track item) {\n <sky-repeater-item\n #repeaterItem\n [isSelected]=\"\n item[context.idProperty]\n | skySelectionModalItemSelected: selectedIdMap\n \"\n [itemName]=\"item[context.descriptorProperty]\"\n [selectable]=\"context.selectMode === 'multiple'\"\n (click)=\"itemClick(item)\"\n (keyup.enter)=\"itemClick(item)\"\n (isSelectedChange)=\"onItemSelect($event, item)\"\n >\n <sky-repeater-item-content>\n <ng-container\n *ngTemplateOutlet=\"\n repeaterItemTemplate ?? defaultItemTemplate;\n context: {\n item: item,\n checkboxId:\n context.selectMode === 'multiple'\n ? 'sky-checkbox-' +\n repeaterItem.contentId +\n '-item-checkbox-input'\n : undefined\n }\n \"\n />\n </sky-repeater-item-content>\n </sky-repeater-item>\n }\n </sky-repeater>\n <sky-infinite-scroll\n [enabled]=\"hasMoreItems && (!onlyShowSelected || !!searchText)\"\n [loading]=\"isLoadingMore\"\n (scrollEnd)=\"infiniteScrollEnd()\"\n />\n </sky-modal-content>\n <sky-modal-footer>\n <button\n class=\"sky-btn sky-btn-primary sky-lookup-show-more-modal-save\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_select_context'\n | skyLibResources: context.selectionDescriptor\n \"\n [disabled]=\"isSearching\"\n [skyThemeClass]=\"{\n 'sky-theme-margin-right-xs': 'default'\n }\"\n (click)=\"save()\"\n >\n {{ 'skyux_lookup_show_more_select' | skyLibResources }}\n </button>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-close\"\n type=\"button\"\n (click)=\"modalInstance.close()\"\n >\n {{ 'skyux_lookup_show_more_cancel' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n\n<ng-template #defaultItemTemplate let-item=\"item\" let-checkboxId=\"checkboxId\">\n @if (checkboxId) {\n <label class=\"selection-modal-item-label\" [attr.for]=\"checkboxId\">{{\n item[context.descriptorProperty]\n }}</label>\n } @else {\n {{ item[context.descriptorProperty] }}\n }\n</ng-template>\n","import { Observable, Subject } from 'rxjs';\n\nimport { SkySelectionModalCloseArgs } from './selection-modal-close-args';\n\n/**\n * Represents an instance of a selection modal.\n */\nexport class SkySelectionModalInstance {\n /**\n * An event that the selection modal instance emits when it closes.\n * It emits a `SkySelectionModalCloseArgs` object with a `selectedItems` property that includes\n * items selected by users on close or save and a `reason` property that indicates\n * whether the selection modal was saved or closed without saving.\n * The `reason` property accepts `\"cancel\"`, `\"close\"`, and `\"save\"`.\n */\n public get closed(): Observable<SkySelectionModalCloseArgs> {\n return this.#closedObs;\n }\n\n /**\n * @internal\n */\n public get itemAdded(): Observable<unknown> {\n return this.#itemAddedObs;\n }\n\n /**\n * @internal\n */\n public id: string;\n\n #closed = new Subject<SkySelectionModalCloseArgs>();\n #closedObs: Observable<SkySelectionModalCloseArgs>;\n #itemAdded = new Subject<unknown>();\n #itemAddedObs: Observable<unknown>;\n\n constructor(id: string) {\n this.id = id;\n\n this.#closedObs = this.#closed.asObservable();\n this.#itemAddedObs = this.#itemAdded.asObservable();\n }\n\n /**\n * @internal\n */\n public close(args: SkySelectionModalCloseArgs): void {\n this.#closed.next(args);\n this.#closed.complete();\n }\n\n /**\n * @internal\n */\n public addItem(itemToAdd: unknown): void {\n this.#itemAdded.next(itemToAdd);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SkyModalService } from '@skyux/modals';\n\nimport { Observable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteSearchAsyncResult } from '../autocomplete/types/autocomplete-search-async-result';\n\nimport { SkySelectionModalComponent } from './selection-modal.component';\nimport { SkySelectionModalAddClickEventArgs } from './types/selection-modal-add-click-event-args';\nimport { SkySelectionModalCloseArgs } from './types/selection-modal-close-args';\nimport { SkySelectionModalContext } from './types/selection-modal-context';\nimport { SkySelectionModalInstance } from './types/selection-modal-instance';\nimport { SkySelectionModalOpenArgs } from './types/selection-modal-open-args';\n\n/**\n * Displays a modal for selecting one or more values.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkySelectionModalService {\n #modalSvc: SkyModalService;\n\n // eslint-disable-next-line @angular-eslint/prefer-inject -- constructor injection is required to maintain the public API for consumers who may instantiate this service directly (e.g. `new SkySelectionModalService(...)`)\n constructor(modalSvc: SkyModalService) {\n this.#modalSvc = modalSvc;\n }\n\n /**\n * Opens the selection modal.\n * @param args Parameters for the selection modal.\n */\n public open(args: SkySelectionModalOpenArgs): SkySelectionModalInstance {\n const initialValue = args.value;\n\n const context = new SkySelectionModalContext(\n args.descriptorProperty,\n args.idProperty,\n args.initialSearch || '',\n initialValue || [],\n (searchArgs) => {\n return args.searchAsync({\n offset: searchArgs.offset,\n searchText: searchArgs.searchText,\n continuationData: searchArgs.continuationData,\n }) as Observable<SkyAutocompleteSearchAsyncResult>;\n },\n args.selectMode,\n args.selectionDescriptor ||\n (args.selectMode === 'single' ? 'item' : 'items'),\n args.showAddButton || false,\n {\n itemTemplate: args.itemTemplate,\n title: args.title,\n },\n );\n\n const modalInstance = this.#modalSvc.open(SkySelectionModalComponent, {\n providers: [\n {\n provide: SkySelectionModalContext,\n useValue: context,\n },\n ],\n size: 'large',\n wrapperClass: args.wrapperClass,\n });\n\n const instance = new SkySelectionModalInstance(\n modalInstance.componentInstance.id,\n );\n\n instance.itemAdded\n .pipe(takeUntil(modalInstance.closed))\n .subscribe((item) => {\n modalInstance.componentInstance.addItem(item);\n });\n\n modalInstance.closed.subscribe((modalCloseArgs) => {\n let closeArgs: SkySelectionModalCloseArgs;\n\n switch (modalCloseArgs.reason) {\n case 'save':\n closeArgs = {\n reason: 'save',\n selectedItems: modalCloseArgs.data.map(\n (item: { itemData: unknown }) => item.itemData,\n ),\n };\n break;\n case 'cancel':\n closeArgs = { reason: 'cancel' };\n break;\n default:\n closeArgs = { reason: 'close' };\n }\n\n instance.close(closeArgs);\n });\n\n const selectionModal = modalInstance.componentInstance;\n\n selectionModal.addClick\n .pipe(takeUntil(modalInstance.closed))\n .subscribe(() => {\n if (args.addClick) {\n const addArgs: SkySelectionModalAddClickEventArgs = {\n itemAdded(args) {\n selectionModal.addItem(args.item);\n },\n };\n\n args.addClick(addArgs);\n }\n });\n\n return instance;\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyLookupAdapterService {\n public focusInput(elRef: ElementRef): void {\n const inputEl: HTMLElement =\n elRef.nativeElement.querySelector('.sky-lookup-input');\n\n /* Sanity check */\n /* istanbul ignore else */\n if (inputEl) {\n inputEl.focus();\n }\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from '@angular/core';\n\nimport { skyAutocompleteDefaultSearchFunction } from '../autocomplete/autocomplete-default-search-function';\nimport { SkyAutocompleteSearchAsyncArgs } from '../autocomplete/types/autocomplete-search-async-args';\nimport { SkyAutocompleteSearchFunction } from '../autocomplete/types/autocomplete-search-function';\nimport { SkyAutocompleteSearchFunctionFilter } from '../autocomplete/types/autocomplete-search-function-filter';\n\n/**\n * @internal\n */\n@Directive()\nexport class SkyLookupAutocompleteAdapter {\n /**\n * How many milliseconds to wait before searching while users\n * enter text in the lookup field.\n * @default 0\n */\n @Input()\n public debounceTime: number | undefined;\n\n /**\n * The object property to display in the text input after users\n * select an item in the dropdown list.\n * @default \"name\"\n */\n @Input()\n public set descriptorProperty(value: string | undefined) {\n this.#_descriptorProperty = value || 'name';\n }\n\n public get descriptorProperty(): string {\n return this.#_descriptorProperty;\n }\n\n /**\n * The array of object properties to search when utilizing the `data` property and the built-in search function.\n * @default [\"name\"]\n * @deprecated Use the `searchAsync` event emitter and callback instead to provide data to the lookup component.\n */\n @Input()\n public set propertiesToSearch(value: string[] | undefined) {\n this.#_propertiesToSearch = value ?? ['name'];\n\n this.#updateDefaultSearchOptions();\n }\n\n public get propertiesToSearch(): string[] {\n return this.#_propertiesToSearch;\n }\n\n /**\n * The function that dynamically manages the data to display in search results when users\n * change the text in the lookup field. The search function must return\n * an array or a promise of an array. The `search` property is particularly\n * useful when the data source does not live in the source code.\n * @deprecated Use the `searchAsync` event emitter and callback instead to provide searched data to the lookup component.\n */\n @Input()\n public set search(value: SkyAutocompleteSearchFunction | undefined) {\n this.#_search = value;\n this.searchOrDefault =\n value ||\n skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n });\n }\n\n public get search(): SkyAutocompleteSearchFunction | undefined {\n return this.#_search;\n }\n\n /**\n * The template that formats each option in the dropdown list. The lookup component\n * injects values into the template as `item` variables that reference all of the object\n * properties of the search results.\n */\n @Input()\n public searchResultTemplate: TemplateRef<unknown> | undefined;\n\n /**\n * The minimum number of characters that users must enter before\n * the lookup component searches the data source and displays search results\n * in the dropdown list.\n * @default 1\n */\n @Input()\n public searchTextMinimumCharacters: number | undefined;\n\n /**\n * The array of functions to call against each search result in order\n * to filter the search results when using the `data` input and the default search function. When\n * using a custom search function via the `search` property filters must be\n * applied manually inside that function. The function must return `true` or\n * `false` for each result to indicate whether to display it in the dropdown list.\n * @deprecated Use the `searchAsync` event emitter and callback instead to provide searched data to the lookup component.\n */\n @Input()\n public set searchFilters(\n value: SkyAutocompleteSearchFunctionFilter[] | undefined,\n ) {\n this.#_searchFilters = value;\n\n this.#updateDefaultSearchOptions();\n }\n\n public get searchFilters():\n | SkyAutocompleteSearchFunctionFilter[]\n | undefined {\n return this.#_searchFilters;\n }\n\n /**\n * The maximum number of search results to display in the dropdown\n * list. By default, the lookup component displays all matching results.\n * This property has no effect on the results in the \"Show more\" picker.\n */\n @Input()\n public searchResultsLimit: number | undefined;\n\n /**\n * Fires when users enter new search information and allows results to be\n * returned via an observable. The event is also fired\n * when the \"Show more\" picker is opened without search text.\n */\n @Output()\n public searchAsync = new EventEmitter<SkyAutocompleteSearchAsyncArgs>();\n\n public searchOrDefault = skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: ['name'],\n searchFilters: undefined,\n });\n\n #_descriptorProperty = 'name';\n\n #_propertiesToSearch = ['name'];\n\n #_search: SkyAutocompleteSearchFunction | undefined;\n\n #_searchFilters: SkyAutocompleteSearchFunctionFilter[] | undefined;\n\n #updateDefaultSearchOptions(): void {\n // Reset default search if it is what is being used.\n if (this.search !== this.searchOrDefault) {\n this.searchOrDefault = skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n });\n }\n }\n}\n","import { SkyAutocompleteSearchFunction } from '../../autocomplete/types/autocomplete-search-function';\n\nimport { SkyLookupSelectModeType } from './lookup-select-mode-type';\nimport { SkyLookupShowMoreNativePickerConfig } from './lookup-show-more-native-picker-config';\n\n/**\n * @internal\n * Context for the show more native picker. These values are provided by the lookup component.\n */\nexport class SkyLookupShowMoreNativePickerContext {\n public descriptorProperty: string;\n\n public initialSearch: string;\n\n public initialValue: any[];\n\n public items: any[];\n\n public search: SkyAutocompleteSearchFunction;\n\n public selectMode: SkyLookupSelectModeType;\n\n public showAddButton: boolean;\n\n public userConfig: SkyLookupShowMoreNativePickerConfig;\n\n constructor(\n descriptorProperty: string,\n initialSearch: string,\n initialValue: any[],\n items: any[],\n search: SkyAutocompleteSearchFunction,\n selectMode: SkyLookupSelectModeType,\n showAddButton: boolean,\n userConfig: SkyLookupShowMoreNativePickerConfig,\n ) {\n this.descriptorProperty = descriptorProperty;\n this.initialSearch = initialSearch;\n this.initialValue = initialValue;\n this.items = items;\n this.search = search;\n this.selectMode = selectMode;\n this.showAddButton = showAddButton;\n this.userConfig = userConfig;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n TemplateRef,\n inject,\n} from '@angular/core';\nimport {\n SkyIdService,\n SkyLiveAnnouncerService,\n SkyViewkeeperModule,\n} from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyInfiniteScrollModule, SkyRepeaterModule } from '@skyux/lists';\nimport { SkyModalInstance, SkyModalModule } from '@skyux/modals';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { Subject, take } from 'rxjs';\n\nimport { SkySearchModule } from '../search/search.module';\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkyLookupShowMoreNativePickerContext } from './types/lookup-show-more-native-picker-context';\n\n/**\n * @internal\n * Internal component to implement the native picker.\n */\n@Component({\n selector: 'sky-lookup-show-more-modal',\n templateUrl: './lookup-show-more-modal.component.html',\n styleUrls: ['./lookup-show-more-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyCheckboxModule,\n SkyIconModule,\n SkyInfiniteScrollModule,\n SkyLookupResourcesModule,\n SkyModalModule,\n SkyRepeaterModule,\n SkySearchModule,\n SkyThemeModule,\n SkyToolbarModule,\n SkyViewkeeperModule,\n ],\n})\nexport class SkyLookupShowMoreModalComponent\n implements AfterViewInit, OnDestroy\n{\n /**\n * @internal\n * Fires when users select the button to add new options to the list.\n */\n public addClick = new Subject<void>();\n\n /**\n * Used to associate this modal with its owning lookup component.\n */\n public id: string;\n\n public items: any[] = [];\n\n public itemsLoading = false;\n\n public dataManagerConfig = {\n sortOptions: [\n {\n id: 'az',\n label: 'Alphabetical (A - Z)',\n descending: false,\n propertyName: 'name',\n },\n {\n id: 'za',\n label: 'Alphabetical (Z - A)',\n descending: true,\n propertyName: 'name',\n },\n ],\n };\n\n public displayedItems: any[] = [];\n\n public itemsHaveMore = false;\n\n public onlyShowSelected = false;\n\n public repeaterItemTemplate: TemplateRef<unknown> | null = null;\n\n public searchText = '';\n\n public selectedItems: { index: number; itemData: any }[] = [];\n\n #itemIndex = 0;\n #ngUnsubscribe = new Subject<void>();\n\n protected readonly modalInstance = inject(SkyModalInstance);\n protected readonly context = inject(SkyLookupShowMoreNativePickerContext);\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #idSvc = inject(SkyIdService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n\n constructor() {\n this.id = this.#idSvc.generateId();\n }\n\n public ngAfterViewInit(): void {\n this.repeaterItemTemplate = this.context.userConfig.itemTemplate || null;\n this.searchText = this.context.initialSearch;\n void this.addItems();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public addButtonClicked(): void {\n this.addClick.next();\n }\n\n public async addItems(): Promise<void> {\n this.itemsLoading = true;\n if (!this.items || this.items.length === 0) {\n const selectedItems: any[] = this.selectedItems.slice();\n\n this.items = this.context.items.map((item) => {\n return {\n value: item,\n selected: false,\n };\n });\n\n this.items.forEach((item) => {\n const isInitialValue: boolean =\n this.context.initialValue === item.value;\n\n const initialIsArray: boolean = Array.isArray(\n this.context.initialValue,\n );\n const initialValueContainsItem: boolean =\n this.context.initialValue.findIndex(\n (initialItem: any) => initialItem === item.value,\n ) >= 0;\n\n if (isInitialValue || (initialIsArray && initialValueContainsItem)) {\n item.selected = true;\n const itemIndex = this.items.indexOf(item);\n if (\n selectedItems.findIndex(\n (selectedItem) => selectedItem.index === itemIndex,\n ) < 0\n ) {\n selectedItems.push({ index: itemIndex, itemData: item.value });\n }\n }\n });\n\n this.selectedItems = selectedItems;\n await this.updateDataState();\n this.#changeDetector.markForCheck();\n }\n\n // if onlyShowSelected is checked, then only iterate through the initial selection\n const items = this.onlyShowSelected\n ? this.items.filter((item) => item.selected)\n : this.items;\n\n this.#itemIndex = this.#itemIndex + 10;\n\n const searchedItems = await this.searchItems(items);\n\n this.displayedItems = searchedItems.slice(0, this.#itemIndex);\n\n if (this.#itemIndex > searchedItems.length) {\n this.itemsHaveMore = false;\n } else {\n this.itemsHaveMore = true;\n }\n this.itemsLoading = false;\n\n this.#announceSelectionState(\n this.selectedItems.length,\n this.displayedItems.length,\n );\n\n this.#changeDetector.markForCheck();\n }\n\n public async clearAll(): Promise<void> {\n this.displayedItems.forEach((item) => {\n if (item.selected) {\n item.selected = false;\n }\n });\n this.selectedItems = [];\n await this.updateDataState();\n this.#changeDetector.markForCheck();\n }\n\n public itemClick(selectedItem: any): void {\n if (this.context.selectMode === 'single') {\n void this.onItemSelect(!selectedItem.selected, selectedItem);\n }\n }\n\n public onItemSelect(newSelectState: boolean, itemToSelect: any): void {\n const items = this.items;\n\n if (this.context.selectMode === 'single') {\n /* Sanity check - single select mode should only alow for a `true` select state */\n /* istanbul ignore else */\n if (newSelectState) {\n itemToSelect.selected = true;\n items.forEach((item) => {\n if (item.value !== itemToSelect.value) {\n item.selected = false;\n }\n });\n this.displayedItems.forEach((item) => {\n if (item.value !== itemToSelect.value) {\n item.selected = false;\n }\n });\n const itemIndex = items.findIndex(\n (item) => item.value === itemToSelect.value,\n );\n this.selectedItems = [\n { index: itemIndex, itemData: items[itemIndex].value },\n ];\n }\n } else {\n const selectedItems: { index: number; itemData: any }[] =\n this.selectedItems;\n const allItemsIndex = items.findIndex(\n (item) => item.value === itemToSelect.value,\n );\n const selectedItemsIndex = selectedItems.findIndex(\n (selectedItem) => selectedItem.index === allItemsIndex,\n );\n\n if (newSelectState && selectedItemsIndex === -1) {\n selectedItems.push({\n index: allItemsIndex,\n itemData: items[allItemsIndex].value,\n });\n } else if (!newSelectState && selectedItemsIndex !== -1) {\n selectedItems.splice(selectedItemsIndex, 1);\n }\n\n this.selectedItems = selectedItems;\n }\n\n void this.updateDataState();\n this.#changeDetector.markForCheck();\n }\n\n public searchApplied(searchText: string): void {\n /* istanbul ignore else */\n if (this.searchText !== searchText) {\n this.#itemIndex = 10;\n this.modalInstance.scrollContentToTop();\n }\n this.searchText = searchText;\n this.itemsLoading = true;\n this.#changeDetector.detectChanges();\n\n // We need to ensure that the scroll event makes it all the way through the infinite scroll workflow before updating the data state.\n // Without this, the infinite scroll can add items improperly because it can see the above scroll after the items finish searching.\n setTimeout(() => {\n void this.updateDataState();\n }, 100);\n }\n\n public searchItems(items: any[]): Promise<any[]> {\n const searchText = this.searchText;\n\n if (searchText) {\n const resultValues = this.context.search(\n searchText,\n items.map((item) => {\n return item.value;\n }),\n { context: 'modal' },\n );\n\n if (resultValues instanceof Array) {\n const result = items.filter(\n (item) => resultValues.indexOf(item.value) >= 0,\n );\n return Promise.resolve(result);\n } else {\n return resultValues.then((values) => {\n const result = items.filter(\n (item) => values.indexOf(item.value) >= 0,\n );\n return Promise.resolve(result);\n });\n }\n } else {\n return Promise.resolve(items);\n }\n }\n\n public async selectAll(): Promise<void> {\n const items = this.items;\n\n const selectedItems: { index: number; itemData: any }[] =\n this.selectedItems;\n\n this.displayedItems.forEach((item: any) => {\n if (!item.selected) {\n item.selected = true;\n\n const index = items.indexOf(item);\n\n /* istanbul ignore else */\n if (\n selectedItems.findIndex(\n (selectedItem) => selectedItem.index === index,\n ) < 0\n ) {\n selectedItems.push({\n index: index,\n itemData: items[index].value,\n });\n }\n }\n });\n\n this.selectedItems = selectedItems;\n await this.updateDataState();\n this.#changeDetector.markForCheck();\n }\n\n public async updateDataState(): Promise<void> {\n const items = this.items;\n\n const selectedItems: { index: number; itemData: any }[] =\n this.selectedItems;\n\n items?.forEach((item: any, index: number) => {\n item.selected =\n selectedItems.findIndex(\n (selectedItem) => selectedItem.index === index,\n ) !== -1;\n });\n\n let searchedItems = await this.searchItems(items);\n\n if (this.onlyShowSelected) {\n searchedItems = searchedItems.filter((item) => item.selected);\n }\n\n this.displayedItems = searchedItems.slice(0, this.#itemIndex);\n\n if (this.#itemIndex > searchedItems.length) {\n this.itemsHaveMore = false;\n } else {\n this.itemsHaveMore = true;\n }\n this.itemsLoading = false;\n\n this.#announceSelectionState(\n selectedItems.length,\n this.displayedItems.length,\n );\n\n this.#changeDetector.markForCheck();\n }\n\n public async updateItemData(data: any[]): Promise<void> {\n this.context.items = data;\n this.items = [];\n this.#itemIndex = 10;\n this.selectedItems.forEach((selectedItem) => {\n this.context.items.forEach((item: any, index: number) => {\n if (selectedItem.itemData === item) {\n selectedItem.index = index;\n }\n });\n });\n\n await this.addItems();\n\n this.#changeDetector.markForCheck();\n }\n\n #announceSelectionState(\n selectedItemCount: number,\n displayedItemCount: number,\n ): void {\n this.#resourcesSvc\n .getString(\n 'skyux_lookup_show_more_displayed_items_updated',\n selectedItemCount.toString(),\n displayedItemCount.toString(),\n )\n .pipe(take(1))\n .subscribe((resourcesString) => {\n this.#liveAnnouncerSvc.announce(resourcesString);\n });\n }\n}\n","<sky-modal\n class=\"sky-lookup-show-more-modal\"\n [attr.id]=\"id\"\n [ngClass]=\"'sky-lookup-show-more-modal-' + context.selectMode\"\n>\n <sky-modal-header>\n @if (context.userConfig?.title) {\n {{ context.userConfig.title }}\n } @else {\n {{\n 'skyux_lookup_show_more_modal_title'\n | skyLibResources: context.userConfig.selectionDescriptor\n }}\n }\n </sky-modal-header>\n <sky-modal-content\n [skyViewkeeper]=\"['.sky-lookup-show-more-toolbar-wrapper']\"\n >\n <div class=\"sky-lookup-show-more-toolbar-wrapper\">\n <sky-toolbar\n class=\"sky-lookup-show-more-modal-toolbar\"\n [listDescriptor]=\"context.userConfig.selectionDescriptor\"\n >\n <sky-toolbar-section>\n <sky-toolbar-item>\n <sky-search\n [debounceTime]=\"250\"\n [searchText]=\"searchText\"\n (searchApply)=\"searchApplied($event)\"\n />\n </sky-toolbar-item>\n <sky-toolbar-view-actions>\n @if (context.showAddButton) {\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-add\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_add_button_aria_label'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n (click)=\"addButtonClicked()\"\n >\n <sky-icon iconName=\"add\" />\n {{ 'skyux_lookup_show_more_add' | skyLibResources }}\n </button>\n }\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n @if (context.selectMode === 'multiple') {\n <sky-toolbar class=\"sky-lookup-show-more-modal-multiselect-toolbar\">\n <sky-toolbar-section>\n <sky-toolbar-item>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-select-all-btn\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_select_all_button_aria_label'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n (click)=\"selectAll()\"\n >\n {{\n 'skyux_lookup_show_more_select_all_button_title'\n | skyLibResources\n }}\n </button>\n </sky-toolbar-item>\n <sky-toolbar-item>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-clear-all-btn\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_clear_all_button_aria_label'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n (click)=\"clearAll()\"\n >\n {{\n 'skyux_lookup_show_more_clear_all_button_title'\n | skyLibResources\n }}\n </button>\n </sky-toolbar-item>\n <sky-toolbar-view-actions>\n <sky-checkbox\n [labelText]=\"\n 'skyux_lookup_show_more_show_selected_option_title'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n [(checked)]=\"onlyShowSelected\"\n (change)=\"updateDataState()\"\n />\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n }\n </div>\n @if (displayedItems.length === 0) {\n <div class=\"sky-font-deemphasized sky-lookup-show-more-no-results\">\n {{ 'skyux_lookup_show_more_no_results' | skyLibResources }}\n </div>\n }\n <sky-repeater class=\"sky-lookup-show-more-repeater\" expandMode=\"none\">\n @for (item of displayedItems; track item) {\n <sky-repeater-item\n #repeaterItem\n [selectable]=\"context.selectMode === 'multiple'\"\n [(isSelected)]=\"item.selected\"\n (click)=\"itemClick(item)\"\n (keyup.enter)=\"itemClick(item)\"\n (isSelectedChange)=\"onItemSelect($event, item)\"\n >\n <sky-repeater-item-content>\n <ng-container\n *ngTemplateOutlet=\"\n repeaterItemTemplate ?? defaultItemTemplate;\n context: {\n item: item.value,\n checkboxId:\n context.selectMode === 'multiple'\n ? 'sky-checkbox-' +\n repeaterItem.contentId +\n '-item-checkbox-input'\n : undefined\n }\n \"\n />\n </sky-repeater-item-content>\n </sky-repeater-item>\n }\n </sky-repeater>\n <sky-infinite-scroll\n [enabled]=\"itemsHaveMore\"\n [loading]=\"itemsLoading\"\n (scrollEnd)=\"addItems()\"\n />\n </sky-modal-content>\n <sky-modal-footer>\n <button\n class=\"sky-btn sky-btn-primary sky-lookup-show-more-modal-save\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_lookup_show_more_select_context'\n | skyLibResources: context.userConfig.selectionDescriptor\n \"\n [skyThemeClass]=\"{\n 'sky-theme-margin-right-xs': 'default'\n }\"\n (click)=\"modalInstance.save(selectedItems)\"\n >\n {{ 'skyux_lookup_show_more_select' | skyLibResources }}\n </button>\n <button\n class=\"sky-btn sky-btn-link sky-lookup-show-more-modal-close\"\n type=\"button\"\n (click)=\"modalInstance.close()\"\n >\n {{ 'skyux_lookup_show_more_cancel' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n\n<ng-template #defaultItemTemplate let-item=\"item\" let-checkboxId=\"checkboxId\">\n @if (checkboxId) {\n <label class=\"selection-modal-item-label\" [attr.for]=\"checkboxId\">{{\n item[context.descriptorProperty]\n }}</label>\n } @else {\n {{ item[context.descriptorProperty] }}\n }\n</ng-template>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { SkyAppWindowRef, SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport {\n SkyToken,\n SkyTokensMessage,\n SkyTokensMessageType,\n} from '@skyux/indicators';\nimport { SkyModalInstance, SkyModalService } from '@skyux/modals';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { Observable, Subject, fromEvent as observableFromEvent } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteInputDirective } from '../autocomplete/autocomplete-input.directive';\nimport { SkyAutocompleteMessage } from '../autocomplete/types/autocomplete-message';\nimport { SkyAutocompleteMessageType } from '../autocomplete/types/autocomplete-message-type';\nimport { SkyAutocompleteSearchAsyncArgs } from '../autocomplete/types/autocomplete-search-async-args';\nimport { SkyAutocompleteSelectionChange } from '../autocomplete/types/autocomplete-selection-change';\nimport { SkyAutocompleteShowMoreArgs } from '../autocomplete/types/autocomplete-show-more-args';\nimport { SkySelectionModalService } from '../selection-modal/selection-modal.service';\nimport { SkySelectionModalInstance } from '../selection-modal/types/selection-modal-instance';\n\nimport { SkyLookupAdapterService } from './lookup-adapter.service';\nimport { SkyLookupAutocompleteAdapter } from './lookup-autocomplete-adapter';\nimport { SkyLookupShowMoreModalComponent } from './lookup-show-more-modal.component';\nimport { SkyLookupAddCallbackArgs } from './types/lookup-add-click-callback-args';\nimport { SkyLookupAddClickEventArgs } from './types/lookup-add-click-event-args';\nimport { SkyLookupSelectModeType } from './types/lookup-select-mode-type';\nimport { SkyLookupShowMoreConfig } from './types/lookup-show-more-config';\nimport { SkyLookupShowMoreNativePickerContext } from './types/lookup-show-more-native-picker-context';\n\n@Component({\n selector: 'sky-lookup',\n templateUrl: './lookup.component.html',\n styleUrls: ['./lookup.component.scss'],\n providers: [SkyLookupAdapterService],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyLookupComponent\n extends SkyLookupAutocompleteAdapter\n implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor\n{\n /**\n * The ARIA label for the typeahead search input. This sets the input's `aria-label` attribute to provide a text equivalent for\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the input includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @deprecated Use the input box `labelText` input instead.\n */\n @Input()\n public ariaLabel: string | undefined;\n\n /**\n * The HTML element ID of the element that labels\n * the typeahead search input. This sets the input's `aria-labelledby` attribute to provide a text equivalent for\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the input does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n * @deprecated Use the input box `labelText` input instead.\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n\n /**\n * The value to provide to the `autocomplete` attribute on the form input.\n * @default 'off'\n * @deprecated SKY UX only supports browser autofill on components where the direct input matches the return value. This input may not behave as expected due to the dropdown selection interaction.\n */\n @Input()\n public autocompleteAttribute: string | undefined;\n\n /**\n * The data source for the lookup component to search when users\n * enter text. You can specify static data, such as an array of objects, or\n * you can pull data from a database.\n *\n * @default []\n * @deprecated Use the `searchAsync` event emitter and callback instead to provide data to the lookup component.\n */\n @Input()\n public set data(value: any[] | undefined) {\n this.#_data = value;\n\n if (this.#openNativePicker && !this.#hasSearchAsync()) {\n this.#openNativePicker.componentInstance.updateItemData(value);\n }\n }\n\n public get data(): any[] {\n return this.#_data || [];\n }\n\n /**\n * Whether to disable the lookup field on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public disabled = false;\n\n /**\n * Whether the lookup field is required.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set required(value: boolean) {\n this.#_required = value;\n this.inputBoxHostSvc?.setRequired(value);\n }\n\n public get required(): boolean {\n return this.#_required;\n }\n\n /**\n * Whether to enable users to open a picker where they can view all options.\n * @default false\n */\n public readonly enableShowMore = input(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Placeholder text to display in the lookup field.\n */\n @Input()\n public placeholderText: string | undefined;\n\n /**\n * The object property that represents the object's unique identifier.\n * Specifying this property enables token animations and more efficient rendering.\n * This property is required when using `enableShowMore` and `searchAsync` together.\n */\n @Input()\n public idProperty: string | undefined;\n\n /**\n * Whether to display a button that lets users add options to the list.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public showAddButton = false;\n\n /**\n * Configuration options for the picker that displays all options.\n */\n @Input()\n public showMoreConfig: SkyLookupShowMoreConfig | undefined;\n\n /**\n * The ability for users to select one option or multiple options.\n * @default \"multiple\"\n */\n @Input()\n public set selectMode(value: SkyLookupSelectModeType | undefined) {\n const multipleToSingle: boolean =\n value === 'single' && this.selectMode === 'multiple';\n\n this.#_selectMode = value;\n this.#updateForSelectMode();\n\n if (multipleToSingle) {\n const value = this.#getValue();\n\n if (value?.length > 1) {\n // The `setTimeout` is needed to avoid a `ExpressionChangedAfterItHasBeenCheckedError` error in template forms.\n setTimeout(() => {\n this.#setValue([value[0]], { emitEvent: true });\n this.#changeDetector.detectChanges();\n });\n }\n }\n }\n\n public get selectMode(): SkyLookupSelectModeType {\n return this.#_selectMode || 'multiple';\n }\n\n /**\n * @internal\n */\n @Input()\n public wrapperClass: string | undefined;\n\n /**\n * Fires when users select the button to add options to the list.\n */\n @Output()\n public addClick = new EventEmitter<SkyLookupAddClickEventArgs>();\n\n /**\n * @internal\n */\n @Output()\n public openChange = new EventEmitter<boolean>();\n\n /**\n * @internal\n */\n @Output()\n public selectionModalOpenChange = new EventEmitter<boolean>();\n\n public get tokens(): SkyToken[] | undefined {\n return this.#_tokens;\n }\n\n public set tokens(tokens: SkyToken[] | undefined) {\n const value = this.#getValue();\n\n // Collapse the tokens into a single token if the user has selected many options.\n if (this.enableShowMore() && value.length > 5) {\n this.#resourcesService\n .getString('skyux_lookup_tokens_summary', value.length.toString())\n .pipe(take(1))\n .subscribe((label) => {\n this.#_tokens = [\n {\n value: { [this.descriptorProperty]: label },\n },\n ];\n this.#changeDetector.markForCheck();\n });\n } else {\n this.#_tokens = tokens;\n this.#changeDetector.markForCheck();\n }\n }\n\n /**\n * @internal\n * @deprecated This is exposed for unit tests only; refactor unit tests to\n * derive the control value a different way.\n */\n public get value(): any[] {\n return this.#getValue();\n }\n\n public autocompleteController = new Subject<SkyAutocompleteMessage>();\n public isInputFocused = false;\n public showMorePickerId: string | undefined;\n public tokensController = new Subject<SkyTokensMessage>();\n protected controlId: string | undefined;\n protected ariaDescribedBy: Observable<string | undefined> | undefined;\n\n @ViewChild(SkyAutocompleteInputDirective, {\n read: SkyAutocompleteInputDirective,\n static: false,\n })\n public set autocompleteInputDirective(\n value: SkyAutocompleteInputDirective | undefined,\n ) {\n this.#_autocompleteInputDirective = value;\n this.#updateForSelectMode();\n }\n\n public get autocompleteInputDirective():\n | SkyAutocompleteInputDirective\n | undefined {\n return this.#_autocompleteInputDirective;\n }\n\n @ViewChild('showMoreButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public showMoreButtonTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n @ViewChild('lookupWrapper', {\n read: ElementRef,\n })\n public lookupWrapperRef: ElementRef | undefined;\n\n #idle = new Subject<void>();\n #markForTokenFocusOnKeyUp = false;\n #ngUnsubscribe = new Subject<void>();\n #notifyChange: ((value: any[]) => void) | undefined;\n #notifyTouched: (() => void) | undefined;\n #openNativePicker: SkyModalInstance | undefined;\n #openSelectionModal: SkySelectionModalInstance | undefined;\n #_required = false;\n\n #_autocompleteInputDirective: SkyAutocompleteInputDirective | undefined;\n #_data: any[] | undefined;\n #_selectMode: SkyLookupSelectModeType | undefined;\n #_tokens: SkyToken[] | undefined;\n #_value: any[] | undefined;\n\n readonly #adapter = inject(SkyLookupAdapterService);\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #elementRef = inject(ElementRef);\n readonly #idService = inject(SkyIdService);\n readonly #logSvc = inject(SkyLogService);\n readonly #modalService = inject(SkyModalService);\n readonly #resourcesService = inject(SkyLibResourcesService);\n readonly #selectionModalSvc = inject(SkySelectionModalService);\n readonly #windowRef = inject(SkyAppWindowRef);\n\n public readonly inputBoxHostSvc = inject(SkyInputBoxHostService, {\n optional: true,\n });\n\n public readonly themeSvc = inject(SkyThemeService, { optional: true });\n\n #getValue(): any[] {\n return this.#_value ? this.#_value : [];\n }\n\n #setValue(newValue: any[], options: { emitEvent: boolean }): void {\n this.#_value = newValue;\n\n if (this.selectMode === 'multiple' && !this.#pickerModalOpen()) {\n this.tokens = this.#parseTokens(newValue);\n }\n\n if (options.emitEvent) {\n this.#notifyChange?.(this.#_value);\n }\n\n this.#updateForSelectMode();\n }\n\n constructor() {\n super();\n\n const ngControl = inject(NgControl, { optional: true, self: true });\n\n if (ngControl) {\n ngControl.valueAccessor = this;\n }\n\n effect(() => {\n this.enableShowMore();\n this.#populateInputBox();\n });\n }\n\n public ngOnInit(): void {\n if (this.inputBoxHostSvc && this.inputTemplateRef) {\n this.controlId = this.inputBoxHostSvc.controlId;\n this.ariaDescribedBy = this.inputBoxHostSvc.ariaDescribedBy;\n\n this.#populateInputBox();\n\n this.inputBoxHostSvc?.setRequired(this.required);\n } else {\n this.controlId = this.#idService.generateId();\n }\n\n /* istanbul ignore else */\n if (this.themeSvc) {\n // This is required for the autocomplete directive to be set after elements\n // are rearranged when switching themes.\n this.themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngAfterViewInit(): void {\n if (!this.disabled) {\n this.#addEventListeners();\n }\n }\n\n public ngOnDestroy(): void {\n this.#removeEventListeners();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.addClick.complete();\n this.openChange.complete();\n this.tokensController.complete();\n }\n\n public addButtonClicked(): void {\n this.addClick.emit({\n itemAdded: (args: SkyLookupAddCallbackArgs) =>\n this.#onAddButtonComplete(args),\n });\n }\n\n public onAutocompleteSelectionChange(\n change: SkyAutocompleteSelectionChange,\n ): void {\n if (change.selectedItem) {\n this.#addToSelected(change.selectedItem);\n } else {\n this.#setValue([], { emitEvent: true });\n }\n }\n\n public onAutocompleteBlur(): void {\n this.#notifyTouched?.();\n }\n\n public onTokensChange(change: SkyToken[]): void {\n if (!change) {\n return;\n }\n\n if (this.tokens !== change) {\n if (change.length === 0) {\n this.#focusInput();\n }\n\n this.tokens = change;\n const value = change.map((token) => {\n return token.value;\n });\n\n this.#setValue(value, { emitEvent: true });\n }\n }\n\n protected onTokenSelected(): void {\n if (this.enableShowMore()) {\n this.openPicker('');\n }\n }\n\n public onTokensFocusIndexOverRange(): void {\n this.#windowRef.nativeWindow.setTimeout(() => {\n this.#focusInput();\n });\n }\n\n public onTokensKeyUp(event: KeyboardEvent): void {\n /* istanbul ignore else */\n if (this.selectMode !== 'single') {\n switch (event.key) {\n case 'Backspace':\n this.#sendTokensMessage(SkyTokensMessageType.RemoveActiveToken);\n this.#sendTokensMessage(SkyTokensMessageType.FocusPreviousToken);\n event.preventDefault();\n break;\n\n case 'Del':\n case 'Delete':\n this.#sendTokensMessage(SkyTokensMessageType.RemoveActiveToken);\n this.#windowRef.nativeWindow.setTimeout(() => {\n this.#sendTokensMessage(SkyTokensMessageType.FocusActiveToken);\n });\n event.preventDefault();\n break;\n }\n }\n }\n\n public onTokensRendered(): void {\n this.#sendAutocompleteMessage(\n SkyAutocompleteMessageType.RepositionDropdown,\n );\n }\n\n public writeValue(value: any[]): void {\n // Since we are dealing with arrays - clone the array being sent in to ensure we aren't modifying a consumers outer array\n this.#setValue(value ? value.slice() : [], { emitEvent: false });\n }\n\n public registerOnChange(fn: (value: any[]) => void): void {\n this.#notifyChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n // Allows Angular to disable the input.\n public setDisabledState(disabled: boolean): void {\n this.#removeEventListeners();\n\n if (!disabled) {\n this.#addEventListeners();\n }\n\n this.disabled = disabled;\n this.#changeDetector.markForCheck();\n }\n\n public clearSearchText(): void {\n if (this.autocompleteInputDirective) {\n this.autocompleteInputDirective.value = undefined;\n this.autocompleteInputDirective.inputTextValue = '';\n }\n }\n\n // Handles when to focus on the tokens.\n // Check for empty search text on keydown, before the escape key is fully pressed.\n // (Otherwise, a single character being escaped would register as empty on keyup.)\n // If empty on keydown, set a flag so that the appropriate action can be taken on keyup.\n public inputKeydown(event: KeyboardEvent): void {\n const value = (event.target as HTMLTextAreaElement).value;\n\n /* Sanity check as this should only be called when in multiple select mode */\n /* istanbul ignore else */\n if (this.selectMode !== 'single') {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n break;\n case 'ArrowLeft':\n case 'Backspace':\n case 'Left':\n if (value) {\n this.#markForTokenFocusOnKeyUp = false;\n } else {\n this.#markForTokenFocusOnKeyUp = true;\n }\n break;\n default:\n }\n }\n }\n\n public inputKeyup(event: KeyboardEvent): void {\n /* Sanity check as this should only be called when in multiple select mode */\n /* istanbul ignore else */\n if (this.selectMode !== 'single') {\n switch (event.key) {\n case 'Esc':\n case 'Escape':\n this.clearSearchText();\n event.preventDefault();\n break;\n case 'ArrowLeft':\n case 'Backspace':\n case 'Left':\n /* istanbul ignore else */\n if (this.#markForTokenFocusOnKeyUp) {\n this.#sendTokensMessage(SkyTokensMessageType.FocusLastToken);\n event.preventDefault();\n }\n break;\n default:\n }\n\n event.stopPropagation();\n }\n }\n\n public onSearchButtonClick(): void {\n /*istanbul ignore next*/\n if (this.disabled) {\n return;\n }\n this.#sendAutocompleteMessage(SkyAutocompleteMessageType.CloseDropdown);\n let isValueInTextBox = false;\n if (this.selectMode === 'single') {\n isValueInTextBox =\n this.autocompleteInputDirective?.value &&\n this.autocompleteInputDirective.inputTextValue ===\n this.autocompleteInputDirective.value[this.descriptorProperty];\n }\n\n let searchValue = '';\n\n if (!isValueInTextBox && this.autocompleteInputDirective) {\n searchValue = this.autocompleteInputDirective.inputTextValue;\n }\n\n this.openPicker(searchValue);\n this.autocompleteInputDirective?.restoreInputTextValueToPreviousState();\n }\n\n public onShowMoreClick(event: SkyAutocompleteShowMoreArgs): void {\n /* Sanity check */\n /* istanbul ignore else*/\n if (event) {\n this.openPicker(event.inputValue);\n }\n }\n\n public openPicker(initialSearch: string): void {\n if (this.showMoreConfig?.customPicker) {\n this.showMorePickerId = undefined;\n\n this.showMoreConfig.customPicker.open({\n items: this.data,\n initialSearch,\n initialValue: this.#getValue(),\n });\n } else {\n const initialValue = this.#getValue();\n this.selectionModalOpenChange.emit(true);\n\n if (this.#hasSearchAsync()) {\n this.#openSelectionModal =\n this.#createSelectionModalInstance(initialSearch);\n\n this.showMorePickerId = this.#openSelectionModal.id;\n\n this.#openSelectionModal.closed.subscribe((closeArgs) => {\n this.#processPickerResult(\n closeArgs.reason === 'save'\n ? closeArgs.selectedItems\n : initialValue,\n );\n this.selectionModalOpenChange.emit(false);\n });\n } else {\n this.#openNativePicker =\n this.#createNativePickerInstance(initialSearch);\n\n this.showMorePickerId = this.#openNativePicker.componentInstance.id;\n\n this.#openNativePicker.componentInstance.addClick.subscribe(() => {\n this.addButtonClicked();\n });\n\n this.#openNativePicker.closed.subscribe((closeArgs) => {\n let selectedItems: any[];\n\n if (closeArgs.reason === 'save') {\n selectedItems = [];\n\n this.data.forEach((item: any, dataIndex: number) => {\n if (\n closeArgs.data.some((savedItem: any) => {\n return savedItem.index === dataIndex;\n })\n ) {\n selectedItems.push(item);\n }\n });\n } else {\n selectedItems = initialValue;\n }\n\n this.#processPickerResult(selectedItems);\n this.selectionModalOpenChange.emit(false);\n });\n\n this.#changeDetector.markForCheck();\n }\n }\n }\n\n protected onAutocompleteOpenChange($event: boolean): void {\n if ($event) {\n this.openChange.emit(true);\n } else if (!this.#pickerModalOpen()) {\n this.openChange.emit(false);\n }\n }\n\n protected onFocus($event: FocusEvent): void {\n ($event.target as HTMLTextAreaElement).select();\n }\n\n #createSelectionModalInstance(\n initialSearch: string,\n ): SkySelectionModalInstance {\n const initialValue = this.#getValue();\n const modalConfig = this.showMoreConfig?.nativePickerConfig || {};\n\n if (!modalConfig.itemTemplate) {\n modalConfig.itemTemplate = this.searchResultTemplate;\n }\n\n if (this.idProperty === undefined) {\n this.#logSvc.error(\n \"The lookup component's 'idProperty' input is required when `enableShowMore` and 'searchAsync' are used together.\",\n );\n }\n\n return this.#selectionModalSvc.open({\n descriptorProperty: this.descriptorProperty,\n idProperty: this.idProperty!,\n searchAsync: (args) => {\n const searchAsyncArgs: SkyAutocompleteSearchAsyncArgs = {\n displayType: 'modal',\n offset: args.offset,\n searchText: args.searchText,\n continuationData: args.continuationData,\n };\n\n this.searchAsync.emit(searchAsyncArgs);\n\n return searchAsyncArgs.result;\n },\n selectMode: this.selectMode,\n addClick: () => {\n this.addButtonClicked();\n },\n initialSearch,\n itemTemplate: modalConfig.itemTemplate,\n selectionDescriptor: modalConfig.selectionDescriptor,\n showAddButton: this.showAddButton,\n title: modalConfig.title,\n value: initialValue,\n wrapperClass: this.wrapperClass,\n });\n }\n\n #createNativePickerInstance(initialSearch: string): SkyModalInstance {\n const initialValue = this.#getValue();\n const modalConfig = this.showMoreConfig?.nativePickerConfig || {};\n\n if (!modalConfig.itemTemplate) {\n modalConfig.itemTemplate = this.searchResultTemplate;\n }\n\n if (!modalConfig.selectionDescriptor) {\n modalConfig.selectionDescriptor =\n this.selectMode === 'single' ? 'item' : 'items';\n }\n\n const contextProviderValue = new SkyLookupShowMoreNativePickerContext(\n this.descriptorProperty,\n initialSearch,\n initialValue,\n this.data,\n this.searchOrDefault,\n this.selectMode,\n this.showAddButton,\n modalConfig,\n );\n\n return this.#modalService.open(SkyLookupShowMoreModalComponent, {\n providers: [\n {\n provide: SkyLookupShowMoreNativePickerContext,\n useValue: contextProviderValue,\n },\n {\n provide: SkyLookupAdapterService,\n useValue: this.#adapter,\n },\n ],\n size: 'large',\n wrapperClass: this.wrapperClass,\n });\n }\n\n #processPickerResult(selectedItems: any[] | undefined): void {\n this.#openSelectionModal = undefined;\n this.#openNativePicker = undefined;\n this.showMorePickerId = undefined;\n\n /* istanbul ignore next */\n selectedItems = selectedItems || [];\n\n this.#setValue(selectedItems, { emitEvent: true });\n this.#focusInput();\n this.#changeDetector.markForCheck();\n }\n\n public onSearchAsync(args: SkyAutocompleteSearchAsyncArgs): void {\n this.searchAsync.emit(args);\n }\n\n #addToSelected(item: any): void {\n const value = this.#getValue();\n\n let selectedItems: any[];\n\n if (this.selectMode === 'single') {\n selectedItems = [item];\n } else {\n selectedItems = value;\n\n const idProperty = this.idProperty || '';\n\n // If items have a unique identifier, don't allow the same item to be added twice.\n if (\n !this.idProperty ||\n !value.some(\n (existingItem) => existingItem[idProperty] === item[idProperty],\n )\n ) {\n selectedItems.push(item);\n }\n\n this.clearSearchText();\n }\n\n this.#setValue(selectedItems, { emitEvent: true });\n }\n\n #addEventListeners(): void {\n this.#idle = new Subject();\n this.#focusInputOnHostClick();\n }\n\n #removeEventListeners(): void {\n this.#idle.next();\n this.#idle.complete();\n }\n\n #focusInputOnHostClick(): void {\n let hostElement = !this.inputBoxHostSvc\n ? this.#elementRef.nativeElement\n : this.lookupWrapperRef?.nativeElement;\n const documentObj = this.#windowRef.nativeWindow.document;\n\n // Handles focusing the input when the host is clicked.\n // The input should NOT be focused if other elements (tokens, etc.)\n // are currently focused or being tabbed through.\n\n observableFromEvent<MouseEvent>(documentObj, 'click')\n .pipe(takeUntil(this.#idle))\n .subscribe(() => {\n hostElement = !this.inputBoxHostSvc\n ? this.#elementRef.nativeElement\n : this.lookupWrapperRef?.nativeElement;\n this.isInputFocused = hostElement.contains(document.activeElement);\n\n this.#changeDetector.markForCheck();\n });\n\n observableFromEvent<KeyboardEvent>(documentObj, 'focusin')\n .pipe(takeUntil(this.#idle))\n .subscribe(() => {\n hostElement = !this.inputBoxHostSvc\n ? this.#elementRef.nativeElement\n : this.lookupWrapperRef?.nativeElement;\n this.isInputFocused = hostElement.contains(document.activeElement);\n\n this.#changeDetector.markForCheck();\n });\n\n if (hostElement) {\n observableFromEvent(hostElement, 'mouseup')\n .pipe(takeUntil(this.#idle))\n .subscribe(() => {\n const classList = documentObj.activeElement.classList;\n if (!classList || !classList.contains('sky-token')) {\n this.#focusInput();\n }\n });\n }\n }\n\n #focusInput(): void {\n if (this.lookupWrapperRef) {\n this.#adapter.focusInput(this.lookupWrapperRef);\n }\n }\n\n #onAddButtonComplete(args: SkyLookupAddCallbackArgs): void {\n if (this.#openSelectionModal) {\n // Notify the selection modal of the new item. The selection\n // modal will decide whether the new item should be added\n // to the value when the user confirms or cancels the\n // selection modal.\n this.#openSelectionModal.addItem(args.item);\n } else {\n let addItemToValue: boolean | undefined;\n\n if (this.#hasSearchAsync()) {\n addItemToValue = true;\n } else {\n if (args.data) {\n this.data = args.data;\n }\n\n if (this.data.indexOf(args.item) >= 0) {\n if (this.#openNativePicker) {\n // Notify the picker of the new item. The picker will\n // decide whether the new item should be added to the\n // value when the user confirms or cancels the picker.\n (\n this.#openNativePicker\n .componentInstance as SkyLookupShowMoreModalComponent\n ).onItemSelect(true, { value: args.item, selected: false });\n } else {\n addItemToValue = true;\n }\n }\n }\n\n if (addItemToValue) {\n const oldValue = this.#getValue();\n const newValue =\n this.selectMode === 'multiple'\n ? oldValue.concat(args.item)\n : [args.item];\n\n this.#setValue(newValue, { emitEvent: true });\n }\n }\n }\n\n #parseTokens(data: any[]): SkyToken[] {\n return data.map((item: any) => {\n return {\n value: item,\n };\n });\n }\n\n #sendAutocompleteMessage(type: SkyAutocompleteMessageType): void {\n this.autocompleteController.next({ type });\n }\n\n #sendTokensMessage(type: SkyTokensMessageType): void {\n this.tokensController.next({ type });\n }\n\n #updateForSelectMode(): void {\n if (this.autocompleteInputDirective) {\n if (this.selectMode === 'single') {\n const value = this.#getValue();\n this.autocompleteInputDirective.value = value && value[0];\n } else {\n this.clearSearchText();\n }\n }\n }\n\n #hasSearchAsync(): boolean {\n return this.searchAsync.observers.length > 0;\n }\n\n #pickerModalOpen(): boolean {\n return !!(this.#openNativePicker || this.#openSelectionModal);\n }\n\n #populateInputBox(): void {\n if (this.inputBoxHostSvc && this.inputTemplateRef) {\n this.inputBoxHostSvc.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.enableShowMore()\n ? this.showMoreButtonTemplateRef\n : undefined,\n });\n }\n }\n}\n","@if (!inputBoxHostSvc) {\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\" />\n}\n\n<ng-template #inputTemplateRef>\n <div\n #lookupWrapper\n class=\"sky-lookup\"\n [ngClass]=\"{\n 'sky-lookup-focused': isInputFocused,\n 'sky-lookup-disabled': disabled,\n 'sky-lookup-single': selectMode === 'single'\n }\"\n >\n <sky-autocomplete\n [ariaLabelledBy]=\"ariaLabelledBy || inputBoxHostSvc?.labelId\"\n [attr.data-sky-lookup-show-more-picker-id]=\"showMorePickerId\"\n [data]=\"data\"\n [debounceTime]=\"debounceTime\"\n [descriptorProperty]=\"descriptorProperty\"\n [enableShowMore]=\"enableShowMore()\"\n [messageStream]=\"autocompleteController\"\n [propertiesToSearch]=\"propertiesToSearch\"\n [search]=\"searchOrDefault\"\n [searchAsyncDisabled]=\"searchAsync.observers.length === 0\"\n [searchFilters]=\"searchFilters\"\n [searchResultsLimit]=\"searchResultsLimit\"\n [searchResultTemplate]=\"searchResultTemplate\"\n [searchTextMinimumCharacters]=\"searchTextMinimumCharacters\"\n [showAddButton]=\"showAddButton\"\n [wrapperClass]=\"wrapperClass\"\n (addClick)=\"addButtonClicked()\"\n (searchAsync)=\"onSearchAsync($event)\"\n (selectionChange)=\"onAutocompleteSelectionChange($event)\"\n (showMoreClick)=\"onShowMoreClick($event)\"\n (openChange)=\"onAutocompleteOpenChange($event)\"\n >\n <div class=\"sky-lookup-search-flex-wrapper\">\n <div\n class=\"sky-lookup-search\"\n [ngClass]=\"{\n 'sky-field-status-active': isInputFocused && !disabled\n }\"\n >\n @if (selectMode === 'multiple') {\n <sky-tokens\n class=\"sky-lookup-tokens\"\n [disabled]=\"disabled\"\n [displayWith]=\"descriptorProperty\"\n [focusable]=\"false\"\n [messageStream]=\"tokensController\"\n [trackWith]=\"idProperty\"\n [tokens]=\"tokens\"\n (keyup)=\"onTokensKeyUp($event)\"\n (tokensChange)=\"onTokensChange($event)\"\n (tokensRendered)=\"onTokensRendered()\"\n (tokenSelected)=\"onTokenSelected()\"\n (focusIndexOverRange)=\"onTokensFocusIndexOverRange()\"\n >\n <textarea\n class=\"sky-form-control sky-lookup-input\"\n rows=\"1\"\n skyAutocomplete\n wrap=\"off\"\n [attr.aria-describedby]=\"ariaDescribedBy | async\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"controlId\"\n [attr.placeholder]=\"placeholderText\"\n [autocompleteAttribute]=\"autocompleteAttribute\"\n [disabled]=\"disabled\"\n (blur)=\"onAutocompleteBlur()\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"inputKeydown($event)\"\n (keyup)=\"inputKeyup($event)\"\n ></textarea>\n </sky-tokens>\n } @else if (selectMode === 'single') {\n <div class=\"sky-lookup-single-control\">\n <textarea\n class=\"sky-form-control sky-lookup-input\"\n rows=\"1\"\n skyAutocomplete\n wrap=\"off\"\n [attr.aria-describedby]=\"ariaDescribedBy | async\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"controlId\"\n [attr.placeholder]=\"placeholderText\"\n [autocompleteAttribute]=\"autocompleteAttribute\"\n [disabled]=\"disabled\"\n (blur)=\"onAutocompleteBlur()\"\n (focus)=\"onFocus($event)\"\n ></textarea>\n </div>\n }\n </div>\n @if (!inputBoxHostSvc && enableShowMore()) {\n <ng-container *ngTemplateOutlet=\"showMoreButtonTemplateRef\" />\n }\n </div>\n </sky-autocomplete>\n </div>\n</ng-template>\n\n<ng-template #showMoreButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'sky-btn-disabled': disabled }\"\n [attr.aria-label]=\"\n 'skyux_lookup_search_button_show_more' | skyLibResources\n \"\n (click)=\"onSearchButtonClick()\"\n >\n <sky-icon iconName=\"search\" iconSize=\"l\" />\n </button>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTokensModule } from '@skyux/indicators';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyAutocompleteModule } from '../autocomplete/autocomplete.module';\nimport { SkyLookupResourcesModule } from '../shared/sky-lookup-resources.module';\n\nimport { SkyLookupComponent } from './lookup.component';\n\n@NgModule({\n declarations: [SkyLookupComponent],\n imports: [\n CommonModule,\n SkyAutocompleteModule,\n SkyIconModule,\n SkyLookupResourcesModule,\n SkyThemeModule,\n SkyTokensModule,\n ],\n exports: [SkyLookupComponent],\n})\nexport class SkyLookupModule {}\n","/**\n * @deprecated Use `SkyLookupSelectModeType` instead.\n * @internal\n */\nexport enum SkyLookupSelectMode {\n /**\n * Restricts users to a single selection.\n */\n single = 'single',\n\n /**\n * Allows users to select multiple items.\n */\n multiple = 'multiple',\n}\n","/**\n * Specifies configuration options to launch a custom picker when users select\n * the button to view all options.\n */\nexport class SkyLookupShowMoreCustomPickerContext {\n /**\n * The options that users can select in the custom picker.\n */\n public items!: any[];\n /**\n * Search text to filter the contents of the custom picker.\n */\n public initialSearch!: string;\n /**\n * The current selections in the lookup field.\n */\n public initialValue!: any;\n}\n","import { NgModule } from '@angular/core';\n\n/**\n * @deprecated The `SkySelectionModalModule` is no longer needed and can be removed from your application.\n * @internal\n */\n@NgModule({})\nexport class SkySelectionModalModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableFromEvent","uniqueId","i4","i5","i7.SkyAutocompleteSearchAsyncDisabledPipe","map","i2","i3.SkyAutocompleteComponent","i4.SkyAutocompleteInputDirective","i3","i7","i6.SkySearchComponent","i9","i10","i11","i1","take","i2.SkyAutocompleteComponent","i3.SkyAutocompleteInputDirective","i6"],"mappings":"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"}