@cdevhub/ngx-tw 0.6.1 → 0.7.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 (47) hide show
  1. package/fesm2022/cdevhub-ngx-tw-alert.mjs +8 -1
  2. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
  3. package/fesm2022/cdevhub-ngx-tw-badge.mjs +18 -8
  4. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  5. package/fesm2022/cdevhub-ngx-tw-button.mjs +14 -8
  6. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  7. package/fesm2022/cdevhub-ngx-tw-card.mjs +7 -7
  8. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  9. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +2 -2
  10. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  11. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +7 -7
  12. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  13. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +8 -8
  14. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  15. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +8 -8
  16. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  17. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +8 -8
  18. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  19. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +16 -16
  20. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  21. package/fesm2022/cdevhub-ngx-tw-input.mjs +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  23. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +7 -7
  24. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  25. package/fesm2022/cdevhub-ngx-tw-popover.mjs +10 -4
  26. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  27. package/fesm2022/cdevhub-ngx-tw-radio.mjs +2 -2
  28. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  29. package/fesm2022/cdevhub-ngx-tw-select.mjs +7 -7
  30. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  31. package/fesm2022/cdevhub-ngx-tw-separator.mjs +7 -7
  32. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  33. package/fesm2022/cdevhub-ngx-tw-slider.mjs +21 -21
  34. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  35. package/fesm2022/cdevhub-ngx-tw-switch.mjs +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  37. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +29 -9
  38. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  39. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +8 -8
  40. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -1
  41. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +8 -8
  43. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  44. package/index.json +1 -1
  45. package/package.json +1 -1
  46. package/types/cdevhub-ngx-tw-tabs.d.ts +23 -3
  47. package/types/cdevhub-ngx-tw-theme.d.ts +18 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cdevhub-ngx-tw-combobox.mjs","sources":["../../../projects/ngx-tw/combobox/combobox-overlay.ts","../../../projects/ngx-tw/combobox/combobox.ts","../../../projects/ngx-tw/combobox/cdevhub-ngx-tw-combobox.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport type { TemplateRef } from '@angular/core';\nimport type {\n ComboboxRenderedRow,\n ComboboxVisibleOption,\n TwComboboxOptionContext,\n} from './types';\n\n/**\n * Internal overlay panel for `tw-combobox`. Renders the listbox region with\n * grouped/flat option rows, the loading slot, and the empty fallback. Not\n * exported from the public API — instances are attached via `ComponentPortal`\n * by the parent `ComboboxComponent`.\n */\n@Component({\n selector: 'tw-combobox-overlay',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: {\n '[class]': 'panelClasses()',\n '[animate.enter]': '\"scale-in\"',\n '[animate.leave]': '\"scale-out\"',\n },\n template: `\n @if (loading()) {\n @if (loadingTemplate(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\" />\n } @else {\n <div class=\"flex items-center justify-center gap-2 px-4 py-6 text-sm text-fg-muted\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n class=\"size-4 animate-spin\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"3\" opacity=\"0.25\" />\n <path\n d=\"M21 12a9 9 0 0 0-9-9\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>Loading…</span>\n </div>\n }\n }\n\n <ul\n [id]=\"listboxId()\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"labelledBy() || null\"\n aria-multiselectable=\"false\"\n [style.maxHeight.px]=\"panelMaxHeight()\"\n class=\"list-none m-0 p-0 overflow-y-auto py-1\"\n >\n @if (renderedRows().length === 0 && !loading()) {\n @if (emptyTemplate(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: query() }\" />\n } @else {\n <li class=\"px-4 py-10 text-center text-sm text-fg-muted list-none\">\n {{ emptyMessage() }}\n </li>\n }\n } @else {\n @for (row of renderedRows(); track trackRow($index, row)) {\n @if (row.kind === 'group') {\n <li\n role=\"group\"\n [attr.aria-labelledby]=\"groupHeaderId(row.group)\"\n class=\"list-none\"\n >\n <div\n [id]=\"groupHeaderId(row.group)\"\n class=\"px-3 py-1 text-2xs uppercase tracking-wide text-fg-subtle font-semibold\"\n >\n {{ row.group }}\n </div>\n </li>\n } @else {\n <!-- ARIA activedescendant listbox: keyboard navigation lives on the\n parent combobox input (via aria-activedescendant). Options are\n click-targets only and never receive DOM focus, so neither a\n keydown nor a tabindex applies here. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <li\n role=\"option\"\n [id]=\"optionIdFn()(row.index)\"\n [attr.aria-selected]=\"isSelected()(row.index) ? 'true' : 'false'\"\n [attr.aria-disabled]=\"row.option.disabled ? 'true' : null\"\n [class]=\"optionClass(row.index, row.option.disabled)\"\n (mousedown)=\"onOptionMousedown($event, row.index)\"\n (click)=\"onOptionClick($event, row.index)\"\n (mouseenter)=\"onOptionMouseEnter(row.index, row.option.disabled)\"\n >\n @if (optionTemplate(); as tpl) {\n <ng-container\n *ngTemplateOutlet=\"\n tpl;\n context: buildOptionContext(row.index, row.option)\n \"\n />\n } @else {\n <span class=\"flex-1 min-w-0\">\n <span class=\"block truncate\">{{ row.option.label }}</span>\n @if (row.option.description) {\n <span class=\"block text-xs text-fg-muted truncate\">{{ row.option.description }}</span>\n }\n </span>\n }\n </li>\n }\n }\n }\n </ul>\n `,\n})\nexport class ComboboxOverlayComponent<T = unknown> {\n /** @internal */\n readonly hostElement = inject(ElementRef<HTMLElement>);\n\n // ── Config signals pushed by the parent ──\n\n /** @internal */\n readonly listboxId = signal('');\n /** @internal */\n readonly labelledBy = signal('');\n /** @internal */\n readonly panelMaxHeight = signal(256);\n /** @internal */\n readonly emptyMessage = signal('No results');\n /** @internal */\n readonly query = signal('');\n /** @internal */\n readonly loading = signal(false);\n /** @internal */\n readonly activeIndex = signal(-1);\n /** @internal */\n readonly renderedRows = signal<readonly ComboboxRenderedRow<T>[]>([]);\n /** @internal */\n readonly isSelected = signal<(visibleIndex: number) => boolean>(() => false);\n /** @internal */\n readonly optionIdFn = signal<(index: number) => string>((i) => `option-${i}`);\n /** @internal */\n readonly groupHeaderIdFn = signal<(group: string) => string>((g) => `group-${g}`);\n /** @internal */\n readonly customPanelClass = signal('');\n\n /** @internal */\n readonly optionTemplate = signal<TemplateRef<TwComboboxOptionContext<T>> | undefined>(undefined);\n /** @internal */\n readonly emptyTemplate = signal<TemplateRef<{ $implicit: string }> | undefined>(undefined);\n /** @internal */\n readonly loadingTemplate = signal<TemplateRef<unknown> | undefined>(undefined);\n\n // ── Callbacks pushed by the parent ──\n\n /** @internal */\n readonly onOptionPick = signal<(index: number) => void>(() => {});\n /** @internal */\n readonly onOptionHover = signal<(index: number) => void>(() => {});\n\n // ── Computed classes ──\n\n /** @internal */\n readonly panelClasses = computed(() => {\n const base =\n 'block w-full bg-surface-overlay border border-border rounded-md shadow-md overflow-hidden';\n const custom = this.customPanelClass();\n return custom ? `${base} ${custom}` : base;\n });\n\n /** @internal */\n optionClass(index: number, disabled: boolean): string {\n const base =\n 'flex cursor-pointer items-center gap-2 px-3 py-2 text-sm text-fg select-none transition-colors duration-normal motion-reduce:transition-none';\n const parts: string[] = [base];\n if (disabled) {\n parts.push('opacity-50 pointer-events-none cursor-default');\n } else if (this.activeIndex() === index) {\n parts.push('bg-surface-muted');\n } else {\n parts.push('hover:bg-surface-muted');\n }\n return parts.join(' ');\n }\n\n /** @internal */\n groupHeaderId(group: string): string {\n return this.groupHeaderIdFn()(group);\n }\n\n /** @internal */\n buildOptionContext(index: number, option: ComboboxVisibleOption<T>): TwComboboxOptionContext<T> {\n return {\n $implicit: option.option as TwComboboxOptionContext<T>['$implicit'],\n option: option.option as TwComboboxOptionContext<T>['option'],\n label: option.label,\n value: option.value,\n selected: this.isSelected()(index),\n active: this.activeIndex() === index,\n disabled: option.disabled,\n index,\n };\n }\n\n /** @internal track function for `@for`. */\n trackRow(_index: number, row: ComboboxRenderedRow<T>): string | number {\n if (row.kind === 'group') return `g:${row.group}`;\n return `o:${row.index}`;\n }\n\n // ── Interactions ──\n\n /** @internal — `preventDefault` on mousedown keeps DOM focus on the input. */\n onOptionMousedown(event: MouseEvent, _index: number): void {\n event.preventDefault();\n }\n\n /** @internal */\n onOptionClick(event: MouseEvent, index: number): void {\n event.preventDefault();\n event.stopPropagation();\n this.onOptionPick()(index);\n }\n\n /** @internal */\n onOptionMouseEnter(index: number, disabled: boolean): void {\n if (disabled) return;\n this.onOptionHover()(index);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n type Signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NgControl } from '@angular/forms';\nimport {\n buildSelectLikePositions,\n type ErrorStateMatcher,\n PickerOverlayCoordinator,\n resolveSelectScrollStrategy,\n type TwColor,\n type TwSize,\n wireErrorState,\n} from '@cdevhub/ngx-tw/core';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { tv } from 'tailwind-variants';\nimport {\n type FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport { ComboboxOverlayComponent } from './combobox-overlay';\nimport type {\n ComboboxRenderedRow,\n ComboboxVisibleOption,\n TwComboboxFilterFn,\n TwComboboxOpenedEvent,\n TwComboboxOptionContext,\n TwComboboxOptionSelectedEvent,\n TwComboboxValueCommitEvent,\n} from './types';\n\n// ── Constants ──\n\n/** Debounce window (ms) for LiveAnnouncer result announcements while typing. */\nconst ANNOUNCE_DEBOUNCE = 200;\n\n/** Sentinel for an unresolved write-value awaiting late-arriving options. */\nconst UNRESOLVED = Symbol('combobox-unresolved');\n\nlet nextComboboxId = 0;\n\n// ── Accessor defaults ──\n\nfunction defaultOptionLabel(o: unknown): string {\n const opt = o as { label?: unknown; value?: unknown };\n if (typeof opt.label === 'string') return opt.label;\n return String(opt.value ?? '');\n}\n\nfunction defaultOptionValue<T>(o: unknown): T {\n return (o as { value: T }).value;\n}\n\nfunction defaultOptionDisabled(o: unknown): boolean {\n return !!(o as { disabled?: unknown }).disabled;\n}\n\nfunction defaultOptionGroup(o: unknown): string | undefined {\n return (o as { group?: string }).group;\n}\n\nfunction defaultOptionDescription(o: unknown): string | undefined {\n return (o as { description?: string }).description;\n}\n\nfunction defaultStartsWithFilter(option: unknown, query: string): boolean {\n const trimmed = query.trim().toLowerCase();\n if (!trimmed) return true;\n const label = defaultOptionLabel(option).toLowerCase();\n return label.startsWith(trimmed);\n}\n\n// ── tv() config ──\n\nconst comboboxVariants = tv(\n {\n slots: {\n root: 'relative inline-block w-full',\n // container-focus indicator — the `<input>` clears its own outline\n // (`outline-none` in the input slot below) so the surrounding trigger\n // surface owns the visible ring via `focus-within:`. The color/width\n // variants below paint this ring per the `color`/`errorState` axis.\n trigger:\n 'flex w-full items-center gap-1.5 rounded-md border border-border bg-surface text-fg transition-colors duration-normal motion-reduce:transition-none hover:border-border-strong focus-within:outline-2 focus-within:outline-offset-2',\n input:\n 'flex-1 min-w-0 bg-transparent outline-none placeholder:text-fg-subtle disabled:cursor-not-allowed',\n // `size-6` (24px) is the WCAG 2.2 SC 2.5.8 target-size floor and the `xs`\n // step of the square-interactive scale. It does NOT scale with `size`:\n // the clear sits inside the trigger, whose smallest pinned height is\n // 24px (`xs` -> `h-6`), so any larger step would overflow the smallest\n // trigger. The floor is what the success criterion asks for — which is\n // also why `xs` no longer shrinks it to `size-4`.\n clearButton:\n 'inline-flex items-center justify-center shrink-0 size-6 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n chevron:\n 'shrink-0 text-fg-muted transition-transform duration-normal motion-reduce:transition-none',\n spinner: 'shrink-0 text-fg-muted animate-spin',\n },\n variants: {\n // Trigger height is PINNED (docs/vertical-rhythm.md §1-3): the box is\n // always one line, so it declares its border-box height and carries no\n // vertical padding. Horizontal padding and the font size are unchanged.\n size: {\n // xs density: chevron and spinner use `size-3.5` (14px) — the codified\n // half-step between size-3 and size-4 that lines up with text-xs metric\n // inside a 24px trigger.\n xs: { trigger: 'px-2 text-xs h-6', chevron: 'size-3.5', spinner: 'size-3.5' },\n sm: { trigger: 'px-3 text-sm h-8', chevron: 'size-4', spinner: 'size-4' },\n md: { trigger: 'px-4 text-sm h-9', chevron: 'size-4', spinner: 'size-4' },\n lg: { trigger: 'px-5 text-base h-11', chevron: 'size-5', spinner: 'size-5' },\n xl: { trigger: 'px-6 text-base h-12', chevron: 'size-5', spinner: 'size-5' },\n },\n color: {\n primary: { trigger: 'focus-within:outline-primary-500' },\n secondary: { trigger: 'focus-within:outline-secondary-500' },\n accent: { trigger: 'focus-within:outline-accent-500' },\n neutral: { trigger: 'focus-within:outline-border-strong' },\n info: { trigger: 'focus-within:outline-info-500' },\n success: { trigger: 'focus-within:outline-success-500' },\n warning: { trigger: 'focus-within:outline-warning-500' },\n error: { trigger: 'focus-within:outline-error-500' },\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: {},\n },\n open: {\n true: { chevron: 'rotate-180' },\n false: {},\n },\n // `naked` = wrapped in a `tw-form-field`, which owns the box: its\n // controlWrapper draws the border and the vertical padding. `h-auto`\n // releases the pinned height (declared after `size`, so twMerge keeps it\n // — the same ordering `px-0` already relies on) so the trigger\n // contributes only its line box and the field's own rhythm governs.\n naked: {\n true: {\n trigger:\n 'border-0 bg-transparent rounded-none px-0 py-0 h-auto hover:border-0 focus-within:outline-0 focus-within:outline-offset-0',\n },\n false: {},\n },\n errorState: {\n true: { trigger: 'focus-within:outline-error-500' },\n false: {},\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n disabled: false,\n open: false,\n naked: false,\n errorState: false,\n },\n },\n { twMerge: true },\n);\n\n// ── Slot directives ──\n\n/** Structural directive projecting a custom template for each option row. Context: `TwComboboxOptionContext<T>`. */\n@Directive({ selector: '[twComboboxOption]' })\nexport class ComboboxOptionTemplateDirective<T = unknown, O = unknown> {\n /** @internal */\n readonly templateRef = inject(TemplateRef<TwComboboxOptionContext<T, O>>);\n\n /** @internal */\n static ngTemplateContextGuard<T, O>(\n _dir: ComboboxOptionTemplateDirective<T, O>,\n _ctx: unknown,\n ): _ctx is TwComboboxOptionContext<T, O> {\n return true;\n }\n}\n\n/** Structural directive projecting a custom template for the empty-results state. Context: `{ $implicit: query }`. */\n@Directive({ selector: '[twComboboxEmpty]' })\nexport class ComboboxEmptyTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<{ $implicit: string }>);\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: ComboboxEmptyTemplateDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: string } {\n return true;\n }\n}\n\n/** Structural directive projecting a custom template above the list while `loading=true`. */\n@Directive({ selector: '[twComboboxLoading]' })\nexport class ComboboxLoadingTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n\n/** Attribute directive marking a leading adornment projected inside the input row. */\n@Directive({\n selector: '[twComboboxPrefix]',\n host: { class: 'flex items-center shrink-0 text-fg-muted' },\n})\nexport class ComboboxPrefixDirective {}\n\n/** Attribute directive marking a trailing adornment projected inside the input row, before the clear button. */\n@Directive({\n selector: '[twComboboxSuffix]',\n host: { class: 'flex items-center shrink-0 text-fg-muted' },\n})\nexport class ComboboxSuffixDirective {}\n\n// ── Component ──\n\n/**\n * Editable single-select typeahead form control. Follows the WAI-ARIA 1.2\n * combobox + listbox pattern with `aria-activedescendant` (DOM focus stays\n * on the `<input>`). Supports local filtering, async result streams via\n * `queryChange`, grouped options, strict and free-text modes, and full\n * integration with template-driven, reactive, and signal forms plus\n * `tw-form-field`.\n */\n@Component({\n selector: 'tw-combobox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => ComboboxComponent),\n },\n PickerOverlayCoordinator,\n ],\n template: `\n <div #triggerSurface [class]=\"triggerClasses()\">\n <ng-content select=\"[twComboboxPrefix]\" />\n\n <input\n #inputEl\n type=\"text\"\n [id]=\"hostId\"\n [class]=\"inputClasses()\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open() ? 'true' : 'false'\"\n [attr.aria-controls]=\"open() ? listboxId : null\"\n [attr.aria-activedescendant]=\"open() ? (activeOptionId() || null) : null\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"resolvedLabelledBy() || null\"\n [attr.aria-describedby]=\"resolvedDescribedBy() || null\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [disabled]=\"isDisabled()\"\n [placeholder]=\"placeholder() ?? null\"\n [value]=\"inputValue()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (compositionstart)=\"onCompositionStart()\"\n (compositionend)=\"onCompositionEnd($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <ng-content select=\"[twComboboxSuffix]\" />\n\n @if (showSpinner()) {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n [class]=\"spinnerClasses()\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"3\" opacity=\"0.25\" />\n <path\n d=\"M21 12a9 9 0 0 0-9-9\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n </svg>\n }\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n [class]=\"clearButtonClasses()\"\n aria-label=\"Clear\"\n (mousedown)=\"onClearMousedown($event)\"\n (click)=\"onClearClick($event)\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" class=\"size-3\">\n <path\n fill-rule=\"evenodd\"\n d=\"M10 8.586 4.707 3.293a1 1 0 0 0-1.414 1.414L8.586 10l-5.293 5.293a1 1 0 1 0 1.414 1.414L10 11.414l5.293 5.293a1 1 0 0 0 1.414-1.414L11.414 10l5.293-5.293a1 1 0 0 0-1.414-1.414L10 8.586Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n }\n\n @if (showChevron()) {\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n [class]=\"chevronClasses()\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.06l3.71-3.83a.75.75 0 1 1 1.08 1.04l-4.25 4.39a.75.75 0 0 1-1.08 0L5.21 8.27a.75.75 0 0 1 .02-1.06Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </div>\n\n <span hidden>\n <ng-content />\n </span>\n `,\n host: {\n '[class]': 'rootClasses()',\n },\n})\nexport class ComboboxComponent<T = unknown>\n implements ControlValueAccessor, FormFieldControl<T | string | null>, OnInit\n{\n // ── Inputs ──\n\n /** Array of options to render in the popover. Accepts plain records or `TwComboboxOption<T>`. Defaults to an empty array. */\n readonly options = input<readonly unknown[]>([]);\n\n /** Accessor returning the visible label for an option. Used by the default filter and the trigger label resolver. Defaults to reading `.label`, falling back to `String(.value)`. */\n readonly optionLabel = input<(option: unknown) => string>(defaultOptionLabel);\n\n /** Accessor returning the value emitted via `valueCommit` when this option is picked. Defaults to reading `.value`. */\n readonly optionValue = input<(option: unknown) => T>(defaultOptionValue as (option: unknown) => T);\n\n /** Accessor returning whether an option is non-interactive. Defaults to reading `.disabled`. */\n readonly optionDisabled = input<(option: unknown) => boolean>(defaultOptionDisabled);\n\n /** Accessor returning a group label. Options sharing a group render under a labelled `role=\"group\"` region. Defaults to reading `.group`. */\n readonly optionGroup = input<(option: unknown) => string | undefined>(defaultOptionGroup);\n\n /** Accessor returning an optional secondary description rendered under the label in the default option row. Defaults to reading `.description`. */\n readonly optionDescription = input<(option: unknown) => string | undefined>(defaultOptionDescription);\n\n /** Filter function applied client-side whenever `inputValue` changes. Pass `null` to disable client filtering (async mode). Defaults to case-insensitive `startsWith` on the label. */\n readonly filterFn = input<TwComboboxFilterFn | null>(defaultStartsWithFilter);\n\n /** When `true`, free-text commits are rejected — the input reverts to the last committed label on blur. Defaults to `false`. */\n readonly strict = input<boolean>(false);\n\n /** Placeholder shown when the input is empty. Defaults to `undefined`. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** Disables the input and prevents the popover from opening. Defaults to `false`. Alias: `disabled`. */\n readonly disabledInput = input<boolean>(false, { alias: 'disabled' });\n\n /** Sets `aria-required=\"true\"` on the input and the `*` marker on a wrapping `tw-form-field`. Also inferred from `Validators.required` on a bound control, so a reactive/template-driven form does not have to state it twice. Defaults to `false`. */\n readonly requiredInput = input<boolean>(false, { alias: 'required' });\n\n /** Controls trigger padding and font size per the inline padding scale. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color for the focus ring. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Whether the trailing chevron affordance is rendered. Defaults to `true` — the chevron signals the dropdown affordance; the special case is an inline search input that opts out. */\n readonly showChevron = input<boolean>(true);\n\n /** Whether the inline clear (×) button appears while `inputValue` is non-empty. Defaults to `true` — clearing a typed value is the expected combobox gesture; the special case is a required-only flow. */\n readonly clearable = input<boolean>(true);\n\n /** When `true`, shows an in-popover spinner and an inline spinner in the trigger while the popover is open. Defaults to `false`. */\n readonly loading = input<boolean>(false);\n\n /** Debounce window (ms) before `queryChange` emits. Local filtering is not debounced. Defaults to `150`. */\n readonly queryDebounce = input<number>(150);\n\n /** Minimum query length before the popover opens automatically. `0` opens on focus. Defaults to `0`. */\n readonly minQueryLength = input<number>(0);\n\n /** Whether the popover opens automatically when the input receives focus. Defaults to `true` — clicking into a combobox opens the dropdown, matching select-like UX; the special case is a flow that should open only once the user types. */\n readonly openOnFocus = input<boolean>(true);\n\n /** Maximum height (px) of the popover scroll region. Defaults to `256`. */\n readonly panelMaxHeight = input<number>(256);\n\n /** Overlay width strategy. `'trigger'` matches input width; `'auto'` lets content decide; a number is applied as px; a string is passed as a CSS length. Defaults to `'trigger'`. */\n readonly panelWidth = input<'trigger' | 'auto' | number | string>('trigger');\n\n /** Extra class(es) appended to the overlay panel for consumer customization. Defaults to an empty string. */\n readonly panelClass = input<string | readonly string[]>('');\n\n /** CDK overlay scroll strategy. Defaults to `'reposition'`. */\n readonly scrollStrategy = input<'reposition' | 'close' | 'block'>('reposition');\n\n /** Pixel offset between the input and the popover. Defaults to `4`. */\n readonly offset = input<number>(4);\n\n /** Fallback empty-state message when no `*twComboboxEmpty` template is projected. Defaults to `'No results'`. */\n readonly emptyMessage = input<string>('No results');\n\n /** Equality comparator used to reconcile `value` with options during `writeValue`. Defaults to `Object.is`. */\n readonly compareWith = input<(a: T, b: T) => boolean>(Object.is);\n\n /** Accessible name for the combobox input. Defaults to `undefined`. Alias: `aria-label`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external label element. Defaults to `undefined`. Alias: `aria-labelledby`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** ID of an external descriptor element. Defaults to `undefined`. Alias: `aria-describedby`. */\n readonly ariaDescribedby = input<string | undefined>(undefined, { alias: 'aria-describedby' });\n\n /** Per-instance override of the {@link ErrorStateMatcher}. When omitted, the combobox uses the `TW_ERROR_STATE_MATCHER` token's value. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n // ── Models ──\n\n /** Two-way bound committed value. May be an option's value (`T`), a typed string (free-text mode), or `null`. Defaults to `null`. */\n readonly value = model<T | string | null>(null);\n\n /** Two-way bound visible text in the input. Bound separately from `value` so async consumers can drive the query. Writes back on every keystroke, on commit, and on clear. Defaults to `''`. */\n readonly inputValue = model<string>('');\n\n /** Two-way bound open state of the popover. Defaults to `false`. */\n readonly open = model<boolean>(false);\n\n // ── Outputs ──\n\n /** Fires after the query text changes, debounced by `queryDebounce`. Async-mode consumers subscribe to this to fetch results. Payload is the current input text, untrimmed. */\n readonly queryChange = output<string>();\n\n /** Fires when the user picks an option from the list (not on free-text commit). Payload carries the raw option record plus its resolved `value` and `label`. */\n readonly optionSelected = output<TwComboboxOptionSelectedEvent<T>>();\n\n /** Fires whenever `value` changes, with a `source` discriminator distinguishing option / free-text / reset / programmatic origin. */\n readonly valueCommit = output<TwComboboxValueCommitEvent<T>>();\n\n /** Fires when the popover finishes opening or closing. Payload carries the new `open` state and the trigger element the overlay is anchored to. */\n readonly openedChange = output<TwComboboxOpenedEvent>();\n\n // ── Content queries ──\n\n /** @internal */\n readonly optionTemplateChild = contentChild(ComboboxOptionTemplateDirective);\n /** @internal */\n readonly emptyTemplateChild = contentChild(ComboboxEmptyTemplateDirective);\n /** @internal */\n readonly loadingTemplateChild = contentChild(ComboboxLoadingTemplateDirective);\n\n // ── View queries ──\n\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n private readonly triggerSurfaceRef = viewChild<ElementRef<HTMLDivElement>>('triggerSurface');\n\n // ── Injected deps ──\n\n private readonly overlayService = inject(Overlay);\n private readonly coordinator = inject(PickerOverlayCoordinator);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly platform = inject(Platform);\n private readonly formField = inject(TW_FORM_FIELD, { optional: true });\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n // ── Identity ──\n\n private readonly uid = nextComboboxId++;\n /** @internal */\n readonly hostId = `tw-combobox-${this.uid}`;\n /** @internal */\n readonly listboxId = `${this.hostId}-listbox`;\n /** @internal */\n readonly optionId = (index: number): string => `${this.hostId}-option-${index}`;\n /** @internal */\n readonly groupHeaderId = (group: string): string =>\n `${this.hostId}-group-${group.replace(/\\s+/g, '-').toLowerCase()}`;\n\n // ── Internal state signals ──\n\n /** @internal */\n readonly composing = signal(false);\n /** @internal */\n readonly focusedSignal = signal(false);\n private readonly cvaDisabled = signal(false);\n\n /** @internal Shared `errorState` / `required` / `errors` derivation — see `wireErrorState`. */\n private readonly errorWiring = wireErrorState({\n ngControl: () => this.ngControl,\n matcher: () => this.errorStateMatcher(),\n required: () => this.requiredInput(),\n });\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly labelledByIdsSignal = signal<readonly string[]>([]);\n /** @internal */\n readonly lastCommittedLabel = signal<string>('');\n private readonly pendingWriteValue = signal<T | string | null | typeof UNRESOLVED>(UNRESOLVED);\n /** Re-runs the input handler once after IME composition ends. */\n private composingPendingValue: string | null = null;\n\n private onChange: (value: T | string | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n private queryDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n private announceTimer: ReturnType<typeof setTimeout> | null = null;\n /**\n * Watches the host for size changes so `panelWidth=\"trigger\"` keeps tracking\n * while the panel is up. Minted per open and disconnected on close, because\n * the `OverlayRef` it feeds is disposed on close (see `openOverlay`).\n */\n private resizeObserver: ResizeObserver | null = null;\n\n // Overlay bookkeeping is deliberately held in plain fields, not signals — same\n // shape as popover and command-palette. A signal here would be track-read by the\n // open/close lifecycle effect that also writes it, which is the cycle shape\n // CLAUDE.md forbids. The only reactive bit is `isAttached`, written by the\n // lifecycle effect and read only by the state-push effect below, so the two\n // never form a loop.\n private overlayInstance: ComboboxOverlayComponent<T> | null = null;\n private closing = false;\n\n /**\n * Flips true once the overlay component is attached; the sole trigger for the\n * state-push effect. Load-bearing: the close path leaves `activeIndex` and the\n * rest of the pushed state untouched, so on a reopen no data signal changes and\n * nothing else would wake that effect — the fresh panel would render empty.\n */\n private readonly isAttached = signal(false);\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n /** @internal Auto-naked when wrapped in tw-form-field. */\n readonly naked = computed(() => !!this.formField);\n\n /** @internal Resolved visible options (after filter, with derived view fields). */\n readonly visibleOptions = computed<readonly ComboboxVisibleOption<T>[]>(() => {\n const opts = this.options();\n const labelFn = this.optionLabel();\n const valueFn = this.optionValue();\n const disabledFn = this.optionDisabled();\n const groupFn = this.optionGroup();\n const descFn = this.optionDescription();\n const filter = this.filterFn();\n const query = this.inputValue();\n const filtered = filter === null ? opts : opts.filter((o) => filter(o, query));\n return filtered.map((option) => ({\n option,\n label: labelFn(option),\n value: valueFn(option),\n disabled: disabledFn(option),\n group: groupFn(option),\n description: descFn(option),\n }));\n });\n\n /** @internal Rendered rows (group headers + option rows). */\n readonly renderedRows = computed<readonly ComboboxRenderedRow<T>[]>(() => {\n const visible = this.visibleOptions();\n const rows: ComboboxRenderedRow<T>[] = [];\n let currentGroup: string | undefined;\n visible.forEach((v, index) => {\n if (v.group !== currentGroup) {\n if (v.group !== undefined) {\n rows.push({ kind: 'group', group: v.group });\n }\n currentGroup = v.group;\n }\n rows.push({ kind: 'option', option: v, index });\n });\n return rows;\n });\n\n /** Returns the index of the first enabled option, or -1 when none. */\n private firstEnabledIndex(visible: readonly ComboboxVisibleOption<T>[] = this.visibleOptions()): number {\n for (let i = 0; i < visible.length; i++) {\n if (!visible[i].disabled) return i;\n }\n return -1;\n }\n\n /** Returns the index of the last enabled option, or -1 when none. */\n private lastEnabledIndex(visible: readonly ComboboxVisibleOption<T>[] = this.visibleOptions()): number {\n for (let i = visible.length - 1; i >= 0; i--) {\n if (!visible[i].disabled) return i;\n }\n return -1;\n }\n\n /** @internal Active descendant index, resets to the first enabled when the visible list changes. */\n readonly activeIndex = linkedSignal<readonly ComboboxVisibleOption<T>[], number>({\n source: () => this.visibleOptions(),\n computation: (visible) => {\n for (let i = 0; i < visible.length; i++) {\n if (!visible[i].disabled) return i;\n }\n return -1;\n },\n });\n\n /** @internal */\n readonly activeOption = computed(() => {\n const idx = this.activeIndex();\n const visible = this.visibleOptions();\n if (idx < 0 || idx >= visible.length) return null;\n return visible[idx];\n });\n\n /** @internal */\n readonly activeOptionId = computed(() => {\n const idx = this.activeIndex();\n if (idx < 0 || idx >= this.visibleOptions().length) return null;\n return this.optionId(idx);\n });\n\n /** @internal */\n readonly isEmpty = computed(() => this.inputValue().length === 0 && this.value() == null);\n\n /** @internal */\n readonly showClearButton = computed(\n () => this.clearable() && !this.isDisabled() && this.inputValue().length > 0,\n );\n\n /** @internal */\n readonly showSpinner = computed(() => this.loading());\n\n /** @internal */\n readonly resolvedDescribedBy = computed(() => {\n const extra = this.describedByIdsSignal();\n const user = this.ariaDescribedby();\n const merged = [...extra];\n if (user) merged.push(...user.split(/\\s+/).filter(Boolean));\n return merged.length ? merged.join(' ') : '';\n });\n\n /** @internal */\n readonly resolvedLabelledBy = computed(() => {\n const extra = this.labelledByIdsSignal();\n const user = this.ariaLabelledby();\n const merged = [...extra];\n if (user) merged.push(...user.split(/\\s+/).filter(Boolean));\n return merged.length ? merged.join(' ') : '';\n });\n\n /** @internal Error-state per the configured `ErrorStateMatcher`. Reads the bound `NgControl.invalid` through the matcher. */\n readonly errorState: Signal<boolean> = this.errorWiring.errorState;\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n comboboxVariants({\n size: this.size(),\n color: this.color(),\n disabled: this.isDisabled(),\n open: this.open(),\n naked: this.naked(),\n errorState: this.errorState(),\n }),\n );\n\n /** @internal */\n readonly rootClasses = computed(() => this.variantResult().root());\n /** @internal */\n readonly triggerClasses = computed(() => this.variantResult().trigger());\n /** @internal */\n readonly inputClasses = computed(() => this.variantResult().input());\n /** @internal */\n readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n /** @internal */\n readonly chevronClasses = computed(() => this.variantResult().chevron());\n /** @internal */\n readonly spinnerClasses = computed(() => this.variantResult().spinner());\n\n // ── FormFieldControl impl ──\n\n /** @internal */\n readonly id: Signal<string> = computed(() => this.hostId);\n /** @internal */\n readonly focused: Signal<boolean> = this.focusedSignal.asReadonly();\n /** @internal */\n readonly empty: Signal<boolean> = this.isEmpty;\n /** @internal */\n readonly disabled: Signal<boolean> = this.isDisabled;\n /**\n * @internal Resolved required state: the `required` input OR'd with\n * `Validators.required` on a bound `NgControl`. Without the validator arm the\n * form-field `*` marker (`FormFieldComponent.isRequired`) and the input's\n * `aria-required` silently vanish under reactive/template-driven forms, while\n * signal forms shows them — `cvaControlCreate` writes the `required` *input*\n * directly from the field state and never consults validators. The OR keeps\n * both branches true at once.\n */\n readonly required: Signal<boolean> = this.errorWiring.required;\n /** @internal Active validation errors map from the bound `NgControl`. Drives `[twError match=\"…\"]` inside a wrapping `tw-form-field`; without it the form-field's key set is permanently empty and every `match`ed error stays hidden. */\n readonly errors: Signal<Record<string, unknown> | null> = this.errorWiring.errors;\n /** @internal */\n readonly controlType = 'combobox';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() => this.ariaDescribedby());\n /** @internal */\n readonly userAriaLabelledby: Signal<string | undefined> = computed(() => this.ariaLabelledby());\n\n // ── Constructor ──\n\n constructor() {\n // Material-style CVA wiring: declare ourselves as the value accessor on any\n // host-level `NgControl` (FormControlDirective, NgModel, etc.). This avoids\n // the circular-DI that a static `NG_VALUE_ACCESSOR` provider would create\n // because `NgControl` is injected with `self: true` on the same element.\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Mirror parent `open` model into overlay lifecycle.\n // Only `open` and `isDisabled` are read in the tracked phase; the lifecycle\n // calls run inside `untracked()` because they both read and write panel state\n // (openOverlay writes activeIndex and reads visibleOptions).\n effect(() => {\n const shouldOpen = this.open();\n const disabled = this.isDisabled();\n untracked(() => {\n if (disabled && this.overlayInstance) {\n this.closeOverlay({ silent: false });\n return;\n }\n if (shouldOpen && !this.overlayInstance && !disabled && !this.closing) {\n this.openOverlay();\n } else if (!shouldOpen && this.overlayInstance && !this.closing) {\n this.closeOverlay({ silent: false });\n }\n });\n });\n\n // Push state into overlay component whenever anything relevant changes.\n // `isAttached` is the trigger — it is written by the lifecycle effect above\n // and never written here, so the two effects cannot feed each other.\n // While the panel is animating out, freeze content updates so list mutations\n // (e.g. the input filtering down after commitOption) don't visually flicker\n // the panel during the leave animation.\n effect(() => {\n const attached = this.isAttached();\n const renderedRows = this.renderedRows();\n const activeIndex = this.activeIndex();\n const panelMaxHeight = this.panelMaxHeight();\n const emptyMessage = this.emptyMessage();\n const query = this.inputValue();\n const loading = this.loading();\n const labelledBy = this.resolvedLabelledBy();\n const optionTemplate = this.optionTemplateChild()?.templateRef;\n const emptyTemplate = this.emptyTemplateChild()?.templateRef;\n const loadingTemplate = this.loadingTemplateChild()?.templateRef;\n const customPanelClass = this.resolvePanelClass();\n // Tracked so the selection snapshot below refreshes when either changes.\n // The snapshot replaced a live closure — see the `isSelected` push.\n const visibleCount = this.visibleOptions().length;\n void this.value();\n untracked(() => {\n const instance = this.overlayInstance;\n if (!attached || !instance || this.closing) return;\n instance.renderedRows.set(renderedRows);\n instance.activeIndex.set(activeIndex);\n instance.panelMaxHeight.set(panelMaxHeight);\n instance.emptyMessage.set(emptyMessage);\n instance.query.set(query);\n instance.loading.set(loading);\n instance.labelledBy.set(labelledBy);\n instance.optionTemplate.set(optionTemplate as TemplateRef<TwComboboxOptionContext<T>> | undefined);\n instance.emptyTemplate.set(emptyTemplate);\n instance.loadingTemplate.set(loadingTemplate);\n instance.customPanelClass.set(customPanelClass);\n instance.listboxId.set(this.listboxId);\n instance.optionIdFn.set(this.optionId);\n instance.groupHeaderIdFn.set(this.groupHeaderId);\n // A SNAPSHOT, not a live closure. `renderedRows` is frozen while the\n // panel animates out (the guard above), and each frozen row carries its\n // index into the visible list at freeze time. A closure reading\n // `visibleOptions()` at call time would resolve those stale indices\n // against the current, already-refiltered list — so committing an option\n // marked the WRONG row `aria-selected=\"true\"` for the ~120ms leave\n // window. Snapshotting here binds the flags to the same generation of\n // the list as the rows they describe.\n const selectedFlags: boolean[] = new Array(visibleCount);\n for (let i = 0; i < visibleCount; i++) {\n selectedFlags[i] = this.isVisibleOptionSelected(i);\n }\n instance.isSelected.set((index: number) => selectedFlags[index] ?? false);\n });\n });\n\n // Late-arriving options reconciler for the async writeValue race.\n effect(() => {\n const opts = this.options();\n const pending = untracked(this.pendingWriteValue);\n if (pending === UNRESOLVED) return;\n if (opts.length === 0) return;\n const cmp = this.compareWith();\n const valueFn = this.optionValue();\n const labelFn = this.optionLabel();\n const match = opts.find((o) => {\n try {\n return cmp(valueFn(o), pending as T);\n } catch {\n return false;\n }\n });\n untracked(() => {\n if (match) {\n this.inputValue.set(labelFn(match));\n this.lastCommittedLabel.set(labelFn(match));\n }\n // Always clear the sentinel — subsequent options changes won't re-resolve.\n this.pendingWriteValue.set(UNRESOLVED);\n });\n });\n\n // Debounced LiveAnnouncer result-count announcements.\n effect(() => {\n const visible = this.visibleOptions();\n const query = this.inputValue();\n const isOpen = this.open();\n untracked(() => {\n if (!isOpen) return;\n this.clearAnnounceTimer();\n this.announceTimer = setTimeout(() => {\n const count = visible.length;\n const message =\n count === 0\n ? `No results for ${query}`\n : count === 1\n ? '1 result'\n : `${count} results`;\n this.liveAnnouncer.announce(message, 'polite');\n }, ANNOUNCE_DEBOUNCE);\n });\n });\n\n // FocusMonitor for blur → onTouched + focused state.\n const monitorSub = this.focusMonitor\n .monitor(this.elementRef, true)\n .subscribe((origin) => {\n const wasFocused = this.focusedSignal();\n this.focusedSignal.set(!!origin);\n if (!origin && wasFocused) {\n this.onTouched();\n // Blur often flips `touched` on the bound `NgControl`; bump the\n // revision so `errorState` recomputes.\n this.errorWiring.bump();\n }\n });\n\n // The overlay itself is torn down by `PickerOverlayCoordinator`, which\n // registers its own `DestroyRef.onDestroy` during this component's field\n // initialisation — i.e. before this hook — and disposes the `OverlayRef`,\n // cancels the close timer and completes the per-open streams there.\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.clearQueryDebounceTimer();\n this.clearAnnounceTimer();\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.overlayInstance = null;\n });\n }\n\n // ── Public methods ──\n\n /** Opens the popover. No-op when disabled or already open. */\n openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n }\n\n /** Closes the popover. No-op when already closed. */\n closePanel(): void {\n if (!this.open()) return;\n this.open.set(false);\n }\n\n /** Programmatically focuses the input. */\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n // ── Visible-option helpers ──\n\n /** @internal */\n isVisibleOptionSelected(index: number): boolean {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return false;\n const current = this.value();\n if (current === null || current === undefined) return false;\n const cmp = this.compareWith();\n try {\n return cmp(visible[index].value, current as T);\n } catch {\n return false;\n }\n }\n\n // ── Input event handlers ──\n\n /** @internal */\n onInput(event: Event): void {\n if (this.composing()) {\n // Defer; we'll re-run with the final value on compositionend.\n this.composingPendingValue = (event.target as HTMLInputElement).value;\n return;\n }\n const target = event.target as HTMLInputElement;\n const value = target.value;\n this.inputValue.set(value);\n this.scheduleQueryEmit(value);\n // Open if not blocked by minQueryLength and not disabled.\n if (!this.isDisabled() && value.length >= this.minQueryLength()) {\n if (!this.open()) {\n this.open.set(true);\n }\n } else if (value.length < this.minQueryLength() && this.open()) {\n this.open.set(false);\n }\n }\n\n /** @internal */\n onCompositionStart(): void {\n this.composing.set(true);\n }\n\n /** @internal */\n onCompositionEnd(event: CompositionEvent): void {\n this.composing.set(false);\n const target = event.target as HTMLInputElement;\n const value = target.value || this.composingPendingValue || '';\n this.composingPendingValue = null;\n // Re-run the input handler logic once with the resolved value.\n this.inputValue.set(value);\n this.scheduleQueryEmit(value);\n if (!this.isDisabled() && value.length >= this.minQueryLength() && !this.open()) {\n this.open.set(true);\n }\n }\n\n /** @internal */\n onFocus(): void {\n if (this.isDisabled()) return;\n if (this.openOnFocus() && this.inputValue().length >= this.minQueryLength() && !this.open()) {\n this.open.set(true);\n }\n }\n\n /** @internal */\n onBlur(): void {\n if (this.composing()) return;\n // Don't commit while the user is interacting with the overlay (option mousedown\n // calls preventDefault to keep focus on the input, so blur here means real focus loss).\n if (this.isDisabled()) return;\n this.commit('blur');\n }\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n if (this.composing()) return;\n if (this.isDisabled()) return;\n const key = event.key;\n\n // Alt+Arrow combos\n if (event.altKey && key === 'ArrowDown') {\n event.preventDefault();\n this.openPanel();\n return;\n }\n if (event.altKey && key === 'ArrowUp') {\n event.preventDefault();\n this.closePanel();\n return;\n }\n\n switch (key) {\n case 'ArrowDown': {\n event.preventDefault();\n if (!this.open()) {\n this.openPanel();\n this.moveActiveTo(this.firstEnabledIndex(), 1);\n } else {\n this.moveActive(1);\n }\n return;\n }\n case 'ArrowUp': {\n event.preventDefault();\n if (!this.open()) {\n this.openPanel();\n this.moveActiveTo(this.lastEnabledIndex(), -1);\n } else {\n this.moveActive(-1);\n }\n return;\n }\n case 'Home': {\n if (this.inputValue().length === 0 || event.altKey) {\n event.preventDefault();\n if (!this.open()) this.openPanel();\n this.moveActiveTo(0, 1);\n }\n return;\n }\n case 'End': {\n if (this.inputValue().length === 0 || event.altKey) {\n event.preventDefault();\n if (!this.open()) this.openPanel();\n this.moveActiveTo(this.visibleOptions().length - 1, -1);\n }\n return;\n }\n case 'Enter': {\n const active = this.activeOption();\n if (this.open() && active && !active.disabled) {\n event.preventDefault();\n event.stopPropagation();\n this.commitOption(active, 'option');\n return;\n }\n // Form-submit passthrough: do NOT call preventDefault.\n return;\n }\n case 'Escape': {\n if (this.open()) {\n event.preventDefault();\n event.stopPropagation();\n this.inputValue.set(this.lastCommittedLabel());\n this.closePanel();\n } else if (this.clearable() && this.inputValue().length > 0) {\n event.preventDefault();\n this.clear();\n }\n return;\n }\n case 'Tab': {\n // Commit (no preventDefault) so focus moves naturally.\n this.commit('tab');\n return;\n }\n case 'Backspace': {\n // Explicit no-op on empty input — do not close the popover.\n if (this.inputValue().length === 0) {\n event.preventDefault();\n }\n return;\n }\n default:\n return;\n }\n }\n\n // ── Clear button ──\n\n /** @internal — preventDefault to keep DOM focus on the input. */\n onClearMousedown(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * @internal\n *\n * Reached by mouse and — since the button left `tabindex=\"-1\"` — by Enter or\n * Space from the keyboard, both of which a native `<button>` delivers here\n * as a click. Clearing unmounts this button (`showClearButton()` goes\n * false), so focus is handed back to the input rather than falling to\n * `<body>` (SC 2.4.3).\n */\n onClearClick(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.clear();\n this.inputRef()?.nativeElement.focus();\n }\n\n /** Clears the input and committed value, emitting `valueCommit({ source: 'reset' })`. */\n clear(): void {\n if (this.isDisabled()) return;\n this.value.set(null);\n this.inputValue.set('');\n this.lastCommittedLabel.set('');\n this.valueCommit.emit({ value: null, source: 'reset' });\n this.onChange(null);\n this.closePanel();\n }\n\n // ── Active-index navigation ──\n\n private moveActive(delta: 1 | -1): void {\n const visible = this.visibleOptions();\n if (visible.length === 0) {\n this.activeIndex.set(-1);\n return;\n }\n const n = visible.length;\n let idx = this.activeIndex();\n if (idx < 0) idx = delta > 0 ? -1 : n;\n for (let i = 0; i < n; i++) {\n idx = (idx + delta + n) % n;\n if (!visible[idx].disabled) {\n this.activeIndex.set(idx);\n this.scrollActiveIntoView();\n return;\n }\n }\n }\n\n private moveActiveTo(startIndex: number, direction: 1 | -1): void {\n const visible = this.visibleOptions();\n if (visible.length === 0) {\n this.activeIndex.set(-1);\n return;\n }\n let i = Math.max(0, Math.min(startIndex, visible.length - 1));\n const max = visible.length;\n for (let n = 0; n < max; n++) {\n if (!visible[i].disabled) {\n this.activeIndex.set(i);\n this.scrollActiveIntoView();\n return;\n }\n i += direction;\n if (i < 0 || i >= visible.length) return;\n }\n }\n\n private scrollActiveIntoView(): void {\n if (!this.platform.isBrowser) return;\n queueMicrotask(() => {\n const id = this.activeOptionId();\n if (!id) return;\n const el = document.getElementById(id);\n if (el && typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({ block: 'nearest', behavior: 'auto' });\n }\n });\n }\n\n // ── Commit resolver ──\n\n /** @internal */\n commit(source: 'enter' | 'blur' | 'tab'): void {\n if (this.isDisabled() || this.composing()) return;\n\n const rawText = this.inputValue();\n const text = rawText.trim();\n const active = this.activeOption();\n const labelFn = this.optionLabel();\n const disabledFn = this.optionDisabled();\n\n // 1. Active option wins.\n if (active && !active.disabled) {\n this.commitOption(active, 'option');\n return;\n }\n\n // 2. Exact label match auto-resolves.\n const exact = this.options().find(\n (o) => !disabledFn(o) && labelFn(o).trim() === text && text.length > 0,\n );\n if (exact) {\n const valueFn = this.optionValue();\n const groupFn = this.optionGroup();\n const descFn = this.optionDescription();\n this.commitOption(\n {\n option: exact,\n label: labelFn(exact),\n value: valueFn(exact),\n disabled: false,\n group: groupFn(exact),\n description: descFn(exact),\n },\n 'option',\n );\n return;\n }\n\n // 3. Empty text → null.\n if (text === '') {\n const wasNonNull = this.value() !== null || this.inputValue() !== '';\n this.value.set(null);\n this.inputValue.set('');\n this.lastCommittedLabel.set('');\n if (wasNonNull) {\n this.valueCommit.emit({ value: null, source: 'reset' });\n this.onChange(null);\n }\n this.closePanel();\n return;\n }\n\n // 4. No match.\n if (this.strict()) {\n this.inputValue.set(this.lastCommittedLabel());\n if (source !== 'enter') {\n this.closePanel();\n } else if (this.visibleOptions().length === 0) {\n this.closePanel();\n }\n return;\n }\n\n // Free-text commit.\n this.value.set(text);\n this.inputValue.set(text);\n this.lastCommittedLabel.set(text);\n this.valueCommit.emit({ value: text, source: 'free-text' });\n this.onChange(text);\n this.closePanel();\n }\n\n /** @internal */\n commitOption(option: ComboboxVisibleOption<T>, source: 'option'): void {\n const value = option.value;\n const label = option.label;\n this.value.set(value);\n this.inputValue.set(label);\n this.lastCommittedLabel.set(label);\n this.optionSelected.emit({ option: option.option, value, label });\n this.valueCommit.emit({ value, source });\n this.onChange(value);\n this.liveAnnouncer.announce(`${label} selected`, 'polite');\n this.closePanel();\n }\n\n // ── Query debounce ──\n\n private scheduleQueryEmit(value: string): void {\n this.clearQueryDebounceTimer();\n const delay = this.queryDebounce();\n this.queryDebounceTimer = setTimeout(() => {\n this.queryDebounceTimer = null;\n this.queryChange.emit(value);\n }, delay);\n }\n\n private clearQueryDebounceTimer(): void {\n if (this.queryDebounceTimer !== null) {\n clearTimeout(this.queryDebounceTimer);\n this.queryDebounceTimer = null;\n }\n }\n\n private clearAnnounceTimer(): void {\n if (this.announceTimer !== null) {\n clearTimeout(this.announceTimer);\n this.announceTimer = null;\n }\n }\n\n // ── Overlay lifecycle ──\n\n /**\n * Builds and attaches the panel through {@link PickerOverlayCoordinator}.\n *\n * The coordinator disposes the `OverlayRef` on close, so every value read\n * here — `offset`, `scrollStrategy`, `panelClass`, and the position\n * strategy's origin — is re-read on each open rather than frozen at the\n * first one. That replaces the previous `refreshPositionConfig()` /\n * `applyScrollStrategy()` pair, which could only refresh the two inputs it\n * knew about on a reused ref.\n *\n * `focusTrap: false` is load-bearing: this is an `aria-activedescendant`\n * combobox, so DOM focus never leaves the `<input>` and a trap's anchor\n * elements would inject tab stops around a panel with nothing focusable in it.\n */\n private openOverlay(): void {\n const result = this.coordinator.open<ComboboxOverlayComponent<T>>({\n origin: this.triggerSurfaceRef() ?? this.elementRef,\n portalComponent: ComboboxOverlayComponent as unknown as new () => ComboboxOverlayComponent<T>,\n viewContainerRef: this.viewContainerRef,\n injector: this.injector,\n positions: buildSelectLikePositions(this.offset()),\n scrollStrategy: resolveSelectScrollStrategy(this.scrollStrategy(), this.overlayService),\n panelClass: 'tw-combobox-panel',\n focusTrap: false,\n });\n if (!result) return;\n\n const instance = result.instance;\n instance.onOptionPick.set((index) => {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return;\n const opt = visible[index];\n if (opt.disabled) return;\n this.commitOption(opt, 'option');\n });\n instance.onOptionHover.set((index) => {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return;\n if (visible[index].disabled) return;\n this.activeIndex.set(index);\n });\n this.overlayInstance = instance;\n\n this.installResizeObserver();\n this.updateOverlaySize();\n this.subscribePerOpen();\n // Reset active to first enabled when opening.\n this.activeIndex.set(this.firstEnabledIndex());\n // Set last: this is what wakes the state-push effect, and it must not fire\n // until the instance exists and the per-open state has been reset.\n this.isAttached.set(true);\n this.liveAnnouncer.announce(\n `${this.visibleOptions().length} suggestions available`,\n 'polite',\n );\n this.openedChange.emit({\n open: true,\n trigger: this.inputRef()?.nativeElement ?? this.elementRef.nativeElement,\n });\n }\n\n private closeOverlay(_opts: { silent: boolean }): void {\n if (this.closing || !this.overlayInstance) return;\n this.closing = true;\n this.clearAnnounceTimer();\n\n // The coordinator runs the leave animation, then detaches and disposes;\n // this callback fires once the overlay is fully gone.\n this.coordinator.close(() => {\n // Safe to drop the observer: the next open mints a fresh one against the\n // fresh OverlayRef. This used to be the SRP F-01 bug — the observer was\n // disconnected here while the reused ref made `ensureOverlay()`\n // early-return, so it was never re-installed. Under dispose-on-close the\n // install is unconditional, so that shape cannot come back.\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.overlayInstance = null;\n this.isAttached.set(false);\n untracked(() => this.open.set(false));\n this.closing = false;\n this.openedChange.emit({\n open: false,\n trigger: this.inputRef()?.nativeElement ?? this.elementRef.nativeElement,\n });\n });\n }\n\n private installResizeObserver(): void {\n if (!this.platform.isBrowser || typeof ResizeObserver === 'undefined') return;\n const target = this.elementRef.nativeElement;\n this.resizeObserver?.disconnect();\n this.resizeObserver = new ResizeObserver(() => this.updateOverlaySize());\n this.resizeObserver.observe(target);\n }\n\n private updateOverlaySize(): void {\n const overlayRef = this.coordinator.ref();\n if (!overlayRef) return;\n const width = this.panelWidth();\n if (width === 'trigger') {\n const anchor = this.triggerSurfaceRef()?.nativeElement ?? this.elementRef.nativeElement;\n const rect = anchor.getBoundingClientRect();\n overlayRef.updateSize({ width: rect.width });\n } else if (width === 'auto') {\n overlayRef.updateSize({ width: undefined, minWidth: undefined });\n } else {\n overlayRef.updateSize({ width });\n }\n }\n\n /**\n * Registers the backdrop-click and Escape listeners for one open.\n *\n * The Escape listener rides the overlay's `keydownEvents()`. Mirrors\n * `SelectComponent` so focus inside the overlay panel (e.g., if the user\n * tabs into projected loading/empty templates) still dismisses cleanly.\n * The combobox's own `<input>` keydown handler already short-circuits\n * Escape when focus is on the input; this layer is the safety net for\n * panel-internal focus.\n *\n * Both streams come from the coordinator, which completes them when the\n * overlay closes — so there is no per-open `Subscription` aggregate to keep\n * and no way for listeners to accumulate across opens.\n */\n private subscribePerOpen(): void {\n this.coordinator.backdropClick$().subscribe(() => this.closePanel());\n this.coordinator.escape$().subscribe((event) => {\n event.preventDefault();\n this.inputValue.set(this.lastCommittedLabel());\n this.closePanel();\n });\n }\n\n private resolvePanelClass(): string {\n const raw = this.panelClass();\n return Array.isArray(raw) ? raw.join(' ') : (raw as string);\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: T | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n this.inputValue.set('');\n this.lastCommittedLabel.set('');\n this.pendingWriteValue.set(UNRESOLVED);\n this.valueCommit.emit({ value: null, source: 'programmatic' });\n return;\n }\n // Store verbatim.\n this.value.set(value);\n const cmp = this.compareWith();\n const valueFn = this.optionValue();\n const labelFn = this.optionLabel();\n const match = this.options().find((o) => {\n try {\n return cmp(valueFn(o), value as T);\n } catch {\n return false;\n }\n });\n if (match) {\n const label = labelFn(match);\n this.inputValue.set(label);\n this.lastCommittedLabel.set(label);\n this.pendingWriteValue.set(UNRESOLVED);\n } else {\n const label = String(value);\n this.inputValue.set(label);\n this.lastCommittedLabel.set(label);\n this.pendingWriteValue.set(value);\n }\n this.valueCommit.emit({ value, source: 'programmatic' });\n }\n\n registerOnChange(fn: (value: T | string | 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.cvaDisabled.set(isDisabled);\n if (isDisabled && this.open()) {\n this.closePanel();\n }\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n setLabelledByIds(ids: string[]): void {\n this.labelledByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n onContainerClick(_event: MouseEvent): void {\n if (this.isDisabled()) return;\n this.inputRef()?.nativeElement.focus();\n }\n\n ngOnInit(): void {\n // NgControl's `control` is set by the parent FormControl* directive before\n // children's `ngOnInit`. Subscribe here so errorState reacts to status/value\n // changes on the bound control.\n this.errorWiring.connect();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdevhub-ngx-tw-combobox.mjs","sources":["../../../projects/ngx-tw/combobox/combobox-overlay.ts","../../../projects/ngx-tw/combobox/combobox.ts","../../../projects/ngx-tw/combobox/cdevhub-ngx-tw-combobox.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport type { TemplateRef } from '@angular/core';\nimport type {\n ComboboxRenderedRow,\n ComboboxVisibleOption,\n TwComboboxOptionContext,\n} from './types';\n\n/**\n * Internal overlay panel for `tw-combobox`. Renders the listbox region with\n * grouped/flat option rows, the loading slot, and the empty fallback. Not\n * exported from the public API — instances are attached via `ComponentPortal`\n * by the parent `ComboboxComponent`.\n */\n@Component({\n selector: 'tw-combobox-overlay',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: {\n '[class]': 'panelClasses()',\n '[animate.enter]': '\"scale-in\"',\n '[animate.leave]': '\"scale-out\"',\n },\n template: `\n @if (loading()) {\n @if (loadingTemplate(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\" />\n } @else {\n <div class=\"flex items-center justify-center gap-2 px-4 py-6 text-sm text-fg-muted\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n class=\"size-4 animate-spin\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"3\" opacity=\"0.25\" />\n <path\n d=\"M21 12a9 9 0 0 0-9-9\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>Loading…</span>\n </div>\n }\n }\n\n <ul\n [id]=\"listboxId()\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"labelledBy() || null\"\n aria-multiselectable=\"false\"\n [style.maxHeight.px]=\"panelMaxHeight()\"\n class=\"list-none m-0 p-0 overflow-y-auto py-1\"\n >\n @if (renderedRows().length === 0 && !loading()) {\n @if (emptyTemplate(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl; context: { $implicit: query() }\" />\n } @else {\n <li class=\"px-4 py-10 text-center text-sm text-fg-muted list-none\">\n {{ emptyMessage() }}\n </li>\n }\n } @else {\n @for (row of renderedRows(); track trackRow($index, row)) {\n @if (row.kind === 'group') {\n <li\n role=\"group\"\n [attr.aria-labelledby]=\"groupHeaderId(row.group)\"\n class=\"list-none\"\n >\n <div\n [id]=\"groupHeaderId(row.group)\"\n class=\"px-3 py-1 text-2xs uppercase tracking-wide text-fg-subtle font-semibold\"\n >\n {{ row.group }}\n </div>\n </li>\n } @else {\n <!-- ARIA activedescendant listbox: keyboard navigation lives on the\n parent combobox input (via aria-activedescendant). Options are\n click-targets only and never receive DOM focus, so neither a\n keydown nor a tabindex applies here. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <li\n role=\"option\"\n [id]=\"optionIdFn()(row.index)\"\n [attr.aria-selected]=\"isSelected()(row.index) ? 'true' : 'false'\"\n [attr.aria-disabled]=\"row.option.disabled ? 'true' : null\"\n [class]=\"optionClass(row.index, row.option.disabled)\"\n (mousedown)=\"onOptionMousedown($event, row.index)\"\n (click)=\"onOptionClick($event, row.index)\"\n (mouseenter)=\"onOptionMouseEnter(row.index, row.option.disabled)\"\n >\n @if (optionTemplate(); as tpl) {\n <ng-container\n *ngTemplateOutlet=\"\n tpl;\n context: buildOptionContext(row.index, row.option)\n \"\n />\n } @else {\n <span class=\"flex-1 min-w-0\">\n <span class=\"block truncate\">{{ row.option.label }}</span>\n @if (row.option.description) {\n <span class=\"block text-xs text-fg-muted truncate\">{{ row.option.description }}</span>\n }\n </span>\n }\n </li>\n }\n }\n }\n </ul>\n `,\n})\nexport class ComboboxOverlayComponent<T = unknown> {\n /** @internal */\n readonly hostElement = inject(ElementRef<HTMLElement>);\n\n // ── Config signals pushed by the parent ──\n\n /** @internal */\n readonly listboxId = signal('');\n /** @internal */\n readonly labelledBy = signal('');\n /** @internal */\n readonly panelMaxHeight = signal(256);\n /** @internal */\n readonly emptyMessage = signal('No results');\n /** @internal */\n readonly query = signal('');\n /** @internal */\n readonly loading = signal(false);\n /** @internal */\n readonly activeIndex = signal(-1);\n /** @internal */\n readonly renderedRows = signal<readonly ComboboxRenderedRow<T>[]>([]);\n /** @internal */\n readonly isSelected = signal<(visibleIndex: number) => boolean>(() => false);\n /** @internal */\n readonly optionIdFn = signal<(index: number) => string>((i) => `option-${i}`);\n /** @internal */\n readonly groupHeaderIdFn = signal<(group: string) => string>((g) => `group-${g}`);\n /** @internal */\n readonly customPanelClass = signal('');\n\n /** @internal */\n readonly optionTemplate = signal<TemplateRef<TwComboboxOptionContext<T>> | undefined>(undefined);\n /** @internal */\n readonly emptyTemplate = signal<TemplateRef<{ $implicit: string }> | undefined>(undefined);\n /** @internal */\n readonly loadingTemplate = signal<TemplateRef<unknown> | undefined>(undefined);\n\n // ── Callbacks pushed by the parent ──\n\n /** @internal */\n readonly onOptionPick = signal<(index: number) => void>(() => {});\n /** @internal */\n readonly onOptionHover = signal<(index: number) => void>(() => {});\n\n // ── Computed classes ──\n\n /** @internal */\n readonly panelClasses = computed(() => {\n const base =\n 'block w-full bg-surface-overlay border border-border rounded-md shadow-md overflow-hidden';\n const custom = this.customPanelClass();\n return custom ? `${base} ${custom}` : base;\n });\n\n /** @internal */\n optionClass(index: number, disabled: boolean): string {\n const base =\n 'flex cursor-pointer items-center gap-2 px-3 py-2 text-sm text-fg select-none transition-colors duration-normal motion-reduce:transition-none';\n const parts: string[] = [base];\n if (disabled) {\n parts.push('opacity-50 pointer-events-none cursor-default');\n } else if (this.activeIndex() === index) {\n parts.push('bg-surface-muted');\n } else {\n parts.push('hover:bg-surface-muted');\n }\n return parts.join(' ');\n }\n\n /** @internal */\n groupHeaderId(group: string): string {\n return this.groupHeaderIdFn()(group);\n }\n\n /** @internal */\n buildOptionContext(index: number, option: ComboboxVisibleOption<T>): TwComboboxOptionContext<T> {\n return {\n $implicit: option.option as TwComboboxOptionContext<T>['$implicit'],\n option: option.option as TwComboboxOptionContext<T>['option'],\n label: option.label,\n value: option.value,\n selected: this.isSelected()(index),\n active: this.activeIndex() === index,\n disabled: option.disabled,\n index,\n };\n }\n\n /** @internal track function for `@for`. */\n trackRow(_index: number, row: ComboboxRenderedRow<T>): string | number {\n if (row.kind === 'group') return `g:${row.group}`;\n return `o:${row.index}`;\n }\n\n // ── Interactions ──\n\n /** @internal — `preventDefault` on mousedown keeps DOM focus on the input. */\n onOptionMousedown(event: MouseEvent, _index: number): void {\n event.preventDefault();\n }\n\n /** @internal */\n onOptionClick(event: MouseEvent, index: number): void {\n event.preventDefault();\n event.stopPropagation();\n this.onOptionPick()(index);\n }\n\n /** @internal */\n onOptionMouseEnter(index: number, disabled: boolean): void {\n if (disabled) return;\n this.onOptionHover()(index);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n type Signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NgControl } from '@angular/forms';\nimport {\n buildSelectLikePositions,\n type ErrorStateMatcher,\n PickerOverlayCoordinator,\n resolveSelectScrollStrategy,\n type TwColor,\n type TwSize,\n wireErrorState,\n} from '@cdevhub/ngx-tw/core';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { tv } from 'tailwind-variants';\nimport {\n type FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport { ComboboxOverlayComponent } from './combobox-overlay';\nimport type {\n ComboboxRenderedRow,\n ComboboxVisibleOption,\n TwComboboxFilterFn,\n TwComboboxOpenedEvent,\n TwComboboxOptionContext,\n TwComboboxOptionSelectedEvent,\n TwComboboxValueCommitEvent,\n} from './types';\n\n// ── Constants ──\n\n/** Debounce window (ms) for LiveAnnouncer result announcements while typing. */\nconst ANNOUNCE_DEBOUNCE = 200;\n\n/** Sentinel for an unresolved write-value awaiting late-arriving options. */\nconst UNRESOLVED = Symbol('combobox-unresolved');\n\nlet nextComboboxId = 0;\n\n// ── Accessor defaults ──\n\nfunction defaultOptionLabel(o: unknown): string {\n const opt = o as { label?: unknown; value?: unknown };\n if (typeof opt.label === 'string') return opt.label;\n return String(opt.value ?? '');\n}\n\nfunction defaultOptionValue<T>(o: unknown): T {\n return (o as { value: T }).value;\n}\n\nfunction defaultOptionDisabled(o: unknown): boolean {\n return !!(o as { disabled?: unknown }).disabled;\n}\n\nfunction defaultOptionGroup(o: unknown): string | undefined {\n return (o as { group?: string }).group;\n}\n\nfunction defaultOptionDescription(o: unknown): string | undefined {\n return (o as { description?: string }).description;\n}\n\nfunction defaultStartsWithFilter(option: unknown, query: string): boolean {\n const trimmed = query.trim().toLowerCase();\n if (!trimmed) return true;\n const label = defaultOptionLabel(option).toLowerCase();\n return label.startsWith(trimmed);\n}\n\n// ── tv() config ──\n\nconst comboboxVariants = tv(\n {\n slots: {\n root: 'relative inline-block w-full',\n // container-focus indicator — the `<input>` clears its own outline\n // (`outline-none` in the input slot below) so the surrounding trigger\n // surface owns the visible ring via `focus-within:`. The color/width\n // variants below paint this ring per the `color`/`errorState` axis.\n trigger:\n 'flex w-full items-center gap-1.5 rounded-md border border-border bg-surface text-fg transition-colors duration-normal motion-reduce:transition-none hover:border-border-strong focus-within:outline-2 focus-within:outline-offset-2',\n input:\n 'flex-1 min-w-0 bg-transparent outline-none placeholder:text-fg-subtle disabled:cursor-not-allowed',\n // `size-6` (24px) is the WCAG 2.2 SC 2.5.8 target-size floor and the `xs`\n // step of the square-interactive scale. It does NOT scale with `size`:\n // the clear sits inside the trigger, whose smallest pinned height is\n // 24px (`xs` -> `h-6`), so any larger step would overflow the smallest\n // trigger. The floor is what the success criterion asks for — which is\n // also why `xs` no longer shrinks it to `size-4`.\n clearButton:\n 'inline-flex items-center justify-center shrink-0 size-6 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n chevron:\n 'shrink-0 text-fg-muted transition-transform duration-normal motion-reduce:transition-none',\n spinner: 'shrink-0 text-fg-muted animate-spin',\n },\n variants: {\n // Trigger height is PINNED (docs/vertical-rhythm.md §1-3): the box is\n // always one line, so it declares its border-box height and carries no\n // vertical padding. Horizontal padding and the font size are unchanged.\n size: {\n // xs density: chevron and spinner use `size-3.5` (14px) — the codified\n // half-step between size-3 and size-4 that lines up with text-xs metric\n // inside a 24px trigger.\n xs: { trigger: 'px-2 text-xs h-6', chevron: 'size-3.5', spinner: 'size-3.5' },\n sm: { trigger: 'px-3 text-sm h-8', chevron: 'size-4', spinner: 'size-4' },\n md: { trigger: 'px-4 text-sm h-9', chevron: 'size-4', spinner: 'size-4' },\n lg: { trigger: 'px-5 text-base h-11', chevron: 'size-5', spinner: 'size-5' },\n xl: { trigger: 'px-6 text-base h-12', chevron: 'size-5', spinner: 'size-5' },\n },\n color: {\n primary: { trigger: 'focus-within:outline-primary-border' },\n secondary: { trigger: 'focus-within:outline-secondary-border' },\n accent: { trigger: 'focus-within:outline-accent-border' },\n neutral: { trigger: 'focus-within:outline-border-strong' },\n info: { trigger: 'focus-within:outline-info-border' },\n success: { trigger: 'focus-within:outline-success-border' },\n warning: { trigger: 'focus-within:outline-warning-border' },\n error: { trigger: 'focus-within:outline-error-border' },\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: {},\n },\n open: {\n true: { chevron: 'rotate-180' },\n false: {},\n },\n // `naked` = wrapped in a `tw-form-field`, which owns the box: its\n // controlWrapper draws the border and the vertical padding. `h-auto`\n // releases the pinned height (declared after `size`, so twMerge keeps it\n // — the same ordering `px-0` already relies on) so the trigger\n // contributes only its line box and the field's own rhythm governs.\n naked: {\n true: {\n trigger:\n 'border-0 bg-transparent rounded-none px-0 py-0 h-auto hover:border-0 focus-within:outline-0 focus-within:outline-offset-0',\n },\n false: {},\n },\n errorState: {\n true: { trigger: 'focus-within:outline-error-border' },\n false: {},\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'primary',\n disabled: false,\n open: false,\n naked: false,\n errorState: false,\n },\n },\n { twMerge: true },\n);\n\n// ── Slot directives ──\n\n/** Structural directive projecting a custom template for each option row. Context: `TwComboboxOptionContext<T>`. */\n@Directive({ selector: '[twComboboxOption]' })\nexport class ComboboxOptionTemplateDirective<T = unknown, O = unknown> {\n /** @internal */\n readonly templateRef = inject(TemplateRef<TwComboboxOptionContext<T, O>>);\n\n /** @internal */\n static ngTemplateContextGuard<T, O>(\n _dir: ComboboxOptionTemplateDirective<T, O>,\n _ctx: unknown,\n ): _ctx is TwComboboxOptionContext<T, O> {\n return true;\n }\n}\n\n/** Structural directive projecting a custom template for the empty-results state. Context: `{ $implicit: query }`. */\n@Directive({ selector: '[twComboboxEmpty]' })\nexport class ComboboxEmptyTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<{ $implicit: string }>);\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: ComboboxEmptyTemplateDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: string } {\n return true;\n }\n}\n\n/** Structural directive projecting a custom template above the list while `loading=true`. */\n@Directive({ selector: '[twComboboxLoading]' })\nexport class ComboboxLoadingTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n\n/** Attribute directive marking a leading adornment projected inside the input row. */\n@Directive({\n selector: '[twComboboxPrefix]',\n host: { class: 'flex items-center shrink-0 text-fg-muted' },\n})\nexport class ComboboxPrefixDirective {}\n\n/** Attribute directive marking a trailing adornment projected inside the input row, before the clear button. */\n@Directive({\n selector: '[twComboboxSuffix]',\n host: { class: 'flex items-center shrink-0 text-fg-muted' },\n})\nexport class ComboboxSuffixDirective {}\n\n// ── Component ──\n\n/**\n * Editable single-select typeahead form control. Follows the WAI-ARIA 1.2\n * combobox + listbox pattern with `aria-activedescendant` (DOM focus stays\n * on the `<input>`). Supports local filtering, async result streams via\n * `queryChange`, grouped options, strict and free-text modes, and full\n * integration with template-driven, reactive, and signal forms plus\n * `tw-form-field`.\n */\n@Component({\n selector: 'tw-combobox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => ComboboxComponent),\n },\n PickerOverlayCoordinator,\n ],\n template: `\n <div #triggerSurface [class]=\"triggerClasses()\">\n <ng-content select=\"[twComboboxPrefix]\" />\n\n <input\n #inputEl\n type=\"text\"\n [id]=\"hostId\"\n [class]=\"inputClasses()\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open() ? 'true' : 'false'\"\n [attr.aria-controls]=\"open() ? listboxId : null\"\n [attr.aria-activedescendant]=\"open() ? (activeOptionId() || null) : null\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"resolvedLabelledBy() || null\"\n [attr.aria-describedby]=\"resolvedDescribedBy() || null\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [disabled]=\"isDisabled()\"\n [placeholder]=\"placeholder() ?? null\"\n [value]=\"inputValue()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (compositionstart)=\"onCompositionStart()\"\n (compositionend)=\"onCompositionEnd($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <ng-content select=\"[twComboboxSuffix]\" />\n\n @if (showSpinner()) {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n [class]=\"spinnerClasses()\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"3\" opacity=\"0.25\" />\n <path\n d=\"M21 12a9 9 0 0 0-9-9\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n </svg>\n }\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n [class]=\"clearButtonClasses()\"\n aria-label=\"Clear\"\n (mousedown)=\"onClearMousedown($event)\"\n (click)=\"onClearClick($event)\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" class=\"size-3\">\n <path\n fill-rule=\"evenodd\"\n d=\"M10 8.586 4.707 3.293a1 1 0 0 0-1.414 1.414L8.586 10l-5.293 5.293a1 1 0 1 0 1.414 1.414L10 11.414l5.293 5.293a1 1 0 0 0 1.414-1.414L11.414 10l5.293-5.293a1 1 0 0 0-1.414-1.414L10 8.586Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n }\n\n @if (showChevron()) {\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n [class]=\"chevronClasses()\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.06l3.71-3.83a.75.75 0 1 1 1.08 1.04l-4.25 4.39a.75.75 0 0 1-1.08 0L5.21 8.27a.75.75 0 0 1 .02-1.06Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </div>\n\n <span hidden>\n <ng-content />\n </span>\n `,\n host: {\n '[class]': 'rootClasses()',\n },\n})\nexport class ComboboxComponent<T = unknown>\n implements ControlValueAccessor, FormFieldControl<T | string | null>, OnInit\n{\n // ── Inputs ──\n\n /** Array of options to render in the popover. Accepts plain records or `TwComboboxOption<T>`. Defaults to an empty array. */\n readonly options = input<readonly unknown[]>([]);\n\n /** Accessor returning the visible label for an option. Used by the default filter and the trigger label resolver. Defaults to reading `.label`, falling back to `String(.value)`. */\n readonly optionLabel = input<(option: unknown) => string>(defaultOptionLabel);\n\n /** Accessor returning the value emitted via `valueCommit` when this option is picked. Defaults to reading `.value`. */\n readonly optionValue = input<(option: unknown) => T>(defaultOptionValue as (option: unknown) => T);\n\n /** Accessor returning whether an option is non-interactive. Defaults to reading `.disabled`. */\n readonly optionDisabled = input<(option: unknown) => boolean>(defaultOptionDisabled);\n\n /** Accessor returning a group label. Options sharing a group render under a labelled `role=\"group\"` region. Defaults to reading `.group`. */\n readonly optionGroup = input<(option: unknown) => string | undefined>(defaultOptionGroup);\n\n /** Accessor returning an optional secondary description rendered under the label in the default option row. Defaults to reading `.description`. */\n readonly optionDescription = input<(option: unknown) => string | undefined>(defaultOptionDescription);\n\n /** Filter function applied client-side whenever `inputValue` changes. Pass `null` to disable client filtering (async mode). Defaults to case-insensitive `startsWith` on the label. */\n readonly filterFn = input<TwComboboxFilterFn | null>(defaultStartsWithFilter);\n\n /** When `true`, free-text commits are rejected — the input reverts to the last committed label on blur. Defaults to `false`. */\n readonly strict = input<boolean>(false);\n\n /** Placeholder shown when the input is empty. Defaults to `undefined`. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** Disables the input and prevents the popover from opening. Defaults to `false`. Alias: `disabled`. */\n readonly disabledInput = input<boolean>(false, { alias: 'disabled' });\n\n /** Sets `aria-required=\"true\"` on the input and the `*` marker on a wrapping `tw-form-field`. Also inferred from `Validators.required` on a bound control, so a reactive/template-driven form does not have to state it twice. Defaults to `false`. */\n readonly requiredInput = input<boolean>(false, { alias: 'required' });\n\n /** Controls trigger padding and font size per the inline padding scale. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color for the focus ring. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Whether the trailing chevron affordance is rendered. Defaults to `true` — the chevron signals the dropdown affordance; the special case is an inline search input that opts out. */\n readonly showChevron = input<boolean>(true);\n\n /** Whether the inline clear (×) button appears while `inputValue` is non-empty. Defaults to `true` — clearing a typed value is the expected combobox gesture; the special case is a required-only flow. */\n readonly clearable = input<boolean>(true);\n\n /** When `true`, shows an in-popover spinner and an inline spinner in the trigger while the popover is open. Defaults to `false`. */\n readonly loading = input<boolean>(false);\n\n /** Debounce window (ms) before `queryChange` emits. Local filtering is not debounced. Defaults to `150`. */\n readonly queryDebounce = input<number>(150);\n\n /** Minimum query length before the popover opens automatically. `0` opens on focus. Defaults to `0`. */\n readonly minQueryLength = input<number>(0);\n\n /** Whether the popover opens automatically when the input receives focus. Defaults to `true` — clicking into a combobox opens the dropdown, matching select-like UX; the special case is a flow that should open only once the user types. */\n readonly openOnFocus = input<boolean>(true);\n\n /** Maximum height (px) of the popover scroll region. Defaults to `256`. */\n readonly panelMaxHeight = input<number>(256);\n\n /** Overlay width strategy. `'trigger'` matches input width; `'auto'` lets content decide; a number is applied as px; a string is passed as a CSS length. Defaults to `'trigger'`. */\n readonly panelWidth = input<'trigger' | 'auto' | number | string>('trigger');\n\n /** Extra class(es) appended to the overlay panel for consumer customization. Defaults to an empty string. */\n readonly panelClass = input<string | readonly string[]>('');\n\n /** CDK overlay scroll strategy. Defaults to `'reposition'`. */\n readonly scrollStrategy = input<'reposition' | 'close' | 'block'>('reposition');\n\n /** Pixel offset between the input and the popover. Defaults to `4`. */\n readonly offset = input<number>(4);\n\n /** Fallback empty-state message when no `*twComboboxEmpty` template is projected. Defaults to `'No results'`. */\n readonly emptyMessage = input<string>('No results');\n\n /** Equality comparator used to reconcile `value` with options during `writeValue`. Defaults to `Object.is`. */\n readonly compareWith = input<(a: T, b: T) => boolean>(Object.is);\n\n /** Accessible name for the combobox input. Defaults to `undefined`. Alias: `aria-label`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external label element. Defaults to `undefined`. Alias: `aria-labelledby`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** ID of an external descriptor element. Defaults to `undefined`. Alias: `aria-describedby`. */\n readonly ariaDescribedby = input<string | undefined>(undefined, { alias: 'aria-describedby' });\n\n /** Per-instance override of the {@link ErrorStateMatcher}. When omitted, the combobox uses the `TW_ERROR_STATE_MATCHER` token's value. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n // ── Models ──\n\n /** Two-way bound committed value. May be an option's value (`T`), a typed string (free-text mode), or `null`. Defaults to `null`. */\n readonly value = model<T | string | null>(null);\n\n /** Two-way bound visible text in the input. Bound separately from `value` so async consumers can drive the query. Writes back on every keystroke, on commit, and on clear. Defaults to `''`. */\n readonly inputValue = model<string>('');\n\n /** Two-way bound open state of the popover. Defaults to `false`. */\n readonly open = model<boolean>(false);\n\n // ── Outputs ──\n\n /** Fires after the query text changes, debounced by `queryDebounce`. Async-mode consumers subscribe to this to fetch results. Payload is the current input text, untrimmed. */\n readonly queryChange = output<string>();\n\n /** Fires when the user picks an option from the list (not on free-text commit). Payload carries the raw option record plus its resolved `value` and `label`. */\n readonly optionSelected = output<TwComboboxOptionSelectedEvent<T>>();\n\n /** Fires whenever `value` changes, with a `source` discriminator distinguishing option / free-text / reset / programmatic origin. */\n readonly valueCommit = output<TwComboboxValueCommitEvent<T>>();\n\n /** Fires when the popover finishes opening or closing. Payload carries the new `open` state and the trigger element the overlay is anchored to. */\n readonly openedChange = output<TwComboboxOpenedEvent>();\n\n // ── Content queries ──\n\n /** @internal */\n readonly optionTemplateChild = contentChild(ComboboxOptionTemplateDirective);\n /** @internal */\n readonly emptyTemplateChild = contentChild(ComboboxEmptyTemplateDirective);\n /** @internal */\n readonly loadingTemplateChild = contentChild(ComboboxLoadingTemplateDirective);\n\n // ── View queries ──\n\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n private readonly triggerSurfaceRef = viewChild<ElementRef<HTMLDivElement>>('triggerSurface');\n\n // ── Injected deps ──\n\n private readonly overlayService = inject(Overlay);\n private readonly coordinator = inject(PickerOverlayCoordinator);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly platform = inject(Platform);\n private readonly formField = inject(TW_FORM_FIELD, { optional: true });\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n // ── Identity ──\n\n private readonly uid = nextComboboxId++;\n /** @internal */\n readonly hostId = `tw-combobox-${this.uid}`;\n /** @internal */\n readonly listboxId = `${this.hostId}-listbox`;\n /** @internal */\n readonly optionId = (index: number): string => `${this.hostId}-option-${index}`;\n /** @internal */\n readonly groupHeaderId = (group: string): string =>\n `${this.hostId}-group-${group.replace(/\\s+/g, '-').toLowerCase()}`;\n\n // ── Internal state signals ──\n\n /** @internal */\n readonly composing = signal(false);\n /** @internal */\n readonly focusedSignal = signal(false);\n private readonly cvaDisabled = signal(false);\n\n /** @internal Shared `errorState` / `required` / `errors` derivation — see `wireErrorState`. */\n private readonly errorWiring = wireErrorState({\n ngControl: () => this.ngControl,\n matcher: () => this.errorStateMatcher(),\n required: () => this.requiredInput(),\n });\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly labelledByIdsSignal = signal<readonly string[]>([]);\n /** @internal */\n readonly lastCommittedLabel = signal<string>('');\n private readonly pendingWriteValue = signal<T | string | null | typeof UNRESOLVED>(UNRESOLVED);\n /** Re-runs the input handler once after IME composition ends. */\n private composingPendingValue: string | null = null;\n\n private onChange: (value: T | string | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n private queryDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n private announceTimer: ReturnType<typeof setTimeout> | null = null;\n /**\n * Watches the host for size changes so `panelWidth=\"trigger\"` keeps tracking\n * while the panel is up. Minted per open and disconnected on close, because\n * the `OverlayRef` it feeds is disposed on close (see `openOverlay`).\n */\n private resizeObserver: ResizeObserver | null = null;\n\n // Overlay bookkeeping is deliberately held in plain fields, not signals — same\n // shape as popover and command-palette. A signal here would be track-read by the\n // open/close lifecycle effect that also writes it, which is the cycle shape\n // CLAUDE.md forbids. The only reactive bit is `isAttached`, written by the\n // lifecycle effect and read only by the state-push effect below, so the two\n // never form a loop.\n private overlayInstance: ComboboxOverlayComponent<T> | null = null;\n private closing = false;\n\n /**\n * Flips true once the overlay component is attached; the sole trigger for the\n * state-push effect. Load-bearing: the close path leaves `activeIndex` and the\n * rest of the pushed state untouched, so on a reopen no data signal changes and\n * nothing else would wake that effect — the fresh panel would render empty.\n */\n private readonly isAttached = signal(false);\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n /** @internal Auto-naked when wrapped in tw-form-field. */\n readonly naked = computed(() => !!this.formField);\n\n /** @internal Resolved visible options (after filter, with derived view fields). */\n readonly visibleOptions = computed<readonly ComboboxVisibleOption<T>[]>(() => {\n const opts = this.options();\n const labelFn = this.optionLabel();\n const valueFn = this.optionValue();\n const disabledFn = this.optionDisabled();\n const groupFn = this.optionGroup();\n const descFn = this.optionDescription();\n const filter = this.filterFn();\n const query = this.inputValue();\n const filtered = filter === null ? opts : opts.filter((o) => filter(o, query));\n return filtered.map((option) => ({\n option,\n label: labelFn(option),\n value: valueFn(option),\n disabled: disabledFn(option),\n group: groupFn(option),\n description: descFn(option),\n }));\n });\n\n /** @internal Rendered rows (group headers + option rows). */\n readonly renderedRows = computed<readonly ComboboxRenderedRow<T>[]>(() => {\n const visible = this.visibleOptions();\n const rows: ComboboxRenderedRow<T>[] = [];\n let currentGroup: string | undefined;\n visible.forEach((v, index) => {\n if (v.group !== currentGroup) {\n if (v.group !== undefined) {\n rows.push({ kind: 'group', group: v.group });\n }\n currentGroup = v.group;\n }\n rows.push({ kind: 'option', option: v, index });\n });\n return rows;\n });\n\n /** Returns the index of the first enabled option, or -1 when none. */\n private firstEnabledIndex(visible: readonly ComboboxVisibleOption<T>[] = this.visibleOptions()): number {\n for (let i = 0; i < visible.length; i++) {\n if (!visible[i].disabled) return i;\n }\n return -1;\n }\n\n /** Returns the index of the last enabled option, or -1 when none. */\n private lastEnabledIndex(visible: readonly ComboboxVisibleOption<T>[] = this.visibleOptions()): number {\n for (let i = visible.length - 1; i >= 0; i--) {\n if (!visible[i].disabled) return i;\n }\n return -1;\n }\n\n /** @internal Active descendant index, resets to the first enabled when the visible list changes. */\n readonly activeIndex = linkedSignal<readonly ComboboxVisibleOption<T>[], number>({\n source: () => this.visibleOptions(),\n computation: (visible) => {\n for (let i = 0; i < visible.length; i++) {\n if (!visible[i].disabled) return i;\n }\n return -1;\n },\n });\n\n /** @internal */\n readonly activeOption = computed(() => {\n const idx = this.activeIndex();\n const visible = this.visibleOptions();\n if (idx < 0 || idx >= visible.length) return null;\n return visible[idx];\n });\n\n /** @internal */\n readonly activeOptionId = computed(() => {\n const idx = this.activeIndex();\n if (idx < 0 || idx >= this.visibleOptions().length) return null;\n return this.optionId(idx);\n });\n\n /** @internal */\n readonly isEmpty = computed(() => this.inputValue().length === 0 && this.value() == null);\n\n /** @internal */\n readonly showClearButton = computed(\n () => this.clearable() && !this.isDisabled() && this.inputValue().length > 0,\n );\n\n /** @internal */\n readonly showSpinner = computed(() => this.loading());\n\n /** @internal */\n readonly resolvedDescribedBy = computed(() => {\n const extra = this.describedByIdsSignal();\n const user = this.ariaDescribedby();\n const merged = [...extra];\n if (user) merged.push(...user.split(/\\s+/).filter(Boolean));\n return merged.length ? merged.join(' ') : '';\n });\n\n /** @internal */\n readonly resolvedLabelledBy = computed(() => {\n const extra = this.labelledByIdsSignal();\n const user = this.ariaLabelledby();\n const merged = [...extra];\n if (user) merged.push(...user.split(/\\s+/).filter(Boolean));\n return merged.length ? merged.join(' ') : '';\n });\n\n /** @internal Error-state per the configured `ErrorStateMatcher`. Reads the bound `NgControl.invalid` through the matcher. */\n readonly errorState: Signal<boolean> = this.errorWiring.errorState;\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n comboboxVariants({\n size: this.size(),\n color: this.color(),\n disabled: this.isDisabled(),\n open: this.open(),\n naked: this.naked(),\n errorState: this.errorState(),\n }),\n );\n\n /** @internal */\n readonly rootClasses = computed(() => this.variantResult().root());\n /** @internal */\n readonly triggerClasses = computed(() => this.variantResult().trigger());\n /** @internal */\n readonly inputClasses = computed(() => this.variantResult().input());\n /** @internal */\n readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n /** @internal */\n readonly chevronClasses = computed(() => this.variantResult().chevron());\n /** @internal */\n readonly spinnerClasses = computed(() => this.variantResult().spinner());\n\n // ── FormFieldControl impl ──\n\n /** @internal */\n readonly id: Signal<string> = computed(() => this.hostId);\n /** @internal */\n readonly focused: Signal<boolean> = this.focusedSignal.asReadonly();\n /** @internal */\n readonly empty: Signal<boolean> = this.isEmpty;\n /** @internal */\n readonly disabled: Signal<boolean> = this.isDisabled;\n /**\n * @internal Resolved required state: the `required` input OR'd with\n * `Validators.required` on a bound `NgControl`. Without the validator arm the\n * form-field `*` marker (`FormFieldComponent.isRequired`) and the input's\n * `aria-required` silently vanish under reactive/template-driven forms, while\n * signal forms shows them — `cvaControlCreate` writes the `required` *input*\n * directly from the field state and never consults validators. The OR keeps\n * both branches true at once.\n */\n readonly required: Signal<boolean> = this.errorWiring.required;\n /** @internal Active validation errors map from the bound `NgControl`. Drives `[twError match=\"…\"]` inside a wrapping `tw-form-field`; without it the form-field's key set is permanently empty and every `match`ed error stays hidden. */\n readonly errors: Signal<Record<string, unknown> | null> = this.errorWiring.errors;\n /** @internal */\n readonly controlType = 'combobox';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() => this.ariaDescribedby());\n /** @internal */\n readonly userAriaLabelledby: Signal<string | undefined> = computed(() => this.ariaLabelledby());\n\n // ── Constructor ──\n\n constructor() {\n // Material-style CVA wiring: declare ourselves as the value accessor on any\n // host-level `NgControl` (FormControlDirective, NgModel, etc.). This avoids\n // the circular-DI that a static `NG_VALUE_ACCESSOR` provider would create\n // because `NgControl` is injected with `self: true` on the same element.\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Mirror parent `open` model into overlay lifecycle.\n // Only `open` and `isDisabled` are read in the tracked phase; the lifecycle\n // calls run inside `untracked()` because they both read and write panel state\n // (openOverlay writes activeIndex and reads visibleOptions).\n effect(() => {\n const shouldOpen = this.open();\n const disabled = this.isDisabled();\n untracked(() => {\n if (disabled && this.overlayInstance) {\n this.closeOverlay({ silent: false });\n return;\n }\n if (shouldOpen && !this.overlayInstance && !disabled && !this.closing) {\n this.openOverlay();\n } else if (!shouldOpen && this.overlayInstance && !this.closing) {\n this.closeOverlay({ silent: false });\n }\n });\n });\n\n // Push state into overlay component whenever anything relevant changes.\n // `isAttached` is the trigger — it is written by the lifecycle effect above\n // and never written here, so the two effects cannot feed each other.\n // While the panel is animating out, freeze content updates so list mutations\n // (e.g. the input filtering down after commitOption) don't visually flicker\n // the panel during the leave animation.\n effect(() => {\n const attached = this.isAttached();\n const renderedRows = this.renderedRows();\n const activeIndex = this.activeIndex();\n const panelMaxHeight = this.panelMaxHeight();\n const emptyMessage = this.emptyMessage();\n const query = this.inputValue();\n const loading = this.loading();\n const labelledBy = this.resolvedLabelledBy();\n const optionTemplate = this.optionTemplateChild()?.templateRef;\n const emptyTemplate = this.emptyTemplateChild()?.templateRef;\n const loadingTemplate = this.loadingTemplateChild()?.templateRef;\n const customPanelClass = this.resolvePanelClass();\n // Tracked so the selection snapshot below refreshes when either changes.\n // The snapshot replaced a live closure — see the `isSelected` push.\n const visibleCount = this.visibleOptions().length;\n void this.value();\n untracked(() => {\n const instance = this.overlayInstance;\n if (!attached || !instance || this.closing) return;\n instance.renderedRows.set(renderedRows);\n instance.activeIndex.set(activeIndex);\n instance.panelMaxHeight.set(panelMaxHeight);\n instance.emptyMessage.set(emptyMessage);\n instance.query.set(query);\n instance.loading.set(loading);\n instance.labelledBy.set(labelledBy);\n instance.optionTemplate.set(optionTemplate as TemplateRef<TwComboboxOptionContext<T>> | undefined);\n instance.emptyTemplate.set(emptyTemplate);\n instance.loadingTemplate.set(loadingTemplate);\n instance.customPanelClass.set(customPanelClass);\n instance.listboxId.set(this.listboxId);\n instance.optionIdFn.set(this.optionId);\n instance.groupHeaderIdFn.set(this.groupHeaderId);\n // A SNAPSHOT, not a live closure. `renderedRows` is frozen while the\n // panel animates out (the guard above), and each frozen row carries its\n // index into the visible list at freeze time. A closure reading\n // `visibleOptions()` at call time would resolve those stale indices\n // against the current, already-refiltered list — so committing an option\n // marked the WRONG row `aria-selected=\"true\"` for the ~120ms leave\n // window. Snapshotting here binds the flags to the same generation of\n // the list as the rows they describe.\n const selectedFlags: boolean[] = new Array(visibleCount);\n for (let i = 0; i < visibleCount; i++) {\n selectedFlags[i] = this.isVisibleOptionSelected(i);\n }\n instance.isSelected.set((index: number) => selectedFlags[index] ?? false);\n });\n });\n\n // Late-arriving options reconciler for the async writeValue race.\n effect(() => {\n const opts = this.options();\n const pending = untracked(this.pendingWriteValue);\n if (pending === UNRESOLVED) return;\n if (opts.length === 0) return;\n const cmp = this.compareWith();\n const valueFn = this.optionValue();\n const labelFn = this.optionLabel();\n const match = opts.find((o) => {\n try {\n return cmp(valueFn(o), pending as T);\n } catch {\n return false;\n }\n });\n untracked(() => {\n if (match) {\n this.inputValue.set(labelFn(match));\n this.lastCommittedLabel.set(labelFn(match));\n }\n // Always clear the sentinel — subsequent options changes won't re-resolve.\n this.pendingWriteValue.set(UNRESOLVED);\n });\n });\n\n // Debounced LiveAnnouncer result-count announcements.\n effect(() => {\n const visible = this.visibleOptions();\n const query = this.inputValue();\n const isOpen = this.open();\n untracked(() => {\n if (!isOpen) return;\n this.clearAnnounceTimer();\n this.announceTimer = setTimeout(() => {\n const count = visible.length;\n const message =\n count === 0\n ? `No results for ${query}`\n : count === 1\n ? '1 result'\n : `${count} results`;\n this.liveAnnouncer.announce(message, 'polite');\n }, ANNOUNCE_DEBOUNCE);\n });\n });\n\n // FocusMonitor for blur → onTouched + focused state.\n const monitorSub = this.focusMonitor\n .monitor(this.elementRef, true)\n .subscribe((origin) => {\n const wasFocused = this.focusedSignal();\n this.focusedSignal.set(!!origin);\n if (!origin && wasFocused) {\n this.onTouched();\n // Blur often flips `touched` on the bound `NgControl`; bump the\n // revision so `errorState` recomputes.\n this.errorWiring.bump();\n }\n });\n\n // The overlay itself is torn down by `PickerOverlayCoordinator`, which\n // registers its own `DestroyRef.onDestroy` during this component's field\n // initialisation — i.e. before this hook — and disposes the `OverlayRef`,\n // cancels the close timer and completes the per-open streams there.\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.clearQueryDebounceTimer();\n this.clearAnnounceTimer();\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.overlayInstance = null;\n });\n }\n\n // ── Public methods ──\n\n /** Opens the popover. No-op when disabled or already open. */\n openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n }\n\n /** Closes the popover. No-op when already closed. */\n closePanel(): void {\n if (!this.open()) return;\n this.open.set(false);\n }\n\n /** Programmatically focuses the input. */\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n // ── Visible-option helpers ──\n\n /** @internal */\n isVisibleOptionSelected(index: number): boolean {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return false;\n const current = this.value();\n if (current === null || current === undefined) return false;\n const cmp = this.compareWith();\n try {\n return cmp(visible[index].value, current as T);\n } catch {\n return false;\n }\n }\n\n // ── Input event handlers ──\n\n /** @internal */\n onInput(event: Event): void {\n if (this.composing()) {\n // Defer; we'll re-run with the final value on compositionend.\n this.composingPendingValue = (event.target as HTMLInputElement).value;\n return;\n }\n const target = event.target as HTMLInputElement;\n const value = target.value;\n this.inputValue.set(value);\n this.scheduleQueryEmit(value);\n // Open if not blocked by minQueryLength and not disabled.\n if (!this.isDisabled() && value.length >= this.minQueryLength()) {\n if (!this.open()) {\n this.open.set(true);\n }\n } else if (value.length < this.minQueryLength() && this.open()) {\n this.open.set(false);\n }\n }\n\n /** @internal */\n onCompositionStart(): void {\n this.composing.set(true);\n }\n\n /** @internal */\n onCompositionEnd(event: CompositionEvent): void {\n this.composing.set(false);\n const target = event.target as HTMLInputElement;\n const value = target.value || this.composingPendingValue || '';\n this.composingPendingValue = null;\n // Re-run the input handler logic once with the resolved value.\n this.inputValue.set(value);\n this.scheduleQueryEmit(value);\n if (!this.isDisabled() && value.length >= this.minQueryLength() && !this.open()) {\n this.open.set(true);\n }\n }\n\n /** @internal */\n onFocus(): void {\n if (this.isDisabled()) return;\n if (this.openOnFocus() && this.inputValue().length >= this.minQueryLength() && !this.open()) {\n this.open.set(true);\n }\n }\n\n /** @internal */\n onBlur(): void {\n if (this.composing()) return;\n // Don't commit while the user is interacting with the overlay (option mousedown\n // calls preventDefault to keep focus on the input, so blur here means real focus loss).\n if (this.isDisabled()) return;\n this.commit('blur');\n }\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n if (this.composing()) return;\n if (this.isDisabled()) return;\n const key = event.key;\n\n // Alt+Arrow combos\n if (event.altKey && key === 'ArrowDown') {\n event.preventDefault();\n this.openPanel();\n return;\n }\n if (event.altKey && key === 'ArrowUp') {\n event.preventDefault();\n this.closePanel();\n return;\n }\n\n switch (key) {\n case 'ArrowDown': {\n event.preventDefault();\n if (!this.open()) {\n this.openPanel();\n this.moveActiveTo(this.firstEnabledIndex(), 1);\n } else {\n this.moveActive(1);\n }\n return;\n }\n case 'ArrowUp': {\n event.preventDefault();\n if (!this.open()) {\n this.openPanel();\n this.moveActiveTo(this.lastEnabledIndex(), -1);\n } else {\n this.moveActive(-1);\n }\n return;\n }\n case 'Home': {\n if (this.inputValue().length === 0 || event.altKey) {\n event.preventDefault();\n if (!this.open()) this.openPanel();\n this.moveActiveTo(0, 1);\n }\n return;\n }\n case 'End': {\n if (this.inputValue().length === 0 || event.altKey) {\n event.preventDefault();\n if (!this.open()) this.openPanel();\n this.moveActiveTo(this.visibleOptions().length - 1, -1);\n }\n return;\n }\n case 'Enter': {\n const active = this.activeOption();\n if (this.open() && active && !active.disabled) {\n event.preventDefault();\n event.stopPropagation();\n this.commitOption(active, 'option');\n return;\n }\n // Form-submit passthrough: do NOT call preventDefault.\n return;\n }\n case 'Escape': {\n if (this.open()) {\n event.preventDefault();\n event.stopPropagation();\n this.inputValue.set(this.lastCommittedLabel());\n this.closePanel();\n } else if (this.clearable() && this.inputValue().length > 0) {\n event.preventDefault();\n this.clear();\n }\n return;\n }\n case 'Tab': {\n // Commit (no preventDefault) so focus moves naturally.\n this.commit('tab');\n return;\n }\n case 'Backspace': {\n // Explicit no-op on empty input — do not close the popover.\n if (this.inputValue().length === 0) {\n event.preventDefault();\n }\n return;\n }\n default:\n return;\n }\n }\n\n // ── Clear button ──\n\n /** @internal — preventDefault to keep DOM focus on the input. */\n onClearMousedown(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n /**\n * @internal\n *\n * Reached by mouse and — since the button left `tabindex=\"-1\"` — by Enter or\n * Space from the keyboard, both of which a native `<button>` delivers here\n * as a click. Clearing unmounts this button (`showClearButton()` goes\n * false), so focus is handed back to the input rather than falling to\n * `<body>` (SC 2.4.3).\n */\n onClearClick(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.clear();\n this.inputRef()?.nativeElement.focus();\n }\n\n /** Clears the input and committed value, emitting `valueCommit({ source: 'reset' })`. */\n clear(): void {\n if (this.isDisabled()) return;\n this.value.set(null);\n this.inputValue.set('');\n this.lastCommittedLabel.set('');\n this.valueCommit.emit({ value: null, source: 'reset' });\n this.onChange(null);\n this.closePanel();\n }\n\n // ── Active-index navigation ──\n\n private moveActive(delta: 1 | -1): void {\n const visible = this.visibleOptions();\n if (visible.length === 0) {\n this.activeIndex.set(-1);\n return;\n }\n const n = visible.length;\n let idx = this.activeIndex();\n if (idx < 0) idx = delta > 0 ? -1 : n;\n for (let i = 0; i < n; i++) {\n idx = (idx + delta + n) % n;\n if (!visible[idx].disabled) {\n this.activeIndex.set(idx);\n this.scrollActiveIntoView();\n return;\n }\n }\n }\n\n private moveActiveTo(startIndex: number, direction: 1 | -1): void {\n const visible = this.visibleOptions();\n if (visible.length === 0) {\n this.activeIndex.set(-1);\n return;\n }\n let i = Math.max(0, Math.min(startIndex, visible.length - 1));\n const max = visible.length;\n for (let n = 0; n < max; n++) {\n if (!visible[i].disabled) {\n this.activeIndex.set(i);\n this.scrollActiveIntoView();\n return;\n }\n i += direction;\n if (i < 0 || i >= visible.length) return;\n }\n }\n\n private scrollActiveIntoView(): void {\n if (!this.platform.isBrowser) return;\n queueMicrotask(() => {\n const id = this.activeOptionId();\n if (!id) return;\n const el = document.getElementById(id);\n if (el && typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({ block: 'nearest', behavior: 'auto' });\n }\n });\n }\n\n // ── Commit resolver ──\n\n /** @internal */\n commit(source: 'enter' | 'blur' | 'tab'): void {\n if (this.isDisabled() || this.composing()) return;\n\n const rawText = this.inputValue();\n const text = rawText.trim();\n const active = this.activeOption();\n const labelFn = this.optionLabel();\n const disabledFn = this.optionDisabled();\n\n // 1. Active option wins.\n if (active && !active.disabled) {\n this.commitOption(active, 'option');\n return;\n }\n\n // 2. Exact label match auto-resolves.\n const exact = this.options().find(\n (o) => !disabledFn(o) && labelFn(o).trim() === text && text.length > 0,\n );\n if (exact) {\n const valueFn = this.optionValue();\n const groupFn = this.optionGroup();\n const descFn = this.optionDescription();\n this.commitOption(\n {\n option: exact,\n label: labelFn(exact),\n value: valueFn(exact),\n disabled: false,\n group: groupFn(exact),\n description: descFn(exact),\n },\n 'option',\n );\n return;\n }\n\n // 3. Empty text → null.\n if (text === '') {\n const wasNonNull = this.value() !== null || this.inputValue() !== '';\n this.value.set(null);\n this.inputValue.set('');\n this.lastCommittedLabel.set('');\n if (wasNonNull) {\n this.valueCommit.emit({ value: null, source: 'reset' });\n this.onChange(null);\n }\n this.closePanel();\n return;\n }\n\n // 4. No match.\n if (this.strict()) {\n this.inputValue.set(this.lastCommittedLabel());\n if (source !== 'enter') {\n this.closePanel();\n } else if (this.visibleOptions().length === 0) {\n this.closePanel();\n }\n return;\n }\n\n // Free-text commit.\n this.value.set(text);\n this.inputValue.set(text);\n this.lastCommittedLabel.set(text);\n this.valueCommit.emit({ value: text, source: 'free-text' });\n this.onChange(text);\n this.closePanel();\n }\n\n /** @internal */\n commitOption(option: ComboboxVisibleOption<T>, source: 'option'): void {\n const value = option.value;\n const label = option.label;\n this.value.set(value);\n this.inputValue.set(label);\n this.lastCommittedLabel.set(label);\n this.optionSelected.emit({ option: option.option, value, label });\n this.valueCommit.emit({ value, source });\n this.onChange(value);\n this.liveAnnouncer.announce(`${label} selected`, 'polite');\n this.closePanel();\n }\n\n // ── Query debounce ──\n\n private scheduleQueryEmit(value: string): void {\n this.clearQueryDebounceTimer();\n const delay = this.queryDebounce();\n this.queryDebounceTimer = setTimeout(() => {\n this.queryDebounceTimer = null;\n this.queryChange.emit(value);\n }, delay);\n }\n\n private clearQueryDebounceTimer(): void {\n if (this.queryDebounceTimer !== null) {\n clearTimeout(this.queryDebounceTimer);\n this.queryDebounceTimer = null;\n }\n }\n\n private clearAnnounceTimer(): void {\n if (this.announceTimer !== null) {\n clearTimeout(this.announceTimer);\n this.announceTimer = null;\n }\n }\n\n // ── Overlay lifecycle ──\n\n /**\n * Builds and attaches the panel through {@link PickerOverlayCoordinator}.\n *\n * The coordinator disposes the `OverlayRef` on close, so every value read\n * here — `offset`, `scrollStrategy`, `panelClass`, and the position\n * strategy's origin — is re-read on each open rather than frozen at the\n * first one. That replaces the previous `refreshPositionConfig()` /\n * `applyScrollStrategy()` pair, which could only refresh the two inputs it\n * knew about on a reused ref.\n *\n * `focusTrap: false` is load-bearing: this is an `aria-activedescendant`\n * combobox, so DOM focus never leaves the `<input>` and a trap's anchor\n * elements would inject tab stops around a panel with nothing focusable in it.\n */\n private openOverlay(): void {\n const result = this.coordinator.open<ComboboxOverlayComponent<T>>({\n origin: this.triggerSurfaceRef() ?? this.elementRef,\n portalComponent: ComboboxOverlayComponent as unknown as new () => ComboboxOverlayComponent<T>,\n viewContainerRef: this.viewContainerRef,\n injector: this.injector,\n positions: buildSelectLikePositions(this.offset()),\n scrollStrategy: resolveSelectScrollStrategy(this.scrollStrategy(), this.overlayService),\n panelClass: 'tw-combobox-panel',\n focusTrap: false,\n });\n if (!result) return;\n\n const instance = result.instance;\n instance.onOptionPick.set((index) => {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return;\n const opt = visible[index];\n if (opt.disabled) return;\n this.commitOption(opt, 'option');\n });\n instance.onOptionHover.set((index) => {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return;\n if (visible[index].disabled) return;\n this.activeIndex.set(index);\n });\n this.overlayInstance = instance;\n\n this.installResizeObserver();\n this.updateOverlaySize();\n this.subscribePerOpen();\n // Reset active to first enabled when opening.\n this.activeIndex.set(this.firstEnabledIndex());\n // Set last: this is what wakes the state-push effect, and it must not fire\n // until the instance exists and the per-open state has been reset.\n this.isAttached.set(true);\n this.liveAnnouncer.announce(\n `${this.visibleOptions().length} suggestions available`,\n 'polite',\n );\n this.openedChange.emit({\n open: true,\n trigger: this.inputRef()?.nativeElement ?? this.elementRef.nativeElement,\n });\n }\n\n private closeOverlay(_opts: { silent: boolean }): void {\n if (this.closing || !this.overlayInstance) return;\n this.closing = true;\n this.clearAnnounceTimer();\n\n // The coordinator runs the leave animation, then detaches and disposes;\n // this callback fires once the overlay is fully gone.\n this.coordinator.close(() => {\n // Safe to drop the observer: the next open mints a fresh one against the\n // fresh OverlayRef. This used to be the SRP F-01 bug — the observer was\n // disconnected here while the reused ref made `ensureOverlay()`\n // early-return, so it was never re-installed. Under dispose-on-close the\n // install is unconditional, so that shape cannot come back.\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.overlayInstance = null;\n this.isAttached.set(false);\n untracked(() => this.open.set(false));\n this.closing = false;\n this.openedChange.emit({\n open: false,\n trigger: this.inputRef()?.nativeElement ?? this.elementRef.nativeElement,\n });\n });\n }\n\n private installResizeObserver(): void {\n if (!this.platform.isBrowser || typeof ResizeObserver === 'undefined') return;\n const target = this.elementRef.nativeElement;\n this.resizeObserver?.disconnect();\n this.resizeObserver = new ResizeObserver(() => this.updateOverlaySize());\n this.resizeObserver.observe(target);\n }\n\n private updateOverlaySize(): void {\n const overlayRef = this.coordinator.ref();\n if (!overlayRef) return;\n const width = this.panelWidth();\n if (width === 'trigger') {\n const anchor = this.triggerSurfaceRef()?.nativeElement ?? this.elementRef.nativeElement;\n const rect = anchor.getBoundingClientRect();\n overlayRef.updateSize({ width: rect.width });\n } else if (width === 'auto') {\n overlayRef.updateSize({ width: undefined, minWidth: undefined });\n } else {\n overlayRef.updateSize({ width });\n }\n }\n\n /**\n * Registers the backdrop-click and Escape listeners for one open.\n *\n * The Escape listener rides the overlay's `keydownEvents()`. Mirrors\n * `SelectComponent` so focus inside the overlay panel (e.g., if the user\n * tabs into projected loading/empty templates) still dismisses cleanly.\n * The combobox's own `<input>` keydown handler already short-circuits\n * Escape when focus is on the input; this layer is the safety net for\n * panel-internal focus.\n *\n * Both streams come from the coordinator, which completes them when the\n * overlay closes — so there is no per-open `Subscription` aggregate to keep\n * and no way for listeners to accumulate across opens.\n */\n private subscribePerOpen(): void {\n this.coordinator.backdropClick$().subscribe(() => this.closePanel());\n this.coordinator.escape$().subscribe((event) => {\n event.preventDefault();\n this.inputValue.set(this.lastCommittedLabel());\n this.closePanel();\n });\n }\n\n private resolvePanelClass(): string {\n const raw = this.panelClass();\n return Array.isArray(raw) ? raw.join(' ') : (raw as string);\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: T | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n this.inputValue.set('');\n this.lastCommittedLabel.set('');\n this.pendingWriteValue.set(UNRESOLVED);\n this.valueCommit.emit({ value: null, source: 'programmatic' });\n return;\n }\n // Store verbatim.\n this.value.set(value);\n const cmp = this.compareWith();\n const valueFn = this.optionValue();\n const labelFn = this.optionLabel();\n const match = this.options().find((o) => {\n try {\n return cmp(valueFn(o), value as T);\n } catch {\n return false;\n }\n });\n if (match) {\n const label = labelFn(match);\n this.inputValue.set(label);\n this.lastCommittedLabel.set(label);\n this.pendingWriteValue.set(UNRESOLVED);\n } else {\n const label = String(value);\n this.inputValue.set(label);\n this.lastCommittedLabel.set(label);\n this.pendingWriteValue.set(value);\n }\n this.valueCommit.emit({ value, source: 'programmatic' });\n }\n\n registerOnChange(fn: (value: T | string | 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.cvaDisabled.set(isDisabled);\n if (isDisabled && this.open()) {\n this.closePanel();\n }\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n setLabelledByIds(ids: string[]): void {\n this.labelledByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n onContainerClick(_event: MouseEvent): void {\n if (this.isDisabled()) return;\n this.inputRef()?.nativeElement.focus();\n }\n\n ngOnInit(): void {\n // NgControl's `control` is set by the parent FormControl* directive before\n // children's `ngOnInit`. Subscribe here so errorState reacts to status/value\n // changes on the bound control.\n this.errorWiring.connect();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}