@sebgroup/green-angular 7.1.0 → 7.2.0-rc.20260107085459985

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":"sebgroup-green-angular-src-v-angular-dropdown.mjs","sources":["../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.module.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.module.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.directive.ts","../../../../libs/angular/src/v-angular/dropdown/sebgroup-green-angular-src-v-angular-dropdown.ts"],"sourcesContent":["import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'\n\n@Component({\n selector: 'nggv-typeahead-highlight',\n templateUrl: './typeahead-highlight.component.html',\n styleUrls: ['./typeahead-highlight.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadHighlightComponent implements OnChanges {\n /** The text that is displayed in the dropdown list */\n @Input() textContent?: string\n /** The substring that should be highlighted within textContent */\n @Input() textToHighlight?: string\n\n prefix?: string // Substring before the match\n match?: string // The match\n suffix?: string // Substring after the match\n\n text = ''\n input = ''\n\n /**\n * Regexp of characters that are allowed in textContent without being found in textToHighlight\n * Allow whitespaces.\n * */\n allowedNonMatchingChars = new RegExp(/\\s/)\n\n ngOnChanges(changes: SimpleChanges) {\n const { textContent, textToHighlight } = changes\n if (textContent?.currentValue != null)\n this.text = `${textContent.currentValue}`\n if (textToHighlight?.currentValue != null)\n this.input = `${textToHighlight.currentValue}`\n this.updateValues()\n }\n\n private updateValues() {\n const splittedText = this.text.toLocaleLowerCase().split('')\n const splittedInput = this.input.toLocaleLowerCase().split('')\n\n const { start, end } = this.getHighlightedPart(splittedText, splittedInput)\n\n // If user input is not found within the textcontent, reset options and return.\n if (start === -1 || end === -1) {\n this.prefix = this.match = this.suffix = ''\n return\n }\n this.prefix = this.text.substring(0, start)\n this.match = this.text.substring(start, end)\n this.suffix = this.text.substring(end)\n }\n\n /**\n * Function that finds the start and end index of where the input is located within the text to display.\n * First occurence is returned. Allows for spaces to occur despite input not matching space.\n * Loops through each character in splittedText and when a char in splittedText equlas the first character of\n * splittedInput, evaluate wether it's match on the entire input.\n * - If it's => return indexes.\n * - If it's not => break out and check next char in outer loop.\n * @param splittedText the text content splitted in an array\n * @param splittedInput the input splitted in an array\n * @returns { start: number, end: number } Indexes of where the match starts and ends in the text displatyed\n */\n private getHighlightedPart(\n splittedText: string[],\n splittedInput: string[],\n ): { start: number; end: number } {\n let start = -1\n let end = -1\n\n for (let i = 0; i < splittedText.length; i++) {\n // If start and end have been set, break and return\n if (start > -1 || end > -1) break\n\n // If current char match first in input, try see if whole input match from that index\n if (splittedText[i] === splittedInput[0]) {\n let matches = 1\n for (let t = 1; t <= splittedText.length; t++) {\n // If match on last character of input, we're finished.\n if (matches === splittedInput.length) {\n start = i\n end = start + t\n break\n }\n if (splittedText[t + i] === splittedInput[matches]) matches++\n else if (this.allowedNonMatchingChars.test(splittedText[t + i]))\n continue // Ignore whitespace, continue\n else break // No match, break out of inner loop to check next char in text\n }\n }\n }\n return { start, end }\n }\n}\n","<ng-container *ngIf=\"!this.match\">{{ textContent }}</ng-container>\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\n<ng-container *ngIf=\"!!this.match\">\n {{ prefix || '' }}<span class=\"match\">{{ match }}</span\n >{{ suffix || '' }}\n</ng-container>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChildren,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { filter, fromEvent, Subject, Subscription, takeUntil } from 'rxjs'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n@Component({\n selector: 'nggv-dropdown-list',\n templateUrl: './dropdown-list.component.html',\n styleUrls: ['./dropdown-list.component.scss'],\n standalone: false\n})\nexport class NggvDropdownListComponent implements OnInit, OnChanges {\n @Input() set expanded(state: boolean) {\n this.setExpanded(state)\n }\n get expanded(): boolean {\n return this._expanded\n }\n @Input() state: any\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n @Input() optionContentTpl: TemplateRef<OptionBase<any>> | undefined\n @Input() groupLabelTpl: TemplateRef<OptionBase<any>> | undefined\n\n /** @internal List of references to the option elements. */\n @ViewChildren('optionRefs') optionRefs:\n | QueryList<ElementRef<HTMLLIElement>>\n | undefined\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).nggv?.nextId()\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('attr.data-position') get positionAttr() {\n return this.dropdownPosition\n }\n\n @Input() options!: any[]\n\n @Input() textToHighlight?: string\n\n /**\n * Used to control if \"selectedValueChanged\" only should emit distinct changes, or each time a value is selected\n * When true, value is not emitted if there's no distinct change\n * When false, value is emitted every time an option is selected\n * */\n @Input() onlyEmitDistinctChanges = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * When true, the dropdown will automatically choose to open above or below the input\n * based on available space in the viewport, and will scale its height to fit if needed.\n */\n @Input() dynamicPosition = false\n\n @Output() selectedValueChanged = new EventEmitter<any>()\n\n /**\n * Emitted when the dropdown is closed by user interactions (e.g. Escape or Tab) or other immediate close triggers.\n * This notifies external consumers that the dropdown was closed as a result of a user action.\n */\n @Output() closed = new EventEmitter<void>()\n\n /**\n * Emitted after the dropdown has fully closed and internal cleanup has been performed.\n * Use this for post-close tasks that must run after subscriptions are torn down and resources released.\n */\n @Output() afterClose = new EventEmitter<void>()\n \n /** The current active option based on numeric index. */\n public activeIndex = -1\n\n scope: string | undefined\n\n // Indicates whether the dropdown list should be displayed below ('bottom') or above ('top') the input, based on available space.\n dropdownPosition: 'bottom' | 'top' = 'bottom'\n\n private dropdownUtils: DropdownUtils<string | null, string, any> =\n new DropdownUtils<string | null, string, any>()\n private _expanded = false\n private closed$ = new Subject<boolean>()\n public selectedValue?: Option<string, any>\n\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n protected onClickSubscription: Subscription | undefined\n /** Subscribe to to keyboard events only when list is open. */\n private onKeyDownSubscription: Subscription | undefined\n private onKeyUpSubscription: Subscription | undefined\n private _flattenedOptions: any[] = []\n\n constructor(\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer: Renderer2,\n private elRef: ElementRef,\n ) {\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n ngOnInit(): void {\n if (this.state)\n this.activeIndex = this.options.findIndex(\n (option) => option.key === this.state.key,\n )\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!!changes.state && !changes.state.firstChange)\n this.selectedValue = changes.state.currentValue\n if (!!changes.options?.currentValue?.length && this.expanded)\n this.refreshSelectedOption()\n }\n\n /**\n * Returns true if argument is an {@link OptionGroup}.\n * @param option the object to check.\n */\n isGroup(option: any): boolean {\n return 'options' in option\n }\n\n /** @internal */\n updateState(option: any, event: Event) {\n if (option.disabled) return\n\n if (\n !this.onlyEmitDistinctChanges ||\n !this.dropdownUtils.deepEqual(this.selectedValue, option)\n ) {\n this.selectedValue = option\n this.state = option\n this.selectedValueChanged.emit(option)\n }\n\n this.setExpanded(false)\n event.stopPropagation()\n }\n\n /**\n * @internal\n */\n setExpanded(expanded = true) {\n // update expanded state\n this._expanded = expanded\n\n if (expanded) {\n if (this.dynamicPosition) {\n this.setDropdownPosition()\n }\n this.refreshSelectedOption()\n this.subscribeToKeyUpEvents()\n this.subscribeToKeyDownEvents()\n } else {\n this.closed$.next(true)\n this.afterClose.emit()\n this.onClickSubscription?.unsubscribe()\n this.onKeyDownSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n // to trigger gc removal\n this.onKeyDownSubscription = undefined\n this.onKeyUpSubscription = undefined\n }\n }\n\n /**\n * @internal\n */\n refreshSelectedOption() {\n this._flattenedOptions = this.dropdownUtils.flattenOptions(\n this.options,\n !this.optionContentTpl,\n )\n this.activeIndex = this.getActiveIndex()\n this.state = this._flattenedOptions[this.activeIndex]\n this.scrollToResult(this.state)\n }\n\n /**\n * @internal\n * @returns The active index (number) if option is found, -1 otherwise.\n * - If a selectedValue exists that's not nullish and that options is found, return that index\n * - Else, return first non nullish index\n * - If none of the above criterias are met, -1 are returned\n */\n getActiveIndex(): number {\n if (!!this.selectedValue && this.selectedValue?.key != null) {\n const selectedIndex = this._flattenedOptions.findIndex(\n (option) =>\n option.key != null && option.key === this.selectedValue?.key,\n )\n if (selectedIndex > -1) return selectedIndex\n }\n return this._flattenedOptions.findIndex((option) => option.key != null)\n }\n\n /**\n * @internal\n * evaluates wether the HTML element overflows\n * @param elem The HTMLElement to evaluate\n * */\n isOverflow(elem: HTMLElement) {\n return elem.offsetWidth < elem.scrollWidth\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): any {\n return group\n }\n\n /**\n * @internal\n * Disables default events.\n * @param event fired containing which key was pressed.\n */\n onKeyDown(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (event.key === ' ' && !this.selectWithSpace) return true\n switch (event.key) {\n case ' ': // Space - placed here to ensure the dropdown-list closes after selecting using \"Space\"\n case 'ArrowUp': // Disable scrolling up\n case 'ArrowDown': // Disable scrolling down\n event.preventDefault()\n event.stopPropagation()\n return false\n case 'Enter': // Disable form submission and select the currently active value\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n const option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n }\n return false\n case 'Tab': // trigger dropdown to close (for typeahead)\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n this.setExpanded(false)\n this.closed.emit()\n }\n return false\n }\n return true\n }\n\n /**\n * @internal\n * Enter toggles the dropdown, home, end, and, arrows change the index.\n * Space selects the currently active option if `selectWithSpace` is true.\n * @param event fired containing which key was released.\n */\n onKeyUp(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (!this.expanded || (event.key === ' ' && !this.selectWithSpace)) return\n let option\n\n switch (event.key) {\n case 'Escape':\n this.setExpanded(false)\n this.closed.emit()\n break\n\n case ' ': // Space - select the currently chosen value\n option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n break\n\n case 'Home': // Move to the first option\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowUp': // Move up one step to the previous option\n if (this.activeIndex > 0) this.activeIndex--\n else if (this.activeIndex === 0)\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowDown': // Move down one step to the next option\n if (this._flattenedOptions.length > this.activeIndex + 1)\n this.activeIndex++\n else if (this.activeIndex === this._flattenedOptions.length - 1)\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'End': // Move to the last options\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n }\n }\n\n /** @internal */\n subscribeToKeyUpEvents() {\n this.onKeyUpSubscription = fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyUp(event))\n }\n\n /** @internal */\n subscribeToKeyDownEvents() {\n this.onKeyDownSubscription = fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyDown(event))\n }\n\n /**\n * Scrolls focused result into view with a specified offset.\n * @param key the result index which to scroll to.\n */\n scrollToResult(option: any, focusElement?: boolean) {\n if (!this.optionRefs || !option) return\n const optionRef = this.optionRefs.find(\n (li) => li.nativeElement.id === this.id + '-option-' + option.key,\n )\n const offset = this.scrollOffset\n if (optionRef) {\n let delta = window.scrollY || document.documentElement.scrollTop\n\n // The list seems not to be visible at the time of scrolling, but this setTimeout \"hack\" makes it work...\n setTimeout(() => {\n scrollIntoView(optionRef.nativeElement, {\n scrollMode: 'if-needed',\n block: 'nearest',\n })\n\n delta -= window.scrollY || document.documentElement.scrollTop\n if (delta) {\n window.scrollBy(0, delta > 0 ? -offset : offset)\n }\n if (focusElement) {\n optionRef.nativeElement.focus()\n }\n }, 0)\n }\n }\n\n /**\n * Calculates available space above and below the dropdown input,\n * sets dropdownPosition ('top' or 'bottom') accordingly,\n * and dynamically sets the max-height of the dropdown list to fit the viewport.\n */\n setDropdownPosition() {\n const dropdown = this.elRef.nativeElement\n // dropdown trigger\n const dropdownInput = dropdown.parentElement\n const dropdownList = dropdown.querySelector('ul[role=\"listbox\"]')\n const rect = dropdownInput.getBoundingClientRect()\n\n const viewportHeight = window.innerHeight\n const spaceBelow = viewportHeight - rect.bottom\n const spaceAbove = rect.top\n\n const MARGIN = 10\n const MIN_HEIGHT = 100\n const DROPDOWN_MAX_HEIGHT = 500\n let maxDropdownHeight\n\n if (spaceBelow >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceAbove >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'top'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceBelow > spaceAbove) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = Math.max(spaceBelow - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n } else {\n this.dropdownPosition = 'top'\n maxDropdownHeight = Math.max(spaceAbove - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n }\n\n this.renderer.setStyle(dropdownList, 'max-height', `${maxDropdownHeight}px`)\n }\n}\n","<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + state?.key : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [nggvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n Self,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subscription } from 'rxjs'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n OptionGroup,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n/**\n * A dropdown allows the user to select an option from a list.\n * Dropdowns enables users to make a quick selection of the available options for a specific entry.\n * https://designlibrary.sebgroup.com/components/component-dropdown\n */\n@Component({\n selector: 'nggv-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n standalone: false\n})\nexport class NggvDropdownComponent<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n extends NggvBaseControlValueAccessorComponent\n implements OnDestroy, OnChanges\n{\n /** Custom template for displaying options and groups. */\n @ContentChild('selectedTpl', { read: TemplateRef }) selectedContentTpl:\n | TemplateRef<OptionBase<T>>\n | undefined\n @ContentChild('optionTpl', { read: TemplateRef }) optionContentTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n @ContentChild('groupLabelTpl', { read: TemplateRef }) groupLabelTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /**\n * Sets the displayed size of the dropdown.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n /** Text shown before an option is selected. */\n @Input() placeholder?: string\n /** Specific value for aria-label. If not provided, label/labelTpl will be used. */\n @Input() ariaLabel?: string\n /** If the dropdown should close when scrolling the viewport. Default: false */\n @Input() closeOnScroll = false\n /** List of {@link Option} and {@link OptionGroup} listed when dropdown is expanded. */\n @Input() set options(value: OptionBase<T>[]) {\n // update options\n this._options = value\n // already has a null/undefined key\n const nullishOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == null)\n // if the dropdown is optional, add a null value to deselect option\n if (!this.required && !nullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n }\n\n // set default value and emit if there is only one option\n if (value.length === 1 && this.required && this.selectOnSingleOption) {\n const onlyOption = this.dropdownUtils.flattenOptions(value, false)[0]\n this.updateModel(onlyOption)\n return\n }\n\n // don't update local state if we shouldn't control nullish value and we cant find the selected value amongst the options\n const matchingOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == this.ngControl?.value)\n if (!this.allowControlNullishOption && !matchingOption) return\n\n // Update local state\n this.writeValue(this.ngControl?.value)\n }\n\n get options(): OptionBase<T>[] {\n return this._options\n }\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n /**\n * Allow this component to add/ remove nullish options based on wether the control is required or not\n * Defaults to true.\n */\n @Input() allowControlNullishOption = true\n\n /** Text to highlight in option */\n @Input() textToHighlight?: string\n\n /**\n * If only one option exists in options[], default is to select it.\n * This input can be used to alter that behaviour so it doesn't automatically\n * select a value if it's the only one.\n * Defaults to true.\n */\n @Input() selectOnSingleOption = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * Used to determine which changes should be handled by the dropdown.\n * If set to false, all changes will be handled by the dropdown.\n * If set to true, only changes that are distinct from the current value will be handled.\n * Defaults to true.\n */\n @Input() onlyHandleDistinctChanges = true\n\n /**\n * Emits changes of the expanded state of the dropdown\n */\n @Output() expandedChange = new EventEmitter<boolean>()\n\n /** @internal nullish option. */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.placeholder ?? '\\u00A0' }\n }\n\n /** The current expanded state of the dropdown options. */\n public expanded = false\n /** The current option selected based on numeric index. */\n public activeIndex = -1\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n private onClickSubscription: Subscription | undefined\n /** Subscribe if dropdown expanded to listen to scroll outside to close dropdown. */\n private onScrollSubscription: Subscription | undefined\n\n public keyEvent: KeyboardEvent = {} as KeyboardEvent\n private _options: OptionBase<T>[] = []\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n protected dropdownUtils: DropdownUtils<K, V, T>,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required?.currentValue !== undefined) {\n const isRequired = changes.required.currentValue\n // remove nullish option\n const hasNullishOption =\n this.dropdownUtils.flattenOptions(this._options, false)[0]?.key == null\n // if required, remove nullish option\n if (isRequired && hasNullishOption && this.allowControlNullishOption) {\n this._options = this._options.slice(1)\n return\n }\n // if not required, add nullish option\n if (!isRequired && !hasNullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n return\n }\n }\n }\n\n ngOnDestroy(): void {\n this.onClickSubscription?.unsubscribe()\n this.onScrollSubscription?.unsubscribe()\n }\n\n /** @internal override to correctly set state from form value */\n writeValue(value: any): void {\n const options = this.dropdownUtils.flattenOptions(this._options, false)\n this.state = options.find((option) => option.key === value)\n }\n\n // ----------------------------------------------------------------------------\n // EVENTS\n // ----------------------------------------------------------------------------\n\n /** @internal */\n onSelectChange(option: T) {\n if (option.disabled) return\n this.updateModel(option)\n this.setExpanded(false)\n }\n\n // /**\n // * @internal\n // * Enter toggles the dropdown, home, end, and, arrows change the index.\n // * @param event fired containing which key was released.\n // */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n this.keyEvent = event\n }\n\n /**\n * Closes the dropdown on click outside.\n */\n subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n subscribeToOutsideScrollEvent() {\n this.onScrollSubscription = fromEvent(document, 'scroll').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onScrollSubscription?.unsubscribe()\n }\n },\n })\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /**\n * Set the dropdown value to given option.\n * @param value the dropdown option to select.\n */\n private updateModel(value: T) {\n this.state = value\n this.onChange(value.key)\n }\n\n /** Toggle the expanded state of the dropdown options. */\n toggleDropdown() {\n this.setExpanded(!this.expanded)\n this.cdr.detectChanges()\n }\n\n /**\n * Set the expanded state of the dropdown options. If true the options are shown below the field.\n * Activate on click event to be able to close dropdown on click outside.\n * @param state the expanded state which to set.\n */\n setExpanded(state = true) {\n this.expanded = state\n this.expandedChange.emit(this.expanded)\n if (this.expanded) {\n this.subscribeToOutsideClickEvent()\n if (this.closeOnScroll) {\n this.subscribeToOutsideScrollEvent()\n }\n }\n if (!this.expanded) this.onTouched()\n }\n\n /* TYPE CASTS */\n\n /**\n * Typecast anything to an {@link Option}.\n * @param option the object to typecast.\n */\n castOption(option: any): T {\n return option\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): OptionGroup<T> {\n return group\n }\n\n /* TYPE CHECKS */\n\n /**\n * Returns true if argument is an {@link Option}.\n * @param option the object to check.\n */\n isOption(option: OptionBase<T>): option is OptionGroup<T> {\n return !('options' in option)\n }\n}\n","<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper dropdown-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n [onlyEmitDistinctChanges]=\"onlyHandleDistinctChanges\"\n [selectWithSpace]=\"selectWithSpace\"\n [dynamicPosition]=\"true\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n","import {\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subject, takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownListComponent } from '../../dropdown-list/dropdown-list.component'\n\n// Use dropdownList template and combine stylesheets\n@Component({\n selector: 'nggv-typeahead-dropdown-list',\n templateUrl: '../../dropdown-list/dropdown-list.component.html',\n styleUrls: [\n '../typeahead-dropdown-list/typeahead-dropdown-list.component.scss',\n '../../dropdown-list/dropdown-list.component.scss',\n ],\n standalone: false\n})\nexport class NggvTypeaheadDropdownListComponent\n extends NggvDropdownListComponent\n implements OnInit, OnDestroy\n{\n @Input() hostComponent!: NggvInputComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n private _destroy$ = new Subject<boolean>()\n\n constructor(\n @SkipSelf()\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer2: Renderer2,\n private element: ElementRef,\n ) {\n super(translocoScope, renderer2, element)\n }\n\n ngOnInit(): void {\n this.handleSelectedValueChanges()\n this.handleFocusChanges()\n }\n\n ngOnDestroy(): void {\n this._destroy$.next(true)\n this._destroy$.complete()\n }\n\n /** @Internal Subscribe to click outside dropdownList and input to close dropdownList */\n private subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click')\n .pipe(takeUntil(this._destroy$))\n .subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.element.nativeElement.contains(event.target) &&\n !this.hostComponent.inputRef?.nativeElement.contains(event.target)\n ) {\n this.setExpanded(false)\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n\n /** @Internal Update state of the host-input to reflect the selected value */\n private handleSelectedValueChanges() {\n this.selectedValueChanged\n .pipe(takeUntil(this._destroy$))\n .subscribe((selected) => {\n if (this.hostComponent.inputRef) {\n this.hostComponent.state = `${this.formatSelected(selected)}`\n }\n })\n }\n\n /** @Internal Expand the dropdown when input receives focus. If no state, set empty string in input */\n private handleFocusChanges() {\n this.hostComponent.nggvFocus\n .asObservable()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.state) this.hostComponent.nggvInput.emit('')\n this.setExpanded(true)\n this.subscribeToOutsideClickEvent()\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n //If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n *\n * @param expanded boolean to set if dropdown is expanded\n */\n override setExpanded(expanded = true) {\n super.setExpanded(expanded)\n\n /**\n * Makes the typeahead dropdown as wide as the host component\n */\n this.renderer2.setStyle(\n this.element.nativeElement,\n 'width',\n `${this.hostComponent.element.nativeElement.offsetWidth}px`,\n )\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../../dropdown.component'\n\n@Component({\n selector: 'nggv-typeahead-input',\n templateUrl: './typeahead-input.component.html',\n styleUrls: ['./typeahead-input.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadInputComponent\n extends NggvInputComponent\n implements OnInit, OnDestroy\n{\n /** Reference to the host dropdown */\n @Input() hostComponent!: NggvDropdownComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n get dropdownButton(): HTMLElement {\n return this.hostComponent.inputRef?.nativeElement\n }\n\n /** Boolean to indicate wether the dropdown is expanded or not, to apply appropriate styling */\n expanded = false\n\n /** Used to determine the height of the inputin html */\n buttonHeight?: number\n\n /** @internal Used to determine wether the input has been moved or not */\n inputMoved = false\n\n constructor(\n public element: ElementRef,\n private renderer2: Renderer2,\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr, element)\n super.ngOnInit()\n }\n\n ngOnInit() {\n this.autocomplete = 'off'\n this.debounceTime = 0\n this.hostComponent.selectOnSingleOption = false\n\n this.handleExpandedChange()\n }\n\n /**\n * @internal\n * Allow space to be inputted as text\n * @param event fired containing which key was released.\n */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (event.code === 'Space' && this.expanded) {\n event.preventDefault()\n }\n }\n\n /**\n * @internal\n * First time the dropdown is expanded, move the input sp it becomes a child of the dropdown button\n * to better reflect semantics and styling.\n */\n private moveInput() {\n // Workaround to execute code in setTimeout due to hooks management etc.\n setTimeout(() => {\n // Only move if parent dropdown is found\n if (this.dropdownButton) {\n this.renderer2.appendChild(\n this.dropdownButton.querySelector('button'),\n this.element.nativeElement,\n )\n this.inputMoved = true\n }\n }, 0)\n }\n\n /**\n * @internal\n * When dropdown is expanded, focus on the input. If a value is selected, set it in the input.\n * When the dropdown is collapsed, empty the input from text.\n */\n private handleExpandedChange() {\n this.hostComponent.expandedChange\n .pipe(takeUntil(this._destroy$))\n .subscribe((state) => {\n this.expanded = state\n\n // Calling this function from onInit caused issues when DOM has not fully been initialized because of\n // different CSS used to hide (but not remove) from DOM\n if (!this.inputMoved) this.moveInput()\n\n // Get the height of the parent button so the input can be explicitly set to the same height since it's absolutely positioned\n this.buttonHeight =\n this.dropdownButton?.getBoundingClientRect().height || 32 // Default to 2em;\n\n if (this.expanded) {\n // Weird workaround for setting focus. Didn't set focus, but wrapping in setTimeout solved it.\n // See suggestion here: https://github.com/ionic-team/stencil/issues/3772#issuecomment-1292599609\n setTimeout(() => this.setFocus())\n // Format and interpolate result since return type can be other than string from the formatter\n const formattedValue = `${this.formatSelected(this.hostComponent.state)}`\n this.setInput(formattedValue, false)\n } else this.setInput('', true)\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n // If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n * Sets the input programmatically instead of native HTML input event.\n * @param input\n */\n private setInput(input: string, triggerFilter: boolean) {\n this.state = input\n if (triggerFilter) {\n this.onChange(this.state)\n this.inputChange$.next(this.state)\n }\n }\n}\n","<ng-container>\n <div\n class=\"input-wrapper\"\n [ngClass]=\"{ expanded: expanded, collapsed: !expanded }\"\n [ngStyle]=\"{ 'height.px': buttonHeight }\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- INPUT FIELD -->\n <div class=\"input-group\">\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [attr.email]=\"email\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvTypeaheadDropdownListComponent } from './typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadHighlightComponent } from './typeahead-highlight/typeahead-highlight.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@NgModule({\n declarations: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n imports: [CommonModule, NggvTooltipModule],\n exports: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n})\nexport class NggvTypeaheadModule {}\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvDropdownListComponent } from './dropdown-list/dropdown-list.component'\nimport { NggvDropdownComponent } from './dropdown.component'\nimport { NggvTypeaheadModule } from './typeahead/typeahead.module'\n\n@NgModule({\n declarations: [NggvDropdownComponent, NggvDropdownListComponent],\n imports: [\n CommonModule,\n NggCoreWrapperModule,\n NggvTypeaheadModule,\n NggvTooltipModule,\n NggvI18nModule,\n ],\n exports: [NggvDropdownComponent, NggvDropdownListComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDropdownModule {}\n","import {\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Host,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewContainerRef,\n} from '@angular/core'\nimport {\n distinctUntilChanged,\n from,\n OperatorFunction,\n Subject,\n Subscription,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs'\n\nimport { Option, OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../dropdown.component'\nimport { NggvTypeaheadDropdownListComponent } from '../typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@Directive({\n selector: 'nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]',\n standalone: true,\n})\nexport class NggvTypeaheadDirective<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n implements OnInit, OnDestroy\n{\n /** Function that filter the inputvalue */\n @Input() set nggvTypeahead(value: OperatorFunction<string, T[]> | undefined) {\n this.typeaheadFunction = value\n\n // If inputsubscription already exists, unsubscribe and subscribe again\n if (this.inputSubscription$) {\n this.inputSubscription$?.unsubscribe()\n this.inputSubscription$ = undefined\n this.handleInputChanges()\n }\n }\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n /** Allow option to be unselected in the dropdown even if it is required. Defaults to true */\n @Input() allowUnselect = true\n\n /** Custom label for the unselect option */\n @Input() unselectLabel?: string\n\n /** Custom label for the empty option */\n @Input() emptyOptionLabel?: string\n\n /** Emits the entered string the user has written in the input */\n @Output() filterPhraseChange = new EventEmitter<string>()\n\n /** Forward text inputs to apply the filter function*/\n @HostListener('nggvInput', ['$event']) onNggvInput(event: any) {\n this.inputValue$.next(event)\n }\n\n /** Helper to the determine if the host is nggv-drodpown or nggv-input*/\n get hostIsDropdown() {\n return !!this.hostDropdown\n }\n\n /** Predefined options */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.unselectLabel || '\\u00A0' }\n }\n\n get emptyOption(): OptionBase<any> {\n return {\n key: null,\n label: this.emptyOptionLabel || 'label.nomatchingoptions',\n disabled: true,\n }\n }\n\n /** Name of the component. nggv-dropdown if NggvDropdownComponent or nggv-input if NggvInputComponent */\n get localName() {\n return this.element.nativeElement.localName\n }\n\n dropdownListComponent!: ComponentRef<NggvTypeaheadDropdownListComponent>\n inputComponent!: ComponentRef<NggvTypeaheadInputComponent>\n\n private typeaheadFunction?: OperatorFunction<string, T[]>\n private inputValue$ = new Subject<any>()\n private inputSubscription$?: Subscription\n private onDestroy$ = new Subject<boolean>()\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private element: ElementRef,\n @Optional() @Host() private hostDropdown: NggvDropdownComponent,\n @Optional() @Host() private hostInput: NggvInputComponent,\n ) {}\n\n ngOnInit() {\n this.handleInputChanges()\n\n if (this.hostIsDropdown) this.createInput()\n else this.createDropdownList()\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next(true)\n this.onDestroy$.complete()\n }\n\n /**\n * @internal\n * Core functionality of typeahead. Emits input, then filters the result based on the supplied function\n * If directive is applied on nggv-input, manually show or hide options in the list.\n * If directive is applied on nggv-dropdown, let the dropdown itself choose when to open or close\n */\n private handleInputChanges() {\n this.inputSubscription$ = this.inputValue$\n .pipe(\n takeUntil(this.onDestroy$),\n distinctUntilChanged(),\n tap((inputValue) => this.filterPhraseChange.emit(inputValue)),\n this.typeaheadFunction ? this.typeaheadFunction : () => from([]),\n withLatestFrom(this.inputValue$),\n )\n .subscribe(([filteredValues, input]) =>\n this.setOptions(filteredValues, input),\n )\n\n // Trigger the pipe when this function have been called\n this.inputValue$.next('')\n }\n\n /**\n * @internal\n * Creates a nggv-input if the host itself is not a text-input\n * Set styles to not display the input when closed\n * Trigger filtering when changes occur in the field\n * */\n private createInput() {\n // Create the input component\n this.inputComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadInputComponent,\n )\n // Forward necessary info to component\n this.inputComponent.setInput('hostComponent', this.hostDropdown)\n this.inputComponent.setInput('selectedFormatter', this.selectedFormatter)\n this.inputComponent.setInput('resultFormatter', this.resultFormatter)\n // Listen to value changes\n this.inputComponent.instance.nggvInput\n .pipe(takeUntil(this.onDestroy$))\n .subscribe((inputValue) => this.inputValue$.next(inputValue))\n }\n\n /** @internal Creates a nggv-dropdown-list if the host itself is a nggv-input */\n private createDropdownList() {\n this.dropdownListComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadDropdownListComponent,\n )\n this.dropdownListComponent.setInput('hostComponent', this.hostInput)\n }\n\n /**\n * @internal Sets the options the user can select.\n * If the host is a nggv-dropdown, utilize the dropdown itself to display the options\n * If the host is a nggv-input, use the created nggv-dropdown-list to displaye the options\n * @param filteredValues The options to display in the dropdown\n * @param emptyInput If the input is empty\n */\n private setOptions(filteredValues: T[], input: string) {\n if (!filteredValues) return\n // Conditionally add empty or nullish option if it's allowed, the input is empty and does not already contain nullish\n const allowNullish =\n this.allowUnselect &&\n !input &&\n !(\n Object.keys(filteredValues[0] ?? {}).includes('key') &&\n filteredValues[0]?.key == null\n )\n if (filteredValues.length === 0) {\n filteredValues = [this.emptyOption]\n } else if (allowNullish) {\n filteredValues = [this.defaultNullishOption].concat(filteredValues)\n }\n\n if (this.hostIsDropdown) {\n // Add nullish option when no input is written (or when dropdown is epanded and has a selection)\n this.hostDropdown.allowControlNullishOption = false\n this.hostDropdown.options = this.formatOptions(filteredValues)\n this.hostDropdown.textToHighlight = `${input || ''}`\n this.hostDropdown.onlyHandleDistinctChanges = false\n this.hostDropdown.selectWithSpace = false\n this.hostDropdown.detectChanges()\n return\n }\n\n if (!this.hostIsDropdown) {\n this.dropdownListComponent.setInput(\n 'options',\n this.formatOptions(filteredValues),\n )\n this.dropdownListComponent.setInput('textToHighlight', `${input || ''}`)\n }\n }\n\n /**\n * @internal Formats the available options to display in the dropdown list\n * @param options The selected value\n * @returns The formatted value\n */\n private formatOptions(options: T[]): OptionBase<any>[] {\n if (!options) return []\n if (!this.resultFormatter) return options\n return options.map((value) =>\n value?.label ? this.resultFormatter?.(value) : value,\n )\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.NggvTypeaheadHighlightComponent","i3","i4","i5","i6.NggvDropdownListComponent","i2","i3.NggvTypeaheadHighlightComponent","i1.NggvDropdownComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;MAQa,+BAA+B,CAAA;AAN5C,IAAA,WAAA,GAAA;QAgBE,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,KAAK,GAAG,EAAE;AAEV;;;AAGK;AACL,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC;AAoE3C,IAAA;AAlEC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,OAAO;AAChD,QAAA,IAAI,WAAW,EAAE,YAAY,IAAI,IAAI;YACnC,IAAI,CAAC,IAAI,GAAG,CAAA,EAAG,WAAW,CAAC,YAAY,EAAE;AAC3C,QAAA,IAAI,eAAe,EAAE,YAAY,IAAI,IAAI;YACvC,IAAI,CAAC,KAAK,GAAG,CAAA,EAAG,eAAe,CAAC,YAAY,EAAE;QAChD,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAE9D,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC;;QAG3E,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE;YAC3C;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IACxC;AAEA;;;;;;;;;;AAUG;IACK,kBAAkB,CACxB,YAAsB,EACtB,aAAuB,EAAA;AAEvB,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC;AAEZ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;YAE5C,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAAE;;YAG5B,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE;gBACxC,IAAI,OAAO,GAAG,CAAC;AACf,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAE7C,oBAAA,IAAI,OAAO,KAAK,aAAa,CAAC,MAAM,EAAE;wBACpC,KAAK,GAAG,CAAC;AACT,wBAAA,GAAG,GAAG,KAAK,GAAG,CAAC;wBACf;oBACF;oBACA,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,aAAa,CAAC,OAAO,CAAC;AAAE,wBAAA,OAAO,EAAE;AACxD,yBAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,wBAAA,SAAQ;;AACL,wBAAA,MAAK;gBACZ;YACF;QACF;AACA,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;IACvB;8GApFW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,sLCR5C,6TAMA,EAAA,MAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDEa,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,6TAAA,EAAA,MAAA,EAAA,CAAA,iCAAA,CAAA,EAAA;8BAIV,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;;;MEqBU,yBAAyB,CAAA;IACpC,IAAa,QAAQ,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAqBA,IAAA,IAAuC,YAAY,GAAA;QACjD,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AA6DA,IAAA,WAAA,CAGY,cAA8B,EAChC,QAAmB,EACnB,KAAiB,EAAA;QAFf,IAAA,CAAA,cAAc,GAAd,cAAc;QAChB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,KAAK,GAAL,KAAK;;QArFN,IAAA,CAAA,YAAY,GAAG,EAAE;;AAWO,QAAA,IAAA,CAAA,EAAE,GAAI,MAAc,CAAC,IAAI,EAAE,MAAM,EAAE;;QAG3B,IAAA,CAAA,KAAK,GAC5C,UAAU;AAUZ;;;;AAIK;QACI,IAAA,CAAA,uBAAuB,GAAG,IAAI;AAEvC;;;;AAIG;QACM,IAAA,CAAA,eAAe,GAAG,IAAI;AAE/B;;;AAGG;QACM,IAAA,CAAA,eAAe,GAAG,KAAK;AAEtB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;AAExD;;;AAGG;AACO,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AAE3C;;;AAGG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;;QAGxC,IAAA,CAAA,WAAW,GAAG,CAAC,CAAC;;QAKvB,IAAA,CAAA,gBAAgB,GAAqB,QAAQ;AAErC,QAAA,IAAA,CAAA,aAAa,GACnB,IAAI,aAAa,EAA8B;QACzC,IAAA,CAAA,SAAS,GAAG,KAAK;AACjB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAW;QAQhC,IAAA,CAAA,iBAAiB,GAAU,EAAE;QASnC,IAAI,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IACtE;IAEA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACvC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAC1C;IACL;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW;YAC/C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY;AACjD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,QAAQ;YAC1D,IAAI,CAAC,qBAAqB,EAAE;IAChC;AAEA;;;AAGG;AACH,IAAA,OAAO,CAAC,MAAW,EAAA;QACjB,OAAO,SAAS,IAAI,MAAM;IAC5B;;IAGA,WAAW,CAAC,MAAW,EAAE,KAAY,EAAA;QACnC,IAAI,MAAM,CAAC,QAAQ;YAAE;QAErB,IACE,CAAC,IAAI,CAAC,uBAAuB;AAC7B,YAAA,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EACzD;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;QACxC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE;IACzB;AAEA;;AAEG;IACH,WAAW,CAAC,QAAQ,GAAG,IAAI,EAAA;;AAEzB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QAEzB,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,mBAAmB,EAAE;YAC5B;YACA,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,wBAAwB,EAAE;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;AACzC,YAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;;AAEvC,YAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;AACtC,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;QACtC;IACF;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CACxD,IAAI,CAAC,OAAO,EACZ,CAAC,IAAI,CAAC,gBAAgB,CACvB;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACrD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEA;;;;;;AAMG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,IAAI,EAAE;AAC3D,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CACpD,CAAC,MAAM,KACL,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,EAAE,GAAG,CAC/D;YACD,IAAI,aAAa,GAAG,CAAC,CAAC;AAAE,gBAAA,OAAO,aAAa;QAC9C;AACA,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC;IACzE;AAEA;;;;AAIK;AACL,IAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;IAC5C;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,OAAO,KAAK;IACd;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAoB,EAAA;;QAE5B,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,IAAI;AAC3D,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,GAAG,CAAC;YACT,KAAK,SAAS,CAAC;YACf,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,OAAO,KAAK;YACd,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,oBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;gBACjC;AACA,gBAAA,OAAO,KAAK;YACd,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBACpB;AACA,gBAAA,OAAO,KAAK;;AAEhB,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACH,IAAA,OAAO,CAAC,KAAoB,EAAA;;AAE1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE;AACpE,QAAA,IAAI,MAAM;AAEV,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAClB;YAEF,KAAK,GAAG;gBACN,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;gBAC/B;YAEF,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC;gBAEpB,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC;YAEF,KAAK,SAAS;AACZ,gBAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;oBAAE,IAAI,CAAC,WAAW,EAAE;AACvC,qBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;oBAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBAEtD,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC;YAEF,KAAK,WAAW;gBACd,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;oBACtD,IAAI,CAAC,WAAW,EAAE;qBACf,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;AAC7D,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC;gBAEtB,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC;YAEF,KAAK,KAAK;gBACR,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBAEpD,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC;;IAEN;;IAGA,sBAAsB,GAAA;QACpB,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAgB,QAAQ,EAAE,OAAO;AAClE,aAAA,IAAI,CACH,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAC3B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAExB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C;;IAGA,wBAAwB,GAAA;QACtB,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAgB,QAAQ,EAAE,SAAS;AACtE,aAAA,IAAI,CACH,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAC3B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAExB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD;AAEA;;;AAGG;IACH,cAAc,CAAC,MAAW,EAAE,YAAsB,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM;YAAE;AACjC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CACpC,CAAC,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC,GAAG,CAClE;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY;QAChC,IAAI,SAAS,EAAE;YACb,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;;YAGhE,UAAU,CAAC,MAAK;AACd,gBAAA,cAAc,CAAC,SAAS,CAAC,aAAa,EAAE;AACtC,oBAAA,UAAU,EAAE,WAAW;AACvB,oBAAA,KAAK,EAAE,SAAS;AACjB,iBAAA,CAAC;gBAEF,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;gBAC7D,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBAClD;gBACA,IAAI,YAAY,EAAE;AAChB,oBAAA,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE;gBACjC;YACF,CAAC,EAAE,CAAC,CAAC;QACP;IACF;AAEA;;;;AAIG;IACH,mBAAmB,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;;AAEzC,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa;QAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC;AACjE,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,qBAAqB,EAAE;AAElD,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AACzC,QAAA,MAAM,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,MAAM;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG;QAE3B,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,UAAU,GAAG,GAAG;QACtB,MAAM,mBAAmB,GAAG,GAAG;AAC/B,QAAA,IAAI,iBAAiB;AAErB,QAAA,IAAI,UAAU,IAAI,mBAAmB,EAAE;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;YAChC,iBAAiB,GAAG,mBAAmB;QACzC;AAAO,aAAA,IAAI,UAAU,IAAI,mBAAmB,EAAE;AAC5C,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B,iBAAiB,GAAG,mBAAmB;QACzC;AAAO,aAAA,IAAI,UAAU,GAAG,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChC,YAAA,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC,CAAA;QAC/D;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC,CAAA;QAC/D;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAA,EAAG,iBAAiB,CAAA,EAAA,CAAI,CAAC;IAC9E;AA5YW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,kBA4F1B,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5Fd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,wwBCjCtC,+oIA8HA,EAAA,MAAA,EAAA,CAAA,g4HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,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,EAAAA,+BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD7Fa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,+oIAAA,EAAA,MAAA,EAAA,CAAA,g4HAAA,CAAA,EAAA;;0BA6FhB;;0BACA,MAAM;2BAAC,eAAe;0FA3FZ,QAAQ,EAAA,CAAA;sBAApB;gBAMQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAG2B,UAAU,EAAA,CAAA;sBAArC,YAAY;uBAAC,YAAY;gBAKO,EAAE,EAAA,CAAA;sBAAlC,WAAW;uBAAC,SAAS;;sBAAG;gBAGgB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGM,YAAY,EAAA,CAAA;sBAAlD,WAAW;uBAAC,oBAAoB;gBAIxB,OAAO,EAAA,CAAA;sBAAf;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBAOQ,uBAAuB,EAAA,CAAA;sBAA/B;gBAOQ,eAAe,EAAA,CAAA;sBAAvB;gBAMQ,eAAe,EAAA,CAAA;sBAAvB;gBAES,oBAAoB,EAAA,CAAA;sBAA7B;gBAMS,MAAM,EAAA,CAAA;sBAAf;gBAMS,UAAU,EAAA,CAAA;sBAAnB;;;AErEH;;;;AAIG;AAOG,MAAO,qBAKX,SAAQ,qCAAqC,CAAA;AAoB7C,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;AAEA,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;;IAcA,IAAa,OAAO,CAAC,KAAsB,EAAA;;AAEzC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAErB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC;AACxB,aAAA,cAAc,CAAC,KAAK,EAAE,KAAK;AAC3B,aAAA,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC;;AAEvC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,yBAAyB,EAAE;AACtE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnE;;AAGA,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACpE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YAC5B;QACF;;AAGA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AACzB,aAAA,cAAc,CAAC,KAAK,EAAE,KAAK;AAC3B,aAAA,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc;YAAE;;QAGxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;IACxC;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;;AA2CA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE;IAC3D;AAcA,IAAA,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,GAAsB,EACtB,aAAqC,EAAA;AAE/C,QAAA,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC;QAPV,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,aAAa,GAAb,aAAa;AA1HzB;;AAEG;QACsC,IAAA,CAAA,KAAK,GAC5C,UAAU;AAUZ;;AAEG;QACM,IAAA,CAAA,IAAI,GAAsB,OAAO;;QAOjC,IAAA,CAAA,aAAa,GAAG,KAAK;;QAoCrB,IAAA,CAAA,YAAY,GAAG,EAAE;AAE1B;;;AAGG;QACM,IAAA,CAAA,yBAAyB,GAAG,IAAI;AAKzC;;;;;AAKG;QACM,IAAA,CAAA,oBAAoB,GAAG,IAAI;AAEpC;;;;AAIG;QACM,IAAA,CAAA,eAAe,GAAG,IAAI;AAE/B;;;;;AAKG;QACM,IAAA,CAAA,yBAAyB,GAAG,IAAI;AAEzC;;AAEG;AACO,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW;;QAQ/C,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAEhB,IAAA,CAAA,WAAW,GAAG,CAAC,CAAC;QAMhB,IAAA,CAAA,QAAQ,GAAkB,EAAmB;QAC5C,IAAA,CAAA,QAAQ,GAAoB,EAAE;IAWtC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,EAAE;AAChD,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY;;YAEhD,MAAM,gBAAgB,GACpB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI;;YAEzE,IAAI,UAAU,IAAI,gBAAgB,IAAI,IAAI,CAAC,yBAAyB,EAAE;gBACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtC;YACF;;YAEA,IAAI,CAAC,UAAU,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,yBAAyB,EAAE;AACtE,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACjE;YACF;QACF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;IAC1C;;AAGA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AACvE,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC;IAC7D;;;;;AAOA,IAAA,cAAc,CAAC,MAAS,EAAA;QACtB,IAAI,MAAM,CAAC,QAAQ;YAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;;;;;;AAQA,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;AAEA;;AAEG;IACH,4BAA4B,GAAA;QAC1B,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,KAAY,KAAI;gBACrB,IACE,IAAI,CAAC,QAAQ;AACb,oBAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EACpD;oBACA,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;gBACzC;YACF,CAAC;AACF,SAAA,CAAC;IACJ;IACA,6BAA6B,GAAA;QAC3B,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC;AAClE,YAAA,IAAI,EAAE,CAAC,KAAY,KAAI;gBACrB,IACE,IAAI,CAAC,QAAQ;AACb,oBAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EACpD;oBACA,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;gBAC1C;YACF,CAAC;AACF,SAAA,CAAC;IACJ;;;;AAMA;;;AAGG;AACK,IAAA,WAAW,CAAC,KAAQ,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1B;;IAGA,cAAc,GAAA;QACZ,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAEA;;;;AAIG;IACH,WAAW,CAAC,KAAK,GAAG,IAAI,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,4BAA4B,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,6BAA6B,EAAE;YACtC;QACF;QACA,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,SAAS,EAAE;IACtC;;AAIA;;;AAGG;AACH,IAAA,UAAU,CAAC,MAAW,EAAA;AACpB,QAAA,OAAO,MAAM;IACf;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,OAAO,KAAK;IACd;;AAIA;;;AAGG;AACH,IAAA,QAAQ,CAAC,MAAqB,EAAA;AAC5B,QAAA,OAAO,EAAE,SAAS,IAAI,MAAM,CAAC;IAC/B;AAjSW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,yEA0ItB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA1Id,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,6wBASK,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGb,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGP,WAAW,yECzDpD,oxJAoJA,EAAA,MAAA,EAAA,CAAA,gvJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD1Ga,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,oxJAAA,EAAA,MAAA,EAAA,CAAA,gvJAAA,CAAA,EAAA;;0BA0IhB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;qGAjI2B,kBAAkB,EAAA,CAAA;sBAArE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAGA,gBAAgB,EAAA,CAAA;sBAAjE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAGM,aAAa,EAAA,CAAA;sBAAlE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAOX,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGD,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAIM,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAOjB,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEY,OAAO,EAAA,CAAA;sBAAnB;gBAkCQ,YAAY,EAAA,CAAA;sBAApB;gBAMQ,yBAAyB,EAAA,CAAA;sBAAjC;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBAQQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAOQ,eAAe,EAAA,CAAA;sBAAvB;gBAQQ,yBAAyB,EAAA,CAAA;sBAAjC;gBAKS,cAAc,EAAA,CAAA;sBAAvB;gBA6ED,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;AExNnC;AAUM,MAAO,kCACX,SAAQ,yBAAyB,CAAA;AAajC,IAAA,WAAA,CAIY,cAA8B,EAChC,SAAoB,EACpB,OAAmB,EAAA;AAE3B,QAAA,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC;QAJ/B,IAAA,CAAA,cAAc,GAAd,cAAc;QAChB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;AART,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAW;IAW1C;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;;IAGQ,4BAA4B,GAAA;QAClC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO;AACnD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,KAAY,KAAI;gBACrB,IACE,IAAI,CAAC,QAAQ;oBACb,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AAClD,oBAAA,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAClE;AACA,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;gBACzC;YACF,CAAC;AACF,SAAA,CAAC;IACN;;IAGQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC/B,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;YAC/D;AACF,QAAA,CAAC,CAAC;IACN;;IAGQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,YAAY;AACZ,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;aAC9B,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,4BAA4B,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;AAEA;;;;;AAKG;AACK,IAAA,cAAc,CAAC,KAAsB,EAAA;AAC3C,QAAA,IAAI,KAAK,EAAE,GAAG,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;;QAEjC,IAAI,CAAC,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE;;QAErD,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE;IAC5C;AAEA;;;AAGG;IACM,WAAW,CAAC,QAAQ,GAAG,IAAI,EAAA;AAClC,QAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;AAE3B;;AAEG;QACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CACrB,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B,OAAO,EACP,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAA,EAAA,CAAI,CAC5D;IACH;AAzGW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,kBAiBnC,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAjBd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,wOH5B/C,+oIA8HA,EAAA,MAAA,EAAA,CAAA,wGAAA,EAAA,g4HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,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,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FGlGa,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAT9C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,cAM5B,KAAK,EAAA,QAAA,EAAA,+oIAAA,EAAA,MAAA,EAAA,CAAA,wGAAA,EAAA,g4HAAA,CAAA,EAAA;;0BAiBhB;;0BACA;;0BACA,MAAM;2BAAC,eAAe;0FAbhB,aAAa,EAAA,CAAA;sBAArB;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;;;ACXG,MAAO,2BACX,SAAQ,kBAAkB,CAAA;AAY1B,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa;IACnD;IAWA,WAAA,CACS,OAAmB,EAClB,SAAoB,EACD,SAAoB,EAGrC,cAA8B,EAC9B,GAAsB,EAAA;QAEhC,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,CAAC;QARvC,IAAA,CAAA,OAAO,GAAP,OAAO;QACN,IAAA,CAAA,SAAS,GAAT,SAAS;QACU,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;;QAff,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAMhB,IAAA,CAAA,UAAU,GAAG,KAAK;QAYhB,KAAK,CAAC,QAAQ,EAAE;IAClB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,KAAK;QAE/C,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEA;;;;AAIG;AAEH,IAAA,OAAO,CAAC,KAAoB,EAAA;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC3C,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;AAEA;;;;AAIG;IACK,SAAS,GAAA;;QAEf,UAAU,CAAC,MAAK;;AAEd,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,SAAS,CAAC,WAAW,CACxB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC3C,IAAI,CAAC,OAAO,CAAC,aAAa,CAC3B;AACD,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACxB;QACF,CAAC,EAAE,CAAC,CAAC;IACP;AAEA;;;;AAIG;IACK,oBAAoB,GAAA;QAC1B,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;;YAIrB,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,SAAS,EAAE;;AAGtC,YAAA,IAAI,CAAC,YAAY;gBACf,IAAI,CAAC,cAAc,EAAE,qBAAqB,EAAE,CAAC,MAAM,IAAI,EAAE,CAAA;AAE3D,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;;gBAGjB,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAEjC,gBAAA,MAAM,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AACzE,gBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC;YACtC;;AAAO,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;AAChC,QAAA,CAAC,CAAC;IACN;AAEA;;;;;AAKG;AACK,IAAA,cAAc,CAAC,KAAsB,EAAA;AAC3C,QAAA,IAAI,KAAK,EAAE,GAAG,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;;QAEjC,IAAI,CAAC,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE;;QAErD,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE;IAC5C;AAEA;;;AAGG;IACK,QAAQ,CAAC,KAAa,EAAE,aAAsB,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC;IACF;AApIW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,4HA+B5B,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA/Bd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,qRC3BxC,8sCAyCA,EAAA,MAAA,EAAA,CAAA,2bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDda,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,8sCAAA,EAAA,MAAA,EAAA,CAAA,2bAAA,CAAA,EAAA;;0BA+BhB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;yEA1BhB,aAAa,EAAA,CAAA;sBAArB;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;gBA0CD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;ME1DtB,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,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,mBAAmB,iBAX5B,+BAA+B;YAC/B,2BAA2B;AAC3B,YAAA,kCAAkC,CAAA,EAAA,OAAA,EAAA,CAE1B,YAAY,EAAE,iBAAiB,aAEvC,+BAA+B;YAC/B,2BAA2B;YAC3B,kCAAkC,CAAA,EAAA,CAAA,CAAA;+GAGzB,mBAAmB,EAAA,OAAA,EAAA,CAPpB,YAAY,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAO9B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,+BAA+B;wBAC/B,2BAA2B;wBAC3B,kCAAkC;AACnC,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;AAC1C,oBAAA,OAAO,EAAE;wBACP,+BAA+B;wBAC/B,2BAA2B;wBAC3B,kCAAkC;AACnC,qBAAA;AACF,iBAAA;;;MCEY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,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,kBAAkB,EAAA,YAAA,EAAA,CAXd,qBAAqB,EAAE,yBAAyB,aAE7D,YAAY;YACZ,oBAAoB;YACpB,mBAAmB;YACnB,iBAAiB;YACjB,cAAc,CAAA,EAAA,OAAA,EAAA,CAEN,qBAAqB,EAAE,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAG/C,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,kBAAkB,YAT3B,YAAY;YACZ,oBAAoB;YACpB,mBAAmB;YACnB,iBAAiB;YACjB,cAAc,CAAA,EAAA,CAAA,CAAA;;2FAKL,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;AAChE,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,oBAAoB;wBACpB,mBAAmB;wBACnB,iBAAiB;wBACjB,cAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;oBAC3D,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;MCcY,sBAAsB,CAAA;;IAQjC,IAAa,aAAa,CAAC,KAAgD,EAAA;AACzE,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;;AAG9B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;YACnC,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;;AAqBuC,IAAA,WAAW,CAAC,KAAU,EAAA;AAC3D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;;AAGA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY;IAC5B;;AAGA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,IAAI,QAAQ,EAAE;IAC7D;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO;AACL,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAAI,yBAAyB;AACzD,YAAA,QAAQ,EAAE,IAAI;SACf;IACH;;AAGA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS;IAC7C;AAUA,IAAA,WAAA,CACU,gBAAkC,EAClC,OAAmB,EACC,YAAmC,EACnC,SAA6B,EAAA;QAHjD,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,OAAO,GAAP,OAAO;QACa,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,SAAS,GAAT,SAAS;;QAnD9B,IAAA,CAAA,aAAa,GAAG,IAAI;;AASnB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAU;AAkCjD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAO;AAEhC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAW;IAOxC;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE;QAEzB,IAAI,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,WAAW,EAAE;;YACtC,IAAI,CAAC,kBAAkB,EAAE;IAChC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IAC5B;AAEA;;;;;AAKG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;aAC5B,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAC1B,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,EAChE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAEjC,aAAA,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,KACjC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CACvC;;AAGH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B;AAEA;;;;;AAKK;IACG,WAAW,GAAA;;QAEjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CACzD,2BAA2B,CAC5B;;QAED,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC;QAChE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC;QACzE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC;;AAErE,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC1B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/B,aAAA,SAAS,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjE;;IAGQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAChE,kCAAkC,CACnC;QACD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;IACtE;AAEA;;;;;;AAMG;IACK,UAAU,CAAC,cAAmB,EAAE,KAAa,EAAA;AACnD,QAAA,IAAI,CAAC,cAAc;YAAE;;AAErB,QAAA,MAAM,YAAY,GAChB,IAAI,CAAC,aAAa;AAClB,YAAA,CAAC,KAAK;AACN,YAAA,EACE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACpD,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAC/B;AACH,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACrC;aAAO,IAAI,YAAY,EAAE;YACvB,cAAc,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;QACrE;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;AAEvB,YAAA,IAAI,CAAC,YAAY,CAAC,yBAAyB,GAAG,KAAK;YACnD,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC9D,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,GAAG,KAAK,IAAI,EAAE,CAAA,CAAE;AACpD,YAAA,IAAI,CAAC,YAAY,CAAC,yBAAyB,GAAG,KAAK;AACnD,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,KAAK;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CACjC,SAAS,EACT,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CACnC;AACD,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAA,EAAG,KAAK,IAAI,EAAE,CAAA,CAAE,CAAC;QAC1E;IACF;AAEA;;;;AAIG;AACK,IAAA,aAAa,CAAC,OAAY,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,OAAO;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KACvB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,GAAG,KAAK,CACrD;IACH;8GAtMW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,qBAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,kBAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yDAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yDAAyD;AACnE,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;0BA6EI;;0BAAY;;0BACZ;;0BAAY;yCArEF,aAAa,EAAA,CAAA;sBAAzB;gBAYQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAGS,kBAAkB,EAAA,CAAA;sBAA3B;gBAGsC,WAAW,EAAA,CAAA;sBAAjD,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;ACzEvC;;AAEG;;;;"}
1
+ {"version":3,"file":"sebgroup-green-angular-src-v-angular-dropdown.mjs","sources":["../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.module.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.module.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.directive.ts","../../../../libs/angular/src/v-angular/dropdown/sebgroup-green-angular-src-v-angular-dropdown.ts"],"sourcesContent":["import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'\n\n@Component({\n selector: 'nggv-typeahead-highlight',\n templateUrl: './typeahead-highlight.component.html',\n styleUrls: ['./typeahead-highlight.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadHighlightComponent implements OnChanges {\n /** The text that is displayed in the dropdown list */\n @Input() textContent?: string\n /** The substring that should be highlighted within textContent */\n @Input() textToHighlight?: string\n\n prefix?: string // Substring before the match\n match?: string // The match\n suffix?: string // Substring after the match\n\n text = ''\n input = ''\n\n /**\n * Regexp of characters that are allowed in textContent without being found in textToHighlight\n * Allow whitespaces.\n * */\n allowedNonMatchingChars = new RegExp(/\\s/)\n\n ngOnChanges(changes: SimpleChanges) {\n const { textContent, textToHighlight } = changes\n if (textContent?.currentValue != null)\n this.text = `${textContent.currentValue}`\n if (textToHighlight?.currentValue != null)\n this.input = `${textToHighlight.currentValue}`\n this.updateValues()\n }\n\n private updateValues() {\n const splittedText = this.text.toLocaleLowerCase().split('')\n const splittedInput = this.input.toLocaleLowerCase().split('')\n\n const { start, end } = this.getHighlightedPart(splittedText, splittedInput)\n\n // If user input is not found within the textcontent, reset options and return.\n if (start === -1 || end === -1) {\n this.prefix = this.match = this.suffix = ''\n return\n }\n this.prefix = this.text.substring(0, start)\n this.match = this.text.substring(start, end)\n this.suffix = this.text.substring(end)\n }\n\n /**\n * Function that finds the start and end index of where the input is located within the text to display.\n * First occurence is returned. Allows for spaces to occur despite input not matching space.\n * Loops through each character in splittedText and when a char in splittedText equlas the first character of\n * splittedInput, evaluate wether it's match on the entire input.\n * - If it's => return indexes.\n * - If it's not => break out and check next char in outer loop.\n * @param splittedText the text content splitted in an array\n * @param splittedInput the input splitted in an array\n * @returns { start: number, end: number } Indexes of where the match starts and ends in the text displatyed\n */\n private getHighlightedPart(\n splittedText: string[],\n splittedInput: string[],\n ): { start: number; end: number } {\n let start = -1\n let end = -1\n\n for (let i = 0; i < splittedText.length; i++) {\n // If start and end have been set, break and return\n if (start > -1 || end > -1) break\n\n // If current char match first in input, try see if whole input match from that index\n if (splittedText[i] === splittedInput[0]) {\n let matches = 1\n for (let t = 1; t <= splittedText.length; t++) {\n // If match on last character of input, we're finished.\n if (matches === splittedInput.length) {\n start = i\n end = start + t\n break\n }\n if (splittedText[t + i] === splittedInput[matches]) matches++\n else if (this.allowedNonMatchingChars.test(splittedText[t + i]))\n continue // Ignore whitespace, continue\n else break // No match, break out of inner loop to check next char in text\n }\n }\n }\n return { start, end }\n }\n}\n","<ng-container *ngIf=\"!this.match\">{{ textContent }}</ng-container>\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\n<ng-container *ngIf=\"!!this.match\">\n {{ prefix || '' }}<span class=\"match\">{{ match }}</span\n >{{ suffix || '' }}\n</ng-container>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChildren,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { filter, fromEvent, Subject, Subscription, takeUntil } from 'rxjs'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n@Component({\n selector: 'nggv-dropdown-list',\n templateUrl: './dropdown-list.component.html',\n styleUrls: ['./dropdown-list.component.scss'],\n standalone: false,\n})\nexport class NggvDropdownListComponent implements OnInit, OnChanges {\n @Input() set expanded(state: boolean) {\n this.setExpanded(state)\n }\n get expanded(): boolean {\n return this._expanded\n }\n @Input() state: any\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n @Input() optionContentTpl: TemplateRef<OptionBase<any>> | undefined\n @Input() groupLabelTpl: TemplateRef<OptionBase<any>> | undefined\n\n /** @internal List of references to the option elements. */\n @ViewChildren('optionRefs') optionRefs:\n | QueryList<ElementRef<HTMLLIElement>>\n | undefined\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).nggv?.nextId()\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('attr.data-position') get positionAttr() {\n return this.dropdownPosition\n }\n\n @Input() options!: any[]\n\n @Input() textToHighlight?: string\n\n /**\n * Used to control if \"selectedValueChanged\" only should emit distinct changes, or each time a value is selected\n * When true, value is not emitted if there's no distinct change\n * When false, value is emitted every time an option is selected\n * */\n @Input() onlyEmitDistinctChanges = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * When true, the dropdown will automatically choose to open above or below the input\n * based on available space in the viewport, and will scale its height to fit if needed.\n */\n @Input() dynamicPosition = false\n\n @Output() selectedValueChanged = new EventEmitter<any>()\n\n /**\n * Emitted when the dropdown is closed by user interactions (e.g. Escape or Tab) or other immediate close triggers.\n * This notifies external consumers that the dropdown was closed as a result of a user action.\n */\n @Output() closed = new EventEmitter<void>()\n\n /**\n * Emitted after the dropdown has fully closed and internal cleanup has been performed.\n * Use this for post-close tasks that must run after subscriptions are torn down and resources released.\n */\n @Output() afterClose = new EventEmitter<void>()\n\n /** The current active option based on numeric index. */\n public activeIndex = -1\n\n scope: string | undefined\n\n // Indicates whether the dropdown list should be displayed below ('bottom') or above ('top') the input, based on available space.\n dropdownPosition: 'bottom' | 'top' = 'bottom'\n\n private dropdownUtils: DropdownUtils<string | null, string, any> =\n new DropdownUtils<string | null, string, any>()\n private _expanded = false\n private closed$ = new Subject<boolean>()\n public selectedValue?: Option<string, any>\n\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n protected onClickSubscription: Subscription | undefined\n /** Subscribe to to keyboard events only when list is open. */\n private onKeyDownSubscription: Subscription | undefined\n private onKeyUpSubscription: Subscription | undefined\n private _flattenedOptions: any[] = []\n\n constructor(\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer: Renderer2,\n private elRef: ElementRef,\n ) {\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n ngOnInit(): void {\n if (this.state)\n this.activeIndex = this.options.findIndex(\n (option) => option.key === this.state.key,\n )\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!!changes.state && !changes.state.firstChange)\n this.selectedValue = changes.state.currentValue\n if (!!changes.options?.currentValue?.length && this.expanded)\n this.refreshSelectedOption()\n }\n\n /**\n * Returns true if argument is an {@link OptionGroup}.\n * @param option the object to check.\n */\n isGroup(option: any): boolean {\n return 'options' in option\n }\n\n /** @internal */\n updateState(option: any, event: Event) {\n if (option.disabled) return\n\n if (\n !this.onlyEmitDistinctChanges ||\n !this.dropdownUtils.deepEqual(this.selectedValue, option)\n ) {\n this.selectedValue = option\n this.state = option\n this.selectedValueChanged.emit(option)\n }\n\n this.setExpanded(false)\n event.stopPropagation()\n }\n\n /**\n * @internal\n */\n setExpanded(expanded = true) {\n // update expanded state\n this._expanded = expanded\n\n if (expanded) {\n if (this.dynamicPosition) {\n this.setDropdownPosition()\n }\n this.refreshSelectedOption()\n this.subscribeToKeyUpEvents()\n this.subscribeToKeyDownEvents()\n } else {\n this.closed$.next(true)\n this.afterClose.emit()\n this.onClickSubscription?.unsubscribe()\n this.onKeyDownSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n // to trigger gc removal\n this.onKeyDownSubscription = undefined\n this.onKeyUpSubscription = undefined\n }\n }\n\n /**\n * @internal\n */\n refreshSelectedOption() {\n this._flattenedOptions = this.dropdownUtils.flattenOptions(\n this.options,\n !this.optionContentTpl,\n )\n this.activeIndex = this.getActiveIndex()\n this.state = this._flattenedOptions[this.activeIndex]\n this.scrollToResult(this.state)\n }\n\n /**\n * @internal\n * @returns The active index (number) if option is found, -1 otherwise.\n * - If a selectedValue exists that's not nullish and that options is found, return that index\n * - Else, return first non nullish index\n * - If none of the above criterias are met, -1 are returned\n */\n getActiveIndex(): number {\n if (!!this.selectedValue && this.selectedValue?.key != null) {\n const selectedIndex = this._flattenedOptions.findIndex(\n (option) =>\n option.key != null && option.key === this.selectedValue?.key,\n )\n if (selectedIndex > -1) return selectedIndex\n }\n return this._flattenedOptions.findIndex((option) => option.key != null)\n }\n\n /**\n * @internal\n * evaluates wether the HTML element overflows\n * @param elem The HTMLElement to evaluate\n * */\n isOverflow(elem: HTMLElement) {\n return elem.offsetWidth < elem.scrollWidth\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): any {\n return group\n }\n\n /**\n * @internal\n * Disables default events.\n * @param event fired containing which key was pressed.\n */\n onKeyDown(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (event.key === ' ' && !this.selectWithSpace) return true\n switch (event.key) {\n case ' ': // Space - placed here to ensure the dropdown-list closes after selecting using \"Space\"\n case 'ArrowUp': // Disable scrolling up\n case 'ArrowDown': // Disable scrolling down\n event.preventDefault()\n event.stopPropagation()\n return false\n case 'Enter': // Disable form submission and select the currently active value\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n const option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n }\n return false\n case 'Tab': // trigger dropdown to close (for typeahead)\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n this.setExpanded(false)\n this.closed.emit()\n }\n return false\n }\n return true\n }\n\n /**\n * @internal\n * Enter toggles the dropdown, home, end, and, arrows change the index.\n * Space selects the currently active option if `selectWithSpace` is true.\n * @param event fired containing which key was released.\n */\n onKeyUp(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (!this.expanded || (event.key === ' ' && !this.selectWithSpace)) return\n let option\n\n switch (event.key) {\n case 'Escape':\n this.setExpanded(false)\n this.closed.emit()\n break\n\n case ' ': // Space - select the currently chosen value\n option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n break\n\n case 'Home': // Move to the first option\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowUp': // Move up one step to the previous option\n if (this.activeIndex > 0) this.activeIndex--\n else if (this.activeIndex === 0)\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowDown': // Move down one step to the next option\n if (this._flattenedOptions.length > this.activeIndex + 1)\n this.activeIndex++\n else if (this.activeIndex === this._flattenedOptions.length - 1)\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'End': // Move to the last options\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n }\n }\n\n /** @internal */\n subscribeToKeyUpEvents() {\n this.onKeyUpSubscription = fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyUp(event))\n }\n\n /** @internal */\n subscribeToKeyDownEvents() {\n this.onKeyDownSubscription = fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyDown(event))\n }\n\n /**\n * Scrolls focused result into view with a specified offset.\n * @param key the result index which to scroll to.\n */\n scrollToResult(option: any, focusElement?: boolean) {\n if (!this.optionRefs || !option) return\n const optionRef = this.optionRefs.find(\n (li) => li.nativeElement.id === this.id + '-option-' + (option.id ?? option.key),\n )\n const offset = this.scrollOffset\n if (optionRef) {\n let delta = window.scrollY || document.documentElement.scrollTop\n\n // The list seems not to be visible at the time of scrolling, but this setTimeout \"hack\" makes it work...\n setTimeout(() => {\n scrollIntoView(optionRef.nativeElement, {\n scrollMode: 'if-needed',\n block: 'nearest',\n })\n\n delta -= window.scrollY || document.documentElement.scrollTop\n if (delta) {\n window.scrollBy(0, delta > 0 ? -offset : offset)\n }\n if (focusElement) {\n optionRef.nativeElement.focus()\n }\n }, 0)\n }\n }\n\n /**\n * Calculates available space above and below the dropdown input,\n * sets dropdownPosition ('top' or 'bottom') accordingly,\n * and dynamically sets the max-height of the dropdown list to fit the viewport.\n */\n setDropdownPosition() {\n const dropdown = this.elRef.nativeElement\n // dropdown trigger\n const dropdownInput = dropdown.parentElement\n const dropdownList = dropdown.querySelector('ul[role=\"listbox\"]')\n const rect = dropdownInput.getBoundingClientRect()\n\n const viewportHeight = window.innerHeight\n const spaceBelow = viewportHeight - rect.bottom\n const spaceAbove = rect.top\n\n const MARGIN = 10\n const MIN_HEIGHT = 100\n const DROPDOWN_MAX_HEIGHT = 500\n let maxDropdownHeight\n\n if (spaceBelow >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceAbove >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'top'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceBelow > spaceAbove) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = Math.max(spaceBelow - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n } else {\n this.dropdownPosition = 'top'\n maxDropdownHeight = Math.max(spaceAbove - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n }\n\n this.renderer.setStyle(dropdownList, 'max-height', `${maxDropdownHeight}px`)\n }\n}\n","<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + (state?.id ?? state?.key) : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + (option.id ?? option.key)\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [nggvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + (option.id ?? option.key)\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n Self,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subscription } from 'rxjs'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n OptionGroup,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n/**\n * A dropdown allows the user to select an option from a list.\n * Dropdowns enables users to make a quick selection of the available options for a specific entry.\n * https://designlibrary.sebgroup.com/components/component-dropdown\n */\n@Component({\n selector: 'nggv-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n standalone: false\n})\nexport class NggvDropdownComponent<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n extends NggvBaseControlValueAccessorComponent\n implements OnDestroy, OnChanges\n{\n /** Custom template for displaying options and groups. */\n @ContentChild('selectedTpl', { read: TemplateRef }) selectedContentTpl:\n | TemplateRef<OptionBase<T>>\n | undefined\n @ContentChild('optionTpl', { read: TemplateRef }) optionContentTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n @ContentChild('groupLabelTpl', { read: TemplateRef }) groupLabelTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /**\n * Sets the displayed size of the dropdown.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n /** Text shown before an option is selected. */\n @Input() placeholder?: string\n /** Specific value for aria-label. If not provided, label/labelTpl will be used. */\n @Input() ariaLabel?: string\n /** If the dropdown should close when scrolling the viewport. Default: false */\n @Input() closeOnScroll = false\n /** List of {@link Option} and {@link OptionGroup} listed when dropdown is expanded. */\n @Input() set options(value: OptionBase<T>[]) {\n // update options\n this._options = value\n // already has a null/undefined key\n const nullishOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == null)\n // if the dropdown is optional, add a null value to deselect option\n if (!this.required && !nullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n }\n\n // set default value and emit if there is only one option\n if (value.length === 1 && this.required && this.selectOnSingleOption) {\n const onlyOption = this.dropdownUtils.flattenOptions(value, false)[0]\n this.updateModel(onlyOption)\n return\n }\n\n // don't update local state if we shouldn't control nullish value and we cant find the selected value amongst the options\n const matchingOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == this.ngControl?.value)\n if (!this.allowControlNullishOption && !matchingOption) return\n\n // Update local state\n this.writeValue(this.ngControl?.value)\n }\n\n get options(): OptionBase<T>[] {\n return this._options\n }\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n /**\n * Allow this component to add/ remove nullish options based on wether the control is required or not\n * Defaults to true.\n */\n @Input() allowControlNullishOption = true\n\n /** Text to highlight in option */\n @Input() textToHighlight?: string\n\n /**\n * If only one option exists in options[], default is to select it.\n * This input can be used to alter that behaviour so it doesn't automatically\n * select a value if it's the only one.\n * Defaults to true.\n */\n @Input() selectOnSingleOption = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * Used to determine which changes should be handled by the dropdown.\n * If set to false, all changes will be handled by the dropdown.\n * If set to true, only changes that are distinct from the current value will be handled.\n * Defaults to true.\n */\n @Input() onlyHandleDistinctChanges = true\n\n /**\n * Emits changes of the expanded state of the dropdown\n */\n @Output() expandedChange = new EventEmitter<boolean>()\n\n /** @internal nullish option. */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.placeholder ?? '\\u00A0' }\n }\n\n /** The current expanded state of the dropdown options. */\n public expanded = false\n /** The current option selected based on numeric index. */\n public activeIndex = -1\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n private onClickSubscription: Subscription | undefined\n /** Subscribe if dropdown expanded to listen to scroll outside to close dropdown. */\n private onScrollSubscription: Subscription | undefined\n\n public keyEvent: KeyboardEvent = {} as KeyboardEvent\n private _options: OptionBase<T>[] = []\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n protected dropdownUtils: DropdownUtils<K, V, T>,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required?.currentValue !== undefined) {\n const isRequired = changes.required.currentValue\n // remove nullish option\n const hasNullishOption =\n this.dropdownUtils.flattenOptions(this._options, false)[0]?.key == null\n // if required, remove nullish option\n if (isRequired && hasNullishOption && this.allowControlNullishOption) {\n this._options = this._options.slice(1)\n return\n }\n // if not required, add nullish option\n if (!isRequired && !hasNullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n return\n }\n }\n }\n\n ngOnDestroy(): void {\n this.onClickSubscription?.unsubscribe()\n this.onScrollSubscription?.unsubscribe()\n }\n\n /** @internal override to correctly set state from form value */\n writeValue(value: any): void {\n const options = this.dropdownUtils.flattenOptions(this._options, false)\n this.state = options.find((option) => option.key === value)\n }\n\n // ----------------------------------------------------------------------------\n // EVENTS\n // ----------------------------------------------------------------------------\n\n /** @internal */\n onSelectChange(option: T) {\n if (option.disabled) return\n this.updateModel(option)\n this.setExpanded(false)\n }\n\n // /**\n // * @internal\n // * Enter toggles the dropdown, home, end, and, arrows change the index.\n // * @param event fired containing which key was released.\n // */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n this.keyEvent = event\n }\n\n /**\n * Closes the dropdown on click outside.\n */\n subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n subscribeToOutsideScrollEvent() {\n this.onScrollSubscription = fromEvent(document, 'scroll').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onScrollSubscription?.unsubscribe()\n }\n },\n })\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /**\n * Set the dropdown value to given option.\n * @param value the dropdown option to select.\n */\n private updateModel(value: T) {\n this.state = value\n this.onChange(value.key)\n }\n\n /** Toggle the expanded state of the dropdown options. */\n toggleDropdown() {\n this.setExpanded(!this.expanded)\n this.cdr.detectChanges()\n }\n\n /**\n * Set the expanded state of the dropdown options. If true the options are shown below the field.\n * Activate on click event to be able to close dropdown on click outside.\n * @param state the expanded state which to set.\n */\n setExpanded(state = true) {\n this.expanded = state\n this.expandedChange.emit(this.expanded)\n if (this.expanded) {\n this.subscribeToOutsideClickEvent()\n if (this.closeOnScroll) {\n this.subscribeToOutsideScrollEvent()\n }\n }\n if (!this.expanded) this.onTouched()\n }\n\n /* TYPE CASTS */\n\n /**\n * Typecast anything to an {@link Option}.\n * @param option the object to typecast.\n */\n castOption(option: any): T {\n return option\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): OptionGroup<T> {\n return group\n }\n\n /* TYPE CHECKS */\n\n /**\n * Returns true if argument is an {@link Option}.\n * @param option the object to check.\n */\n isOption(option: OptionBase<T>): option is OptionGroup<T> {\n return !('options' in option)\n }\n}\n","<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper dropdown-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n [onlyEmitDistinctChanges]=\"onlyHandleDistinctChanges\"\n [selectWithSpace]=\"selectWithSpace\"\n [dynamicPosition]=\"true\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n","import {\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subject, takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownListComponent } from '../../dropdown-list/dropdown-list.component'\n\n// Use dropdownList template and combine stylesheets\n@Component({\n selector: 'nggv-typeahead-dropdown-list',\n templateUrl: '../../dropdown-list/dropdown-list.component.html',\n styleUrls: [\n '../typeahead-dropdown-list/typeahead-dropdown-list.component.scss',\n '../../dropdown-list/dropdown-list.component.scss',\n ],\n standalone: false\n})\nexport class NggvTypeaheadDropdownListComponent\n extends NggvDropdownListComponent\n implements OnInit, OnDestroy\n{\n @Input() hostComponent!: NggvInputComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n private _destroy$ = new Subject<boolean>()\n\n constructor(\n @SkipSelf()\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer2: Renderer2,\n private element: ElementRef,\n ) {\n super(translocoScope, renderer2, element)\n }\n\n ngOnInit(): void {\n this.handleSelectedValueChanges()\n this.handleFocusChanges()\n }\n\n ngOnDestroy(): void {\n this._destroy$.next(true)\n this._destroy$.complete()\n }\n\n /** @Internal Subscribe to click outside dropdownList and input to close dropdownList */\n private subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click')\n .pipe(takeUntil(this._destroy$))\n .subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.element.nativeElement.contains(event.target) &&\n !this.hostComponent.inputRef?.nativeElement.contains(event.target)\n ) {\n this.setExpanded(false)\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n\n /** @Internal Update state of the host-input to reflect the selected value */\n private handleSelectedValueChanges() {\n this.selectedValueChanged\n .pipe(takeUntil(this._destroy$))\n .subscribe((selected) => {\n if (this.hostComponent.inputRef) {\n this.hostComponent.state = `${this.formatSelected(selected)}`\n }\n })\n }\n\n /** @Internal Expand the dropdown when input receives focus. If no state, set empty string in input */\n private handleFocusChanges() {\n this.hostComponent.nggvFocus\n .asObservable()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.state) this.hostComponent.nggvInput.emit('')\n this.setExpanded(true)\n this.subscribeToOutsideClickEvent()\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n //If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n *\n * @param expanded boolean to set if dropdown is expanded\n */\n override setExpanded(expanded = true) {\n super.setExpanded(expanded)\n\n /**\n * Makes the typeahead dropdown as wide as the host component\n */\n this.renderer2.setStyle(\n this.element.nativeElement,\n 'width',\n `${this.hostComponent.element.nativeElement.offsetWidth}px`,\n )\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../../dropdown.component'\n\n@Component({\n selector: 'nggv-typeahead-input',\n templateUrl: './typeahead-input.component.html',\n styleUrls: ['./typeahead-input.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadInputComponent\n extends NggvInputComponent\n implements OnInit, OnDestroy\n{\n /** Reference to the host dropdown */\n @Input() hostComponent!: NggvDropdownComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n get dropdownButton(): HTMLElement {\n return this.hostComponent.inputRef?.nativeElement\n }\n\n /** Boolean to indicate wether the dropdown is expanded or not, to apply appropriate styling */\n expanded = false\n\n /** Used to determine the height of the inputin html */\n buttonHeight?: number\n\n /** @internal Used to determine wether the input has been moved or not */\n inputMoved = false\n\n constructor(\n public element: ElementRef,\n private renderer2: Renderer2,\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr, element)\n super.ngOnInit()\n }\n\n ngOnInit() {\n this.autocomplete = 'off'\n this.debounceTime = 0\n this.hostComponent.selectOnSingleOption = false\n\n this.handleExpandedChange()\n }\n\n /**\n * @internal\n * Allow space to be inputted as text\n * @param event fired containing which key was released.\n */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (event.code === 'Space' && this.expanded) {\n event.preventDefault()\n }\n }\n\n /**\n * @internal\n * First time the dropdown is expanded, move the input sp it becomes a child of the dropdown button\n * to better reflect semantics and styling.\n */\n private moveInput() {\n // Workaround to execute code in setTimeout due to hooks management etc.\n setTimeout(() => {\n // Only move if parent dropdown is found\n if (this.dropdownButton) {\n this.renderer2.appendChild(\n this.dropdownButton.querySelector('button'),\n this.element.nativeElement,\n )\n this.inputMoved = true\n }\n }, 0)\n }\n\n /**\n * @internal\n * When dropdown is expanded, focus on the input. If a value is selected, set it in the input.\n * When the dropdown is collapsed, empty the input from text.\n */\n private handleExpandedChange() {\n this.hostComponent.expandedChange\n .pipe(takeUntil(this._destroy$))\n .subscribe((state) => {\n this.expanded = state\n\n // Calling this function from onInit caused issues when DOM has not fully been initialized because of\n // different CSS used to hide (but not remove) from DOM\n if (!this.inputMoved) this.moveInput()\n\n // Get the height of the parent button so the input can be explicitly set to the same height since it's absolutely positioned\n this.buttonHeight =\n this.dropdownButton?.getBoundingClientRect().height || 32 // Default to 2em;\n\n if (this.expanded) {\n // Weird workaround for setting focus. Didn't set focus, but wrapping in setTimeout solved it.\n // See suggestion here: https://github.com/ionic-team/stencil/issues/3772#issuecomment-1292599609\n setTimeout(() => this.setFocus())\n // Format and interpolate result since return type can be other than string from the formatter\n const formattedValue = `${this.formatSelected(this.hostComponent.state)}`\n this.setInput(formattedValue, false)\n } else this.setInput('', true)\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n // If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n * Sets the input programmatically instead of native HTML input event.\n * @param input\n */\n private setInput(input: string, triggerFilter: boolean) {\n this.state = input\n if (triggerFilter) {\n this.onChange(this.state)\n this.inputChange$.next(this.state)\n }\n }\n}\n","<ng-container>\n <div\n class=\"input-wrapper\"\n [ngClass]=\"{ expanded: expanded, collapsed: !expanded }\"\n [ngStyle]=\"{ 'height.px': buttonHeight }\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- INPUT FIELD -->\n <div class=\"input-group\">\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [attr.email]=\"email\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvTypeaheadDropdownListComponent } from './typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadHighlightComponent } from './typeahead-highlight/typeahead-highlight.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@NgModule({\n declarations: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n imports: [CommonModule, NggvTooltipModule],\n exports: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n})\nexport class NggvTypeaheadModule {}\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvDropdownListComponent } from './dropdown-list/dropdown-list.component'\nimport { NggvDropdownComponent } from './dropdown.component'\nimport { NggvTypeaheadModule } from './typeahead/typeahead.module'\n\n@NgModule({\n declarations: [NggvDropdownComponent, NggvDropdownListComponent],\n imports: [\n CommonModule,\n NggCoreWrapperModule,\n NggvTypeaheadModule,\n NggvTooltipModule,\n NggvI18nModule,\n ],\n exports: [NggvDropdownComponent, NggvDropdownListComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDropdownModule {}\n","import {\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Host,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewContainerRef,\n} from '@angular/core'\nimport {\n distinctUntilChanged,\n from,\n OperatorFunction,\n Subject,\n Subscription,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs'\n\nimport { Option, OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../dropdown.component'\nimport { NggvTypeaheadDropdownListComponent } from '../typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@Directive({\n selector: 'nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]',\n standalone: true,\n})\nexport class NggvTypeaheadDirective<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n implements OnInit, OnDestroy\n{\n /** Function that filter the inputvalue */\n @Input() set nggvTypeahead(value: OperatorFunction<string, T[]> | undefined) {\n this.typeaheadFunction = value\n\n // If inputsubscription already exists, unsubscribe and subscribe again\n if (this.inputSubscription$) {\n this.inputSubscription$?.unsubscribe()\n this.inputSubscription$ = undefined\n this.handleInputChanges()\n }\n }\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n /** Allow option to be unselected in the dropdown even if it is required. Defaults to true */\n @Input() allowUnselect = true\n\n /** Custom label for the unselect option */\n @Input() unselectLabel?: string\n\n /** Custom label for the empty option */\n @Input() emptyOptionLabel?: string\n\n /** Emits the entered string the user has written in the input */\n @Output() filterPhraseChange = new EventEmitter<string>()\n\n /** Forward text inputs to apply the filter function*/\n @HostListener('nggvInput', ['$event']) onNggvInput(event: any) {\n this.inputValue$.next(event)\n }\n\n /** Helper to the determine if the host is nggv-drodpown or nggv-input*/\n get hostIsDropdown() {\n return !!this.hostDropdown\n }\n\n /** Predefined options */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.unselectLabel || '\\u00A0' }\n }\n\n get emptyOption(): OptionBase<any> {\n return {\n key: null,\n label: this.emptyOptionLabel || 'label.nomatchingoptions',\n disabled: true,\n }\n }\n\n /** Name of the component. nggv-dropdown if NggvDropdownComponent or nggv-input if NggvInputComponent */\n get localName() {\n return this.element.nativeElement.localName\n }\n\n dropdownListComponent!: ComponentRef<NggvTypeaheadDropdownListComponent>\n inputComponent!: ComponentRef<NggvTypeaheadInputComponent>\n\n private typeaheadFunction?: OperatorFunction<string, T[]>\n private inputValue$ = new Subject<any>()\n private inputSubscription$?: Subscription\n private onDestroy$ = new Subject<boolean>()\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private element: ElementRef,\n @Optional() @Host() private hostDropdown: NggvDropdownComponent,\n @Optional() @Host() private hostInput: NggvInputComponent,\n ) {}\n\n ngOnInit() {\n this.handleInputChanges()\n\n if (this.hostIsDropdown) this.createInput()\n else this.createDropdownList()\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next(true)\n this.onDestroy$.complete()\n }\n\n /**\n * @internal\n * Core functionality of typeahead. Emits input, then filters the result based on the supplied function\n * If directive is applied on nggv-input, manually show or hide options in the list.\n * If directive is applied on nggv-dropdown, let the dropdown itself choose when to open or close\n */\n private handleInputChanges() {\n this.inputSubscription$ = this.inputValue$\n .pipe(\n takeUntil(this.onDestroy$),\n distinctUntilChanged(),\n tap((inputValue) => this.filterPhraseChange.emit(inputValue)),\n this.typeaheadFunction ? this.typeaheadFunction : () => from([]),\n withLatestFrom(this.inputValue$),\n )\n .subscribe(([filteredValues, input]) =>\n this.setOptions(filteredValues, input),\n )\n\n // Trigger the pipe when this function have been called\n this.inputValue$.next('')\n }\n\n /**\n * @internal\n * Creates a nggv-input if the host itself is not a text-input\n * Set styles to not display the input when closed\n * Trigger filtering when changes occur in the field\n * */\n private createInput() {\n // Create the input component\n this.inputComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadInputComponent,\n )\n // Forward necessary info to component\n this.inputComponent.setInput('hostComponent', this.hostDropdown)\n this.inputComponent.setInput('selectedFormatter', this.selectedFormatter)\n this.inputComponent.setInput('resultFormatter', this.resultFormatter)\n // Listen to value changes\n this.inputComponent.instance.nggvInput\n .pipe(takeUntil(this.onDestroy$))\n .subscribe((inputValue) => this.inputValue$.next(inputValue))\n }\n\n /** @internal Creates a nggv-dropdown-list if the host itself is a nggv-input */\n private createDropdownList() {\n this.dropdownListComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadDropdownListComponent,\n )\n this.dropdownListComponent.setInput('hostComponent', this.hostInput)\n }\n\n /**\n * @internal Sets the options the user can select.\n * If the host is a nggv-dropdown, utilize the dropdown itself to display the options\n * If the host is a nggv-input, use the created nggv-dropdown-list to displaye the options\n * @param filteredValues The options to display in the dropdown\n * @param emptyInput If the input is empty\n */\n private setOptions(filteredValues: T[], input: string) {\n if (!filteredValues) return\n // Conditionally add empty or nullish option if it's allowed, the input is empty and does not already contain nullish\n const allowNullish =\n this.allowUnselect &&\n !input &&\n !(\n Object.keys(filteredValues[0] ?? {}).includes('key') &&\n filteredValues[0]?.key == null\n )\n if (filteredValues.length === 0) {\n filteredValues = [this.emptyOption]\n } else if (allowNullish) {\n filteredValues = [this.defaultNullishOption].concat(filteredValues)\n }\n\n if (this.hostIsDropdown) {\n // Add nullish option when no input is written (or when dropdown is epanded and has a selection)\n this.hostDropdown.allowControlNullishOption = false\n this.hostDropdown.options = this.formatOptions(filteredValues)\n this.hostDropdown.textToHighlight = `${input || ''}`\n this.hostDropdown.onlyHandleDistinctChanges = false\n this.hostDropdown.selectWithSpace = false\n this.hostDropdown.detectChanges()\n return\n }\n\n if (!this.hostIsDropdown) {\n this.dropdownListComponent.setInput(\n 'options',\n this.formatOptions(filteredValues),\n )\n this.dropdownListComponent.setInput('textToHighlight', `${input || ''}`)\n }\n }\n\n /**\n * @internal Formats the available options to display in the dropdown list\n * @param options The selected value\n * @returns The formatted value\n */\n private formatOptions(options: T[]): OptionBase<any>[] {\n if (!options) return []\n if (!this.resultFormatter) return options\n return options.map((value) =>\n value?.label ? this.resultFormatter?.(value) : value,\n )\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.NggvTypeaheadHighlightComponent","i3","i4","i5","i6.NggvDropdownListComponent","i2","i3.NggvTypeaheadHighlightComponent","i1.NggvDropdownComponent"],"mappings":"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"}