@sebgroup/green-angular 6.3.0 → 6.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/src/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +20 -34
- package/esm2022/src/v-angular/dropdown/dropdown.component.mjs +25 -126
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +3 -3
- package/esm2022/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +20 -34
- package/esm2022/v-angular/dropdown/dropdown.component.mjs +25 -126
- package/esm2022/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +3 -3
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +41 -155
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-v-angular.mjs +39 -153
- package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
- package/package.json +14 -14
- package/src/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +5 -24
- package/src/v-angular/dropdown/dropdown.component.d.ts +5 -40
- package/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +5 -24
- package/v-angular/dropdown/dropdown.component.d.ts +5 -40
|
@@ -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})\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})\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 /**\n * @deprecated This attribute is no longer used. The dropdown position is now handled by Angular CDK Overlay.\n * Will be removed in a future release.\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 * @deprecated This input is no longer used. The dropdown now always chooses position dynamically.\n * Will be removed in a future release.\n */\n @Input() dynamicPosition = false\n\n /**\n * Stores the bounding rectangle of the dropdown trigger element,\n * used for positioning the dropdown list overlay.\n */\n @Input() triggerRect?: DOMRect\n\n /**\n * Controls whether the dropdown list should have a vertical margin.\n * Set to false when the dropdown list is rendered in a CDK overlay and spacing is handled by overlay offset.\n * Set to true when the dropdown list is used standalone or in other micro frontends, so it maintains visual spacing.\n * Defaults to true.\n */\n @Input() useMargin = true\n\n @Output() selectedValueChanged = new EventEmitter<any>()\n\n @Output() closed = new EventEmitter<void>()\n\n /** The current active option based on numeric index. */\n public activeIndex = -1\n\n scope: string | undefined\n\n /**\n * @deprecated This attribute is no longer used. The dropdown position is now handled by Angular CDK Overlay.\n * Will be removed in a future release.\n */\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 setTimeout(() => {\n this.setDropdownHeight()\n }, 0)\n this.refreshSelectedOption()\n this.subscribeToKeyUpEvents()\n this.subscribeToKeyDownEvents()\n } else {\n this.closed$.next(true)\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 * and dynamically sets the max-height of the dropdown list to fit the viewport.\n */\n setDropdownHeight() {\n const dropdown = this.elRef.nativeElement\n const dropdownList = dropdown.querySelector('ul[role=\"listbox\"]')\n const rect = this.triggerRect\n\n if (!rect || !dropdownList) return\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 maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceAbove >= DROPDOWN_MAX_HEIGHT) {\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceBelow > spaceAbove) {\n maxDropdownHeight = Math.max(spaceBelow - MARGIN, MIN_HEIGHT)\n } else {\n maxDropdownHeight = Math.max(spaceAbove - MARGIN, MIN_HEIGHT)\n }\n\n this.renderer.setStyle(dropdownList, 'max-height', `${maxDropdownHeight}px`)\n this.renderer.setStyle(dropdownList, 'overflow-y', 'auto')\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 [class.use-margin]=\"useMargin\"\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","\n\n\nimport '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js';\n\n\n\nimport { ConnectedPosition, Overlay, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, OnChanges, OnDestroy, Optional, Output, Self, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco';\nimport { fromEvent, Subscription } from 'rxjs';\n\n\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor';\nimport { DropdownUtils, Option, OptionBase, OptionGroup } from '@sebgroup/green-angular/src/v-angular/core';\n\n\n\n\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})\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 /** Reference to the dropdown list template used for rendering the dropdown in an overlay. */\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>\n // Used for positioning and sizing the dropdown overlay relative to the trigger button.\n @ViewChild('toggleButton', { read: ElementRef }) toggleButton!: ElementRef\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 /** 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 * If true (default), the dropdown list will close when any scrollable ancestor is scrolled.\n * If false, the dropdown list will reposition itself instead of closing.\n */\n @Input() closeDropdownListOnScroll = 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 /**\n * Stores the bounding rectangle of the dropdown trigger element,\n * used for positioning the dropdown list overlay.\n */\n public triggerRect: DOMRect | undefined = undefined\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 /** Subscribe to get dropdown width size changes for a dropdown list width to match. */\n private resizeSubscription: Subscription | undefined\n /** Subscription to dropdown list overlay detachments. */\n private overlayDetachSubscription: Subscription | undefined\n\n public keyEvent: KeyboardEvent = {} as KeyboardEvent\n private _options: OptionBase<T>[] = []\n /** Reference to the currently attached dropdown list overlay. Used for opening/closing and positioning. */\n private overlayRef?: OverlayRef\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 protected overlay: Overlay,\n protected vcr: ViewContainerRef,\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 this.resizeSubscription?.unsubscribe()\n this.overlayDetachSubscription?.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\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.openDropdownOverlay()\n this.subscribeToOutsideClickEvent()\n } else {\n this.closeDropdownOverlay()\n this.onTouched()\n }\n }\n\n /**\n * Opens the dropdown overlay by detaching any existing overlay reference,\n * attaching a new overlay, updating its width, and setting up listeners for overlay detachments.\n * This method ensures the dropdown overlay is properly initialized and displayed.\n */\n openDropdownOverlay() {\n this.detachOldOverlayRef()\n this.attachNewOverlayRef()\n this.updateOverlayWidth()\n this.listenOverlayDetachments()\n }\n\n detachOldOverlayRef(): void {\n if (this.overlayRef) {\n this.overlayRef.detach()\n }\n }\n\n attachNewOverlayRef(): void {\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.toggleButton)\n .withPositions(this.getDropdownListPositionsArray())\n .withPush(false) // Prevent overlay from overlapping the trigger\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.getScrollStrategy(),\n })\n\n // Get trigger rect and pass to dropdown-list\n this.triggerRect = this.toggleButton.nativeElement.getBoundingClientRect()\n\n this.overlayRef.attach(new TemplatePortal(this.dropdownTemplate, this.vcr))\n }\n\n updateOverlayWidth(): void {\n // sets initial width to match trigger element\n this.setOverlayWidth()\n\n // Listen for window resize and update overlay width\n this.resizeSubscription = fromEvent(window, 'resize').subscribe(() => {\n this.setOverlayWidth()\n })\n }\n\n // used to catch when overlay is detached after scroll with list expanded\n listenOverlayDetachments() {\n if (this.overlayRef) {\n this.overlayDetachSubscription = this.overlayRef\n .detachments()\n .subscribe(() => {\n if (this.expanded) {\n this.setExpanded(false)\n }\n })\n }\n }\n\n getDropdownListPositionsArray(): ConnectedPosition[] {\n return [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 8, // 0.5rem gap below the trigger\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8, // 0.5rem gap above the trigger\n },\n ]\n }\n\n getScrollStrategy(): ScrollStrategy {\n return this.closeDropdownListOnScroll\n ? this.overlay.scrollStrategies.close()\n : this.overlay.scrollStrategies.reposition()\n }\n\n setOverlayWidth() {\n if (this.overlayRef && this.toggleButton) {\n const buttonWidth = this.toggleButton.nativeElement.offsetWidth\n const pane = this.overlayRef.overlayElement as HTMLElement\n\n pane.style.width = `${buttonWidth}px`\n }\n }\n\n closeDropdownOverlay() {\n this.overlayRef?.detach()\n this.resizeSubscription?.unsubscribe()\n this.overlayDetachSubscription?.unsubscribe()\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}","<!-- 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 #toggleButton\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 <ng-template #dropdownTemplate>\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 [triggerRect]=\"triggerRect\"\n [useMargin]=\"false\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </ng-template>\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})\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})\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","i6","i7.NggvDropdownListComponent","i2","i3.NggvTypeaheadHighlightComponent","i1.NggvDropdownComponent"],"mappings":"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"}
|
|
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})\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})\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 @Output() closed = 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.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})\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 /** 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 this.subscribeToOutsideScrollEvent()\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})\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})\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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"}
|