ngx-com 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -768,6 +768,7 @@ class ComDropdownSearch {
768
768
  #searchInput
769
769
  type="text"
770
770
  [class]="searchClasses()"
771
+ [value]="internalValue()"
771
772
  [placeholder]="placeholder()"
772
773
  [disabled]="disabled()"
773
774
  [attr.aria-label]="ariaLabel()"
@@ -830,6 +831,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
830
831
  #searchInput
831
832
  type="text"
832
833
  [class]="searchClasses()"
834
+ [value]="internalValue()"
833
835
  [placeholder]="placeholder()"
834
836
  [disabled]="disabled()"
835
837
  [attr.aria-label]="ariaLabel()"
@@ -2344,14 +2346,10 @@ class ComDropdown {
2344
2346
  <div
2345
2347
  #panelElement
2346
2348
  [class]="panelClasses()"
2347
- [attr.id]="panelId()"
2348
- [attr.role]="'listbox'"
2349
2349
  tabindex="-1"
2350
- [attr.aria-multiselectable]="multiple() || null"
2351
- [attr.aria-label]="placeholder()"
2352
2350
  (keydown)="onPanelKeydown($event)"
2353
2351
  >
2354
- <!-- Search input -->
2352
+ <!-- Search input (outside listbox for valid ARIA structure) -->
2355
2353
  @if (searchable()) {
2356
2354
  <com-dropdown-search
2357
2355
  [placeholder]="searchPlaceholder()"
@@ -2371,6 +2369,10 @@ class ComDropdown {
2371
2369
  [minBufferPx]="200"
2372
2370
  [style.height]="maxHeight()"
2373
2371
  class="overflow-auto"
2372
+ role="listbox"
2373
+ [attr.id]="panelId()"
2374
+ [attr.aria-multiselectable]="multiple() || null"
2375
+ [attr.aria-label]="placeholder()"
2374
2376
  >
2375
2377
  <com-dropdown-option
2376
2378
  *cdkVirtualFor="let option of filteredOptions(); trackBy: trackByOption; let i = index"
@@ -2404,6 +2406,10 @@ class ComDropdown {
2404
2406
  class="overflow-auto"
2405
2407
  [style.maxHeight]="maxHeight()"
2406
2408
  data-scroll-container
2409
+ role="listbox"
2410
+ [attr.id]="panelId()"
2411
+ [attr.aria-multiselectable]="multiple() || null"
2412
+ [attr.aria-label]="placeholder()"
2407
2413
  >
2408
2414
  @if (groupedOptions().length > 0) {
2409
2415
  @for (group of groupedOptions(); track group.key) {
@@ -2595,14 +2601,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2595
2601
  <div
2596
2602
  #panelElement
2597
2603
  [class]="panelClasses()"
2598
- [attr.id]="panelId()"
2599
- [attr.role]="'listbox'"
2600
2604
  tabindex="-1"
2601
- [attr.aria-multiselectable]="multiple() || null"
2602
- [attr.aria-label]="placeholder()"
2603
2605
  (keydown)="onPanelKeydown($event)"
2604
2606
  >
2605
- <!-- Search input -->
2607
+ <!-- Search input (outside listbox for valid ARIA structure) -->
2606
2608
  @if (searchable()) {
2607
2609
  <com-dropdown-search
2608
2610
  [placeholder]="searchPlaceholder()"
@@ -2622,6 +2624,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2622
2624
  [minBufferPx]="200"
2623
2625
  [style.height]="maxHeight()"
2624
2626
  class="overflow-auto"
2627
+ role="listbox"
2628
+ [attr.id]="panelId()"
2629
+ [attr.aria-multiselectable]="multiple() || null"
2630
+ [attr.aria-label]="placeholder()"
2625
2631
  >
2626
2632
  <com-dropdown-option
2627
2633
  *cdkVirtualFor="let option of filteredOptions(); trackBy: trackByOption; let i = index"
@@ -2655,6 +2661,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2655
2661
  class="overflow-auto"
2656
2662
  [style.maxHeight]="maxHeight()"
2657
2663
  data-scroll-container
2664
+ role="listbox"
2665
+ [attr.id]="panelId()"
2666
+ [attr.aria-multiselectable]="multiple() || null"
2667
+ [attr.aria-label]="placeholder()"
2658
2668
  >
2659
2669
  @if (groupedOptions().length > 0) {
2660
2670
  @for (group of groupedOptions(); track group.key) {
@@ -2844,11 +2854,8 @@ class ComDropdownPanel {
2844
2854
  <div
2845
2855
  #panelElement
2846
2856
  [class]="panelClasses()"
2847
- [attr.role]="'listbox'"
2848
- [attr.aria-multiselectable]="multiselectable() || null"
2849
- [attr.id]="panelId()"
2850
2857
  >
2851
- <!-- Search slot -->
2858
+ <!-- Search slot (outside listbox for valid ARIA structure) -->
2852
2859
  <ng-content select="[comDropdownSearch]" />
2853
2860
 
2854
2861
  <!-- Options container -->
@@ -2859,6 +2866,9 @@ class ComDropdownPanel {
2859
2866
  [minBufferPx]="200"
2860
2867
  [style.height]="maxHeight()"
2861
2868
  class="overflow-auto"
2869
+ role="listbox"
2870
+ [attr.aria-multiselectable]="multiselectable() || null"
2871
+ [attr.id]="panelId()"
2862
2872
  >
2863
2873
  <div
2864
2874
  *cdkVirtualFor="let option of options(); trackBy: trackByFn; let i = index"
@@ -2874,6 +2884,9 @@ class ComDropdownPanel {
2874
2884
  <div
2875
2885
  class="overflow-auto"
2876
2886
  [style.maxHeight]="maxHeight()"
2887
+ role="listbox"
2888
+ [attr.aria-multiselectable]="multiselectable() || null"
2889
+ [attr.id]="panelId()"
2877
2890
  >
2878
2891
  @for (option of options(); track option.id; let i = $index) {
2879
2892
  <ng-container
@@ -2909,11 +2922,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2909
2922
  <div
2910
2923
  #panelElement
2911
2924
  [class]="panelClasses()"
2912
- [attr.role]="'listbox'"
2913
- [attr.aria-multiselectable]="multiselectable() || null"
2914
- [attr.id]="panelId()"
2915
2925
  >
2916
- <!-- Search slot -->
2926
+ <!-- Search slot (outside listbox for valid ARIA structure) -->
2917
2927
  <ng-content select="[comDropdownSearch]" />
2918
2928
 
2919
2929
  <!-- Options container -->
@@ -2924,6 +2934,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2924
2934
  [minBufferPx]="200"
2925
2935
  [style.height]="maxHeight()"
2926
2936
  class="overflow-auto"
2937
+ role="listbox"
2938
+ [attr.aria-multiselectable]="multiselectable() || null"
2939
+ [attr.id]="panelId()"
2927
2940
  >
2928
2941
  <div
2929
2942
  *cdkVirtualFor="let option of options(); trackBy: trackByFn; let i = index"
@@ -2939,6 +2952,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
2939
2952
  <div
2940
2953
  class="overflow-auto"
2941
2954
  [style.maxHeight]="maxHeight()"
2955
+ role="listbox"
2956
+ [attr.aria-multiselectable]="multiselectable() || null"
2957
+ [attr.id]="panelId()"
2942
2958
  >
2943
2959
  @for (option of options(); track option.id; let i = $index) {
2944
2960
  <ng-container
@@ -1 +1 @@
1
- {"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 ],\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 ],\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 ],\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}) => 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 },\n defaultVariants: {\n size: 'default',\n open: 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 [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 private 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',\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 ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\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 truncate text-left\">\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 flex-wrap gap-1\">\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 [attr.id]=\"panelId()\"\n [attr.role]=\"'listbox'\"\n tabindex=\"-1\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n [attr.aria-label]=\"placeholder()\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <!-- Search input -->\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]=\"virtualScrollItemSize()\"\n [maxBufferPx]=\"400\"\n [minBufferPx]=\"200\"\n [style.height]=\"maxHeight()\"\n class=\"overflow-auto\"\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 >\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 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. */\n readonly virtualScrollItemSize: InputSignal<number> = input<number>(40);\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 /** 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 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 });\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 // 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.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 }\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 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 }\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 /** 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 [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiselectable() || null\"\n [attr.id]=\"panelId()\"\n >\n <!-- Search slot -->\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 >\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 >\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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"}
1
+ {"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 ],\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 ],\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 ],\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}) => 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 },\n defaultVariants: {\n size: 'default',\n open: 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',\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 ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\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 truncate text-left\">\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 flex-wrap gap-1\">\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]=\"virtualScrollItemSize()\"\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 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. */\n readonly virtualScrollItemSize: InputSignal<number> = input<number>(40);\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 /** 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 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 });\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 // 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.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 }\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 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 }\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 /** 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-com",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "license": "MIT",
5
5
  "description": "A modern Angular component library built with signals, Tailwind CSS, and semantic design tokens",
6
6
  "keywords": [
@@ -887,7 +887,7 @@ declare class ComDropdownSearch implements OnInit {
887
887
  /** Subject for debounced search. */
888
888
  private readonly searchSubject;
889
889
  /** Current internal search value. */
890
- private readonly internalValue;
890
+ protected readonly internalValue: WritableSignal<string>;
891
891
  /** Placeholder text for the search input. */
892
892
  readonly placeholder: InputSignal<string>;
893
893
  /** Aria label for accessibility. */