ngx-com 0.1.9 → 0.1.10
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.
|
@@ -940,7 +940,7 @@ class ComDropdownTag {
|
|
|
940
940
|
this.remove.emit(this.value());
|
|
941
941
|
}
|
|
942
942
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComDropdownTag, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
943
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComDropdownTag, isStandalone: true, selector: "com-dropdown-tag", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, displayText: { classPropertyName: "displayText", publicName: "displayText", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, tagTemplate: { classPropertyName: "tagTemplate", publicName: "tagTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { remove: "remove" }, host: { classAttribute: "com-dropdown-tag-host inline-flex" }, exportAs: ["comDropdownTag"], ngImport: i0, template: `
|
|
943
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComDropdownTag, isStandalone: true, selector: "com-dropdown-tag", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, displayText: { classPropertyName: "displayText", publicName: "displayText", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, tagTemplate: { classPropertyName: "tagTemplate", publicName: "tagTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { remove: "remove" }, host: { classAttribute: "com-dropdown-tag-host inline-flex max-w-full min-w-0" }, exportAs: ["comDropdownTag"], ngImport: i0, template: `
|
|
944
944
|
@if (tagTemplate()) {
|
|
945
945
|
<ng-container
|
|
946
946
|
[ngTemplateOutlet]="tagTemplate()!"
|
|
@@ -1019,7 +1019,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1019
1019
|
imports: [NgTemplateOutlet],
|
|
1020
1020
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1021
1021
|
host: {
|
|
1022
|
-
class: 'com-dropdown-tag-host inline-flex',
|
|
1022
|
+
class: 'com-dropdown-tag-host inline-flex max-w-full min-w-0',
|
|
1023
1023
|
},
|
|
1024
1024
|
}]
|
|
1025
1025
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], displayText: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayText", required: false }] }], index: [{ type: i0.Input, args: [{ isSignal: true, alias: "index", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], tagTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "tagTemplate", required: false }] }], remove: [{ type: i0.Output, args: ["remove"] }] } });
|
|
@@ -2287,7 +2287,7 @@ class ComDropdown {
|
|
|
2287
2287
|
(blur)="onTriggerBlur()"
|
|
2288
2288
|
>
|
|
2289
2289
|
<!-- Selected value display -->
|
|
2290
|
-
<span class="flex-1 truncate text-left">
|
|
2290
|
+
<span class="flex-1 min-w-0 truncate text-left">
|
|
2291
2291
|
@if (selectedTemplate()) {
|
|
2292
2292
|
<ng-container
|
|
2293
2293
|
[ngTemplateOutlet]="selectedTemplate()!.templateRef"
|
|
@@ -2295,7 +2295,7 @@ class ComDropdown {
|
|
|
2295
2295
|
/>
|
|
2296
2296
|
} @else if (multiple()) {
|
|
2297
2297
|
@if (selectedValues().length > 0) {
|
|
2298
|
-
<span class="flex
|
|
2298
|
+
<span class="flex items-center gap-1 min-w-0 overflow-hidden">
|
|
2299
2299
|
@for (item of visibleTags(); track trackByValue(item, $index); let i = $index) {
|
|
2300
2300
|
<com-dropdown-tag
|
|
2301
2301
|
[value]="item"
|
|
@@ -2542,7 +2542,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
2542
2542
|
(blur)="onTriggerBlur()"
|
|
2543
2543
|
>
|
|
2544
2544
|
<!-- Selected value display -->
|
|
2545
|
-
<span class="flex-1 truncate text-left">
|
|
2545
|
+
<span class="flex-1 min-w-0 truncate text-left">
|
|
2546
2546
|
@if (selectedTemplate()) {
|
|
2547
2547
|
<ng-container
|
|
2548
2548
|
[ngTemplateOutlet]="selectedTemplate()!.templateRef"
|
|
@@ -2550,7 +2550,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
2550
2550
|
/>
|
|
2551
2551
|
} @else if (multiple()) {
|
|
2552
2552
|
@if (selectedValues().length > 0) {
|
|
2553
|
-
<span class="flex
|
|
2553
|
+
<span class="flex items-center gap-1 min-w-0 overflow-hidden">
|
|
2554
2554
|
@for (item of visibleTags(); track trackByValue(item, $index); let i = $index) {
|
|
2555
2555
|
<com-dropdown-tag
|
|
2556
2556
|
[value]="item"
|
|
@@ -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 [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 afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport type {\n InputSignal,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { FormFieldControl, ErrorStateMatcher, type FormFieldAppearance } from 'ngx-com/components/form-field';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ComDropdownOption } from './dropdown-option.component';\n\nimport { ComDropdownSearch } from './dropdown-search.component';\nimport { ComDropdownTag } from './dropdown-tag.component';\nimport { ComDropdownGroup } from './dropdown-group.component';\nimport { ComDropdownOptionTpl } from './directives/dropdown-option-tpl.directive';\nimport { ComDropdownSelectedTpl } from './directives/dropdown-selected-tpl.directive';\nimport { ComDropdownEmptyTpl } from './directives/dropdown-empty-tpl.directive';\nimport { ComDropdownGroupTpl } from './directives/dropdown-group-tpl.directive';\nimport { ComDropdownTagTpl } from './directives/dropdown-tag-tpl.directive';\nimport { ComDropdownLoadingTpl } from './directives/dropdown-loading-tpl.directive';\nimport { ComSpinner } from 'ngx-com/components/spinner';\nimport { throttle } from 'ngx-com/utils';\nimport type { ThrottledFn } from 'ngx-com/utils';\nimport type { Subscription } from 'rxjs';\nimport {\n dropdownTriggerVariants,\n dropdownChevronVariants,\n dropdownClearVariants,\n dropdownOverflowBadgeVariants,\n dropdownLoadingVariants,\n} from './dropdown.variants';\nimport type {\n DropdownVariant,\n DropdownSize,\n DropdownState,\n} from './dropdown.variants';\nimport type {\n ComDropdownSelectedContext,\n ComDropdownEmptyContext,\n ComDropdownProcessedOption,\n ComDropdownGroup as DropdownGroupType,\n ComDropdownPanelWidth,\n} from './dropdown.models';\nimport {\n defaultCompareWith,\n defaultDisplayWith,\n defaultFilterWith,\n generateDropdownId,\n} from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/** Default position for the dropdown panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n // Below trigger, aligned start\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned start\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n // Below trigger, aligned end\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned end\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/** Threshold for enabling virtual scrolling. */\nconst VIRTUAL_SCROLL_THRESHOLD = 50;\n\n/**\n * Reusable dropdown/select component with full accessibility support.\n * Implements ControlValueAccessor for Reactive Forms integration.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-primary`, `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`,\n * `--color-placeholder`\n *\n * @example\n * ```html\n * <com-dropdown\n * [options]=\"users()\"\n * [compareWith]=\"compareById\"\n * formControlName=\"assignee\"\n * placeholder=\"Select user...\"\n * [searchable]=\"true\"\n * >\n * <ng-template comDropdownOption let-user let-selected=\"selected\">\n * <span>{{ user.name }}</span>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Component({\n selector: 'com-dropdown',\n exportAs: 'comDropdown',\n template: `\n <!-- Trigger button -->\n <button\n #triggerElement\n type=\"button\"\n role=\"combobox\"\n [class]=\"triggerClasses()\"\n [attr.id]=\"triggerId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-activedescendant]=\"activeDescendant()\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"effectiveState() === 'error' || null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-label]=\"hasValue() ? null : placeholder()\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <!-- Selected value display -->\n <span class=\"flex-1 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]=\"effectiveItemSize()\"\n [maxBufferPx]=\"400\"\n [minBufferPx]=\"200\"\n [style.height]=\"maxHeight()\"\n class=\"overflow-auto\"\n role=\"listbox\"\n [attr.id]=\"panelId()\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n [attr.aria-label]=\"placeholder()\"\n >\n <com-dropdown-option\n *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackByOption; let i = index\"\n [value]=\"option.value\"\n [displayText]=\"option.displayText\"\n [id]=\"option.id\"\n [index]=\"i\"\n [selected]=\"isSelected(option.value)\"\n [active]=\"isActive(option.id)\"\n [disabled]=\"option.disabled\"\n [size]=\"size()\"\n [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n (select)=\"selectOption($event)\"\n (hover)=\"onOptionHover(option.id)\"\n />\n </cdk-virtual-scroll-viewport>\n\n <!-- Loading indicator (virtual scroll) -->\n @if (loading()) {\n @if (loadingTemplate()) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate()!.templateRef\" />\n } @else {\n <div [class]=\"loadingContainerClasses()\">\n <com-spinner size=\"sm\" color=\"muted\" />\n </div>\n }\n }\n } @else {\n <!-- Standard rendering for small lists and grouped options -->\n <div\n class=\"overflow-auto\"\n [style.maxHeight]=\"maxHeight()\"\n data-scroll-container\n role=\"listbox\"\n [attr.id]=\"panelId()\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n [attr.aria-label]=\"placeholder()\"\n >\n @if (groupedOptions().length > 0) {\n @for (group of groupedOptions(); track group.key) {\n <!-- Group header -->\n <com-dropdown-group\n [label]=\"group.key\"\n [count]=\"group.options.length\"\n [expanded]=\"group.expanded\"\n [size]=\"size()\"\n [groupTemplate]=\"groupTemplate()?.templateRef ?? null\"\n />\n\n <!-- Group options -->\n @for (option of group.options; track option.id; let i = $index) {\n <com-dropdown-option\n [value]=\"option.value\"\n [displayText]=\"option.displayText\"\n [id]=\"option.id\"\n [index]=\"getGlobalIndex(group.key, i)\"\n [selected]=\"isSelected(option.value)\"\n [active]=\"isActive(option.id)\"\n [disabled]=\"option.disabled\"\n [size]=\"size()\"\n [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n (select)=\"selectOption($event)\"\n (hover)=\"onOptionHover(option.id)\"\n />\n }\n }\n } @else if (filteredOptions().length > 0) {\n @for (option of filteredOptions(); track option.id; let i = $index) {\n <com-dropdown-option\n [value]=\"option.value\"\n [displayText]=\"option.displayText\"\n [id]=\"option.id\"\n [index]=\"i\"\n [selected]=\"isSelected(option.value)\"\n [active]=\"isActive(option.id)\"\n [disabled]=\"option.disabled\"\n [size]=\"size()\"\n [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n (select)=\"selectOption($event)\"\n (hover)=\"onOptionHover(option.id)\"\n />\n }\n } @else if (!loading()) {\n <!-- Empty state (suppressed when loading) -->\n @if (emptyTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"emptyTemplate()!.templateRef\"\n [ngTemplateOutletContext]=\"emptyContext()\"\n />\n } @else {\n <div class=\"flex items-center justify-center px-3 py-6 text-muted-foreground\">\n @if (searchQuery()) {\n No results for \"{{ searchQuery() }}\"\n } @else {\n No options available\n }\n </div>\n }\n }\n\n <!-- Loading indicator (standard) -->\n @if (loading()) {\n @if (loadingTemplate()) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate()!.templateRef\" />\n } @else {\n <div [class]=\"loadingContainerClasses()\">\n <com-spinner size=\"sm\" color=\"muted\" />\n </div>\n }\n }\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Live announcer region -->\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n imports: [\n NgTemplateOutlet,\n OverlayModule,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ComDropdownOption,\n ComDropdownSearch,\n ComDropdownTag,\n ComDropdownGroup,\n ComSpinner,\n ],\n providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComDropdown) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-host inline-block',\n '[class.com-dropdown-disabled]': 'disabled()',\n '[class.com-dropdown-open]': 'isOpen()',\n },\n})\nexport class ComDropdown<T> implements ControlValueAccessor, FormFieldControl<T | T[] | null> {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n /** NgControl bound to this dropdown (if using reactive forms). */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the trigger button element. */\n private readonly triggerRef: Signal<ElementRef<HTMLButtonElement>> =\n viewChild.required<ElementRef<HTMLButtonElement>>('triggerElement');\n\n /** Reference to the panel template. */\n private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n /** Reference to the virtual scroll viewport (when enabled). */\n private readonly virtualViewport: Signal<CdkVirtualScrollViewport | undefined> =\n viewChild<CdkVirtualScrollViewport>(CdkVirtualScrollViewport);\n\n /** Content query for custom option template. */\n protected readonly optionTemplate: Signal<ComDropdownOptionTpl<T> | undefined> =\n contentChild<ComDropdownOptionTpl<T>>(ComDropdownOptionTpl);\n\n /** Content query for custom selected template. */\n protected readonly selectedTemplate: Signal<ComDropdownSelectedTpl<T> | undefined> =\n contentChild<ComDropdownSelectedTpl<T>>(ComDropdownSelectedTpl);\n\n /** Content query for custom empty template. */\n protected readonly emptyTemplate: Signal<ComDropdownEmptyTpl | undefined> =\n contentChild<ComDropdownEmptyTpl>(ComDropdownEmptyTpl);\n\n /** Content query for custom group template. */\n protected readonly groupTemplate: Signal<ComDropdownGroupTpl | undefined> =\n contentChild<ComDropdownGroupTpl>(ComDropdownGroupTpl);\n\n /** Content query for custom tag template. */\n protected readonly tagTemplate: Signal<ComDropdownTagTpl<T> | undefined> =\n contentChild<ComDropdownTagTpl<T>>(ComDropdownTagTpl);\n\n /** Content query for custom loading template. */\n protected readonly loadingTemplate: Signal<ComDropdownLoadingTpl | undefined> =\n contentChild<ComDropdownLoadingTpl>(ComDropdownLoadingTpl);\n\n /** Overlay reference. */\n private overlayRef: OverlayRef | null = null;\n\n /** Unique ID for the dropdown. */\n private readonly dropdownId = generateDropdownId();\n\n // ============ INPUTS ============\n\n /** Array of options to display. */\n readonly options: InputSignal<T[]> = input<T[]>([]);\n\n /** Current value (single or array for multiple). */\n readonly value: ModelSignal<T | T[] | null> = model<T | T[] | null>(null);\n\n /** Placeholder text when no value is selected. */\n readonly placeholder: InputSignal<string> = input<string>('Select...');\n\n /** Enable multi-select mode. */\n readonly multiple: InputSignal<boolean> = input<boolean>(false);\n\n /** Enable search/filter input. */\n readonly searchable: InputSignal<boolean> = input<boolean>(false);\n\n /** Search input placeholder. */\n readonly searchPlaceholder: InputSignal<string> = input<string>('Search...');\n\n /** Disable the dropdown. */\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n\n /** Mark as required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Show clear button. */\n readonly clearable: InputSignal<boolean> = input<boolean>(false);\n\n /** Custom equality function for comparing values. */\n readonly compareWith: InputSignal<(a: T, b: T) => boolean> = input<(a: T, b: T) => boolean>(defaultCompareWith);\n\n /** Function to get display text from a value. */\n readonly displayWith: InputSignal<(value: T) => string> = input<(value: T) => string>(defaultDisplayWith);\n\n /** Custom filter function for search. */\n readonly filterWith: InputSignal<((option: T, query: string) => boolean) | null> =\n input<((option: T, query: string) => boolean) | null>(null);\n\n /** Function to group options by a key. */\n readonly groupBy: InputSignal<((option: T) => string) | null> = input<((option: T) => string) | null>(null);\n\n /** CVA variant for trigger styling. */\n readonly variant: InputSignal<DropdownVariant> = input<DropdownVariant>('default');\n\n /** Size variant. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<DropdownState> = input<DropdownState>('default');\n\n /** Additional CSS classes for the trigger. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Maximum height of the panel. */\n readonly maxHeight: InputSignal<string> = input<string>('256px');\n\n /** Panel width strategy. */\n readonly panelWidth: InputSignal<ComDropdownPanelWidth> = input<ComDropdownPanelWidth>('trigger');\n\n /** Debounce time for search (ms). */\n readonly searchDebounceMs: InputSignal<number> = input<number>(300);\n\n /** Virtual scroll threshold. */\n readonly virtualScrollThreshold: InputSignal<number> = input<number>(VIRTUAL_SCROLL_THRESHOLD);\n\n /** Item size in pixels for virtual scrolling. When not set, auto-calculated from the size variant. */\n readonly virtualScrollItemSize: InputSignal<number | undefined> = input<number | undefined>(undefined);\n\n /** Effective item size for virtual scroll, computed from size variant when not explicitly set. */\n protected readonly effectiveItemSize: Signal<number> = computed(() => {\n const explicit = this.virtualScrollItemSize();\n if (explicit !== undefined) return explicit;\n switch (this.size()) {\n case 'sm': return 28;\n case 'lg': return 48;\n default: return 36;\n }\n });\n\n /** Maximum number of tags to display in multi-select mode. Set to null for no limit. */\n readonly maxVisibleTags: InputSignal<number | null> = input<number | null>(2);\n\n /** Custom error state matcher for determining when to show errors. */\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n /** Whether the dropdown is currently loading data. */\n readonly loading: InputSignal<boolean> = input<boolean>(false);\n\n // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n readonly touched: ModelSignal<boolean> = model<boolean>(false);\n readonly invalid: InputSignal<boolean> = input<boolean>(false);\n readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n\n // ============ OUTPUTS ============\n\n /** Emitted when search query changes. */\n readonly searchChange: OutputEmitterRef<string> = output<string>();\n\n /** Emitted when panel opens. */\n readonly opened: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when panel closes. */\n readonly closed: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when user scrolls near the bottom of the option list. */\n readonly loadMore: OutputEmitterRef<void> = output<void>();\n\n // ============ INTERNAL STATE ============\n\n /** Whether the panel is open. */\n readonly isOpen: WritableSignal<boolean> = signal(false);\n\n /** Whether the trigger button is focused. */\n private readonly _triggerFocused: WritableSignal<boolean> = signal(false);\n\n /** Current search query. */\n readonly searchQuery: WritableSignal<string> = signal('');\n\n /** Currently active (keyboard focused) option ID. */\n readonly activeOptionId: WritableSignal<string | null> = signal(null);\n\n /** Internal value state (managed by CVA or input). */\n readonly internalValue: WritableSignal<T | T[] | null> = linkedSignal<T | T[] | null>(() => this.value() ?? null);\n\n /** Live announcements for screen readers. */\n readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n /** Flag to prevent duplicate loadMore emissions per scroll-to-bottom. */\n private loadMoreEmitted = false;\n\n /** Subscription for virtual scroll elementScrolled. */\n private scrollSubscription: Subscription | null = null;\n\n /** Throttled handler for standard scroll events. */\n private throttledScrollHandler: ThrottledFn<() => void> | null = null;\n\n /** IDs for aria-describedby (set by form-field). */\n private readonly _describedByIds: WritableSignal<string> = signal('');\n\n /** Form field appearance (set by form-field). */\n private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n\n // ============ COMPUTED STATE ============\n\n /** Trigger element ID. */\n readonly triggerId: Signal<string> = computed(() => `${this.dropdownId}-trigger`);\n\n /** Panel element ID. */\n readonly panelId: Signal<string> = computed(() => `${this.dropdownId}-panel`);\n\n /** Currently active descendant ID (for ARIA). */\n readonly activeDescendant: Signal<string | null> = computed(() => {\n return this.isOpen() ? this.activeOptionId() : null;\n });\n\n /** Whether the dropdown has a value. */\n readonly hasValue: Signal<boolean> = computed(() => {\n const val = this.internalValue();\n if (this.multiple()) {\n return Array.isArray(val) && val.length > 0;\n }\n return val !== null && val !== undefined;\n });\n\n // ============ FormFieldControl SIGNALS ============\n\n /** Whether the dropdown is focused (trigger focused or panel open). Implements FormFieldControl. */\n readonly focused: Signal<boolean> = computed(() => this._triggerFocused() || this.isOpen());\n\n /** Whether the label should float. Label floats when focused or has a value. */\n readonly shouldLabelFloat: Signal<boolean> = computed(() => this.focused() || this.hasValue());\n\n /** Whether the control is in an error state. Implements FormFieldControl. */\n readonly errorState: Signal<boolean> = computed(() => {\n if (!this.ngControl) {\n // Signal Forms: gate on invalid AND touched (mirrors ErrorStateMatcher default)\n return this.invalid() && this.touched();\n }\n // Reactive Forms: use ErrorStateMatcher (existing logic)\n this.isOpen();\n this.hasValue();\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n return matcher.isErrorState(this.ngControl.control ?? null, form);\n });\n\n /** Structured validation errors from Signal Forms, exposed for the parent form field. */\n readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n !this.ngControl ? this.sfErrors() : null\n );\n\n /** Unique ID for the control. Implements FormFieldControl. */\n readonly id: Signal<string> = this.triggerId;\n\n /**\n * Effective state combining manual state with automatic error detection.\n * Manual state takes precedence over auto-detected error state.\n */\n readonly effectiveState: Signal<DropdownState> = computed(() => {\n const manualState = this.state();\n if (manualState !== 'default') return manualState;\n return this.errorState() ? 'error' : 'default';\n });\n\n /** Combined aria-describedby from form-field. */\n readonly ariaDescribedBy: Signal<string | null> = computed(() => this._describedByIds() || null);\n\n /** Selected value (single mode). */\n readonly selectedValue: Signal<T | null> = computed(() => {\n const val = this.internalValue();\n if (this.multiple() || Array.isArray(val)) {\n return null;\n }\n return val;\n });\n\n /** Selected values (multiple mode). */\n readonly selectedValues: Signal<T[]> = computed(() => {\n const val = this.internalValue();\n if (!this.multiple()) {\n return [];\n }\n return Array.isArray(val) ? val : val !== null ? [val] : [];\n });\n\n /** Tags visible in the trigger (limited by maxVisibleTags). */\n readonly visibleTags: Signal<T[]> = computed(() => {\n const all = this.selectedValues();\n const max = this.maxVisibleTags();\n if (max === null || all.length <= max) {\n return all;\n }\n return all.slice(0, max);\n });\n\n /** Count of hidden tags (for +N badge). */\n readonly hiddenTagsCount: Signal<number> = computed(() => {\n const all = this.selectedValues();\n const max = this.maxVisibleTags();\n if (max === null || all.length <= max) {\n return 0;\n }\n return all.length - max;\n });\n\n /** Processed options with display text and IDs. */\n readonly processedOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n const opts = this.options();\n const display = this.displayWith();\n return opts.map((opt, index) => ({\n value: opt,\n displayText: display(opt),\n disabled: false, // Could be extended with disabledWith input\n id: `${this.dropdownId}-option-${index}`,\n }));\n });\n\n /** Filtered options based on search query. */\n readonly filteredOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n const opts = this.processedOptions();\n const query = this.searchQuery().trim();\n\n if (!query) {\n return opts;\n }\n\n const filterFn = this.filterWith();\n const display = this.displayWith();\n\n return opts.filter((opt) => {\n if (filterFn) {\n return filterFn(opt.value, query);\n }\n return defaultFilterWith(opt.value, query, display);\n });\n });\n\n /** Grouped options (when groupBy is provided). */\n readonly groupedOptions: Signal<DropdownGroupType<ComDropdownProcessedOption<T>>[]> = computed(() => {\n const groupFn = this.groupBy();\n if (!groupFn) {\n return [];\n }\n\n const opts = this.filteredOptions();\n const groups = new Map<string, ComDropdownProcessedOption<T>[]>();\n\n for (const opt of opts) {\n const key = groupFn(opt.value);\n const existing = groups.get(key) || [];\n existing.push(opt);\n groups.set(key, existing);\n }\n\n return Array.from(groups.entries()).map(([key, options]) => ({\n key,\n options,\n expanded: true,\n }));\n });\n\n /** Whether virtual scrolling should be enabled. */\n readonly virtualScrollEnabled: Signal<boolean> = computed(() => {\n return this.filteredOptions().length > this.virtualScrollThreshold();\n });\n\n /** Context for selected template. */\n readonly selectedContext: Signal<ComDropdownSelectedContext<T>> = computed(() => ({\n $implicit: this.internalValue(),\n placeholder: this.placeholder(),\n multiple: this.multiple(),\n }));\n\n /** Context for empty template. */\n readonly emptyContext: Signal<ComDropdownEmptyContext> = computed(() => ({\n $implicit: this.searchQuery(),\n }));\n\n /** Computed trigger classes. */\n readonly triggerClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.effectiveState(),\n open: this.isOpen(),\n });\n\n // For naked variant, add padding based on form-field appearance\n let paddingClasses = '';\n if (this.variant() === 'naked') {\n paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';\n }\n\n return mergeClasses(baseClasses, paddingClasses, this.userClass());\n });\n\n /** Computed panel classes. */\n readonly panelClasses: Signal<string> = computed(() => {\n return mergeClasses(\n 'w-full z-50 h-fit overflow-hidden rounded-overlay border border-border-subtle bg-popover text-popover-foreground shadow-overlay outline-none',\n this.panelClass()\n );\n });\n\n /** Computed chevron classes. */\n readonly chevronClasses: Signal<string> = computed(() => {\n return dropdownChevronVariants({\n size: this.size(),\n open: this.isOpen(),\n });\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 this.repositionOverlay();\n }\n\n protected trackByValue(item: T, _index: number): unknown {\n return item;\n }\n\n /** Track function for virtual scroll options. */\n protected trackByOption(_index: number, option: ComDropdownProcessedOption<T>): string {\n return option.id;\n }\n\n protected getGlobalIndex(groupKey: string, localIndex: number): number {\n const groups = this.groupedOptions();\n let globalIndex = 0;\n\n for (const group of groups) {\n if (group.key === groupKey) {\n return globalIndex + localIndex;\n }\n globalIndex += group.options.length;\n }\n\n return localIndex;\n }\n\n // ============ PRIVATE METHODS ============\n\n private createOverlay(): void {\n if (this.overlayRef) {\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(hostEl)\n .withPositions(DEFAULT_POSITIONS)\n .withFlexibleDimensions(false)\n .withPush(true);\n\n const hostWidth = hostEl.getBoundingClientRect?.()?.width ?? 0;\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n ...this.getPanelWidthConfig(hostWidth),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n // Attach panel template\n const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n // Close on backdrop click\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n // Close on outside click\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n /** Re-positions the overlay after the trigger height changes (e.g. tags added/removed). */\n private repositionOverlay(): void {\n if (!this.overlayRef) return;\n // Wait for Angular to render the updated trigger before recalculating position\n afterNextRender(() => this.overlayRef?.updatePosition(), { injector: this.injector });\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n /**\n * Returns overlay width configuration based on panelWidth setting.\n * - 'trigger': min-width equals host, can grow wider\n * - 'auto': no width constraint\n * - specific value: exact width\n */\n private getPanelWidthConfig(hostWidth: number): { minWidth?: number; width?: string } {\n const config = this.panelWidth();\n if (config === 'trigger') {\n return { minWidth: hostWidth };\n }\n if (config === 'auto') {\n return {};\n }\n return { width: config };\n }\n\n private updateValue(value: T | T[] | null): void {\n this.value.set(value);\n this.onChange(value);\n\n // Announce selection\n if (value !== null && !Array.isArray(value)) {\n this.announce(`${this.displayWith()(value)} selected`);\n }\n }\n\n private toggleMultipleValue(value: T): void {\n const current = this.selectedValues();\n const compare = this.compareWith();\n const isAlreadySelected = current.some((v) => compare(v, value));\n\n let newValues: T[];\n if (isAlreadySelected) {\n newValues = current.filter((v) => !compare(v, value));\n this.announce(`${this.displayWith()(value)} deselected`);\n } else {\n newValues = [...current, value];\n this.announce(`${this.displayWith()(value)} selected`);\n }\n\n this.updateValue(newValues.length > 0 ? newValues : []);\n this.repositionOverlay();\n }\n\n private navigateOptions(direction: 1 | -1): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n if (options.length === 0) {\n return;\n }\n\n const currentId = this.activeOptionId();\n let currentIndex = options.findIndex((opt) => opt.id === currentId);\n\n if (currentIndex === -1) {\n currentIndex = direction === 1 ? -1 : options.length;\n }\n\n let nextIndex = currentIndex + direction;\n\n // Wrap around\n if (nextIndex < 0) {\n nextIndex = options.length - 1;\n } else if (nextIndex >= options.length) {\n nextIndex = 0;\n }\n\n // Skip disabled options\n const startIndex = nextIndex;\n let currentOption = options[nextIndex];\n while (currentOption?.disabled) {\n nextIndex += direction;\n if (nextIndex < 0) nextIndex = options.length - 1;\n else if (nextIndex >= options.length) nextIndex = 0;\n if (nextIndex === startIndex) return; // All disabled\n currentOption = options[nextIndex];\n }\n\n const targetOption = options[nextIndex];\n if (targetOption) {\n this.activeOptionId.set(targetOption.id);\n this.scrollActiveOptionIntoView(nextIndex, targetOption.id);\n }\n }\n\n private navigateToFirst(): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const firstEnabled = options.find((opt) => !opt.disabled);\n if (firstEnabled) {\n const index = options.indexOf(firstEnabled);\n this.activeOptionId.set(firstEnabled.id);\n this.scrollActiveOptionIntoView(index, firstEnabled.id);\n }\n }\n\n private navigateToLast(): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const lastEnabled = [...options].reverse().find((opt) => !opt.disabled);\n if (lastEnabled) {\n const index = options.indexOf(lastEnabled);\n this.activeOptionId.set(lastEnabled.id);\n this.scrollActiveOptionIntoView(index, lastEnabled.id);\n }\n }\n\n /** Scrolls the active option into view, using virtual viewport or native scroll. */\n private scrollActiveOptionIntoView(index: number, optionId: string): void {\n const viewport = this.virtualViewport();\n if (viewport) {\n viewport.scrollToIndex(index);\n } else {\n const panelEl = this.overlayRef?.overlayElement;\n const optionEl = panelEl?.querySelector(`[id=\"${optionId}\"]`) as HTMLElement | null;\n optionEl?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n private selectActiveOption(): void {\n const activeId = this.activeOptionId();\n if (!activeId) return;\n\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const option = options.find((opt) => opt.id === activeId);\n\n if (option && !option.disabled) {\n this.selectOption(option.value);\n }\n }\n\n private flattenGroupedOptions(): ComDropdownProcessedOption<T>[] {\n return this.groupedOptions().flatMap((group) => group.options);\n }\n\n private typeAhead(char: string): void {\n // Simple type-ahead: find first option starting with the character\n const options = this.filteredOptions();\n const display = this.displayWith();\n const lowerChar = char.toLowerCase();\n\n const match = options.find((opt) => !opt.disabled && display(opt.value).toLowerCase().startsWith(lowerChar));\n\n if (match) {\n this.activeOptionId.set(match.id);\n if (!this.isOpen()) {\n this.selectOption(match.value);\n }\n }\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set(message);\n this.liveAnnouncer.announce(message, 'polite');\n }\n\n /** 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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"}
|
|
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 max-w-full min-w-0',\n },\n})\nexport class ComDropdownTag<T> {\n /** The value this tag represents. */\n readonly value: InputSignal<T> = input.required<T>();\n\n /** Display text for this tag. */\n readonly displayText: InputSignal<string> = input<string>('');\n\n /** Index of this tag in the list. */\n readonly index: InputSignal<number> = input<number>(0);\n\n /** Whether the tag (and its remove button) is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Tag variant for styling. */\n readonly variant: InputSignal<'default' | 'primary'> = input<'default' | 'primary'>('primary');\n\n /** Additional CSS classes for the tag. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Custom template for rendering the tag. */\n readonly tagTemplate: InputSignal<TemplateRef<ComDropdownTagContext<T>> | null> =\n input<TemplateRef<ComDropdownTagContext<T>> | null>(null);\n\n /** Emitted when the remove button is clicked. */\n readonly remove: OutputEmitterRef<T> = output<T>();\n\n /** Computed CSS classes for the tag. */\n protected readonly tagClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownTagVariants({\n size: this.size(),\n variant: this.variant(),\n });\n return mergeClasses(baseClasses, this.userClass());\n });\n\n /** Computed CSS classes for the remove button. */\n protected readonly removeClasses: Signal<string> = computed(() => {\n return dropdownTagRemoveVariants({ size: this.size() });\n });\n\n /** Template context for custom tag templates. */\n protected readonly templateContext: Signal<ComDropdownTagContext<T>> = computed(() => ({\n $implicit: this.value(),\n index: this.index(),\n remove: () => this.emitRemove(),\n }));\n\n protected onRemove(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.emitRemove();\n }\n }\n\n private emitRemove(): void {\n this.remove.emit(this.value());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport type { Signal, InputSignal, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownGroupVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownGroupContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Group header component for categorized dropdown options.\n *\n * @example\n * ```html\n * <com-dropdown-group\n * [label]=\"'Fruits'\"\n * [count]=\"5\"\n * />\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Component({\n selector: 'com-dropdown-group',\n exportAs: 'comDropdownGroup',\n template: `\n @if (groupTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()!\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n } @else {\n <div [class]=\"groupClasses()\">\n <span>{{ label() }}</span>\n @if (showCount()) {\n <span class=\"ml-auto text-xs text-muted-foreground\">\n ({{ count() }})\n </span>\n }\n </div>\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-group-host block',\n role: 'presentation',\n },\n})\nexport class ComDropdownGroup {\n /** The group label/key. */\n readonly label: InputSignal<string> = input.required<string>();\n\n /** The number of options in this group. */\n readonly count: InputSignal<number> = input<number>(0);\n\n /** Whether the group is expanded (for collapsible groups). */\n readonly expanded: InputSignal<boolean> = input<boolean>(true);\n\n /** Whether to show the count badge. */\n readonly showCount: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Additional CSS classes for the group header. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Custom template for rendering the group header. */\n readonly groupTemplate: InputSignal<TemplateRef<ComDropdownGroupContext> | null> =\n input<TemplateRef<ComDropdownGroupContext> | null>(null);\n\n /** Computed CSS classes for the group header. */\n protected readonly groupClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownGroupVariants({ size: this.size() });\n return mergeClasses(baseClasses, this.userClass());\n });\n\n /** Template context for custom group templates. */\n protected readonly templateContext: Signal<ComDropdownGroupContext> = computed(() => ({\n $implicit: this.label(),\n expanded: this.expanded(),\n count: this.count(),\n }));\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownOptionContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom option template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\">\n * <ng-template comDropdownOption let-user let-selected=\"selected\">\n * <div class=\"flex items-center gap-2\">\n * <span>{{ user.name }}</span>\n * @if (selected) {\n * <svg class=\"h-4 w-4\"><!-- check --></svg>\n * }\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownOption]',\n})\nexport class ComDropdownOptionTpl<T> {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownOptionContext<T>> = inject<TemplateRef<ComDropdownOptionContext<T>>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard<T>(\n _dir: ComDropdownOptionTpl<T>,\n ctx: unknown\n ): ctx is ComDropdownOptionContext<T> {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownSelectedContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom selected value template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\">\n * <ng-template comDropdownSelected let-user>\n * @if (user) {\n * <div class=\"flex items-center gap-2\">\n * <img [src]=\"user.avatar\" class=\"h-5 w-5 rounded-full\" />\n * {{ user.name }}\n * </div>\n * } @else {\n * <span class=\"text-input-placeholder\">Select user...</span>\n * }\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownSelected]',\n})\nexport class ComDropdownSelectedTpl<T> {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownSelectedContext<T>> = inject<TemplateRef<ComDropdownSelectedContext<T>>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard<T>(\n _dir: ComDropdownSelectedTpl<T>,\n ctx: unknown\n ): ctx is ComDropdownSelectedContext<T> {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownEmptyContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom empty state template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [searchable]=\"true\">\n * <ng-template comDropdownEmpty let-query>\n * <div class=\"flex flex-col items-center gap-2 py-6\">\n * <svg class=\"h-8 w-8 text-muted-foreground\"><!-- search icon --></svg>\n * <span>No results for \"{{ query }}\"</span>\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownEmpty]',\n})\nexport class ComDropdownEmptyTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownEmptyContext> = inject<TemplateRef<ComDropdownEmptyContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComDropdownEmptyTpl,\n ctx: unknown\n ): ctx is ComDropdownEmptyContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownGroupContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom group header template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [groupBy]=\"groupByDepartment\">\n * <ng-template comDropdownGroup let-group let-count=\"count\">\n * <div class=\"flex items-center justify-between\">\n * <span class=\"font-semibold\">{{ group }}</span>\n * <span class=\"text-xs text-muted-foreground\">({{ count }})</span>\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownGroup]',\n})\nexport class ComDropdownGroupTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownGroupContext> = inject<TemplateRef<ComDropdownGroupContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComDropdownGroupTpl,\n ctx: unknown\n ): ctx is ComDropdownGroupContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownTagContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom tag template (multi-select mode).\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [multiple]=\"true\">\n * <ng-template comDropdownTag let-user let-remove=\"remove\">\n * <div class=\"flex items-center gap-1 rounded bg-primary-subtle px-2 py-0.5 text-primary-subtle-foreground\">\n * <img [src]=\"user.avatar\" class=\"h-4 w-4 rounded-full\" />\n * <span>{{ user.name }}</span>\n * <button type=\"button\" (click)=\"remove()\" class=\"ml-1\">\n * <svg class=\"h-3 w-3\"><!-- x icon --></svg>\n * </button>\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownTag]',\n})\nexport class ComDropdownTagTpl<T> {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownTagContext<T>> = inject<TemplateRef<ComDropdownTagContext<T>>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard<T>(\n _dir: ComDropdownTagTpl<T>,\n ctx: unknown\n ): ctx is ComDropdownTagContext<T> {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Directive to mark a template as the custom loading indicator template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [loading]=\"isLoading()\">\n * <ng-template comDropdownLoading>\n * <div class=\"flex items-center gap-2 p-3\">\n * <com-spinner size=\"xs\" color=\"primary\" />\n * <span class=\"text-sm text-muted-foreground\">Fetching more results...</span>\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownLoading]',\n})\nexport class ComDropdownLoadingTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<void> = inject<TemplateRef<void>>(TemplateRef);\n}\n","import { TemplateRef } from '@angular/core';\n\n/**\n * Context provided to the custom option template.\n * @template T The type of the option value.\n */\nexport interface ComDropdownOptionContext<T> {\n /** The option value (available as implicit $implicit). */\n $implicit: T;\n /** The index of this option in the filtered list. */\n index: number;\n /** Whether this option is currently selected. */\n selected: boolean;\n /** Whether this option is currently active (focused via keyboard). */\n active: boolean;\n /** Whether this option is disabled. */\n disabled: boolean;\n}\n\n/**\n * Context provided to the custom selected value template.\n * @template T The type of the option value.\n */\nexport interface ComDropdownSelectedContext<T> {\n /** The selected value(s) (available as implicit $implicit). */\n $implicit: T | T[] | null;\n /** The placeholder text when no value is selected. */\n placeholder: string;\n /** Whether multiple selection is enabled. */\n multiple: boolean;\n}\n\n/**\n * Context provided to the custom empty state template.\n */\nexport interface ComDropdownEmptyContext {\n /** The current search query (available as implicit $implicit). */\n $implicit: string;\n}\n\n/**\n * Context provided to the custom group header template.\n */\nexport interface ComDropdownGroupContext {\n /** The group key/label (available as implicit $implicit). */\n $implicit: string;\n /** Whether the group is expanded. */\n expanded: boolean;\n /** The number of options in this group. */\n count: number;\n}\n\n/**\n * Context provided to the custom tag template (multi-select mode).\n * @template T The type of the option value.\n */\nexport interface ComDropdownTagContext<T> {\n /** The tag value (available as implicit $implicit). */\n $implicit: T;\n /** The index of this tag. */\n index: number;\n /** Function to remove this tag. */\n remove: () => void;\n}\n\n/**\n * Represents a grouped collection of options.\n * @template T The type of the option value.\n */\nexport interface ComDropdownGroup<T> {\n /** The group key/label. */\n key: string;\n /** The options belonging to this group. */\n options: T[];\n /** Whether the group is expanded (for collapsible groups). */\n expanded: boolean;\n}\n\n/**\n * Internal representation of a processed option.\n * @template T The type of the option value.\n */\nexport interface ComDropdownProcessedOption<T> {\n /** The original option value. */\n value: T;\n /** The display text for this option. */\n displayText: string;\n /** Whether this option is disabled. */\n disabled: boolean;\n /** The group this option belongs to (if grouped). */\n group?: string;\n /** Unique identifier for tracking. */\n id: string;\n}\n\n/**\n * Configuration for dropdown positioning.\n */\nexport interface ComDropdownPosition {\n /** The origin X position. */\n originX: 'start' | 'center' | 'end';\n /** The origin Y position. */\n originY: 'top' | 'center' | 'bottom';\n /** The overlay X position. */\n overlayX: 'start' | 'center' | 'end';\n /** The overlay Y position. */\n overlayY: 'top' | 'center' | 'bottom';\n /** Offset along the X axis. */\n offsetX?: number;\n /** Offset along the Y axis. */\n offsetY?: number;\n}\n\n/**\n * Panel width configuration.\n */\nexport type ComDropdownPanelWidth = 'trigger' | 'auto' | string;\n\n/**\n * Default compare function for primitive values.\n * @param a First value.\n * @param b Second value.\n * @returns Whether the values are equal.\n */\nexport function defaultCompareWith<T>(a: T, b: T): boolean {\n return a === b;\n}\n\n/**\n * Default display function for converting values to strings.\n * @param value The value to display.\n * @returns The string representation.\n */\nexport function defaultDisplayWith<T>(value: T): string {\n if (value === null || value === undefined) {\n return '';\n }\n return String(value);\n}\n\n/**\n * Default filter function for search.\n * @param option The option to test.\n * @param query The search query.\n * @param displayWith The display function to get the searchable text.\n * @returns Whether the option matches the query.\n */\nexport function defaultFilterWith<T>(\n option: T,\n query: string,\n displayWith: (value: T) => string\n): boolean {\n const text = displayWith(option).toLowerCase();\n return text.includes(query.toLowerCase());\n}\n\n/**\n * Template directive types for content projection.\n */\nexport interface ComDropdownTemplates<T> {\n /** Custom template for rendering options. */\n optionTemplate?: TemplateRef<ComDropdownOptionContext<T>>;\n /** Custom template for rendering the selected value. */\n selectedTemplate?: TemplateRef<ComDropdownSelectedContext<T>>;\n /** Custom template for the empty state. */\n emptyTemplate?: TemplateRef<ComDropdownEmptyContext>;\n /** Custom template for group headers. */\n groupTemplate?: TemplateRef<ComDropdownGroupContext>;\n /** Custom template for tags in multi-select mode. */\n tagTemplate?: TemplateRef<ComDropdownTagContext<T>>;\n}\n\n/**\n * Unique ID counter for generating option IDs.\n */\nlet uniqueIdCounter = 0;\n\n/**\n * Generates a unique ID for dropdown options.\n * @param prefix Optional prefix for the ID.\n * @returns A unique ID string.\n */\nexport function generateDropdownId(prefix = 'com-dropdown'): string {\n return `${prefix}-${uniqueIdCounter++}`;\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport type {\n InputSignal,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { FormFieldControl, ErrorStateMatcher, type FormFieldAppearance } from 'ngx-com/components/form-field';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ComDropdownOption } from './dropdown-option.component';\n\nimport { ComDropdownSearch } from './dropdown-search.component';\nimport { ComDropdownTag } from './dropdown-tag.component';\nimport { ComDropdownGroup } from './dropdown-group.component';\nimport { ComDropdownOptionTpl } from './directives/dropdown-option-tpl.directive';\nimport { ComDropdownSelectedTpl } from './directives/dropdown-selected-tpl.directive';\nimport { ComDropdownEmptyTpl } from './directives/dropdown-empty-tpl.directive';\nimport { ComDropdownGroupTpl } from './directives/dropdown-group-tpl.directive';\nimport { ComDropdownTagTpl } from './directives/dropdown-tag-tpl.directive';\nimport { ComDropdownLoadingTpl } from './directives/dropdown-loading-tpl.directive';\nimport { ComSpinner } from 'ngx-com/components/spinner';\nimport { throttle } from 'ngx-com/utils';\nimport type { ThrottledFn } from 'ngx-com/utils';\nimport type { Subscription } from 'rxjs';\nimport {\n dropdownTriggerVariants,\n dropdownChevronVariants,\n dropdownClearVariants,\n dropdownOverflowBadgeVariants,\n dropdownLoadingVariants,\n} from './dropdown.variants';\nimport type {\n DropdownVariant,\n DropdownSize,\n DropdownState,\n} from './dropdown.variants';\nimport type {\n ComDropdownSelectedContext,\n ComDropdownEmptyContext,\n ComDropdownProcessedOption,\n ComDropdownGroup as DropdownGroupType,\n ComDropdownPanelWidth,\n} from './dropdown.models';\nimport {\n defaultCompareWith,\n defaultDisplayWith,\n defaultFilterWith,\n generateDropdownId,\n} from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/** Default position for the dropdown panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n // Below trigger, aligned start\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned start\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n // Below trigger, aligned end\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned end\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/** Threshold for enabling virtual scrolling. */\nconst VIRTUAL_SCROLL_THRESHOLD = 50;\n\n/**\n * Reusable dropdown/select component with full accessibility support.\n * Implements ControlValueAccessor for Reactive Forms integration.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-primary`, `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`,\n * `--color-placeholder`\n *\n * @example\n * ```html\n * <com-dropdown\n * [options]=\"users()\"\n * [compareWith]=\"compareById\"\n * formControlName=\"assignee\"\n * placeholder=\"Select user...\"\n * [searchable]=\"true\"\n * >\n * <ng-template comDropdownOption let-user let-selected=\"selected\">\n * <span>{{ user.name }}</span>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Component({\n selector: 'com-dropdown',\n exportAs: 'comDropdown',\n template: `\n <!-- Trigger button -->\n <button\n #triggerElement\n type=\"button\"\n role=\"combobox\"\n [class]=\"triggerClasses()\"\n [attr.id]=\"triggerId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-activedescendant]=\"activeDescendant()\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"effectiveState() === 'error' || null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-label]=\"hasValue() ? null : placeholder()\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <!-- Selected value display -->\n <span class=\"flex-1 min-w-0 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 items-center gap-1 min-w-0 overflow-hidden\">\n @for (item of visibleTags(); track trackByValue(item, $index); let i = $index) {\n <com-dropdown-tag\n [value]=\"item\"\n [displayText]=\"displayWith()(item)\"\n [index]=\"i\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [tagTemplate]=\"tagTemplate()?.templateRef ?? null\"\n (remove)=\"removeValue($event)\"\n />\n }\n @if (hiddenTagsCount() > 0) {\n <span [class]=\"overflowBadgeClasses()\">\n +{{ hiddenTagsCount() }}\n </span>\n }\n </span>\n } @else {\n <span class=\"text-placeholder\">{{ placeholder() }}</span>\n }\n } @else {\n @if (selectedValue() !== null && selectedValue() !== undefined) {\n {{ displayWith()(selectedValue()!) }}\n } @else {\n <span class=\"text-placeholder\">{{ placeholder() }}</span>\n }\n }\n </span>\n\n <!-- Clear button -->\n @if (clearable() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n [class]=\"clearClasses()\"\n [attr.aria-label]=\"'Clear selection'\"\n (click)=\"clear($event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-full w-full\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n\n <!-- Chevron icon -->\n <svg\n [class]=\"chevronClasses()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n <!-- Panel template (rendered in overlay) -->\n <ng-template #panelTemplate>\n <div\n #panelElement\n [class]=\"panelClasses()\"\n tabindex=\"-1\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <!-- Search input (outside listbox for valid ARIA structure) -->\n @if (searchable()) {\n <com-dropdown-search\n [placeholder]=\"searchPlaceholder()\"\n [size]=\"size()\"\n [debounceMs]=\"searchDebounceMs()\"\n (searchChange)=\"onSearchChange($event)\"\n (keyNav)=\"onSearchKeyNav($event)\"\n />\n }\n\n <!-- Options list -->\n @if (virtualScrollEnabled() && groupedOptions().length === 0 && filteredOptions().length > 0) {\n <!-- Virtual scrolling for large ungrouped lists -->\n <cdk-virtual-scroll-viewport\n [itemSize]=\"effectiveItemSize()\"\n [maxBufferPx]=\"400\"\n [minBufferPx]=\"200\"\n [style.height]=\"maxHeight()\"\n class=\"overflow-auto\"\n role=\"listbox\"\n [attr.id]=\"panelId()\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n [attr.aria-label]=\"placeholder()\"\n >\n <com-dropdown-option\n *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackByOption; let i = index\"\n [value]=\"option.value\"\n [displayText]=\"option.displayText\"\n [id]=\"option.id\"\n [index]=\"i\"\n [selected]=\"isSelected(option.value)\"\n [active]=\"isActive(option.id)\"\n [disabled]=\"option.disabled\"\n [size]=\"size()\"\n [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n (select)=\"selectOption($event)\"\n (hover)=\"onOptionHover(option.id)\"\n />\n </cdk-virtual-scroll-viewport>\n\n <!-- Loading indicator (virtual scroll) -->\n @if (loading()) {\n @if (loadingTemplate()) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate()!.templateRef\" />\n } @else {\n <div [class]=\"loadingContainerClasses()\">\n <com-spinner size=\"sm\" color=\"muted\" />\n </div>\n }\n }\n } @else {\n <!-- Standard rendering for small lists and grouped options -->\n <div\n class=\"overflow-auto\"\n [style.maxHeight]=\"maxHeight()\"\n data-scroll-container\n role=\"listbox\"\n [attr.id]=\"panelId()\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n [attr.aria-label]=\"placeholder()\"\n >\n @if (groupedOptions().length > 0) {\n @for (group of groupedOptions(); track group.key) {\n <!-- Group header -->\n <com-dropdown-group\n [label]=\"group.key\"\n [count]=\"group.options.length\"\n [expanded]=\"group.expanded\"\n [size]=\"size()\"\n [groupTemplate]=\"groupTemplate()?.templateRef ?? null\"\n />\n\n <!-- Group options -->\n @for (option of group.options; track option.id; let i = $index) {\n <com-dropdown-option\n [value]=\"option.value\"\n [displayText]=\"option.displayText\"\n [id]=\"option.id\"\n [index]=\"getGlobalIndex(group.key, i)\"\n [selected]=\"isSelected(option.value)\"\n [active]=\"isActive(option.id)\"\n [disabled]=\"option.disabled\"\n [size]=\"size()\"\n [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n (select)=\"selectOption($event)\"\n (hover)=\"onOptionHover(option.id)\"\n />\n }\n }\n } @else if (filteredOptions().length > 0) {\n @for (option of filteredOptions(); track option.id; let i = $index) {\n <com-dropdown-option\n [value]=\"option.value\"\n [displayText]=\"option.displayText\"\n [id]=\"option.id\"\n [index]=\"i\"\n [selected]=\"isSelected(option.value)\"\n [active]=\"isActive(option.id)\"\n [disabled]=\"option.disabled\"\n [size]=\"size()\"\n [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n (select)=\"selectOption($event)\"\n (hover)=\"onOptionHover(option.id)\"\n />\n }\n } @else if (!loading()) {\n <!-- Empty state (suppressed when loading) -->\n @if (emptyTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"emptyTemplate()!.templateRef\"\n [ngTemplateOutletContext]=\"emptyContext()\"\n />\n } @else {\n <div class=\"flex items-center justify-center px-3 py-6 text-muted-foreground\">\n @if (searchQuery()) {\n No results for \"{{ searchQuery() }}\"\n } @else {\n No options available\n }\n </div>\n }\n }\n\n <!-- Loading indicator (standard) -->\n @if (loading()) {\n @if (loadingTemplate()) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate()!.templateRef\" />\n } @else {\n <div [class]=\"loadingContainerClasses()\">\n <com-spinner size=\"sm\" color=\"muted\" />\n </div>\n }\n }\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Live announcer region -->\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ liveAnnouncement() }}\n </div>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n imports: [\n NgTemplateOutlet,\n OverlayModule,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ComDropdownOption,\n ComDropdownSearch,\n ComDropdownTag,\n ComDropdownGroup,\n ComSpinner,\n ],\n providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComDropdown) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-host inline-block',\n '[class.com-dropdown-disabled]': 'disabled()',\n '[class.com-dropdown-open]': 'isOpen()',\n },\n})\nexport class ComDropdown<T> implements ControlValueAccessor, FormFieldControl<T | T[] | null> {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n /** NgControl bound to this dropdown (if using reactive forms). */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the trigger button element. */\n private readonly triggerRef: Signal<ElementRef<HTMLButtonElement>> =\n viewChild.required<ElementRef<HTMLButtonElement>>('triggerElement');\n\n /** Reference to the panel template. */\n private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n /** Reference to the virtual scroll viewport (when enabled). */\n private readonly virtualViewport: Signal<CdkVirtualScrollViewport | undefined> =\n viewChild<CdkVirtualScrollViewport>(CdkVirtualScrollViewport);\n\n /** Content query for custom option template. */\n protected readonly optionTemplate: Signal<ComDropdownOptionTpl<T> | undefined> =\n contentChild<ComDropdownOptionTpl<T>>(ComDropdownOptionTpl);\n\n /** Content query for custom selected template. */\n protected readonly selectedTemplate: Signal<ComDropdownSelectedTpl<T> | undefined> =\n contentChild<ComDropdownSelectedTpl<T>>(ComDropdownSelectedTpl);\n\n /** Content query for custom empty template. */\n protected readonly emptyTemplate: Signal<ComDropdownEmptyTpl | undefined> =\n contentChild<ComDropdownEmptyTpl>(ComDropdownEmptyTpl);\n\n /** Content query for custom group template. */\n protected readonly groupTemplate: Signal<ComDropdownGroupTpl | undefined> =\n contentChild<ComDropdownGroupTpl>(ComDropdownGroupTpl);\n\n /** Content query for custom tag template. */\n protected readonly tagTemplate: Signal<ComDropdownTagTpl<T> | undefined> =\n contentChild<ComDropdownTagTpl<T>>(ComDropdownTagTpl);\n\n /** Content query for custom loading template. */\n protected readonly loadingTemplate: Signal<ComDropdownLoadingTpl | undefined> =\n contentChild<ComDropdownLoadingTpl>(ComDropdownLoadingTpl);\n\n /** Overlay reference. */\n private overlayRef: OverlayRef | null = null;\n\n /** Unique ID for the dropdown. */\n private readonly dropdownId = generateDropdownId();\n\n // ============ INPUTS ============\n\n /** Array of options to display. */\n readonly options: InputSignal<T[]> = input<T[]>([]);\n\n /** Current value (single or array for multiple). */\n readonly value: ModelSignal<T | T[] | null> = model<T | T[] | null>(null);\n\n /** Placeholder text when no value is selected. */\n readonly placeholder: InputSignal<string> = input<string>('Select...');\n\n /** Enable multi-select mode. */\n readonly multiple: InputSignal<boolean> = input<boolean>(false);\n\n /** Enable search/filter input. */\n readonly searchable: InputSignal<boolean> = input<boolean>(false);\n\n /** Search input placeholder. */\n readonly searchPlaceholder: InputSignal<string> = input<string>('Search...');\n\n /** Disable the dropdown. */\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n\n /** Mark as required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Show clear button. */\n readonly clearable: InputSignal<boolean> = input<boolean>(false);\n\n /** Custom equality function for comparing values. */\n readonly compareWith: InputSignal<(a: T, b: T) => boolean> = input<(a: T, b: T) => boolean>(defaultCompareWith);\n\n /** Function to get display text from a value. */\n readonly displayWith: InputSignal<(value: T) => string> = input<(value: T) => string>(defaultDisplayWith);\n\n /** Custom filter function for search. */\n readonly filterWith: InputSignal<((option: T, query: string) => boolean) | null> =\n input<((option: T, query: string) => boolean) | null>(null);\n\n /** Function to group options by a key. */\n readonly groupBy: InputSignal<((option: T) => string) | null> = input<((option: T) => string) | null>(null);\n\n /** CVA variant for trigger styling. */\n readonly variant: InputSignal<DropdownVariant> = input<DropdownVariant>('default');\n\n /** Size variant. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<DropdownState> = input<DropdownState>('default');\n\n /** Additional CSS classes for the trigger. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Maximum height of the panel. */\n readonly maxHeight: InputSignal<string> = input<string>('256px');\n\n /** Panel width strategy. */\n readonly panelWidth: InputSignal<ComDropdownPanelWidth> = input<ComDropdownPanelWidth>('trigger');\n\n /** Debounce time for search (ms). */\n readonly searchDebounceMs: InputSignal<number> = input<number>(300);\n\n /** Virtual scroll threshold. */\n readonly virtualScrollThreshold: InputSignal<number> = input<number>(VIRTUAL_SCROLL_THRESHOLD);\n\n /** Item size in pixels for virtual scrolling. When not set, auto-calculated from the size variant. */\n readonly virtualScrollItemSize: InputSignal<number | undefined> = input<number | undefined>(undefined);\n\n /** Effective item size for virtual scroll, computed from size variant when not explicitly set. */\n protected readonly effectiveItemSize: Signal<number> = computed(() => {\n const explicit = this.virtualScrollItemSize();\n if (explicit !== undefined) return explicit;\n switch (this.size()) {\n case 'sm': return 28;\n case 'lg': return 48;\n default: return 36;\n }\n });\n\n /** Maximum number of tags to display in multi-select mode. Set to null for no limit. */\n readonly maxVisibleTags: InputSignal<number | null> = input<number | null>(2);\n\n /** Custom error state matcher for determining when to show errors. */\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n /** Whether the dropdown is currently loading data. */\n readonly loading: InputSignal<boolean> = input<boolean>(false);\n\n // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n readonly touched: ModelSignal<boolean> = model<boolean>(false);\n readonly invalid: InputSignal<boolean> = input<boolean>(false);\n readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n\n // ============ OUTPUTS ============\n\n /** Emitted when search query changes. */\n readonly searchChange: OutputEmitterRef<string> = output<string>();\n\n /** Emitted when panel opens. */\n readonly opened: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when panel closes. */\n readonly closed: OutputEmitterRef<void> = output<void>();\n\n /** Emitted when user scrolls near the bottom of the option list. */\n readonly loadMore: OutputEmitterRef<void> = output<void>();\n\n // ============ INTERNAL STATE ============\n\n /** Whether the panel is open. */\n readonly isOpen: WritableSignal<boolean> = signal(false);\n\n /** Whether the trigger button is focused. */\n private readonly _triggerFocused: WritableSignal<boolean> = signal(false);\n\n /** Current search query. */\n readonly searchQuery: WritableSignal<string> = signal('');\n\n /** Currently active (keyboard focused) option ID. */\n readonly activeOptionId: WritableSignal<string | null> = signal(null);\n\n /** Internal value state (managed by CVA or input). */\n readonly internalValue: WritableSignal<T | T[] | null> = linkedSignal<T | T[] | null>(() => this.value() ?? null);\n\n /** Live announcements for screen readers. */\n readonly liveAnnouncement: WritableSignal<string> = signal('');\n\n /** Flag to prevent duplicate loadMore emissions per scroll-to-bottom. */\n private loadMoreEmitted = false;\n\n /** Subscription for virtual scroll elementScrolled. */\n private scrollSubscription: Subscription | null = null;\n\n /** Throttled handler for standard scroll events. */\n private throttledScrollHandler: ThrottledFn<() => void> | null = null;\n\n /** IDs for aria-describedby (set by form-field). */\n private readonly _describedByIds: WritableSignal<string> = signal('');\n\n /** Form field appearance (set by form-field). */\n private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n\n // ============ COMPUTED STATE ============\n\n /** Trigger element ID. */\n readonly triggerId: Signal<string> = computed(() => `${this.dropdownId}-trigger`);\n\n /** Panel element ID. */\n readonly panelId: Signal<string> = computed(() => `${this.dropdownId}-panel`);\n\n /** Currently active descendant ID (for ARIA). */\n readonly activeDescendant: Signal<string | null> = computed(() => {\n return this.isOpen() ? this.activeOptionId() : null;\n });\n\n /** Whether the dropdown has a value. */\n readonly hasValue: Signal<boolean> = computed(() => {\n const val = this.internalValue();\n if (this.multiple()) {\n return Array.isArray(val) && val.length > 0;\n }\n return val !== null && val !== undefined;\n });\n\n // ============ FormFieldControl SIGNALS ============\n\n /** Whether the dropdown is focused (trigger focused or panel open). Implements FormFieldControl. */\n readonly focused: Signal<boolean> = computed(() => this._triggerFocused() || this.isOpen());\n\n /** Whether the label should float. Label floats when focused or has a value. */\n readonly shouldLabelFloat: Signal<boolean> = computed(() => this.focused() || this.hasValue());\n\n /** Whether the control is in an error state. Implements FormFieldControl. */\n readonly errorState: Signal<boolean> = computed(() => {\n if (!this.ngControl) {\n // Signal Forms: gate on invalid AND touched (mirrors ErrorStateMatcher default)\n return this.invalid() && this.touched();\n }\n // Reactive Forms: use ErrorStateMatcher (existing logic)\n this.isOpen();\n this.hasValue();\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n return matcher.isErrorState(this.ngControl.control ?? null, form);\n });\n\n /** Structured validation errors from Signal Forms, exposed for the parent form field. */\n readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n !this.ngControl ? this.sfErrors() : null\n );\n\n /** Unique ID for the control. Implements FormFieldControl. */\n readonly id: Signal<string> = this.triggerId;\n\n /**\n * Effective state combining manual state with automatic error detection.\n * Manual state takes precedence over auto-detected error state.\n */\n readonly effectiveState: Signal<DropdownState> = computed(() => {\n const manualState = this.state();\n if (manualState !== 'default') return manualState;\n return this.errorState() ? 'error' : 'default';\n });\n\n /** Combined aria-describedby from form-field. */\n readonly ariaDescribedBy: Signal<string | null> = computed(() => this._describedByIds() || null);\n\n /** Selected value (single mode). */\n readonly selectedValue: Signal<T | null> = computed(() => {\n const val = this.internalValue();\n if (this.multiple() || Array.isArray(val)) {\n return null;\n }\n return val;\n });\n\n /** Selected values (multiple mode). */\n readonly selectedValues: Signal<T[]> = computed(() => {\n const val = this.internalValue();\n if (!this.multiple()) {\n return [];\n }\n return Array.isArray(val) ? val : val !== null ? [val] : [];\n });\n\n /** Tags visible in the trigger (limited by maxVisibleTags). */\n readonly visibleTags: Signal<T[]> = computed(() => {\n const all = this.selectedValues();\n const max = this.maxVisibleTags();\n if (max === null || all.length <= max) {\n return all;\n }\n return all.slice(0, max);\n });\n\n /** Count of hidden tags (for +N badge). */\n readonly hiddenTagsCount: Signal<number> = computed(() => {\n const all = this.selectedValues();\n const max = this.maxVisibleTags();\n if (max === null || all.length <= max) {\n return 0;\n }\n return all.length - max;\n });\n\n /** Processed options with display text and IDs. */\n readonly processedOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n const opts = this.options();\n const display = this.displayWith();\n return opts.map((opt, index) => ({\n value: opt,\n displayText: display(opt),\n disabled: false, // Could be extended with disabledWith input\n id: `${this.dropdownId}-option-${index}`,\n }));\n });\n\n /** Filtered options based on search query. */\n readonly filteredOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n const opts = this.processedOptions();\n const query = this.searchQuery().trim();\n\n if (!query) {\n return opts;\n }\n\n const filterFn = this.filterWith();\n const display = this.displayWith();\n\n return opts.filter((opt) => {\n if (filterFn) {\n return filterFn(opt.value, query);\n }\n return defaultFilterWith(opt.value, query, display);\n });\n });\n\n /** Grouped options (when groupBy is provided). */\n readonly groupedOptions: Signal<DropdownGroupType<ComDropdownProcessedOption<T>>[]> = computed(() => {\n const groupFn = this.groupBy();\n if (!groupFn) {\n return [];\n }\n\n const opts = this.filteredOptions();\n const groups = new Map<string, ComDropdownProcessedOption<T>[]>();\n\n for (const opt of opts) {\n const key = groupFn(opt.value);\n const existing = groups.get(key) || [];\n existing.push(opt);\n groups.set(key, existing);\n }\n\n return Array.from(groups.entries()).map(([key, options]) => ({\n key,\n options,\n expanded: true,\n }));\n });\n\n /** Whether virtual scrolling should be enabled. */\n readonly virtualScrollEnabled: Signal<boolean> = computed(() => {\n return this.filteredOptions().length > this.virtualScrollThreshold();\n });\n\n /** Context for selected template. */\n readonly selectedContext: Signal<ComDropdownSelectedContext<T>> = computed(() => ({\n $implicit: this.internalValue(),\n placeholder: this.placeholder(),\n multiple: this.multiple(),\n }));\n\n /** Context for empty template. */\n readonly emptyContext: Signal<ComDropdownEmptyContext> = computed(() => ({\n $implicit: this.searchQuery(),\n }));\n\n /** Computed trigger classes. */\n readonly triggerClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.effectiveState(),\n open: this.isOpen(),\n });\n\n // For naked variant, add padding based on form-field appearance\n let paddingClasses = '';\n if (this.variant() === 'naked') {\n paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';\n }\n\n return mergeClasses(baseClasses, paddingClasses, this.userClass());\n });\n\n /** Computed panel classes. */\n readonly panelClasses: Signal<string> = computed(() => {\n return mergeClasses(\n 'w-full z-50 h-fit overflow-hidden rounded-overlay border border-border-subtle bg-popover text-popover-foreground shadow-overlay outline-none',\n this.panelClass()\n );\n });\n\n /** Computed chevron classes. */\n readonly chevronClasses: Signal<string> = computed(() => {\n return dropdownChevronVariants({\n size: this.size(),\n open: this.isOpen(),\n });\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 this.repositionOverlay();\n }\n\n protected trackByValue(item: T, _index: number): unknown {\n return item;\n }\n\n /** Track function for virtual scroll options. */\n protected trackByOption(_index: number, option: ComDropdownProcessedOption<T>): string {\n return option.id;\n }\n\n protected getGlobalIndex(groupKey: string, localIndex: number): number {\n const groups = this.groupedOptions();\n let globalIndex = 0;\n\n for (const group of groups) {\n if (group.key === groupKey) {\n return globalIndex + localIndex;\n }\n globalIndex += group.options.length;\n }\n\n return localIndex;\n }\n\n // ============ PRIVATE METHODS ============\n\n private createOverlay(): void {\n if (this.overlayRef) {\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(hostEl)\n .withPositions(DEFAULT_POSITIONS)\n .withFlexibleDimensions(false)\n .withPush(true);\n\n const hostWidth = hostEl.getBoundingClientRect?.()?.width ?? 0;\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n ...this.getPanelWidthConfig(hostWidth),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n // Attach panel template\n const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n // Close on backdrop click\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n // Close on outside click\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n /** Re-positions the overlay after the trigger height changes (e.g. tags added/removed). */\n private repositionOverlay(): void {\n if (!this.overlayRef) return;\n // Wait for Angular to render the updated trigger before recalculating position\n afterNextRender(() => this.overlayRef?.updatePosition(), { injector: this.injector });\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n /**\n * Returns overlay width configuration based on panelWidth setting.\n * - 'trigger': min-width equals host, can grow wider\n * - 'auto': no width constraint\n * - specific value: exact width\n */\n private getPanelWidthConfig(hostWidth: number): { minWidth?: number; width?: string } {\n const config = this.panelWidth();\n if (config === 'trigger') {\n return { minWidth: hostWidth };\n }\n if (config === 'auto') {\n return {};\n }\n return { width: config };\n }\n\n private updateValue(value: T | T[] | null): void {\n this.value.set(value);\n this.onChange(value);\n\n // Announce selection\n if (value !== null && !Array.isArray(value)) {\n this.announce(`${this.displayWith()(value)} selected`);\n }\n }\n\n private toggleMultipleValue(value: T): void {\n const current = this.selectedValues();\n const compare = this.compareWith();\n const isAlreadySelected = current.some((v) => compare(v, value));\n\n let newValues: T[];\n if (isAlreadySelected) {\n newValues = current.filter((v) => !compare(v, value));\n this.announce(`${this.displayWith()(value)} deselected`);\n } else {\n newValues = [...current, value];\n this.announce(`${this.displayWith()(value)} selected`);\n }\n\n this.updateValue(newValues.length > 0 ? newValues : []);\n this.repositionOverlay();\n }\n\n private navigateOptions(direction: 1 | -1): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n if (options.length === 0) {\n return;\n }\n\n const currentId = this.activeOptionId();\n let currentIndex = options.findIndex((opt) => opt.id === currentId);\n\n if (currentIndex === -1) {\n currentIndex = direction === 1 ? -1 : options.length;\n }\n\n let nextIndex = currentIndex + direction;\n\n // Wrap around\n if (nextIndex < 0) {\n nextIndex = options.length - 1;\n } else if (nextIndex >= options.length) {\n nextIndex = 0;\n }\n\n // Skip disabled options\n const startIndex = nextIndex;\n let currentOption = options[nextIndex];\n while (currentOption?.disabled) {\n nextIndex += direction;\n if (nextIndex < 0) nextIndex = options.length - 1;\n else if (nextIndex >= options.length) nextIndex = 0;\n if (nextIndex === startIndex) return; // All disabled\n currentOption = options[nextIndex];\n }\n\n const targetOption = options[nextIndex];\n if (targetOption) {\n this.activeOptionId.set(targetOption.id);\n this.scrollActiveOptionIntoView(nextIndex, targetOption.id);\n }\n }\n\n private navigateToFirst(): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const firstEnabled = options.find((opt) => !opt.disabled);\n if (firstEnabled) {\n const index = options.indexOf(firstEnabled);\n this.activeOptionId.set(firstEnabled.id);\n this.scrollActiveOptionIntoView(index, firstEnabled.id);\n }\n }\n\n private navigateToLast(): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const lastEnabled = [...options].reverse().find((opt) => !opt.disabled);\n if (lastEnabled) {\n const index = options.indexOf(lastEnabled);\n this.activeOptionId.set(lastEnabled.id);\n this.scrollActiveOptionIntoView(index, lastEnabled.id);\n }\n }\n\n /** Scrolls the active option into view, using virtual viewport or native scroll. */\n private scrollActiveOptionIntoView(index: number, optionId: string): void {\n const viewport = this.virtualViewport();\n if (viewport) {\n viewport.scrollToIndex(index);\n } else {\n const panelEl = this.overlayRef?.overlayElement;\n const optionEl = panelEl?.querySelector(`[id=\"${optionId}\"]`) as HTMLElement | null;\n optionEl?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n private selectActiveOption(): void {\n const activeId = this.activeOptionId();\n if (!activeId) return;\n\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const option = options.find((opt) => opt.id === activeId);\n\n if (option && !option.disabled) {\n this.selectOption(option.value);\n }\n }\n\n private flattenGroupedOptions(): ComDropdownProcessedOption<T>[] {\n return this.groupedOptions().flatMap((group) => group.options);\n }\n\n private typeAhead(char: string): void {\n // Simple type-ahead: find first option starting with the character\n const options = this.filteredOptions();\n const display = this.displayWith();\n const lowerChar = char.toLowerCase();\n\n const match = options.find((opt) => !opt.disabled && display(opt.value).toLowerCase().startsWith(lowerChar));\n\n if (match) {\n this.activeOptionId.set(match.id);\n if (!this.isOpen()) {\n this.selectOption(match.value);\n }\n }\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set(message);\n this.liveAnnouncer.announce(message, 'polite');\n }\n\n /** 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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"}
|