{"version":3,"file":"sixbell-telco-sdk-components-forms-combobox.mjs","sources":["../../../projects/sdk/components/forms/combobox/src/combobox.component.ts","../../../projects/sdk/components/forms/combobox/src/combobox.component.html","../../../projects/sdk/components/forms/combobox/sixbell-telco-sdk-components-forms-combobox.ts"],"sourcesContent":["/**\n * @fileoverview Combobox Component\n *\n * A comprehensive combobox component with advanced features including:\n * - Single and multiple selection modes\n * - Real-time search with debouncing\n * - Keyboard navigation support (Arrow keys, Enter, Space)\n * - Form validation integration\n * - Accessibility compliance with CDK Listbox\n * - Customizable styling variants and sizes\n * - Animation states for smooth transitions\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// ==============================================================================\n// IMPORTS\n// ==============================================================================\n\n// Angular CDK\nimport { CdkListbox, CdkOption } from '@angular/cdk/listbox';\nimport { ConnectedOverlayPositionChange, OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal'; // Angular Core\nimport {\n\tafterRenderEffect,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\n\n// Angular Forms\nimport { ControlValueAccessor, FormControl, FormGroup, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\n\n// Third-party\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { cva } from 'class-variance-authority';\n\n// Internal\nimport { BadgeComponent, BadgeSizeProps } from '@sixbell-telco/sdk/components/badge';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { matCheckOutline, matCloseOutline, matKeyboardArrowDownOutline, matSearchOutline } from '@sixbell-telco/sdk/components/icon/material/outline';\n\n// RxJS\nimport { debounceTime, distinctUntilChanged, startWith, Subject, switchMap } from 'rxjs';\n\n// ==============================================================================\n// TYPES AND INTERFACES\n// ==============================================================================\n\n/**\n * Available style variants for the combobox component\n */\nexport type ComboboxVariantProps = 'primary' | 'secondary' | 'tertiary' | 'accent' | 'info' | 'success' | 'error' | 'warning' | null | undefined;\n\n/**\n * Available size variants for the combobox component\n */\nexport type ComboboxSizeProps = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | null | undefined;\n\n/**\n * Props interface for the combobox component\n */\nexport type ComboboxProps = {\n\tvariant?: ComboboxVariantProps;\n\tsize?: ComboboxSizeProps;\n};\n\n/**\n * Animation states for the combobox overlay\n */\ntype AnimationState = 'closed' | 'opening' | 'open' | 'closing';\n\n/**\n * Selection type for the combobox\n */\ntype SelectionType = 'single' | 'multiple';\n\n/**\n * Event emitted when the search query changes\n */\nexport type ComboboxSearchQueryEvent = {\n\tquery: string;\n\tresults: any[];\n};\n\n// ==============================================================================\n// COMPONENT STYLES\n// ==============================================================================\n\n/**\n * Class variance authority configuration for combobox styling\n */\nconst comboboxComponent = cva(['w-full', 'min-w-fit', 'text-pretty', 'font-body', 'font-normal', 'select', 'leading-normal', 'bg-none'], {\n\tvariants: {\n\t\tvariant: {\n\t\t\tprimary: ['select-primary'],\n\t\t\tsecondary: ['select-secondary'],\n\t\t\ttertiary: ['select-tertiary'],\n\t\t\taccent: ['select-accent'],\n\t\t\tinfo: ['select-info'],\n\t\t\tsuccess: ['select-success'],\n\t\t\terror: ['select-error'],\n\t\t\twarning: ['select-warning'],\n\t\t},\n\t\tsize: {\n\t\t\txs: ['select-xs'],\n\t\t\tsm: ['select-sm'],\n\t\t\tmd: ['select-md'],\n\t\t\tlg: ['select-lg'],\n\t\t\txl: ['select-xl'],\n\t\t},\n\t},\n\tcompoundVariants: [],\n\tdefaultVariants: {\n\t\tvariant: 'secondary',\n\t\tsize: 'md',\n\t},\n});\n\n// ==============================================================================\n// COMPONENT\n// ==============================================================================\n\n/**\n * A customizable combobox component with search functionality, multiple selection modes,\n * and keyboard navigation support. Implements Angular's ControlValueAccessor interface\n * for seamless integration with reactive forms.\n *\n * @example\n * ```html\n * <st-combobox\n *   [(value)]=\"selectedValue\"\n *   [options]=\"availableOptions\"\n *   displayKey=\"name\"\n *   valueKey=\"id\"\n *   placeholder=\"Select an option\"\n *   variant=\"primary\"\n *   size=\"md\">\n * </st-combobox>\n * ```\n *\n * @example\n * ```typescript\n * // Multiple selection\n * <st-combobox\n *   [(value)]=\"selectedValues\"\n *   [options]=\"options\"\n *   selectionType=\"multiple\"\n *   [allowClear]=\"true\">\n * </st-combobox>\n * ```\n */\n@Component({\n\tselector: 'st-combobox',\n\timports: [FormsModule, ReactiveFormsModule, PortalModule, OverlayModule, CdkListbox, CdkOption, IconComponent, BadgeComponent, TranslatePipe],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: ComboboxComponent,\n\t\t\tmulti: true,\n\t\t},\n\t],\n\ttemplateUrl: './combobox.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComboboxComponent implements ControlValueAccessor {\n\t// ==============================================================================\n\t// SERVICES\n\t// ==============================================================================\n\n\t/**\n\t * Angular translation service for internationalization\n\t * @internal\n\t */\n\ttranslateService = inject(TranslateService);\n\n\t// ==============================================================================\n\t// INPUT PROPERTIES\n\t// ==============================================================================\n\n\t/**\n\t * The visual style variant of the combobox\n\t * @default 'secondary'\n\t */\n\tvariant = input<ComboboxVariantProps>('secondary');\n\n\t/**\n\t * The size variant of the combobox\n\t * @default 'md'\n\t */\n\tsize = input<ComboboxSizeProps>('md');\n\n\t/**\n\t * Whether to show optional indicator\n\t * @defaultValue false\n\t */\n\tshowOptional = input<boolean>(false);\n\n\t/**\n\t * Optional indicator text (translation key or literal)\n\t * @defaultValue 'sdk.formFields.optional'\n\t */\n\toptionalText = input<string>('sdk.formFields.optional');\n\n\t/**\n\t * Whether to use ghost (transparent) styling\n\t * @default false\n\t */\n\tghost = input<boolean>(false);\n\n\t/**\n\t * The HTML name attribute for the underlying form control\n\t */\n\tname = input<string | null>(null);\n\n\t/**\n\t * Placeholder text displayed when no option is selected\n\t */\n\tplaceholder = input<string>('');\n\n\t/**\n\t * Whether the combobox is disabled\n\t * @default false\n\t */\n\tdisabled = model<boolean>(false);\n\n\t/**\n\t * Label text displayed above the combobox\n\t */\n\tlabel = input<string>('');\n\n\t/**\n\t * Parent form group for reactive forms integration\n\t */\n\tparentForm = input<FormGroup | null>(null);\n\n\t/**\n\t * The form control name when used within a reactive form\n\t */\n\tformControlName = input<string>('');\n\n\t/**\n\t * Whether to show a clear button next to the selected value(s) in the trigger\n\t * Works for both single and multiple selection modes\n\t * @default true\n\t */\n\tallowClear = input<boolean>(true);\n\n\t/**\n\t * Whether to show a \"Clear All\" button at the bottom of the dropdown for multiple selection\n\t * Only applies when selectionType is 'multiple'\n\t * @default true\n\t */\n\tallowClearAll = input<boolean>(true);\n\n\t/**\n\t * Placeholder text for the search input field\n\t * @default 'Search...'\n\t */\n\tsearchPlaceholder = input<string>('');\n\n\t/**\n\t * Text displayed when no search results are found\n\t * @default 'No results found'\n\t */\n\tnoResultsText = input<string>('');\n\n\t/**\n\t * The current selected value(s)\n\t * For single selection: any | null\n\t * For multiple selection: any[]\n\t */\n\tvalue = model<any>(null);\n\n\t/**\n\t * Array of available options to select from\n\t */\n\toptions = input<any[]>([]);\n\n\t/**\n\t * The object property to use for display text when options are objects\n\t * Falls back to common property names if not specified\n\t */\n\tdisplayKey = input<string>('');\n\n\t/**\n\t * The object property to use as the value when options are objects\n\t * Uses the entire object if not specified\n\t */\n\tvalueKey = input<string>('');\n\n\t/**\n\t * Selection mode: 'single' for single selection, 'multiple' for multi-select\n\t * @default 'single'\n\t */\n\tselectionType = input<SelectionType>('single');\n\n\t/**\n\t * Whether to enable debounced search functionality\n\t * @default false\n\t */\n\tsearchDebounced = input<boolean>(false);\n\n\t/**\n\t * Debounce time in milliseconds for search input\n\t * @default 300\n\t */\n\tsearchDebounceTime = input<number>(300);\n\n\t/**\n\t * Event emitted when combobox loses focus\n\t */\n\tblurred = output<unknown>();\n\n\t/**\n\t * Event emitted when selection changes\n\t */\n\tvalueUpdated = output<any>();\n\n\t/**\n\t * Stop event propagation for activation events\n\t * @defaultValue false\n\t */\n\tstopPropagation = input<boolean>(false);\n\n\t/**\n\t * Event emitted on click\n\t */\n\tclicked = output<MouseEvent>();\n\n\t/**\n\t * Event emitted on Enter keydown\n\t */\n\tkeyDownEnter = output<KeyboardEvent>();\n\n\t/**\n\t * Event emitted on Space keydown\n\t */\n\tkeyDownSpace = output<KeyboardEvent>();\n\n\t/**\n\t * Event emitted on activation (click or keyboard)\n\t */\n\ttriggered = output<void>();\n\n\t/**\n\t * Event emitted when search query changes with filtered results\n\t */\n\tsearchQuery = output<ComboboxSearchQueryEvent>();\n\n\t// ==============================================================================\n\t// ICONS\n\t// ==============================================================================\n\n\t/** Search icon for the search input */\n\ticonSearch = matSearchOutline;\n\t/** Dropdown chevron icon */\n\ticonChevronDown = matKeyboardArrowDownOutline;\n\t/** Check icon for selected options */\n\ticonCheck = matCheckOutline;\n\t/** Close/clear icon */\n\ticonClose = matCloseOutline;\n\n\t// ==============================================================================\n\t// PRIVATE PROPERTIES\n\t// ==============================================================================\n\n\t/** Internal search input value */\n\tprivate readonly searchValue = signal<string>('');\n\t/** Processed search term after debouncing */\n\tprivate readonly searchTerm = signal<string>('');\n\t/** RxJS subject for search input handling */\n\tprivate readonly searchSubject = new Subject<string>();\n\t/** Current animation state of the overlay */\n\tprivate readonly animationState = signal<AnimationState>('closed');\n\t/** Trigger for blur events in form validation */\n\tprivate readonly blurTrigger = signal(0);\n\t/** Active option index for keyboard navigation */\n\tprivate readonly activeOptionIndex = signal<number>(-1);\n\n\t// ==============================================================================\n\t// VIEW CHILDREN\n\t// ==============================================================================\n\n\t/** Reference to the trigger button element */\n\ttriggerRef = viewChild<ElementRef<HTMLButtonElement>>('trigger');\n\n\t/** Reference to the search input element */\n\tsearchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n\t/** Reference to the options list container */\n\toptionsList = viewChild<ElementRef<HTMLDivElement>>('optionsList');\n\n\t/** Reference to the CDK listbox for keyboard navigation */\n\tlistbox = viewChild<CdkListbox>('listbox');\n\n\t// ==============================================================================\n\t// SIGNALS\n\t// ==============================================================================\n\n\t/** Width of the trigger button for overlay positioning */\n\ttriggerWidth = signal<number>(0);\n\n\t/** Current active position configuration from CDK overlay */\n\tprivate readonly currentPosition = signal<any>(null);\n\n\t/**\n\t * Static class mappings for different animation directions\n\t * Maps animation directions to complete Tailwind class names\n\t * All class names are static and detectable by Tailwind at build time\n\t */\n\tprivate readonly animationClassMap = {\n\t\tbottom: 'data-[state=opening]:animate-fade-in-up data-[state=open]:animate-fade-in-up data-[state=closing]:animate-fade-out-down',\n\t\ttop: 'data-[state=opening]:animate-fade-in-down data-[state=open]:animate-fade-in-down data-[state=closing]:animate-fade-out-up',\n\t\tleft: 'data-[state=opening]:animate-fade-in-left data-[state=open]:animate-fade-in-left data-[state=closing]:animate-fade-out-right',\n\t\tright: 'data-[state=opening]:animate-fade-in-right data-[state=open]:animate-fade-in-right data-[state=closing]:animate-fade-out-left',\n\t};\n\n\t/**\n\t * Computed animation direction based on current overlay position\n\t * Dynamically detects position and returns appropriate direction: 'top', 'bottom', 'left', or 'right'\n\t */\n\tanimationDirection = computed(() => {\n\t\tconst position = this.currentPosition();\n\t\tif (!position) return 'bottom'; // default\n\n\t\t// Determine direction based on overlay Y and X positions\n\t\tconst overlayY = position?.connectionPair?.overlayY as string;\n\t\tconst overlayX = position?.connectionPair?.overlayX as string;\n\n\t\t// Priority: check Y first, then X\n\t\tif (overlayY === 'top') {\n\t\t\treturn 'top'; // Dropdown appears above\n\t\t} else if (overlayY === 'bottom') {\n\t\t\treturn 'bottom'; // Dropdown appears below\n\t\t} else if (overlayX === 'end') {\n\t\t\treturn 'left'; // Dropdown appears to the left\n\t\t} else if (overlayX === 'start') {\n\t\t\treturn 'right'; // Dropdown appears to the right\n\t\t}\n\t\treturn 'bottom'; // default\n\t});\n\n\t/**\n\t * Computed class string for animations\n\t * Applies the correct animation based on position using static class names\n\t */\n\tanimationClasses = computed(() => {\n\t\tconst direction = this.animationDirection();\n\t\tconst baseClasses = this.animationClassMap[direction];\n\t\tconst durationClasses =\n\t\t\t'data-[state=closing]:animate-duration-150 data-[state=opening]:animate-duration-150 data-[state=open]:animate-duration-150 overflow-hidden';\n\t\treturn `${baseClasses} ${durationClasses}`;\n\t});\n\n\t// ==============================================================================\n\t// FORM CONTROL INTEGRATION\n\t// ==============================================================================\n\n\t/** Form control reference for reactive forms */\n\tprivate readonly formControl = computed(() => this.parentForm()?.get(this.formControlName()) as FormControl | null);\n\t/** Observable stream of form control */\n\tprivate readonly formControl$ = toObservable(this.formControl);\n\t/** Stream of form control status changes */\n\tprivate readonly statusChanges$ = this.formControl$.pipe(switchMap((control) => control?.statusChanges.pipe(startWith(control.status)) || []));\n\t/** Stream of form control value changes */\n\tprivate readonly stateChanges$ = this.formControl$.pipe(switchMap((control) => control?.valueChanges.pipe(startWith(control.value)) || []));\n\t/** Signal for form control status */\n\tprivate readonly statusSignal = toSignal(this.statusChanges$);\n\t/** Signal for form control state */\n\tprivate readonly stateSignal = toSignal(this.stateChanges$);\n\n\t// ==============================================================================\n\t// CONTROL VALUE ACCESSOR\n\t// ==============================================================================\n\n\t/** Callback function for value changes */\n\tprivate onChange = (value: any) => {};\n\t/** Callback function for touch events */\n\tprivate onTouched = () => {};\n\n\t// ==============================================================================\n\t// CONSTRUCTOR\n\t// ==============================================================================\n\n\tconstructor() {\n\t\tthis.setupSearchHandling();\n\t\tthis.setupSearchQueryEmission();\n\t}\n\n\t// ==============================================================================\n\t// COMPUTED PROPERTIES\n\t// ==============================================================================\n\n\t/**\n\t * Filtered options based on current search term\n\t * @returns Array of options that match the search criteria\n\t */\n\tfilteredOptions = computed(() => {\n\t\tconst options = this.options();\n\t\tconst search = this.searchTerm().toLowerCase().trim();\n\n\t\tif (!search) return options;\n\n\t\treturn options.filter((option) => {\n\t\t\tconst displayValue = this.getDisplayValue(option).toLowerCase();\n\t\t\treturn displayValue.includes(search);\n\t\t});\n\t});\n\n\t/**\n\t * Whether the overlay is currently open or in the process of opening/closing\n\t * @returns True if overlay is visible or animating\n\t */\n\tisOpen = computed(() => {\n\t\tconst state = this.animationState();\n\t\treturn state === 'opening' || state === 'open' || state === 'closing';\n\t});\n\n\t/**\n\t * Whether the overlay is currently animating to open state\n\t * @returns True if overlay is opening or open\n\t */\n\tisAnimatingOpen = computed(() => {\n\t\tconst state = this.animationState();\n\t\treturn state === 'opening' || state === 'open';\n\t});\n\n\t/**\n\t * Current animation state for template binding\n\t * @returns Current animation state\n\t */\n\tdataState = computed(() => this.animationState());\n\n\t/**\n\t * Display value for the selected option(s)\n\t * @returns Formatted display string based on selection type and current value\n\t */\n\tdisplayValue = computed(() => {\n\t\tconst selectionType = this.selectionType();\n\t\tconst currentValue = this.value();\n\n\t\tif (selectionType === 'multiple') {\n\t\t\tconst selected = Array.isArray(currentValue) ? currentValue : [];\n\t\t\tif (selected.length === 0) return this.translatedPlaceholder();\n\n\t\t\t// Validate that all selected values exist in options\n\t\t\tconst validSelected = selected.filter((value) => this.isValidValue(value));\n\t\t\tif (validSelected.length === 0) return this.translatedPlaceholder();\n\t\t\tif (validSelected.length === 1) return this.getDisplayValue(validSelected[0]);\n\t\t\treturn `${validSelected.length} items selected`;\n\t\t} else {\n\t\t\t// For single selection, only show display value if it's valid\n\t\t\tif (!currentValue || !this.isValidValue(currentValue)) {\n\t\t\t\treturn this.translatedPlaceholder();\n\t\t\t}\n\t\t\treturn this.getDisplayValue(currentValue);\n\t\t}\n\t});\n\n\t/**\n\t * Display information for multiple selection showing first item and additional count\n\t * @returns Object with first item display and additional count, or null for single selection\n\t */\n\tmultipleDisplayInfo = computed(() => {\n\t\tconst selectionType = this.selectionType();\n\t\tconst currentValue = this.value();\n\n\t\tif (selectionType === 'multiple') {\n\t\t\tconst selected = Array.isArray(currentValue) ? currentValue : [];\n\t\t\tif (selected.length === 0) return null;\n\t\t\tif (selected.length === 1) return { firstItem: this.getDisplayValue(selected[0]), additionalCount: 0 };\n\t\t\treturn {\n\t\t\t\tfirstItem: this.getDisplayValue(selected[0]),\n\t\t\t\tadditionalCount: selected.length - 1,\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t});\n\n\t/**\n\t * Whether the clear button should be shown\n\t * @returns True if there's a valid selected value and clear is allowed\n\t */\n\tshowClearButton = computed(() => {\n\t\tif (!this.allowClear() || this.disabled()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst currentValue = this.value();\n\t\tif (!currentValue) return false;\n\n\t\tif (this.selectionType() === 'multiple') {\n\t\t\t// For multiple selection, check if we have any valid values\n\t\t\tconst selected = Array.isArray(currentValue) ? currentValue : [];\n\t\t\treturn selected.some((value) => this.isValidValue(value));\n\t\t} else {\n\t\t\t// For single selection, check if the value is valid\n\t\t\treturn this.isValidValue(currentValue);\n\t\t}\n\t});\n\n\t/**\n\t * Base CSS classes for the combobox component\n\t * @internal\n\t */\n\tcomponentClass = computed(() => {\n\t\treturn cn(\n\t\t\tcomboboxComponent({\n\t\t\t\tvariant: this.variant(),\n\t\t\t\tsize: this.size(),\n\t\t\t}),\n\t\t\t{ 'select-ghost': this.ghost() },\n\t\t);\n\t});\n\n\t/**\n\t * Error state CSS classes\n\t * @internal\n\t */\n\terrorClass = computed(() => {\n\t\treturn cn(\n\t\t\tcomboboxComponent({\n\t\t\t\tvariant: 'error',\n\t\t\t\tsize: this.size(),\n\t\t\t}),\n\t\t\t{ 'select-ghost': this.ghost() },\n\t\t);\n\t});\n\n\t/**\n\t * Success state CSS classes\n\t * @internal\n\t */\n\tsuccessClass = computed(() => {\n\t\treturn cn(\n\t\t\tcomboboxComponent({\n\t\t\t\tvariant: 'success',\n\t\t\t\tsize: this.size(),\n\t\t\t}),\n\t\t\t{ 'select-ghost': this.ghost() },\n\t\t);\n\t});\n\n\t/**\n\t * Validation-aware CSS classes based on form control state\n\t * @internal\n\t */\n\tvalidationClass = computed(() => {\n\t\tconst control = this.formControl();\n\t\tconst trigger = this.blurTrigger();\n\n\t\tif (!control) return this.componentClass();\n\n\t\tif (control.pristine && !control.touched) {\n\t\t\treturn this.componentClass();\n\t\t}\n\n\t\tconst isTouched = control.touched || trigger > 0;\n\t\tthis.statusSignal();\n\t\tthis.stateSignal();\n\n\t\tif (control.dirty || isTouched) {\n\t\t\tif (control.invalid) return this.errorClass();\n\t\t\tif (control.valid) return this.successClass();\n\t\t}\n\n\t\treturn this.componentClass();\n\t});\n\n\t/**\n\t * CSS classes for the search input field\n\t * @internal\n\t */\n\tsearchInputClass = computed(() => {\n\t\treturn cn('input bg-base-200 w-full border-transparent focus-within:outline-none focus:border-transparent focus:outline-none', {\n\t\t\t'input-xs': this.size() === 'xs',\n\t\t\t'input-sm': this.size() === 'sm',\n\t\t\t'input-md': this.size() === 'md',\n\t\t\t'input-lg': this.size() === 'lg',\n\t\t\t'input-xl': this.size() === 'xl',\n\t\t});\n\t});\n\n\t/**\n\t * CSS classes for the options menu\n\t * @internal\n\t */\n\tmenuClass = computed(() => {\n\t\treturn cn(\n\t\t\t'menu max-h-72 w-full flex-nowrap overflow-y-auto overscroll-contain p-0 focus-within:outline-none focus:outline-none focus-visible:outline-none',\n\t\t\t{\n\t\t\t\t'menu-xs': this.size() === 'xs',\n\t\t\t\t'menu-sm': this.size() === 'sm',\n\t\t\t\t'menu-md': this.size() === 'md',\n\t\t\t\t'menu-lg': this.size() === 'lg',\n\t\t\t\t'menu-xl': this.size() === 'xl',\n\t\t\t},\n\t\t);\n\t});\n\n\t/**\n\t * CSS classes for the badge\n\t * @internal\n\t */\n\tbadgeClass = computed<BadgeSizeProps>(() => {\n\t\tconst size = this.size();\n\n\t\tswitch (size) {\n\t\t\tcase 'xs':\n\t\t\tcase 'sm':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'md':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'md';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'lg';\n\t\t\tdefault:\n\t\t\t\treturn 'sm';\n\t\t}\n\t});\n\n\t/**\n\t * Translated search placeholder text\n\t * @returns Translated placeholder or input value\n\t */\n\ttranslatedSearchPlaceholder = computed(() => {\n\t\tconst customPlaceholder = this.searchPlaceholder();\n\t\treturn customPlaceholder || this.translateService.instant('sdk.combobox.searchPlaceholder');\n\t});\n\n\t/**\n\t * Translated main placeholder text\n\t * @returns Translated placeholder or input value\n\t */\n\ttranslatedPlaceholder = computed(() => {\n\t\tconst customPlaceholder = this.placeholder();\n\t\treturn customPlaceholder || this.translateService.instant('sdk.combobox.placeholder');\n\t});\n\n\t/**\n\t * Translated no results text\n\t * @returns Translated no results text or input value\n\t */\n\ttranslatedNoResultsText = computed(() => {\n\t\tconst customNoResults = this.noResultsText();\n\t\treturn customNoResults || this.translateService.instant('sdk.combobox.noResultsFound');\n\t});\n\n\t/**\n\t * Current search input value for template binding\n\t * @returns Current search value\n\t */\n\tget currentSearchValue(): string {\n\t\treturn this.searchValue();\n\t}\n\n\t// ==============================================================================\n\t// LIFECYCLE METHODS\n\t// ==============================================================================\n\n\t/**\n\t * Updates the trigger width for proper overlay positioning\n\t */\n\tprivate readonly triggerWidthEffect = afterRenderEffect(() => {\n\t\tthis.updateTriggerWidth();\n\t});\n\n\t// ==============================================================================\n\t// CONTROL VALUE ACCESSOR IMPLEMENTATION\n\t// ==============================================================================\n\n\t/**\n\t * Writes a new value to the component\n\t * @param value - The new value to set\n\t */\n\twriteValue(value: any): void {\n\t\t// Only set the value if it's null/undefined or if it's valid\n\t\tif (!value) {\n\t\t\tthis.value.set(value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.selectionType() === 'multiple') {\n\t\t\t// For multiple selection, filter out invalid values\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tconst validValues = value.filter((v) => this.isValidValue(v));\n\t\t\t\tthis.value.set(validValues.length > 0 ? validValues : []);\n\t\t\t} else {\n\t\t\t\tthis.value.set([]);\n\t\t\t}\n\t\t} else {\n\t\t\t// For single selection, only set if valid\n\t\t\tconst isValid = this.isValidValue(value);\n\t\t\tthis.value.set(isValid ? value : null);\n\t\t}\n\t}\n\n\t/**\n\t * Registers a callback function to be called when the value changes\n\t * @param fn - The callback function\n\t */\n\tregisterOnChange(fn: (value: any) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\t/**\n\t * Registers a callback function to be called when the component is touched\n\t * @param fn - The callback function\n\t */\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\t// ==============================================================================\n\t// PUBLIC METHODS\n\t// ==============================================================================\n\n\t/**\n\t * Toggles the overlay open/closed state\n\t * Handles focus management and animation state transitions\n\t */\n\ttoggleOverlay() {\n\t\tconst currentState = this.animationState();\n\n\t\tif (currentState === 'closed') {\n\t\t\tthis.updateTriggerWidth();\n\t\t\tthis.animationState.set('opening');\n\t\t\t// Focus search input after opening\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.searchInputRef()?.nativeElement?.focus();\n\t\t\t\t// Set first option as active by default\n\t\t\t\tthis.setDefaultActiveOption();\n\t\t\t}, 100);\n\t\t} else if (currentState === 'open') {\n\t\t\tthis.animationState.set('closing');\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Handle click activation on trigger\n\t */\n\thandleClick(event: MouseEvent) {\n\t\tif (this.disabled()) return;\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.clicked.emit(event);\n\t\tthis.triggered.emit();\n\t\tthis.toggleOverlay();\n\t}\n\n\t/**\n\t * Handles animation end events to update state\n\t * @param event - The animation event\n\t */\n\tonAnimationEnd(event: AnimationEvent) {\n\t\tif (event.animationName === 'fade-in-up') {\n\t\t\tthis.animationState.set('open');\n\t\t} else if (event.animationName === 'fade-out-down') {\n\t\t\tthis.animationState.set('closed');\n\t\t\tthis.clearSearch();\n\t\t\tthis.triggerBlur();\n\t\t\t// Return focus to trigger button for better keyboard navigation\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.triggerRef()?.nativeElement?.focus();\n\t\t\t}, 0);\n\t\t}\n\t}\n\n\t/**\n\t * Handles overlay detachment\n\t * Cleans up state and triggers blur\n\t */\n\thandleDetach() {\n\t\tthis.animationState.set('closed');\n\t\tthis.clearSearch();\n\t\tthis.triggerBlur();\n\t}\n\n\t/**\n\t * Handles overlay position changes to determine animation direction\n\t * @param event - The position change event from CDK overlay\n\t */\n\tonPositionChange(event: ConnectedOverlayPositionChange): void {\n\t\tthis.currentPosition.set(event?.connectionPair || null);\n\t}\n\n\t/**\n\t * Handles clicks outside the component\n\t * @param event - The mouse event\n\t */\n\thandleClickOutside(event: MouseEvent) {\n\t\tif (this.animationState() === 'open') {\n\t\t\tthis.animationState.set('closing');\n\t\t}\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.triggerBlur();\n\t}\n\n\t/**\n\t * Handles search input changes\n\t * @param event - The input event\n\t */\n\thandleSearchInput(event: Event) {\n\t\tconst target = event.target as HTMLInputElement;\n\t\tconst searchValue = target.value;\n\t\tthis.searchValue.set(searchValue);\n\n\t\tif (this.searchDebounced()) {\n\t\t\tthis.searchSubject.next(searchValue);\n\t\t} else {\n\t\t\tthis.searchTerm.set(searchValue);\n\t\t\t// Set first option as active after search\n\t\t\tsetTimeout(() => this.setDefaultActiveOption(), 0);\n\t\t}\n\t}\n\n\t/**\n\t * Handles option selection\n\t * @param option - The selected option\n\t */\n\thandleOptionSelect(option: any) {\n\t\tconst selectionType = this.selectionType();\n\t\tconst currentValue = this.value();\n\n\t\tif (selectionType === 'multiple') {\n\t\t\tconst currentValues = Array.isArray(currentValue) ? currentValue : [];\n\t\t\tconst optionValue = this.getOptionValue(option);\n\t\t\tconst isSelected = this.isOptionSelected(option);\n\n\t\t\tlet newValues: any[];\n\t\t\tif (isSelected) {\n\t\t\t\tnewValues = currentValues.filter((value) => this.getOptionValue(value) !== optionValue);\n\t\t\t} else {\n\t\t\t\tnewValues = [...currentValues, option];\n\t\t\t}\n\n\t\t\tthis.value.set(newValues);\n\t\t\tthis.onChange(newValues);\n\t\t\tthis.valueUpdated.emit(newValues);\n\t\t} else {\n\t\t\tthis.value.set(option);\n\t\t\tthis.onChange(option);\n\t\t\tthis.valueUpdated.emit(option);\n\t\t\tthis.animationState.set('closing');\n\t\t}\n\n\t\tthis.onTouched();\n\t}\n\n\t/**\n\t * Handles CDK listbox selection changes\n\t * @param event - The selection change event\n\t */\n\thandleSelectionChange(event: any) {\n\t\tif (event.option) {\n\t\t\tthis.handleOptionSelect(event.option.value);\n\t\t}\n\t}\n\n\t/**\n\t * Handles keyboard events for option selection\n\t * @param event - The keyboard event\n\t */\n\thandleListboxKeydown(event: KeyboardEvent) {\n\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\tevent.preventDefault();\n\t\t\tif (this.stopPropagation()) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\n\t\t\tconst focusedOption = this.optionsList()?.nativeElement.querySelector('.cdk-option-active');\n\t\t\tif (focusedOption) {\n\t\t\t\tconst optionIndex = parseInt(focusedOption.getAttribute('data-option-index') || '0');\n\t\t\t\tconst filteredOptions = this.filteredOptions();\n\t\t\t\tif (optionIndex >= 0 && optionIndex < filteredOptions.length) {\n\t\t\t\t\tthis.handleOptionSelect(filteredOptions[optionIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handles keyboard events on the search input for navigation and selection\n\t * @param event - The keyboard event\n\t */\n\thandleSearchKeydown(event: KeyboardEvent) {\n\t\tconst filteredOptions = this.filteredOptions();\n\t\tconst currentIndex = this.activeOptionIndex();\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.stopPropagation()) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t\tconst nextIndex = currentIndex < filteredOptions.length - 1 ? currentIndex + 1 : 0;\n\t\t\t\tthis.setActiveOption(nextIndex);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'ArrowUp': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.stopPropagation()) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t\tconst prevIndex = currentIndex > 0 ? currentIndex - 1 : filteredOptions.length - 1;\n\t\t\t\tthis.setActiveOption(prevIndex);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'Enter':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.stopPropagation()) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t\tif (currentIndex >= 0 && currentIndex < filteredOptions.length) {\n\t\t\t\t\tthis.handleOptionSelect(filteredOptions[currentIndex]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'Tab': {\n\t\t\t\t// Allow Tab only to clear button in multiple selection mode\n\t\t\t\tconst isMultipleSelection = this.selectionType() === 'multiple';\n\t\t\t\tconst hasSelectedValues = this.value() && this.isArray(this.value()) && this.value().length > 0;\n\n\t\t\t\tif (isMultipleSelection && hasSelectedValues) {\n\t\t\t\t\t// Allow default Tab behavior to go to clear button\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t// Prevent tabbing out of the search input\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif (this.stopPropagation()) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'Escape':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.stopPropagation()) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t\tthis.animationState.set('closing');\n\t\t\t\tthis.activeOptionIndex.set(-1);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// For other keys (including space), set first option as active for typing\n\t\t\t\tsetTimeout(() => this.setDefaultActiveOption(), 0);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Handles keyboard events on the clear all button\n\t * @param event - The keyboard event\n\t */\n\thandleClearButtonKeydown(event: KeyboardEvent) {\n\t\tif (event.key === 'Tab') {\n\t\t\t// Prevent default Tab behavior and focus back to search input\n\t\t\tevent.preventDefault();\n\t\t\tif (this.stopPropagation()) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\tthis.searchInputRef()?.nativeElement?.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Handles keyboard events on the trigger button\n\t * @param event - The keyboard event\n\t */\n\thandleTriggerKeydown(event: KeyboardEvent) {\n\t\tif (event.key === 'Enter') {\n\t\t\tif (this.stopPropagation()) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\tthis.keyDownEnter.emit(event);\n\t\t\tthis.triggered.emit();\n\t\t}\n\t\tif (event.key === ' ') {\n\t\t\tif (this.stopPropagation()) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\tthis.keyDownSpace.emit(event);\n\t\t\tthis.triggered.emit();\n\t\t}\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowDown':\n\t\t\tcase 'ArrowUp':\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (this.animationState() === 'closed') {\n\t\t\t\t\tthis.toggleOverlay();\n\t\t\t\t} else {\n\t\t\t\t\t// If already open, handle navigation\n\t\t\t\t\tthis.handleListboxKeydown(event);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Escape':\n\t\t\t\tif (this.animationState() === 'open') {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif (this.stopPropagation()) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tthis.animationState.set('closing');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Clears the current selection\n\t */\n\tclearSelection() {\n\t\tif (this.selectionType() === 'multiple') {\n\t\t\tthis.value.set([]);\n\t\t\tthis.onChange([]);\n\t\t\tthis.valueUpdated.emit([]);\n\t\t} else {\n\t\t\tthis.value.set(null);\n\t\t\tthis.onChange(null);\n\t\t\tthis.valueUpdated.emit(null);\n\t\t}\n\t\tthis.onTouched();\n\n\t\t// Focus back to search input after clearing\n\t\tsetTimeout(() => {\n\t\t\tthis.searchInputRef()?.nativeElement?.focus();\n\t\t\t// Set first option as active by default after clearing\n\t\t\tthis.setDefaultActiveOption();\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Handles clear selection button click\n\t * @param event - The click event\n\t */\n\thandleClearSelection(event: Event) {\n\t\tif (this.stopPropagation()) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.clearSelection();\n\t}\n\n\t/**\n\t * Checks if an option is currently selected\n\t * @param option - The option to check\n\t * @returns True if the option is selected\n\t */\n\tisOptionSelected(option: any): boolean {\n\t\tconst selectionType = this.selectionType();\n\t\tconst currentValue = this.value();\n\t\tconst optionValue = this.getOptionValue(option);\n\n\t\tif (selectionType === 'multiple') {\n\t\t\tconst selected = Array.isArray(currentValue) ? currentValue : [];\n\t\t\treturn selected.some((value) => this.getOptionValue(value) === optionValue);\n\t\t} else {\n\t\t\treturn currentValue && this.getOptionValue(currentValue) === optionValue;\n\t\t}\n\t}\n\n\t/**\n\t * Checks if an option is currently active for keyboard navigation\n\t * @param index - The option index\n\t * @returns True if the option is active\n\t */\n\tisActiveOption(index: number): boolean {\n\t\treturn this.activeOptionIndex() === index;\n\t}\n\n\t/**\n\t * Gets the display value for an option\n\t * @param option - The option to get display value for\n\t * @returns The display string for the option\n\t */\n\tgetDisplayValue(option: any): string {\n\t\tif (!option) return '';\n\t\tconst displayKey = this.displayKey();\n\n\t\tif (displayKey && typeof option === 'object') {\n\t\t\treturn option[displayKey] || '';\n\t\t}\n\n\t\tif (typeof option === 'object') {\n\t\t\tconst commonKeys = ['name', 'label', 'text', 'title', 'displayName'];\n\t\t\tfor (const key of commonKeys) {\n\t\t\t\tif (option[key] !== undefined && option[key] !== null) {\n\t\t\t\t\treturn String(option[key]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst keys = Object.keys(option);\n\t\t\tfor (const key of keys) {\n\t\t\t\tconst value = option[key];\n\t\t\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\t\t\treturn String(value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn JSON.stringify(option);\n\t\t}\n\n\t\treturn String(option);\n\t}\n\n\t/**\n\t * Type guard to check if a value is an array\n\t * @param value - The value to check\n\t * @returns True if the value is an array\n\t */\n\tisArray(value: any): value is any[] {\n\t\treturn Array.isArray(value);\n\t}\n\n\t// ==============================================================================\n\t// PRIVATE METHODS\n\t// ==============================================================================\n\n\t/**\n\t * Updates the trigger button width for overlay positioning\n\t */\n\tprivate updateTriggerWidth() {\n\t\tif (this.triggerRef) {\n\t\t\tconst width = this.triggerRef()?.nativeElement.offsetWidth;\n\t\t\tif (!width) return;\n\t\t\tthis.triggerWidth.set(width);\n\t\t}\n\t}\n\n\t/**\n\t * Gets the value property from an option\n\t * @param option - The option to get value from\n\t * @returns The option value\n\t */\n\tprivate getOptionValue(option: any): any {\n\t\tif (!option) return option;\n\t\tconst valueKey = this.valueKey();\n\t\treturn valueKey && typeof option === 'object' ? option[valueKey] : option;\n\t}\n\n\t/**\n\t * Checks if a value is valid (exists in options)\n\t * @param value - The value to validate\n\t * @returns True if the value exists in the options array\n\t */\n\tprivate isValidValue(value: any): boolean {\n\t\tif (!value) return false;\n\n\t\tconst options = this.options();\n\t\treturn options.some((option) => {\n\t\t\tif (typeof option === 'string' && typeof value === 'string') {\n\t\t\t\treturn option === value;\n\t\t\t}\n\t\t\t// For objects, check if the value matches the option or its value property\n\t\t\tconst optionValue = this.getOptionValue(option);\n\t\t\tconst currentValue = this.getOptionValue(value);\n\t\t\treturn optionValue === currentValue || option === value;\n\t\t});\n\t}\n\n\t/**\n\t * Triggers blur event for form validation\n\t */\n\tprivate triggerBlur() {\n\t\tthis.blurTrigger.update((val) => val + 1);\n\t\tthis.onTouched();\n\t\tthis.blurred.emit(this.value());\n\t}\n\n\t/**\n\t * Clears the search input and term\n\t */\n\tprivate clearSearch() {\n\t\tthis.searchValue.set('');\n\t\tthis.searchTerm.set('');\n\t\tthis.activeOptionIndex.set(-1);\n\t}\n\n\t/**\n\t * Sets up reactive search handling with debouncing\n\t * The debounce time updates reactively when the input changes\n\t */\n\tprivate setupSearchHandling() {\n\t\tconst debounceTime$ = toObservable(this.searchDebounceTime);\n\n\t\tdebounceTime$\n\t\t\t.pipe(\n\t\t\t\tswitchMap((currentDebounceTime) => {\n\t\t\t\t\treturn this.searchSubject.pipe(debounceTime(currentDebounceTime), distinctUntilChanged());\n\t\t\t\t}),\n\t\t\t\ttakeUntilDestroyed(),\n\t\t\t)\n\t\t\t.subscribe((searchValue: string) => {\n\t\t\t\tthis.searchTerm.set(searchValue);\n\t\t\t\t// Set first option as active after debounced search\n\t\t\t\tsetTimeout(() => this.setDefaultActiveOption(), 0);\n\t\t\t});\n\t}\n\n\t/**\n\t * Sets the active option for keyboard navigation\n\t * @param index - The index of the option to make active\n\t */\n\tprivate setActiveOption(index: number) {\n\t\tthis.activeOptionIndex.set(index);\n\t\tthis.updateActiveOptionVisually();\n\t}\n\n\t/**\n\t * Sets the first option as active by default\n\t */\n\tprivate setDefaultActiveOption() {\n\t\tconst filteredOptions = this.filteredOptions();\n\t\tif (filteredOptions.length > 0) {\n\t\t\tthis.setActiveOption(0);\n\t\t}\n\t}\n\n\t/**\n\t * Updates the visual state of the active option\n\t */\n\tprivate updateActiveOptionVisually() {\n\t\tif (!this.optionsList()?.nativeElement) return;\n\n\t\t// Remove active class from all options\n\t\tconst allOptions = this.optionsList()?.nativeElement.querySelectorAll('[data-option-index]');\n\t\tif (!allOptions) return;\n\t\tallOptions.forEach((option) => {\n\t\t\toption.classList.remove('cdk-option-active');\n\t\t});\n\n\t\t// Add active class to current option\n\t\tconst currentIndex = this.activeOptionIndex();\n\t\tif (currentIndex >= 0) {\n\t\t\tconst activeOption = this.optionsList()?.nativeElement.querySelector(`[data-option-index=\"${currentIndex}\"]`);\n\t\t\tif (activeOption) {\n\t\t\t\tactiveOption.classList.add('cdk-option-active');\n\t\t\t\t// Scroll into view if needed\n\t\t\t\tactiveOption.scrollIntoView({ block: 'nearest' });\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets up the search query emission effect\n\t * Emits search results whenever the search term or options change\n\t */\n\tprivate setupSearchQueryEmission() {\n\t\teffect(() => {\n\t\t\tconst query = this.searchTerm();\n\t\t\tconst results = this.filteredOptions();\n\n\t\t\t// Emit the search query event with current query and filtered results\n\t\t\tthis.searchQuery.emit({ query, results });\n\t\t});\n\t}\n}\n","@let isOpen = this.isOpen(); @let isAnimatingOpen = this.isAnimatingOpen(); @let triggerWidth = this.triggerWidth();\n@let dataState = this.dataState(); @let filteredOptions = this.filteredOptions(); @let displayValue = this.displayValue();\n@let multipleDisplayInfo = this.multipleDisplayInfo(); @let label = this.label();\n\n<fieldset class=\"fieldset p-0\">\n\t@if (label) {\n\t\t<legend class=\"fieldset-legend font-body w-full items-center justify-between gap-2 pt-0 font-normal text-pretty\">\n\t\t\t<span>{{ label }}</span>\n\t\t\t@if (showOptional()) {\n\t\t\t\t<span class=\"label font-body text-xs font-normal\">{{ optionalText() | translate }}</span>\n\t\t\t}\n\t\t</legend>\n\t}\n\n\t<button\n\t\t#trigger\n\t\t[class]=\"validationClass()\"\n\t\t(click)=\"handleClick($event)\"\n\t\t(keydown)=\"handleTriggerKeydown($event)\"\n\t\ttype=\"button\"\n\t\tcdkOverlayOrigin\n\t\taria-haspopup=\"true\"\n\t\trole=\"combobox\"\n\t\t[attr.aria-controls]=\"'combobox-list'\"\n\t\t[attr.aria-expanded]=\"isOpen\"\n\t\t[disabled]=\"disabled()\"\n\t>\n\t\t<span class=\"flex-1 truncate text-left\">\n\t\t\t@if (selectionType() === 'multiple' && multipleDisplayInfo) {\n\t\t\t\t<span class=\"inline-flex items-center gap-2\">\n\t\t\t\t\t<span class=\"truncate\">{{ multipleDisplayInfo.firstItem }}</span>\n\t\t\t\t\t@if (multipleDisplayInfo.additionalCount > 0) {\n\t\t\t\t\t\t<st-badge [size]=\"badgeClass()\">+{{ multipleDisplayInfo.additionalCount }}</st-badge>\n\t\t\t\t\t}\n\t\t\t\t</span>\n\t\t\t} @else {\n\t\t\t\t{{ displayValue }}\n\t\t\t}\n\t\t</span>\n\t\t<div class=\"inline-flex items-center justify-items-end gap-2\">\n\t\t\t<!-- Clear button for both single and multiple selection -->\n\t\t\t@if (showClearButton()) {\n\t\t\t\t<div class=\"grid translate-x-full place-content-center\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"btn font-body btn-sm btn-secondary h-[1.5em] w-[1.5em] items-center p-0 align-top [font-size:inherit] leading-normal font-medium text-pretty\"\n\t\t\t\t\t\t(click)=\"handleClearSelection($event)\"\n\t\t\t\t\t\t(keydown.enter)=\"handleClearSelection($event)\"\n\t\t\t\t\t\t(keydown.space)=\"handleClearSelection($event)\"\n\t\t\t\t\t\t[attr.aria-label]=\"'sdk.combobox.clearSelection' | translate\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<st-icon [icon]=\"iconClose\"></st-icon>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<st-icon\n\t\t\t\tclass=\"h-[1.5em] w-[1.5em] flex-0 translate-x-full transition-transform duration-200\"\n\t\t\t\t[class.rotate-180]=\"isAnimatingOpen\"\n\t\t\t\t[icon]=\"iconChevronDown\"\n\t\t\t></st-icon>\n\t\t</div>\n\t</button>\n\n\t<ng-template\n\t\tcdkConnectedOverlay\n\t\t[cdkConnectedOverlayOrigin]=\"trigger\"\n\t\t[cdkConnectedOverlayOpen]=\"isOpen\"\n\t\t[cdkConnectedOverlayWidth]=\"triggerWidth\"\n\t\t[cdkConnectedOverlayMinWidth]=\"triggerWidth\"\n\t\t(detach)=\"handleDetach()\"\n\t\t(overlayOutsideClick)=\"handleClickOutside($event)\"\n\t\t(positionChange)=\"onPositionChange($event)\"\n\t>\n\t\t<div\n\t\t\t[class]=\"'bg-base-200 rounded-box shadow-main border-neutral ' + animationClasses() + ' mt-1 w-full border border-solid'\"\n\t\t\t(animationend)=\"onAnimationEnd($event)\"\n\t\t\t[attr.data-state]=\"dataState\"\n\t\t>\n\t\t\t<!-- Search Input -->\n\t\t\t<div class=\"border-neutral border-b\">\n\t\t\t\t@let searchInputClass = this.searchInputClass();\n\t\t\t\t<div [class]=\"searchInputClass\">\n\t\t\t\t\t<st-icon class=\"text-base-placeholder\" [icon]=\"iconSearch\"></st-icon>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#searchInput\n\t\t\t\t\t\tclass=\"placeholder:text-base-placeholder w-full border-transparent py-0 focus-within:outline-none focus:border-transparent focus:outline-none\"\n\t\t\t\t\t\t[value]=\"currentSearchValue\"\n\t\t\t\t\t\t(input)=\"handleSearchInput($event)\"\n\t\t\t\t\t\t(keydown)=\"handleSearchKeydown($event)\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t[placeholder]=\"translatedSearchPlaceholder()\"\n\t\t\t\t\t\t[attr.aria-label]=\"'sdk.combobox.searchOptions' | translate\"\n\t\t\t\t\t\t[disabled]=\"!isOpen\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- Options List -->\n\t\t\t@let menuClass = this.menuClass();\n\t\t\t<ul\n\t\t\t\t[class]=\"menuClass\"\n\t\t\t\tcdkListbox\n\t\t\t\tcdkListboxUseActiveDescendant\n\t\t\t\t[cdkListboxMultiple]=\"selectionType() === 'multiple'\"\n\t\t\t\taria-labelledby=\"Combobox options\"\n\t\t\t\trole=\"listbox\"\n\t\t\t\t#optionsList\n\t\t\t\t[tabindex]=\"-1\"\n\t\t\t\t(keydown)=\"handleListboxKeydown($event)\"\n\t\t\t\t(selectionChange)=\"handleSelectionChange($event)\"\n\t\t\t>\n\t\t\t\t@for (option of filteredOptions; track $index) {\n\t\t\t\t\t<li [cdkOption]=\"option\" class=\"group\" [attr.data-option-index]=\"$index\" [class.cdk-option-active]=\"isActiveOption($index)\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"group-[.cdk-option-active]:bg-base-300 font-body flex w-full items-center justify-between rounded-none px-4 py-2 text-left leading-normal font-normal text-pretty transition-colors duration-150 ease-in-out\"\n\t\t\t\t\t\t\t(click)=\"handleOptionSelect(option)\"\n\t\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"flex-1 truncate\">{{ getDisplayValue(option) }}</span>\n\n\t\t\t\t\t\t\t@if (isOptionSelected(option)) {\n\t\t\t\t\t\t\t\t<st-icon class=\"h-4 w-4 shrink-0\" [icon]=\"iconCheck\"></st-icon>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\n\t\t\t\t<!-- Empty state -->\n\t\t\t\t@if (filteredOptions.length === 0) {\n\t\t\t\t\t<li class=\"text-base-content/60 px-4 py-2 text-center\">\n\t\t\t\t\t\t<span>{{ translatedNoResultsText() }}</span>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\n\t\t\t<!-- Clear All button for multiple selection -->\n\t\t\t@if (selectionType() === 'multiple' && allowClearAll() && value() && isArray(value()) && value().length > 0) {\n\t\t\t\t<div class=\"border-base-300 border-t p-2\">\n\t\t\t\t\t<button type=\"button\" class=\"btn btn-outline btn-sm w-full\" (click)=\"clearSelection()\" (keydown)=\"handleClearButtonKeydown($event)\">\n\t\t\t\t\t\t{{ 'sdk.combobox.clearAll' | translate }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</ng-template>\n\n\t<!-- Hidden label for accessibility -->\n\t<label class=\"sr-only\" [for]=\"name()\">{{ label }}</label>\n\n\t<!-- Additional content -->\n\t<ng-content></ng-content>\n</fieldset>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}