{"version":3,"file":"ngx-com-components-dropdown.mjs","sources":["../../../projects/com/components/dropdown/dropdown.variants.ts","../../../projects/com/components/dropdown/dropdown-option.component.ts","../../../projects/com/components/dropdown/dropdown-search.component.ts","../../../projects/com/components/dropdown/dropdown-tag.component.ts","../../../projects/com/components/dropdown/dropdown-group.component.ts","../../../projects/com/components/dropdown/directives/dropdown-option-tpl.directive.ts","../../../projects/com/components/dropdown/directives/dropdown-selected-tpl.directive.ts","../../../projects/com/components/dropdown/directives/dropdown-empty-tpl.directive.ts","../../../projects/com/components/dropdown/directives/dropdown-group-tpl.directive.ts","../../../projects/com/components/dropdown/directives/dropdown-tag-tpl.directive.ts","../../../projects/com/components/dropdown/directives/dropdown-loading-tpl.directive.ts","../../../projects/com/components/dropdown/dropdown.models.ts","../../../projects/com/components/dropdown/dropdown.component.ts","../../../projects/com/components/dropdown/dropdown-panel.component.ts","../../../projects/com/components/dropdown/index.ts","../../../projects/com/components/dropdown/ngx-com-components-dropdown.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\n\n/**\n * Variant type for dropdown trigger appearance.\n */\nexport type DropdownVariant = 'default' | 'outline' | 'ghost' | 'filled' | 'naked';\n\n/**\n * Size type for dropdown components.\n */\nexport type DropdownSize = 'sm' | 'default' | 'lg';\n\n/**\n * State type for validation states.\n */\nexport type DropdownState = 'default' | 'error' | 'success';\n\n/**\n * Option state for styling.\n */\ntype OptionState = 'default' | 'active' | 'selected' | 'selected-active' | 'disabled';\n\n/**\n * Tag variant type.\n */\ntype TagVariant = 'default' | 'primary';\n\n/**\n * CVA variants for the dropdown trigger button.\n * Uses semantic theme tokens for consistent cross-theme styling.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n *         `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-hover`,\n *         `--color-warn`, `--color-success`, `--color-primary`, `--color-border`, `--radius-input`\n */\nexport const dropdownTriggerVariants: (props?: {\n  variant?: DropdownVariant;\n  size?: DropdownSize;\n  state?: DropdownState;\n  open?: boolean;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-between',\n    'w-full',\n    'rounded-input',\n    'border',\n    'bg-input-background',\n    'text-input-foreground',\n    'transition-colors',\n    'duration-normal',\n    'placeholder:text-input-placeholder',\n    'focus-visible:outline-[1px]',\n    'focus-visible:outline-offset-2',\n    'focus-visible:outline-ring',\n    'disabled:cursor-not-allowed',\n    'disabled:bg-disabled',\n    'disabled:text-disabled-foreground',\n  ],\n  {\n    variants: {\n      variant: {\n        default: [\n          'border-input-border',\n          'hover:border-border',\n        ],\n        outline: [\n          'border-2',\n          'border-input-border',\n          'hover:border-foreground',\n        ],\n        ghost: [\n          'border-transparent',\n          'bg-transparent',\n          'hover:bg-muted',\n        ],\n        filled: [\n          'border-transparent',\n          'bg-muted',\n          'hover:bg-muted-hover',\n        ],\n        naked: [\n          'border-transparent',\n          'bg-transparent',\n          'shadow-none',\n          'focus-visible:outline-none',\n          'rounded-none',\n          'disabled:bg-transparent',\n        ],\n      },\n      size: {\n        sm: ['h-8', 'px-2', 'text-xs', 'gap-1'],\n        default: ['h-10', 'px-3', 'text-sm', 'gap-2'],\n        lg: ['h-12', 'px-4', 'text-base', 'gap-3'],\n      },\n      state: {\n        default: [],\n        error: [\n          'border-warn',\n          'focus-visible:outline-warn',\n        ],\n        success: [\n          'border-success',\n          'focus-visible:outline-success',\n        ],\n      },\n      open: {\n        true: ['outline-[1px]', 'outline-ring', 'border-primary'],\n        false: [],\n      },\n    },\n    compoundVariants: [\n      {\n        open: true,\n        variant: 'default',\n        class: ['border-primary'],\n      },\n      {\n        open: true,\n        variant: 'outline',\n        class: ['border-primary'],\n      },\n      // Naked variant should not show ring when open (form-field provides focus styling)\n      {\n        open: true,\n        variant: 'naked',\n        class: ['outline-none', 'border-transparent'],\n      },\n      // Naked variant should not show error border (form-field provides error styling)\n      {\n        state: 'error',\n        variant: 'naked',\n        class: ['border-transparent', 'focus-visible:outline-none'],\n      },\n      // Naked variant should not show success border (form-field provides styling)\n      {\n        state: 'success',\n        variant: 'naked',\n        class: ['border-transparent', 'focus-visible:outline-none'],\n      },\n    ],\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n      state: 'default',\n      open: false,\n    },\n  }\n);\n\nexport type DropdownTriggerVariants = VariantProps<typeof dropdownTriggerVariants>;\n\n/**\n * CVA variants for the dropdown panel (overlay).\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`, `--shadow-overlay`, `--radius-overlay`\n */\nexport const dropdownPanelVariants: (props?: {\n  size?: DropdownSize;\n}) => string = cva(\n  [\n    'z-50',\n    'overflow-hidden',\n    'rounded-overlay',\n    'border',\n    'border-border-subtle',\n    'bg-popover',\n    'text-popover-foreground',\n    'shadow-overlay',\n    'outline-none',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['text-xs'],\n        default: ['text-sm'],\n        lg: ['text-base'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DropdownPanelVariants = VariantProps<typeof dropdownPanelVariants>;\n\n/**\n * CVA variants for individual dropdown options.\n *\n * @tokens `--color-popover-foreground`, `--color-muted`, `--color-primary-subtle`,\n *         `--color-primary-subtle-foreground`, `--color-disabled-foreground`\n */\nexport const dropdownOptionVariants: (props?: {\n  size?: DropdownSize;\n  state?: OptionState;\n}) => string = cva(\n  [\n    'relative',\n    'flex',\n    'w-full',\n    'cursor-pointer',\n    'select-none',\n    'items-center',\n    'outline-none',\n    'transition-colors',\n    'duration-fast',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['px-2', 'py-1.5', 'text-xs'],\n        default: ['px-3', 'py-2', 'text-sm'],\n        lg: ['px-4', 'py-3', 'text-base'],\n      },\n      state: {\n        default: [\n          'text-popover-foreground',\n          'hover:bg-muted',\n        ],\n        active: [\n          'bg-muted',\n          'text-popover-foreground',\n        ],\n        selected: [\n          'bg-primary-subtle',\n          'text-primary-subtle-foreground',\n        ],\n        'selected-active': [\n          'bg-primary-subtle',\n          'text-primary-subtle-foreground',\n          'brightness-95',\n        ],\n        disabled: [\n          'cursor-not-allowed',\n          'text-disabled-foreground',\n          'hover:bg-transparent',\n        ],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n      state: 'default',\n    },\n  }\n);\n\nexport type DropdownOptionVariants = VariantProps<typeof dropdownOptionVariants>;\n\n/**\n * CVA variants for the search input.\n *\n * @tokens `--color-border-subtle`, `--color-input-placeholder`, `--color-disabled-foreground`\n */\nexport const dropdownSearchVariants: (props?: {\n  size?: DropdownSize;\n}) => string = cva(\n  [\n    'flex',\n    'h-10',\n    'w-full',\n    'border-b',\n    'border-border-subtle',\n    'bg-transparent',\n    'px-3',\n    'py-2',\n    'text-sm',\n    'placeholder:text-input-placeholder',\n    'outline-none',\n    'disabled:cursor-not-allowed',\n    'disabled:text-disabled-foreground',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-8', 'px-2', 'text-xs'],\n        default: ['h-10', 'px-3', 'text-sm'],\n        lg: ['h-12', 'px-4', 'text-base'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DropdownSearchVariants = VariantProps<typeof dropdownSearchVariants>;\n\n/**\n * CVA variants for multi-select tags.\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n *         `--color-primary-subtle`, `--color-primary-subtle-foreground`, `--radius-tag`\n */\nexport const dropdownTagVariants: (props?: {\n  size?: DropdownSize;\n  variant?: TagVariant;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'gap-1',\n    'rounded-tag',\n    'font-medium',\n    'transition-colors',\n    'duration-fast',\n    'max-w-full',\n    'overflow-hidden',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-5', 'px-1.5', 'text-xs'],\n        default: ['h-6', 'px-2', 'text-xs'],\n        lg: ['h-7', 'px-2.5', 'text-sm'],\n      },\n      variant: {\n        default: [\n          'bg-muted',\n          'text-muted-foreground',\n          'hover:bg-muted-hover',\n        ],\n        primary: [\n          'bg-primary-subtle',\n          'text-primary-subtle-foreground',\n          'hover:brightness-95',\n        ],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n      variant: 'primary',\n    },\n  }\n);\n\nexport type DropdownTagVariants = VariantProps<typeof dropdownTagVariants>;\n\n/**\n * CVA variants for the tag remove button.\n *\n * @tokens `--color-ring`, `--radius-interactive-sm`, `--color-muted-foreground`, `--color-foreground`\n */\nexport const dropdownTagRemoveVariants: (props?: {\n  size?: DropdownSize;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-center',\n    'rounded-interactive-sm',\n    'text-muted-foreground',\n    'transition-colors',\n    'hover:text-foreground',\n    'focus-visible:outline-[1px]',\n    'focus-visible:outline-offset-2',\n    'focus-visible:outline-ring',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-3', 'w-3'],\n        default: ['h-3.5', 'w-3.5'],\n        lg: ['h-4', 'w-4'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DropdownTagRemoveVariants = VariantProps<typeof dropdownTagRemoveVariants>;\n\n/**\n * CVA variants for the overflow badge (+N indicator).\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--radius-tag`\n */\nexport const dropdownOverflowBadgeVariants: (props?: {\n  size?: DropdownSize;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-center',\n    'rounded-tag',\n    'font-medium',\n    'text-muted-foreground',\n    'bg-muted',\n    'shrink-0',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-5', 'px-1.5', 'text-xs'],\n        default: ['h-6', 'px-2', 'text-xs'],\n        lg: ['h-7', 'px-2.5', 'text-sm'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DropdownOverflowBadgeVariants = VariantProps<typeof dropdownOverflowBadgeVariants>;\n\n/**\n * CVA variants for group headers.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const dropdownGroupVariants: (props?: {\n  size?: DropdownSize;\n}) => string = cva(\n  [\n    'flex',\n    'items-center',\n    'px-3',\n    'py-2',\n    'text-xs',\n    'font-semibold',\n    'uppercase',\n    'tracking-wider',\n    'text-muted-foreground',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['px-2', 'py-1.5'],\n        default: ['px-3', 'py-2'],\n        lg: ['px-4', 'py-2.5'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DropdownGroupVariants = VariantProps<typeof dropdownGroupVariants>;\n\n/**\n * CVA variants for the empty state.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const dropdownEmptyVariants: (props?: {\n  size?: DropdownSize;\n}) => string = cva(\n  [\n    'flex',\n    'items-center',\n    'justify-center',\n    'px-3',\n    'py-6',\n    'text-muted-foreground',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['px-2', 'py-4', 'text-xs'],\n        default: ['px-3', 'py-6', 'text-sm'],\n        lg: ['px-4', 'py-8', 'text-base'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DropdownEmptyVariants = VariantProps<typeof dropdownEmptyVariants>;\n\n/**\n * CVA variants for the clear button.\n *\n * @tokens `--color-ring`, `--radius-interactive-sm`, `--color-muted-foreground`, `--color-foreground`\n */\nexport const dropdownClearVariants: (props?: {\n  size?: DropdownSize;\n}) => string = cva(\n  [\n    'inline-flex',\n    'items-center',\n    'justify-center',\n    'rounded-interactive-sm',\n    'text-muted-foreground',\n    'transition-colors',\n    'hover:text-foreground',\n    'focus-visible:outline-[1px]',\n    'focus-visible:outline-offset-2',\n    'focus-visible:outline-ring',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-4', 'w-4'],\n        default: ['h-5', 'w-5'],\n        lg: ['h-6', 'w-6'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DropdownClearVariants = VariantProps<typeof dropdownClearVariants>;\n\n/**\n * CVA variants for the chevron icon.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const dropdownChevronVariants: (props?: {\n  size?: DropdownSize;\n  open?: boolean;\n  disabled?: boolean;\n}) => string = cva(\n  [\n    'shrink-0',\n    'text-muted-foreground',\n    'transition-transform',\n    'duration-slow',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['h-3', 'w-3'],\n        default: ['h-4', 'w-4'],\n        lg: ['h-5', 'w-5'],\n      },\n      open: {\n        true: ['rotate-180'],\n        false: ['rotate-0'],\n      },\n      disabled: {\n        true: 'text-disabled-foreground',\n        false: '',\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n      open: false,\n      disabled: false,\n    },\n  }\n);\n\nexport type DropdownChevronVariants = VariantProps<typeof dropdownChevronVariants>;\n\n/**\n * CVA variants for the loading indicator container.\n *\n * @tokens `--color-muted-foreground`\n */\nexport const dropdownLoadingVariants: (props?: {\n  size?: DropdownSize;\n}) => string = cva(\n  [\n    'flex',\n    'items-center',\n    'justify-center',\n    'text-muted-foreground',\n  ],\n  {\n    variants: {\n      size: {\n        sm: ['px-2', 'py-3', 'text-xs'],\n        default: ['px-3', 'py-3', 'text-sm'],\n        lg: ['px-4', 'py-4', 'text-base'],\n      },\n    },\n    defaultVariants: {\n      size: 'default',\n    },\n  }\n);\n\nexport type DropdownLoadingVariants = VariantProps<typeof dropdownLoadingVariants>;\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n  viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef, ElementRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownOptionVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownOptionContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * A single option in the dropdown list.\n * Implements CDK's Highlightable interface for keyboard navigation.\n *\n * @example\n * ```html\n * <com-dropdown-option\n *   [value]=\"user\"\n *   [selected]=\"isSelected(user)\"\n *   [disabled]=\"user.inactive\"\n *   (select)=\"onSelect(user)\"\n * />\n * ```\n *\n * @tokens `--color-popover-foreground`, `--color-muted`, `--color-primary-subtle`,\n *         `--color-primary-subtle-foreground`, `--color-disabled-foreground`\n */\n@Component({\n  selector: 'com-dropdown-option',\n  exportAs: 'comDropdownOption',\n  template: `\n    <div\n      #optionElement\n      [class]=\"optionClasses()\"\n      [attr.role]=\"'option'\"\n      [attr.id]=\"id()\"\n      [attr.aria-selected]=\"selected()\"\n      [attr.aria-disabled]=\"disabled() || null\"\n      [attr.data-active]=\"active() || null\"\n      [attr.data-selected]=\"selected() || null\"\n      [attr.data-disabled]=\"disabled() || null\"\n      tabindex=\"-1\"\n      (click)=\"onOptionClick($event)\"\n      (keydown.enter)=\"onOptionClick($event)\"\n      (keydown.space)=\"onOptionClick($event)\"\n      (mouseenter)=\"onMouseEnter()\"\n    >\n      @if (optionTemplate()) {\n        <ng-container\n          [ngTemplateOutlet]=\"optionTemplate()!\"\n          [ngTemplateOutletContext]=\"templateContext()\"\n        />\n      } @else {\n        <span class=\"truncate\">{{ displayText() }}</span>\n        @if (selected()) {\n          <svg\n            class=\"ml-auto h-4 w-4 shrink-0\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <polyline points=\"20 6 9 17 4 12\" />\n          </svg>\n        }\n      }\n    </div>\n  `,\n  imports: [NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-dropdown-option-host block',\n  },\n})\nexport class ComDropdownOption<T> {\n  /** Reference to the option element for focus management. */\n  private readonly optionRef = viewChild<ElementRef<HTMLElement>>('optionElement');\n\n  /** The value this option represents. */\n  readonly value: InputSignal<T> = input.required<T>();\n\n  /** Display text for this option (when no template is provided). */\n  readonly displayText: InputSignal<string> = input<string>('');\n\n  /** Unique identifier for this option. */\n  readonly id: InputSignal<string> = input.required<string>();\n\n  /** Index of this option in the list. */\n  readonly index: InputSignal<number> = input<number>(0);\n\n  /** Whether this option is currently selected. */\n  readonly selected: InputSignal<boolean> = input<boolean>(false);\n\n  /** Whether this option is currently active (keyboard focused). */\n  readonly active: InputSignal<boolean> = input<boolean>(false);\n\n  /** Whether this option is disabled. */\n  readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n  /** Size variant for styling. */\n  readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n  /** Custom template for rendering the option content. */\n  readonly optionTemplate: InputSignal<TemplateRef<ComDropdownOptionContext<T>> | null> =\n    input<TemplateRef<ComDropdownOptionContext<T>> | null>(null);\n\n  /** Additional CSS classes to apply. */\n  readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n  /** Emitted when the option is selected. */\n  // eslint-disable-next-line @angular-eslint/no-output-native -- intentional: matches listbox/combobox select pattern\n  readonly select: OutputEmitterRef<T> = output<T>();\n\n  /** Emitted when the mouse enters the option. */\n  readonly hover: OutputEmitterRef<T> = output<T>();\n\n  /** Computed option state for CVA styling. */\n  protected readonly optionState: Signal<'default' | 'active' | 'selected' | 'selected-active' | 'disabled'> =\n    computed(() => {\n      if (this.disabled()) return 'disabled';\n      if (this.selected() && this.active()) return 'selected-active';\n      if (this.selected()) return 'selected';\n      if (this.active()) return 'active';\n      return 'default';\n    });\n\n  /** Computed CSS classes for the option. */\n  protected readonly optionClasses: Signal<string> = computed(() => {\n    const baseClasses = dropdownOptionVariants({\n      size: this.size(),\n      state: this.optionState(),\n    });\n    return mergeClasses(baseClasses, this.userClass());\n  });\n\n  /** Template context for custom option templates. */\n  protected readonly templateContext: Signal<ComDropdownOptionContext<T>> = computed(() => ({\n    $implicit: this.value(),\n    index: this.index(),\n    selected: this.selected(),\n    active: this.active(),\n    disabled: this.disabled(),\n  }));\n\n  protected onOptionClick(event: Event): void {\n    if (this.disabled()) {\n      event.preventDefault();\n      event.stopPropagation();\n      return;\n    }\n    this.select.emit(this.value());\n  }\n\n  protected onMouseEnter(): void {\n    if (!this.disabled()) {\n      this.hover.emit(this.value());\n    }\n  }\n\n  /** Scrolls this option into view. */\n  scrollIntoView(): void {\n    this.optionRef()?.nativeElement.scrollIntoView({\n      block: 'nearest',\n      inline: 'nearest',\n    });\n  }\n\n  /** Focuses this option element. */\n  focus(): void {\n    this.optionRef()?.nativeElement.focus();\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  ElementRef,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, WritableSignal, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { dropdownSearchVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Search input component for filtering dropdown options.\n * Includes debouncing for better performance.\n *\n * @example\n * ```html\n * <com-dropdown-search\n *   [placeholder]=\"'Search...'\"\n *   [debounceTime]=\"300\"\n *   (searchChange)=\"onSearch($event)\"\n * />\n * ```\n *\n * @tokens `--color-border-subtle`, `--color-input-placeholder`, `--color-disabled-foreground`,\n *         `--color-ring`, `--radius-interactive-sm`\n */\n@Component({\n  selector: 'com-dropdown-search',\n  exportAs: 'comDropdownSearch',\n  template: `\n    <div class=\"relative flex items-center\">\n      <!-- Search icon -->\n      <svg\n        class=\"pointer-events-none absolute left-3 h-4 w-4 text-placeholder\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <circle cx=\"11\" cy=\"11\" r=\"8\" />\n        <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n      </svg>\n\n      <!-- Input -->\n      <input\n        #searchInput\n        type=\"text\"\n        [class]=\"searchClasses()\"\n        [value]=\"internalValue()\"\n        [placeholder]=\"placeholder()\"\n        [disabled]=\"disabled()\"\n        [attr.aria-label]=\"ariaLabel()\"\n        [attr.autocomplete]=\"'off'\"\n        [attr.autocapitalize]=\"'off'\"\n        [attr.autocorrect]=\"'off'\"\n        [attr.spellcheck]=\"'false'\"\n        (input)=\"onInput($event)\"\n        (keydown)=\"onKeydown($event)\"\n      />\n\n      <!-- Clear button -->\n      @if (showClear()) {\n        <button\n          type=\"button\"\n          class=\"absolute right-3 flex h-4 w-4 items-center justify-center rounded-interactive-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring\"\n          [attr.aria-label]=\"'Clear search'\"\n          (click)=\"clearSearch()\"\n        >\n          <svg\n            class=\"h-3 w-3\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          >\n            <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n            <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n          </svg>\n        </button>\n      }\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-dropdown-search-host block',\n    '[attr.comDropdownSearch]': 'true',\n  },\n})\nexport class ComDropdownSearch implements OnInit {\n  private readonly destroyRef = inject(DestroyRef);\n\n  /** Reference to the input element. */\n  private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n  /** Subject for debounced search. */\n  private readonly searchSubject = new Subject<string>();\n\n  /** Current internal search value. */\n  protected readonly internalValue: WritableSignal<string> = signal('');\n\n  /** Placeholder text for the search input. */\n  readonly placeholder: InputSignal<string> = input<string>('Search...');\n\n  /** Aria label for accessibility. */\n  readonly ariaLabel: InputSignal<string> = input<string>('Search options');\n\n  /** Whether the search input is disabled. */\n  readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n  /** Debounce time in milliseconds. */\n  readonly debounceMs: InputSignal<number> = input<number>(300);\n\n  /** Size variant for styling. */\n  readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n  /** Additional CSS classes to apply. */\n  readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n  /** Emitted when the search value changes (after debounce). */\n  readonly searchChange: OutputEmitterRef<string> = output<string>();\n\n  /** Emitted when a navigation key is pressed (for focus management). */\n  readonly keyNav: OutputEmitterRef<KeyboardEvent> = output<KeyboardEvent>();\n\n  /** Whether to show the clear button. */\n  protected readonly showClear: Signal<boolean> = computed(() => this.internalValue().length > 0);\n\n  /** Computed CSS classes for the search input. */\n  protected readonly searchClasses: Signal<string> = computed(() => {\n    const baseClasses = dropdownSearchVariants({ size: this.size() });\n    // Add left padding for the search icon\n    return mergeClasses(baseClasses, 'pl-9 pr-8', this.userClass());\n  });\n\n  ngOnInit(): void {\n    // Set up debounced search\n    this.searchSubject\n      .pipe(\n        debounceTime(this.debounceMs()),\n        distinctUntilChanged(),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((value) => {\n        this.searchChange.emit(value);\n      });\n  }\n\n  protected onInput(event: Event): void {\n    const value = (event.target as HTMLInputElement).value;\n    this.internalValue.set(value);\n    this.searchSubject.next(value);\n  }\n\n  protected onKeydown(event: KeyboardEvent): void {\n    // Let parent handle navigation keys\n    if (['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(event.key)) {\n      this.keyNav.emit(event);\n    }\n  }\n\n  protected clearSearch(): void {\n    this.internalValue.set('');\n    this.searchSubject.next('');\n    this.focus();\n  }\n\n  /** Focuses the search input. */\n  focus(): void {\n    this.inputRef()?.nativeElement.focus();\n  }\n\n  /** Gets the current search value. */\n  getValue(): string {\n    return this.internalValue();\n  }\n\n  /** Sets the search value programmatically. */\n  setValue(value: string): void {\n    this.internalValue.set(value);\n    const inputEl = this.inputRef()?.nativeElement;\n    if (inputEl) {\n      inputEl.value = value;\n    }\n    this.searchSubject.next(value);\n  }\n\n  /** Clears the search input. */\n  clear(): void {\n    this.clearSearch();\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownTagVariants, dropdownTagRemoveVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownTagContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Tag component for displaying selected items in multi-select mode.\n * Includes a remove button for deselection.\n *\n * @example\n * ```html\n * <com-dropdown-tag\n *   [value]=\"user\"\n *   [displayText]=\"user.name\"\n *   (remove)=\"onRemove(user)\"\n * />\n * ```\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n *         `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n *         `--color-ring`, `--radius-tag`, `--radius-interactive-sm`\n */\n@Component({\n  selector: 'com-dropdown-tag',\n  exportAs: 'comDropdownTag',\n  template: `\n    @if (tagTemplate()) {\n      <ng-container\n        [ngTemplateOutlet]=\"tagTemplate()!\"\n        [ngTemplateOutletContext]=\"templateContext()\"\n      />\n    } @else {\n      <span [class]=\"tagClasses()\">\n        <span class=\"truncate\">{{ displayText() }}</span>\n        @if (!disabled()) {\n          <button\n            type=\"button\"\n            [class]=\"removeClasses()\"\n            [attr.aria-label]=\"'Remove ' + displayText()\"\n            (click)=\"onRemove($event)\"\n            (keydown.enter)=\"onRemove($event)\"\n            (keydown.space)=\"onRemove($event)\"\n          >\n            <svg\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-width=\"2\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n              class=\"h-full w-full\"\n            >\n              <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n              <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n            </svg>\n          </button>\n        }\n      </span>\n    }\n  `,\n  imports: [NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-dropdown-tag-host inline-flex min-w-0 max-w-[8rem]',\n  },\n})\nexport class ComDropdownTag<T> {\n  /** The value this tag represents. */\n  readonly value: InputSignal<T> = input.required<T>();\n\n  /** Display text for this tag. */\n  readonly displayText: InputSignal<string> = input<string>('');\n\n  /** Index of this tag in the list. */\n  readonly index: InputSignal<number> = input<number>(0);\n\n  /** Whether the tag (and its remove button) is disabled. */\n  readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n  /** Size variant for styling. */\n  readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n  /** Tag variant for styling. */\n  readonly variant: InputSignal<'default' | 'primary'> = input<'default' | 'primary'>('primary');\n\n  /** Additional CSS classes for the tag. */\n  readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n  /** Custom template for rendering the tag. */\n  readonly tagTemplate: InputSignal<TemplateRef<ComDropdownTagContext<T>> | null> =\n    input<TemplateRef<ComDropdownTagContext<T>> | null>(null);\n\n  /** Emitted when the remove button is clicked. */\n  readonly remove: OutputEmitterRef<T> = output<T>();\n\n  /** Computed CSS classes for the tag. */\n  protected readonly tagClasses: Signal<string> = computed(() => {\n    const baseClasses = dropdownTagVariants({\n      size: this.size(),\n      variant: this.variant(),\n    });\n    return mergeClasses(baseClasses, this.userClass());\n  });\n\n  /** Computed CSS classes for the remove button. */\n  protected readonly removeClasses: Signal<string> = computed(() => {\n    return dropdownTagRemoveVariants({ size: this.size() });\n  });\n\n  /** Template context for custom tag templates. */\n  protected readonly templateContext: Signal<ComDropdownTagContext<T>> = computed(() => ({\n    $implicit: this.value(),\n    index: this.index(),\n    remove: () => this.emitRemove(),\n  }));\n\n  protected onRemove(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (!this.disabled()) {\n      this.emitRemove();\n    }\n  }\n\n  private emitRemove(): void {\n    this.remove.emit(this.value());\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from '@angular/core';\nimport type { Signal, InputSignal, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownGroupVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownGroupContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Group header component for categorized dropdown options.\n *\n * @example\n * ```html\n * <com-dropdown-group\n *   [label]=\"'Fruits'\"\n *   [count]=\"5\"\n * />\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Component({\n  selector: 'com-dropdown-group',\n  exportAs: 'comDropdownGroup',\n  template: `\n    @if (groupTemplate()) {\n      <ng-container\n        [ngTemplateOutlet]=\"groupTemplate()!\"\n        [ngTemplateOutletContext]=\"templateContext()\"\n      />\n    } @else {\n      <div [class]=\"groupClasses()\">\n        <span>{{ label() }}</span>\n        @if (showCount()) {\n          <span class=\"ml-auto text-xs text-muted-foreground\">\n            ({{ count() }})\n          </span>\n        }\n      </div>\n    }\n  `,\n  imports: [NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-dropdown-group-host block',\n    role: 'presentation',\n  },\n})\nexport class ComDropdownGroup {\n  /** The group label/key. */\n  readonly label: InputSignal<string> = input.required<string>();\n\n  /** The number of options in this group. */\n  readonly count: InputSignal<number> = input<number>(0);\n\n  /** Whether the group is expanded (for collapsible groups). */\n  readonly expanded: InputSignal<boolean> = input<boolean>(true);\n\n  /** Whether to show the count badge. */\n  readonly showCount: InputSignal<boolean> = input<boolean>(false);\n\n  /** Size variant for styling. */\n  readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n  /** Additional CSS classes for the group header. */\n  readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n  /** Custom template for rendering the group header. */\n  readonly groupTemplate: InputSignal<TemplateRef<ComDropdownGroupContext> | null> =\n    input<TemplateRef<ComDropdownGroupContext> | null>(null);\n\n  /** Computed CSS classes for the group header. */\n  protected readonly groupClasses: Signal<string> = computed(() => {\n    const baseClasses = dropdownGroupVariants({ size: this.size() });\n    return mergeClasses(baseClasses, this.userClass());\n  });\n\n  /** Template context for custom group templates. */\n  protected readonly templateContext: Signal<ComDropdownGroupContext> = computed(() => ({\n    $implicit: this.label(),\n    expanded: this.expanded(),\n    count: this.count(),\n  }));\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownOptionContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom option template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\">\n *   <ng-template comDropdownOption let-user let-selected=\"selected\">\n *     <div class=\"flex items-center gap-2\">\n *       <span>{{ user.name }}</span>\n *       @if (selected) {\n *         <svg class=\"h-4 w-4\"><!-- check --></svg>\n *       }\n *     </div>\n *   </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comDropdownOption]',\n})\nexport class ComDropdownOptionTpl<T> {\n  /** Reference to the template. */\n  readonly templateRef: TemplateRef<ComDropdownOptionContext<T>> = inject<TemplateRef<ComDropdownOptionContext<T>>>(TemplateRef);\n\n  /**\n   * Static type guard for template type checking.\n   * Enables type-safe access to context properties in templates.\n   */\n  static ngTemplateContextGuard<T>(\n    _dir: ComDropdownOptionTpl<T>,\n    ctx: unknown\n  ): ctx is ComDropdownOptionContext<T> {\n    return true;\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownSelectedContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom selected value template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\">\n *   <ng-template comDropdownSelected let-user>\n *     @if (user) {\n *       <div class=\"flex items-center gap-2\">\n *         <img [src]=\"user.avatar\" class=\"h-5 w-5 rounded-full\" />\n *         {{ user.name }}\n *       </div>\n *     } @else {\n *       <span class=\"text-input-placeholder\">Select user...</span>\n *     }\n *   </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comDropdownSelected]',\n})\nexport class ComDropdownSelectedTpl<T> {\n  /** Reference to the template. */\n  readonly templateRef: TemplateRef<ComDropdownSelectedContext<T>> = inject<TemplateRef<ComDropdownSelectedContext<T>>>(TemplateRef);\n\n  /**\n   * Static type guard for template type checking.\n   * Enables type-safe access to context properties in templates.\n   */\n  static ngTemplateContextGuard<T>(\n    _dir: ComDropdownSelectedTpl<T>,\n    ctx: unknown\n  ): ctx is ComDropdownSelectedContext<T> {\n    return true;\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownEmptyContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom empty state template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [searchable]=\"true\">\n *   <ng-template comDropdownEmpty let-query>\n *     <div class=\"flex flex-col items-center gap-2 py-6\">\n *       <svg class=\"h-8 w-8 text-muted-foreground\"><!-- search icon --></svg>\n *       <span>No results for \"{{ query }}\"</span>\n *     </div>\n *   </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comDropdownEmpty]',\n})\nexport class ComDropdownEmptyTpl {\n  /** Reference to the template. */\n  readonly templateRef: TemplateRef<ComDropdownEmptyContext> = inject<TemplateRef<ComDropdownEmptyContext>>(TemplateRef);\n\n  /**\n   * Static type guard for template type checking.\n   * Enables type-safe access to context properties in templates.\n   */\n  static ngTemplateContextGuard(\n    _dir: ComDropdownEmptyTpl,\n    ctx: unknown\n  ): ctx is ComDropdownEmptyContext {\n    return true;\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownGroupContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom group header template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [groupBy]=\"groupByDepartment\">\n *   <ng-template comDropdownGroup let-group let-count=\"count\">\n *     <div class=\"flex items-center justify-between\">\n *       <span class=\"font-semibold\">{{ group }}</span>\n *       <span class=\"text-xs text-muted-foreground\">({{ count }})</span>\n *     </div>\n *   </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comDropdownGroup]',\n})\nexport class ComDropdownGroupTpl {\n  /** Reference to the template. */\n  readonly templateRef: TemplateRef<ComDropdownGroupContext> = inject<TemplateRef<ComDropdownGroupContext>>(TemplateRef);\n\n  /**\n   * Static type guard for template type checking.\n   * Enables type-safe access to context properties in templates.\n   */\n  static ngTemplateContextGuard(\n    _dir: ComDropdownGroupTpl,\n    ctx: unknown\n  ): ctx is ComDropdownGroupContext {\n    return true;\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownTagContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom tag template (multi-select mode).\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [multiple]=\"true\">\n *   <ng-template comDropdownTag let-user let-remove=\"remove\">\n *     <div class=\"flex items-center gap-1 rounded bg-primary-subtle px-2 py-0.5 text-primary-subtle-foreground\">\n *       <img [src]=\"user.avatar\" class=\"h-4 w-4 rounded-full\" />\n *       <span>{{ user.name }}</span>\n *       <button type=\"button\" (click)=\"remove()\" class=\"ml-1\">\n *         <svg class=\"h-3 w-3\"><!-- x icon --></svg>\n *       </button>\n *     </div>\n *   </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comDropdownTag]',\n})\nexport class ComDropdownTagTpl<T> {\n  /** Reference to the template. */\n  readonly templateRef: TemplateRef<ComDropdownTagContext<T>> = inject<TemplateRef<ComDropdownTagContext<T>>>(TemplateRef);\n\n  /**\n   * Static type guard for template type checking.\n   * Enables type-safe access to context properties in templates.\n   */\n  static ngTemplateContextGuard<T>(\n    _dir: ComDropdownTagTpl<T>,\n    ctx: unknown\n  ): ctx is ComDropdownTagContext<T> {\n    return true;\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Directive to mark a template as the custom loading indicator template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [loading]=\"isLoading()\">\n *   <ng-template comDropdownLoading>\n *     <div class=\"flex items-center gap-2 p-3\">\n *       <com-spinner size=\"xs\" color=\"primary\" />\n *       <span class=\"text-sm text-muted-foreground\">Fetching more results...</span>\n *     </div>\n *   </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comDropdownLoading]',\n})\nexport class ComDropdownLoadingTpl {\n  /** Reference to the template. */\n  readonly templateRef: TemplateRef<void> = inject<TemplateRef<void>>(TemplateRef);\n}\n","import { TemplateRef } from '@angular/core';\n\n/**\n * Context provided to the custom option template.\n * @template T The type of the option value.\n */\nexport interface ComDropdownOptionContext<T> {\n  /** The option value (available as implicit $implicit). */\n  $implicit: T;\n  /** The index of this option in the filtered list. */\n  index: number;\n  /** Whether this option is currently selected. */\n  selected: boolean;\n  /** Whether this option is currently active (focused via keyboard). */\n  active: boolean;\n  /** Whether this option is disabled. */\n  disabled: boolean;\n}\n\n/**\n * Context provided to the custom selected value template.\n * @template T The type of the option value.\n */\nexport interface ComDropdownSelectedContext<T> {\n  /** The selected value(s) (available as implicit $implicit). */\n  $implicit: T | T[] | null;\n  /** The placeholder text when no value is selected. */\n  placeholder: string;\n  /** Whether multiple selection is enabled. */\n  multiple: boolean;\n}\n\n/**\n * Context provided to the custom empty state template.\n */\nexport interface ComDropdownEmptyContext {\n  /** The current search query (available as implicit $implicit). */\n  $implicit: string;\n}\n\n/**\n * Context provided to the custom group header template.\n */\nexport interface ComDropdownGroupContext {\n  /** The group key/label (available as implicit $implicit). */\n  $implicit: string;\n  /** Whether the group is expanded. */\n  expanded: boolean;\n  /** The number of options in this group. */\n  count: number;\n}\n\n/**\n * Context provided to the custom tag template (multi-select mode).\n * @template T The type of the option value.\n */\nexport interface ComDropdownTagContext<T> {\n  /** The tag value (available as implicit $implicit). */\n  $implicit: T;\n  /** The index of this tag. */\n  index: number;\n  /** Function to remove this tag. */\n  remove: () => void;\n}\n\n/**\n * Represents a grouped collection of options.\n * @template T The type of the option value.\n */\nexport interface ComDropdownGroup<T> {\n  /** The group key/label. */\n  key: string;\n  /** The options belonging to this group. */\n  options: T[];\n  /** Whether the group is expanded (for collapsible groups). */\n  expanded: boolean;\n}\n\n/**\n * Internal representation of a processed option.\n * @template T The type of the option value.\n */\nexport interface ComDropdownProcessedOption<T> {\n  /** The original option value. */\n  value: T;\n  /** The display text for this option. */\n  displayText: string;\n  /** Whether this option is disabled. */\n  disabled: boolean;\n  /** The group this option belongs to (if grouped). */\n  group?: string;\n  /** Unique identifier for tracking. */\n  id: string;\n}\n\n/**\n * Configuration for dropdown positioning.\n */\nexport interface ComDropdownPosition {\n  /** The origin X position. */\n  originX: 'start' | 'center' | 'end';\n  /** The origin Y position. */\n  originY: 'top' | 'center' | 'bottom';\n  /** The overlay X position. */\n  overlayX: 'start' | 'center' | 'end';\n  /** The overlay Y position. */\n  overlayY: 'top' | 'center' | 'bottom';\n  /** Offset along the X axis. */\n  offsetX?: number;\n  /** Offset along the Y axis. */\n  offsetY?: number;\n}\n\n/**\n * Panel width configuration.\n */\nexport type ComDropdownPanelWidth = 'trigger' | 'auto' | string;\n\n/**\n * Default compare function for primitive values.\n * @param a First value.\n * @param b Second value.\n * @returns Whether the values are equal.\n */\nexport function defaultCompareWith<T>(a: T, b: T): boolean {\n  return a === b;\n}\n\n/**\n * Default display function for converting values to strings.\n * @param value The value to display.\n * @returns The string representation.\n */\nexport function defaultDisplayWith<T>(value: T): string {\n  if (value === null || value === undefined) {\n    return '';\n  }\n  return String(value);\n}\n\n/**\n * Default filter function for search.\n * @param option The option to test.\n * @param query The search query.\n * @param displayWith The display function to get the searchable text.\n * @returns Whether the option matches the query.\n */\nexport function defaultFilterWith<T>(\n  option: T,\n  query: string,\n  displayWith: (value: T) => string\n): boolean {\n  const text = displayWith(option).toLowerCase();\n  return text.includes(query.toLowerCase());\n}\n\n/**\n * Template directive types for content projection.\n */\nexport interface ComDropdownTemplates<T> {\n  /** Custom template for rendering options. */\n  optionTemplate?: TemplateRef<ComDropdownOptionContext<T>>;\n  /** Custom template for rendering the selected value. */\n  selectedTemplate?: TemplateRef<ComDropdownSelectedContext<T>>;\n  /** Custom template for the empty state. */\n  emptyTemplate?: TemplateRef<ComDropdownEmptyContext>;\n  /** Custom template for group headers. */\n  groupTemplate?: TemplateRef<ComDropdownGroupContext>;\n  /** Custom template for tags in multi-select mode. */\n  tagTemplate?: TemplateRef<ComDropdownTagContext<T>>;\n}\n\n/**\n * Unique ID counter for generating option IDs.\n */\nlet uniqueIdCounter = 0;\n\n/**\n * Generates a unique ID for dropdown options.\n * @param prefix Optional prefix for the ID.\n * @returns A unique ID string.\n */\nexport function generateDropdownId(prefix = 'com-dropdown'): string {\n  return `${prefix}-${uniqueIdCounter++}`;\n}\n","import {\n  afterNextRender,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChild,\n  DestroyRef,\n  effect,\n  ElementRef,\n  forwardRef,\n  inject,\n  Injector,\n  input,\n  linkedSignal,\n  model,\n  output,\n  signal,\n  viewChild,\n  ViewContainerRef,\n} from '@angular/core';\nimport type {\n  InputSignal,\n  ModelSignal,\n  OutputEmitterRef,\n  Signal,\n  TemplateRef,\n  WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { FormFieldControl, ErrorStateMatcher, type FormFieldAppearance } from 'ngx-com/components/form-field';\nimport {\n  Overlay,\n  OverlayRef,\n  OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ComDropdownOption } from './dropdown-option.component';\n\nimport { ComDropdownSearch } from './dropdown-search.component';\nimport { ComDropdownTag } from './dropdown-tag.component';\nimport { ComDropdownGroup } from './dropdown-group.component';\nimport { ComDropdownOptionTpl } from './directives/dropdown-option-tpl.directive';\nimport { ComDropdownSelectedTpl } from './directives/dropdown-selected-tpl.directive';\nimport { ComDropdownEmptyTpl } from './directives/dropdown-empty-tpl.directive';\nimport { ComDropdownGroupTpl } from './directives/dropdown-group-tpl.directive';\nimport { ComDropdownTagTpl } from './directives/dropdown-tag-tpl.directive';\nimport { ComDropdownLoadingTpl } from './directives/dropdown-loading-tpl.directive';\nimport { ComSpinner } from 'ngx-com/components/spinner';\nimport { throttle } from 'ngx-com/utils';\nimport type { ThrottledFn } from 'ngx-com/utils';\nimport type { Subscription } from 'rxjs';\nimport {\n  dropdownTriggerVariants,\n  dropdownChevronVariants,\n  dropdownClearVariants,\n  dropdownOverflowBadgeVariants,\n  dropdownLoadingVariants,\n} from './dropdown.variants';\nimport type {\n  DropdownVariant,\n  DropdownSize,\n  DropdownState,\n} from './dropdown.variants';\nimport type {\n  ComDropdownSelectedContext,\n  ComDropdownEmptyContext,\n  ComDropdownProcessedOption,\n  ComDropdownGroup as DropdownGroupType,\n  ComDropdownPanelWidth,\n} from './dropdown.models';\nimport {\n  defaultCompareWith,\n  defaultDisplayWith,\n  defaultFilterWith,\n  generateDropdownId,\n} from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/** Default position for the dropdown panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n  // Below trigger, aligned start\n  { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n  // Above trigger, aligned start\n  { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n  // Below trigger, aligned end\n  { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n  // Above trigger, aligned end\n  { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/** Threshold for enabling virtual scrolling. */\nconst VIRTUAL_SCROLL_THRESHOLD = 50;\n\n/**\n * Reusable dropdown/select component with full accessibility support.\n * Implements ControlValueAccessor for Reactive Forms integration.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n *         `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n *         `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n *         `--color-primary`, `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n *         `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`,\n *         `--color-placeholder`\n *\n * @example\n * ```html\n * <com-dropdown\n *   [options]=\"users()\"\n *   [compareWith]=\"compareById\"\n *   formControlName=\"assignee\"\n *   placeholder=\"Select user...\"\n *   [searchable]=\"true\"\n * >\n *   <ng-template comDropdownOption let-user let-selected=\"selected\">\n *     <span>{{ user.name }}</span>\n *   </ng-template>\n * </com-dropdown>\n * ```\n */\n@Component({\n  selector: 'com-dropdown',\n  exportAs: 'comDropdown',\n  template: `\n    <!-- Trigger button -->\n    <button\n      #triggerElement\n      type=\"button\"\n      role=\"combobox\"\n      [class]=\"triggerClasses()\"\n      [attr.id]=\"triggerId()\"\n      [attr.aria-expanded]=\"isOpen()\"\n      [attr.aria-controls]=\"panelId()\"\n      [attr.aria-haspopup]=\"'listbox'\"\n      [attr.aria-activedescendant]=\"activeDescendant()\"\n      [attr.aria-required]=\"required() || null\"\n      [attr.aria-invalid]=\"effectiveState() === 'error' || null\"\n      [attr.aria-describedby]=\"ariaDescribedBy()\"\n      [attr.aria-label]=\"hasValue() ? null : placeholder()\"\n      [attr.aria-disabled]=\"disabled() || null\"\n      [attr.tabindex]=\"disabled() ? -1 : 0\"\n      [disabled]=\"disabled()\"\n      (click)=\"toggle()\"\n      (keydown)=\"onTriggerKeydown($event)\"\n      (focus)=\"onTriggerFocus()\"\n      (blur)=\"onTriggerBlur()\"\n    >\n      <!-- Selected value display -->\n      <span class=\"flex-1 min-w-0 text-left\" [class.truncate]=\"!multiple()\">\n        @if (selectedTemplate()) {\n          <ng-container\n            [ngTemplateOutlet]=\"selectedTemplate()!.templateRef\"\n            [ngTemplateOutletContext]=\"selectedContext()\"\n          />\n        } @else if (multiple()) {\n          @if (selectedValues().length > 0) {\n            <span class=\"flex items-center gap-1.5 min-w-0 overflow-hidden\">\n              @for (item of visibleTags(); track trackByValue(item, $index); let i = $index) {\n                <com-dropdown-tag\n                  [value]=\"item\"\n                  [displayText]=\"displayWith()(item)\"\n                  [index]=\"i\"\n                  [size]=\"size()\"\n                  [disabled]=\"disabled()\"\n                  [tagTemplate]=\"tagTemplate()?.templateRef ?? null\"\n                  (remove)=\"removeValue($event)\"\n                />\n              }\n              @if (hiddenTagsCount() > 0) {\n                <span [class]=\"overflowBadgeClasses()\">\n                  +{{ hiddenTagsCount() }}\n                </span>\n              }\n            </span>\n          } @else {\n            <span class=\"text-placeholder\">{{ placeholder() }}</span>\n          }\n        } @else {\n          @if (selectedValue() !== null && selectedValue() !== undefined) {\n            {{ displayWith()(selectedValue()!) }}\n          } @else {\n            <span class=\"text-placeholder\">{{ placeholder() }}</span>\n          }\n        }\n      </span>\n\n      <!-- Clear button -->\n      @if (clearable() && hasValue() && !disabled()) {\n        <button\n          type=\"button\"\n          [class]=\"clearClasses()\"\n          [attr.aria-label]=\"'Clear selection'\"\n          (click)=\"clear($event)\"\n        >\n          <svg\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n            class=\"h-full w-full\"\n          >\n            <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n            <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n          </svg>\n        </button>\n      }\n\n      <!-- Chevron icon -->\n      <svg\n        [class]=\"chevronClasses()\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <polyline points=\"6 9 12 15 18 9\" />\n      </svg>\n    </button>\n\n    <!-- Panel template (rendered in overlay) -->\n    <ng-template #panelTemplate>\n      <div\n        #panelElement\n        [class]=\"panelClasses()\"\n        tabindex=\"-1\"\n        (keydown)=\"onPanelKeydown($event)\"\n      >\n        <!-- Search input (outside listbox for valid ARIA structure) -->\n        @if (searchable()) {\n          <com-dropdown-search\n            [placeholder]=\"searchPlaceholder()\"\n            [size]=\"size()\"\n            [debounceMs]=\"searchDebounceMs()\"\n            (searchChange)=\"onSearchChange($event)\"\n            (keyNav)=\"onSearchKeyNav($event)\"\n          />\n        }\n\n        <!-- Options list -->\n        @if (virtualScrollEnabled() && groupedOptions().length === 0 && filteredOptions().length > 0) {\n          <!-- Virtual scrolling for large ungrouped lists -->\n          <cdk-virtual-scroll-viewport\n            [itemSize]=\"effectiveItemSize()\"\n            [maxBufferPx]=\"400\"\n            [minBufferPx]=\"200\"\n            [style.height]=\"maxHeight()\"\n            class=\"overflow-auto\"\n            role=\"listbox\"\n            [attr.id]=\"panelId()\"\n            [attr.aria-multiselectable]=\"multiple() || null\"\n            [attr.aria-label]=\"placeholder()\"\n          >\n            <com-dropdown-option\n              *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackByOption; let i = index\"\n              [value]=\"option.value\"\n              [displayText]=\"option.displayText\"\n              [id]=\"option.id\"\n              [index]=\"i\"\n              [selected]=\"isSelected(option.value)\"\n              [active]=\"isActive(option.id)\"\n              [disabled]=\"option.disabled\"\n              [size]=\"size()\"\n              [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n              (select)=\"selectOption($event)\"\n              (hover)=\"onOptionHover(option.id)\"\n            />\n          </cdk-virtual-scroll-viewport>\n\n          <!-- Loading indicator (virtual scroll) -->\n          @if (loading()) {\n            @if (loadingTemplate()) {\n              <ng-container [ngTemplateOutlet]=\"loadingTemplate()!.templateRef\" />\n            } @else {\n              <div [class]=\"loadingContainerClasses()\">\n                <com-spinner size=\"sm\" color=\"muted\" />\n              </div>\n            }\n          }\n        } @else {\n          <!-- Standard rendering for small lists and grouped options -->\n          <div\n            class=\"overflow-auto\"\n            [style.maxHeight]=\"maxHeight()\"\n            data-scroll-container\n            role=\"listbox\"\n            [attr.id]=\"panelId()\"\n            [attr.aria-multiselectable]=\"multiple() || null\"\n            [attr.aria-label]=\"placeholder()\"\n          >\n            @if (groupedOptions().length > 0) {\n              @for (group of groupedOptions(); track group.key) {\n                <!-- Group header -->\n                <com-dropdown-group\n                  [label]=\"group.key\"\n                  [count]=\"group.options.length\"\n                  [expanded]=\"group.expanded\"\n                  [size]=\"size()\"\n                  [groupTemplate]=\"groupTemplate()?.templateRef ?? null\"\n                />\n\n                <!-- Group options -->\n                @for (option of group.options; track option.id; let i = $index) {\n                  <com-dropdown-option\n                    [value]=\"option.value\"\n                    [displayText]=\"option.displayText\"\n                    [id]=\"option.id\"\n                    [index]=\"getGlobalIndex(group.key, i)\"\n                    [selected]=\"isSelected(option.value)\"\n                    [active]=\"isActive(option.id)\"\n                    [disabled]=\"option.disabled\"\n                    [size]=\"size()\"\n                    [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n                    (select)=\"selectOption($event)\"\n                    (hover)=\"onOptionHover(option.id)\"\n                  />\n                }\n              }\n            } @else if (filteredOptions().length > 0) {\n              @for (option of filteredOptions(); track option.id; let i = $index) {\n                <com-dropdown-option\n                  [value]=\"option.value\"\n                  [displayText]=\"option.displayText\"\n                  [id]=\"option.id\"\n                  [index]=\"i\"\n                  [selected]=\"isSelected(option.value)\"\n                  [active]=\"isActive(option.id)\"\n                  [disabled]=\"option.disabled\"\n                  [size]=\"size()\"\n                  [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n                  (select)=\"selectOption($event)\"\n                  (hover)=\"onOptionHover(option.id)\"\n                />\n              }\n            } @else if (!loading()) {\n              <!-- Empty state (suppressed when loading) -->\n              @if (emptyTemplate()) {\n                <ng-container\n                  [ngTemplateOutlet]=\"emptyTemplate()!.templateRef\"\n                  [ngTemplateOutletContext]=\"emptyContext()\"\n                />\n              } @else {\n                <div class=\"flex items-center justify-center px-3 py-6 text-muted-foreground\">\n                  @if (searchQuery()) {\n                    No results for \"{{ searchQuery() }}\"\n                  } @else {\n                    No options available\n                  }\n                </div>\n              }\n            }\n\n            <!-- Loading indicator (standard) -->\n            @if (loading()) {\n              @if (loadingTemplate()) {\n                <ng-container [ngTemplateOutlet]=\"loadingTemplate()!.templateRef\" />\n              } @else {\n                <div [class]=\"loadingContainerClasses()\">\n                  <com-spinner size=\"sm\" color=\"muted\" />\n                </div>\n              }\n            }\n          </div>\n        }\n      </div>\n    </ng-template>\n\n    <!-- Live announcer region -->\n    <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n      {{ liveAnnouncement() }}\n    </div>\n  `,\n  styles: `\n    .sr-only {\n      position: absolute;\n      width: 1px;\n      height: 1px;\n      padding: 0;\n      margin: -1px;\n      overflow: hidden;\n      clip: rect(0, 0, 0, 0);\n      white-space: nowrap;\n      border: 0;\n    }\n  `,\n  imports: [\n    NgTemplateOutlet,\n    OverlayModule,\n    CdkVirtualScrollViewport,\n    CdkFixedSizeVirtualScroll,\n    CdkVirtualForOf,\n    ComDropdownOption,\n    ComDropdownSearch,\n    ComDropdownTag,\n    ComDropdownGroup,\n    ComSpinner,\n  ],\n  providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComDropdown) }],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-dropdown-host inline-block',\n    '[class.com-dropdown-disabled]': 'disabled()',\n    '[class.com-dropdown-open]': 'isOpen()',\n  },\n})\nexport class ComDropdown<T> implements ControlValueAccessor, FormFieldControl<T | T[] | null> {\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly injector = inject(Injector);\n  private readonly overlay = inject(Overlay);\n  private readonly viewContainerRef = inject(ViewContainerRef);\n  private readonly liveAnnouncer = inject(LiveAnnouncer);\n  private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n  private readonly parentForm = inject(NgForm, { optional: true });\n  private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n  /** NgControl bound to this dropdown (if using reactive forms). */\n  readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n  /** Reference to the trigger button element. */\n  private readonly triggerRef: Signal<ElementRef<HTMLButtonElement>> =\n    viewChild.required<ElementRef<HTMLButtonElement>>('triggerElement');\n\n  /** Reference to the panel template. */\n  private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n    viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n  /** Reference to the virtual scroll viewport (when enabled). */\n  private readonly virtualViewport: Signal<CdkVirtualScrollViewport | undefined> =\n    viewChild<CdkVirtualScrollViewport>(CdkVirtualScrollViewport);\n\n  /** Content query for custom option template. */\n  protected readonly optionTemplate: Signal<ComDropdownOptionTpl<T> | undefined> =\n    contentChild<ComDropdownOptionTpl<T>>(ComDropdownOptionTpl);\n\n  /** Content query for custom selected template. */\n  protected readonly selectedTemplate: Signal<ComDropdownSelectedTpl<T> | undefined> =\n    contentChild<ComDropdownSelectedTpl<T>>(ComDropdownSelectedTpl);\n\n  /** Content query for custom empty template. */\n  protected readonly emptyTemplate: Signal<ComDropdownEmptyTpl | undefined> =\n    contentChild<ComDropdownEmptyTpl>(ComDropdownEmptyTpl);\n\n  /** Content query for custom group template. */\n  protected readonly groupTemplate: Signal<ComDropdownGroupTpl | undefined> =\n    contentChild<ComDropdownGroupTpl>(ComDropdownGroupTpl);\n\n  /** Content query for custom tag template. */\n  protected readonly tagTemplate: Signal<ComDropdownTagTpl<T> | undefined> =\n    contentChild<ComDropdownTagTpl<T>>(ComDropdownTagTpl);\n\n  /** Content query for custom loading template. */\n  protected readonly loadingTemplate: Signal<ComDropdownLoadingTpl | undefined> =\n    contentChild<ComDropdownLoadingTpl>(ComDropdownLoadingTpl);\n\n  /** Overlay reference. */\n  private overlayRef: OverlayRef | null = null;\n\n  /** Unique ID for the dropdown. */\n  private readonly dropdownId = generateDropdownId();\n\n  // ============ INPUTS ============\n\n  /** Array of options to display. */\n  readonly options: InputSignal<T[]> = input<T[]>([]);\n\n  /** Current value (single or array for multiple). */\n  readonly value: ModelSignal<T | T[] | null> = model<T | T[] | null>(null);\n\n  /** Placeholder text when no value is selected. */\n  readonly placeholder: InputSignal<string> = input<string>('Select...');\n\n  /** Enable multi-select mode. */\n  readonly multiple: InputSignal<boolean> = input<boolean>(false);\n\n  /** Enable search/filter input. */\n  readonly searchable: InputSignal<boolean> = input<boolean>(false);\n\n  /** Search input placeholder. */\n  readonly searchPlaceholder: InputSignal<string> = input<string>('Search...');\n\n  /** Disable the dropdown. */\n  readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n\n  /** Mark as required. */\n  readonly required: InputSignal<boolean> = input<boolean>(false);\n\n  /** Show clear button. */\n  readonly clearable: InputSignal<boolean> = input<boolean>(false);\n\n  /** Custom equality function for comparing values. */\n  readonly compareWith: InputSignal<(a: T, b: T) => boolean> = input<(a: T, b: T) => boolean>(defaultCompareWith);\n\n  /** Function to get display text from a value. */\n  readonly displayWith: InputSignal<(value: T) => string> = input<(value: T) => string>(defaultDisplayWith);\n\n  /** Custom filter function for search. */\n  readonly filterWith: InputSignal<((option: T, query: string) => boolean) | null> =\n    input<((option: T, query: string) => boolean) | null>(null);\n\n  /** Function to group options by a key. */\n  readonly groupBy: InputSignal<((option: T) => string) | null> = input<((option: T) => string) | null>(null);\n\n  /** CVA variant for trigger styling. */\n  readonly variant: InputSignal<DropdownVariant> = input<DropdownVariant>('default');\n\n  /** Size variant. */\n  readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n  /** Validation state. */\n  readonly state: InputSignal<DropdownState> = input<DropdownState>('default');\n\n  /** Additional CSS classes for the trigger. */\n  readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n  /** Additional CSS classes for the panel. */\n  readonly panelClass: InputSignal<string> = input<string>('');\n\n  /** Maximum height of the panel. */\n  readonly maxHeight: InputSignal<string> = input<string>('256px');\n\n  /** Panel width strategy. */\n  readonly panelWidth: InputSignal<ComDropdownPanelWidth> = input<ComDropdownPanelWidth>('trigger');\n\n  /** Debounce time for search (ms). */\n  readonly searchDebounceMs: InputSignal<number> = input<number>(300);\n\n  /** Virtual scroll threshold. */\n  readonly virtualScrollThreshold: InputSignal<number> = input<number>(VIRTUAL_SCROLL_THRESHOLD);\n\n  /** Item size in pixels for virtual scrolling. When not set, auto-calculated from the size variant. */\n  readonly virtualScrollItemSize: InputSignal<number | undefined> = input<number | undefined>(undefined);\n\n  /** Effective item size for virtual scroll, computed from size variant when not explicitly set. */\n  protected readonly effectiveItemSize: Signal<number> = computed(() => {\n    const explicit = this.virtualScrollItemSize();\n    if (explicit !== undefined) return explicit;\n    switch (this.size()) {\n      case 'sm': return 28;\n      case 'lg': return 48;\n      default: return 36;\n    }\n  });\n\n  /** Maximum number of tags to display in multi-select mode. Set to null for no limit. */\n  readonly maxVisibleTags: InputSignal<number | null> = input<number | null>(2);\n\n  /** Custom error state matcher for determining when to show errors. */\n  readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n  /** Whether the dropdown is currently loading data. */\n  readonly loading: InputSignal<boolean> = input<boolean>(false);\n\n  // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n  readonly touched: ModelSignal<boolean> = model<boolean>(false);\n  readonly invalid: InputSignal<boolean> = input<boolean>(false);\n  readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n\n  // ============ OUTPUTS ============\n\n  /** Emitted when search query changes. */\n  readonly searchChange: OutputEmitterRef<string> = output<string>();\n\n  /** Emitted when panel opens. */\n  readonly opened: OutputEmitterRef<void> = output<void>();\n\n  /** Emitted when panel closes. */\n  readonly closed: OutputEmitterRef<void> = output<void>();\n\n  /** Emitted when user scrolls near the bottom of the option list. */\n  readonly loadMore: OutputEmitterRef<void> = output<void>();\n\n  // ============ INTERNAL STATE ============\n\n  /** Whether the panel is open. */\n  readonly isOpen: WritableSignal<boolean> = signal(false);\n\n  /** Whether the trigger button is focused. */\n  private readonly _triggerFocused: WritableSignal<boolean> = signal(false);\n\n  /** Current search query. */\n  readonly searchQuery: WritableSignal<string> = signal('');\n\n  /** Currently active (keyboard focused) option ID. */\n  readonly activeOptionId: WritableSignal<string | null> = signal(null);\n\n  /** Internal value state (managed by CVA or input). */\n  readonly internalValue: WritableSignal<T | T[] | null> = linkedSignal<T | T[] | null>(() => this.value() ?? null);\n\n  /** Live announcements for screen readers. */\n  readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n  /** Flag to prevent duplicate loadMore emissions per scroll-to-bottom. */\n  private loadMoreEmitted = false;\n\n  /** Subscription for virtual scroll elementScrolled. */\n  private scrollSubscription: Subscription | null = null;\n\n  /** Throttled handler for standard scroll events. */\n  private throttledScrollHandler: ThrottledFn<() => void> | null = null;\n\n  /** Cleanup functions for ancestor scroll listeners. */\n  private ancestorScrollCleanups: (() => void)[] = [];\n\n  /** IDs for aria-describedby (set by form-field). */\n  private readonly _describedByIds: WritableSignal<string> = signal('');\n\n  /** Form field appearance (set by form-field). */\n  private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n\n  // ============ COMPUTED STATE ============\n\n  /** Trigger element ID. */\n  readonly triggerId: Signal<string> = computed(() => `${this.dropdownId}-trigger`);\n\n  /** Panel element ID. */\n  readonly panelId: Signal<string> = computed(() => `${this.dropdownId}-panel`);\n\n  /** Currently active descendant ID (for ARIA). */\n  readonly activeDescendant: Signal<string | null> = computed(() => {\n    return this.isOpen() ? this.activeOptionId() : null;\n  });\n\n  /** Whether the dropdown has a value. */\n  readonly hasValue: Signal<boolean> = computed(() => {\n    const val = this.internalValue();\n    if (this.multiple()) {\n      return Array.isArray(val) && val.length > 0;\n    }\n    return val !== null && val !== undefined;\n  });\n\n  // ============ FormFieldControl SIGNALS ============\n\n  /** Whether the dropdown is focused (trigger focused or panel open). Implements FormFieldControl. */\n  readonly focused: Signal<boolean> = computed(() => this._triggerFocused() || this.isOpen());\n\n  /** Whether the label should float. Label floats when focused or has a value. */\n  readonly shouldLabelFloat: Signal<boolean> = computed(() => this.focused() || this.hasValue());\n\n  /** Whether the control is in an error state. Implements FormFieldControl. */\n  readonly errorState: Signal<boolean> = computed(() => {\n    if (!this.ngControl) {\n      // Signal Forms: gate on invalid AND touched (mirrors ErrorStateMatcher default)\n      return this.invalid() && this.touched();\n    }\n    // Reactive Forms: use ErrorStateMatcher (existing logic)\n    this.isOpen();\n    this.hasValue();\n    const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n    const form = this.parentFormGroup ?? this.parentForm;\n    return matcher.isErrorState(this.ngControl.control ?? null, form);\n  });\n\n  /** Structured validation errors from Signal Forms, exposed for the parent form field. */\n  readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n    !this.ngControl ? this.sfErrors() : null\n  );\n\n  /** Unique ID for the control. Implements FormFieldControl. */\n  readonly id: Signal<string> = this.triggerId;\n\n  /**\n   * Effective state combining manual state with automatic error detection.\n   * Manual state takes precedence over auto-detected error state.\n   */\n  readonly effectiveState: Signal<DropdownState> = computed(() => {\n    const manualState = this.state();\n    if (manualState !== 'default') return manualState;\n    return this.errorState() ? 'error' : 'default';\n  });\n\n  /** Combined aria-describedby from form-field. */\n  readonly ariaDescribedBy: Signal<string | null> = computed(() => this._describedByIds() || null);\n\n  /** Selected value (single mode). */\n  readonly selectedValue: Signal<T | null> = computed(() => {\n    const val = this.internalValue();\n    if (this.multiple() || Array.isArray(val)) {\n      return null;\n    }\n    return val;\n  });\n\n  /** Selected values (multiple mode). */\n  readonly selectedValues: Signal<T[]> = computed(() => {\n    const val = this.internalValue();\n    if (!this.multiple()) {\n      return [];\n    }\n    return Array.isArray(val) ? val : val !== null ? [val] : [];\n  });\n\n  /** Tags visible in the trigger (limited by maxVisibleTags). */\n  readonly visibleTags: Signal<T[]> = computed(() => {\n    const all = this.selectedValues();\n    const max = this.maxVisibleTags();\n    if (max === null || all.length <= max) {\n      return all;\n    }\n    return all.slice(0, max);\n  });\n\n  /** Count of hidden tags (for +N badge). */\n  readonly hiddenTagsCount: Signal<number> = computed(() => {\n    const all = this.selectedValues();\n    const max = this.maxVisibleTags();\n    if (max === null || all.length <= max) {\n      return 0;\n    }\n    return all.length - max;\n  });\n\n  /** Processed options with display text and IDs. */\n  readonly processedOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n    const opts = this.options();\n    const display = this.displayWith();\n    return opts.map((opt, index) => ({\n      value: opt,\n      displayText: display(opt),\n      disabled: false, // Could be extended with disabledWith input\n      id: `${this.dropdownId}-option-${index}`,\n    }));\n  });\n\n  /** Filtered options based on search query. */\n  readonly filteredOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n    const opts = this.processedOptions();\n    const query = this.searchQuery().trim();\n\n    if (!query) {\n      return opts;\n    }\n\n    const filterFn = this.filterWith();\n    const display = this.displayWith();\n\n    return opts.filter((opt) => {\n      if (filterFn) {\n        return filterFn(opt.value, query);\n      }\n      return defaultFilterWith(opt.value, query, display);\n    });\n  });\n\n  /** Grouped options (when groupBy is provided). */\n  readonly groupedOptions: Signal<DropdownGroupType<ComDropdownProcessedOption<T>>[]> = computed(() => {\n    const groupFn = this.groupBy();\n    if (!groupFn) {\n      return [];\n    }\n\n    const opts = this.filteredOptions();\n    const groups = new Map<string, ComDropdownProcessedOption<T>[]>();\n\n    for (const opt of opts) {\n      const key = groupFn(opt.value);\n      const existing = groups.get(key) || [];\n      existing.push(opt);\n      groups.set(key, existing);\n    }\n\n    return Array.from(groups.entries()).map(([key, options]) => ({\n      key,\n      options,\n      expanded: true,\n    }));\n  });\n\n  /** Whether virtual scrolling should be enabled. */\n  readonly virtualScrollEnabled: Signal<boolean> = computed(() => {\n    return this.filteredOptions().length > this.virtualScrollThreshold();\n  });\n\n  /** Context for selected template. */\n  readonly selectedContext: Signal<ComDropdownSelectedContext<T>> = computed(() => ({\n    $implicit: this.internalValue(),\n    placeholder: this.placeholder(),\n    multiple: this.multiple(),\n  }));\n\n  /** Context for empty template. */\n  readonly emptyContext: Signal<ComDropdownEmptyContext> = computed(() => ({\n    $implicit: this.searchQuery(),\n  }));\n\n  /** Computed trigger classes. */\n  readonly triggerClasses: Signal<string> = computed(() => {\n    const baseClasses = dropdownTriggerVariants({\n      variant: this.variant(),\n      size: this.size(),\n      state: this.effectiveState(),\n      open: this.isOpen(),\n    });\n\n    // For naked variant, add padding based on form-field appearance\n    let paddingClasses = '';\n    if (this.variant() === 'naked') {\n      paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';\n    }\n\n    return mergeClasses(baseClasses, paddingClasses, this.userClass());\n  });\n\n  /** Computed panel classes. */\n  readonly panelClasses: Signal<string> = computed(() => {\n    return mergeClasses(\n      'w-full z-50 h-fit overflow-hidden rounded-overlay border border-border-subtle bg-popover text-popover-foreground shadow-overlay outline-none',\n      this.panelClass()\n    );\n  });\n\n  /** Computed chevron classes. */\n  readonly chevronClasses: Signal<string> = computed(() => {\n    return dropdownChevronVariants({\n      size: this.size(),\n      open: this.isOpen(),\n      disabled: this.disabled(),\n    });\n  });\n\n  /** Computed clear button classes. */\n  readonly clearClasses: Signal<string> = computed(() => {\n    return dropdownClearVariants({ size: this.size() });\n  });\n\n  /** Computed overflow badge classes. */\n  readonly overflowBadgeClasses: Signal<string> = computed(() => {\n    return dropdownOverflowBadgeVariants({ size: this.size() });\n  });\n\n  /** Computed loading container classes. */\n  readonly loadingContainerClasses: Signal<string> = computed(() => {\n    return dropdownLoadingVariants({ size: this.size() });\n  });\n\n  // ============ CVA CALLBACKS ============\n\n  private onChange: (value: T | T[] | null) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  constructor() {\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this;\n    }\n\n    // Reset loadMoreEmitted when options change (new data arrived)\n    effect(() => {\n      this.options(); // track\n      this.loadMoreEmitted = false;\n    });\n  }\n\n  // ============ CVA IMPLEMENTATION ============\n\n  writeValue(value: T | T[] | null): void {\n    this.internalValue.set(value);\n  }\n\n  registerOnChange(fn: (value: T | T[] | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled.set(isDisabled);\n  }\n\n  // ============ FormFieldControl IMPLEMENTATION ============\n\n  /**\n   * Called when the form field container is clicked.\n   * Implements FormFieldControl.\n   */\n  onContainerClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    // Only toggle if click was outside the trigger button (not on it or inside it)\n    if (!this.disabled() && !this.triggerRef().nativeElement.contains(target)) {\n      this.toggle();\n    }\n  }\n\n  /**\n   * Sets the describedBy IDs from the form field.\n   * Called by the parent form field component.\n   */\n  setDescribedByIds(ids: string): void {\n    this._describedByIds.set(ids);\n  }\n\n  /**\n   * Sets the appearance for styling.\n   * Called by the parent form field component.\n   */\n  setAppearance(appearance: FormFieldAppearance): void {\n    this._appearance.set(appearance);\n  }\n\n  // ============ PUBLIC METHODS ============\n\n  /** Opens the dropdown panel. */\n  open(): void {\n    if (this.disabled() || this.isOpen()) {\n      return;\n    }\n\n    this.createOverlay();\n    this.isOpen.set(true);\n    this.opened.emit();\n\n    // Set initial active option\n    const currentValue = this.internalValue();\n    if (currentValue !== null && !this.multiple()) {\n      const option = this.filteredOptions().find((opt) => this.compareWith()(opt.value, currentValue as T));\n      if (option) {\n        this.activeOptionId.set(option.id);\n      }\n    } else {\n      const firstOption = this.filteredOptions()[0];\n      if (firstOption) {\n        this.activeOptionId.set(firstOption.id);\n      }\n    }\n\n    // Announce opening\n    this.announce(`${this.placeholder()} dropdown opened, ${this.filteredOptions().length} options available`);\n\n    // Close on ancestor scroll (SPAs with scrollable containers)\n    this.setupAncestorScrollListeners();\n\n    // Set up scroll detection for loadMore\n    this.setupScrollDetection();\n  }\n\n  /** Closes the dropdown panel. */\n  close(): void {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.cleanupAncestorScrollListeners();\n    this.cleanupScrollDetection();\n    this.destroyOverlay();\n    this.isOpen.set(false);\n    this.searchQuery.set('');\n    this.activeOptionId.set(null);\n    this.closed.emit();\n    this.onTouched();\n    this.touched.set(true);\n  }\n\n  /** Toggles the dropdown panel. */\n  toggle(): void {\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n\n  /** Clears the selection. */\n  clear(event?: Event): void {\n    event?.preventDefault();\n    event?.stopPropagation();\n\n    const newValue = this.multiple() ? [] : null;\n    this.updateValue(newValue);\n    this.announce('Selection cleared');\n  }\n\n  /** Checks if a value is selected. */\n  isSelected(value: T): boolean {\n    const current = this.internalValue();\n    const compare = this.compareWith();\n\n    if (this.multiple()) {\n      const arr = Array.isArray(current) ? current : [];\n      return arr.some((v) => compare(v, value));\n    }\n\n    return current !== null && compare(current as T, value);\n  }\n\n  /** Checks if an option ID is the active one. */\n  isActive(optionId: string): boolean {\n    return this.activeOptionId() === optionId;\n  }\n\n  // ============ EVENT HANDLERS ============\n\n  protected onTriggerKeydown(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 'ArrowDown':\n      case 'ArrowUp':\n        event.preventDefault();\n        if (!this.isOpen()) {\n          this.open();\n        } else {\n          this.navigateOptions(event.key === 'ArrowDown' ? 1 : -1);\n        }\n        break;\n\n      case 'Enter':\n      case ' ':\n        event.preventDefault();\n        if (this.isOpen() && this.activeOptionId()) {\n          this.selectActiveOption();\n        } else {\n          this.toggle();\n        }\n        break;\n\n      case 'Escape':\n        if (this.isOpen()) {\n          event.preventDefault();\n          this.close();\n          this.triggerRef().nativeElement.focus();\n        }\n        break;\n\n      case 'Home':\n        if (this.isOpen()) {\n          event.preventDefault();\n          this.navigateToFirst();\n        }\n        break;\n\n      case 'End':\n        if (this.isOpen()) {\n          event.preventDefault();\n          this.navigateToLast();\n        }\n        break;\n\n      case 'Tab':\n        // Close panel when tabbing away from trigger\n        if (this.isOpen()) {\n          this.close();\n        }\n        // Don't prevent default - let Tab naturally move focus\n        break;\n\n      default:\n        // Type-ahead search\n        if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n          this.typeAhead(event.key);\n        }\n        break;\n    }\n  }\n\n  protected onPanelKeydown(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        this.navigateOptions(1);\n        break;\n\n      case 'ArrowUp':\n        event.preventDefault();\n        this.navigateOptions(-1);\n        break;\n\n      case 'Enter':\n      case ' ':\n        if (event.key === ' ' && this.searchable() && event.target instanceof HTMLInputElement) {\n          return;\n        }\n        event.preventDefault();\n        this.selectActiveOption();\n        break;\n\n      case 'Escape':\n        event.preventDefault();\n        this.close();\n        this.triggerRef().nativeElement.focus();\n        break;\n\n      case 'Tab':\n        this.close();\n        break;\n\n      case 'Home':\n        event.preventDefault();\n        this.navigateToFirst();\n        break;\n\n      case 'End':\n        event.preventDefault();\n        this.navigateToLast();\n        break;\n    }\n  }\n\n  protected onSearchChange(query: string): void {\n    this.searchQuery.set(query);\n    this.searchChange.emit(query);\n\n    // Reset active option to first result\n    const filtered = this.filteredOptions();\n    const firstFiltered = filtered[0];\n    if (firstFiltered) {\n      this.activeOptionId.set(firstFiltered.id);\n    } else {\n      this.activeOptionId.set(null);\n    }\n  }\n\n  protected onSearchKeyNav(event: KeyboardEvent): void {\n    // Delegate to panel keydown handler\n    this.onPanelKeydown(event);\n  }\n\n  protected onTriggerFocus(): void {\n    this._triggerFocused.set(true);\n  }\n\n  protected onTriggerBlur(): void {\n    this._triggerFocused.set(false);\n  }\n\n  protected onOptionHover(optionId: string): void {\n    this.activeOptionId.set(optionId);\n  }\n\n  protected selectOption(value: T): void {\n    if (this.multiple()) {\n      this.toggleMultipleValue(value);\n    } else {\n      this.updateValue(value);\n      this.close();\n      this.triggerRef().nativeElement.focus();\n    }\n  }\n\n  protected removeValue(value: T): void {\n    const current = this.selectedValues();\n    const compare = this.compareWith();\n    const newValues = current.filter((v) => !compare(v, value));\n    this.updateValue(newValues.length > 0 ? newValues : []);\n    this.announce(`${this.displayWith()(value)} removed`);\n    this.repositionOverlay();\n  }\n\n  protected trackByValue(item: T, _index: number): unknown {\n    return item;\n  }\n\n  /** Track function for virtual scroll options. */\n  protected trackByOption(_index: number, option: ComDropdownProcessedOption<T>): string {\n    return option.id;\n  }\n\n  protected getGlobalIndex(groupKey: string, localIndex: number): number {\n    const groups = this.groupedOptions();\n    let globalIndex = 0;\n\n    for (const group of groups) {\n      if (group.key === groupKey) {\n        return globalIndex + localIndex;\n      }\n      globalIndex += group.options.length;\n    }\n\n    return localIndex;\n  }\n\n  // ============ PRIVATE METHODS ============\n\n  private createOverlay(): void {\n    if (this.overlayRef) {\n      return;\n    }\n\n    const hostEl = this.elementRef.nativeElement;\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(hostEl)\n      .withPositions(DEFAULT_POSITIONS)\n      .withFlexibleDimensions(false)\n      .withPush(true);\n\n    const hostWidth = hostEl.getBoundingClientRect?.()?.width ?? 0;\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n      ...this.getPanelWidthConfig(hostWidth),\n      hasBackdrop: true,\n      backdropClass: 'cdk-overlay-transparent-backdrop',\n    });\n\n    // Attach panel template\n    const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n    this.overlayRef.attach(portal);\n\n    // Close on backdrop click\n    this.overlayRef\n      .backdropClick()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.close());\n\n    // Close on outside click\n    this.overlayRef\n      .outsidePointerEvents()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.close());\n  }\n\n  /** Re-positions the overlay after the trigger height changes (e.g. tags added/removed). */\n  private repositionOverlay(): void {\n    if (!this.overlayRef) return;\n    // Wait for Angular to render the updated trigger before recalculating position\n    afterNextRender(() => this.overlayRef?.updatePosition(), { injector: this.injector });\n  }\n\n  private destroyOverlay(): void {\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n    }\n  }\n\n  /**\n   * Returns overlay width configuration based on panelWidth setting.\n   * - 'trigger': min-width equals host, can grow wider\n   * - 'auto': no width constraint\n   * - specific value: exact width\n   */\n  private getPanelWidthConfig(hostWidth: number): { minWidth?: number; width?: string } {\n    const config = this.panelWidth();\n    if (config === 'trigger') {\n      return { minWidth: hostWidth };\n    }\n    if (config === 'auto') {\n      return {};\n    }\n    return { width: config };\n  }\n\n  private updateValue(value: T | T[] | null): void {\n    this.value.set(value);\n    this.onChange(value);\n\n    // Announce selection\n    if (value !== null && !Array.isArray(value)) {\n      this.announce(`${this.displayWith()(value)} selected`);\n    }\n  }\n\n  private toggleMultipleValue(value: T): void {\n    const current = this.selectedValues();\n    const compare = this.compareWith();\n    const isAlreadySelected = current.some((v) => compare(v, value));\n\n    let newValues: T[];\n    if (isAlreadySelected) {\n      newValues = current.filter((v) => !compare(v, value));\n      this.announce(`${this.displayWith()(value)} deselected`);\n    } else {\n      newValues = [...current, value];\n      this.announce(`${this.displayWith()(value)} selected`);\n    }\n\n    this.updateValue(newValues.length > 0 ? newValues : []);\n    this.repositionOverlay();\n  }\n\n  private navigateOptions(direction: 1 | -1): void {\n    const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n    if (options.length === 0) {\n      return;\n    }\n\n    const currentId = this.activeOptionId();\n    let currentIndex = options.findIndex((opt) => opt.id === currentId);\n\n    if (currentIndex === -1) {\n      currentIndex = direction === 1 ? -1 : options.length;\n    }\n\n    let nextIndex = currentIndex + direction;\n\n    // Wrap around\n    if (nextIndex < 0) {\n      nextIndex = options.length - 1;\n    } else if (nextIndex >= options.length) {\n      nextIndex = 0;\n    }\n\n    // Skip disabled options\n    const startIndex = nextIndex;\n    let currentOption = options[nextIndex];\n    while (currentOption?.disabled) {\n      nextIndex += direction;\n      if (nextIndex < 0) nextIndex = options.length - 1;\n      else if (nextIndex >= options.length) nextIndex = 0;\n      if (nextIndex === startIndex) return; // All disabled\n      currentOption = options[nextIndex];\n    }\n\n    const targetOption = options[nextIndex];\n    if (targetOption) {\n      this.activeOptionId.set(targetOption.id);\n      this.scrollActiveOptionIntoView(nextIndex, targetOption.id);\n    }\n  }\n\n  private navigateToFirst(): void {\n    const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n    const firstEnabled = options.find((opt) => !opt.disabled);\n    if (firstEnabled) {\n      const index = options.indexOf(firstEnabled);\n      this.activeOptionId.set(firstEnabled.id);\n      this.scrollActiveOptionIntoView(index, firstEnabled.id);\n    }\n  }\n\n  private navigateToLast(): void {\n    const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n    const lastEnabled = [...options].reverse().find((opt) => !opt.disabled);\n    if (lastEnabled) {\n      const index = options.indexOf(lastEnabled);\n      this.activeOptionId.set(lastEnabled.id);\n      this.scrollActiveOptionIntoView(index, lastEnabled.id);\n    }\n  }\n\n  /** Scrolls the active option into view, using virtual viewport or native scroll. */\n  private scrollActiveOptionIntoView(index: number, optionId: string): void {\n    const viewport = this.virtualViewport();\n    if (viewport) {\n      viewport.scrollToIndex(index);\n    } else {\n      const panelEl = this.overlayRef?.overlayElement;\n      const optionEl = panelEl?.querySelector(`[id=\"${optionId}\"]`) as HTMLElement | null;\n      optionEl?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n    }\n  }\n\n  private selectActiveOption(): void {\n    const activeId = this.activeOptionId();\n    if (!activeId) return;\n\n    const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n    const option = options.find((opt) => opt.id === activeId);\n\n    if (option && !option.disabled) {\n      this.selectOption(option.value);\n    }\n  }\n\n  private flattenGroupedOptions(): ComDropdownProcessedOption<T>[] {\n    return this.groupedOptions().flatMap((group) => group.options);\n  }\n\n  private typeAhead(char: string): void {\n    // Simple type-ahead: find first option starting with the character\n    const options = this.filteredOptions();\n    const display = this.displayWith();\n    const lowerChar = char.toLowerCase();\n\n    const match = options.find((opt) => !opt.disabled && display(opt.value).toLowerCase().startsWith(lowerChar));\n\n    if (match) {\n      this.activeOptionId.set(match.id);\n      if (!this.isOpen()) {\n        this.selectOption(match.value);\n      }\n    }\n  }\n\n  private announce(message: string): void {\n    this.liveAnnouncement.set(message);\n    this.liveAnnouncer.announce(message, 'polite');\n  }\n\n  /**\n   * Listens for scroll events on ancestor elements of the trigger.\n   * Closes the dropdown when the page scrolls, since CDK's reposition strategy\n   * only detects window scroll and registered cdkScrollable elements — not\n   * arbitrary scrollable containers (common in SPAs).\n   * SSR-safe: only called from user interaction handlers.\n   */\n  private setupAncestorScrollListeners(): void {\n    this.cleanupAncestorScrollListeners();\n\n    const originEl = this.elementRef.nativeElement;\n    const overlayEl = this.overlayRef?.overlayElement;\n    let parent = originEl.parentElement;\n\n    while (parent) {\n      const style = getComputedStyle(parent);\n      const overflow = style.overflow + style.overflowX + style.overflowY;\n      if (/auto|scroll/.test(overflow)) {\n        const scrollableParent = parent;\n        const handler = (): void => {\n          // Ignore scroll events from inside the overlay panel itself\n          if (overlayEl && overlayEl.contains(scrollableParent)) return;\n          this.close();\n        };\n        scrollableParent.addEventListener('scroll', handler, { passive: true });\n        this.ancestorScrollCleanups.push(() =>\n          scrollableParent.removeEventListener('scroll', handler),\n        );\n      }\n      parent = parent.parentElement;\n    }\n  }\n\n  /** Removes ancestor scroll listeners. */\n  private cleanupAncestorScrollListeners(): void {\n    this.ancestorScrollCleanups.forEach((cleanup) => cleanup());\n    this.ancestorScrollCleanups = [];\n  }\n\n  /** Sets up scroll detection for the loadMore output. SSR-safe: only called from user interaction. */\n  private setupScrollDetection(): void {\n    this.loadMoreEmitted = false;\n    this.cleanupScrollDetection();\n\n    const viewport = this.virtualViewport();\n    if (viewport) {\n      // Virtual scroll branch — use viewport's elementScrolled observable\n      this.scrollSubscription = viewport.elementScrolled()\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe(() => {\n          if (this.loading() || this.loadMoreEmitted) return;\n          const offset = viewport.measureScrollOffset('bottom');\n          if (offset < 50) {\n            this.loadMoreEmitted = true;\n            this.loadMore.emit();\n          } else {\n            // Reset flag when user scrolls back up\n            this.loadMoreEmitted = false;\n          }\n        });\n    } else {\n      // Standard scroll branch — throttled scroll event on the scroll container\n      const panelEl = this.overlayRef?.overlayElement;\n      const scrollContainer = panelEl?.querySelector('[data-scroll-container]') as HTMLElement | null;\n      if (!scrollContainer) return;\n\n      this.throttledScrollHandler = throttle(() => {\n        if (this.loading() || this.loadMoreEmitted) return;\n        const { scrollTop, clientHeight, scrollHeight } = scrollContainer;\n        if (scrollTop + clientHeight >= scrollHeight - 50) {\n          this.loadMoreEmitted = true;\n          this.loadMore.emit();\n        } else {\n          // Reset flag when user scrolls back up\n          this.loadMoreEmitted = false;\n        }\n      }, 100);\n\n      scrollContainer.addEventListener('scroll', this.throttledScrollHandler, { passive: true });\n    }\n  }\n\n  /** Cleans up scroll detection listeners. */\n  private cleanupScrollDetection(): void {\n    if (this.scrollSubscription) {\n      this.scrollSubscription.unsubscribe();\n      this.scrollSubscription = null;\n    }\n    if (this.throttledScrollHandler) {\n      const panelEl = this.overlayRef?.overlayElement;\n      const scrollContainer = panelEl?.querySelector('[data-scroll-container]') as HTMLElement | null;\n      scrollContainer?.removeEventListener('scroll', this.throttledScrollHandler);\n      this.throttledScrollHandler.cancel();\n      this.throttledScrollHandler = null;\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n  viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef, ElementRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport { dropdownPanelVariants, dropdownEmptyVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownEmptyContext, ComDropdownProcessedOption } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * The overlay panel containing the dropdown options.\n * Supports virtual scrolling for large lists.\n *\n * @example\n * ```html\n * <com-dropdown-panel\n *   [options]=\"filteredOptions()\"\n *   [maxHeight]=\"'300px'\"\n *   [virtualScrollEnabled]=\"true\"\n * >\n *   <ng-content />\n * </com-dropdown-panel>\n * ```\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n *         `--color-muted-foreground`, `--radius-overlay`\n */\n@Component({\n  selector: 'com-dropdown-panel',\n  exportAs: 'comDropdownPanel',\n  template: `\n    <div\n      #panelElement\n      [class]=\"panelClasses()\"\n    >\n      <!-- Search slot (outside listbox for valid ARIA structure) -->\n      <ng-content select=\"[comDropdownSearch]\" />\n\n      <!-- Options container -->\n      @if (virtualScrollEnabled()) {\n        <cdk-virtual-scroll-viewport\n          [itemSize]=\"itemSize()\"\n          [maxBufferPx]=\"400\"\n          [minBufferPx]=\"200\"\n          [style.height]=\"maxHeight()\"\n          class=\"overflow-auto\"\n          role=\"listbox\"\n          [attr.aria-multiselectable]=\"multiselectable() || null\"\n          [attr.id]=\"panelId()\"\n        >\n          <div\n            *cdkVirtualFor=\"let option of options(); trackBy: trackByFn; let i = index\"\n            [attr.data-index]=\"i\"\n          >\n            <ng-container\n              [ngTemplateOutlet]=\"optionTemplate()\"\n              [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n            />\n          </div>\n        </cdk-virtual-scroll-viewport>\n      } @else {\n        <div\n          class=\"overflow-auto\"\n          [style.maxHeight]=\"maxHeight()\"\n          role=\"listbox\"\n          [attr.aria-multiselectable]=\"multiselectable() || null\"\n          [attr.id]=\"panelId()\"\n        >\n          @for (option of options(); track option.id; let i = $index) {\n            <ng-container\n              [ngTemplateOutlet]=\"optionTemplate()\"\n              [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n            />\n          }\n        </div>\n      }\n\n      <!-- Empty state -->\n      @if (showEmpty()) {\n        @if (emptyTemplate()) {\n          <ng-container\n            [ngTemplateOutlet]=\"emptyTemplate()!\"\n            [ngTemplateOutletContext]=\"emptyContext()\"\n          />\n        } @else {\n          <div [class]=\"emptyClasses()\">\n            {{ emptyText() }}\n          </div>\n        }\n      }\n    </div>\n  `,\n  imports: [\n    NgTemplateOutlet,\n    CdkVirtualScrollViewport,\n    CdkFixedSizeVirtualScroll,\n    CdkVirtualForOf,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-dropdown-panel-host block',\n  },\n})\nexport class ComDropdownPanel<T> {\n  /** Reference to the panel element. */\n  private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panelElement');\n\n  /** Reference to the virtual scroll viewport (when enabled). */\n  readonly viewport: Signal<CdkVirtualScrollViewport | undefined> = viewChild<CdkVirtualScrollViewport>('viewport');\n\n  /** Unique identifier for the panel. */\n  readonly panelId: InputSignal<string> = input<string>('');\n\n  /** The processed options to display. */\n  readonly options: InputSignal<ComDropdownProcessedOption<T>[]> = input<ComDropdownProcessedOption<T>[]>([]);\n\n  /** Maximum height of the panel. */\n  readonly maxHeight: InputSignal<string> = input<string>('256px');\n\n  /** Whether multiple selection is enabled. */\n  readonly multiselectable: InputSignal<boolean> = input<boolean>(false);\n\n  /** Size variant for styling. */\n  readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n  /** Additional CSS classes to apply to the panel. */\n  readonly panelClass: InputSignal<string> = input<string>('');\n\n  /** Whether virtual scrolling is enabled. */\n  readonly virtualScrollEnabled: InputSignal<boolean> = input<boolean>(false);\n\n  /** Item size for virtual scrolling (in pixels). */\n  readonly itemSize: InputSignal<number> = input<number>(40);\n\n  /** The current search query (for empty state context). */\n  readonly searchQuery: InputSignal<string> = input<string>('');\n\n  /** Custom empty state text. */\n  readonly emptyText: InputSignal<string> = input<string>('No options available');\n\n  /** Template for rendering each option. */\n  readonly optionTemplate: InputSignal<TemplateRef<{ $implicit: ComDropdownProcessedOption<T>; index: number }>> =\n    input.required<TemplateRef<{ $implicit: ComDropdownProcessedOption<T>; index: number }>>();\n\n  /** Custom template for the empty state. */\n  readonly emptyTemplate: InputSignal<TemplateRef<ComDropdownEmptyContext> | null> =\n    input<TemplateRef<ComDropdownEmptyContext> | null>(null);\n\n  /** Emitted when the panel is scrolled. */\n  readonly scrolled: OutputEmitterRef<void> = output<void>();\n\n  /** Whether to show the empty state. */\n  protected readonly showEmpty: Signal<boolean> = computed(() => this.options().length === 0);\n\n  /** Computed CSS classes for the panel. */\n  protected readonly panelClasses: Signal<string> = computed(() => {\n    const baseClasses = dropdownPanelVariants({ size: this.size() });\n    return mergeClasses(baseClasses, this.panelClass());\n  });\n\n  /** Computed CSS classes for the empty state. */\n  protected readonly emptyClasses: Signal<string> = computed(() => {\n    return dropdownEmptyVariants({ size: this.size() });\n  });\n\n  /** Template context for the empty state. */\n  protected readonly emptyContext: Signal<ComDropdownEmptyContext> = computed(() => ({\n    $implicit: this.searchQuery(),\n  }));\n\n  /** Track function for options. */\n  protected trackByFn(_index: number, option: ComDropdownProcessedOption<T>): string {\n    return option.id;\n  }\n\n  /** Scrolls to a specific index. */\n  scrollToIndex(index: number): void {\n    const vp = this.viewport();\n    if (this.virtualScrollEnabled() && vp) {\n      vp.scrollToIndex(index);\n    } else {\n      const panelEl = this.panelRef()?.nativeElement;\n      const optionEl = panelEl?.querySelector(`[data-index=\"${index}\"]`) as HTMLElement | null;\n      optionEl?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n    }\n  }\n\n  /** Scrolls an option into view. */\n  scrollOptionIntoView(optionElement: HTMLElement): void {\n    optionElement.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n  }\n}\n","// Public API for the dropdown component\n\n// Main component\nexport { ComDropdown } from './dropdown.component';\n\n// Supporting components\nexport { ComDropdownOption } from './dropdown-option.component';\nexport { ComDropdownPanel } from './dropdown-panel.component';\nexport { ComDropdownSearch } from './dropdown-search.component';\nexport { ComDropdownTag } from './dropdown-tag.component';\nexport { ComDropdownGroup } from './dropdown-group.component';\n\n// Template directives\nexport { ComDropdownOptionTpl } from './directives/dropdown-option-tpl.directive';\nexport { ComDropdownSelectedTpl } from './directives/dropdown-selected-tpl.directive';\nexport { ComDropdownEmptyTpl } from './directives/dropdown-empty-tpl.directive';\nexport { ComDropdownGroupTpl } from './directives/dropdown-group-tpl.directive';\nexport { ComDropdownTagTpl } from './directives/dropdown-tag-tpl.directive';\nexport { ComDropdownLoadingTpl } from './directives/dropdown-loading-tpl.directive';\n\n// Models and types\nexport type {\n  ComDropdownOptionContext,\n  ComDropdownSelectedContext,\n  ComDropdownEmptyContext,\n  ComDropdownGroupContext,\n  ComDropdownTagContext,\n  ComDropdownGroup as ComDropdownGroupData,\n  ComDropdownProcessedOption,\n  ComDropdownPosition,\n  ComDropdownPanelWidth,\n} from './dropdown.models';\n\nexport {\n  defaultCompareWith,\n  defaultDisplayWith,\n  defaultFilterWith,\n  generateDropdownId,\n} from './dropdown.models';\n\n// Variants (for advanced customization)\nexport {\n  dropdownTriggerVariants,\n  dropdownPanelVariants,\n  dropdownOptionVariants,\n  dropdownSearchVariants,\n  dropdownTagVariants,\n  dropdownTagRemoveVariants,\n  dropdownOverflowBadgeVariants,\n  dropdownGroupVariants,\n  dropdownEmptyVariants,\n  dropdownClearVariants,\n  dropdownChevronVariants,\n  dropdownLoadingVariants,\n} from './dropdown.variants';\n\nexport type {\n  DropdownVariant,\n  DropdownSize,\n  DropdownState,\n  DropdownTriggerVariants,\n  DropdownPanelVariants,\n  DropdownOptionVariants,\n  DropdownSearchVariants,\n  DropdownTagVariants,\n  DropdownTagRemoveVariants,\n  DropdownOverflowBadgeVariants,\n  DropdownGroupVariants,\n  DropdownEmptyVariants,\n  DropdownClearVariants,\n  DropdownChevronVariants,\n  DropdownLoadingVariants,\n} from './dropdown.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}