@testgorilla/tgo-ui 7.5.1 → 7.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-autocomplete-v2.mjs","sources":["../../../components/autocomplete-v2/autocomplete-v2-utils.ts","../../../components/autocomplete-v2/autocomplete-v2-filter.service.ts","../../../components/autocomplete-v2/autocomplete-v2.model.ts","../../../components/autocomplete-v2/autocomplete-v2-value-manager.ts","../../../components/autocomplete-v2/infinite-scroll.directive.ts","../../../components/autocomplete-v2/autocomplete-overflow-detect.directive.ts","../../../components/autocomplete-v2/autocomplete-v2.component.ts","../../../components/autocomplete-v2/autocomplete-v2.component.html","../../../components/autocomplete-v2/testgorilla-tgo-ui-components-autocomplete-v2.ts"],"sourcesContent":["type Item = Record<string, unknown>;\n\nexport class AutocompleteV2Utils {\n static transformDisplayValue<T extends Item>(value: T | null | undefined, textField: string): string {\n return (value?.[textField] as string | undefined) ?? '';\n }\n\n static filterItems<T extends Item>(items: T[], inputValue: string, textField: string): T[] {\n return items.filter(item => {\n const text = item[textField];\n return typeof text === 'string' && text.toLowerCase().includes(inputValue.toLowerCase());\n });\n }\n\n static filterGroupedItems<T extends Item>(\n groups: { groupName: string; items: T[] }[],\n inputValue: string,\n textField: string\n ): { groupName: string; items: T[]; filteredItems: T[] }[] {\n return groups\n .map(group => ({\n ...group,\n filteredItems: AutocompleteV2Utils.filterItems(group.items, inputValue, textField),\n }))\n .filter(group => group.filteredItems.length > 0);\n }\n\n static excludeSuggestions<T extends Item>(items: T[], excludeItems: T[], valueField: string): T[] {\n if (!valueField || !excludeItems.length) return items ?? [];\n return (items ?? []).filter(item => !excludeItems.find(exclude => exclude[valueField] === item[valueField]));\n }\n\n static createValueItem<T extends Item>(value: T | string, textField: string, valueField: string): T {\n if (typeof value === 'string') {\n return { [textField]: value, [valueField]: value } as T;\n }\n return value;\n }\n\n static findDuplicate<T extends Item>(items: T[], selectedValue: T, lookupKey: string): T | undefined {\n return items.find(v => (lookupKey ? v[lookupKey] === selectedValue[lookupKey] : v === selectedValue));\n }\n\n static isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n }\n}\n","import { Injectable, OnDestroy, signal } from '@angular/core';\nimport { BehaviorSubject, map, Observable, ReplaySubject, startWith } from 'rxjs';\nimport { AutocompleteGroup } from './autocomplete-v2.component';\nimport { AutocompleteV2Utils } from './autocomplete-v2-utils';\n\n@Injectable()\nexport class AutocompleteFilterService<T extends Record<string, any> = Record<string, any>> implements OnDestroy {\n // Configuration\n readonly textField = signal('');\n\n // Data sources (fed by component via effects)\n readonly flatItems = signal<T[]>([]);\n readonly groupsList = signal<AutocompleteGroup<T>[]>([]);\n readonly suggestions = signal<T[]>([]);\n\n // Search state\n readonly searchText$ = new BehaviorSubject<string>('');\n readonly userInput$ = new ReplaySubject<string>(1);\n readonly isSearching$: Observable<boolean> = this.searchText$.pipe(map(v => !!v.trim()));\n\n // Dynamic filtering\n private readonly dynamicSource$ = new BehaviorSubject<T[] | null>(null);\n private isDynamicMode = false;\n\n // Filtered results\n filteredItems$: Observable<T[] | null> = this.searchText$.pipe(\n startWith(''),\n map(inputValue => {\n if (!inputValue.length) return null;\n return AutocompleteV2Utils.filterItems<T>(this.flatItems(), inputValue, this.textField());\n })\n );\n\n readonly filteredGroupedItems$: Observable<any[] | null> = this.searchText$.pipe(\n startWith(''),\n map(inputValue => {\n if (!inputValue.length || !this.groupsList().length) return null;\n return AutocompleteV2Utils.filterGroupedItems<T>(this.groupsList(), inputValue, this.textField());\n })\n );\n\n readonly filteredSuggestions$: Observable<T[] | null> = this.searchText$.pipe(\n map(inputValue =>\n inputValue.length ? AutocompleteV2Utils.filterItems<T>(this.suggestions(), inputValue, this.textField()) : null\n )\n );\n\n search(text: string, minChars: number): void {\n this.userInput$.next(text);\n if (text.length >= minChars) {\n this.searchText$.next(text);\n } else {\n this.searchText$.next('');\n this.userInput$.next('');\n }\n }\n\n clearSearch(): void {\n this.searchText$.next('');\n this.userInput$.next('');\n }\n\n ngOnDestroy(): void {\n this.searchText$.complete();\n this.userInput$.complete();\n this.dynamicSource$.complete();\n }\n\n setDynamicResults(list: T[] | null, loading: boolean): void {\n if ((list !== null || loading) && !this.isDynamicMode) {\n this.isDynamicMode = true;\n this.filteredItems$ = this.dynamicSource$;\n }\n if (list !== null) {\n this.dynamicSource$.next(list);\n } else if (loading) {\n this.dynamicSource$.next([]);\n }\n }\n}\n","export type AutocompleteType = 'single' | 'multi' | 'large';\n\nexport enum Autocomplete {\n SINGLE = 'single',\n MULTI = 'multi',\n LARGE = 'large',\n}\n\nexport enum DropdownVariation {\n AUTOCOMPLETE = 'autocomplete',\n DROPDOWN = 'dropdown',\n}\n\nexport type DropdownVariationType = `${DropdownVariation}`;\n\nexport type AutocompleteSize = 'small' | 'medium';\n","import { computed, Injectable, signal } from '@angular/core';\nimport { AutocompleteV2Utils } from './autocomplete-v2-utils';\nimport { Autocomplete, AutocompleteType } from './autocomplete-v2.model';\n\n@Injectable()\nexport class AutocompleteValueManager<T extends Record<string, any> = Record<string, any>> {\n // ── Configuration signals (set by the component via effects) ────────────────\n readonly type = signal<AutocompleteType>('multi');\n readonly textField = signal<string>('');\n readonly valueField = signal<string>('');\n readonly compareWith = signal<((a: T, b: T) => boolean) | undefined>(undefined);\n\n // ── Value signal ─────────────────────────────────────────────────────────────\n readonly value = signal<T | T[] | null>(null);\n\n // ── Derived ──────────────────────────────────────────────────────────────────\n readonly isSingle = computed(() => this.type() === (Autocomplete.SINGLE as AutocompleteType));\n\n readonly displayValue = computed(() => {\n const type = this.type();\n const value = this.value();\n const textField = this.textField();\n const isSingle = type === (Autocomplete.SINGLE as AutocompleteType);\n const isEmpty = !value || (AutocompleteV2Utils.isArray(value) && !value.length);\n\n if (isEmpty) return '';\n\n if (isSingle) {\n const display = AutocompleteV2Utils.isArray(value) ? value[0] : value;\n return AutocompleteV2Utils.transformDisplayValue(display, textField);\n }\n\n // Multi with values — space placeholder (tags are visible instead)\n return ' ';\n });\n\n // ── CVA callbacks ────────────────────────────────────────────────────────────\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: (value: T | T[] | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: () => void = () => {};\n\n registerOnChange(fn: (value: T | T[] | null) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n notifyChange(): void {\n this.onChangeFn(this.value());\n }\n\n markAsTouched(): void {\n this.onTouchedFn();\n }\n\n writeValue(v: T | T[] | null): void {\n if (v == null) {\n this.value.set(this.isSingle() ? null : []);\n } else {\n this.value.set(v);\n }\n }\n\n // ── Selection ─────────────────────────────────────────────────────────────────\n addValue(newValue: T): void {\n if (!this.isSingle() && !this.value()) {\n this.value.set([]);\n }\n\n const compareWith = this.compareWith();\n const currentArray = AutocompleteV2Utils.isArray(this.value()) ? (this.value() as T[]) : [];\n const foundDuplicate = compareWith\n ? currentArray.find((v: T) => compareWith(v, newValue))\n : AutocompleteV2Utils.findDuplicate<T>(currentArray, newValue, this.textField());\n\n if (!this.isSingle()) {\n this.value.set(\n foundDuplicate\n ? currentArray.filter((v: T) => (compareWith ? !compareWith(v, foundDuplicate) : v !== foundDuplicate))\n : [...currentArray, newValue]\n );\n } else {\n this.value.set(newValue);\n }\n }\n\n /**\n * Removes `option` from the value array.\n * Returns the found item (so the caller can deselect the mat-option), or undefined if not found.\n */\n removeValue(option: T): T | undefined {\n const compareWith = this.compareWith();\n const currentValue = AutocompleteV2Utils.isArray(this.value()) ? (this.value() as T[]) : [];\n const foundValue = currentValue.find((v: T) => (compareWith ? compareWith(v, option) : v === option));\n\n if (foundValue) {\n this.value.set(currentValue.filter((v: T) => (compareWith ? !compareWith(v, option) : v !== option)));\n }\n\n return foundValue;\n }\n\n clear(): void {\n this.value.set(AutocompleteV2Utils.isArray(this.value()) ? [] : null);\n }\n}\n","import { DestroyRef, inject, Injectable, OnDestroy } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { filter, map, Subscription, throttleTime } from 'rxjs';\n\n@Injectable()\nexport class InfiniteScrollDirective implements OnDestroy {\n private viewport: CdkVirtualScrollViewport | null = null;\n private scrollSub: Subscription | null = null;\n private destroyRef = inject(DestroyRef);\n\n private scrollListener = (event: Event): void => {\n const target = event.target as Element | null;\n const trigger = this.panelTrigger;\n if (!trigger) return;\n\n const isNotAutocompleteScroll =\n !target?.id?.includes('mat-autocomplete-') &&\n !(target?.parentElement as Element | null)?.id?.includes('mat-autocomplete-') &&\n !target?.classList?.contains('mat-mdc-autocomplete-trigger');\n\n if (trigger.panelOpen && isNotAutocompleteScroll) {\n trigger.closePanel();\n }\n };\n\n enabled = false;\n closeOnScroll = false;\n panelTrigger: MatAutocompleteTrigger | null = null;\n onBottomReached: (() => void) | null = null;\n\n attachViewport(viewport: CdkVirtualScrollViewport | undefined): void {\n this.detachViewport();\n if (!viewport) return;\n this.viewport = viewport;\n\n if (this.enabled) {\n this.scrollSub = viewport\n .elementScrolled()\n .pipe(\n map(() => viewport.measureScrollOffset('bottom')),\n filter(offset => offset < viewport.getViewportSize() * 0.2),\n throttleTime(200),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.onBottomReached?.();\n });\n }\n }\n\n detachViewport(): void {\n this.scrollSub?.unsubscribe();\n this.scrollSub = null;\n this.viewport = null;\n }\n\n scrollToTop(): void {\n if (this.viewport) {\n this.viewport.scrollToIndex(0);\n this.viewport.checkViewportSize();\n }\n }\n\n startCloseOnScroll(): void {\n if (this.closeOnScroll) {\n window.addEventListener('scroll', this.scrollListener, true);\n }\n }\n\n ngOnDestroy(): void {\n this.detachViewport();\n window.removeEventListener('scroll', this.scrollListener, true);\n }\n}\n","import { AfterViewInit, Directive, ElementRef, inject, input, NgZone, OnDestroy, signal } from '@angular/core';\n\n@Directive({\n selector: '[uiAutocompleteOverflowDetect]',\n standalone: true,\n exportAs: 'autocompleteOverflowDetect',\n})\nexport class AutocompleteOverflowDetectDirective implements AfterViewInit, OnDestroy {\n measureContainer = input<HTMLElement | undefined>(undefined);\n itemSelector = input('.value-tag');\n reserveWidth = input(100);\n\n visibleCount = signal(Infinity);\n overflowCount = signal(0);\n hasMeasured = signal(false);\n tagMaxWidth = signal<number | null>(null);\n\n private resizeObserver: ResizeObserver | null = null;\n private rafId: number | null = null;\n private readonly el = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n\n ngAfterViewInit(): void {\n // Self-measure when the directive enters the DOM (e.g., after @if condition becomes true)\n this.measure();\n }\n\n setupObserver(containerSelector: string): void {\n const parentContainer = (this.el.nativeElement as HTMLElement).closest(containerSelector);\n if (!parentContainer || typeof ResizeObserver === 'undefined') return;\n\n this.resizeObserver = new ResizeObserver(() => {\n this.ngZone.run(() => this.measure());\n });\n\n this.resizeObserver.observe(parentContainer);\n }\n\n measure(): void {\n const container = this.measureContainer();\n if (!container) return;\n\n this.rafId = requestAnimationFrame(() => {\n const infix = container.closest('.mat-mdc-form-field-infix') as HTMLElement;\n if (!infix) return; // Can't measure yet — stay hidden until next attempt\n\n const tags: HTMLElement[] = Array.from(container.querySelectorAll(this.itemSelector()));\n if (!tags.length) {\n this.visibleCount.set(Infinity);\n this.hasMeasured.set(true);\n this.overflowCount.set(0);\n return;\n }\n\n // Measure actual icon widths (clear button + chevron) that share the form field space\n const formField = container.closest('mat-form-field') as HTMLElement;\n let iconsWidth = 0;\n if (formField) {\n formField.querySelectorAll('.remove-selected, .arrow-state').forEach((icon: Element) => {\n iconsWidth += icon.getBoundingClientRect().width;\n });\n }\n\n const inputReserve = 48;\n const counterWidth = 52;\n const availableWidth = infix.getBoundingClientRect().width - inputReserve - iconsWidth;\n let totalWidth = 0;\n let visibleCount = tags.length;\n\n for (let i = 0; i < tags.length; i++) {\n totalWidth += tags[i].getBoundingClientRect().width;\n const remainingTags = tags.length - (i + 1);\n const spaceForCounter = remainingTags > 0 ? counterWidth : 0;\n\n if (totalWidth + spaceForCounter > availableWidth && i > 0) {\n visibleCount = i;\n break;\n }\n }\n\n const total = container.querySelectorAll(this.itemSelector()).length;\n const visible = Math.min(visibleCount, total);\n const overflow = Math.max(0, total - visible);\n\n // Compute max width for each tag so wide tags truncate with ellipsis\n // Single tag: full available width. Multiple visible: account for counter width.\n const padding = overflow >= 10 ? 16 : 8;\n this.tagMaxWidth.set(\n visible === 1 ? availableWidth - padding : availableWidth - (overflow > 0 ? counterWidth : 0) - padding\n );\n\n this.visibleCount.set(visibleCount);\n this.hasMeasured.set(true);\n this.overflowCount.set(overflow);\n });\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n }\n }\n}\n","/* eslint-disable no-underscore-dangle */\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n DoCheck,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n NgZone,\n OnDestroy,\n output,\n signal,\n untracked,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n ApplicationTheme,\n IKeyboardEvent,\n IncludesPipe,\n PreventInputDirective,\n SelectTextDirective,\n TransformItemPipe,\n UiTranslatePipe,\n} from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';\nimport { TagComponentModule } from '@testgorilla/tgo-ui/components/tag';\nimport { ValidationErrorModule } from '@testgorilla/tgo-ui/components/validation-error';\nimport { AutocompleteFilterService } from './autocomplete-v2-filter.service';\nimport { AutocompleteV2Utils } from './autocomplete-v2-utils';\nimport { AutocompleteValueManager } from './autocomplete-v2-value-manager';\nimport {\n Autocomplete,\n AutocompleteSize,\n AutocompleteType,\n DropdownVariation,\n DropdownVariationType,\n} from './autocomplete-v2.model';\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\nimport { AutocompleteOverflowDetectDirective } from './autocomplete-overflow-detect.directive';\n\nexport interface AutocompleteGroup<T extends Record<string, any> = Record<string, any>> {\n groupName: string;\n items: T[];\n}\n\n@Component({\n selector: 'ui-autocomplete-v2',\n templateUrl: './autocomplete-v2.component.html',\n styleUrls: ['./autocomplete-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatAutocompleteModule,\n MatChipsModule,\n MatFormFieldModule,\n MatInputModule,\n TagComponentModule,\n IconComponentModule,\n SpinnerComponentModule,\n CdkVirtualScrollViewport,\n CdkVirtualForOf,\n CdkFixedSizeVirtualScroll,\n PreventInputDirective,\n UiTranslatePipe,\n TransformItemPipe,\n IncludesPipe,\n SelectTextDirective,\n AutocompleteOverflowDetectDirective,\n ValidationErrorModule,\n MatTooltipModule,\n ],\n host: {\n '[attr.theme]': 'applicationTheme',\n },\n providers: [AutocompleteValueManager, AutocompleteFilterService, InfiniteScrollDirective],\n})\nexport class AutocompleteV2Component<T extends Record<string, any> = Record<string, any>>\n implements ControlValueAccessor, AfterViewInit, DoCheck, OnDestroy\n{\n // ── Inputs ──────────────────────────────────────────────────────────────────\n itemsList = input<T[]>([]);\n suggestionsList = input<T[]>([]);\n groupsList = input<AutocompleteGroup<T>[]>([]);\n disabled = input(false);\n allowAdd = input(true);\n textField = input('');\n valueField = input('');\n label = input('');\n placeholder = input('');\n type = input<AutocompleteType>('multi');\n minCharactersSearch = input(3);\n variant = input.required<DropdownVariationType>();\n showBottomContent = input(true);\n required = input<boolean | undefined>(undefined);\n virtualScroll = input(false, { transform: booleanAttribute });\n compareWith = input<((a: T, b: T) => boolean) | undefined>(undefined);\n dropdownPanelClass = input('');\n closeOnScroll = input(false);\n size = input<AutocompleteSize>('medium');\n allowUserInput = input(true);\n clearable = input(true);\n maxLength = input<number | undefined>(undefined);\n dynamicFilterLoading = input(false);\n dynamicFilteredList = input<T[] | null>(null);\n infiniteScroll = input(false);\n hasMoreOptionsForInfiniteScroll = input(true);\n itemValue = input<T | T[] | null>(null);\n formErrorConfig = input<Record<string, string>>({});\n errors = input<string[]>([]);\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n selectionChange = output<T | T[]>();\n searchTextChange = output<string>();\n blur = output<void>();\n focus = output<void>();\n scrollViewportBottomReached = output<void>();\n scrollViewportBottomReachedFiltered = output<void>();\n\n // ── ViewChild ───────────────────────────────────────────────────────────────\n @ViewChild('formField') formFieldElement: ElementRef<HTMLElement>;\n @ViewChild('tagContainer') tagContainer: ElementRef<HTMLElement>;\n @ViewChild('measureEl') protected measureElRef?: ElementRef<HTMLElement>;\n @ViewChild('overflow') overflowDir?: AutocompleteOverflowDetectDirective;\n @ViewChild('trigger') autocomplete: MatAutocompleteTrigger;\n @ViewChild(CdkVirtualScrollViewport, { static: false }) set cdkViewport(viewport: CdkVirtualScrollViewport) {\n // Ensure enabled is set before attaching (ViewChild resolves before ngAfterViewInit)\n this.scrollManager.enabled = this.infiniteScroll();\n this.scrollManager.attachViewport(viewport);\n }\n @ViewChild('autocomplete') matAutocomplete: MatAutocomplete;\n @ViewChild('matInput') matInput: ElementRef<HTMLInputElement>;\n\n // ── Injected services ──────────────────────────────────────────────────────\n protected readonly valueManager = inject(AutocompleteValueManager<T>);\n protected readonly filterService = inject(AutocompleteFilterService<T>);\n private readonly scrollManager = inject(InfiniteScrollDirective);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngZone = inject(NgZone);\n public readonly ngControl = inject(NgControl, { optional: true, self: true });\n protected readonly applicationTheme: ApplicationTheme =\n inject<ApplicationTheme>('CANOPYUI_DEFAULT_APPLICATION_THEME' as any, { optional: true }) ?? 'light';\n\n // ── Internal state ──────────────────────────────────────────────────────────\n protected inputValue = signal<string>('');\n protected isInputFocus = signal(false);\n protected autocompleteType = Autocomplete;\n /** Flat list for default (ungrouped) rendering and virtual scroll */\n protected flatItemsList = computed(() => {\n const suggestions = this.suggestionsList();\n const valField = this.valueField();\n const flat = AutocompleteV2Utils.excludeSuggestions<T>(this.itemsList(), suggestions, valField);\n const grouped = this.groupsList().flatMap(g =>\n AutocompleteV2Utils.excludeSuggestions<T>(g.items, suggestions, valField)\n );\n return [...flat, ...grouped];\n });\n\n /** Grouped list — only used when isGrouped is true */\n protected groupedItemsList = computed(() => {\n const suggestions = this.suggestionsList();\n const valField = this.valueField();\n return this.groupsList().map(group => ({\n groupName: group.groupName,\n items: AutocompleteV2Utils.excludeSuggestions<T>(group.items, suggestions, valField),\n }));\n });\n\n protected _isDisabled = signal(false);\n\n protected translationContext = 'AUTOCOMPLETE.';\n protected readonly utils = AutocompleteV2Utils;\n protected keyboardFocused = signal<boolean>(false);\n protected isAlreadyAdded = computed(() => {\n const compareWith = this.compareWith();\n const val = this.valueManager.value();\n const input = this.inputValue();\n if (!input || input === ' ') return false;\n const valArray = AutocompleteV2Utils.isArray(val) ? val : [];\n return !!(compareWith\n ? valArray.find((v: T) => compareWith(v, input as unknown as T))\n : AutocompleteV2Utils.findDuplicate<T>(valArray, input as unknown as T, this.textField()));\n });\n\n protected showClearButton = computed(() => {\n const type = this.type();\n const val = this.valueManager.value();\n\n if (type === (Autocomplete.SINGLE as AutocompleteType)) {\n return this.clearable() && (val?.length || (val ? !!Object.keys(val).length : false));\n }\n return val && val.length > 1;\n });\n\n protected safeErrors = computed(() => this.errors()?.filter(Boolean) ?? []);\n\n private controlInvalid = signal(false);\n\n protected hasError = computed(() => {\n if (this.ngControl) {\n return this.controlInvalid();\n }\n return this.safeErrors().length > 0;\n });\n\n protected hiddenItemsTooltip = computed(() => {\n const value = this.valueManager.value();\n const visibleCount = this.overflowDir?.visibleCount() ?? Infinity;\n if (!AutocompleteV2Utils.isArray(value)) return '';\n const tf = this.textField();\n return value\n .slice(visibleCount)\n .map(item => (tf ? item[tf] : item))\n .join('\\n');\n });\n\n constructor() {\n // Assign valueAccessor manually to avoid circular DI\n // (providing NG_VALUE_ACCESSOR + injecting NgControl creates a cycle)\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n effect(() => {\n this.filterService.setDynamicResults(this.dynamicFilteredList(), this.dynamicFilterLoading());\n });\n\n effect(() => {\n this._isDisabled.set(this.disabled());\n });\n\n effect(() => this.valueManager.type.set(this.type()));\n effect(() => this.valueManager.textField.set(this.textField()));\n effect(() => this.valueManager.valueField.set(this.valueField()));\n effect(() => this.valueManager.compareWith.set(this.compareWith()));\n\n effect(() => this.filterService.textField.set(this.textField()));\n effect(() => this.filterService.flatItems.set(this.flatItemsList()));\n effect(() => this.filterService.groupsList.set(this.groupsList()));\n effect(() => this.filterService.suggestions.set(this.suggestionsList()));\n\n effect(() => {\n const v = this.itemValue();\n // In CVA mode, writeValue() owns the value — itemValue should not override it\n if (this.ngControl) {\n if (isDevMode() && v !== null) {\n console.warn(\n '[ui-autocomplete-v2] [itemValue] is set alongside a form control. ' + 'Use ngModel or formControl instead.'\n );\n }\n return;\n }\n this.valueManager.value.set(AutocompleteV2Utils.isArray(v) ? v : v ? [v] : []);\n untracked(() => {\n this.inputValue.set(this.valueManager.displayValue());\n });\n this.cdr.markForCheck();\n });\n\n effect(() => {\n this.valueManager.value(); // track value changes\n untracked(() => {\n if (this.type() !== (Autocomplete.LARGE as AutocompleteType)) {\n this.overflowDir?.measure();\n }\n });\n });\n }\n\n /**\n * Used to mark component view as dirty when touched programmatically with markAsTouched/markAllAsTouched or errors\n * to display validation errors that might happen (e.g. required)\n */\n\n ngDoCheck(): void {\n if (this.ngControl) {\n const invalid = !!(this.ngControl.invalid && this.ngControl.touched);\n if (this.controlInvalid() !== invalid) {\n this.controlInvalid.set(invalid);\n }\n if (this.ngControl.touched || this.ngControl.errors) {\n this.cdr.markForCheck();\n }\n }\n }\n\n ngAfterViewInit(): void {\n // Set default hover color for the autocomplete panel (overlay is outside component scope)\n if (!document.body.style.getPropertyValue('--ui-autocomplete-option-color')) {\n document.body.style.setProperty('--ui-autocomplete-option-color', '#FFF2FC');\n }\n\n if (this.type() !== (Autocomplete.LARGE as AutocompleteType)) {\n this.overflowDir?.setupObserver('.input-container');\n }\n\n this.scrollManager.enabled = this.infiniteScroll();\n this.scrollManager.closeOnScroll = this.closeOnScroll();\n this.scrollManager.panelTrigger = this.autocomplete;\n this.scrollManager.onBottomReached = () => this.onScrollBottom();\n this.scrollManager.startCloseOnScroll();\n\n this.focusMonitor\n .monitor(this.matInput)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(origin =>\n this.ngZone.run(() => {\n this.keyboardFocused.set(origin === 'keyboard');\n })\n );\n\n this.matInput.nativeElement.onkeydown = this.onKeydown.bind(this);\n }\n\n ngOnDestroy(): void {\n this.scrollManager.ngOnDestroy();\n this.focusMonitor.stopMonitoring(this.matInput);\n if (this.matInput?.nativeElement) {\n this.matInput.nativeElement.onkeydown = null;\n }\n }\n\n registerOnChange(fn: any): void {\n this.valueManager.registerOnChange(fn);\n }\n\n registerOnTouched(fn: any): void {\n this.valueManager.registerOnTouched(fn);\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled.set(isDisabled);\n this.cdr.markForCheck();\n }\n\n writeValue(value: T | T[] | null): void {\n // Eagerly sync config so displayValue() computes correctly even if\n // constructor effects haven't run yet (e.g. first writeValue from a\n // FormControl with an initial value).\n this.valueManager.type.set(this.type());\n this.valueManager.textField.set(this.textField());\n this.valueManager.valueField.set(this.valueField());\n this.valueManager.compareWith.set(this.compareWith());\n\n this.valueManager.writeValue(value);\n this.inputValue.set(this.valueManager.displayValue());\n this.cdr.markForCheck();\n }\n\n protected get isGrouped(): boolean {\n return this.groupsList().length > 0;\n }\n\n protected onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n const inputValue = event.option.value as T;\n const itemValue = AutocompleteV2Utils.createValueItem<T>(inputValue, this.textField(), this.valueField());\n this.valueManager.addValue(itemValue);\n\n queueMicrotask(() => {\n if (this.type() !== (this.autocompleteType.SINGLE as AutocompleteType)) {\n // Multi: clear input so tags are visible while focused\n this.inputValue.set('');\n } else {\n this.inputValue.set(this.valueManager.displayValue());\n }\n this.cdr.markForCheck();\n });\n\n this.onUpdate();\n this.valueManager.markAsTouched();\n }\n\n protected onOptionRemoved(option: T): void {\n setTimeout(() => this.autocomplete.closePanel(), 0);\n const foundValue = this.valueManager.removeValue(option);\n\n if (foundValue) {\n this.matAutocomplete.options.forEach(matOption => {\n const vf = this.valueField();\n if (vf && matOption.value?.[vf] === foundValue[vf]) {\n matOption.deselect();\n }\n });\n }\n\n if (!this.valueManager.value()?.length) {\n this.inputValue.set('');\n }\n\n this.onUpdate();\n this.valueManager.markAsTouched();\n }\n\n protected onInputChange(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.filterService.search(text, this.minCharactersSearch());\n if (text.length >= this.minCharactersSearch()) {\n this.searchTextChange.emit(text);\n }\n }\n\n protected onClear(): void {\n this.inputValue.set('');\n this.valueManager.clear();\n this.onUpdate();\n this.matAutocomplete?.options.forEach(option => option.deselect());\n this.valueManager.markAsTouched();\n }\n\n protected onBlur(): void {\n setTimeout(() => {\n this.filterService.clearSearch();\n this.isInputFocus.set(false);\n this.inputValue.set(this.valueManager.displayValue());\n this.valueManager.markAsTouched();\n this.blur.emit();\n this.cdr.markForCheck();\n }, 0);\n }\n\n protected onPanelOpened(): void {\n this.scrollManager.scrollToTop();\n }\n\n protected onScrollBottom(): void {\n if (this.filterService.searchText$.value) {\n this.scrollViewportBottomReachedFiltered.emit();\n } else {\n this.scrollViewportBottomReached.emit();\n }\n }\n\n protected onFocus(): void {\n this.isInputFocus.set(true);\n const val = this.inputValue();\n if (typeof val === 'string' && val.match(/^\\s+/gm)) {\n this.inputValue.set(val.trimStart());\n }\n this.focus.emit();\n }\n\n private onUpdate(): void {\n this.filterService.clearSearch();\n this.valueManager.notifyChange();\n const val = this.valueManager.value();\n if (val !== null) {\n this.selectionChange.emit(val);\n }\n }\n\n protected get isDropdown(): boolean {\n return this.variant() === (DropdownVariation.DROPDOWN as DropdownVariationType);\n }\n\n protected onChevronClick(autocomplete: MatAutocomplete): void {\n if (autocomplete.isOpen) {\n setTimeout(() => {\n this.autocomplete.closePanel();\n }, 0);\n }\n }\n\n protected trackByFn = (index: number, value: string) => value;\n\n protected trackByItem = (_index: number, item: T) => {\n const vf = this.valueField();\n return vf ? item?.[vf] : item;\n };\n\n onKeydown($event: KeyboardEvent) {\n const optionHeight = 48;\n\n if ($event.key === (IKeyboardEvent.HOME as string)) {\n this.matAutocomplete._keyManager.setFirstItemActive();\n } else if ($event.key === (IKeyboardEvent.END as string)) {\n this.matAutocomplete._keyManager.setLastItemActive();\n } else if ($event.key === (IKeyboardEvent.PAGE_DOWN as string)) {\n this.matAutocomplete._keyManager.setNextItemActive();\n this.matAutocomplete._keyManager.setNextItemActive();\n this.matAutocomplete._keyManager.setNextItemActive();\n } else if ($event.key === (IKeyboardEvent.PAGE_UP as string)) {\n this.matAutocomplete._keyManager.setPreviousItemActive();\n this.matAutocomplete._keyManager.setPreviousItemActive();\n this.matAutocomplete._keyManager.setPreviousItemActive();\n }\n\n this.matAutocomplete._setScrollTop((this.matAutocomplete._keyManager.activeItemIndex ?? 0) * optionHeight);\n }\n\n protected getVirtualScrollHeight(itemCount: number): number {\n const itemHeight = 48;\n const maxHeight = 200;\n const minHeight = 48;\n\n const calculatedHeight = itemCount * itemHeight;\n\n return Math.min(Math.max(calculatedHeight, minHeight), maxHeight);\n }\n}\n","<ng-container>\n <div class=\"autocomplete-wrapper\" [ngClass]=\"{ disabled: _isDisabled() }\">\n <mat-form-field\n [color]=\"hasError() ? 'warn' : 'accent'\"\n [appearance]=\"'outline'\"\n [ngClass]=\"{\n 'large-size': type() === autocompleteType.LARGE,\n 'hide-bottom-content': !showBottomContent(),\n 'keyboard-focused': keyboardFocused(),\n 'has-label': !!label(),\n }\"\n >\n @if (label()) {\n <mat-label\n >{{ label() }}\n @if (required()) {\n <span>*</span>\n }\n </mat-label>\n }\n <div #formField class=\"input-container\">\n @if (textField() ? $any(valueManager.value())?.[textField()] : $any(valueManager.value()) === inputValue()) {\n <span style=\"position: absolute; left: -9999px\" aria-live=\"polite\">{{\n ('SELECTED' | uiTranslate | async) + ' ' + inputValue()\n }}</span>\n }\n\n <input\n #trigger=\"matAutocompleteTrigger\"\n #matInput\n [attr.maxlength]=\"maxLength() !== null && maxLength() !== undefined ? maxLength() : null\"\n [uiPreventInput]=\"!allowUserInput()\"\n [disabled]=\"_isDisabled()\"\n [ngClass]=\"{\n 'unset-margin': valueManager.value() && type() === autocompleteType.LARGE,\n 'no-caret': !allowUserInput(),\n }\"\n (blur)=\"onBlur()\"\n (focusin)=\"onFocus()\"\n [attr.aria-label]=\"\n (translationContext + 'SELECTED' | uiTranslate | async) +\n ' ' +\n (valueManager.value() | transformItem: textField() : true)\n \"\n matInput\n [placeholder]=\"valueManager.value() && valueManager.value()!.length ? '' : placeholder()\"\n [type]=\"'text'\"\n [matAutocomplete]=\"autocomplete\"\n (input)=\"onInputChange($event)\"\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"inputValue.set($event)\"\n />\n <!-- Hidden measurement container: always in DOM, renders ALL tags for width measurement -->\n @if (type() !== autocompleteType.SINGLE && utils.isArray(valueManager.value())) {\n <div class=\"selected-items measurement-container\" #measureEl>\n @for (valueItem of $any(valueManager.value()); track valueItem; let i = $index) {\n <ui-tag\n class=\"value-tag\"\n [id]=\"'measure-tag-' + i\"\n [label]=\"valueItem | transformItem: textField()\"\n [allowClose]=\"true\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-tag>\n }\n </div>\n }\n\n @if (\n (type() === autocompleteType.LARGE && valueManager.value()) ||\n (!(inputValue() && isInputFocus()) && valueManager.value() && type() !== autocompleteType.SINGLE)\n ) {\n <!-- Visible container: only renders tags that fit. Hidden until first measurement to prevent flash. -->\n <div\n class=\"selected-items\"\n #tagContainer\n uiAutocompleteOverflowDetect\n #overflow=\"autocompleteOverflowDetect\"\n [measureContainer]=\"measureElRef?.nativeElement\"\n [class.measured]=\"\n type() === autocompleteType.LARGE || type() === autocompleteType.SINGLE || overflow.hasMeasured()\n \"\n >\n @if (size() === 'small' && valueManager.value()!.length > 1) {\n <div class=\"selected-count\">\n {{\n translationContext + 'SELECTED_AMOUNT'\n | uiTranslate: { numberSelected: valueManager.value()!.length }\n | async\n }}\n </div>\n } @else {\n @for (valueItem of $any(valueManager.value()); track valueItem; let i = $index) {\n @if (i < overflow.visibleCount()) {\n <ui-tag\n class=\"value-tag\"\n [id]=\"'ui-tag-' + i\"\n [label]=\"valueItem | transformItem: textField()\"\n [allowClose]=\"true\"\n [applicationTheme]=\"applicationTheme\"\n [ngStyle]=\"\n type() !== autocompleteType.LARGE\n ? { '--tag-max-width': overflow.tagMaxWidth() ? overflow.tagMaxWidth() + 'px' : 'fit-content' }\n : {}\n \"\n (close)=\"onOptionRemoved(valueItem)\"\n ></ui-tag>\n }\n }\n @if (overflow.overflowCount() > 0) {\n <div class=\"overlap-count\" [matTooltip]=\"hiddenItemsTooltip()\">\n <ui-tag [applicationTheme]=\"applicationTheme\" [label]=\"'+' + overflow.overflowCount()\"></ui-tag>\n </div>\n }\n }\n </div>\n }\n </div>\n\n @if (showClearButton()) {\n <ui-icon\n class=\"remove-selected\"\n [tabIndex]=\"_isDisabled() ? -1 : 0\"\n (keydown.enter)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n (keydown.space)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n [ngClass]=\"{ 'large-input-icon': type() === autocompleteType.LARGE }\"\n (click)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n [size]=\"'24'\"\n [color]=\"applicationTheme === 'classic' ? 'inherit' : 'rebrand-black'\"\n [attr.aria-label]=\"'COMMON.CLEAR' | uiTranslate | async\"\n [name]=\"applicationTheme === 'classic' ? 'Close' : 'Close-in-line'\"\n ></ui-icon>\n }\n\n @if (isDropdown) {\n <ui-icon\n class=\"arrow-state\"\n [ngClass]=\"{ opened: autocomplete.isOpen, 'large-input-icon': type() === autocompleteType.LARGE }\"\n [size]=\"'24'\"\n [name]=\"applicationTheme !== 'classic' ? 'Arrow-chevron-down-in-line' : 'Arrow_down'\"\n (click)=\"onChevronClick(autocomplete)\"\n ></ui-icon>\n }\n\n <mat-autocomplete\n #autocomplete\n [class]=\"applicationTheme + ' ' + dropdownPanelClass()\"\n (optionSelected)=\"onOptionSelected($event)\"\n [disableRipple]=\"applicationTheme !== 'classic'\"\n [hideSingleSelectionIndicator]=\"false\"\n (opened)=\"onPanelOpened()\"\n >\n <!-- Reusable option template — must be inside mat-autocomplete for @ContentChildren to find mat-options -->\n <ng-template #optionTpl let-item=\"item\" let-highlight=\"highlight\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n [value]=\"item\"\n >\n <span [selectText]=\"highlight ? (filterService.userInput$ | async) : null\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </ng-template>\n\n <!-- ── Unfiltered ───────────────────────────────────────────────── -->\n @if ((filterService.isSearching$ | async) === false) {\n @if (!isDropdown) {\n <!-- Suggestions -->\n @if (suggestionsList().length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n @for (suggested of suggestionsList(); track suggested) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: suggested, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n }\n\n <!-- Selected items (multi) -->\n @if (valueManager.value()?.length && type() !== autocompleteType.SINGLE) {\n <mat-optgroup [label]=\"(translationContext + 'SELECTED' | uiTranslate | async)! | uppercase\">\n @for (item of $any(valueManager.value()); track item) {\n <ng-container *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: false }\"></ng-container>\n }\n </mat-optgroup>\n }\n\n <!-- Main items (normalized groups) -->\n @if (virtualScroll() || infiniteScroll()) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(flatItemsList().length)\"\n class=\"virtual-scroll\"\n >\n @if (!isGrouped) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of flatItemsList(); trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{ item | transformItem: textField() }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n } @else {\n @for (group of groupedItemsList(); track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n *cdkVirtualFor=\"let item of group.items; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of group.items; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n\n @if (infiniteScroll() && hasMoreOptionsForInfiniteScroll()) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n @if (isGrouped) {\n @for (group of groupedItemsList(); track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.items; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.items; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n }\n }\n } @else {\n @for (item of flatItemsList(); track item) {\n <ng-container *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"></ng-container>\n }\n }\n }\n\n <!-- Selected item (single) -->\n @if (valueManager.value()?.length && type() === autocompleteType.SINGLE) {\n <mat-optgroup [label]=\"(translationContext + 'SELECTED' | uiTranslate | async)! | uppercase\">\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: valueManager.value(), highlight: true }\"\n ></ng-container>\n </mat-optgroup>\n }\n } @else {\n <!-- ── Dropdown (unfiltered) ────────────────────────────────── -->\n @if (virtualScroll() || infiniteScroll()) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(flatItemsList().length)\"\n class=\"virtual-scroll\"\n >\n @if (!isGrouped) {\n <!-- Ungrouped: flat cdkVirtualFor directly in viewport -->\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of flatItemsList(); trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{ item | transformItem: textField() }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n } @else {\n <!-- Grouped: nested cdkVirtualFor per group -->\n @for (group of groupedItemsList(); track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n *cdkVirtualFor=\"let item of group.items; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of group.items; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n\n @if (infiniteScroll() && hasMoreOptionsForInfiniteScroll()) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n @if (isGrouped) {\n @for (group of groupedItemsList(); track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.items; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.items; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n }\n }\n } @else {\n @for (item of flatItemsList(); track item) {\n <ng-container *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"></ng-container>\n }\n }\n }\n }\n }\n\n <!-- ── Filtered ────────────────────────────────────────────────── -->\n @if (filterService.filteredSuggestions$ | async; as filteredSuggestionList) {\n @if (filterService.filteredItems$ | async; as filteredItemsList) {\n @if (virtualScroll() || infiniteScroll()) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(filteredItemsList.length)\"\n class=\"virtual-scroll\"\n >\n <!-- Filtered suggestions -->\n @if (filteredSuggestionList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of filteredSuggestionList; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n }\n\n <!-- Filtered items: grouped -->\n @if (isGrouped && (filterService.filteredGroupedItems$ | async); as filteredGroups) {\n @if (filteredGroups.length) {\n @for (group of filteredGroups; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n *cdkVirtualFor=\"let item of group.filteredItems; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n *cdkVirtualFor=\"let item of group.filteredItems; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n }\n }\n }\n\n <!-- Filtered items: ungrouped (no suggestions) -->\n @if (!filteredSuggestionList.length && !isGrouped) {\n @for (item of filteredItemsList; let idx = $index; track item[valueField()] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n } @else {\n <!-- Filtered items: ungrouped with suggestions present (ALL_ITEMS group) -->\n @if (filteredItemsList.length && !isGrouped) {\n <mat-optgroup [label]=\"(translationContext + 'ALL_ITEMS' | uiTranslate | async)! | uppercase\">\n @for (item of filteredItemsList; let idx = $index; track item[valueField()] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n\n @if (dynamicFilterLoading()) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n } @else if (inputValue()) {\n @if (allowAdd() && !isAlreadyAdded()) {\n <mat-option (mousedown)=\"$event.preventDefault()\" [value]=\"inputValue()\">\n <span>{{ 'COMMON.ADD' | uiTranslate | async }}</span>\n <span class=\"add-suggestion\">\"{{ inputValue() }}\"</span>\n </mat-option>\n } @else if (!filteredItemsList.length && !filteredSuggestionList.length) {\n <mat-option [style.pointer-events]=\"'none'\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </mat-option>\n }\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n <!-- Filtered items: grouped -->\n @if (isGrouped && (filterService.filteredGroupedItems$ | async); as filteredGroups) {\n @if (filteredGroups.length) {\n @for (group of filteredGroups; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.filteredItems; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.filteredItems; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n }\n }\n }\n }\n\n <!-- Filtered suggestions -->\n @if (filteredSuggestionList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n @for (item of filteredSuggestionList; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n }\n\n <!-- Filtered items: ungrouped (no suggestions) -->\n @if (!filteredSuggestionList.length && !isGrouped) {\n @for (item of filteredItemsList; let idx = $index; track item[valueField()] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{ item | transformItem: textField() }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n } @else {\n <!-- Filtered items: ungrouped with suggestions present (ALL_ITEMS group) -->\n @if (filteredItemsList.length && !isGrouped) {\n <mat-optgroup [label]=\"(translationContext + 'ALL_ITEMS' | uiTranslate | async)! | uppercase\">\n @for (item of filteredItemsList; let idx = $index; track item[valueField()] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n [value]=\"item\"\n >\n <span [selectText]=\"filterService.userInput$ | async\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n\n @if (dynamicFilterLoading()) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n } @else if (inputValue()) {\n @if (allowAdd() && !isAlreadyAdded()) {\n <mat-option (mousedown)=\"$event.preventDefault()\" [value]=\"inputValue()\">\n <span>{{ 'COMMON.ADD' | uiTranslate | async }}</span>\n <span class=\"add-suggestion\">\"{{ inputValue() }}\"</span>\n </mat-option>\n } @else if (!filteredItemsList.length && !filteredSuggestionList.length) {\n <mat-option [style.pointer-events]=\"'none'\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </mat-option>\n }\n }\n }\n }\n }\n </mat-autocomplete>\n @if (hasError()) {\n <mat-hint class=\"error\">\n @if (ngControl) {\n <ui-validation-error\n [ngControl]=\"ngControl\"\n [customErrors]=\"formErrorConfig()\"\n [label]=\"label()\"\n ></ui-validation-error>\n } @else {\n @for (error of safeErrors(); track error) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ error }}</span>\n </div>\n }\n }\n </mat-hint>\n }\n </mat-form-field>\n </div>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-autocomplete-v2.mjs","sources":["../../../components/autocomplete-v2/autocomplete-v2-utils.ts","../../../components/autocomplete-v2/autocomplete-v2-filter.service.ts","../../../components/autocomplete-v2/autocomplete-v2.model.ts","../../../components/autocomplete-v2/autocomplete-v2-value-manager.ts","../../../components/autocomplete-v2/infinite-scroll.directive.ts","../../../components/autocomplete-v2/autocomplete-overflow-detect.directive.ts","../../../components/autocomplete-v2/autocomplete-v2.component.ts","../../../components/autocomplete-v2/autocomplete-v2.component.html","../../../components/autocomplete-v2/testgorilla-tgo-ui-components-autocomplete-v2.ts"],"sourcesContent":["type Item = Record<string, unknown>;\n\nexport class AutocompleteV2Utils {\n static transformDisplayValue<T extends Item>(value: T | null | undefined, textField: string): string {\n return (value?.[textField] as string | undefined) ?? '';\n }\n\n static filterItems<T extends Item>(items: T[], inputValue: string, textField: string): T[] {\n return items.filter(item => {\n const text = item[textField];\n return typeof text === 'string' && text.toLowerCase().includes(inputValue.toLowerCase());\n });\n }\n\n static filterGroupedItems<T extends Item>(\n groups: { groupName: string; items: T[] }[],\n inputValue: string,\n textField: string\n ): { groupName: string; items: T[]; filteredItems: T[] }[] {\n return groups\n .map(group => ({\n ...group,\n filteredItems: AutocompleteV2Utils.filterItems(group.items, inputValue, textField),\n }))\n .filter(group => group.filteredItems.length > 0);\n }\n\n static excludeSuggestions<T extends Item>(items: T[], excludeItems: T[], valueField: string): T[] {\n if (!valueField || !excludeItems.length) return items ?? [];\n return (items ?? []).filter(item => !excludeItems.find(exclude => exclude[valueField] === item[valueField]));\n }\n\n static createValueItem<T extends Item>(value: T | string, textField: string, valueField: string): T {\n if (typeof value === 'string') {\n return { [textField]: value, [valueField]: value } as T;\n }\n return value;\n }\n\n static findDuplicate<T extends Item>(items: T[], selectedValue: T, lookupKey: string): T | undefined {\n return items.find(v => (lookupKey ? v[lookupKey] === selectedValue[lookupKey] : v === selectedValue));\n }\n\n static isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n }\n}\n","import { Injectable, OnDestroy, signal } from '@angular/core';\nimport { BehaviorSubject, map, Observable, ReplaySubject, startWith } from 'rxjs';\nimport { AutocompleteGroup } from './autocomplete-v2.component';\nimport { AutocompleteV2Utils } from './autocomplete-v2-utils';\n\n@Injectable()\nexport class AutocompleteFilterService<T extends Record<string, any> = Record<string, any>> implements OnDestroy {\n // Configuration\n readonly textField = signal('');\n\n // Data sources (fed by component via effects)\n readonly flatItems = signal<T[]>([]);\n readonly groupsList = signal<AutocompleteGroup<T>[]>([]);\n readonly suggestions = signal<T[]>([]);\n\n // Search state\n readonly searchText$ = new BehaviorSubject<string>('');\n readonly userInput$ = new ReplaySubject<string>(1);\n readonly isSearching$: Observable<boolean> = this.searchText$.pipe(map(v => !!v.trim()));\n\n // Dynamic filtering\n private readonly dynamicSource$ = new BehaviorSubject<T[] | null>(null);\n private isDynamicMode = false;\n\n // Filtered results\n filteredItems$: Observable<T[] | null> = this.searchText$.pipe(\n startWith(''),\n map(inputValue => {\n if (!inputValue.length) return null;\n return AutocompleteV2Utils.filterItems<T>(this.flatItems(), inputValue, this.textField());\n })\n );\n\n readonly filteredGroupedItems$: Observable<any[] | null> = this.searchText$.pipe(\n startWith(''),\n map(inputValue => {\n if (!inputValue.length || !this.groupsList().length) return null;\n return AutocompleteV2Utils.filterGroupedItems<T>(this.groupsList(), inputValue, this.textField());\n })\n );\n\n readonly filteredSuggestions$: Observable<T[] | null> = this.searchText$.pipe(\n map(inputValue =>\n inputValue.length ? AutocompleteV2Utils.filterItems<T>(this.suggestions(), inputValue, this.textField()) : null\n )\n );\n\n search(text: string, minChars: number): void {\n this.userInput$.next(text);\n if (text.length >= minChars) {\n this.searchText$.next(text);\n } else {\n this.searchText$.next('');\n this.userInput$.next('');\n }\n }\n\n clearSearch(): void {\n this.searchText$.next('');\n this.userInput$.next('');\n }\n\n ngOnDestroy(): void {\n this.searchText$.complete();\n this.userInput$.complete();\n this.dynamicSource$.complete();\n }\n\n setDynamicResults(list: T[] | null, loading: boolean): void {\n if ((list !== null || loading) && !this.isDynamicMode) {\n this.isDynamicMode = true;\n this.filteredItems$ = this.dynamicSource$;\n }\n if (list !== null) {\n this.dynamicSource$.next(list);\n } else if (loading) {\n this.dynamicSource$.next([]);\n }\n }\n}\n","export type AutocompleteType = 'single' | 'multi' | 'large';\n\nexport enum Autocomplete {\n SINGLE = 'single',\n MULTI = 'multi',\n LARGE = 'large',\n}\n\nexport enum DropdownVariation {\n AUTOCOMPLETE = 'autocomplete',\n DROPDOWN = 'dropdown',\n}\n\nexport type DropdownVariationType = `${DropdownVariation}`;\n\nexport type AutocompleteSize = 'small' | 'medium';\n","import { computed, Injectable, signal } from '@angular/core';\nimport { AutocompleteV2Utils } from './autocomplete-v2-utils';\nimport { Autocomplete, AutocompleteType } from './autocomplete-v2.model';\n\n@Injectable()\nexport class AutocompleteValueManager<T extends Record<string, any> = Record<string, any>> {\n // ── Configuration signals (set by the component via effects) ────────────────\n readonly type = signal<AutocompleteType>('multi');\n readonly textField = signal<string>('');\n readonly valueField = signal<string>('');\n readonly compareWith = signal<((a: T, b: T) => boolean) | undefined>(undefined);\n\n // ── Value signal ─────────────────────────────────────────────────────────────\n readonly value = signal<T | T[] | null>(null);\n\n // ── Derived ──────────────────────────────────────────────────────────────────\n readonly isSingle = computed(() => this.type() === (Autocomplete.SINGLE as AutocompleteType));\n\n readonly displayValue = computed(() => {\n const type = this.type();\n const value = this.value();\n const textField = this.textField();\n const isSingle = type === (Autocomplete.SINGLE as AutocompleteType);\n const isEmpty = !value || (AutocompleteV2Utils.isArray(value) && !value.length);\n\n if (isEmpty) return '';\n\n if (isSingle) {\n const display = AutocompleteV2Utils.isArray(value) ? value[0] : value;\n return AutocompleteV2Utils.transformDisplayValue(display, textField);\n }\n\n // Multi with values — space placeholder (tags are visible instead)\n return ' ';\n });\n\n // ── CVA callbacks ────────────────────────────────────────────────────────────\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: (value: T | T[] | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: () => void = () => {};\n\n registerOnChange(fn: (value: T | T[] | null) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n notifyChange(): void {\n this.onChangeFn(this.value());\n }\n\n markAsTouched(): void {\n this.onTouchedFn();\n }\n\n writeValue(v: T | T[] | null): void {\n if (v == null) {\n this.value.set(this.isSingle() ? null : []);\n } else {\n this.value.set(v);\n }\n }\n\n // ── Selection ─────────────────────────────────────────────────────────────────\n addValue(newValue: T): void {\n if (!this.isSingle() && !this.value()) {\n this.value.set([]);\n }\n\n const compareWith = this.compareWith();\n const currentArray = AutocompleteV2Utils.isArray(this.value()) ? (this.value() as T[]) : [];\n const foundDuplicate = compareWith\n ? currentArray.find((v: T) => compareWith(v, newValue))\n : AutocompleteV2Utils.findDuplicate<T>(currentArray, newValue, this.textField());\n\n if (!this.isSingle()) {\n this.value.set(\n foundDuplicate\n ? currentArray.filter((v: T) => (compareWith ? !compareWith(v, foundDuplicate) : v !== foundDuplicate))\n : [...currentArray, newValue]\n );\n } else {\n this.value.set(newValue);\n }\n }\n\n /**\n * Removes `option` from the value array.\n * Returns the found item (so the caller can deselect the mat-option), or undefined if not found.\n */\n removeValue(option: T): T | undefined {\n const compareWith = this.compareWith();\n const currentValue = AutocompleteV2Utils.isArray(this.value()) ? (this.value() as T[]) : [];\n const foundValue = currentValue.find((v: T) => (compareWith ? compareWith(v, option) : v === option));\n\n if (foundValue) {\n this.value.set(currentValue.filter((v: T) => (compareWith ? !compareWith(v, option) : v !== option)));\n }\n\n return foundValue;\n }\n\n clear(): void {\n this.value.set(AutocompleteV2Utils.isArray(this.value()) ? [] : null);\n }\n}\n","import { DestroyRef, inject, Injectable, OnDestroy } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { filter, map, Subscription, throttleTime } from 'rxjs';\n\n@Injectable()\nexport class InfiniteScrollDirective implements OnDestroy {\n private viewport: CdkVirtualScrollViewport | null = null;\n private scrollSub: Subscription | null = null;\n private destroyRef = inject(DestroyRef);\n\n private scrollListener = (event: Event): void => {\n const target = event.target as Element | null;\n const trigger = this.panelTrigger;\n if (!trigger) return;\n\n const isNotAutocompleteScroll =\n !target?.id?.includes('mat-autocomplete-') &&\n !(target?.parentElement as Element | null)?.id?.includes('mat-autocomplete-') &&\n !target?.classList?.contains('mat-mdc-autocomplete-trigger');\n\n if (trigger.panelOpen && isNotAutocompleteScroll) {\n trigger.closePanel();\n }\n };\n\n enabled = false;\n closeOnScroll = false;\n panelTrigger: MatAutocompleteTrigger | null = null;\n onBottomReached: (() => void) | null = null;\n\n attachViewport(viewport: CdkVirtualScrollViewport | undefined): void {\n this.detachViewport();\n if (!viewport) return;\n this.viewport = viewport;\n\n if (this.enabled) {\n this.scrollSub = viewport\n .elementScrolled()\n .pipe(\n map(() => viewport.measureScrollOffset('bottom')),\n filter(offset => offset < viewport.getViewportSize() * 0.2),\n throttleTime(200),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.onBottomReached?.();\n });\n }\n }\n\n detachViewport(): void {\n this.scrollSub?.unsubscribe();\n this.scrollSub = null;\n this.viewport = null;\n }\n\n scrollToTop(): void {\n if (this.viewport) {\n this.viewport.scrollToIndex(0);\n this.viewport.checkViewportSize();\n }\n }\n\n startCloseOnScroll(): void {\n if (this.closeOnScroll) {\n window.addEventListener('scroll', this.scrollListener, true);\n }\n }\n\n ngOnDestroy(): void {\n this.detachViewport();\n window.removeEventListener('scroll', this.scrollListener, true);\n }\n}\n","import { AfterViewInit, Directive, ElementRef, inject, input, NgZone, OnDestroy, signal } from '@angular/core';\n\n@Directive({\n selector: '[uiAutocompleteOverflowDetect]',\n standalone: true,\n exportAs: 'autocompleteOverflowDetect',\n})\nexport class AutocompleteOverflowDetectDirective implements AfterViewInit, OnDestroy {\n measureContainer = input<HTMLElement | undefined>(undefined);\n itemSelector = input('.value-tag');\n reserveWidth = input(100);\n\n visibleCount = signal(Infinity);\n overflowCount = signal(0);\n hasMeasured = signal(false);\n tagMaxWidth = signal<number | null>(null);\n\n private resizeObserver: ResizeObserver | null = null;\n private rafId: number | null = null;\n private readonly el = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n\n ngAfterViewInit(): void {\n // Self-measure when the directive enters the DOM (e.g., after @if condition becomes true)\n this.measure();\n }\n\n setupObserver(containerSelector: string): void {\n const parentContainer = (this.el.nativeElement as HTMLElement).closest(containerSelector);\n if (!parentContainer || typeof ResizeObserver === 'undefined') return;\n\n this.resizeObserver = new ResizeObserver(() => {\n this.ngZone.run(() => this.measure());\n });\n\n this.resizeObserver.observe(parentContainer);\n }\n\n measure(): void {\n const container = this.measureContainer();\n if (!container) return;\n\n this.rafId = requestAnimationFrame(() => {\n const infix = container.closest('.mat-mdc-form-field-infix') as HTMLElement;\n if (!infix) return; // Can't measure yet — stay hidden until next attempt\n\n const tags: HTMLElement[] = Array.from(container.querySelectorAll(this.itemSelector()));\n if (!tags.length) {\n this.visibleCount.set(Infinity);\n this.hasMeasured.set(true);\n this.overflowCount.set(0);\n return;\n }\n\n // Measure actual icon widths (clear button + chevron) that share the form field space\n const formField = container.closest('mat-form-field') as HTMLElement;\n let iconsWidth = 0;\n if (formField) {\n formField.querySelectorAll('.remove-selected, .arrow-state').forEach((icon: Element) => {\n iconsWidth += icon.getBoundingClientRect().width;\n });\n }\n\n const inputReserve = 48;\n const counterWidth = 52;\n const availableWidth = infix.getBoundingClientRect().width - inputReserve - iconsWidth;\n let totalWidth = 0;\n let visibleCount = tags.length;\n\n for (let i = 0; i < tags.length; i++) {\n totalWidth += tags[i].getBoundingClientRect().width;\n const remainingTags = tags.length - (i + 1);\n const spaceForCounter = remainingTags > 0 ? counterWidth : 0;\n\n if (totalWidth + spaceForCounter > availableWidth && i > 0) {\n visibleCount = i;\n break;\n }\n }\n\n const total = container.querySelectorAll(this.itemSelector()).length;\n const visible = Math.min(visibleCount, total);\n const overflow = Math.max(0, total - visible);\n\n // Compute max width for each tag so wide tags truncate with ellipsis\n // Single tag: full available width. Multiple visible: account for counter width.\n const padding = overflow >= 10 ? 16 : 8;\n this.tagMaxWidth.set(\n visible === 1 ? availableWidth - padding : availableWidth - (overflow > 0 ? counterWidth : 0) - padding\n );\n\n this.visibleCount.set(visibleCount);\n this.hasMeasured.set(true);\n this.overflowCount.set(overflow);\n });\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n }\n }\n}\n","/* eslint-disable no-underscore-dangle */\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n DoCheck,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n NgZone,\n OnDestroy,\n output,\n signal,\n untracked,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n ApplicationTheme,\n IKeyboardEvent,\n IncludesPipe,\n PreventInputDirective,\n SelectTextDirective,\n TransformItemPipe,\n UiTranslatePipe,\n} from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\nimport { SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';\nimport { TagComponentModule } from '@testgorilla/tgo-ui/components/tag';\nimport { ValidationErrorModule } from '@testgorilla/tgo-ui/components/validation-error';\nimport { AutocompleteFilterService } from './autocomplete-v2-filter.service';\nimport { AutocompleteV2Utils } from './autocomplete-v2-utils';\nimport { AutocompleteValueManager } from './autocomplete-v2-value-manager';\nimport {\n Autocomplete,\n AutocompleteSize,\n AutocompleteType,\n DropdownVariation,\n DropdownVariationType,\n} from './autocomplete-v2.model';\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\nimport { AutocompleteOverflowDetectDirective } from './autocomplete-overflow-detect.directive';\n\nexport interface AutocompleteGroup<T extends Record<string, any> = Record<string, any>> {\n groupName: string;\n items: T[];\n}\n\n@Component({\n selector: 'ui-autocomplete-v2',\n templateUrl: './autocomplete-v2.component.html',\n styleUrls: ['./autocomplete-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatAutocompleteModule,\n MatChipsModule,\n MatFormFieldModule,\n MatInputModule,\n TagComponentModule,\n IconComponentModule,\n SpinnerComponentModule,\n CdkVirtualScrollViewport,\n CdkVirtualForOf,\n CdkFixedSizeVirtualScroll,\n PreventInputDirective,\n UiTranslatePipe,\n TransformItemPipe,\n IncludesPipe,\n SelectTextDirective,\n AutocompleteOverflowDetectDirective,\n ValidationErrorModule,\n MatTooltipModule,\n ],\n host: {\n '[attr.theme]': 'applicationTheme',\n },\n providers: [AutocompleteValueManager, AutocompleteFilterService, InfiniteScrollDirective],\n})\nexport class AutocompleteV2Component<T extends Record<string, any> = Record<string, any>>\n implements ControlValueAccessor, AfterViewInit, DoCheck, OnDestroy\n{\n // ── Inputs ──────────────────────────────────────────────────────────────────\n itemsList = input<T[]>([]);\n suggestionsList = input<T[]>([]);\n groupsList = input<AutocompleteGroup<T>[]>([]);\n disabled = input(false);\n allowAdd = input(true);\n textField = input('');\n valueField = input('');\n imageField = input('');\n label = input('');\n placeholder = input('');\n type = input<AutocompleteType>('multi');\n minCharactersSearch = input(3);\n variant = input.required<DropdownVariationType>();\n showBottomContent = input(true);\n required = input<boolean | undefined>(undefined);\n virtualScroll = input(false, { transform: booleanAttribute });\n compareWith = input<((a: T, b: T) => boolean) | undefined>(undefined);\n dropdownPanelClass = input('');\n closeOnScroll = input(false);\n size = input<AutocompleteSize>('medium');\n allowUserInput = input(true);\n clearable = input(true);\n maxLength = input<number | undefined>(undefined);\n dynamicFilterLoading = input(false);\n dynamicFilteredList = input<T[] | null>(null);\n infiniteScroll = input(false);\n hasMoreOptionsForInfiniteScroll = input(true);\n itemValue = input<T | T[] | null>(null);\n formErrorConfig = input<Record<string, string>>({});\n errors = input<string[]>([]);\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n selectionChange = output<T | T[]>();\n searchTextChange = output<string>();\n blur = output<void>();\n focus = output<void>();\n scrollViewportBottomReached = output<void>();\n scrollViewportBottomReachedFiltered = output<void>();\n\n // ── ViewChild ───────────────────────────────────────────────────────────────\n @ViewChild('formField') formFieldElement: ElementRef<HTMLElement>;\n @ViewChild('tagContainer') tagContainer: ElementRef<HTMLElement>;\n @ViewChild('measureEl') protected measureElRef?: ElementRef<HTMLElement>;\n @ViewChild('overflow') overflowDir?: AutocompleteOverflowDetectDirective;\n @ViewChild('trigger') autocomplete: MatAutocompleteTrigger;\n @ViewChild(CdkVirtualScrollViewport, { static: false }) set cdkViewport(viewport: CdkVirtualScrollViewport) {\n // Ensure enabled is set before attaching (ViewChild resolves before ngAfterViewInit)\n this.scrollManager.enabled = this.infiniteScroll();\n this.scrollManager.attachViewport(viewport);\n }\n @ViewChild('autocomplete') matAutocomplete: MatAutocomplete;\n @ViewChild('matInput') matInput: ElementRef<HTMLInputElement>;\n\n // ── Injected services ──────────────────────────────────────────────────────\n protected readonly valueManager = inject(AutocompleteValueManager<T>);\n protected readonly filterService = inject(AutocompleteFilterService<T>);\n private readonly scrollManager = inject(InfiniteScrollDirective);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngZone = inject(NgZone);\n public readonly ngControl = inject(NgControl, { optional: true, self: true });\n protected readonly applicationTheme: ApplicationTheme =\n inject<ApplicationTheme>('CANOPYUI_DEFAULT_APPLICATION_THEME' as any, { optional: true }) ?? 'light';\n\n // ── Internal state ──────────────────────────────────────────────────────────\n protected inputValue = signal<string>('');\n protected isInputFocus = signal(false);\n protected autocompleteType = Autocomplete;\n /** Flat list for default (ungrouped) rendering and virtual scroll */\n protected flatItemsList = computed(() => {\n const suggestions = this.suggestionsList();\n const valField = this.valueField();\n const flat = AutocompleteV2Utils.excludeSuggestions<T>(this.itemsList(), suggestions, valField);\n const grouped = this.groupsList().flatMap(g =>\n AutocompleteV2Utils.excludeSuggestions<T>(g.items, suggestions, valField)\n );\n return [...flat, ...grouped];\n });\n\n /** Grouped list — only used when isGrouped is true */\n protected groupedItemsList = computed(() => {\n const suggestions = this.suggestionsList();\n const valField = this.valueField();\n return this.groupsList().map(group => ({\n groupName: group.groupName,\n items: AutocompleteV2Utils.excludeSuggestions<T>(group.items, suggestions, valField),\n }));\n });\n\n protected _isDisabled = signal(false);\n\n protected translationContext = 'AUTOCOMPLETE.';\n protected readonly utils = AutocompleteV2Utils;\n protected keyboardFocused = signal<boolean>(false);\n protected isAlreadyAdded = computed(() => {\n const compareWith = this.compareWith();\n const val = this.valueManager.value();\n const input = this.inputValue();\n if (!input || input === ' ') return false;\n const valArray = AutocompleteV2Utils.isArray(val) ? val : [];\n return !!(compareWith\n ? valArray.find((v: T) => compareWith(v, input as unknown as T))\n : AutocompleteV2Utils.findDuplicate<T>(valArray, input as unknown as T, this.textField()));\n });\n\n protected showClearButton = computed(() => {\n const type = this.type();\n const val = this.valueManager.value();\n\n if (type === (Autocomplete.SINGLE as AutocompleteType)) {\n return this.clearable() && (val?.length || (val ? !!Object.keys(val).length : false));\n }\n return val && val.length > 1;\n });\n\n protected safeErrors = computed(() => this.errors()?.filter(Boolean) ?? []);\n\n private controlInvalid = signal(false);\n\n protected hasError = computed(() => {\n if (this.ngControl) {\n return this.controlInvalid();\n }\n return this.safeErrors().length > 0;\n });\n\n protected hiddenItemsTooltip = computed(() => {\n const value = this.valueManager.value();\n const visibleCount = this.overflowDir?.visibleCount() ?? Infinity;\n if (!AutocompleteV2Utils.isArray(value)) return '';\n const tf = this.textField();\n return value\n .slice(visibleCount)\n .map(item => (tf ? item[tf] : item))\n .join('\\n');\n });\n\n constructor() {\n // Assign valueAccessor manually to avoid circular DI\n // (providing NG_VALUE_ACCESSOR + injecting NgControl creates a cycle)\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n effect(() => {\n this.filterService.setDynamicResults(this.dynamicFilteredList(), this.dynamicFilterLoading());\n });\n\n effect(() => {\n this._isDisabled.set(this.disabled());\n });\n\n effect(() => this.valueManager.type.set(this.type()));\n effect(() => this.valueManager.textField.set(this.textField()));\n effect(() => this.valueManager.valueField.set(this.valueField()));\n effect(() => this.valueManager.compareWith.set(this.compareWith()));\n\n effect(() => this.filterService.textField.set(this.textField()));\n effect(() => this.filterService.flatItems.set(this.flatItemsList()));\n effect(() => this.filterService.groupsList.set(this.groupsList()));\n effect(() => this.filterService.suggestions.set(this.suggestionsList()));\n\n effect(() => {\n const v = this.itemValue();\n // In CVA mode, writeValue() owns the value — itemValue should not override it\n if (this.ngControl) {\n if (isDevMode() && v !== null) {\n console.warn(\n '[ui-autocomplete-v2] [itemValue] is set alongside a form control. ' + 'Use ngModel or formControl instead.'\n );\n }\n return;\n }\n this.valueManager.value.set(AutocompleteV2Utils.isArray(v) ? v : v ? [v] : []);\n untracked(() => {\n this.inputValue.set(this.valueManager.displayValue());\n });\n this.cdr.markForCheck();\n });\n\n effect(() => {\n this.valueManager.value(); // track value changes\n untracked(() => {\n if (this.type() !== (Autocomplete.LARGE as AutocompleteType)) {\n this.overflowDir?.measure();\n }\n });\n });\n }\n\n /**\n * Used to mark component view as dirty when touched programmatically with markAsTouched/markAllAsTouched or errors\n * to display validation errors that might happen (e.g. required)\n */\n\n ngDoCheck(): void {\n if (this.ngControl) {\n const invalid = !!(this.ngControl.invalid && this.ngControl.touched);\n if (this.controlInvalid() !== invalid) {\n this.controlInvalid.set(invalid);\n }\n if (this.ngControl.touched || this.ngControl.errors) {\n this.cdr.markForCheck();\n }\n }\n }\n\n ngAfterViewInit(): void {\n // Set default hover color for the autocomplete panel (overlay is outside component scope)\n if (!document.body.style.getPropertyValue('--ui-autocomplete-option-color')) {\n document.body.style.setProperty('--ui-autocomplete-option-color', '#FFF2FC');\n }\n\n if (this.type() !== (Autocomplete.LARGE as AutocompleteType)) {\n this.overflowDir?.setupObserver('.input-container');\n }\n\n this.scrollManager.enabled = this.infiniteScroll();\n this.scrollManager.closeOnScroll = this.closeOnScroll();\n this.scrollManager.panelTrigger = this.autocomplete;\n this.scrollManager.onBottomReached = () => this.onScrollBottom();\n this.scrollManager.startCloseOnScroll();\n\n this.focusMonitor\n .monitor(this.matInput)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(origin =>\n this.ngZone.run(() => {\n this.keyboardFocused.set(origin === 'keyboard');\n })\n );\n\n this.matInput.nativeElement.onkeydown = this.onKeydown.bind(this);\n }\n\n ngOnDestroy(): void {\n this.scrollManager.ngOnDestroy();\n this.focusMonitor.stopMonitoring(this.matInput);\n if (this.matInput?.nativeElement) {\n this.matInput.nativeElement.onkeydown = null;\n }\n }\n\n registerOnChange(fn: any): void {\n this.valueManager.registerOnChange(fn);\n }\n\n registerOnTouched(fn: any): void {\n this.valueManager.registerOnTouched(fn);\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled.set(isDisabled);\n this.cdr.markForCheck();\n }\n\n writeValue(value: T | T[] | null): void {\n // Eagerly sync config so displayValue() computes correctly even if\n // constructor effects haven't run yet (e.g. first writeValue from a\n // FormControl with an initial value).\n this.valueManager.type.set(this.type());\n this.valueManager.textField.set(this.textField());\n this.valueManager.valueField.set(this.valueField());\n this.valueManager.compareWith.set(this.compareWith());\n\n this.valueManager.writeValue(value);\n this.inputValue.set(this.valueManager.displayValue());\n this.cdr.markForCheck();\n }\n\n protected get isGrouped(): boolean {\n return this.groupsList().length > 0;\n }\n\n protected onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n const inputValue = event.option.value as T;\n const itemValue = AutocompleteV2Utils.createValueItem<T>(inputValue, this.textField(), this.valueField());\n this.valueManager.addValue(itemValue);\n\n queueMicrotask(() => {\n if (this.type() !== (this.autocompleteType.SINGLE as AutocompleteType)) {\n // Multi: clear input so tags are visible while focused\n this.inputValue.set('');\n } else {\n this.inputValue.set(this.valueManager.displayValue());\n }\n this.cdr.markForCheck();\n });\n\n this.onUpdate();\n this.valueManager.markAsTouched();\n }\n\n protected onOptionRemoved(option: T): void {\n setTimeout(() => this.autocomplete.closePanel(), 0);\n const foundValue = this.valueManager.removeValue(option);\n\n if (foundValue) {\n this.matAutocomplete.options.forEach(matOption => {\n const vf = this.valueField();\n if (vf && matOption.value?.[vf] === foundValue[vf]) {\n matOption.deselect();\n }\n });\n }\n\n if (!this.valueManager.value()?.length) {\n this.inputValue.set('');\n }\n\n this.onUpdate();\n this.valueManager.markAsTouched();\n }\n\n protected onInputChange(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.filterService.search(text, this.minCharactersSearch());\n if (text.length >= this.minCharactersSearch()) {\n this.searchTextChange.emit(text);\n }\n }\n\n protected onClear(): void {\n this.inputValue.set('');\n this.valueManager.clear();\n this.onUpdate();\n this.matAutocomplete?.options.forEach(option => option.deselect());\n this.valueManager.markAsTouched();\n }\n\n protected onBlur(): void {\n setTimeout(() => {\n this.filterService.clearSearch();\n this.isInputFocus.set(false);\n this.inputValue.set(this.valueManager.displayValue());\n this.valueManager.markAsTouched();\n this.blur.emit();\n this.cdr.markForCheck();\n }, 0);\n }\n\n protected onPanelOpened(): void {\n this.scrollManager.scrollToTop();\n }\n\n protected onScrollBottom(): void {\n if (this.filterService.searchText$.value) {\n this.scrollViewportBottomReachedFiltered.emit();\n } else {\n this.scrollViewportBottomReached.emit();\n }\n }\n\n protected onFocus(): void {\n this.isInputFocus.set(true);\n const val = this.inputValue();\n if (typeof val === 'string' && val.match(/^\\s+/gm)) {\n this.inputValue.set(val.trimStart());\n }\n this.focus.emit();\n }\n\n private onUpdate(): void {\n this.filterService.clearSearch();\n this.valueManager.notifyChange();\n const val = this.valueManager.value();\n if (val !== null) {\n this.selectionChange.emit(val);\n }\n }\n\n protected get isDropdown(): boolean {\n return this.variant() === (DropdownVariation.DROPDOWN as DropdownVariationType);\n }\n\n protected onChevronClick(autocomplete: MatAutocomplete): void {\n if (autocomplete.isOpen) {\n setTimeout(() => {\n this.autocomplete.closePanel();\n }, 0);\n }\n }\n\n protected trackByFn = (index: number, value: string) => value;\n\n protected trackByItem = (_index: number, item: T) => {\n const vf = this.valueField();\n return vf ? item?.[vf] : item;\n };\n\n onKeydown($event: KeyboardEvent) {\n const optionHeight = 48;\n\n if ($event.key === (IKeyboardEvent.HOME as string)) {\n this.matAutocomplete._keyManager.setFirstItemActive();\n } else if ($event.key === (IKeyboardEvent.END as string)) {\n this.matAutocomplete._keyManager.setLastItemActive();\n } else if ($event.key === (IKeyboardEvent.PAGE_DOWN as string)) {\n this.matAutocomplete._keyManager.setNextItemActive();\n this.matAutocomplete._keyManager.setNextItemActive();\n this.matAutocomplete._keyManager.setNextItemActive();\n } else if ($event.key === (IKeyboardEvent.PAGE_UP as string)) {\n this.matAutocomplete._keyManager.setPreviousItemActive();\n this.matAutocomplete._keyManager.setPreviousItemActive();\n this.matAutocomplete._keyManager.setPreviousItemActive();\n }\n\n this.matAutocomplete._setScrollTop((this.matAutocomplete._keyManager.activeItemIndex ?? 0) * optionHeight);\n }\n\n protected getVirtualScrollHeight(itemCount: number): number {\n const itemHeight = 48;\n const maxHeight = 200;\n const minHeight = 48;\n\n const calculatedHeight = itemCount * itemHeight;\n\n return Math.min(Math.max(calculatedHeight, minHeight), maxHeight);\n }\n}\n","<ng-container>\n <div class=\"autocomplete-wrapper\" [ngClass]=\"{ disabled: _isDisabled() }\">\n <mat-form-field\n [color]=\"hasError() ? 'warn' : 'accent'\"\n [appearance]=\"'outline'\"\n [ngClass]=\"{\n 'large-size': type() === autocompleteType.LARGE,\n 'hide-bottom-content': !showBottomContent(),\n 'keyboard-focused': keyboardFocused(),\n 'has-label': !!label(),\n }\"\n >\n @if (label()) {\n <mat-label\n >{{ label() }}\n @if (required()) {\n <span>*</span>\n }\n </mat-label>\n }\n <div #formField class=\"input-container\">\n @if (textField() ? $any(valueManager.value())?.[textField()] : $any(valueManager.value()) === inputValue()) {\n <span style=\"position: absolute; left: -9999px\" aria-live=\"polite\">{{\n ('SELECTED' | uiTranslate | async) + ' ' + inputValue()\n }}</span>\n }\n\n <input\n #trigger=\"matAutocompleteTrigger\"\n #matInput\n [attr.maxlength]=\"maxLength() !== null && maxLength() !== undefined ? maxLength() : null\"\n [uiPreventInput]=\"!allowUserInput()\"\n [disabled]=\"_isDisabled()\"\n [ngClass]=\"{\n 'unset-margin': valueManager.value() && type() === autocompleteType.LARGE,\n 'no-caret': !allowUserInput(),\n }\"\n (blur)=\"onBlur()\"\n (focusin)=\"onFocus()\"\n [attr.aria-label]=\"\n (translationContext + 'SELECTED' | uiTranslate | async) +\n ' ' +\n (valueManager.value() | transformItem: textField() : true)\n \"\n matInput\n [placeholder]=\"valueManager.value() && valueManager.value()!.length ? '' : placeholder()\"\n [type]=\"'text'\"\n [matAutocomplete]=\"autocomplete\"\n (input)=\"onInputChange($event)\"\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"inputValue.set($event)\"\n />\n <!-- Hidden measurement container: always in DOM, renders ALL tags for width measurement -->\n @if (type() !== autocompleteType.SINGLE && utils.isArray(valueManager.value())) {\n <div class=\"selected-items measurement-container\" #measureEl>\n @for (valueItem of $any(valueManager.value()); track valueItem; let i = $index) {\n <ui-tag\n class=\"value-tag\"\n [id]=\"'measure-tag-' + i\"\n [label]=\"valueItem | transformItem: textField()\"\n [allowClose]=\"true\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-tag>\n }\n </div>\n }\n\n @if (\n (type() === autocompleteType.LARGE && valueManager.value()) ||\n (!(inputValue() && isInputFocus()) && valueManager.value() && type() !== autocompleteType.SINGLE)\n ) {\n <!-- Visible container: only renders tags that fit. Hidden until first measurement to prevent flash. -->\n <div\n class=\"selected-items\"\n #tagContainer\n uiAutocompleteOverflowDetect\n #overflow=\"autocompleteOverflowDetect\"\n [measureContainer]=\"measureElRef?.nativeElement\"\n [class.measured]=\"\n type() === autocompleteType.LARGE || type() === autocompleteType.SINGLE || overflow.hasMeasured()\n \"\n >\n @if (size() === 'small' && valueManager.value()!.length > 1) {\n <div class=\"selected-count\">\n {{\n translationContext + 'SELECTED_AMOUNT'\n | uiTranslate: { numberSelected: valueManager.value()!.length }\n | async\n }}\n </div>\n } @else {\n @for (valueItem of $any(valueManager.value()); track valueItem; let i = $index) {\n @if (i < overflow.visibleCount()) {\n <ui-tag\n class=\"value-tag\"\n [id]=\"'ui-tag-' + i\"\n [label]=\"valueItem | transformItem: textField()\"\n [allowClose]=\"true\"\n [applicationTheme]=\"applicationTheme\"\n [ngStyle]=\"\n type() !== autocompleteType.LARGE\n ? { '--tag-max-width': overflow.tagMaxWidth() ? overflow.tagMaxWidth() + 'px' : 'fit-content' }\n : {}\n \"\n (close)=\"onOptionRemoved(valueItem)\"\n ></ui-tag>\n }\n }\n @if (overflow.overflowCount() > 0) {\n <div class=\"overlap-count\" [matTooltip]=\"hiddenItemsTooltip()\">\n <ui-tag [applicationTheme]=\"applicationTheme\" [label]=\"'+' + overflow.overflowCount()\"></ui-tag>\n </div>\n }\n }\n </div>\n }\n </div>\n\n @if (showClearButton()) {\n <ui-icon\n class=\"remove-selected\"\n [tabIndex]=\"_isDisabled() ? -1 : 0\"\n (keydown.enter)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n (keydown.space)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n [ngClass]=\"{ 'large-input-icon': type() === autocompleteType.LARGE }\"\n (click)=\"onClear(); $event.preventDefault(); $event.stopPropagation()\"\n [size]=\"'24'\"\n [color]=\"applicationTheme === 'classic' ? 'inherit' : 'rebrand-black'\"\n [attr.aria-label]=\"'COMMON.CLEAR' | uiTranslate | async\"\n [name]=\"applicationTheme === 'classic' ? 'Close' : 'Close-in-line'\"\n ></ui-icon>\n }\n\n @if (isDropdown) {\n <ui-icon\n class=\"arrow-state\"\n [ngClass]=\"{ opened: autocomplete.isOpen, 'large-input-icon': type() === autocompleteType.LARGE }\"\n [size]=\"'24'\"\n [name]=\"applicationTheme !== 'classic' ? 'Arrow-chevron-down-in-line' : 'Arrow_down'\"\n (click)=\"onChevronClick(autocomplete)\"\n ></ui-icon>\n }\n\n <mat-autocomplete\n #autocomplete\n [class]=\"applicationTheme + ' ' + dropdownPanelClass()\"\n (optionSelected)=\"onOptionSelected($event)\"\n [disableRipple]=\"applicationTheme !== 'classic'\"\n [hideSingleSelectionIndicator]=\"false\"\n (opened)=\"onPanelOpened()\"\n >\n <ng-template #optionContentTpl let-item=\"item\" let-highlight=\"highlight\">\n @if (imageField() && item?.[imageField()]) {\n <img class=\"option-image\" [src]=\"item[imageField()]\" alt=\"\" />\n }\n <span [selectText]=\"highlight ? (filterService.userInput$ | async) : null\">{{\n item | transformItem: textField()\n }}</span>\n <ui-icon\n [applicationTheme]=\"applicationTheme\"\n [name]=\"applicationTheme === 'classic' ? 'Check' : 'Check-in-line'\"\n ></ui-icon>\n </ng-template>\n\n <!-- Reusable option template — must be inside mat-autocomplete for @ContentChildren to find mat-options -->\n <ng-template #optionTpl let-item=\"item\" let-highlight=\"highlight\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: highlight }\"\n ></ng-container>\n </mat-option>\n </ng-template>\n\n <!-- ── Unfiltered ───────────────────────────────────────────────── -->\n @if ((filterService.isSearching$ | async) === false) {\n @if (!isDropdown) {\n <!-- Suggestions -->\n @if (suggestionsList().length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n @for (suggested of suggestionsList(); track suggested) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: suggested, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n }\n\n <!-- Selected items (multi) -->\n @if (valueManager.value()?.length && type() !== autocompleteType.SINGLE) {\n <mat-optgroup [label]=\"(translationContext + 'SELECTED' | uiTranslate | async)! | uppercase\">\n @for (item of $any(valueManager.value()); track item) {\n <ng-container *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: false }\"></ng-container>\n }\n </mat-optgroup>\n }\n\n <!-- Main items (normalized groups) -->\n @if (virtualScroll() || infiniteScroll()) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(flatItemsList().length)\"\n class=\"virtual-scroll\"\n >\n @if (!isGrouped) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of flatItemsList(); trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n } @else {\n @for (group of groupedItemsList(); track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n *cdkVirtualFor=\"let item of group.items; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of group.items; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n }\n }\n }\n\n @if (infiniteScroll() && hasMoreOptionsForInfiniteScroll()) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n @if (isGrouped) {\n @for (group of groupedItemsList(); track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.items; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.items; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n }\n }\n } @else {\n @for (item of flatItemsList(); track item) {\n <ng-container *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"></ng-container>\n }\n }\n }\n\n <!-- Selected item (single) -->\n @if (valueManager.value()?.length && type() === autocompleteType.SINGLE) {\n <mat-optgroup [label]=\"(translationContext + 'SELECTED' | uiTranslate | async)! | uppercase\">\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: valueManager.value(), highlight: true }\"\n ></ng-container>\n </mat-optgroup>\n }\n } @else {\n <!-- ── Dropdown (unfiltered) ────────────────────────────────── -->\n @if (virtualScroll() || infiniteScroll()) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(flatItemsList().length)\"\n class=\"virtual-scroll\"\n >\n @if (!isGrouped) {\n <!-- Ungrouped: flat cdkVirtualFor directly in viewport -->\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of flatItemsList(); trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n } @else {\n <!-- Grouped: nested cdkVirtualFor per group -->\n @for (group of groupedItemsList(); track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n *cdkVirtualFor=\"let item of group.items; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of group.items; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n }\n }\n }\n\n @if (infiniteScroll() && hasMoreOptionsForInfiniteScroll()) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n @if (isGrouped) {\n @for (group of groupedItemsList(); track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.items; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.items; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n }\n }\n } @else {\n @for (item of flatItemsList(); track item) {\n <ng-container *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"></ng-container>\n }\n }\n }\n }\n }\n\n <!-- ── Filtered ────────────────────────────────────────────────── -->\n @if (filterService.filteredSuggestions$ | async; as filteredSuggestionList) {\n @if (filterService.filteredItems$ | async; as filteredItemsList) {\n @if (virtualScroll() || infiniteScroll()) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"48\"\n [style.height.px]=\"getVirtualScrollHeight(filteredItemsList.length)\"\n class=\"virtual-scroll\"\n >\n <!-- Filtered suggestions -->\n @if (filteredSuggestionList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n *cdkVirtualFor=\"let item of filteredSuggestionList; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n </mat-optgroup>\n }\n\n <!-- Filtered items: grouped -->\n @if (isGrouped && (filterService.filteredGroupedItems$ | async); as filteredGroups) {\n @if (filteredGroups.length) {\n @for (group of filteredGroups; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n *cdkVirtualFor=\"let item of group.filteredItems; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n </mat-optgroup>\n } @else {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n *cdkVirtualFor=\"let item of group.filteredItems; trackBy: trackByItem\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n }\n }\n }\n }\n\n <!-- Filtered items: ungrouped (no suggestions) -->\n @if (!filteredSuggestionList.length && !isGrouped) {\n @for (item of filteredItemsList; let idx = $index; track item[valueField()] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n }\n } @else {\n <!-- Filtered items: ungrouped with suggestions present (ALL_ITEMS group) -->\n @if (filteredItemsList.length && !isGrouped) {\n <mat-optgroup [label]=\"(translationContext + 'ALL_ITEMS' | uiTranslate | async)! | uppercase\">\n @for (item of filteredItemsList; let idx = $index; track item[valueField()] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{\n 'selected-option': item | includes: valueManager.value() ?? [] : valueField(),\n }\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n\n @if (dynamicFilterLoading()) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n } @else if (inputValue()) {\n @if (allowAdd() && !isAlreadyAdded()) {\n <mat-option (mousedown)=\"$event.preventDefault()\" [value]=\"inputValue()\">\n <span>{{ 'COMMON.ADD' | uiTranslate | async }}</span>\n <span class=\"add-suggestion\">\"{{ inputValue() }}\"</span>\n </mat-option>\n } @else if (!filteredItemsList.length && !filteredSuggestionList.length) {\n <mat-option [style.pointer-events]=\"'none'\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </mat-option>\n }\n }\n </cdk-virtual-scroll-viewport>\n } @else {\n <!-- Filtered items: grouped -->\n @if (isGrouped && (filterService.filteredGroupedItems$ | async); as filteredGroups) {\n @if (filteredGroups.length) {\n @for (group of filteredGroups; track group) {\n @if (group.groupName) {\n <mat-optgroup [label]=\"group.groupName\">\n @for (item of group.filteredItems; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n } @else {\n @for (item of group.filteredItems; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n }\n }\n }\n }\n\n <!-- Filtered suggestions -->\n @if (filteredSuggestionList.length) {\n <mat-optgroup [label]=\"(translationContext + 'SUGGESTED' | uiTranslate | async)! | uppercase\">\n @for (item of filteredSuggestionList; track item) {\n <ng-container\n *ngTemplateOutlet=\"optionTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n }\n </mat-optgroup>\n }\n\n <!-- Filtered items: ungrouped (no suggestions) -->\n @if (!filteredSuggestionList.length && !isGrouped) {\n @for (item of filteredItemsList; let idx = $index; track item[valueField()] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n }\n } @else {\n <!-- Filtered items: ungrouped with suggestions present (ALL_ITEMS group) -->\n @if (filteredItemsList.length && !isGrouped) {\n <mat-optgroup [label]=\"(translationContext + 'ALL_ITEMS' | uiTranslate | async)! | uppercase\">\n @for (item of filteredItemsList; let idx = $index; track item[valueField()] || idx) {\n <mat-option\n (mousedown)=\"$event.preventDefault()\"\n [ngClass]=\"{ 'selected-option': item | includes: valueManager.value() ?? [] : valueField() }\"\n [value]=\"item\"\n >\n <ng-container\n *ngTemplateOutlet=\"optionContentTpl; context: { item: item, highlight: true }\"\n ></ng-container>\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n\n @if (dynamicFilterLoading()) {\n <mat-option class=\"loading-option\" [style.pointer-events]=\"'none'\">\n <div class=\"loading-container\">\n <ui-spinner size=\"small\" [isLoader]=\"false\"></ui-spinner>\n </div>\n </mat-option>\n } @else if (inputValue()) {\n @if (allowAdd() && !isAlreadyAdded()) {\n <mat-option (mousedown)=\"$event.preventDefault()\" [value]=\"inputValue()\">\n <span>{{ 'COMMON.ADD' | uiTranslate | async }}</span>\n <span class=\"add-suggestion\">\"{{ inputValue() }}\"</span>\n </mat-option>\n } @else if (!filteredItemsList.length && !filteredSuggestionList.length) {\n <mat-option [style.pointer-events]=\"'none'\">\n <span>{{ translationContext + 'NO_RESULTS_FOUND' | uiTranslate | async }}</span>\n </mat-option>\n }\n }\n }\n }\n }\n </mat-autocomplete>\n @if (hasError()) {\n <mat-hint class=\"error\">\n @if (ngControl) {\n <ui-validation-error\n [ngControl]=\"ngControl\"\n [customErrors]=\"formErrorConfig()\"\n [label]=\"label()\"\n ></ui-validation-error>\n } @else {\n @for (error of safeErrors(); track error) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ error }}</span>\n </div>\n }\n }\n </mat-hint>\n }\n </mat-form-field>\n </div>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { HttpClientModule } from '@angular/common/http';
10
10
  /* eslint-disable */
11
11
  /**
12
12
  * Auto-generated file containing SVG icon content
13
- * Generated on: 2026-04-23T10:25:45.090Z
13
+ * Generated on: 2026-04-23T12:29:51.766Z
14
14
  *
15
15
  * DO NOT EDIT THIS FILE MANUALLY
16
16
  * Run 'npm run generate:icons' to regenerate
@@ -359,6 +359,7 @@ const rebrandIconSvgContent = {
359
359
  'Mic-filled': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 14.5465C11.1667 14.5465 10.4583 14.2548 9.875 13.6715C9.29167 13.0882 9 12.3798 9 11.5465V5.54651C9 4.71318 9.29167 4.00484 9.875 3.42151C10.4583 2.83818 11.1667 2.54651 12 2.54651C12.8333 2.54651 13.5417 2.83818 14.125 3.42151C14.7083 4.00484 15 4.71318 15 5.54651V11.5465C15 12.3798 14.7083 13.0882 14.125 13.6715C13.5417 14.2548 12.8333 14.5465 12 14.5465ZM11 21.5465V18.4715C9.26667 18.2382 7.83333 17.4632 6.7 16.1465C5.56667 14.8298 5 13.2965 5 11.5465H7C7 12.9298 7.4875 14.109 8.4625 15.084C9.4375 16.059 10.6167 16.5465 12 16.5465C13.3833 16.5465 14.5625 16.059 15.5375 15.084C16.5125 14.109 17 12.9298 17 11.5465H19C19 13.2965 18.4333 14.8298 17.3 16.1465C16.1667 17.4632 14.7333 18.2382 13 18.4715V21.5465H11Z" fill="currentColor"/></svg>`,
360
360
  'Mic-in-line': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 14.5465C11.1667 14.5465 10.4583 14.2548 9.875 13.6715C9.29167 13.0882 9 12.3798 9 11.5465V5.54651C9 4.71318 9.29167 4.00484 9.875 3.42151C10.4583 2.83818 11.1667 2.54651 12 2.54651C12.8333 2.54651 13.5417 2.83818 14.125 3.42151C14.7083 4.00484 15 4.71318 15 5.54651V11.5465C15 12.3798 14.7083 13.0882 14.125 13.6715C13.5417 14.2548 12.8333 14.5465 12 14.5465ZM11 21.5465V18.4715C9.26667 18.2382 7.83333 17.4632 6.7 16.1465C5.56667 14.8298 5 13.2965 5 11.5465H7C7 12.9298 7.4875 14.109 8.4625 15.084C9.4375 16.059 10.6167 16.5465 12 16.5465C13.3833 16.5465 14.5625 16.059 15.5375 15.084C16.5125 14.109 17 12.9298 17 11.5465H19C19 13.2965 18.4333 14.8298 17.3 16.1465C16.1667 17.4632 14.7333 18.2382 13 18.4715V21.5465H11ZM12 12.5465C12.2833 12.5465 12.5208 12.4507 12.7125 12.259C12.9042 12.0673 13 11.8298 13 11.5465V5.54651C13 5.26318 12.9042 5.02568 12.7125 4.83401C12.5208 4.64234 12.2833 4.54651 12 4.54651C11.7167 4.54651 11.4792 4.64234 11.2875 4.83401C11.0958 5.02568 11 5.26318 11 5.54651V11.5465C11 11.8298 11.0958 12.0673 11.2875 12.259C11.4792 12.4507 11.7167 12.5465 12 12.5465Z" fill="currentColor"/></svg>`,
361
361
  'Mic-off-filled': `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17.75 14.95L16.3 13.5C16.5333 13.1167 16.7083 12.7167 16.825 12.3C16.9417 11.8833 17 11.45 17 11H19C19 11.7333 18.8917 12.4292 18.675 13.0875C18.4583 13.7458 18.15 14.3667 17.75 14.95ZM14.8 11.95L8.99999 6.15V5C8.99999 4.16667 9.29166 3.45833 9.87499 2.875C10.4583 2.29167 11.1667 2 12 2C12.8333 2 13.5417 2.29167 14.125 2.875C14.7083 3.45833 15 4.16667 15 5V11C15 11.1833 14.9792 11.35 14.9375 11.5C14.8958 11.65 14.85 11.8 14.8 11.95ZM11 21V17.9C9.26666 17.6667 7.83333 16.8958 6.69999 15.5875C5.56666 14.2792 4.99999 12.75 4.99999 11H6.99999C6.99999 12.3833 7.48749 13.5625 8.46249 14.5375C9.43749 15.5125 10.6167 16 12 16C12.5667 16 13.1042 15.9125 13.6125 15.7375C14.1208 15.5625 14.5833 15.3167 15 15L16.425 16.425C15.9417 16.8083 15.4125 17.1292 14.8375 17.3875C14.2625 17.6458 13.65 17.8167 13 17.9V21H11ZM19.8 22.6L1.39999 4.2L2.79999 2.8L21.2 21.2L19.8 22.6Z" fill="currentColor"/></svg>`,
362
+ 'Mic-off-in-line': `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17.7499 14.95L16.2999 13.5C16.5332 13.1167 16.7082 12.7167 16.8249 12.3C16.9416 11.8833 16.9999 11.45 16.9999 11H18.9999C18.9999 11.7333 18.8916 12.4292 18.6749 13.0875C18.4582 13.7458 18.1499 14.3667 17.7499 14.95ZM14.7999 11.95L12.9999 10.15V5C12.9999 4.71667 12.9041 4.47917 12.7124 4.2875C12.5207 4.09583 12.2832 4 11.9999 4C11.7166 4 11.4791 4.09583 11.2874 4.2875C11.0957 4.47917 10.9999 4.71667 10.9999 5V8.15L8.9999 6.15V5C8.9999 4.16667 9.29157 3.45833 9.8749 2.875C10.4582 2.29167 11.1666 2 11.9999 2C12.8332 2 13.5416 2.29167 14.1249 2.875C14.7082 3.45833 14.9999 4.16667 14.9999 5V11C14.9999 11.1833 14.9791 11.35 14.9374 11.5C14.8957 11.65 14.8499 11.8 14.7999 11.95ZM10.9999 21V17.925C9.26657 17.6917 7.83324 16.9167 6.6999 15.6C5.56657 14.2833 4.9999 12.75 4.9999 11H6.9999C6.9999 12.3833 7.47907 13.5625 8.4374 14.5375C9.39574 15.5125 10.5832 16 11.9999 16C12.5666 16 13.1041 15.9125 13.6124 15.7375C14.1207 15.5625 14.5832 15.3167 14.9999 15L16.4249 16.425C15.9416 16.8083 15.4124 17.1333 14.8374 17.4C14.2624 17.6667 13.6499 17.8417 12.9999 17.925V21H10.9999ZM19.7999 22.6L1.3999 4.2L2.7999 2.8L21.1999 21.2L19.7999 22.6Z" fill="currentColor"/></svg>`,
362
363
  'Microsoft-filled': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.5 3.1767H2.5V12.1767H11.5V3.1767Z" fill="#F25022"/><path d="M11.5 13.1767H2.5V22.1767H11.5V13.1767Z" fill="#00A4EF"/><path d="M21.5 3.1767H12.5V12.1767H21.5V3.1767Z" fill="#7FBA00"/><path d="M21.5 13.1767H12.5V22.1767H21.5V13.1767Z" fill="#FFB900"/></svg>`,
363
364
  'Microsoft-in-line': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.5 3.1767H2.5V12.1767H11.5V3.1767Z" fill="#F25022"/><path d="M11.5 13.1767H2.5V22.1767H11.5V13.1767Z" fill="#00A4EF"/><path d="M21.5 3.1767H12.5V12.1767H21.5V3.1767Z" fill="#7FBA00"/><path d="M21.5 13.1767H12.5V22.1767H21.5V13.1767Z" fill="#FFB900"/></svg>`,
364
365
  'Minimize-filled': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6 22V19H3V17H8V22H6ZM16 22V17H21V19H18V22H16ZM3 9V7H6V4H8V9H3ZM16 9V4H18V7H21V9H16Z" fill="currentColor"/></svg>`,
@@ -381,6 +382,7 @@ const rebrandIconSvgContent = {
381
382
  'Path-in-line': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19 22.0001C18.35 22.0001 17.7667 21.8126 17.25 21.4376C16.7333 21.0626 16.375 20.5835 16.175 20.0001H11C9.9 20.0001 8.95833 19.6085 8.175 18.8251C7.39167 18.0418 7 17.1001 7 16.0001C7 14.9001 7.39167 13.9585 8.175 13.1751C8.95833 12.3918 9.9 12.0001 11 12.0001H13C13.55 12.0001 14.0208 11.8043 14.4125 11.4126C14.8042 11.021 15 10.5501 15 10.0001C15 9.45012 14.8042 8.97929 14.4125 8.58762C14.0208 8.19596 13.55 8.00012 13 8.00012H7.825C7.60833 8.58346 7.24583 9.06262 6.7375 9.43762C6.22917 9.81262 5.65 10.0001 5 10.0001C4.16667 10.0001 3.45833 9.70846 2.875 9.12512C2.29167 8.54179 2 7.83346 2 7.00012C2 6.16679 2.29167 5.45846 2.875 4.87512C3.45833 4.29179 4.16667 4.00012 5 4.00012C5.65 4.00012 6.22917 4.18762 6.7375 4.56262C7.24583 4.93762 7.60833 5.41679 7.825 6.00012H13C14.1 6.00012 15.0417 6.39179 15.825 7.17512C16.6083 7.95846 17 8.90012 17 10.0001C17 11.1001 16.6083 12.0418 15.825 12.8251C15.0417 13.6085 14.1 14.0001 13 14.0001H11C10.45 14.0001 9.97917 14.196 9.5875 14.5876C9.19583 14.9793 9 15.4501 9 16.0001C9 16.5501 9.19583 17.021 9.5875 17.4126C9.97917 17.8043 10.45 18.0001 11 18.0001H16.175C16.3917 17.4168 16.7542 16.9376 17.2625 16.5626C17.7708 16.1876 18.35 16.0001 19 16.0001C19.8333 16.0001 20.5417 16.2918 21.125 16.8751C21.7083 17.4585 22 18.1668 22 19.0001C22 19.8335 21.7083 20.5418 21.125 21.1251C20.5417 21.7085 19.8333 22.0001 19 22.0001ZM5 8.00012C5.28333 8.00012 5.52083 7.90429 5.7125 7.71262C5.90417 7.52096 6 7.28346 6 7.00012C6 6.71679 5.90417 6.47929 5.7125 6.28762C5.52083 6.09596 5.28333 6.00012 5 6.00012C4.71667 6.00012 4.47917 6.09596 4.2875 6.28762C4.09583 6.47929 4 6.71679 4 7.00012C4 7.28346 4.09583 7.52096 4.2875 7.71262C4.47917 7.90429 4.71667 8.00012 5 8.00012Z" fill="currentColor"/></svg>`,
382
383
  'Pause-filled': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 19.5465V5.54651H18V19.5465H14ZM6 19.5465V5.54651H10V19.5465H6Z" fill="currentColor"/></svg>`,
383
384
  'Pause-in-line': `<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13 19.5465V5.54651H19V19.5465H13ZM5 19.5465V5.54651H11V19.5465H5ZM15 17.5465H17V7.54651H15V17.5465ZM7 17.5465H9V7.54651H7V17.5465Z" fill="currentColor"/></svg>`,
385
+ 'Phone-rings-filled': `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="currentColor"><path d="M161-120 16-261l40-41q87-89 198.5-133.5T480-480q114 0 225 44.5T904-302l40 41-145 141-159-120v-134q-38-12-78-19t-82-7q-42 0-82 7t-78 19v134L161-120Zm279-560v-200h80v200h-80Zm264 114-56-58 142-142 56 58-142 142Zm-448 0L114-708l56-58 142 142-56 58Z"/></svg>`,
384
386
  'Phone-rings-in-line': `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3.40005 20.8531L1.10005 18.6031C0.900049 18.4031 0.800049 18.1698 0.800049 17.9031C0.800049 17.6365 0.900049 17.4031 1.10005 17.2031C2.56672 15.6198 4.25838 14.4323 6.17505 13.6406C8.09172 12.849 10.0334 12.4531 12 12.4531C13.9667 12.4531 15.9042 12.849 17.8125 13.6406C19.7209 14.4323 21.4167 15.6198 22.9 17.2031C23.1 17.4031 23.2 17.6365 23.2 17.9031C23.2 18.1698 23.1 18.4031 22.9 18.6031L20.6 20.8531C20.4167 21.0365 20.2042 21.1365 19.9625 21.1531C19.7209 21.1698 19.5 21.1031 19.3 20.9531L16.4 18.7531C16.2667 18.6531 16.1667 18.5365 16.1 18.4031C16.0334 18.2698 16 18.1198 16 17.9531V15.1031C15.3667 14.9031 14.7167 14.7448 14.05 14.6281C13.3834 14.5115 12.7 14.4531 12 14.4531C11.3 14.4531 10.6167 14.5115 9.95005 14.6281C9.28338 14.7448 8.63338 14.9031 8.00005 15.1031V17.9531C8.00005 18.1198 7.96672 18.2698 7.90005 18.4031C7.83338 18.5365 7.73338 18.6531 7.60005 18.7531L4.70005 20.9531C4.50005 21.1031 4.27922 21.1698 4.03755 21.1531C3.79588 21.1365 3.58338 21.0365 3.40005 20.8531ZM6.00005 15.8031C5.51672 16.0531 5.05005 16.3406 4.60005 16.6656C4.15005 16.9906 3.68338 17.3531 3.20005 17.7531L4.20005 18.7531L6.00005 17.3531V15.8031ZM18 15.8531V17.3531L19.8 18.7531L20.8 17.8031C20.3167 17.3698 19.85 16.9948 19.4 16.6781C18.95 16.3615 18.4834 16.0865 18 15.8531ZM11 7.45312V2.45312H13V7.45312H11ZM17.6 10.3031L16.2 8.85313L19.75 5.30313L21.15 6.75313L17.6 10.3031ZM6.40005 10.3031L2.85005 6.75313L4.25005 5.30313L7.80005 8.85313L6.40005 10.3031Z" fill="currentColor"/></svg>`,
385
387
  'Pin-marker-filled': `<svg width="28" height="40" viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="14" cy="37" r="2.5" fill="currentColor" stroke="currentColor"/><path d="M13.4843 1.5H14.5157C21.1344 1.5 26.5 6.86556 26.5 13.4843C26.5 16.393 25.4421 19.2025 23.5236 21.3888L15.028 31.0704C14.4833 31.6912 13.5167 31.6912 12.972 31.0704L4.47637 21.3888C2.55788 19.2025 1.5 16.393 1.5 13.4843C1.5 6.86556 6.86556 1.5 13.4843 1.5Z" fill="currentColor" stroke="currentColor"/></svg>`,
386
388
  'Pin-marker-in-line': `<svg width="28" height="40" viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="14" cy="37" r="2.5" fill="white" stroke="currentColor"/><path d="M13.4843 1.5H14.5157C21.1344 1.5 26.5 6.86556 26.5 13.4843C26.5 16.393 25.4421 19.2025 23.5236 21.3888L15.028 31.0704C14.4833 31.6912 13.5167 31.6912 12.972 31.0704L4.47637 21.3888C2.55788 19.2025 1.5 16.393 1.5 13.4843C1.5 6.86556 6.86556 1.5 13.4843 1.5Z" fill="white" stroke="currentColor"/></svg>`,
@@ -1001,6 +1003,8 @@ const tgoRebrandIcons = [
1001
1003
  'Smart-criteria-filled',
1002
1004
  'Smart-criteria-in-line',
1003
1005
  'Mic-off-filled',
1006
+ 'Mic-off-in-line',
1007
+ 'Phone-rings-filled',
1004
1008
  'Phone-rings-in-line',
1005
1009
  ];
1006
1010
  const groupedIcons = {
@@ -1312,6 +1316,8 @@ const groupedIcons = {
1312
1316
  'Volume-filled',
1313
1317
  'Volume-in-line',
1314
1318
  'Mic-off-filled',
1319
+ 'Mic-off-in-line',
1320
+ 'Phone-rings-filled',
1315
1321
  'Phone-rings-in-line',
1316
1322
  ],
1317
1323
  };