ngx-com 0.0.21 → 0.1.0

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.
Files changed (114) hide show
  1. package/README.md +137 -33
  2. package/fesm2022/ngx-com-components-alert.mjs +21 -11
  3. package/fesm2022/ngx-com-components-alert.mjs.map +1 -1
  4. package/fesm2022/ngx-com-components-avatar.mjs +9 -7
  5. package/fesm2022/ngx-com-components-avatar.mjs.map +1 -1
  6. package/fesm2022/ngx-com-components-button.mjs +1 -1
  7. package/fesm2022/ngx-com-components-button.mjs.map +1 -1
  8. package/fesm2022/ngx-com-components-calendar.mjs +27 -3112
  9. package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
  10. package/fesm2022/ngx-com-components-card.mjs +8 -8
  11. package/fesm2022/ngx-com-components-card.mjs.map +1 -1
  12. package/fesm2022/ngx-com-components-carousel.mjs +16 -4
  13. package/fesm2022/ngx-com-components-carousel.mjs.map +1 -1
  14. package/fesm2022/ngx-com-components-checkbox.mjs +1 -1
  15. package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
  16. package/fesm2022/ngx-com-components-code-block.mjs +9 -9
  17. package/fesm2022/ngx-com-components-code-block.mjs.map +1 -1
  18. package/fesm2022/ngx-com-components-collapsible.mjs +15 -13
  19. package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
  20. package/fesm2022/ngx-com-components-confirm.mjs +4 -4
  21. package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
  22. package/fesm2022/ngx-com-components-datepicker.mjs +2334 -0
  23. package/fesm2022/ngx-com-components-datepicker.mjs.map +1 -0
  24. package/fesm2022/ngx-com-components-dialog.mjs +47 -45
  25. package/fesm2022/ngx-com-components-dialog.mjs.map +1 -1
  26. package/fesm2022/ngx-com-components-dropdown.mjs +446 -340
  27. package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
  28. package/fesm2022/ngx-com-components-empty-state.mjs +5 -3
  29. package/fesm2022/ngx-com-components-empty-state.mjs.map +1 -1
  30. package/fesm2022/ngx-com-components-form-field.mjs +11 -6
  31. package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
  32. package/fesm2022/ngx-com-components-icon-lucide.mjs +41 -0
  33. package/fesm2022/ngx-com-components-icon-lucide.mjs.map +1 -0
  34. package/fesm2022/ngx-com-components-icon.mjs +89 -61
  35. package/fesm2022/ngx-com-components-icon.mjs.map +1 -1
  36. package/fesm2022/ngx-com-components-item.mjs +14 -4
  37. package/fesm2022/ngx-com-components-item.mjs.map +1 -1
  38. package/fesm2022/ngx-com-components-menu.mjs +61 -69
  39. package/fesm2022/ngx-com-components-menu.mjs.map +1 -1
  40. package/fesm2022/ngx-com-components-native-control.mjs +170 -0
  41. package/fesm2022/ngx-com-components-native-control.mjs.map +1 -0
  42. package/fesm2022/ngx-com-components-paginator.mjs +11 -3
  43. package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
  44. package/fesm2022/ngx-com-components-popover.mjs +58 -33
  45. package/fesm2022/ngx-com-components-popover.mjs.map +1 -1
  46. package/fesm2022/ngx-com-components-radio.mjs +4 -4
  47. package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
  48. package/fesm2022/ngx-com-components-segmented-control.mjs +6 -4
  49. package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
  50. package/fesm2022/ngx-com-components-sort.mjs +63 -57
  51. package/fesm2022/ngx-com-components-sort.mjs.map +1 -1
  52. package/fesm2022/ngx-com-components-spinner.mjs +6 -6
  53. package/fesm2022/ngx-com-components-spinner.mjs.map +1 -1
  54. package/fesm2022/ngx-com-components-switch.mjs +18 -9
  55. package/fesm2022/ngx-com-components-switch.mjs.map +1 -1
  56. package/fesm2022/ngx-com-components-table.mjs +23 -9
  57. package/fesm2022/ngx-com-components-table.mjs.map +1 -1
  58. package/fesm2022/ngx-com-components-tabs.mjs +81 -58
  59. package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
  60. package/fesm2022/ngx-com-components-timepicker.mjs +1048 -0
  61. package/fesm2022/ngx-com-components-timepicker.mjs.map +1 -0
  62. package/fesm2022/ngx-com-components-toast.mjs +18 -14
  63. package/fesm2022/ngx-com-components-toast.mjs.map +1 -1
  64. package/fesm2022/ngx-com-components-tooltip.mjs +5 -5
  65. package/fesm2022/ngx-com-components-tooltip.mjs.map +1 -1
  66. package/fesm2022/ngx-com-components.mjs +0 -13
  67. package/fesm2022/ngx-com-components.mjs.map +1 -1
  68. package/fesm2022/ngx-com-tokens.mjs +0 -8
  69. package/fesm2022/ngx-com-tokens.mjs.map +1 -1
  70. package/fesm2022/ngx-com-utils.mjs +13 -1
  71. package/fesm2022/ngx-com-utils.mjs.map +1 -1
  72. package/fesm2022/ngx-com.mjs +1 -1
  73. package/fesm2022/ngx-com.mjs.map +1 -1
  74. package/package.json +51 -8
  75. package/styles/animations.css +38 -0
  76. package/styles/candy.css +121 -0
  77. package/styles/dark.css +159 -0
  78. package/styles/forest.css +117 -0
  79. package/styles/ocean.css +117 -0
  80. package/styles/themes.css +7 -0
  81. package/styles/tokens.css +277 -0
  82. package/styles/utilities.css +16 -0
  83. package/types/ngx-com-components-alert.d.ts +14 -4
  84. package/types/ngx-com-components-avatar.d.ts +2 -0
  85. package/types/ngx-com-components-calendar.d.ts +3 -747
  86. package/types/ngx-com-components-card.d.ts +2 -2
  87. package/types/ngx-com-components-carousel.d.ts +11 -1
  88. package/types/ngx-com-components-code-block.d.ts +4 -4
  89. package/types/ngx-com-components-collapsible.d.ts +10 -2
  90. package/types/ngx-com-components-confirm.d.ts +2 -2
  91. package/types/ngx-com-components-datepicker.d.ts +623 -0
  92. package/types/ngx-com-components-dialog.d.ts +5 -2
  93. package/types/ngx-com-components-dropdown.d.ts +22 -4
  94. package/types/ngx-com-components-empty-state.d.ts +2 -0
  95. package/types/ngx-com-components-form-field.d.ts +4 -1
  96. package/types/ngx-com-components-icon-lucide.d.ts +32 -0
  97. package/types/ngx-com-components-icon.d.ts +49 -35
  98. package/types/ngx-com-components-item.d.ts +12 -2
  99. package/types/ngx-com-components-menu.d.ts +38 -38
  100. package/types/ngx-com-components-native-control.d.ts +99 -0
  101. package/types/ngx-com-components-paginator.d.ts +2 -0
  102. package/types/ngx-com-components-popover.d.ts +19 -12
  103. package/types/ngx-com-components-segmented-control.d.ts +3 -1
  104. package/types/ngx-com-components-sort.d.ts +13 -10
  105. package/types/ngx-com-components-switch.d.ts +7 -2
  106. package/types/ngx-com-components-table.d.ts +16 -2
  107. package/types/ngx-com-components-tabs.d.ts +46 -34
  108. package/types/ngx-com-components-timepicker.d.ts +273 -0
  109. package/types/ngx-com-components-toast.d.ts +4 -2
  110. package/types/ngx-com-components-tooltip.d.ts +1 -1
  111. package/types/ngx-com-components.d.ts +6 -7
  112. package/types/ngx-com-tokens.d.ts +5 -3
  113. package/types/ngx-com-utils.d.ts +11 -1
  114. package/types/ngx-com.d.ts +1 -1
@@ -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-panel.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/dropdown.models.ts","../../../projects/com/components/dropdown/dropdown.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-150',\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`, `--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-lg',\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-100',\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-100',\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-200',\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","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 (click)=\"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 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: MouseEvent): 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 input,\n output,\n viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef, ElementRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport { dropdownPanelVariants, dropdownEmptyVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownEmptyContext, ComDropdownProcessedOption } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * The overlay panel containing the dropdown options.\n * Supports virtual scrolling for large lists.\n *\n * @example\n * ```html\n * <com-dropdown-panel\n * [options]=\"filteredOptions()\"\n * [maxHeight]=\"'300px'\"\n * [virtualScrollEnabled]=\"true\"\n * >\n * <ng-content />\n * </com-dropdown-panel>\n * ```\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-muted-foreground`, `--radius-overlay`\n */\n@Component({\n selector: 'com-dropdown-panel',\n exportAs: 'comDropdownPanel',\n template: `\n <div\n #panelElement\n [class]=\"panelClasses()\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiselectable() || null\"\n [attr.id]=\"panelId()\"\n >\n <!-- Search slot -->\n <ng-content select=\"[comDropdownSearch]\" />\n\n <!-- Options container -->\n @if (virtualScrollEnabled()) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"itemSize()\"\n [maxBufferPx]=\"400\"\n [minBufferPx]=\"200\"\n [style.height]=\"maxHeight()\"\n class=\"overflow-auto\"\n >\n <div\n *cdkVirtualFor=\"let option of options(); trackBy: trackByFn; let i = index\"\n [attr.data-index]=\"i\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n />\n </div>\n </cdk-virtual-scroll-viewport>\n } @else {\n <div\n class=\"overflow-auto\"\n [style.maxHeight]=\"maxHeight()\"\n >\n @for (option of options(); track option.id; let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n />\n }\n </div>\n }\n\n <!-- Empty state -->\n @if (showEmpty()) {\n @if (emptyTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"emptyTemplate()!\"\n [ngTemplateOutletContext]=\"emptyContext()\"\n />\n } @else {\n <div [class]=\"emptyClasses()\">\n {{ emptyText() }}\n </div>\n }\n }\n </div>\n `,\n imports: [\n NgTemplateOutlet,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-panel-host block',\n },\n})\nexport class ComDropdownPanel<T> {\n /** Reference to the panel element. */\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panelElement');\n\n /** Reference to the virtual scroll viewport (when enabled). */\n readonly viewport: Signal<CdkVirtualScrollViewport | undefined> = viewChild<CdkVirtualScrollViewport>('viewport');\n\n /** Unique identifier for the panel. */\n readonly panelId: InputSignal<string> = input<string>('');\n\n /** The processed options to display. */\n readonly options: InputSignal<ComDropdownProcessedOption<T>[]> = input<ComDropdownProcessedOption<T>[]>([]);\n\n /** Maximum height of the panel. */\n readonly maxHeight: InputSignal<string> = input<string>('256px');\n\n /** Whether multiple selection is enabled. */\n readonly multiselectable: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Additional CSS classes to apply to the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Whether virtual scrolling is enabled. */\n readonly virtualScrollEnabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Item size for virtual scrolling (in pixels). */\n readonly itemSize: InputSignal<number> = input<number>(40);\n\n /** The current search query (for empty state context). */\n readonly searchQuery: InputSignal<string> = input<string>('');\n\n /** Custom empty state text. */\n readonly emptyText: InputSignal<string> = input<string>('No options available');\n\n /** Template for rendering each option. */\n readonly optionTemplate: InputSignal<TemplateRef<{ $implicit: ComDropdownProcessedOption<T>; index: number }>> =\n input.required<TemplateRef<{ $implicit: ComDropdownProcessedOption<T>; index: number }>>();\n\n /** Custom template for the empty state. */\n readonly emptyTemplate: InputSignal<TemplateRef<ComDropdownEmptyContext> | null> =\n input<TemplateRef<ComDropdownEmptyContext> | null>(null);\n\n /** Emitted when the panel is scrolled. */\n readonly scrolled: OutputEmitterRef<void> = output<void>();\n\n /** Whether to show the empty state. */\n protected readonly showEmpty: Signal<boolean> = computed(() => this.options().length === 0);\n\n /** Computed CSS classes for the panel. */\n protected readonly panelClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownPanelVariants({ size: this.size() });\n return mergeClasses(baseClasses, this.panelClass());\n });\n\n /** Computed CSS classes for the empty state. */\n protected readonly emptyClasses: Signal<string> = computed(() => {\n return dropdownEmptyVariants({ size: this.size() });\n });\n\n /** Template context for the empty state. */\n protected readonly emptyContext: Signal<ComDropdownEmptyContext> = computed(() => ({\n $implicit: this.searchQuery(),\n }));\n\n /** Track function for options. */\n protected trackByFn(_index: number, option: ComDropdownProcessedOption<T>): string {\n return option.id;\n }\n\n /** Scrolls to a specific index. */\n scrollToIndex(index: number): void {\n const vp = this.viewport();\n if (this.virtualScrollEnabled() && vp) {\n vp.scrollToIndex(index);\n } else {\n const panelEl = this.panelRef()?.nativeElement;\n const optionEl = panelEl?.querySelector(`[data-index=\"${index}\"]`) as HTMLElement | null;\n optionEl?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n /** Scrolls an option into view. */\n scrollOptionIntoView(optionElement: HTMLElement): void {\n optionElement.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, WritableSignal, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { dropdownSearchVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Search input component for filtering dropdown options.\n * Includes debouncing for better performance.\n *\n * @example\n * ```html\n * <com-dropdown-search\n * [placeholder]=\"'Search...'\"\n * [debounceTime]=\"300\"\n * (searchChange)=\"onSearch($event)\"\n * />\n * ```\n *\n * @tokens `--color-border-subtle`, `--color-input-placeholder`, `--color-disabled-foreground`,\n * `--color-ring`, `--radius-interactive-sm`\n */\n@Component({\n selector: 'com-dropdown-search',\n exportAs: 'comDropdownSearch',\n template: `\n <div class=\"relative flex items-center\">\n <!-- Search icon -->\n <svg\n class=\"pointer-events-none absolute left-3 h-4 w-4 text-placeholder\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n\n <!-- Input -->\n <input\n #searchInput\n type=\"text\"\n [class]=\"searchClasses()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.autocomplete]=\"'off'\"\n [attr.autocapitalize]=\"'off'\"\n [attr.autocorrect]=\"'off'\"\n [attr.spellcheck]=\"'false'\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n />\n\n <!-- Clear button -->\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"absolute right-3 flex h-4 w-4 items-center justify-center rounded-interactive-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring\"\n [attr.aria-label]=\"'Clear search'\"\n (click)=\"clearSearch()\"\n >\n <svg\n class=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-search-host block',\n '[attr.comDropdownSearch]': 'true',\n },\n})\nexport class ComDropdownSearch implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n\n /** Reference to the input element. */\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n /** Subject for debounced search. */\n private readonly searchSubject = new Subject<string>();\n\n /** Current internal search value. */\n private readonly internalValue: WritableSignal<string> = signal('');\n\n /** Placeholder text for the search input. */\n readonly placeholder: InputSignal<string> = input<string>('Search...');\n\n /** Aria label for accessibility. */\n readonly ariaLabel: InputSignal<string> = input<string>('Search options');\n\n /** Whether the search input is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Debounce time in milliseconds. */\n readonly debounceMs: InputSignal<number> = input<number>(300);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Additional CSS classes to apply. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Emitted when the search value changes (after debounce). */\n readonly searchChange: OutputEmitterRef<string> = output<string>();\n\n /** Emitted when a navigation key is pressed (for focus management). */\n readonly keyNav: OutputEmitterRef<KeyboardEvent> = output<KeyboardEvent>();\n\n /** Whether to show the clear button. */\n protected readonly showClear: Signal<boolean> = computed(() => this.internalValue().length > 0);\n\n /** Computed CSS classes for the search input. */\n protected readonly searchClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownSearchVariants({ size: this.size() });\n // Add left padding for the search icon\n return mergeClasses(baseClasses, 'pl-9 pr-8', this.userClass());\n });\n\n ngOnInit(): void {\n // Set up debounced search\n this.searchSubject\n .pipe(\n debounceTime(this.debounceMs()),\n distinctUntilChanged(),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((value) => {\n this.searchChange.emit(value);\n });\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.internalValue.set(value);\n this.searchSubject.next(value);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n // Let parent handle navigation keys\n if (['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(event.key)) {\n this.keyNav.emit(event);\n }\n }\n\n protected clearSearch(): void {\n this.internalValue.set('');\n this.searchSubject.next('');\n this.focus();\n }\n\n /** Focuses the search input. */\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n /** Gets the current search value. */\n getValue(): string {\n return this.internalValue();\n }\n\n /** Sets the search value programmatically. */\n setValue(value: string): void {\n this.internalValue.set(value);\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = value;\n }\n this.searchSubject.next(value);\n }\n\n /** Clears the search input. */\n clear(): void {\n this.clearSearch();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownTagVariants, dropdownTagRemoveVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownTagContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Tag component for displaying selected items in multi-select mode.\n * Includes a remove button for deselection.\n *\n * @example\n * ```html\n * <com-dropdown-tag\n * [value]=\"user\"\n * [displayText]=\"user.name\"\n * (remove)=\"onRemove(user)\"\n * />\n * ```\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-ring`, `--radius-tag`, `--radius-interactive-sm`\n */\n@Component({\n selector: 'com-dropdown-tag',\n exportAs: 'comDropdownTag',\n template: `\n @if (tagTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate()!\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n } @else {\n <span [class]=\"tagClasses()\">\n <span class=\"truncate\">{{ displayText() }}</span>\n @if (!disabled()) {\n <button\n type=\"button\"\n [class]=\"removeClasses()\"\n [attr.aria-label]=\"'Remove ' + displayText()\"\n (click)=\"onRemove($event)\"\n (keydown.enter)=\"onRemove($event)\"\n (keydown.space)=\"onRemove($event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-full w-full\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n </span>\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-tag-host inline-flex',\n },\n})\nexport class ComDropdownTag<T> {\n /** The value this tag represents. */\n readonly value: InputSignal<T> = input.required<T>();\n\n /** Display text for this tag. */\n readonly displayText: InputSignal<string> = input<string>('');\n\n /** Index of this tag in the list. */\n readonly index: InputSignal<number> = input<number>(0);\n\n /** Whether the tag (and its remove button) is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Tag variant for styling. */\n readonly variant: InputSignal<'default' | 'primary'> = input<'default' | 'primary'>('primary');\n\n /** Additional CSS classes for the tag. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Custom template for rendering the tag. */\n readonly tagTemplate: InputSignal<TemplateRef<ComDropdownTagContext<T>> | null> =\n input<TemplateRef<ComDropdownTagContext<T>> | null>(null);\n\n /** Emitted when the remove button is clicked. */\n readonly remove: OutputEmitterRef<T> = output<T>();\n\n /** Computed CSS classes for the tag. */\n protected readonly tagClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownTagVariants({\n size: this.size(),\n variant: this.variant(),\n });\n return mergeClasses(baseClasses, this.userClass());\n });\n\n /** Computed CSS classes for the remove button. */\n protected readonly removeClasses: Signal<string> = computed(() => {\n return dropdownTagRemoveVariants({ size: this.size() });\n });\n\n /** Template context for custom tag templates. */\n protected readonly templateContext: Signal<ComDropdownTagContext<T>> = computed(() => ({\n $implicit: this.value(),\n index: this.index(),\n remove: () => this.emitRemove(),\n }));\n\n protected onRemove(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.emitRemove();\n }\n }\n\n private emitRemove(): void {\n this.remove.emit(this.value());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport type { Signal, InputSignal, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownGroupVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownGroupContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Group header component for categorized dropdown options.\n *\n * @example\n * ```html\n * <com-dropdown-group\n * [label]=\"'Fruits'\"\n * [count]=\"5\"\n * />\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Component({\n selector: 'com-dropdown-group',\n exportAs: 'comDropdownGroup',\n template: `\n @if (groupTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()!\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n } @else {\n <div [class]=\"groupClasses()\">\n <span>{{ label() }}</span>\n @if (showCount()) {\n <span class=\"ml-auto text-xs text-muted-foreground\">\n ({{ count() }})\n </span>\n }\n </div>\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-group-host block',\n role: 'presentation',\n },\n})\nexport class ComDropdownGroup {\n /** The group label/key. */\n readonly label: InputSignal<string> = input.required<string>();\n\n /** The number of options in this group. */\n readonly count: InputSignal<number> = input<number>(0);\n\n /** Whether the group is expanded (for collapsible groups). */\n readonly expanded: InputSignal<boolean> = input<boolean>(true);\n\n /** Whether to show the count badge. */\n readonly showCount: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Additional CSS classes for the group header. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Custom template for rendering the group header. */\n readonly groupTemplate: InputSignal<TemplateRef<ComDropdownGroupContext> | null> =\n input<TemplateRef<ComDropdownGroupContext> | null>(null);\n\n /** Computed CSS classes for the group header. */\n protected readonly groupClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownGroupVariants({ size: this.size() });\n return mergeClasses(baseClasses, this.userClass());\n });\n\n /** Template context for custom group templates. */\n protected readonly templateContext: Signal<ComDropdownGroupContext> = computed(() => ({\n $implicit: this.label(),\n expanded: this.expanded(),\n count: this.count(),\n }));\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownOptionContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom option template.\n *\n * @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 * @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 * @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 * @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 * @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 { TemplateRef } from '@angular/core';\n\n/**\n * Context provided to the custom option template.\n * @template T The type of the option value.\n */\nexport interface ComDropdownOptionContext<T> {\n /** The option value (available as implicit $implicit). */\n $implicit: T;\n /** The index of this option in the filtered list. */\n index: number;\n /** Whether this option is currently selected. */\n selected: boolean;\n /** Whether this option is currently active (focused via keyboard). */\n active: boolean;\n /** Whether this option is disabled. */\n disabled: boolean;\n}\n\n/**\n * Context provided to the custom selected value template.\n * @template T The type of the option value.\n */\nexport interface ComDropdownSelectedContext<T> {\n /** The selected value(s) (available as implicit $implicit). */\n $implicit: T | T[] | null;\n /** The placeholder text when no value is selected. */\n placeholder: string;\n /** Whether multiple selection is enabled. */\n multiple: boolean;\n}\n\n/**\n * Context provided to the custom empty state template.\n */\nexport interface ComDropdownEmptyContext {\n /** The current search query (available as implicit $implicit). */\n $implicit: string;\n}\n\n/**\n * Context provided to the custom group header template.\n */\nexport interface ComDropdownGroupContext {\n /** The group key/label (available as implicit $implicit). */\n $implicit: string;\n /** Whether the group is expanded. */\n expanded: boolean;\n /** The number of options in this group. */\n count: number;\n}\n\n/**\n * Context provided to the custom tag template (multi-select mode).\n * @template T The type of the option value.\n */\nexport interface ComDropdownTagContext<T> {\n /** The tag value (available as implicit $implicit). */\n $implicit: T;\n /** The index of this tag. */\n index: number;\n /** Function to remove this tag. */\n remove: () => void;\n}\n\n/**\n * Represents a grouped collection of options.\n * @template T The type of the option value.\n */\nexport interface ComDropdownGroup<T> {\n /** The group key/label. */\n key: string;\n /** The options belonging to this group. */\n options: T[];\n /** Whether the group is expanded (for collapsible groups). */\n expanded: boolean;\n}\n\n/**\n * Internal representation of a processed option.\n * @template T The type of the option value.\n */\nexport interface ComDropdownProcessedOption<T> {\n /** The original option value. */\n value: T;\n /** The display text for this option. */\n displayText: string;\n /** Whether this option is disabled. */\n disabled: boolean;\n /** The group this option belongs to (if grouped). */\n group?: string;\n /** Unique identifier for tracking. */\n id: string;\n}\n\n/**\n * Configuration for dropdown positioning.\n */\nexport interface ComDropdownPosition {\n /** The origin X position. */\n originX: 'start' | 'center' | 'end';\n /** The origin Y position. */\n originY: 'top' | 'center' | 'bottom';\n /** The overlay X position. */\n overlayX: 'start' | 'center' | 'end';\n /** The overlay Y position. */\n overlayY: 'top' | 'center' | 'bottom';\n /** Offset along the X axis. */\n offsetX?: number;\n /** Offset along the Y axis. */\n offsetY?: number;\n}\n\n/**\n * Panel width configuration.\n */\nexport type ComDropdownPanelWidth = 'trigger' | 'auto' | string;\n\n/**\n * Default compare function for primitive values.\n * @param a First value.\n * @param b Second value.\n * @returns Whether the values are equal.\n */\nexport function defaultCompareWith<T>(a: T, b: T): boolean {\n return a === b;\n}\n\n/**\n * Default display function for converting values to strings.\n * @param value The value to display.\n * @returns The string representation.\n */\nexport function defaultDisplayWith<T>(value: T): string {\n if (value === null || value === undefined) {\n return '';\n }\n return String(value);\n}\n\n/**\n * Default filter function for search.\n * @param option The option to test.\n * @param query The search query.\n * @param displayWith The display function to get the searchable text.\n * @returns Whether the option matches the query.\n */\nexport function defaultFilterWith<T>(\n option: T,\n query: string,\n displayWith: (value: T) => string\n): boolean {\n const text = displayWith(option).toLowerCase();\n return text.includes(query.toLowerCase());\n}\n\n/**\n * Template directive types for content projection.\n */\nexport interface ComDropdownTemplates<T> {\n /** Custom template for rendering options. */\n optionTemplate?: TemplateRef<ComDropdownOptionContext<T>>;\n /** Custom template for rendering the selected value. */\n selectedTemplate?: TemplateRef<ComDropdownSelectedContext<T>>;\n /** Custom template for the empty state. */\n emptyTemplate?: TemplateRef<ComDropdownEmptyContext>;\n /** Custom template for group headers. */\n groupTemplate?: TemplateRef<ComDropdownGroupContext>;\n /** Custom template for tags in multi-select mode. */\n tagTemplate?: TemplateRef<ComDropdownTagContext<T>>;\n}\n\n/**\n * Unique ID counter for generating option IDs.\n */\nlet uniqueIdCounter = 0;\n\n/**\n * Generates a unique ID for dropdown options.\n * @param prefix Optional prefix for the ID.\n * @returns A unique ID string.\n */\nexport function generateDropdownId(prefix = 'com-dropdown'): string {\n return `${prefix}-${uniqueIdCounter++}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport type {\n InputSignal,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { FormFieldControl, ErrorStateMatcher, type FormFieldAppearance } from 'ngx-com/components/form-field';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition, FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ComDropdownOption } from './dropdown-option.component';\nimport { ComDropdownPanel } from './dropdown-panel.component';\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 {\n dropdownTriggerVariants,\n dropdownChevronVariants,\n dropdownClearVariants,\n dropdownOverflowBadgeVariants,\n} from './dropdown.variants';\nimport type {\n DropdownVariant,\n DropdownSize,\n DropdownState,\n} from './dropdown.variants';\nimport type {\n ComDropdownOptionContext,\n ComDropdownSelectedContext,\n ComDropdownEmptyContext,\n ComDropdownGroupContext,\n ComDropdownTagContext,\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-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <!-- Selected value display -->\n <span class=\"flex-1 truncate text-left\">\n @if (selectedTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!.templateRef\"\n [ngTemplateOutletContext]=\"selectedContext()\"\n />\n } @else if (multiple()) {\n @if (selectedValues().length > 0) {\n <span class=\"flex flex-wrap gap-1\">\n @for (item of visibleTags(); track trackByValue(item, $index); let i = $index) {\n <com-dropdown-tag\n [value]=\"item\"\n [displayText]=\"displayWith()(item)\"\n [index]=\"i\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [tagTemplate]=\"tagTemplate()?.templateRef ?? null\"\n (remove)=\"removeValue($event)\"\n />\n }\n @if (hiddenTagsCount() > 0) {\n <span [class]=\"overflowBadgeClasses()\">\n +{{ hiddenTagsCount() }}\n </span>\n }\n </span>\n } @else {\n <span class=\"text-placeholder\">{{ placeholder() }}</span>\n }\n } @else {\n @if (selectedValue() !== null && selectedValue() !== undefined) {\n {{ displayWith()(selectedValue()!) }}\n } @else {\n <span class=\"text-placeholder\">{{ placeholder() }}</span>\n }\n }\n </span>\n\n <!-- Clear button -->\n @if (clearable() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n [class]=\"clearClasses()\"\n [attr.aria-label]=\"'Clear selection'\"\n (click)=\"clear($event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-full w-full\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n\n <!-- Chevron icon -->\n <svg\n [class]=\"chevronClasses()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n <!-- Panel template (rendered in overlay) -->\n <ng-template #panelTemplate>\n <div\n #panelElement\n [class]=\"panelClasses()\"\n [attr.id]=\"panelId()\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n [attr.aria-label]=\"placeholder()\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <!-- Search input -->\n @if (searchable()) {\n <com-dropdown-search\n [placeholder]=\"searchPlaceholder()\"\n [size]=\"size()\"\n [debounceMs]=\"searchDebounceMs()\"\n (searchChange)=\"onSearchChange($event)\"\n (keyNav)=\"onSearchKeyNav($event)\"\n />\n }\n\n <!-- Options list -->\n <div\n class=\"overflow-auto\"\n [style.maxHeight]=\"maxHeight()\"\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 {\n <!-- Empty state -->\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 </div>\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 ComDropdownOption,\n ComDropdownSearch,\n ComDropdownTag,\n ComDropdownGroup,\n ],\n providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComDropdown) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-host inline-block',\n '[class.com-dropdown-disabled]': 'disabled()',\n '[class.com-dropdown-open]': 'isOpen()',\n },\n})\nexport class ComDropdown<T> implements ControlValueAccessor, FormFieldControl<T | T[] | null> {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n /** NgControl bound to this dropdown (if using reactive forms). */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the trigger button element. */\n private readonly triggerRef: Signal<ElementRef<HTMLButtonElement>> =\n viewChild.required<ElementRef<HTMLButtonElement>>('triggerElement');\n\n /** Reference to the panel template. */\n private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n /** Content query for custom option template. */\n protected readonly optionTemplate: Signal<ComDropdownOptionTpl<T> | undefined> =\n contentChild(ComDropdownOptionTpl<T>);\n\n /** Content query for custom selected template. */\n protected readonly selectedTemplate: Signal<ComDropdownSelectedTpl<T> | undefined> =\n contentChild(ComDropdownSelectedTpl<T>);\n\n /** Content query for custom empty template. */\n protected readonly emptyTemplate: Signal<ComDropdownEmptyTpl | undefined> =\n contentChild(ComDropdownEmptyTpl);\n\n /** Content query for custom group template. */\n protected readonly groupTemplate: Signal<ComDropdownGroupTpl | undefined> =\n contentChild(ComDropdownGroupTpl);\n\n /** Content query for custom tag template. */\n protected readonly tagTemplate: Signal<ComDropdownTagTpl<T> | undefined> =\n contentChild(ComDropdownTagTpl<T>);\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: InputSignal<boolean> = input<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 /** 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 // 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 // ============ 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 /** IDs for aria-describedby (set by form-field). */\n private readonly _describedByIds: WritableSignal<string> = signal('');\n\n /** Form field appearance (set by form-field). */\n private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n\n // ============ COMPUTED STATE ============\n\n /** Trigger element ID. */\n readonly triggerId: Signal<string> = computed(() => `${this.dropdownId}-trigger`);\n\n /** Panel element ID. */\n readonly panelId: Signal<string> = computed(() => `${this.dropdownId}-panel`);\n\n /** Currently active descendant ID (for ARIA). */\n readonly activeDescendant: Signal<string | null> = computed(() => {\n return this.isOpen() ? this.activeOptionId() : null;\n });\n\n /** Whether the dropdown has a value. */\n readonly hasValue: Signal<boolean> = computed(() => {\n const val = this.internalValue();\n if (this.multiple()) {\n return Array.isArray(val) && val.length > 0;\n }\n return val !== null && val !== undefined;\n });\n\n // ============ FormFieldControl SIGNALS ============\n\n /** Whether the dropdown is focused (trigger focused or panel open). Implements FormFieldControl. */\n readonly focused: Signal<boolean> = computed(() => this._triggerFocused() || this.isOpen());\n\n /** Whether the label should float. Label floats when focused or has a value. */\n readonly shouldLabelFloat: Signal<boolean> = computed(() => this.focused() || this.hasValue());\n\n /** Whether the control is in an error state. Implements FormFieldControl. */\n readonly errorState: Signal<boolean> = computed(() => {\n if (!this.ngControl) {\n // Signal Forms: gate on invalid AND touched (mirrors ErrorStateMatcher default)\n return this.invalid() && this.touched();\n }\n // Reactive Forms: use ErrorStateMatcher (existing logic)\n this.isOpen();\n this.hasValue();\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n return matcher.isErrorState(this.ngControl.control ?? null, form);\n });\n\n /** Structured validation errors from Signal Forms, exposed for the parent form field. */\n readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n !this.ngControl ? this.sfErrors() : null\n );\n\n /** Unique ID for the control. Implements FormFieldControl. */\n readonly id: Signal<string> = this.triggerId;\n\n /**\n * Effective state combining manual state with automatic error detection.\n * Manual state takes precedence over auto-detected error state.\n */\n readonly effectiveState: Signal<DropdownState> = computed(() => {\n const manualState = this.state();\n if (manualState !== 'default') return manualState;\n return this.errorState() ? 'error' : 'default';\n });\n\n /** Combined aria-describedby from form-field. */\n readonly ariaDescribedBy: Signal<string | null> = computed(() => this._describedByIds() || null);\n\n /** Selected value (single mode). */\n readonly selectedValue: Signal<T | null> = computed(() => {\n const val = this.internalValue();\n if (this.multiple() || Array.isArray(val)) {\n return null;\n }\n return val;\n });\n\n /** Selected values (multiple mode). */\n readonly selectedValues: Signal<T[]> = computed(() => {\n const val = this.internalValue();\n if (!this.multiple()) {\n return [];\n }\n return Array.isArray(val) ? val : val !== null ? [val] : [];\n });\n\n /** Tags visible in the trigger (limited by maxVisibleTags). */\n readonly visibleTags: Signal<T[]> = computed(() => {\n const all = this.selectedValues();\n const max = this.maxVisibleTags();\n if (max === null || all.length <= max) {\n return all;\n }\n return all.slice(0, max);\n });\n\n /** Count of hidden tags (for +N badge). */\n readonly hiddenTagsCount: Signal<number> = computed(() => {\n const all = this.selectedValues();\n const max = this.maxVisibleTags();\n if (max === null || all.length <= max) {\n return 0;\n }\n return all.length - max;\n });\n\n /** Processed options with display text and IDs. */\n readonly processedOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n const opts = this.options();\n const display = this.displayWith();\n return opts.map((opt, index) => ({\n value: opt,\n displayText: display(opt),\n disabled: false, // Could be extended with disabledWith input\n id: `${this.dropdownId}-option-${index}`,\n }));\n });\n\n /** Filtered options based on search query. */\n readonly filteredOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n const opts = this.processedOptions();\n const query = this.searchQuery().trim();\n\n if (!query) {\n return opts;\n }\n\n const filterFn = this.filterWith();\n const display = this.displayWith();\n\n return opts.filter((opt) => {\n if (filterFn) {\n return filterFn(opt.value, query);\n }\n return defaultFilterWith(opt.value, query, display);\n });\n });\n\n /** Grouped options (when groupBy is provided). */\n readonly groupedOptions: Signal<DropdownGroupType<ComDropdownProcessedOption<T>>[]> = computed(() => {\n const groupFn = this.groupBy();\n if (!groupFn) {\n return [];\n }\n\n const opts = this.filteredOptions();\n const groups = new Map<string, ComDropdownProcessedOption<T>[]>();\n\n for (const opt of opts) {\n const key = groupFn(opt.value);\n const existing = groups.get(key) || [];\n existing.push(opt);\n groups.set(key, existing);\n }\n\n return Array.from(groups.entries()).map(([key, options]) => ({\n key,\n options,\n expanded: true,\n }));\n });\n\n /** Whether virtual scrolling should be enabled. */\n readonly virtualScrollEnabled: Signal<boolean> = computed(() => {\n return this.filteredOptions().length > this.virtualScrollThreshold();\n });\n\n /** Context for selected template. */\n readonly selectedContext: Signal<ComDropdownSelectedContext<T>> = computed(() => ({\n $implicit: this.internalValue(),\n placeholder: this.placeholder(),\n multiple: this.multiple(),\n }));\n\n /** Context for empty template. */\n readonly emptyContext: Signal<ComDropdownEmptyContext> = computed(() => ({\n $implicit: this.searchQuery(),\n }));\n\n /** Computed trigger classes. */\n readonly triggerClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.effectiveState(),\n open: this.isOpen(),\n });\n\n // For naked variant, add padding based on form-field appearance\n let paddingClasses = '';\n if (this.variant() === 'naked') {\n paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';\n }\n\n return mergeClasses(baseClasses, paddingClasses, this.userClass());\n });\n\n /** Computed panel classes. */\n readonly panelClasses: Signal<string> = computed(() => {\n return mergeClasses(\n 'w-full z-50 overflow-hidden rounded-overlay border border-border-subtle bg-popover text-popover-foreground shadow-lg 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 // ============ 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\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 // Disabled state is handled via the disabled input\n // When using forms, the form control's disabled state takes precedence\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\n /** Closes the dropdown panel. */\n close(): void {\n if (!this.isOpen()) {\n return;\n }\n\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 event.preventDefault();\n this.selectActiveOption();\n break;\n\n case 'Escape':\n event.preventDefault();\n this.close();\n this.triggerRef().nativeElement.focus();\n break;\n\n case 'Tab':\n this.close();\n break;\n\n case 'Home':\n event.preventDefault();\n this.navigateToFirst();\n break;\n\n case 'End':\n event.preventDefault();\n this.navigateToLast();\n break;\n }\n }\n\n protected onSearchChange(query: string): void {\n this.searchQuery.set(query);\n this.searchChange.emit(query);\n\n // Reset active option to first result\n const filtered = this.filteredOptions();\n const firstFiltered = filtered[0];\n if (firstFiltered) {\n this.activeOptionId.set(firstFiltered.id);\n } else {\n this.activeOptionId.set(null);\n }\n }\n\n protected onSearchKeyNav(event: KeyboardEvent): void {\n // Delegate to panel keydown handler\n this.onPanelKeydown(event);\n }\n\n protected onTriggerFocus(): void {\n this._triggerFocused.set(true);\n }\n\n protected onTriggerBlur(): void {\n this._triggerFocused.set(false);\n }\n\n protected onOptionHover(optionId: string): void {\n this.activeOptionId.set(optionId);\n }\n\n protected selectOption(value: T): void {\n if (this.multiple()) {\n this.toggleMultipleValue(value);\n } else {\n this.updateValue(value);\n this.close();\n this.triggerRef().nativeElement.focus();\n }\n }\n\n protected removeValue(value: T): void {\n const current = this.selectedValues();\n const compare = this.compareWith();\n const newValues = current.filter((v) => !compare(v, value));\n this.updateValue(newValues.length > 0 ? newValues : []);\n this.announce(`${this.displayWith()(value)} removed`);\n }\n\n protected trackByValue(item: T, _index: number): unknown {\n return item;\n }\n\n 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;\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n ...this.getPanelWidthConfig(hostWidth),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n // Attach panel template\n const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n // Close on backdrop click\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n // Close on outside click\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n /**\n * Returns overlay width configuration based on panelWidth setting.\n * - 'trigger': min-width equals host, can grow wider\n * - 'auto': no width constraint\n * - specific value: exact width\n */\n private getPanelWidthConfig(hostWidth: number): { minWidth?: number; width?: string } {\n const config = this.panelWidth();\n if (config === 'trigger') {\n return { minWidth: hostWidth };\n }\n if (config === 'auto') {\n return {};\n }\n return { width: config };\n }\n\n private updateValue(value: T | T[] | null): void {\n this.value.set(value);\n this.onChange(value);\n\n // Announce selection\n if (value !== null && !Array.isArray(value)) {\n this.announce(`${this.displayWith()(value)} selected`);\n }\n }\n\n private toggleMultipleValue(value: T): void {\n const current = this.selectedValues();\n const compare = this.compareWith();\n const isAlreadySelected = current.some((v) => compare(v, value));\n\n let newValues: T[];\n if (isAlreadySelected) {\n newValues = current.filter((v) => !compare(v, value));\n this.announce(`${this.displayWith()(value)} deselected`);\n } else {\n newValues = [...current, value];\n this.announce(`${this.displayWith()(value)} selected`);\n }\n\n this.updateValue(newValues.length > 0 ? newValues : []);\n }\n\n private navigateOptions(direction: 1 | -1): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n if (options.length === 0) {\n return;\n }\n\n const currentId = this.activeOptionId();\n let currentIndex = options.findIndex((opt) => opt.id === currentId);\n\n if (currentIndex === -1) {\n currentIndex = direction === 1 ? -1 : options.length;\n }\n\n let nextIndex = currentIndex + direction;\n\n // Wrap around\n if (nextIndex < 0) {\n nextIndex = options.length - 1;\n } else if (nextIndex >= options.length) {\n nextIndex = 0;\n }\n\n // Skip disabled options\n const startIndex = nextIndex;\n let currentOption = options[nextIndex];\n while (currentOption?.disabled) {\n nextIndex += direction;\n if (nextIndex < 0) nextIndex = options.length - 1;\n else if (nextIndex >= options.length) nextIndex = 0;\n if (nextIndex === startIndex) return; // All disabled\n currentOption = options[nextIndex];\n }\n\n const targetOption = options[nextIndex];\n if (targetOption) {\n this.activeOptionId.set(targetOption.id);\n }\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 this.activeOptionId.set(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 this.activeOptionId.set(lastEnabled.id);\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","// 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';\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} 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} 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/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","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef, ElementRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownOptionVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownOptionContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * A single option in the dropdown list.\n * Implements CDK's Highlightable interface for keyboard navigation.\n *\n * @example\n * ```html\n * <com-dropdown-option\n * [value]=\"user\"\n * [selected]=\"isSelected(user)\"\n * [disabled]=\"user.inactive\"\n * (select)=\"onSelect(user)\"\n * />\n * ```\n *\n * @tokens `--color-popover-foreground`, `--color-muted`, `--color-primary-subtle`,\n * `--color-primary-subtle-foreground`, `--color-disabled-foreground`\n */\n@Component({\n selector: 'com-dropdown-option',\n exportAs: 'comDropdownOption',\n template: `\n <div\n #optionElement\n [class]=\"optionClasses()\"\n [attr.role]=\"'option'\"\n [attr.id]=\"id()\"\n [attr.aria-selected]=\"selected()\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.data-active]=\"active() || null\"\n [attr.data-selected]=\"selected() || null\"\n [attr.data-disabled]=\"disabled() || null\"\n tabindex=\"-1\"\n (click)=\"onOptionClick($event)\"\n (keydown.enter)=\"onOptionClick($event)\"\n (keydown.space)=\"onOptionClick($event)\"\n (mouseenter)=\"onMouseEnter()\"\n >\n @if (optionTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate()!\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n } @else {\n <span class=\"truncate\">{{ displayText() }}</span>\n @if (selected()) {\n <svg\n class=\"ml-auto h-4 w-4 shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n }\n }\n </div>\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-option-host block',\n },\n})\nexport class ComDropdownOption<T> {\n /** Reference to the option element for focus management. */\n private readonly optionRef = viewChild<ElementRef<HTMLElement>>('optionElement');\n\n /** The value this option represents. */\n readonly value: InputSignal<T> = input.required<T>();\n\n /** Display text for this option (when no template is provided). */\n readonly displayText: InputSignal<string> = input<string>('');\n\n /** Unique identifier for this option. */\n readonly id: InputSignal<string> = input.required<string>();\n\n /** Index of this option in the list. */\n readonly index: InputSignal<number> = input<number>(0);\n\n /** Whether this option is currently selected. */\n readonly selected: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether this option is currently active (keyboard focused). */\n readonly active: InputSignal<boolean> = input<boolean>(false);\n\n /** Whether this option is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Custom template for rendering the option content. */\n readonly optionTemplate: InputSignal<TemplateRef<ComDropdownOptionContext<T>> | null> =\n input<TemplateRef<ComDropdownOptionContext<T>> | null>(null);\n\n /** Additional CSS classes to apply. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Emitted when the option is selected. */\n // eslint-disable-next-line @angular-eslint/no-output-native -- intentional: matches listbox/combobox select pattern\n readonly select: OutputEmitterRef<T> = output<T>();\n\n /** Emitted when the mouse enters the option. */\n readonly hover: OutputEmitterRef<T> = output<T>();\n\n /** Computed option state for CVA styling. */\n protected readonly optionState: Signal<'default' | 'active' | 'selected' | 'selected-active' | 'disabled'> =\n computed(() => {\n if (this.disabled()) return 'disabled';\n if (this.selected() && this.active()) return 'selected-active';\n if (this.selected()) return 'selected';\n if (this.active()) return 'active';\n return 'default';\n });\n\n /** Computed CSS classes for the option. */\n protected readonly optionClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownOptionVariants({\n size: this.size(),\n state: this.optionState(),\n });\n return mergeClasses(baseClasses, this.userClass());\n });\n\n /** Template context for custom option templates. */\n protected readonly templateContext: Signal<ComDropdownOptionContext<T>> = computed(() => ({\n $implicit: this.value(),\n index: this.index(),\n selected: this.selected(),\n active: this.active(),\n disabled: this.disabled(),\n }));\n\n protected onOptionClick(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.select.emit(this.value());\n }\n\n protected onMouseEnter(): void {\n if (!this.disabled()) {\n this.hover.emit(this.value());\n }\n }\n\n /** Scrolls this option into view. */\n scrollIntoView(): void {\n this.optionRef()?.nativeElement.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n\n /** Focuses this option element. */\n focus(): void {\n this.optionRef()?.nativeElement.focus();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, WritableSignal, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { dropdownSearchVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Search input component for filtering dropdown options.\n * Includes debouncing for better performance.\n *\n * @example\n * ```html\n * <com-dropdown-search\n * [placeholder]=\"'Search...'\"\n * [debounceTime]=\"300\"\n * (searchChange)=\"onSearch($event)\"\n * />\n * ```\n *\n * @tokens `--color-border-subtle`, `--color-input-placeholder`, `--color-disabled-foreground`,\n * `--color-ring`, `--radius-interactive-sm`\n */\n@Component({\n selector: 'com-dropdown-search',\n exportAs: 'comDropdownSearch',\n template: `\n <div class=\"relative flex items-center\">\n <!-- Search icon -->\n <svg\n class=\"pointer-events-none absolute left-3 h-4 w-4 text-placeholder\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n\n <!-- Input -->\n <input\n #searchInput\n type=\"text\"\n [class]=\"searchClasses()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.autocomplete]=\"'off'\"\n [attr.autocapitalize]=\"'off'\"\n [attr.autocorrect]=\"'off'\"\n [attr.spellcheck]=\"'false'\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n />\n\n <!-- Clear button -->\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"absolute right-3 flex h-4 w-4 items-center justify-center rounded-interactive-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring\"\n [attr.aria-label]=\"'Clear search'\"\n (click)=\"clearSearch()\"\n >\n <svg\n class=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-search-host block',\n '[attr.comDropdownSearch]': 'true',\n },\n})\nexport class ComDropdownSearch implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n\n /** Reference to the input element. */\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n /** Subject for debounced search. */\n private readonly searchSubject = new Subject<string>();\n\n /** Current internal search value. */\n private readonly internalValue: WritableSignal<string> = signal('');\n\n /** Placeholder text for the search input. */\n readonly placeholder: InputSignal<string> = input<string>('Search...');\n\n /** Aria label for accessibility. */\n readonly ariaLabel: InputSignal<string> = input<string>('Search options');\n\n /** Whether the search input is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Debounce time in milliseconds. */\n readonly debounceMs: InputSignal<number> = input<number>(300);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Additional CSS classes to apply. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Emitted when the search value changes (after debounce). */\n readonly searchChange: OutputEmitterRef<string> = output<string>();\n\n /** Emitted when a navigation key is pressed (for focus management). */\n readonly keyNav: OutputEmitterRef<KeyboardEvent> = output<KeyboardEvent>();\n\n /** Whether to show the clear button. */\n protected readonly showClear: Signal<boolean> = computed(() => this.internalValue().length > 0);\n\n /** Computed CSS classes for the search input. */\n protected readonly searchClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownSearchVariants({ size: this.size() });\n // Add left padding for the search icon\n return mergeClasses(baseClasses, 'pl-9 pr-8', this.userClass());\n });\n\n ngOnInit(): void {\n // Set up debounced search\n this.searchSubject\n .pipe(\n debounceTime(this.debounceMs()),\n distinctUntilChanged(),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((value) => {\n this.searchChange.emit(value);\n });\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.internalValue.set(value);\n this.searchSubject.next(value);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n // Let parent handle navigation keys\n if (['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(event.key)) {\n this.keyNav.emit(event);\n }\n }\n\n protected clearSearch(): void {\n this.internalValue.set('');\n this.searchSubject.next('');\n this.focus();\n }\n\n /** Focuses the search input. */\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n /** Gets the current search value. */\n getValue(): string {\n return this.internalValue();\n }\n\n /** Sets the search value programmatically. */\n setValue(value: string): void {\n this.internalValue.set(value);\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.value = value;\n }\n this.searchSubject.next(value);\n }\n\n /** Clears the search input. */\n clear(): void {\n this.clearSearch();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownTagVariants, dropdownTagRemoveVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownTagContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Tag component for displaying selected items in multi-select mode.\n * Includes a remove button for deselection.\n *\n * @example\n * ```html\n * <com-dropdown-tag\n * [value]=\"user\"\n * [displayText]=\"user.name\"\n * (remove)=\"onRemove(user)\"\n * />\n * ```\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-ring`, `--radius-tag`, `--radius-interactive-sm`\n */\n@Component({\n selector: 'com-dropdown-tag',\n exportAs: 'comDropdownTag',\n template: `\n @if (tagTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate()!\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n } @else {\n <span [class]=\"tagClasses()\">\n <span class=\"truncate\">{{ displayText() }}</span>\n @if (!disabled()) {\n <button\n type=\"button\"\n [class]=\"removeClasses()\"\n [attr.aria-label]=\"'Remove ' + displayText()\"\n (click)=\"onRemove($event)\"\n (keydown.enter)=\"onRemove($event)\"\n (keydown.space)=\"onRemove($event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-full w-full\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n </span>\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-tag-host inline-flex',\n },\n})\nexport class ComDropdownTag<T> {\n /** The value this tag represents. */\n readonly value: InputSignal<T> = input.required<T>();\n\n /** Display text for this tag. */\n readonly displayText: InputSignal<string> = input<string>('');\n\n /** Index of this tag in the list. */\n readonly index: InputSignal<number> = input<number>(0);\n\n /** Whether the tag (and its remove button) is disabled. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Tag variant for styling. */\n readonly variant: InputSignal<'default' | 'primary'> = input<'default' | 'primary'>('primary');\n\n /** Additional CSS classes for the tag. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Custom template for rendering the tag. */\n readonly tagTemplate: InputSignal<TemplateRef<ComDropdownTagContext<T>> | null> =\n input<TemplateRef<ComDropdownTagContext<T>> | null>(null);\n\n /** Emitted when the remove button is clicked. */\n readonly remove: OutputEmitterRef<T> = output<T>();\n\n /** Computed CSS classes for the tag. */\n protected readonly tagClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownTagVariants({\n size: this.size(),\n variant: this.variant(),\n });\n return mergeClasses(baseClasses, this.userClass());\n });\n\n /** Computed CSS classes for the remove button. */\n protected readonly removeClasses: Signal<string> = computed(() => {\n return dropdownTagRemoveVariants({ size: this.size() });\n });\n\n /** Template context for custom tag templates. */\n protected readonly templateContext: Signal<ComDropdownTagContext<T>> = computed(() => ({\n $implicit: this.value(),\n index: this.index(),\n remove: () => this.emitRemove(),\n }));\n\n protected onRemove(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.emitRemove();\n }\n }\n\n private emitRemove(): void {\n this.remove.emit(this.value());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport type { Signal, InputSignal, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { dropdownGroupVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownGroupContext } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * Group header component for categorized dropdown options.\n *\n * @example\n * ```html\n * <com-dropdown-group\n * [label]=\"'Fruits'\"\n * [count]=\"5\"\n * />\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Component({\n selector: 'com-dropdown-group',\n exportAs: 'comDropdownGroup',\n template: `\n @if (groupTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()!\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n } @else {\n <div [class]=\"groupClasses()\">\n <span>{{ label() }}</span>\n @if (showCount()) {\n <span class=\"ml-auto text-xs text-muted-foreground\">\n ({{ count() }})\n </span>\n }\n </div>\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-group-host block',\n role: 'presentation',\n },\n})\nexport class ComDropdownGroup {\n /** The group label/key. */\n readonly label: InputSignal<string> = input.required<string>();\n\n /** The number of options in this group. */\n readonly count: InputSignal<number> = input<number>(0);\n\n /** Whether the group is expanded (for collapsible groups). */\n readonly expanded: InputSignal<boolean> = input<boolean>(true);\n\n /** Whether to show the count badge. */\n readonly showCount: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Additional CSS classes for the group header. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Custom template for rendering the group header. */\n readonly groupTemplate: InputSignal<TemplateRef<ComDropdownGroupContext> | null> =\n input<TemplateRef<ComDropdownGroupContext> | null>(null);\n\n /** Computed CSS classes for the group header. */\n protected readonly groupClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownGroupVariants({ size: this.size() });\n return mergeClasses(baseClasses, this.userClass());\n });\n\n /** Template context for custom group templates. */\n protected readonly templateContext: Signal<ComDropdownGroupContext> = computed(() => ({\n $implicit: this.label(),\n expanded: this.expanded(),\n count: this.count(),\n }));\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownOptionContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom option template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\">\n * <ng-template comDropdownOption let-user let-selected=\"selected\">\n * <div class=\"flex items-center gap-2\">\n * <span>{{ user.name }}</span>\n * @if (selected) {\n * <svg class=\"h-4 w-4\"><!-- check --></svg>\n * }\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownOption]',\n})\nexport class ComDropdownOptionTpl<T> {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownOptionContext<T>> = inject<TemplateRef<ComDropdownOptionContext<T>>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard<T>(\n _dir: ComDropdownOptionTpl<T>,\n ctx: unknown\n ): ctx is ComDropdownOptionContext<T> {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownSelectedContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom selected value template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\">\n * <ng-template comDropdownSelected let-user>\n * @if (user) {\n * <div class=\"flex items-center gap-2\">\n * <img [src]=\"user.avatar\" class=\"h-5 w-5 rounded-full\" />\n * {{ user.name }}\n * </div>\n * } @else {\n * <span class=\"text-input-placeholder\">Select user...</span>\n * }\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownSelected]',\n})\nexport class ComDropdownSelectedTpl<T> {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownSelectedContext<T>> = inject<TemplateRef<ComDropdownSelectedContext<T>>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard<T>(\n _dir: ComDropdownSelectedTpl<T>,\n ctx: unknown\n ): ctx is ComDropdownSelectedContext<T> {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownEmptyContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom empty state template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [searchable]=\"true\">\n * <ng-template comDropdownEmpty let-query>\n * <div class=\"flex flex-col items-center gap-2 py-6\">\n * <svg class=\"h-8 w-8 text-muted-foreground\"><!-- search icon --></svg>\n * <span>No results for \"{{ query }}\"</span>\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownEmpty]',\n})\nexport class ComDropdownEmptyTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownEmptyContext> = inject<TemplateRef<ComDropdownEmptyContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComDropdownEmptyTpl,\n ctx: unknown\n ): ctx is ComDropdownEmptyContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownGroupContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom group header template.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [groupBy]=\"groupByDepartment\">\n * <ng-template comDropdownGroup let-group let-count=\"count\">\n * <div class=\"flex items-center justify-between\">\n * <span class=\"font-semibold\">{{ group }}</span>\n * <span class=\"text-xs text-muted-foreground\">({{ count }})</span>\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownGroup]',\n})\nexport class ComDropdownGroupTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownGroupContext> = inject<TemplateRef<ComDropdownGroupContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComDropdownGroupTpl,\n ctx: unknown\n ): ctx is ComDropdownGroupContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComDropdownTagContext } from '../dropdown.models';\n\n/**\n * Directive to mark a template as the custom tag template (multi-select mode).\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-dropdown [options]=\"users()\" [multiple]=\"true\">\n * <ng-template comDropdownTag let-user let-remove=\"remove\">\n * <div class=\"flex items-center gap-1 rounded bg-primary-subtle px-2 py-0.5 text-primary-subtle-foreground\">\n * <img [src]=\"user.avatar\" class=\"h-4 w-4 rounded-full\" />\n * <span>{{ user.name }}</span>\n * <button type=\"button\" (click)=\"remove()\" class=\"ml-1\">\n * <svg class=\"h-3 w-3\"><!-- x icon --></svg>\n * </button>\n * </div>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Directive({\n selector: 'ng-template[comDropdownTag]',\n})\nexport class ComDropdownTagTpl<T> {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComDropdownTagContext<T>> = inject<TemplateRef<ComDropdownTagContext<T>>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard<T>(\n _dir: ComDropdownTagTpl<T>,\n ctx: unknown\n ): ctx is ComDropdownTagContext<T> {\n return true;\n }\n}\n","import { TemplateRef } from '@angular/core';\n\n/**\n * Context provided to the custom option template.\n * @template T The type of the option value.\n */\nexport interface ComDropdownOptionContext<T> {\n /** The option value (available as implicit $implicit). */\n $implicit: T;\n /** The index of this option in the filtered list. */\n index: number;\n /** Whether this option is currently selected. */\n selected: boolean;\n /** Whether this option is currently active (focused via keyboard). */\n active: boolean;\n /** Whether this option is disabled. */\n disabled: boolean;\n}\n\n/**\n * Context provided to the custom selected value template.\n * @template T The type of the option value.\n */\nexport interface ComDropdownSelectedContext<T> {\n /** The selected value(s) (available as implicit $implicit). */\n $implicit: T | T[] | null;\n /** The placeholder text when no value is selected. */\n placeholder: string;\n /** Whether multiple selection is enabled. */\n multiple: boolean;\n}\n\n/**\n * Context provided to the custom empty state template.\n */\nexport interface ComDropdownEmptyContext {\n /** The current search query (available as implicit $implicit). */\n $implicit: string;\n}\n\n/**\n * Context provided to the custom group header template.\n */\nexport interface ComDropdownGroupContext {\n /** The group key/label (available as implicit $implicit). */\n $implicit: string;\n /** Whether the group is expanded. */\n expanded: boolean;\n /** The number of options in this group. */\n count: number;\n}\n\n/**\n * Context provided to the custom tag template (multi-select mode).\n * @template T The type of the option value.\n */\nexport interface ComDropdownTagContext<T> {\n /** The tag value (available as implicit $implicit). */\n $implicit: T;\n /** The index of this tag. */\n index: number;\n /** Function to remove this tag. */\n remove: () => void;\n}\n\n/**\n * Represents a grouped collection of options.\n * @template T The type of the option value.\n */\nexport interface ComDropdownGroup<T> {\n /** The group key/label. */\n key: string;\n /** The options belonging to this group. */\n options: T[];\n /** Whether the group is expanded (for collapsible groups). */\n expanded: boolean;\n}\n\n/**\n * Internal representation of a processed option.\n * @template T The type of the option value.\n */\nexport interface ComDropdownProcessedOption<T> {\n /** The original option value. */\n value: T;\n /** The display text for this option. */\n displayText: string;\n /** Whether this option is disabled. */\n disabled: boolean;\n /** The group this option belongs to (if grouped). */\n group?: string;\n /** Unique identifier for tracking. */\n id: string;\n}\n\n/**\n * Configuration for dropdown positioning.\n */\nexport interface ComDropdownPosition {\n /** The origin X position. */\n originX: 'start' | 'center' | 'end';\n /** The origin Y position. */\n originY: 'top' | 'center' | 'bottom';\n /** The overlay X position. */\n overlayX: 'start' | 'center' | 'end';\n /** The overlay Y position. */\n overlayY: 'top' | 'center' | 'bottom';\n /** Offset along the X axis. */\n offsetX?: number;\n /** Offset along the Y axis. */\n offsetY?: number;\n}\n\n/**\n * Panel width configuration.\n */\nexport type ComDropdownPanelWidth = 'trigger' | 'auto' | string;\n\n/**\n * Default compare function for primitive values.\n * @param a First value.\n * @param b Second value.\n * @returns Whether the values are equal.\n */\nexport function defaultCompareWith<T>(a: T, b: T): boolean {\n return a === b;\n}\n\n/**\n * Default display function for converting values to strings.\n * @param value The value to display.\n * @returns The string representation.\n */\nexport function defaultDisplayWith<T>(value: T): string {\n if (value === null || value === undefined) {\n return '';\n }\n return String(value);\n}\n\n/**\n * Default filter function for search.\n * @param option The option to test.\n * @param query The search query.\n * @param displayWith The display function to get the searchable text.\n * @returns Whether the option matches the query.\n */\nexport function defaultFilterWith<T>(\n option: T,\n query: string,\n displayWith: (value: T) => string\n): boolean {\n const text = displayWith(option).toLowerCase();\n return text.includes(query.toLowerCase());\n}\n\n/**\n * Template directive types for content projection.\n */\nexport interface ComDropdownTemplates<T> {\n /** Custom template for rendering options. */\n optionTemplate?: TemplateRef<ComDropdownOptionContext<T>>;\n /** Custom template for rendering the selected value. */\n selectedTemplate?: TemplateRef<ComDropdownSelectedContext<T>>;\n /** Custom template for the empty state. */\n emptyTemplate?: TemplateRef<ComDropdownEmptyContext>;\n /** Custom template for group headers. */\n groupTemplate?: TemplateRef<ComDropdownGroupContext>;\n /** Custom template for tags in multi-select mode. */\n tagTemplate?: TemplateRef<ComDropdownTagContext<T>>;\n}\n\n/**\n * Unique ID counter for generating option IDs.\n */\nlet uniqueIdCounter = 0;\n\n/**\n * Generates a unique ID for dropdown options.\n * @param prefix Optional prefix for the ID.\n * @returns A unique ID string.\n */\nexport function generateDropdownId(prefix = 'com-dropdown'): string {\n return `${prefix}-${uniqueIdCounter++}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport type {\n InputSignal,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { FormFieldControl, ErrorStateMatcher, type FormFieldAppearance } from 'ngx-com/components/form-field';\nimport {\n Overlay,\n OverlayRef,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport type { ConnectedPosition } from '@angular/cdk/overlay';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ComDropdownOption } from './dropdown-option.component';\n\nimport { ComDropdownSearch } from './dropdown-search.component';\nimport { ComDropdownTag } from './dropdown-tag.component';\nimport { ComDropdownGroup } from './dropdown-group.component';\nimport { ComDropdownOptionTpl } from './directives/dropdown-option-tpl.directive';\nimport { ComDropdownSelectedTpl } from './directives/dropdown-selected-tpl.directive';\nimport { ComDropdownEmptyTpl } from './directives/dropdown-empty-tpl.directive';\nimport { ComDropdownGroupTpl } from './directives/dropdown-group-tpl.directive';\nimport { ComDropdownTagTpl } from './directives/dropdown-tag-tpl.directive';\nimport {\n dropdownTriggerVariants,\n dropdownChevronVariants,\n dropdownClearVariants,\n dropdownOverflowBadgeVariants,\n} from './dropdown.variants';\nimport type {\n DropdownVariant,\n DropdownSize,\n DropdownState,\n} from './dropdown.variants';\nimport type {\n ComDropdownSelectedContext,\n ComDropdownEmptyContext,\n ComDropdownProcessedOption,\n ComDropdownGroup as DropdownGroupType,\n ComDropdownPanelWidth,\n} from './dropdown.models';\nimport {\n defaultCompareWith,\n defaultDisplayWith,\n defaultFilterWith,\n generateDropdownId,\n} from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/** Default position for the dropdown panel. */\nconst DEFAULT_POSITIONS: ConnectedPosition[] = [\n // Below trigger, aligned start\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned start\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n // Below trigger, aligned end\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n // Above trigger, aligned end\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n];\n\n/** Threshold for enabling virtual scrolling. */\nconst VIRTUAL_SCROLL_THRESHOLD = 50;\n\n/**\n * Reusable dropdown/select component with full accessibility support.\n * Implements ControlValueAccessor for Reactive Forms integration.\n *\n * @tokens `--color-input-background`, `--color-input-foreground`, `--color-input-border`,\n * `--color-input-placeholder`, `--color-ring`, `--color-muted`, `--color-muted-foreground`,\n * `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-primary`, `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n * `--color-warn`, `--color-success`, `--color-disabled`, `--color-disabled-foreground`,\n * `--color-placeholder`\n *\n * @example\n * ```html\n * <com-dropdown\n * [options]=\"users()\"\n * [compareWith]=\"compareById\"\n * formControlName=\"assignee\"\n * placeholder=\"Select user...\"\n * [searchable]=\"true\"\n * >\n * <ng-template comDropdownOption let-user let-selected=\"selected\">\n * <span>{{ user.name }}</span>\n * </ng-template>\n * </com-dropdown>\n * ```\n */\n@Component({\n selector: 'com-dropdown',\n exportAs: 'comDropdown',\n template: `\n <!-- Trigger button -->\n <button\n #triggerElement\n type=\"button\"\n role=\"combobox\"\n [class]=\"triggerClasses()\"\n [attr.id]=\"triggerId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-activedescendant]=\"activeDescendant()\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"effectiveState() === 'error' || null\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-label]=\"hasValue() ? null : placeholder()\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <!-- Selected value display -->\n <span class=\"flex-1 truncate text-left\">\n @if (selectedTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!.templateRef\"\n [ngTemplateOutletContext]=\"selectedContext()\"\n />\n } @else if (multiple()) {\n @if (selectedValues().length > 0) {\n <span class=\"flex flex-wrap gap-1\">\n @for (item of visibleTags(); track trackByValue(item, $index); let i = $index) {\n <com-dropdown-tag\n [value]=\"item\"\n [displayText]=\"displayWith()(item)\"\n [index]=\"i\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [tagTemplate]=\"tagTemplate()?.templateRef ?? null\"\n (remove)=\"removeValue($event)\"\n />\n }\n @if (hiddenTagsCount() > 0) {\n <span [class]=\"overflowBadgeClasses()\">\n +{{ hiddenTagsCount() }}\n </span>\n }\n </span>\n } @else {\n <span class=\"text-placeholder\">{{ placeholder() }}</span>\n }\n } @else {\n @if (selectedValue() !== null && selectedValue() !== undefined) {\n {{ displayWith()(selectedValue()!) }}\n } @else {\n <span class=\"text-placeholder\">{{ placeholder() }}</span>\n }\n }\n </span>\n\n <!-- Clear button -->\n @if (clearable() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n [class]=\"clearClasses()\"\n [attr.aria-label]=\"'Clear selection'\"\n (click)=\"clear($event)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-full w-full\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n\n <!-- Chevron icon -->\n <svg\n [class]=\"chevronClasses()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n <!-- Panel template (rendered in overlay) -->\n <ng-template #panelTemplate>\n <div\n #panelElement\n [class]=\"panelClasses()\"\n [attr.id]=\"panelId()\"\n [attr.role]=\"'listbox'\"\n tabindex=\"-1\"\n [attr.aria-multiselectable]=\"multiple() || null\"\n [attr.aria-label]=\"placeholder()\"\n (keydown)=\"onPanelKeydown($event)\"\n >\n <!-- Search input -->\n @if (searchable()) {\n <com-dropdown-search\n [placeholder]=\"searchPlaceholder()\"\n [size]=\"size()\"\n [debounceMs]=\"searchDebounceMs()\"\n (searchChange)=\"onSearchChange($event)\"\n (keyNav)=\"onSearchKeyNav($event)\"\n />\n }\n\n <!-- Options list -->\n @if (virtualScrollEnabled() && groupedOptions().length === 0 && filteredOptions().length > 0) {\n <!-- Virtual scrolling for large ungrouped lists -->\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n [maxBufferPx]=\"400\"\n [minBufferPx]=\"200\"\n [style.height]=\"maxHeight()\"\n class=\"overflow-auto\"\n >\n <com-dropdown-option\n *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackByOption; let i = index\"\n [value]=\"option.value\"\n [displayText]=\"option.displayText\"\n [id]=\"option.id\"\n [index]=\"i\"\n [selected]=\"isSelected(option.value)\"\n [active]=\"isActive(option.id)\"\n [disabled]=\"option.disabled\"\n [size]=\"size()\"\n [optionTemplate]=\"optionTemplate()?.templateRef ?? null\"\n (select)=\"selectOption($event)\"\n (hover)=\"onOptionHover(option.id)\"\n />\n </cdk-virtual-scroll-viewport>\n } @else {\n <!-- Standard rendering for small lists and grouped options -->\n <div\n class=\"overflow-auto\"\n [style.maxHeight]=\"maxHeight()\"\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 {\n <!-- Empty state -->\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 </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 ],\n providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComDropdown) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-host inline-block',\n '[class.com-dropdown-disabled]': 'disabled()',\n '[class.com-dropdown-open]': 'isOpen()',\n },\n})\nexport class ComDropdown<T> implements ControlValueAccessor, FormFieldControl<T | T[] | null> {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n /** NgControl bound to this dropdown (if using reactive forms). */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the trigger button element. */\n private readonly triggerRef: Signal<ElementRef<HTMLButtonElement>> =\n viewChild.required<ElementRef<HTMLButtonElement>>('triggerElement');\n\n /** Reference to the panel template. */\n private readonly panelTemplateRef: Signal<TemplateRef<unknown>> =\n viewChild.required<TemplateRef<unknown>>('panelTemplate');\n\n /** Reference to the virtual scroll viewport (when enabled). */\n private readonly virtualViewport: Signal<CdkVirtualScrollViewport | undefined> =\n viewChild<CdkVirtualScrollViewport>(CdkVirtualScrollViewport);\n\n /** Content query for custom option template. */\n protected readonly optionTemplate: Signal<ComDropdownOptionTpl<T> | undefined> =\n contentChild<ComDropdownOptionTpl<T>>(ComDropdownOptionTpl);\n\n /** Content query for custom selected template. */\n protected readonly selectedTemplate: Signal<ComDropdownSelectedTpl<T> | undefined> =\n contentChild<ComDropdownSelectedTpl<T>>(ComDropdownSelectedTpl);\n\n /** Content query for custom empty template. */\n protected readonly emptyTemplate: Signal<ComDropdownEmptyTpl | undefined> =\n contentChild<ComDropdownEmptyTpl>(ComDropdownEmptyTpl);\n\n /** Content query for custom group template. */\n protected readonly groupTemplate: Signal<ComDropdownGroupTpl | undefined> =\n contentChild<ComDropdownGroupTpl>(ComDropdownGroupTpl);\n\n /** Content query for custom tag template. */\n protected readonly tagTemplate: Signal<ComDropdownTagTpl<T> | undefined> =\n contentChild<ComDropdownTagTpl<T>>(ComDropdownTagTpl);\n\n /** Overlay reference. */\n private overlayRef: OverlayRef | null = null;\n\n /** Unique ID for the dropdown. */\n private readonly dropdownId = generateDropdownId();\n\n // ============ INPUTS ============\n\n /** Array of options to display. */\n readonly options: InputSignal<T[]> = input<T[]>([]);\n\n /** Current value (single or array for multiple). */\n readonly value: ModelSignal<T | T[] | null> = model<T | T[] | null>(null);\n\n /** Placeholder text when no value is selected. */\n readonly placeholder: InputSignal<string> = input<string>('Select...');\n\n /** Enable multi-select mode. */\n readonly multiple: InputSignal<boolean> = input<boolean>(false);\n\n /** Enable search/filter input. */\n readonly searchable: InputSignal<boolean> = input<boolean>(false);\n\n /** Search input placeholder. */\n readonly searchPlaceholder: InputSignal<string> = input<string>('Search...');\n\n /** Disable the dropdown. */\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n\n /** Mark as required. */\n readonly required: InputSignal<boolean> = input<boolean>(false);\n\n /** Show clear button. */\n readonly clearable: InputSignal<boolean> = input<boolean>(false);\n\n /** Custom equality function for comparing values. */\n readonly compareWith: InputSignal<(a: T, b: T) => boolean> = input<(a: T, b: T) => boolean>(defaultCompareWith);\n\n /** Function to get display text from a value. */\n readonly displayWith: InputSignal<(value: T) => string> = input<(value: T) => string>(defaultDisplayWith);\n\n /** Custom filter function for search. */\n readonly filterWith: InputSignal<((option: T, query: string) => boolean) | null> =\n input<((option: T, query: string) => boolean) | null>(null);\n\n /** Function to group options by a key. */\n readonly groupBy: InputSignal<((option: T) => string) | null> = input<((option: T) => string) | null>(null);\n\n /** CVA variant for trigger styling. */\n readonly variant: InputSignal<DropdownVariant> = input<DropdownVariant>('default');\n\n /** Size variant. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Validation state. */\n readonly state: InputSignal<DropdownState> = input<DropdownState>('default');\n\n /** Additional CSS classes for the trigger. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Maximum height of the panel. */\n readonly maxHeight: InputSignal<string> = input<string>('256px');\n\n /** Panel width strategy. */\n readonly panelWidth: InputSignal<ComDropdownPanelWidth> = input<ComDropdownPanelWidth>('trigger');\n\n /** Debounce time for search (ms). */\n readonly searchDebounceMs: InputSignal<number> = input<number>(300);\n\n /** Virtual scroll threshold. */\n readonly virtualScrollThreshold: InputSignal<number> = input<number>(VIRTUAL_SCROLL_THRESHOLD);\n\n /** Item size in pixels for virtual scrolling. */\n readonly virtualScrollItemSize: InputSignal<number> = input<number>(40);\n\n /** Maximum number of tags to display in multi-select mode. Set to null for no limit. */\n readonly maxVisibleTags: InputSignal<number | null> = input<number | null>(2);\n\n /** Custom error state matcher for determining when to show errors. */\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n // 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 // ============ 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 /** IDs for aria-describedby (set by form-field). */\n private readonly _describedByIds: WritableSignal<string> = signal('');\n\n /** Form field appearance (set by form-field). */\n private readonly _appearance: WritableSignal<FormFieldAppearance> = signal<FormFieldAppearance>('outline');\n\n // ============ COMPUTED STATE ============\n\n /** Trigger element ID. */\n readonly triggerId: Signal<string> = computed(() => `${this.dropdownId}-trigger`);\n\n /** Panel element ID. */\n readonly panelId: Signal<string> = computed(() => `${this.dropdownId}-panel`);\n\n /** Currently active descendant ID (for ARIA). */\n readonly activeDescendant: Signal<string | null> = computed(() => {\n return this.isOpen() ? this.activeOptionId() : null;\n });\n\n /** Whether the dropdown has a value. */\n readonly hasValue: Signal<boolean> = computed(() => {\n const val = this.internalValue();\n if (this.multiple()) {\n return Array.isArray(val) && val.length > 0;\n }\n return val !== null && val !== undefined;\n });\n\n // ============ FormFieldControl SIGNALS ============\n\n /** Whether the dropdown is focused (trigger focused or panel open). Implements FormFieldControl. */\n readonly focused: Signal<boolean> = computed(() => this._triggerFocused() || this.isOpen());\n\n /** Whether the label should float. Label floats when focused or has a value. */\n readonly shouldLabelFloat: Signal<boolean> = computed(() => this.focused() || this.hasValue());\n\n /** Whether the control is in an error state. Implements FormFieldControl. */\n readonly errorState: Signal<boolean> = computed(() => {\n if (!this.ngControl) {\n // Signal Forms: gate on invalid AND touched (mirrors ErrorStateMatcher default)\n return this.invalid() && this.touched();\n }\n // Reactive Forms: use ErrorStateMatcher (existing logic)\n this.isOpen();\n this.hasValue();\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n return matcher.isErrorState(this.ngControl.control ?? null, form);\n });\n\n /** Structured validation errors from Signal Forms, exposed for the parent form field. */\n readonly errors: Signal<readonly unknown[] | null> = computed(() =>\n !this.ngControl ? this.sfErrors() : null\n );\n\n /** Unique ID for the control. Implements FormFieldControl. */\n readonly id: Signal<string> = this.triggerId;\n\n /**\n * Effective state combining manual state with automatic error detection.\n * Manual state takes precedence over auto-detected error state.\n */\n readonly effectiveState: Signal<DropdownState> = computed(() => {\n const manualState = this.state();\n if (manualState !== 'default') return manualState;\n return this.errorState() ? 'error' : 'default';\n });\n\n /** Combined aria-describedby from form-field. */\n readonly ariaDescribedBy: Signal<string | null> = computed(() => this._describedByIds() || null);\n\n /** Selected value (single mode). */\n readonly selectedValue: Signal<T | null> = computed(() => {\n const val = this.internalValue();\n if (this.multiple() || Array.isArray(val)) {\n return null;\n }\n return val;\n });\n\n /** Selected values (multiple mode). */\n readonly selectedValues: Signal<T[]> = computed(() => {\n const val = this.internalValue();\n if (!this.multiple()) {\n return [];\n }\n return Array.isArray(val) ? val : val !== null ? [val] : [];\n });\n\n /** Tags visible in the trigger (limited by maxVisibleTags). */\n readonly visibleTags: Signal<T[]> = computed(() => {\n const all = this.selectedValues();\n const max = this.maxVisibleTags();\n if (max === null || all.length <= max) {\n return all;\n }\n return all.slice(0, max);\n });\n\n /** Count of hidden tags (for +N badge). */\n readonly hiddenTagsCount: Signal<number> = computed(() => {\n const all = this.selectedValues();\n const max = this.maxVisibleTags();\n if (max === null || all.length <= max) {\n return 0;\n }\n return all.length - max;\n });\n\n /** Processed options with display text and IDs. */\n readonly processedOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n const opts = this.options();\n const display = this.displayWith();\n return opts.map((opt, index) => ({\n value: opt,\n displayText: display(opt),\n disabled: false, // Could be extended with disabledWith input\n id: `${this.dropdownId}-option-${index}`,\n }));\n });\n\n /** Filtered options based on search query. */\n readonly filteredOptions: Signal<ComDropdownProcessedOption<T>[]> = computed(() => {\n const opts = this.processedOptions();\n const query = this.searchQuery().trim();\n\n if (!query) {\n return opts;\n }\n\n const filterFn = this.filterWith();\n const display = this.displayWith();\n\n return opts.filter((opt) => {\n if (filterFn) {\n return filterFn(opt.value, query);\n }\n return defaultFilterWith(opt.value, query, display);\n });\n });\n\n /** Grouped options (when groupBy is provided). */\n readonly groupedOptions: Signal<DropdownGroupType<ComDropdownProcessedOption<T>>[]> = computed(() => {\n const groupFn = this.groupBy();\n if (!groupFn) {\n return [];\n }\n\n const opts = this.filteredOptions();\n const groups = new Map<string, ComDropdownProcessedOption<T>[]>();\n\n for (const opt of opts) {\n const key = groupFn(opt.value);\n const existing = groups.get(key) || [];\n existing.push(opt);\n groups.set(key, existing);\n }\n\n return Array.from(groups.entries()).map(([key, options]) => ({\n key,\n options,\n expanded: true,\n }));\n });\n\n /** Whether virtual scrolling should be enabled. */\n readonly virtualScrollEnabled: Signal<boolean> = computed(() => {\n return this.filteredOptions().length > this.virtualScrollThreshold();\n });\n\n /** Context for selected template. */\n readonly selectedContext: Signal<ComDropdownSelectedContext<T>> = computed(() => ({\n $implicit: this.internalValue(),\n placeholder: this.placeholder(),\n multiple: this.multiple(),\n }));\n\n /** Context for empty template. */\n readonly emptyContext: Signal<ComDropdownEmptyContext> = computed(() => ({\n $implicit: this.searchQuery(),\n }));\n\n /** Computed trigger classes. */\n readonly triggerClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n state: this.effectiveState(),\n open: this.isOpen(),\n });\n\n // For naked variant, add padding based on form-field appearance\n let paddingClasses = '';\n if (this.variant() === 'naked') {\n paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';\n }\n\n return mergeClasses(baseClasses, paddingClasses, this.userClass());\n });\n\n /** Computed panel classes. */\n readonly panelClasses: Signal<string> = computed(() => {\n return mergeClasses(\n 'w-full z-50 overflow-hidden rounded-overlay border border-border-subtle bg-popover text-popover-foreground shadow-overlay outline-none',\n this.panelClass()\n );\n });\n\n /** Computed chevron classes. */\n readonly chevronClasses: Signal<string> = computed(() => {\n return dropdownChevronVariants({\n size: this.size(),\n open: this.isOpen(),\n });\n });\n\n /** Computed clear button classes. */\n readonly clearClasses: Signal<string> = computed(() => {\n return dropdownClearVariants({ size: this.size() });\n });\n\n /** Computed overflow badge classes. */\n readonly overflowBadgeClasses: Signal<string> = computed(() => {\n return dropdownOverflowBadgeVariants({ size: this.size() });\n });\n\n // ============ 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\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\n /** Closes the dropdown panel. */\n close(): void {\n if (!this.isOpen()) {\n return;\n }\n\n this.destroyOverlay();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.activeOptionId.set(null);\n this.closed.emit();\n this.onTouched();\n this.touched.set(true);\n }\n\n /** Toggles the dropdown panel. */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Clears the selection. */\n clear(event?: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n\n const newValue = this.multiple() ? [] : null;\n this.updateValue(newValue);\n this.announce('Selection cleared');\n }\n\n /** Checks if a value is selected. */\n isSelected(value: T): boolean {\n const current = this.internalValue();\n const compare = this.compareWith();\n\n if (this.multiple()) {\n const arr = Array.isArray(current) ? current : [];\n return arr.some((v) => compare(v, value));\n }\n\n return current !== null && compare(current as T, value);\n }\n\n /** Checks if an option ID is the active one. */\n isActive(optionId: string): boolean {\n return this.activeOptionId() === optionId;\n }\n\n // ============ EVENT HANDLERS ============\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.navigateOptions(event.key === 'ArrowDown' ? 1 : -1);\n }\n break;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen() && this.activeOptionId()) {\n this.selectActiveOption();\n } else {\n this.toggle();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.close();\n this.triggerRef().nativeElement.focus();\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.navigateToFirst();\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.navigateToLast();\n }\n break;\n\n case 'Tab':\n // Close panel when tabbing away from trigger\n if (this.isOpen()) {\n this.close();\n }\n // Don't prevent default - let Tab naturally move focus\n break;\n\n default:\n // Type-ahead search\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey) {\n this.typeAhead(event.key);\n }\n break;\n }\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.navigateOptions(1);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this.navigateOptions(-1);\n break;\n\n case 'Enter':\n case ' ':\n if (event.key === ' ' && this.searchable() && event.target instanceof HTMLInputElement) {\n return;\n }\n event.preventDefault();\n this.selectActiveOption();\n break;\n\n case 'Escape':\n event.preventDefault();\n this.close();\n this.triggerRef().nativeElement.focus();\n break;\n\n case 'Tab':\n this.close();\n break;\n\n case 'Home':\n event.preventDefault();\n this.navigateToFirst();\n break;\n\n case 'End':\n event.preventDefault();\n this.navigateToLast();\n break;\n }\n }\n\n protected onSearchChange(query: string): void {\n this.searchQuery.set(query);\n this.searchChange.emit(query);\n\n // Reset active option to first result\n const filtered = this.filteredOptions();\n const firstFiltered = filtered[0];\n if (firstFiltered) {\n this.activeOptionId.set(firstFiltered.id);\n } else {\n this.activeOptionId.set(null);\n }\n }\n\n protected onSearchKeyNav(event: KeyboardEvent): void {\n // Delegate to panel keydown handler\n this.onPanelKeydown(event);\n }\n\n protected onTriggerFocus(): void {\n this._triggerFocused.set(true);\n }\n\n protected onTriggerBlur(): void {\n this._triggerFocused.set(false);\n }\n\n protected onOptionHover(optionId: string): void {\n this.activeOptionId.set(optionId);\n }\n\n protected selectOption(value: T): void {\n if (this.multiple()) {\n this.toggleMultipleValue(value);\n } else {\n this.updateValue(value);\n this.close();\n this.triggerRef().nativeElement.focus();\n }\n }\n\n protected removeValue(value: T): void {\n const current = this.selectedValues();\n const compare = this.compareWith();\n const newValues = current.filter((v) => !compare(v, value));\n this.updateValue(newValues.length > 0 ? newValues : []);\n this.announce(`${this.displayWith()(value)} removed`);\n }\n\n protected trackByValue(item: T, _index: number): unknown {\n return item;\n }\n\n /** Track function for virtual scroll options. */\n protected trackByOption(_index: number, option: ComDropdownProcessedOption<T>): string {\n return option.id;\n }\n\n protected getGlobalIndex(groupKey: string, localIndex: number): number {\n const groups = this.groupedOptions();\n let globalIndex = 0;\n\n for (const group of groups) {\n if (group.key === groupKey) {\n return globalIndex + localIndex;\n }\n globalIndex += group.options.length;\n }\n\n return localIndex;\n }\n\n // ============ PRIVATE METHODS ============\n\n private createOverlay(): void {\n if (this.overlayRef) {\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(hostEl)\n .withPositions(DEFAULT_POSITIONS)\n .withFlexibleDimensions(false)\n .withPush(true);\n\n const hostWidth = hostEl.getBoundingClientRect?.()?.width ?? 0;\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n ...this.getPanelWidthConfig(hostWidth),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n // Attach panel template\n const portal = new TemplatePortal(this.panelTemplateRef(), this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n // Close on backdrop click\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n\n // Close on outside click\n this.overlayRef\n .outsidePointerEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n /**\n * Returns overlay width configuration based on panelWidth setting.\n * - 'trigger': min-width equals host, can grow wider\n * - 'auto': no width constraint\n * - specific value: exact width\n */\n private getPanelWidthConfig(hostWidth: number): { minWidth?: number; width?: string } {\n const config = this.panelWidth();\n if (config === 'trigger') {\n return { minWidth: hostWidth };\n }\n if (config === 'auto') {\n return {};\n }\n return { width: config };\n }\n\n private updateValue(value: T | T[] | null): void {\n this.value.set(value);\n this.onChange(value);\n\n // Announce selection\n if (value !== null && !Array.isArray(value)) {\n this.announce(`${this.displayWith()(value)} selected`);\n }\n }\n\n private toggleMultipleValue(value: T): void {\n const current = this.selectedValues();\n const compare = this.compareWith();\n const isAlreadySelected = current.some((v) => compare(v, value));\n\n let newValues: T[];\n if (isAlreadySelected) {\n newValues = current.filter((v) => !compare(v, value));\n this.announce(`${this.displayWith()(value)} deselected`);\n } else {\n newValues = [...current, value];\n this.announce(`${this.displayWith()(value)} selected`);\n }\n\n this.updateValue(newValues.length > 0 ? newValues : []);\n }\n\n private navigateOptions(direction: 1 | -1): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n if (options.length === 0) {\n return;\n }\n\n const currentId = this.activeOptionId();\n let currentIndex = options.findIndex((opt) => opt.id === currentId);\n\n if (currentIndex === -1) {\n currentIndex = direction === 1 ? -1 : options.length;\n }\n\n let nextIndex = currentIndex + direction;\n\n // Wrap around\n if (nextIndex < 0) {\n nextIndex = options.length - 1;\n } else if (nextIndex >= options.length) {\n nextIndex = 0;\n }\n\n // Skip disabled options\n const startIndex = nextIndex;\n let currentOption = options[nextIndex];\n while (currentOption?.disabled) {\n nextIndex += direction;\n if (nextIndex < 0) nextIndex = options.length - 1;\n else if (nextIndex >= options.length) nextIndex = 0;\n if (nextIndex === startIndex) return; // All disabled\n currentOption = options[nextIndex];\n }\n\n const targetOption = options[nextIndex];\n if (targetOption) {\n this.activeOptionId.set(targetOption.id);\n this.scrollActiveOptionIntoView(nextIndex, targetOption.id);\n }\n }\n\n private navigateToFirst(): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const firstEnabled = options.find((opt) => !opt.disabled);\n if (firstEnabled) {\n const index = options.indexOf(firstEnabled);\n this.activeOptionId.set(firstEnabled.id);\n this.scrollActiveOptionIntoView(index, firstEnabled.id);\n }\n }\n\n private navigateToLast(): void {\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const lastEnabled = [...options].reverse().find((opt) => !opt.disabled);\n if (lastEnabled) {\n const index = options.indexOf(lastEnabled);\n this.activeOptionId.set(lastEnabled.id);\n this.scrollActiveOptionIntoView(index, lastEnabled.id);\n }\n }\n\n /** Scrolls the active option into view, using virtual viewport or native scroll. */\n private scrollActiveOptionIntoView(index: number, optionId: string): void {\n const viewport = this.virtualViewport();\n if (viewport) {\n viewport.scrollToIndex(index);\n } else {\n const panelEl = this.overlayRef?.overlayElement;\n const optionEl = panelEl?.querySelector(`[id=\"${optionId}\"]`) as HTMLElement | null;\n optionEl?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n private selectActiveOption(): void {\n const activeId = this.activeOptionId();\n if (!activeId) return;\n\n const options = this.groupBy() ? this.flattenGroupedOptions() : this.filteredOptions();\n const option = options.find((opt) => opt.id === activeId);\n\n if (option && !option.disabled) {\n this.selectOption(option.value);\n }\n }\n\n private flattenGroupedOptions(): ComDropdownProcessedOption<T>[] {\n return this.groupedOptions().flatMap((group) => group.options);\n }\n\n private typeAhead(char: string): void {\n // Simple type-ahead: find first option starting with the character\n const options = this.filteredOptions();\n const display = this.displayWith();\n const lowerChar = char.toLowerCase();\n\n const match = options.find((opt) => !opt.disabled && display(opt.value).toLowerCase().startsWith(lowerChar));\n\n if (match) {\n this.activeOptionId.set(match.id);\n if (!this.isOpen()) {\n this.selectOption(match.value);\n }\n }\n }\n\n private announce(message: string): void {\n this.liveAnnouncement.set(message);\n this.liveAnnouncer.announce(message, 'polite');\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport type { Signal, InputSignal, OutputEmitterRef, TemplateRef, ElementRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport { dropdownPanelVariants, dropdownEmptyVariants } from './dropdown.variants';\nimport type { DropdownSize } from './dropdown.variants';\nimport type { ComDropdownEmptyContext, ComDropdownProcessedOption } from './dropdown.models';\nimport { mergeClasses } from './dropdown.utils';\n\n/**\n * The overlay panel containing the dropdown options.\n * Supports virtual scrolling for large lists.\n *\n * @example\n * ```html\n * <com-dropdown-panel\n * [options]=\"filteredOptions()\"\n * [maxHeight]=\"'300px'\"\n * [virtualScrollEnabled]=\"true\"\n * >\n * <ng-content />\n * </com-dropdown-panel>\n * ```\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border-subtle`,\n * `--color-muted-foreground`, `--radius-overlay`\n */\n@Component({\n selector: 'com-dropdown-panel',\n exportAs: 'comDropdownPanel',\n template: `\n <div\n #panelElement\n [class]=\"panelClasses()\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiselectable() || null\"\n [attr.id]=\"panelId()\"\n >\n <!-- Search slot -->\n <ng-content select=\"[comDropdownSearch]\" />\n\n <!-- Options container -->\n @if (virtualScrollEnabled()) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"itemSize()\"\n [maxBufferPx]=\"400\"\n [minBufferPx]=\"200\"\n [style.height]=\"maxHeight()\"\n class=\"overflow-auto\"\n >\n <div\n *cdkVirtualFor=\"let option of options(); trackBy: trackByFn; let i = index\"\n [attr.data-index]=\"i\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n />\n </div>\n </cdk-virtual-scroll-viewport>\n } @else {\n <div\n class=\"overflow-auto\"\n [style.maxHeight]=\"maxHeight()\"\n >\n @for (option of options(); track option.id; let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n />\n }\n </div>\n }\n\n <!-- Empty state -->\n @if (showEmpty()) {\n @if (emptyTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"emptyTemplate()!\"\n [ngTemplateOutletContext]=\"emptyContext()\"\n />\n } @else {\n <div [class]=\"emptyClasses()\">\n {{ emptyText() }}\n </div>\n }\n }\n </div>\n `,\n imports: [\n NgTemplateOutlet,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-dropdown-panel-host block',\n },\n})\nexport class ComDropdownPanel<T> {\n /** Reference to the panel element. */\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panelElement');\n\n /** Reference to the virtual scroll viewport (when enabled). */\n readonly viewport: Signal<CdkVirtualScrollViewport | undefined> = viewChild<CdkVirtualScrollViewport>('viewport');\n\n /** Unique identifier for the panel. */\n readonly panelId: InputSignal<string> = input<string>('');\n\n /** The processed options to display. */\n readonly options: InputSignal<ComDropdownProcessedOption<T>[]> = input<ComDropdownProcessedOption<T>[]>([]);\n\n /** Maximum height of the panel. */\n readonly maxHeight: InputSignal<string> = input<string>('256px');\n\n /** Whether multiple selection is enabled. */\n readonly multiselectable: InputSignal<boolean> = input<boolean>(false);\n\n /** Size variant for styling. */\n readonly size: InputSignal<DropdownSize> = input<DropdownSize>('default');\n\n /** Additional CSS classes to apply to the panel. */\n readonly panelClass: InputSignal<string> = input<string>('');\n\n /** Whether virtual scrolling is enabled. */\n readonly virtualScrollEnabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Item size for virtual scrolling (in pixels). */\n readonly itemSize: InputSignal<number> = input<number>(40);\n\n /** The current search query (for empty state context). */\n readonly searchQuery: InputSignal<string> = input<string>('');\n\n /** Custom empty state text. */\n readonly emptyText: InputSignal<string> = input<string>('No options available');\n\n /** Template for rendering each option. */\n readonly optionTemplate: InputSignal<TemplateRef<{ $implicit: ComDropdownProcessedOption<T>; index: number }>> =\n input.required<TemplateRef<{ $implicit: ComDropdownProcessedOption<T>; index: number }>>();\n\n /** Custom template for the empty state. */\n readonly emptyTemplate: InputSignal<TemplateRef<ComDropdownEmptyContext> | null> =\n input<TemplateRef<ComDropdownEmptyContext> | null>(null);\n\n /** Emitted when the panel is scrolled. */\n readonly scrolled: OutputEmitterRef<void> = output<void>();\n\n /** Whether to show the empty state. */\n protected readonly showEmpty: Signal<boolean> = computed(() => this.options().length === 0);\n\n /** Computed CSS classes for the panel. */\n protected readonly panelClasses: Signal<string> = computed(() => {\n const baseClasses = dropdownPanelVariants({ size: this.size() });\n return mergeClasses(baseClasses, this.panelClass());\n });\n\n /** Computed CSS classes for the empty state. */\n protected readonly emptyClasses: Signal<string> = computed(() => {\n return dropdownEmptyVariants({ size: this.size() });\n });\n\n /** Template context for the empty state. */\n protected readonly emptyContext: Signal<ComDropdownEmptyContext> = computed(() => ({\n $implicit: this.searchQuery(),\n }));\n\n /** Track function for options. */\n protected trackByFn(_index: number, option: ComDropdownProcessedOption<T>): string {\n return option.id;\n }\n\n /** Scrolls to a specific index. */\n scrollToIndex(index: number): void {\n const vp = this.viewport();\n if (this.virtualScrollEnabled() && vp) {\n vp.scrollToIndex(index);\n } else {\n const panelEl = this.panelRef()?.nativeElement;\n const optionEl = panelEl?.querySelector(`[data-index=\"${index}\"]`) as HTMLElement | null;\n optionEl?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n /** Scrolls an option into view. */\n scrollOptionIntoView(optionElement: HTMLElement): void {\n optionElement.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n}\n","// Public API for the dropdown component\n\n// Main component\nexport { ComDropdown } from './dropdown.component';\n\n// Supporting components\nexport { ComDropdownOption } from './dropdown-option.component';\nexport { ComDropdownPanel } from './dropdown-panel.component';\nexport { ComDropdownSearch } from './dropdown-search.component';\nexport { ComDropdownTag } from './dropdown-tag.component';\nexport { ComDropdownGroup } from './dropdown-group.component';\n\n// Template directives\nexport { ComDropdownOptionTpl } from './directives/dropdown-option-tpl.directive';\nexport { ComDropdownSelectedTpl } from './directives/dropdown-selected-tpl.directive';\nexport { ComDropdownEmptyTpl } from './directives/dropdown-empty-tpl.directive';\nexport { ComDropdownGroupTpl } from './directives/dropdown-group-tpl.directive';\nexport { ComDropdownTagTpl } from './directives/dropdown-tag-tpl.directive';\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} 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} from './dropdown.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}