@cdevhub/ngx-tw 0.4.0 → 0.6.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 (209) hide show
  1. package/README.md +78 -15
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +16 -5
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +26 -15
  5. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-badge.mjs +17 -5
  7. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  8. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +27 -6
  9. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-button.mjs +23 -11
  11. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +5 -5
  13. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs +3 -3
  15. package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +427 -122
  17. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-card.mjs +21 -11
  19. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +215 -96
  21. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +108 -64
  23. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +18 -6
  25. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +55 -30
  27. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-combobox-testing.mjs +218 -0
  29. package/fesm2022/cdevhub-ngx-tw-combobox-testing.mjs.map +1 -0
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +236 -211
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs +200 -0
  33. package/fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs.map +1 -0
  34. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +34 -7
  35. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-core.mjs +135 -15
  37. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs +203 -0
  39. package/fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs.map +1 -0
  40. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +160 -102
  41. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs +209 -0
  43. package/fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs.map +1 -0
  44. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +182 -107
  45. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  46. package/fesm2022/cdevhub-ngx-tw-dialog-dialog-renderer-DoIhoV3d.mjs +198 -0
  47. package/fesm2022/cdevhub-ngx-tw-dialog-dialog-renderer-DoIhoV3d.mjs.map +1 -0
  48. package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs +122 -0
  49. package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs.map +1 -0
  50. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +199 -220
  51. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +1 -1
  53. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  54. package/fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs +149 -0
  55. package/fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs.map +1 -0
  56. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +57 -67
  57. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +42 -24
  59. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +114 -21
  61. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  62. package/fesm2022/cdevhub-ngx-tw-icon.mjs +16 -6
  63. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-input.mjs +52 -61
  65. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-item.mjs +18 -3
  67. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  68. package/fesm2022/cdevhub-ngx-tw-menu-testing.mjs +168 -0
  69. package/fesm2022/cdevhub-ngx-tw-menu-testing.mjs.map +1 -0
  70. package/fesm2022/cdevhub-ngx-tw-menu.mjs +58 -21
  71. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +34 -1
  73. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +95 -45
  75. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-popover.mjs +81 -32
  77. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +1 -1
  79. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-radio.mjs +131 -98
  81. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +207 -42
  83. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  84. package/fesm2022/cdevhub-ngx-tw-select-testing.mjs +165 -0
  85. package/fesm2022/cdevhub-ngx-tw-select-testing.mjs.map +1 -0
  86. package/fesm2022/cdevhub-ngx-tw-select.mjs +386 -210
  87. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  88. package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs +256 -0
  89. package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs.map +1 -0
  90. package/fesm2022/cdevhub-ngx-tw-sheet-testing.mjs +129 -0
  91. package/fesm2022/cdevhub-ngx-tw-sheet-testing.mjs.map +1 -0
  92. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +197 -278
  93. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-slider.mjs +89 -54
  95. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-sort.mjs +122 -17
  97. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -19
  99. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-stat.mjs +63 -25
  101. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  102. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +35 -8
  103. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-switch.mjs +54 -48
  105. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +12 -15
  107. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-table.mjs +74 -13
  109. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +84 -30
  111. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  112. package/fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs +172 -0
  113. package/fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs.map +1 -0
  114. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +107 -71
  115. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -1
  116. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +41 -9
  117. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  118. package/fesm2022/cdevhub-ngx-tw-theme.mjs +257 -45
  119. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  120. package/fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs +201 -0
  121. package/fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs.map +1 -0
  122. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +184 -77
  123. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  124. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +110 -27
  125. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  126. package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs +616 -0
  127. package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs.map +1 -0
  128. package/fesm2022/cdevhub-ngx-tw-toast.mjs +556 -945
  129. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  130. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +102 -15
  131. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  132. package/fesm2022/cdevhub-ngx-tw-transfer-testing.mjs +219 -0
  133. package/fesm2022/cdevhub-ngx-tw-transfer-testing.mjs.map +1 -0
  134. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +88 -69
  135. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -1
  136. package/fesm2022/cdevhub-ngx-tw-tree.mjs +68 -19
  137. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -1
  138. package/index.json +1 -1
  139. package/package.json +63 -2
  140. package/theme/_base.css +13 -0
  141. package/theme/_dark.css +110 -36
  142. package/theme/_high-contrast-dark.css +367 -0
  143. package/theme/_high-contrast.css +13 -2
  144. package/theme/_light.css +276 -0
  145. package/theme/_semantic.css +47 -12
  146. package/theme/_typography.css +17 -0
  147. package/theme/index.css +86 -7
  148. package/types/cdevhub-ngx-tw-accordion.d.ts +12 -4
  149. package/types/cdevhub-ngx-tw-avatar.d.ts +10 -3
  150. package/types/cdevhub-ngx-tw-button.d.ts +1 -0
  151. package/types/cdevhub-ngx-tw-calendar-luxon.d.ts +2 -2
  152. package/types/cdevhub-ngx-tw-calendar-testing.d.ts +1 -1
  153. package/types/cdevhub-ngx-tw-calendar.d.ts +179 -73
  154. package/types/cdevhub-ngx-tw-card.d.ts +11 -3
  155. package/types/cdevhub-ngx-tw-carousel.d.ts +89 -20
  156. package/types/cdevhub-ngx-tw-checkbox.d.ts +40 -12
  157. package/types/cdevhub-ngx-tw-code-block.d.ts +11 -2
  158. package/types/cdevhub-ngx-tw-collapsible.d.ts +32 -5
  159. package/types/cdevhub-ngx-tw-combobox-testing.d.ts +157 -0
  160. package/types/cdevhub-ngx-tw-combobox.d.ts +94 -53
  161. package/types/cdevhub-ngx-tw-command-palette-testing.d.ts +136 -0
  162. package/types/cdevhub-ngx-tw-command-palette.d.ts +33 -5
  163. package/types/cdevhub-ngx-tw-core.d.ts +152 -21
  164. package/types/cdevhub-ngx-tw-date-picker-testing.d.ts +141 -0
  165. package/types/cdevhub-ngx-tw-date-picker.d.ts +37 -29
  166. package/types/cdevhub-ngx-tw-date-range-picker-testing.d.ts +148 -0
  167. package/types/cdevhub-ngx-tw-date-range-picker.d.ts +36 -29
  168. package/types/cdevhub-ngx-tw-dialog-testing.d.ts +98 -0
  169. package/types/cdevhub-ngx-tw-dialog.d.ts +89 -19
  170. package/types/cdevhub-ngx-tw-file-upload-testing.d.ts +120 -0
  171. package/types/cdevhub-ngx-tw-file-upload.d.ts +8 -10
  172. package/types/cdevhub-ngx-tw-flip-card.d.ts +18 -11
  173. package/types/cdevhub-ngx-tw-form-field.d.ts +19 -2
  174. package/types/cdevhub-ngx-tw-icon.d.ts +3 -3
  175. package/types/cdevhub-ngx-tw-input.d.ts +5 -8
  176. package/types/cdevhub-ngx-tw-item.d.ts +2 -0
  177. package/types/cdevhub-ngx-tw-menu-testing.d.ts +131 -0
  178. package/types/cdevhub-ngx-tw-menu.d.ts +2 -2
  179. package/types/cdevhub-ngx-tw-number-input.d.ts +20 -0
  180. package/types/cdevhub-ngx-tw-paginator.d.ts +58 -24
  181. package/types/cdevhub-ngx-tw-popover.d.ts +41 -10
  182. package/types/cdevhub-ngx-tw-progress-bar.d.ts +1 -1
  183. package/types/cdevhub-ngx-tw-radio.d.ts +68 -25
  184. package/types/cdevhub-ngx-tw-segmented-control.d.ts +79 -16
  185. package/types/cdevhub-ngx-tw-select-testing.d.ts +114 -0
  186. package/types/cdevhub-ngx-tw-select.d.ts +104 -33
  187. package/types/cdevhub-ngx-tw-sheet-testing.d.ts +104 -0
  188. package/types/cdevhub-ngx-tw-sheet.d.ts +96 -21
  189. package/types/cdevhub-ngx-tw-slider.d.ts +79 -25
  190. package/types/cdevhub-ngx-tw-sort.d.ts +45 -4
  191. package/types/cdevhub-ngx-tw-split.d.ts +32 -2
  192. package/types/cdevhub-ngx-tw-stat.d.ts +14 -4
  193. package/types/cdevhub-ngx-tw-stepper.d.ts +16 -2
  194. package/types/cdevhub-ngx-tw-switch.d.ts +35 -13
  195. package/types/cdevhub-ngx-tw-tab-nav.d.ts +7 -6
  196. package/types/cdevhub-ngx-tw-table.d.ts +53 -10
  197. package/types/cdevhub-ngx-tw-tabs.d.ts +41 -10
  198. package/types/cdevhub-ngx-tw-tags-input-testing.d.ts +135 -0
  199. package/types/cdevhub-ngx-tw-tags-input.d.ts +26 -11
  200. package/types/cdevhub-ngx-tw-textarea.d.ts +3 -2
  201. package/types/cdevhub-ngx-tw-theme.d.ts +245 -39
  202. package/types/cdevhub-ngx-tw-time-picker-testing.d.ts +129 -0
  203. package/types/cdevhub-ngx-tw-time-picker.d.ts +76 -19
  204. package/types/cdevhub-ngx-tw-timeline.d.ts +36 -12
  205. package/types/cdevhub-ngx-tw-toast.d.ts +61 -12
  206. package/types/cdevhub-ngx-tw-tooltip.d.ts +28 -6
  207. package/types/cdevhub-ngx-tw-transfer-testing.d.ts +152 -0
  208. package/types/cdevhub-ngx-tw-transfer.d.ts +21 -8
  209. package/types/cdevhub-ngx-tw-tree.d.ts +6 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cdevhub-ngx-tw-select.mjs","sources":["../../../projects/ngx-tw/select/select-overlay.ts","../../../projects/ngx-tw/select/select.ts","../../../projects/ngx-tw/select/cdevhub-ngx-tw-select.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\nimport type {\n SelectEmptyTemplateDirective,\n SelectFooterTemplateDirective,\n SelectHeaderTemplateDirective,\n SelectOptionTemplateDirective,\n SelectRenderedRow,\n SelectVisibleOption,\n TwSelectOptionContext,\n} from './select';\n\n/**\n * Internal overlay panel for `tw-select`. Renders the header/search/listbox/empty/footer\n * regions and dispatches interaction callbacks back to the parent `SelectComponent`.\n * Not exported from the public API.\n */\n@Component({\n selector: 'tw-select-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 (headerTemplate(); as tpl) {\n <div class=\"border-b border-border p-2\">\n <ng-container *ngTemplateOutlet=\"tpl.templateRef\" />\n </div>\n }\n\n @if (searchable()) {\n <div class=\"p-2 border-b border-border\">\n <input\n #searchInput\n type=\"search\"\n [id]=\"searchInputId()\"\n [attr.aria-label]=\"'Search'\"\n [attr.aria-controls]=\"listboxId()\"\n [value]=\"search()\"\n class=\"w-full px-3 py-1.5 rounded-md border border-border bg-surface text-fg placeholder:text-fg-subtle focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 transition-colors duration-normal motion-reduce:transition-none text-sm\"\n placeholder=\"Search…\"\n (input)=\"onSearchInputEvent($event)\"\n (keydown)=\"onSearchKeydown($event)\"\n />\n </div>\n }\n\n <div\n #listboxEl\n role=\"listbox\"\n tabindex=\"-1\"\n [id]=\"listboxId()\"\n [attr.aria-multiselectable]=\"multiple() ? 'true' : null\"\n [style.maxHeight.px]=\"panelMaxHeight()\"\n class=\"flex-1 min-h-0 overflow-y-auto py-1 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500\"\n >\n @if (visibleOptions().length === 0) {\n @if (emptyTemplate(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { $implicit: search() }\" />\n } @else {\n <div class=\"p-4 text-center text-sm text-fg-muted\">{{ emptyMessage() }}</div>\n }\n } @else {\n @for (row of renderedRows(); track trackRow($index, row)) {\n @if (row.kind === 'group-label') {\n <div role=\"group\" [attr.aria-label]=\"row.group\">\n <div class=\"px-3 py-1 text-xs font-semibold uppercase tracking-wide text-fg-subtle\">\n {{ row.group }}\n </div>\n </div>\n } @else {\n <!-- ARIA activedescendant listbox: keyboard navigation runs on the\n select trigger via aria-activedescendant. Options are click-only\n affordances and never DOM-focus, so they need no keydown handler\n or tabindex of their own. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n role=\"option\"\n [id]=\"optionIdFn()(row.index)\"\n [attr.aria-selected]=\"selectedChecker()(row.index) ? 'true' : 'false'\"\n [attr.aria-disabled]=\"isOptionDisabled(row.index) || null\"\n [class]=\"\n computeOptionClass()(\n selectedChecker()(row.index),\n activeIndex() === row.index,\n isOptionDisabled(row.index)\n )\n \"\n (click)=\"onOptionClick(row.index, $event)\"\n (mouseenter)=\"onOptionMouseEnter(row.index)\"\n >\n @if (optionTemplate(); as tpl) {\n <ng-container\n *ngTemplateOutlet=\"\n tpl.templateRef;\n context: buildOptionContext(row.index, row.option)\n \"\n />\n } @else {\n <span class=\"flex-1 min-w-0 truncate\">{{ optionLabelFn()(row.option) }}</span>\n @if (selectedChecker()(row.index)) {\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n [class]=\"checkmarkClasses()\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M16.704 5.29a1 1 0 0 1 .006 1.414l-7.2 7.3a1 1 0 0 1-1.42.007L3.29 9.296a1 1 0 0 1 1.42-1.41l3.794 3.82 6.79-6.886a1 1 0 0 1 1.41-.07Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n }\n </div>\n }\n }\n }\n </div>\n\n @if (footerTemplate(); as tpl) {\n <div class=\"border-t border-border p-2\">\n <ng-container *ngTemplateOutlet=\"tpl.templateRef\" />\n </div>\n }\n `,\n})\nexport class SelectOverlayComponent<T = unknown> {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n // ── Config signals set by the parent component ──\n\n /** @internal */\n readonly size = signal<TwSize>('md');\n /** @internal */\n readonly color = signal<TwColor>('primary');\n /** @internal */\n readonly multiple = signal(false);\n /** @internal */\n readonly searchable = signal(false);\n /** @internal */\n readonly panelMaxHeight = signal(256);\n /** @internal */\n readonly emptyMessage = signal('No results');\n /** @internal */\n readonly search = signal('');\n /** @internal */\n readonly activeIndex = signal(-1);\n /** @internal */\n readonly renderedRows = signal<readonly SelectRenderedRow<T>[]>([]);\n /** @internal */\n readonly visibleOptions = signal<readonly SelectVisibleOption<T>[]>([]);\n /** @internal */\n readonly optionTemplate = signal<SelectOptionTemplateDirective<T> | undefined>(undefined);\n /** @internal */\n readonly emptyTemplate = signal<SelectEmptyTemplateDirective | undefined>(undefined);\n /** @internal */\n readonly headerTemplate = signal<SelectHeaderTemplateDirective | undefined>(undefined);\n /** @internal */\n readonly footerTemplate = signal<SelectFooterTemplateDirective | undefined>(undefined);\n /** @internal */\n readonly optionLabelFn = signal<(option: unknown) => string>(() => '');\n /** @internal */\n readonly selectedChecker = signal<(visibleIndex: number) => boolean>(() => false);\n /** @internal */\n readonly computeOptionClass = signal<\n (selected: boolean, active: boolean, disabled: boolean) => string\n >(() => '');\n /** @internal */\n readonly checkmarkColorClass = signal('');\n /** @internal */\n readonly panelClassValue = signal('');\n /** @internal */\n readonly listboxId = signal('');\n /** @internal */\n readonly searchInputId = signal('');\n /** @internal */\n readonly optionIdFn = signal<(index: number) => string>((i) => `option-${i}`);\n /** @internal */\n readonly leaving = signal(false);\n\n // ── Callbacks set by the parent component ──\n\n /** @internal */\n readonly onSearchInput = signal<(value: string) => void>(() => {});\n /** @internal */\n readonly onOptionSelect = signal<(index: number) => void>(() => {});\n /** @internal */\n readonly onOptionActivate = signal<(index: number) => void>(() => {});\n /** @internal */\n readonly onPanelKeydown = signal<(event: KeyboardEvent) => void>(() => {});\n\n // ── View refs ──\n\n private readonly searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\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-lg shadow-md overflow-hidden flex flex-col';\n const custom = this.panelClassValue();\n return custom ? `${base} ${custom}` : base;\n });\n\n /** @internal */\n readonly checkmarkClasses = computed(() => {\n // xs/sm densities use `size-3.5` (14px) for the checkmark — the half-step\n // is the only icon size that aligns with the surrounding text-xs metric.\n const size = this.size() === 'xs' || this.size() === 'sm' ? 'size-3.5' : 'size-4';\n return `${size} shrink-0 ml-auto ${this.checkmarkColorClass()}`;\n });\n\n // ── Template helpers ──\n\n /** @internal */\n isOptionDisabled(visibleIndex: number): boolean {\n const vis = this.visibleOptions();\n if (visibleIndex < 0 || visibleIndex >= vis.length) return false;\n return vis[visibleIndex].disabled;\n }\n\n /** @internal */\n buildOptionContext(visibleIndex: number, option: unknown): TwSelectOptionContext<T> {\n const v = this.visibleOptions()[visibleIndex];\n return {\n $implicit: option as TwSelectOptionContext<T>['$implicit'],\n label: v?.label ?? '',\n value: v?.value as T,\n selected: this.selectedChecker()(visibleIndex),\n active: this.activeIndex() === visibleIndex,\n disabled: v?.disabled ?? false,\n index: visibleIndex,\n };\n }\n\n /** @internal track function for @for. */\n trackRow(_index: number, row: SelectRenderedRow<T>): string | number {\n if (row.kind === 'group-label') return `g:${row.group}`;\n return `o:${row.index}`;\n }\n\n // ── Interactions ──\n\n /** @internal */\n onSearchInputEvent(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.onSearchInput()(target.value);\n }\n\n /** @internal */\n onSearchKeydown(event: KeyboardEvent): void {\n this.onPanelKeydown()(event);\n }\n\n /** @internal */\n onOptionClick(visibleIndex: number, event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.onOptionSelect()(visibleIndex);\n }\n\n /** @internal */\n onOptionMouseEnter(visibleIndex: number): void {\n if (this.isOptionDisabled(visibleIndex)) return;\n this.onOptionActivate()(visibleIndex);\n }\n\n /** @internal */\n focusSearchInput(): void {\n const el = this.searchInputRef()?.nativeElement;\n el?.focus();\n }\n\n /** @internal Exposes the root overlay element for tests. */\n getElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","import {\n afterNextRender,\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 isDevMode,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n type Signal,\n TemplateRef,\n untracked,\n ViewContainerRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n type ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n NgForm,\n} from '@angular/forms';\nimport { Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Platform } from '@angular/cdk/platform';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge, Subscription } from 'rxjs';\nimport { tv } from 'tailwind-variants';\nimport {\n buildSelectLikePositions,\n consumeOverlayEscape,\n type ErrorStateMatcher,\n resolveSelectScrollStrategy,\n TW_ERROR_STATE_MATCHER,\n type TwColor,\n type TwFormSubmitted,\n type TwSize,\n} from '@cdevhub/ngx-tw/core';\nimport {\n type FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport { SelectOverlayComponent } from './select-overlay';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Canonical option shape. Consumers using arbitrary objects override the accessor inputs instead. */\nexport interface TwSelectOption<T> {\n /** Visible label. */\n label: string;\n /** Value emitted via `value` / `valueChange`. */\n value: T;\n /** When true, the option cannot be focused or selected. */\n disabled?: boolean;\n /** Optional group name. Options sharing a group render under a labelled `role=\"group\"` region. */\n group?: string;\n}\n\n/** Visual style of the select trigger. */\nexport type SelectVariant = 'default' | 'naked';\n\n/** Origin of a selection change, used to distinguish user input from programmatic writes. */\nexport type TwSelectSelectionSource = 'user' | 'reset' | 'programmatic';\n\n/** Emitted by `selectionChange`. Generic over the option-value type. */\nexport interface TwSelectSelectionChangeEvent<T> {\n /** The current value. `null` when single-select has no selection; `T[]` in multi-select (possibly empty). */\n value: T | readonly T[] | null;\n /** The previous value, before this change. */\n previousValue: T | readonly T[] | null;\n /** Values newly added to the selection. Always empty when `source: 'reset'`. */\n added: readonly T[];\n /** Values removed from the selection. */\n removed: readonly T[];\n /** What triggered the change. */\n source: TwSelectSelectionSource;\n}\n\n/** Emitted by `openedChange`. */\nexport interface TwSelectOpenedEvent {\n /** Whether the panel is now open. */\n open: boolean;\n /** The combobox trigger element — handy when coordinating multiple open panels. */\n trigger: HTMLElement;\n}\n\n/** Emitted by `searchChange`. */\nexport interface TwSelectSearchEvent {\n /** The current search text passed to `filterPredicate`. */\n search: string;\n /** Number of options currently visible after filtering. */\n visibleCount: number;\n}\n\n/** Context provided to an `*twSelectOption` template. */\nexport interface TwSelectOptionContext<T, O = TwSelectOption<T>> {\n /** The raw option object (or arbitrary record when using accessors). */\n $implicit: O;\n /** Resolved label from `optionLabel`. */\n label: string;\n /** Resolved value from `optionValue`. */\n value: T;\n /** Whether this option is currently selected. */\n selected: boolean;\n /** Whether this option is the active-descendant for keyboard nav. */\n active: boolean;\n /** Whether this option is disabled. */\n disabled: boolean;\n /** Index within `visibleOptions()`. */\n index: number;\n}\n\n/** Context provided to a `*twSelectTrigger` template. */\nexport interface TwSelectTriggerContext<T, O = TwSelectOption<T>> {\n /** The current value. */\n $implicit: T | readonly T[] | null;\n /** Whether the panel is open. */\n open: boolean;\n /** Whether the current value is empty. */\n empty: boolean;\n /** The resolved option objects for the current value. */\n selectedOptions: readonly O[];\n}\n\n/** Rendered row in the panel — either a group-label header or an option. */\n// `T` is a phantom type kept for API parity with the other Select generics\n// (`SelectVisibleOption<T, O>`, `SelectComponent<T, O>`).\nexport type SelectRenderedRow<_T, O = unknown> =\n | { readonly kind: 'group-label'; readonly group: string }\n | { readonly kind: 'option'; readonly option: O; readonly index: number; readonly group?: string };\n\n/** Internal: resolved option view paired with its position in `visibleOptions()`. */\nexport interface SelectVisibleOption<T, O = unknown> {\n readonly option: O;\n readonly label: string;\n readonly value: T;\n readonly disabled: boolean;\n readonly group?: string;\n}\n\n// Duration for leave animation — matches theme/_base.css scale-out/fade-out.\nconst ANIMATION_DURATION = 120;\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst selectVariants = tv(\n {\n slots: {\n root: 'relative inline-block w-full',\n trigger:\n 'w-full inline-flex items-center gap-2 text-fg cursor-pointer transition-[color,border-color,background-color,box-shadow] duration-normal motion-reduce:transition-none',\n valueText: 'flex-1 min-w-0 text-left truncate',\n placeholderText: 'flex-1 min-w-0 text-left truncate text-fg-subtle',\n chevron: 'shrink-0 text-fg-muted transition-transform duration-normal motion-reduce:transition-none',\n clearButton:\n 'inline-flex items-center justify-center shrink-0 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none size-5 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n size: {\n // xs density: chevron uses `size-3.5` (14px) — half-step that lines up\n // with text-xs inside the compact trigger.\n xs: { trigger: 'px-2 py-1 text-xs', chevron: 'size-3.5' },\n sm: { trigger: 'px-3 py-1.5 text-sm', chevron: 'size-4' },\n md: { trigger: 'px-4 py-2 text-sm', chevron: 'size-4' },\n lg: { trigger: 'px-5 py-2.5 text-base', chevron: 'size-5' },\n xl: { trigger: 'px-6 py-3 text-base', chevron: 'size-5' },\n },\n variant: {\n default: {\n trigger:\n 'border border-border bg-surface rounded-md hover:border-border-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n naked: {\n trigger:\n 'bg-transparent border-0 rounded-none p-0 focus-visible:outline-none',\n },\n },\n open: {\n true: { chevron: 'rotate-180' },\n false: { chevron: 'rotate-0' },\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: { root: '' },\n },\n focused: { true: {}, false: {} },\n color: {\n primary: {},\n secondary: {},\n accent: {},\n neutral: {},\n info: {},\n success: {},\n warning: {},\n error: {},\n },\n },\n compoundVariants: [\n { variant: 'default', focused: true, color: 'primary', class: { trigger: 'border-primary-500' } },\n { variant: 'default', focused: true, color: 'secondary', class: { trigger: 'border-secondary-500' } },\n { variant: 'default', focused: true, color: 'accent', class: { trigger: 'border-accent-500' } },\n { variant: 'default', focused: true, color: 'neutral', class: { trigger: 'border-border-strong' } },\n { variant: 'default', focused: true, color: 'info', class: { trigger: 'border-info-500' } },\n { variant: 'default', focused: true, color: 'success', class: { trigger: 'border-success-500' } },\n { variant: 'default', focused: true, color: 'warning', class: { trigger: 'border-warning-500' } },\n { variant: 'default', focused: true, color: 'error', class: { trigger: 'border-error-500' } },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n open: false,\n disabled: false,\n focused: false,\n color: 'primary',\n },\n },\n { twMerge: true },\n);\n\n// ── Option-state color lookups ──\n// Slot tokens own light/dark contrast — no `dark:`, no shade picks.\n\nconst OPTION_SELECTED_BG: Record<TwColor, string> = {\n primary: 'bg-primary-soft',\n secondary: 'bg-secondary-soft',\n accent: 'bg-accent-soft',\n neutral: 'bg-neutral-soft',\n info: 'bg-info-soft',\n success: 'bg-success-soft',\n warning: 'bg-warning-soft',\n error: 'bg-error-soft',\n};\n\nconst OPTION_CHECKMARK_COLOR: Record<TwColor, string> = {\n primary: 'text-primary-icon',\n secondary: 'text-secondary-icon',\n accent: 'text-accent-icon',\n neutral: 'text-fg',\n info: 'text-info-icon',\n success: 'text-success-icon',\n warning: 'text-warning-icon',\n error: 'text-error-icon',\n};\n\n// ── Template directives (content-projected slots) ─────────────────\n\n/** Structural directive projecting a custom template for each option in the panel. */\n@Directive({ selector: '[twSelectOption]' })\nexport class SelectOptionTemplateDirective<T = unknown, O = TwSelectOption<T>> {\n /** @internal */\n readonly templateRef = inject(TemplateRef<TwSelectOptionContext<T, O>>);\n\n /** @internal Enables strict typing of `let-` bindings in the template. */\n static ngTemplateContextGuard<T, O>(\n _dir: SelectOptionTemplateDirective<T, O>,\n _ctx: unknown,\n ): _ctx is TwSelectOptionContext<T, O> {\n return true;\n }\n}\n\n/** Structural directive projecting a custom template for the select's trigger content. */\n@Directive({ selector: '[twSelectTrigger]' })\nexport class SelectTriggerTemplateDirective<T = unknown, O = TwSelectOption<T>> {\n /** @internal */\n readonly templateRef = inject(TemplateRef<TwSelectTriggerContext<T, O>>);\n\n /** @internal */\n static ngTemplateContextGuard<T, O>(\n _dir: SelectTriggerTemplateDirective<T, O>,\n _ctx: unknown,\n ): _ctx is TwSelectTriggerContext<T, O> {\n return true;\n }\n}\n\n/** Structural directive projecting a custom template for the panel's empty state. */\n@Directive({ selector: '[twSelectEmpty]' })\nexport class SelectEmptyTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<{ $implicit: string }>);\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: SelectEmptyTemplateDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: string } {\n return true;\n }\n}\n\n/** Structural directive projecting a custom header at the top of the panel. */\n@Directive({ selector: '[twSelectHeader]' })\nexport class SelectHeaderTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n\n/** Structural directive projecting a custom footer at the bottom of the panel. */\n@Directive({ selector: '[twSelectFooter]' })\nexport class SelectFooterTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n\n// ── ID generator ──\n\nlet nextSelectId = 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\n// ── SelectComponent ──\n\n/**\n * ARIA combobox with listbox popup. Supports single/multi selection, in-panel\n * search filtering, custom option/trigger templates, and full integration with\n * Angular forms (reactive, template-driven, signal-forms) plus `tw-form-field`.\n */\n@Component({\n selector: 'tw-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => SelectComponent),\n },\n ],\n template: `\n <button\n #triggerButton\n type=\"button\"\n [id]=\"hostId\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"open() ? 'true' : 'false'\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-activedescendant]=\"activeDescendantId() || null\"\n [attr.aria-autocomplete]=\"searchable() ? 'list' : 'none'\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"labelledBy() || null\"\n [attr.aria-describedby]=\"describedBy() || null\"\n [attr.aria-required]=\"requiredInput() || null\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [disabled]=\"isDisabled()\"\n [attr.data-variant]=\"resolvedVariant()\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (triggerTemplateChild(); as tpl) {\n <span [class]=\"valueTextClasses()\">\n <ng-container\n *ngTemplateOutlet=\"tpl.templateRef; context: buildTriggerContext()\"\n />\n </span>\n } @else if (isEmpty()) {\n <span [class]=\"placeholderTextClasses()\">{{ placeholder() || '\\u00A0' }}</span>\n } @else {\n <span [class]=\"valueTextClasses()\">{{ defaultTriggerText() }}</span>\n }\n\n @if (showClearButton()) {\n <span\n role=\"button\"\n tabindex=\"-1\"\n [class]=\"clearButtonClasses()\"\n [attr.aria-label]=\"'Clear selection'\"\n (click)=\"onClearClick($event)\"\n (keydown)=\"onClearKeydown($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 </span>\n }\n\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 </button>\n\n <span hidden>\n <ng-content />\n </span>\n `,\n host: {\n '[class]': 'rootClasses()',\n },\n})\nexport class SelectComponent<T = unknown>\n implements ControlValueAccessor, FormFieldControl<T | readonly T[]>, OnInit\n{\n /** Array of options to render in the panel. Accepts either `TwSelectOption<T>` objects or arbitrary records read via the accessor inputs. Defaults to an empty array. */\n readonly options = input<readonly unknown[]>([]);\n\n /** Accessor returning the visible label for an option. Override when passing arbitrary objects. */\n readonly optionLabel = input<(option: unknown) => string>(defaultOptionLabel);\n\n /** Accessor returning the value for an option. The result is what `value` / `valueChange` emit. */\n readonly optionValue = input<(option: unknown) => T>(\n defaultOptionValue as (option: unknown) => T,\n );\n\n /** Accessor returning the disabled state for an option. Defaults to reading `.disabled`. */\n readonly optionDisabled = input<(option: unknown) => boolean>(defaultOptionDisabled);\n\n /** Accessor returning the group name for an option. Options sharing a group render under a labelled `role=\"group\"` region. */\n readonly optionGroup = input<(option: unknown) => string | undefined>(defaultOptionGroup);\n\n /** When true, enables multi-selection. The `value` model becomes a `T[]` and the panel renders checkable options. Defaults to `false`. */\n readonly multiple = input(false);\n\n /** When true, renders a search input at the top of the panel that filters options using `filterPredicate`. Defaults to `false`. */\n readonly searchable = input(false);\n\n /** Custom filter function for the search input. Defaults to a case-insensitive substring match on the option label. */\n readonly filterPredicate = input<(option: unknown, search: string) => boolean>(\n (option, search) => {\n const label = this.optionLabel()(option);\n return label.toLowerCase().includes(search.toLowerCase());\n },\n );\n\n /** Placeholder text shown in the trigger when no value is selected. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** When true, the trigger cannot be activated and the panel cannot open. Defaults to `false`. */\n readonly disabledInput = input<boolean>(false, { alias: 'disabled' });\n\n /** When true, exposes `aria-required=\"true\"` on the trigger. Defaults to `false`. */\n readonly requiredInput = input<boolean>(false, { alias: 'required' });\n\n /** Controls trigger padding, font size, and panel option density. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color for focused trigger border, active-option background, and checkmarks. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Visual style of the trigger. When inside a `tw-form-field` and left unset, auto-resolves to `'naked'`. Otherwise defaults to `'default'`. */\n readonly variant = input<SelectVariant | undefined>(undefined);\n\n /** Overlay panel width. `'trigger'` matches the trigger's measured width; `'auto'` lets content decide; a number is applied as pixels; a string is passed through as a CSS length. Defaults to `'trigger'`. */\n readonly panelWidth = input<'trigger' | 'auto' | number | string>('trigger');\n\n /** Extra class(es) applied to the overlay panel element. */\n readonly panelClass = input<string | readonly string[]>('');\n\n /** Maximum height of the listbox scroll region in pixels. Defaults to `256`. */\n readonly panelMaxHeight = input(256);\n\n /** Whether the panel closes after a selection is made. When unset, resolves to `true` for single-select and `false` for multi-select. */\n readonly closeOnSelect = input<boolean | undefined>(undefined);\n\n /** CDK scroll strategy for the overlay. Defaults to `'reposition'`. */\n readonly scrollStrategy = input<'reposition' | 'close' | 'block'>('reposition');\n\n /** Pixel distance between trigger and panel. Defaults to `4`. */\n readonly offset = input(4);\n\n /** Fallback message rendered when the filter yields no options and no `*twSelectEmpty` template is provided. */\n readonly emptyMessage = input('No results');\n\n /** Accessible name for the combobox trigger. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external element that labels the combobox. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** ID of an external element that describes the combobox. */\n readonly ariaDescribedby = input<string | undefined>(undefined, { alias: 'aria-describedby' });\n\n /** Per-instance override of the {@link ErrorStateMatcher}. When omitted, the select uses the `TW_ERROR_STATE_MATCHER` token's value. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n /** Equality comparator for option values. Defaults to `Object.is`. */\n readonly compareWith = input<(a: T, b: T) => boolean>(Object.is);\n\n // ── Models (two-way) ──\n\n /** Two-way bound selected value(s). Single-select: `T | null`. Multi-select: `T[]`. */\n readonly value = model<T | readonly T[] | null>(null);\n\n /** Two-way bound open state of the panel. */\n readonly open = model(false);\n\n // ── Outputs ──\n\n /** Fires when the panel's visibility finishes changing. */\n readonly openedChange = output<TwSelectOpenedEvent>();\n\n /** Fires after any selection change, with `added`, `removed`, `previousValue`, and a `source` discriminator. */\n readonly selectionChange = output<TwSelectSelectionChangeEvent<T>>();\n\n /** Fires whenever the search input changes (only when `searchable` is true). */\n readonly searchChange = output<TwSelectSearchEvent>();\n\n // ── Content queries ──\n\n /** @internal */\n readonly triggerTemplateChild = contentChild(SelectTriggerTemplateDirective);\n /** @internal */\n readonly optionTemplateChild = contentChild(SelectOptionTemplateDirective);\n /** @internal */\n readonly emptyTemplateChild = contentChild(SelectEmptyTemplateDirective);\n /** @internal */\n readonly headerTemplateChild = contentChild(SelectHeaderTemplateDirective);\n /** @internal */\n readonly footerTemplateChild = contentChild(SelectFooterTemplateDirective);\n\n // ── Injected deps ──\n\n private readonly overlayService = inject(Overlay);\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 private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n private readonly defaultMatcher = inject(TW_ERROR_STATE_MATCHER);\n\n // ── Identity ──\n\n private readonly uid = nextSelectId++;\n /** @internal */\n readonly hostId = `tw-select-${this.uid}`;\n /** @internal */\n readonly listboxId = `${this.hostId}-listbox`;\n /** @internal */\n readonly searchInputId = `${this.hostId}-search`;\n /** @internal */\n readonly optionId = (index: number): string => `${this.hostId}-option-${index}`;\n\n // ── Internal state signals ──\n\n /** @internal */\n readonly internalValue = linkedSignal<T | readonly T[] | null>(() => this.value());\n /** @internal */\n readonly search = signal('');\n /** @internal */\n readonly activeIndex = signal<number>(-1);\n /** @internal */\n readonly focusedSignal = signal(false);\n private readonly cvaDisabled = signal(false);\n private readonly _ngControlRev = signal(0);\n private readonly _formSubmitRev = signal(0);\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly labelledByIdsSignal = signal<readonly string[]>([]);\n private readonly closingSignal = signal(false);\n\n private onChange: (value: T | readonly T[] | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n private overlayRef: OverlayRef | null = null;\n private readonly overlayInstanceSignal = signal<SelectOverlayComponent<T> | null>(null);\n private perOpenSubs: Subscription | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n private get overlayInstance(): SelectOverlayComponent<T> | null {\n return this.overlayInstanceSignal();\n }\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */\n readonly resolvedVariant = computed<SelectVariant>(\n () => this.variant() ?? (this.formField ? 'naked' : 'default'),\n );\n\n /** @internal */\n readonly isEmpty = computed(() => {\n const v = this.internalValue();\n if (this.multiple()) return !Array.isArray(v) || v.length === 0;\n return v === null || v === undefined;\n });\n\n /** @internal Visible (filtered) options with resolved view data. */\n readonly visibleOptions = computed<readonly SelectVisibleOption<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 s = this.search().trim();\n const predicate = this.filterPredicate();\n const filtered = s && this.searchable() ? opts.filter((o) => predicate(o, s)) : opts;\n return filtered.map((option) => ({\n option,\n label: labelFn(option),\n value: valueFn(option),\n disabled: disabledFn(option),\n group: groupFn(option),\n }));\n });\n\n /** @internal Rows rendered in the panel (group labels + options). */\n readonly renderedRows = computed<readonly SelectRenderedRow<T>[]>(() => {\n const visible = this.visibleOptions();\n const rows: SelectRenderedRow<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-label', group: v.group });\n }\n currentGroup = v.group;\n }\n rows.push({ kind: 'option', option: v.option, index, group: v.group });\n });\n return rows;\n });\n\n /** @internal Resolved option objects that match the current value. */\n readonly selectedOptions = computed<readonly unknown[]>(() => {\n const v = this.internalValue();\n if (v === null || v === undefined) return [];\n const cmp = this.compareWith();\n const valueFn = this.optionValue();\n const opts = this.options();\n if (this.multiple()) {\n const arr = Array.isArray(v) ? v : [];\n return opts.filter((o) => arr.some((x) => cmp(valueFn(o), x)));\n }\n return opts.filter((o) => cmp(valueFn(o), v as T));\n });\n\n /** @internal */\n readonly defaultTriggerText = computed(() => {\n const opts = this.selectedOptions();\n const labelFn = this.optionLabel();\n if (opts.length === 0) return '';\n return opts.map((o) => labelFn(o)).join(', ');\n });\n\n /** @internal */\n readonly showClearButton = computed(\n () => !this.isDisabled() && !this.isEmpty(),\n );\n\n /** @internal */\n readonly activeDescendantId = computed(() => {\n if (!this.open()) return null;\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 describedBy = 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 Merged `aria-labelledby`: form-field-pushed label ids + consumer-supplied `aria-labelledby`. */\n readonly labelledBy = 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 Resolved close-on-select behaviour. */\n readonly resolvedCloseOnSelect = computed(() => {\n const explicit = this.closeOnSelect();\n if (explicit !== undefined) return explicit;\n return !this.multiple();\n });\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n selectVariants({\n size: this.size(),\n variant: this.resolvedVariant(),\n open: this.open(),\n disabled: this.isDisabled(),\n focused: this.focusedSignal(),\n color: this.color(),\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 valueTextClasses = computed(() => this.variantResult().valueText());\n /** @internal */\n readonly placeholderTextClasses = computed(() => this.variantResult().placeholderText());\n /** @internal */\n readonly chevronClasses = computed(() => this.variantResult().chevron());\n /** @internal */\n readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n\n /** @internal */\n readonly optionSizeClass = computed(() => {\n switch (this.size()) {\n case 'xs':\n return 'px-2 py-1 text-xs gap-1.5';\n case 'sm':\n return 'px-3 py-1.5 text-sm';\n case 'md':\n return 'px-3 py-2 text-sm';\n case 'lg':\n return 'px-4 py-2.5 text-base';\n case 'xl':\n return 'px-4 py-3 text-base';\n }\n });\n\n /** @internal */\n readonly checkmarkColorClass = computed(() => OPTION_CHECKMARK_COLOR[this.color()]);\n\n /** @internal Class string applied to each option row. */\n computeOptionClass = (selected: boolean, active: boolean, disabled: boolean): string => {\n const sizeClass = this.optionSizeClass();\n const color = this.color();\n const base =\n 'relative flex items-center cursor-pointer select-none text-fg gap-2 transition-colors duration-normal motion-reduce:transition-none';\n const parts: string[] = [base, sizeClass];\n if (disabled) {\n parts.push('opacity-50 pointer-events-none');\n }\n if (selected) {\n parts.push(OPTION_SELECTED_BG[color]);\n } else if (active) {\n parts.push('bg-surface-muted');\n } else {\n parts.push('hover:bg-surface-muted');\n }\n return parts.join(' ');\n };\n\n // ── FormFieldControl impl (readonly signals) ──\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 /** @internal */\n readonly required: Signal<boolean> = computed(() => this.requiredInput());\n /** @internal Error-state per the configured `ErrorStateMatcher`. Reads the bound `NgControl.invalid` through the matcher. */\n readonly errorState: Signal<boolean> = computed(() => {\n this._ngControlRev();\n this._formSubmitRev();\n const matcher = this.errorStateMatcher() ?? this.defaultMatcher;\n const form: TwFormSubmitted | null =\n (this.parentFormGroup as TwFormSubmitted | null) ??\n (this.parentForm as TwFormSubmitted | null);\n return matcher.isErrorState(this.ngControl?.control ?? null, form);\n });\n /** @internal */\n readonly controlType = 'select';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() => this.ariaDescribedby());\n /** @internal */\n readonly userAriaLabelledby: Signal<string | undefined> = computed(() => this.ariaLabelledby());\n\n /** @internal Public read-only view of the current value for FormFieldControl. */\n // Overriding `value` typing from the model by using an explicit computed that matches the abstract signature.\n // (The model `value` property is a WritableSignal<T | readonly T[] | null>; FormFieldControl needs a Signal<T | readonly T[] | null>.\n // A WritableSignal is assignable to Signal, so we just cast once.)\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 effect(() => {\n const shouldOpen = this.open();\n const disabled = this.isDisabled();\n if (disabled && this.overlayInstance) {\n this.closeOverlay();\n return;\n }\n if (shouldOpen && !this.overlayInstance && !disabled && !this.closingSignal()) {\n this.openOverlay();\n } else if (!shouldOpen && this.overlayInstance && !this.closingSignal()) {\n this.closeOverlay();\n }\n });\n\n // Push state into overlay component whenever anything relevant changes.\n // Reads happen in the tracked phase; writes to the overlay instance are\n // wrapped in `untracked()` so they never feed back into this effect.\n effect(() => {\n const instance = this.overlayInstance;\n if (!instance) return;\n const size = this.size();\n const color = this.color();\n const multiple = this.multiple();\n const searchable = this.searchable();\n const panelMaxHeight = this.panelMaxHeight();\n const emptyMessage = this.emptyMessage();\n const search = this.search();\n const activeIndex = this.activeIndex();\n const renderedRows = this.renderedRows();\n const visibleOptions = this.visibleOptions();\n const optionTemplate = this.optionTemplateChild();\n const emptyTemplate = this.emptyTemplateChild();\n const headerTemplate = this.headerTemplateChild();\n const footerTemplate = this.footerTemplateChild();\n const optionLabelFn = this.optionLabel();\n const checkmarkColorClass = this.checkmarkColorClass();\n const panelClassValue = this.resolvePanelClass();\n untracked(() => {\n instance.size.set(size);\n instance.color.set(color);\n instance.multiple.set(multiple);\n instance.searchable.set(searchable);\n instance.panelMaxHeight.set(panelMaxHeight);\n instance.emptyMessage.set(emptyMessage);\n instance.search.set(search);\n instance.activeIndex.set(activeIndex);\n instance.renderedRows.set(renderedRows);\n instance.visibleOptions.set(visibleOptions);\n instance.optionTemplate.set(optionTemplate);\n instance.emptyTemplate.set(emptyTemplate);\n instance.headerTemplate.set(headerTemplate);\n instance.footerTemplate.set(footerTemplate);\n instance.optionLabelFn.set(optionLabelFn);\n instance.selectedChecker.set((index: number) => this.isVisibleOptionSelected(index));\n instance.computeOptionClass.set(this.computeOptionClass);\n instance.checkmarkColorClass.set(checkmarkColorClass);\n instance.panelClassValue.set(panelClassValue);\n instance.listboxId.set(this.listboxId);\n instance.searchInputId.set(this.searchInputId);\n instance.optionIdFn.set(this.optionId);\n });\n });\n\n // Emit searchChange whenever the user types.\n effect(() => {\n const s = this.search();\n const count = this.visibleOptions().length;\n untracked(() => {\n if (this.overlayInstance) {\n this.searchChange.emit({ search: s, visibleCount: count });\n }\n });\n });\n\n // Dev-mode accessible-name warning.\n afterNextRender(() => {\n if (!isDevMode()) return;\n const hasLabel =\n !!this.ariaLabel() ||\n !!this.ariaLabelledby() ||\n !!this.formField?.hasLabel() ||\n !!this.triggerTemplateChild();\n if (!hasLabel) {\n console.warn(\n '[tw-select] The select has no accessible name. Set aria-label, aria-labelledby, wrap in <tw-form-field> with a <label twLabel>, or project a *twSelectTrigger template.',\n );\n }\n });\n\n // Monitor focus on the trigger (and descendant overlay) for 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) {\n this.onTouched();\n if (wasFocused) {\n // Blur often flips `touched` on the bound `NgControl`; bump the\n // revision so `errorState` recomputes.\n this._ngControlRev.update((n) => n + 1);\n }\n }\n });\n\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.clearCloseTimer();\n this.perOpenSubs?.unsubscribe();\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.overlayInstanceSignal.set(null);\n });\n }\n\n // ── Public methods ──\n\n /** Opens the overlay panel. 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 overlay panel. No-op when already closed. */\n closePanel(): void {\n if (!this.open()) return;\n this.open.set(false);\n }\n\n /** Toggles the panel's open state. */\n toggle(): void {\n if (this.open()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n /** Clears the current selection and emits `selectionChange` with `source: 'reset'`. */\n clear(): void {\n const previous = this.internalValue();\n const removed = this.selectedOptions().map((o) => this.optionValue()(o));\n const next: T | readonly T[] | null = this.multiple() ? [] : null;\n this.internalValue.set(next);\n this.value.set(next);\n this.onChange(next);\n this.selectionChange.emit({\n value: next,\n previousValue: previous,\n added: [],\n removed,\n source: 'reset',\n });\n }\n\n /** @internal Whether a visible-option index is currently selected. */\n isVisibleOptionSelected(index: number): boolean {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return false;\n return this.isValueSelected(visible[index].value);\n }\n\n /** @internal */\n isValueSelected(value: T): boolean {\n const current = this.internalValue();\n if (current === null || current === undefined) return false;\n const cmp = this.compareWith();\n if (this.multiple()) {\n const arr = Array.isArray(current) ? current : [];\n return arr.some((x) => cmp(x, value));\n }\n return cmp(current as T, value);\n }\n\n /** @internal */\n selectByVisibleIndex(index: number, source: TwSelectSelectionSource = 'user'): void {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return;\n const target = visible[index];\n if (target.disabled) return;\n this.commitSelection(target.value, target.label, source);\n }\n\n // ── Trigger interactions ──\n\n /** @internal */\n onTriggerClick(): void {\n if (this.isDisabled()) return;\n this.toggle();\n }\n\n /** @internal */\n onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n }\n\n /** @internal */\n onClearKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n this.clear();\n }\n }\n\n /** @internal */\n onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n this.handleKeydown(event);\n }\n\n /** @internal Handles keyboard events from the trigger AND the search input inside the overlay. */\n handleKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const isOpen = this.open();\n const searchMode = this.searchable() && isOpen;\n\n if (event.altKey && (key === 'ArrowDown' || key === 'ArrowUp')) {\n event.preventDefault();\n if (key === 'ArrowDown' && !isOpen) this.openPanel();\n else if (key === 'ArrowUp' && isOpen) this.closePanel();\n return;\n }\n\n switch (key) {\n case 'Enter': {\n if (!isOpen) {\n event.preventDefault();\n this.openPanel();\n return;\n }\n event.preventDefault();\n const idx = this.activeIndex();\n if (idx >= 0) {\n this.selectByVisibleIndex(idx, 'user');\n }\n return;\n }\n case ' ':\n case 'Spacebar': {\n if (searchMode) return;\n event.preventDefault();\n if (!isOpen) {\n this.openPanel();\n return;\n }\n const idx = this.activeIndex();\n if (idx >= 0) {\n this.selectByVisibleIndex(idx, 'user');\n }\n return;\n }\n case 'ArrowDown': {\n event.preventDefault();\n if (!isOpen) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n return;\n }\n case 'ArrowUp': {\n event.preventDefault();\n if (!isOpen) {\n this.openPanel();\n this.moveActiveTo(this.visibleOptions().length - 1, -1);\n } else {\n this.moveActive(-1);\n }\n return;\n }\n case 'Home': {\n if (searchMode) return;\n event.preventDefault();\n if (!isOpen) this.openPanel();\n this.moveActiveTo(0, 1);\n return;\n }\n case 'End': {\n if (searchMode) return;\n event.preventDefault();\n if (!isOpen) this.openPanel();\n this.moveActiveTo(this.visibleOptions().length - 1, -1);\n return;\n }\n case 'PageDown': {\n if (!isOpen) return;\n event.preventDefault();\n this.moveActive(10);\n return;\n }\n case 'PageUp': {\n if (!isOpen) return;\n event.preventDefault();\n this.moveActive(-10);\n return;\n }\n case 'Escape': {\n if (isOpen) {\n event.preventDefault();\n this.closePanel();\n }\n return;\n }\n case 'Tab': {\n if (isOpen) {\n this.closePanel();\n }\n return;\n }\n default:\n if (!searchMode && key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n this.applyTypeAhead(key);\n }\n return;\n }\n }\n\n // ── Type-ahead (non-search mode) ──\n\n private typeAheadBuffer = '';\n private typeAheadTimer: ReturnType<typeof setTimeout> | null = null;\n\n private applyTypeAhead(char: string): void {\n if (this.typeAheadTimer !== null) clearTimeout(this.typeAheadTimer);\n this.typeAheadBuffer += char.toLowerCase();\n const labelFn = this.optionLabel();\n const visible = this.visibleOptions();\n const match = visible.findIndex((o) =>\n labelFn(o.option).toLowerCase().startsWith(this.typeAheadBuffer),\n );\n if (match >= 0) {\n if (!this.open()) this.openPanel();\n this.activeIndex.set(match);\n this.scrollActiveIntoView();\n }\n this.typeAheadTimer = setTimeout(() => {\n this.typeAheadBuffer = '';\n this.typeAheadTimer = null;\n }, 400);\n }\n\n // ── Active-index navigation ──\n\n private moveActive(delta: number): void {\n const visible = this.visibleOptions();\n if (visible.length === 0) {\n this.activeIndex.set(-1);\n return;\n }\n const start = this.activeIndex();\n const direction = delta > 0 ? 1 : -1;\n const steps = Math.abs(delta);\n let current = start;\n for (let i = 0; i < steps; i++) {\n const next = this.findEnabledFrom(current + direction, direction);\n if (next === -1) break;\n current = next;\n }\n if (current !== start && current >= 0) {\n this.activeIndex.set(current);\n this.scrollActiveIntoView();\n }\n }\n\n private moveActiveTo(startIndex: number, direction: 1 | -1): void {\n const next = this.findEnabledFrom(startIndex, direction);\n if (next >= 0) {\n this.activeIndex.set(next);\n this.scrollActiveIntoView();\n }\n }\n\n private findEnabledFrom(start: number, direction: 1 | -1): number {\n const visible = this.visibleOptions();\n let i = start;\n while (i >= 0 && i < visible.length) {\n if (!visible[i].disabled) return i;\n i += direction;\n }\n return -1;\n }\n\n /** @internal */\n initActiveIndexOnOpen(): void {\n const visible = this.visibleOptions();\n if (visible.length === 0) {\n this.activeIndex.set(-1);\n return;\n }\n const selectedIdx = visible.findIndex((v) => this.isValueSelected(v.value));\n if (selectedIdx >= 0 && !visible[selectedIdx].disabled) {\n this.activeIndex.set(selectedIdx);\n } else {\n this.activeIndex.set(this.findEnabledFrom(0, 1));\n }\n this.scrollActiveIntoView();\n }\n\n private scrollActiveIntoView(): void {\n if (!this.platform.isBrowser) return;\n queueMicrotask(() => {\n const id = this.activeDescendantId();\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 // ── Selection commit ──\n\n private commitSelection(value: T, label: string, source: TwSelectSelectionSource): void {\n const previous = this.internalValue();\n if (this.multiple()) {\n const cmp = this.compareWith();\n const currentArr = Array.isArray(previous) ? [...(previous as readonly T[])] : [];\n const existingIdx = currentArr.findIndex((x) => cmp(x, value));\n let added: readonly T[] = [];\n let removed: readonly T[] = [];\n if (existingIdx >= 0) {\n removed = [currentArr[existingIdx]];\n currentArr.splice(existingIdx, 1);\n } else {\n added = [value];\n currentArr.push(value);\n }\n this.internalValue.set(currentArr);\n this.value.set(currentArr);\n if (source === 'user') {\n this.onChange(currentArr);\n this.liveAnnouncer.announce(`${label} ${added.length ? 'selected' : 'deselected'}`, 'polite');\n }\n this.selectionChange.emit({\n value: currentArr,\n previousValue: previous,\n added,\n removed,\n source,\n });\n } else {\n const cmp = this.compareWith();\n const prevSingle = previous as T | null;\n if (prevSingle !== null && prevSingle !== undefined && cmp(prevSingle, value)) {\n if (this.resolvedCloseOnSelect()) this.closePanel();\n return;\n }\n this.internalValue.set(value);\n this.value.set(value);\n if (source === 'user') this.onChange(value);\n this.selectionChange.emit({\n value,\n previousValue: previous,\n added: [value],\n removed: prevSingle !== null && prevSingle !== undefined ? [prevSingle] : [],\n source,\n });\n if (this.resolvedCloseOnSelect()) this.closePanel();\n }\n }\n\n // ── Overlay lifecycle ──\n\n private openOverlay(): void {\n this.ensureOverlay();\n this.attachOverlayComponent();\n this.subscribePerOpen();\n this.search.set('');\n this.initActiveIndexOnOpen();\n queueMicrotask(() => {\n if (this.searchable()) {\n this.overlayInstance?.focusSearchInput();\n }\n });\n this.openedChange.emit({ open: true, trigger: this.elementRef.nativeElement });\n }\n\n private closeOverlay(): void {\n if (this.closingSignal() || !this.overlayInstance) return;\n this.closingSignal.set(true);\n\n this.overlayInstance.leaving.set(true);\n\n (this.elementRef.nativeElement.querySelector('button') as HTMLButtonElement | null)?.focus();\n\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null;\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n this.perOpenSubs?.unsubscribe();\n this.perOpenSubs = null;\n this.overlayInstanceSignal.set(null);\n this.search.set('');\n this.activeIndex.set(-1);\n untracked(() => this.open.set(false));\n this.closingSignal.set(false);\n this.openedChange.emit({ open: false, trigger: this.elementRef.nativeElement });\n }, ANIMATION_DURATION);\n }\n\n private ensureOverlay(): void {\n if (this.overlayRef) {\n this.updateOverlaySize();\n return;\n }\n const positionStrategy = this.overlayService\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(buildSelectLikePositions(this.offset()))\n .withFlexibleDimensions(false)\n .withPush(false)\n .withViewportMargin(8);\n\n this.overlayRef = this.overlayService.create({\n positionStrategy,\n scrollStrategy: resolveSelectScrollStrategy(this.scrollStrategy(), this.overlayService),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: 'tw-select-panel',\n });\n this.installResizeObserver();\n this.updateOverlaySize();\n }\n\n private installResizeObserver(): void {\n if (!this.platform.isBrowser || typeof ResizeObserver === 'undefined') return;\n this.resizeObserver?.disconnect();\n this.resizeObserver = new ResizeObserver(() => this.updateOverlaySize());\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n\n private updateOverlaySize(): void {\n if (!this.overlayRef) return;\n const width = this.panelWidth();\n if (width === 'trigger') {\n const button = (this.elementRef.nativeElement.querySelector('button') as HTMLButtonElement | null);\n const rect = (button ?? this.elementRef.nativeElement).getBoundingClientRect();\n this.overlayRef.updateSize({ width: rect.width });\n } else if (width === 'auto') {\n this.overlayRef.updateSize({ width: undefined, minWidth: undefined });\n } else if (typeof width === 'number') {\n this.overlayRef.updateSize({ width });\n } else {\n this.overlayRef.updateSize({ width });\n }\n }\n\n private attachOverlayComponent(): void {\n if (!this.overlayRef) return;\n const portal = new ComponentPortal<SelectOverlayComponent<T>>(\n SelectOverlayComponent as unknown as new () => SelectOverlayComponent<T>,\n this.viewContainerRef,\n this.injector,\n );\n const ref = this.overlayRef.attach(portal);\n const instance = ref.instance;\n instance.onSearchInput.set((v) => this.search.set(v));\n instance.onOptionSelect.set((i) => this.selectByVisibleIndex(i, 'user'));\n instance.onOptionActivate.set((i) => this.activeIndex.set(i));\n instance.onPanelKeydown.set((e) => this.handleKeydown(e));\n this.overlayInstanceSignal.set(instance);\n }\n\n private subscribePerOpen(): void {\n this.perOpenSubs?.unsubscribe();\n this.perOpenSubs = new Subscription();\n if (!this.overlayRef) return;\n\n this.perOpenSubs.add(\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.closePanel()),\n );\n\n const teardownEscape = consumeOverlayEscape(this.overlayRef, (event) => {\n event.preventDefault();\n this.closePanel();\n });\n this.perOpenSubs.add(() => teardownEscape());\n }\n\n private resolvePanelClass(): string {\n const raw = this.panelClass();\n return Array.isArray(raw) ? raw.join(' ') : (raw as string);\n }\n\n private clearCloseTimer(): void {\n if (this.closeTimer !== null) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n /** @internal */\n buildTriggerContext(): TwSelectTriggerContext<T> {\n return {\n $implicit: this.internalValue(),\n open: this.open(),\n empty: this.isEmpty(),\n selectedOptions: this.selectedOptions() as readonly TwSelectOption<T>[],\n };\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: T | readonly T[] | null): void {\n const previous = this.internalValue();\n let normalised: T | readonly T[] | null;\n if (this.multiple()) {\n if (Array.isArray(value)) normalised = value as readonly T[];\n else if (value === null || value === undefined) normalised = [];\n else normalised = [value as T];\n } else {\n if (Array.isArray(value)) normalised = value.length ? (value[0] as T) : null;\n else normalised = (value as T | null) ?? null;\n }\n this.internalValue.set(normalised);\n this.value.set(normalised);\n this.selectionChange.emit({\n value: normalised,\n previousValue: previous,\n added: [],\n removed: [],\n source: 'programmatic',\n });\n }\n\n registerOnChange(fn: (value: T | readonly T[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal Receives the merged `aria-labelledby` ids from the wrapping form-field. The trigger needs explicit labelledby because it's a non-native combobox button — `<label for>` does not reach it. */\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 const btn = (this.elementRef.nativeElement.querySelector('button') as HTMLButtonElement | null);\n btn?.focus();\n if (!event.defaultPrevented) {\n this.openPanel();\n }\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 const ctrl = this.ngControl?.control;\n if (ctrl) {\n const streams = [ctrl.statusChanges, ctrl.valueChanges].filter(\n (s): s is NonNullable<typeof s> => !!s,\n );\n if (streams.length) {\n merge(...streams)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._ngControlRev.update((n) => n + 1));\n }\n }\n\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n if (submit) {\n submit\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._formSubmitRev.update((n) => n + 1));\n }\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-select.mjs","sources":["../../../projects/ngx-tw/select/select-overlay.ts","../../../projects/ngx-tw/select/select.ts","../../../projects/ngx-tw/select/cdevhub-ngx-tw-select.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\nimport type {\n SelectEmptyTemplateDirective,\n SelectFooterTemplateDirective,\n SelectHeaderTemplateDirective,\n SelectOptionTemplateDirective,\n SelectRenderedRow,\n SelectVisibleOption,\n TwSelectOptionContext,\n} from './select';\n\n/**\n * Internal overlay panel for `tw-select`. Renders the header/search/listbox/empty/footer\n * regions and dispatches interaction callbacks back to the parent `SelectComponent`.\n * Not exported from the public API.\n */\n@Component({\n selector: 'tw-select-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 (headerTemplate(); as tpl) {\n <div class=\"border-b border-border p-2\">\n <ng-container *ngTemplateOutlet=\"tpl.templateRef\" />\n </div>\n }\n\n @if (searchable()) {\n <div class=\"p-2 border-b border-border\">\n <input\n #searchInput\n type=\"search\"\n [id]=\"searchInputId()\"\n [attr.aria-label]=\"'Search'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [value]=\"search()\"\n class=\"w-full px-3 py-1.5 rounded-md border border-border bg-surface text-fg placeholder:text-fg-subtle focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 transition-colors duration-normal motion-reduce:transition-none text-sm\"\n placeholder=\"Search…\"\n (input)=\"onSearchInputEvent($event)\"\n (keydown)=\"onSearchKeydown($event)\"\n />\n </div>\n }\n\n <div\n #listboxEl\n role=\"listbox\"\n tabindex=\"-1\"\n [id]=\"listboxId()\"\n [attr.aria-multiselectable]=\"multiple() ? 'true' : null\"\n [style.maxHeight.px]=\"panelMaxHeight()\"\n class=\"flex-1 min-h-0 overflow-y-auto py-1 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500\"\n >\n @if (visibleOptions().length === 0) {\n @if (emptyTemplate(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { $implicit: search() }\" />\n } @else {\n <div class=\"p-4 text-center text-sm text-fg-muted\">{{ emptyMessage() }}</div>\n }\n } @else {\n @for (row of renderedRows(); track trackRow($index, row)) {\n @if (row.kind === 'group-label') {\n <div role=\"group\" [attr.aria-label]=\"row.group\">\n <div class=\"px-3 py-1 text-xs font-semibold uppercase tracking-wide text-fg-subtle\">\n {{ row.group }}\n </div>\n </div>\n } @else {\n <!-- ARIA activedescendant listbox: keyboard navigation runs on the\n select trigger via aria-activedescendant. Options are click-only\n affordances and never DOM-focus, so they need no keydown handler\n or tabindex of their own. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n role=\"option\"\n [id]=\"optionIdFn()(row.index)\"\n [attr.aria-selected]=\"selectedChecker()(row.index) ? 'true' : 'false'\"\n [attr.aria-disabled]=\"isOptionDisabled(row.index) || null\"\n [class]=\"\n computeOptionClass()(\n selectedChecker()(row.index),\n activeIndex() === row.index,\n isOptionDisabled(row.index)\n )\n \"\n (click)=\"onOptionClick(row.index, $event)\"\n (mouseenter)=\"onOptionMouseEnter(row.index)\"\n >\n @if (optionTemplate(); as tpl) {\n <ng-container\n *ngTemplateOutlet=\"\n tpl.templateRef;\n context: buildOptionContext(row.index, row.option)\n \"\n />\n } @else {\n <span class=\"flex-1 min-w-0 truncate\">{{ optionLabelFn()(row.option) }}</span>\n @if (selectedChecker()(row.index)) {\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n [class]=\"checkmarkClasses()\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M16.704 5.29a1 1 0 0 1 .006 1.414l-7.2 7.3a1 1 0 0 1-1.42.007L3.29 9.296a1 1 0 0 1 1.42-1.41l3.794 3.82 6.79-6.886a1 1 0 0 1 1.41-.07Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n }\n </div>\n }\n }\n }\n </div>\n\n @if (footerTemplate(); as tpl) {\n <div class=\"border-t border-border p-2\">\n <ng-container *ngTemplateOutlet=\"tpl.templateRef\" />\n </div>\n }\n `,\n})\nexport class SelectOverlayComponent<T = unknown> {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n // ── Config signals set by the parent component ──\n\n /** @internal */\n readonly size = signal<TwSize>('md');\n /** @internal */\n readonly color = signal<TwColor>('primary');\n /** @internal */\n readonly multiple = signal(false);\n /** @internal */\n readonly searchable = signal(false);\n /** @internal */\n readonly panelMaxHeight = signal(256);\n /** @internal */\n readonly emptyMessage = signal('No results');\n /** @internal */\n readonly search = signal('');\n /** @internal */\n readonly activeIndex = signal(-1);\n /**\n * @internal Id of the active option, mirrored from the parent select.\n *\n * In searchable mode DOM focus sits on this panel's search input, so\n * `aria-activedescendant` has to live there — an implicit `searchbox`\n * allows it (inherited from `textbox`). The trigger drops the attribute for\n * as long as the panel is open.\n */\n readonly activeDescendantId = signal<string | null>(null);\n /** @internal */\n readonly renderedRows = signal<readonly SelectRenderedRow<T>[]>([]);\n /** @internal */\n readonly visibleOptions = signal<readonly SelectVisibleOption<T>[]>([]);\n /** @internal */\n readonly optionTemplate = signal<SelectOptionTemplateDirective<T> | undefined>(undefined);\n /** @internal */\n readonly emptyTemplate = signal<SelectEmptyTemplateDirective | undefined>(undefined);\n /** @internal */\n readonly headerTemplate = signal<SelectHeaderTemplateDirective | undefined>(undefined);\n /** @internal */\n readonly footerTemplate = signal<SelectFooterTemplateDirective | undefined>(undefined);\n /** @internal */\n readonly optionLabelFn = signal<(option: unknown) => string>(() => '');\n /** @internal */\n readonly selectedChecker = signal<(visibleIndex: number) => boolean>(() => false);\n /** @internal */\n readonly computeOptionClass = signal<\n (selected: boolean, active: boolean, disabled: boolean) => string\n >(() => '');\n /** @internal */\n readonly checkmarkColorClass = signal('');\n /** @internal */\n readonly panelClassValue = signal('');\n /** @internal */\n readonly listboxId = signal('');\n /** @internal */\n readonly searchInputId = signal('');\n /** @internal */\n readonly optionIdFn = signal<(index: number) => string>((i) => `option-${i}`);\n /** @internal */\n readonly leaving = signal(false);\n\n // ── Callbacks set by the parent component ──\n\n /** @internal */\n readonly onSearchInput = signal<(value: string) => void>(() => {});\n /** @internal */\n readonly onOptionSelect = signal<(index: number) => void>(() => {});\n /** @internal */\n readonly onOptionActivate = signal<(index: number) => void>(() => {});\n /** @internal */\n readonly onPanelKeydown = signal<(event: KeyboardEvent) => void>(() => {});\n\n // ── View refs ──\n\n private readonly searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\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-lg shadow-md overflow-hidden flex flex-col';\n const custom = this.panelClassValue();\n return custom ? `${base} ${custom}` : base;\n });\n\n /** @internal */\n readonly checkmarkClasses = computed(() => {\n // xs/sm densities use `size-3.5` (14px) for the checkmark — the half-step\n // is the only icon size that aligns with the surrounding text-xs metric.\n const size = this.size() === 'xs' || this.size() === 'sm' ? 'size-3.5' : 'size-4';\n return `${size} shrink-0 ml-auto ${this.checkmarkColorClass()}`;\n });\n\n // ── Template helpers ──\n\n /** @internal */\n isOptionDisabled(visibleIndex: number): boolean {\n const vis = this.visibleOptions();\n if (visibleIndex < 0 || visibleIndex >= vis.length) return false;\n return vis[visibleIndex].disabled;\n }\n\n /** @internal */\n buildOptionContext(visibleIndex: number, option: unknown): TwSelectOptionContext<T> {\n const v = this.visibleOptions()[visibleIndex];\n return {\n $implicit: option as TwSelectOptionContext<T>['$implicit'],\n label: v?.label ?? '',\n value: v?.value as T,\n selected: this.selectedChecker()(visibleIndex),\n active: this.activeIndex() === visibleIndex,\n disabled: v?.disabled ?? false,\n index: visibleIndex,\n };\n }\n\n /** @internal track function for @for. */\n trackRow(_index: number, row: SelectRenderedRow<T>): string | number {\n if (row.kind === 'group-label') return `g:${row.group}`;\n return `o:${row.index}`;\n }\n\n // ── Interactions ──\n\n /** @internal */\n onSearchInputEvent(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.onSearchInput()(target.value);\n }\n\n /** @internal */\n onSearchKeydown(event: KeyboardEvent): void {\n this.onPanelKeydown()(event);\n }\n\n /** @internal */\n onOptionClick(visibleIndex: number, event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.onOptionSelect()(visibleIndex);\n }\n\n /** @internal */\n onOptionMouseEnter(visibleIndex: number): void {\n if (this.isOptionDisabled(visibleIndex)) return;\n this.onOptionActivate()(visibleIndex);\n }\n\n /** @internal */\n focusSearchInput(): void {\n const el = this.searchInputRef()?.nativeElement;\n el?.focus();\n }\n\n /** @internal Exposes the root overlay element for tests. */\n getElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","import {\n afterNextRender,\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 isDevMode,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n type Signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { type ControlValueAccessor, NgControl } from '@angular/forms';\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 buildSelectLikePositions,\n type ErrorStateMatcher,\n PickerOverlayCoordinator,\n resolveSelectScrollStrategy,\n type TwColor,\n type TwSize,\n wireErrorState,\n} from '@cdevhub/ngx-tw/core';\nimport {\n type FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport { SelectOverlayComponent } from './select-overlay';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Canonical option shape. Consumers using arbitrary objects override the accessor inputs instead. */\nexport interface TwSelectOption<T> {\n /** Visible label. */\n label: string;\n /** Value emitted via `value` / `valueChange`. */\n value: T;\n /** When true, the option cannot be focused or selected. */\n disabled?: boolean;\n /** Optional group name. Options sharing a group render under a labelled `role=\"group\"` region. */\n group?: string;\n}\n\n/** Visual style of the select trigger. */\nexport type SelectVariant = 'default' | 'naked';\n\n/** Origin of a selection change, used to distinguish user input from programmatic writes. */\nexport type TwSelectSelectionSource = 'user' | 'reset' | 'programmatic';\n\n/** Emitted by `selectionChange`. Generic over the option-value type. */\nexport interface TwSelectSelectionChangeEvent<T> {\n /** The current value. `null` when single-select has no selection; `T[]` in multi-select (possibly empty). */\n value: T | readonly T[] | null;\n /** The previous value, before this change. */\n previousValue: T | readonly T[] | null;\n /** Values newly added to the selection. Always empty when `source: 'reset'`. */\n added: readonly T[];\n /** Values removed from the selection. */\n removed: readonly T[];\n /** What triggered the change. */\n source: TwSelectSelectionSource;\n}\n\n/** Emitted by `openedChange`. */\nexport interface TwSelectOpenedEvent {\n /** Whether the panel is now open. */\n open: boolean;\n /** The combobox trigger element — handy when coordinating multiple open panels. */\n trigger: HTMLElement;\n}\n\n/** Emitted by `searchChange`. */\nexport interface TwSelectSearchEvent {\n /** The current search text passed to `filterPredicate`. */\n search: string;\n /** Number of options currently visible after filtering. */\n visibleCount: number;\n}\n\n/** Context provided to an `*twSelectOption` template. */\nexport interface TwSelectOptionContext<T, O = TwSelectOption<T>> {\n /** The raw option object (or arbitrary record when using accessors). */\n $implicit: O;\n /** Resolved label from `optionLabel`. */\n label: string;\n /** Resolved value from `optionValue`. */\n value: T;\n /** Whether this option is currently selected. */\n selected: boolean;\n /** Whether this option is the active-descendant for keyboard nav. */\n active: boolean;\n /** Whether this option is disabled. */\n disabled: boolean;\n /** Index within `visibleOptions()`. */\n index: number;\n}\n\n/** Context provided to a `*twSelectTrigger` template. */\nexport interface TwSelectTriggerContext<T, O = TwSelectOption<T>> {\n /** The current value. */\n $implicit: T | readonly T[] | null;\n /** Whether the panel is open. */\n open: boolean;\n /** Whether the current value is empty. */\n empty: boolean;\n /** The resolved option objects for the current value. */\n selectedOptions: readonly O[];\n}\n\n/** Rendered row in the panel — either a group-label header or an option. */\n// `T` is a phantom type kept for API parity with the other Select generics\n// (`SelectVisibleOption<T, O>`, `SelectComponent<T, O>`).\nexport type SelectRenderedRow<_T, O = unknown> =\n | { readonly kind: 'group-label'; readonly group: string }\n | { readonly kind: 'option'; readonly option: O; readonly index: number; readonly group?: string };\n\n/** Internal: resolved option view paired with its position in `visibleOptions()`. */\nexport interface SelectVisibleOption<T, O = unknown> {\n readonly option: O;\n readonly label: string;\n readonly value: T;\n readonly disabled: boolean;\n readonly group?: string;\n}\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst selectVariants = tv(\n {\n slots: {\n root: 'relative inline-block w-full',\n // `flex`, NOT `inline-flex`. An inline-level trigger inside the block\n // `root` generates a line box, so the host's height became\n // `max(strutAscent, triggerAscent) + triggerDescent` — taller than the\n // trigger itself whenever the consumer's inherited strut out-ascends it.\n // That is what made `xs` measure an odd 27px (26px trigger + a\n // font-metric-dependent fraction) while combobox, whose trigger is\n // block-level `flex`, measured a clean 26. A block-level trigger removes\n // the line box entirely, so the host height equals the pinned height.\n trigger:\n 'w-full flex items-center gap-2 text-fg cursor-pointer transition-[color,border-color,background-color,box-shadow] duration-normal motion-reduce:transition-none',\n valueText: 'flex-1 min-w-0 text-left truncate',\n placeholderText: 'flex-1 min-w-0 text-left truncate text-fg-subtle',\n chevron: 'shrink-0 text-fg-muted transition-transform duration-normal motion-reduce:transition-none',\n // In-flow placeholder that holds the clear control's slot inside the\n // trigger's flex row. The control itself is an absolutely positioned\n // SIBLING of the trigger, because HTML's content model forbids\n // interactive content inside a `button`. Keeping a same-sized box in flow\n // means the value text truncates at exactly the same point, and the\n // `naked` variant's `h-auto` trigger keeps the same 24px floor, as when\n // the control was itself a flex item. Reserving the space with trailing\n // padding instead does NOT work: tailwind-merge does not treat `pe-*` as\n // conflicting with `px-*`, so both would survive the merge.\n clearSpacer: 'size-6 shrink-0',\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 over the trigger, whose smallest pinned height is 24px\n // (`xs` -> `h-6`), so any larger step would overflow the smallest\n // trigger. The floor is what the success criterion asks for.\n //\n // `end-*` (inset-inline-end), never `right-*`: the trigger's flex row\n // reverses under `dir=\"rtl\"`, so a physical offset would park the control\n // on the wrong side. Per-size values live in the `size` variant below.\n clearButton:\n 'absolute top-1/2 -translate-y-1/2 inline-flex items-center justify-center rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none size-6 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\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 //\n // The `clearButton` offsets place the absolutely positioned control back\n // over the in-flow `clearSpacer` it replaced. Each is the trigger's\n // 1px border + its horizontal padding + the chevron's width + `gap-2`,\n // rounded to the nearest spacing step (so each sits 1px inboard of the\n // spacer, which is not perceivable). The `naked` variant drops the border\n // and the padding and takes its own values in `compoundVariants` below.\n size: {\n // xs density: chevron uses `size-3.5` (14px) — half-step that lines up\n // with text-xs inside the compact trigger.\n xs: { trigger: 'px-2 text-xs h-6', chevron: 'size-3.5', clearButton: 'end-8' },\n sm: { trigger: 'px-3 text-sm h-8', chevron: 'size-4', clearButton: 'end-9' },\n md: { trigger: 'px-4 text-sm h-9', chevron: 'size-4', clearButton: 'end-10' },\n lg: { trigger: 'px-5 text-base h-11', chevron: 'size-5', clearButton: 'end-12' },\n xl: { trigger: 'px-6 text-base h-12', chevron: 'size-5', clearButton: 'end-13' },\n },\n variant: {\n default: {\n trigger:\n 'border border-border bg-surface rounded-md hover:border-border-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\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\n // it — same ordering `p-0` already relies on) so the trigger\n // contributes only its line box and the field's own rhythm governs.\n //\n // The focus ring is NOT declared here — it depends on whether a\n // form-field is actually present. See `fieldOwnsFocusRing` below.\n naked: {\n trigger: 'bg-transparent border-0 rounded-none p-0 h-auto',\n },\n },\n // Whether an ancestor `tw-form-field` draws the focus ring for us. Only\n // the `naked` variant reads it, via the compound variants below: inside\n // a field the control wrapper owns the ring, so the trigger suppresses\n // its own; used standalone there is no wrapper, so the trigger has to\n // draw the canonical ring itself or the composite has no focus\n // indicator at all (WCAG 2.2 SC 2.4.7).\n //\n // This cannot be expressed by adding `focus-visible:outline-none` to\n // `naked` and overriding it later: `outline-none` (outline-style) and\n // `outline-2` (outline-width) sit in different tailwind-merge conflict\n // groups, so both survive the merge and `outline-style: none` wins.\n fieldOwnsFocusRing: {\n true: {},\n false: {},\n },\n open: {\n true: { chevron: 'rotate-180' },\n false: { chevron: 'rotate-0' },\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: { root: '' },\n },\n focused: { true: {}, false: {} },\n color: {\n primary: {},\n secondary: {},\n accent: {},\n neutral: {},\n info: {},\n success: {},\n warning: {},\n error: {},\n },\n },\n compoundVariants: [\n { variant: 'default', focused: true, color: 'primary', class: { trigger: 'border-primary-500' } },\n { variant: 'default', focused: true, color: 'secondary', class: { trigger: 'border-secondary-500' } },\n { variant: 'default', focused: true, color: 'accent', class: { trigger: 'border-accent-500' } },\n { variant: 'default', focused: true, color: 'neutral', class: { trigger: 'border-border-strong' } },\n { variant: 'default', focused: true, color: 'info', class: { trigger: 'border-info-500' } },\n { variant: 'default', focused: true, color: 'success', class: { trigger: 'border-success-500' } },\n { variant: 'default', focused: true, color: 'warning', class: { trigger: 'border-warning-500' } },\n { variant: 'default', focused: true, color: 'error', class: { trigger: 'border-error-500' } },\n // `naked` drops the border and the horizontal padding (`px-0`), so the\n // clear control's offset collapses to chevron width + `gap-2`.\n { variant: 'naked', size: 'xs', class: { clearButton: 'end-6' } },\n { variant: 'naked', size: 'sm', class: { clearButton: 'end-6' } },\n { variant: 'naked', size: 'md', class: { clearButton: 'end-6' } },\n { variant: 'naked', size: 'lg', class: { clearButton: 'end-7' } },\n { variant: 'naked', size: 'xl', class: { clearButton: 'end-7' } },\n {\n variant: 'naked',\n fieldOwnsFocusRing: true,\n class: { trigger: 'focus-visible:outline-none' },\n },\n {\n variant: 'naked',\n fieldOwnsFocusRing: false,\n class: {\n trigger:\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n open: false,\n disabled: false,\n focused: false,\n color: 'primary',\n fieldOwnsFocusRing: false,\n },\n },\n { twMerge: true },\n);\n\n// ── Option-state color lookups ──\n// Slot tokens own light/dark contrast — no `dark:`, no shade picks.\n\nconst OPTION_SELECTED_BG: Record<TwColor, string> = {\n primary: 'bg-primary-soft',\n secondary: 'bg-secondary-soft',\n accent: 'bg-accent-soft',\n neutral: 'bg-neutral-soft',\n info: 'bg-info-soft',\n success: 'bg-success-soft',\n warning: 'bg-warning-soft',\n error: 'bg-error-soft',\n};\n\nconst OPTION_CHECKMARK_COLOR: Record<TwColor, string> = {\n primary: 'text-primary-icon',\n secondary: 'text-secondary-icon',\n accent: 'text-accent-icon',\n neutral: 'text-fg',\n info: 'text-info-icon',\n success: 'text-success-icon',\n warning: 'text-warning-icon',\n error: 'text-error-icon',\n};\n\n// ── Template directives (content-projected slots) ─────────────────\n\n/** Structural directive projecting a custom template for each option in the panel. */\n@Directive({ selector: '[twSelectOption]' })\nexport class SelectOptionTemplateDirective<T = unknown, O = TwSelectOption<T>> {\n /** @internal */\n readonly templateRef = inject(TemplateRef<TwSelectOptionContext<T, O>>);\n\n /** @internal Enables strict typing of `let-` bindings in the template. */\n static ngTemplateContextGuard<T, O>(\n _dir: SelectOptionTemplateDirective<T, O>,\n _ctx: unknown,\n ): _ctx is TwSelectOptionContext<T, O> {\n return true;\n }\n}\n\n/** Structural directive projecting a custom template for the select's trigger content. */\n@Directive({ selector: '[twSelectTrigger]' })\nexport class SelectTriggerTemplateDirective<T = unknown, O = TwSelectOption<T>> {\n /** @internal */\n readonly templateRef = inject(TemplateRef<TwSelectTriggerContext<T, O>>);\n\n /** @internal */\n static ngTemplateContextGuard<T, O>(\n _dir: SelectTriggerTemplateDirective<T, O>,\n _ctx: unknown,\n ): _ctx is TwSelectTriggerContext<T, O> {\n return true;\n }\n}\n\n/** Structural directive projecting a custom template for the panel's empty state. */\n@Directive({ selector: '[twSelectEmpty]' })\nexport class SelectEmptyTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<{ $implicit: string }>);\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: SelectEmptyTemplateDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: string } {\n return true;\n }\n}\n\n/** Structural directive projecting a custom header at the top of the panel. */\n@Directive({ selector: '[twSelectHeader]' })\nexport class SelectHeaderTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n\n/** Structural directive projecting a custom footer at the bottom of the panel. */\n@Directive({ selector: '[twSelectFooter]' })\nexport class SelectFooterTemplateDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<unknown>);\n}\n\n// ── ID generator ──\n\nlet nextSelectId = 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\n// ── SelectComponent ──\n\n/**\n * ARIA combobox with listbox popup. Supports single/multi selection, in-panel\n * search filtering, custom option/trigger templates, and full integration with\n * Angular forms (reactive, template-driven, signal-forms) plus `tw-form-field`.\n */\n@Component({\n selector: 'tw-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => SelectComponent),\n },\n PickerOverlayCoordinator,\n ],\n template: `\n <button\n #triggerButton\n type=\"button\"\n [id]=\"hostId\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"open() ? 'true' : 'false'\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-activedescendant]=\"triggerActiveDescendantId()\"\n [attr.aria-autocomplete]=\"searchable() ? 'list' : 'none'\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"labelledBy() || null\"\n [attr.aria-describedby]=\"describedBy() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [disabled]=\"isDisabled()\"\n [attr.data-variant]=\"resolvedVariant()\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n @if (triggerTemplateChild(); as tpl) {\n <span [class]=\"valueTextClasses()\">\n <ng-container\n *ngTemplateOutlet=\"tpl.templateRef; context: buildTriggerContext()\"\n />\n </span>\n } @else if (isEmpty()) {\n <span [class]=\"placeholderTextClasses()\">{{ placeholder() || '\\u00A0' }}</span>\n } @else {\n <span [class]=\"valueTextClasses()\">{{ defaultTriggerText() }}</span>\n }\n\n @if (showClearButton()) {\n <!--\n Holds the clear control's slot in the flex row. The control itself is\n rendered after this button, not inside it - see clearSpacer above.\n -->\n <span [class]=\"clearSpacerClasses()\" aria-hidden=\"true\"></span>\n }\n\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 </button>\n\n @if (showClearButton()) {\n <!--\n A real, native button and a SIBLING of the trigger: HTML's content model\n for button is \"no interactive content descendant\", so the previous\n role=\"button\" tabindex=\"0\" span nested inside the trigger was invalid.\n It sits after the trigger in DOM order, so the tab order is unchanged.\n -->\n <button\n type=\"button\"\n [class]=\"clearButtonClasses()\"\n aria-label=\"Clear selection\"\n (click)=\"onClearClick($event)\"\n (keydown)=\"onClearKeydown($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 <span hidden>\n <ng-content />\n </span>\n `,\n host: {\n '[class]': 'rootClasses()',\n },\n})\nexport class SelectComponent<T = unknown>\n implements ControlValueAccessor, FormFieldControl<T | readonly T[]>, OnInit\n{\n /** Array of options to render in the panel. Accepts either `TwSelectOption<T>` objects or arbitrary records read via the accessor inputs. Defaults to an empty array. */\n readonly options = input<readonly unknown[]>([]);\n\n /** Accessor returning the visible label for an option. Override when passing arbitrary objects. Defaults to reading `.label`, falling back to `String(.value)`. */\n readonly optionLabel = input<(option: unknown) => string>(defaultOptionLabel);\n\n /** Accessor returning the value for an option. The result is what `value` / `valueChange` emit. Defaults to reading `.value`. */\n readonly optionValue = input<(option: unknown) => T>(\n defaultOptionValue as (option: unknown) => T,\n );\n\n /** Accessor returning the disabled state for an option. Defaults to reading `.disabled`. */\n readonly optionDisabled = input<(option: unknown) => boolean>(defaultOptionDisabled);\n\n /** Accessor returning the group name for an option. 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 /** When true, enables multi-selection. The `value` model becomes a `T[]` and the panel renders checkable options. Defaults to `false`. */\n readonly multiple = input(false);\n\n /** When true, renders a search input at the top of the panel that filters options using `filterPredicate`. Defaults to `false`. */\n readonly searchable = input(false);\n\n /** Custom filter function for the search input. Defaults to a case-insensitive substring match on the option label. */\n readonly filterPredicate = input<(option: unknown, search: string) => boolean>(\n (option, search) => {\n const label = this.optionLabel()(option);\n return label.toLowerCase().includes(search.toLowerCase());\n },\n );\n\n /** Placeholder text shown in the trigger when no value is selected. Defaults to `undefined`. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** When true, the trigger cannot be activated and the panel cannot open. Defaults to `false`. Alias: `disabled`. */\n readonly disabledInput = input<boolean>(false, { alias: 'disabled' });\n\n /** When true, exposes `aria-required=\"true\"` on the trigger 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, font size, and panel option density. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color for focused trigger border, active-option background, and checkmarks. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Visual style of the trigger. When inside a `tw-form-field` and left unset, auto-resolves to `'naked'`. Otherwise defaults to `'default'`. */\n readonly variant = input<SelectVariant | undefined>(undefined);\n\n /** Overlay panel width. `'trigger'` matches the trigger's measured width; `'auto'` lets content decide; a number is applied as pixels; a string is passed through as a CSS length. Defaults to `'trigger'`. */\n readonly panelWidth = input<'trigger' | 'auto' | number | string>('trigger');\n\n /** Extra class(es) applied to the overlay panel element. Defaults to an empty string. */\n readonly panelClass = input<string | readonly string[]>('');\n\n /** Maximum height of the listbox scroll region in pixels. Defaults to `256`. */\n readonly panelMaxHeight = input(256);\n\n /** Whether the panel closes after a selection is made. When unset, resolves to `true` for single-select and `false` for multi-select. */\n readonly closeOnSelect = input<boolean | undefined>(undefined);\n\n /** CDK scroll strategy for the overlay. Defaults to `'reposition'`. */\n readonly scrollStrategy = input<'reposition' | 'close' | 'block'>('reposition');\n\n /** Pixel distance between trigger and panel. Defaults to `4`. */\n readonly offset = input(4);\n\n /** Fallback message rendered when the filter yields no options and no `*twSelectEmpty` template is provided. Defaults to `'No results'`. */\n readonly emptyMessage = input('No results');\n\n /** Accessible name for the combobox trigger. Defaults to `undefined`. Alias: `aria-label`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external element that labels the combobox. Defaults to `undefined`. Alias: `aria-labelledby`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** ID of an external element that describes the combobox. 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 select uses the `TW_ERROR_STATE_MATCHER` token's value. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n /** Equality comparator for option values. Defaults to `Object.is`. */\n readonly compareWith = input<(a: T, b: T) => boolean>(Object.is);\n\n // ── Models (two-way) ──\n\n /** Two-way bound selected value(s). Single-select: `T | null`. Multi-select: `T[]`. Defaults to `null`. */\n readonly value = model<T | readonly T[] | null>(null);\n\n /** Two-way bound open state of the panel. Defaults to `false`. */\n readonly open = model(false);\n\n // ── Outputs ──\n\n /** Fires when the panel's visibility finishes changing. Payload carries the new `open` state and the trigger element the overlay is anchored to. */\n readonly openedChange = output<TwSelectOpenedEvent>();\n\n /** Fires after any selection change, with `added`, `removed`, `previousValue`, and a `source` discriminator. */\n readonly selectionChange = output<TwSelectSelectionChangeEvent<T>>();\n\n /** Fires whenever the search input changes (only when `searchable` is true). Payload carries the raw, untrimmed query and the post-filter `visibleCount`. Emitted immediately, not debounced. */\n readonly searchChange = output<TwSelectSearchEvent>();\n\n // ── Content queries ──\n\n /** @internal */\n readonly triggerTemplateChild = contentChild(SelectTriggerTemplateDirective);\n /** @internal */\n readonly optionTemplateChild = contentChild(SelectOptionTemplateDirective);\n /** @internal */\n readonly emptyTemplateChild = contentChild(SelectEmptyTemplateDirective);\n /** @internal */\n readonly headerTemplateChild = contentChild(SelectHeaderTemplateDirective);\n /** @internal */\n readonly footerTemplateChild = contentChild(SelectFooterTemplateDirective);\n\n // ── View queries ──\n\n /** @internal The combobox trigger — focus target after the clear control unmounts. */\n private readonly triggerButtonRef = viewChild<ElementRef<HTMLButtonElement>>('triggerButton');\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 = nextSelectId++;\n /** @internal */\n readonly hostId = `tw-select-${this.uid}`;\n /** @internal */\n readonly listboxId = `${this.hostId}-listbox`;\n /** @internal */\n readonly searchInputId = `${this.hostId}-search`;\n /** @internal */\n readonly optionId = (index: number): string => `${this.hostId}-option-${index}`;\n\n // ── Internal state signals ──\n\n /** @internal */\n readonly internalValue = linkedSignal<T | readonly T[] | null>(() => this.value());\n /** @internal */\n readonly search = signal('');\n /** @internal */\n readonly activeIndex = signal<number>(-1);\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\n private onChange: (value: T | readonly T[] | null) => void = () => {};\n private onTouched: () => void = () => {};\n\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: SelectOverlayComponent<T> | null = null;\n private closing = false;\n\n /** Flips true once the overlay component is attached; the sole trigger for the state-push effect. */\n private readonly isAttached = signal(false);\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */\n readonly resolvedVariant = computed<SelectVariant>(\n () => this.variant() ?? (this.formField ? 'naked' : 'default'),\n );\n\n /** @internal */\n readonly isEmpty = computed(() => {\n const v = this.internalValue();\n if (this.multiple()) return !Array.isArray(v) || v.length === 0;\n return v === null || v === undefined;\n });\n\n /** @internal Visible (filtered) options with resolved view data. */\n readonly visibleOptions = computed<readonly SelectVisibleOption<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 s = this.search().trim();\n const predicate = this.filterPredicate();\n const filtered = s && this.searchable() ? opts.filter((o) => predicate(o, s)) : opts;\n return filtered.map((option) => ({\n option,\n label: labelFn(option),\n value: valueFn(option),\n disabled: disabledFn(option),\n group: groupFn(option),\n }));\n });\n\n /** @internal Rows rendered in the panel (group labels + options). */\n readonly renderedRows = computed<readonly SelectRenderedRow<T>[]>(() => {\n const visible = this.visibleOptions();\n const rows: SelectRenderedRow<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-label', group: v.group });\n }\n currentGroup = v.group;\n }\n rows.push({ kind: 'option', option: v.option, index, group: v.group });\n });\n return rows;\n });\n\n /** @internal Resolved option objects that match the current value. */\n readonly selectedOptions = computed<readonly unknown[]>(() => {\n const v = this.internalValue();\n if (v === null || v === undefined) return [];\n const cmp = this.compareWith();\n const valueFn = this.optionValue();\n const opts = this.options();\n if (this.multiple()) {\n const arr = Array.isArray(v) ? v : [];\n return opts.filter((o) => arr.some((x) => cmp(valueFn(o), x)));\n }\n return opts.filter((o) => cmp(valueFn(o), v as T));\n });\n\n /** @internal */\n readonly defaultTriggerText = computed(() => {\n const opts = this.selectedOptions();\n const labelFn = this.optionLabel();\n if (opts.length === 0) return '';\n return opts.map((o) => labelFn(o)).join(', ');\n });\n\n /** @internal */\n readonly showClearButton = computed(\n () => !this.isDisabled() && !this.isEmpty(),\n );\n\n /** @internal */\n readonly activeDescendantId = computed(() => {\n if (!this.open()) return null;\n const idx = this.activeIndex();\n if (idx < 0 || idx >= this.visibleOptions().length) return null;\n return this.optionId(idx);\n });\n\n /**\n * @internal `aria-activedescendant` for the trigger button.\n *\n * Null while a searchable panel is open: `openOverlay()` moves DOM focus to\n * the overlay's search input, and `aria-activedescendant` is only honoured\n * on the element that actually holds focus. Leaving it on the blurred\n * trigger made arrow-key navigation silent to assistive tech. The overlay's\n * search input carries it instead in that mode.\n */\n readonly triggerActiveDescendantId = computed(() => {\n if (this.searchable() && this.open()) return null;\n return this.activeDescendantId();\n });\n\n /** @internal */\n readonly describedBy = 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 Merged `aria-labelledby`: form-field-pushed label ids + consumer-supplied `aria-labelledby`. */\n readonly labelledBy = 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 Resolved close-on-select behaviour. */\n readonly resolvedCloseOnSelect = computed(() => {\n const explicit = this.closeOnSelect();\n if (explicit !== undefined) return explicit;\n return !this.multiple();\n });\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n selectVariants({\n size: this.size(),\n variant: this.resolvedVariant(),\n open: this.open(),\n disabled: this.isDisabled(),\n focused: this.focusedSignal(),\n color: this.color(),\n fieldOwnsFocusRing: !!this.formField,\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 valueTextClasses = computed(() => this.variantResult().valueText());\n /** @internal */\n readonly placeholderTextClasses = computed(() => this.variantResult().placeholderText());\n /** @internal */\n readonly chevronClasses = computed(() => this.variantResult().chevron());\n /** @internal */\n readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n /** @internal */\n readonly clearSpacerClasses = computed(() => this.variantResult().clearSpacer());\n\n /** @internal */\n readonly optionSizeClass = computed(() => {\n switch (this.size()) {\n case 'xs':\n return 'px-2 py-1 text-xs gap-1.5';\n case 'sm':\n return 'px-3 py-1.5 text-sm';\n case 'md':\n return 'px-3 py-2 text-sm';\n case 'lg':\n return 'px-4 py-2.5 text-base';\n case 'xl':\n return 'px-4 py-3 text-base';\n }\n });\n\n /** @internal */\n readonly checkmarkColorClass = computed(() => OPTION_CHECKMARK_COLOR[this.color()]);\n\n /** @internal Class string applied to each option row. */\n computeOptionClass = (selected: boolean, active: boolean, disabled: boolean): string => {\n const sizeClass = this.optionSizeClass();\n const color = this.color();\n const base =\n 'relative flex items-center cursor-pointer select-none text-fg gap-2 transition-colors duration-normal motion-reduce:transition-none';\n const parts: string[] = [base, sizeClass];\n if (disabled) {\n parts.push('opacity-50 pointer-events-none');\n }\n if (selected) {\n parts.push(OPTION_SELECTED_BG[color]);\n } else if (active) {\n parts.push('bg-surface-muted');\n } else {\n parts.push('hover:bg-surface-muted');\n }\n return parts.join(' ');\n };\n\n // ── FormFieldControl impl (readonly signals) ──\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 trigger'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 Error-state per the configured `ErrorStateMatcher`. Reads the bound `NgControl.invalid` through the matcher. */\n readonly errorState: Signal<boolean> = this.errorWiring.errorState;\n /** @internal */\n readonly controlType = 'select';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() => this.ariaDescribedby());\n /** @internal */\n readonly userAriaLabelledby: Signal<string | undefined> = computed(() => this.ariaLabelledby());\n\n /** @internal Public read-only view of the current value for FormFieldControl. */\n // Overriding `value` typing from the model by using an explicit computed that matches the abstract signature.\n // (The model `value` property is a WritableSignal<T | readonly T[] | null>; FormFieldControl needs a Signal<T | readonly T[] | null>.\n // A WritableSignal is assignable to Signal, so we just cast once.)\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 resets `search` and then reads it back through visibleOptions).\n effect(() => {\n const shouldOpen = this.open();\n const disabled = this.isDisabled();\n untracked(() => {\n if (disabled && this.overlayInstance) {\n this.closeOverlay();\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();\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. All\n // reads happen in the tracked phase; every write to the overlay instance is\n // wrapped in `untracked()` so it never feeds back into this effect.\n effect(() => {\n const attached = this.isAttached();\n const size = this.size();\n const color = this.color();\n const multiple = this.multiple();\n const searchable = this.searchable();\n const panelMaxHeight = this.panelMaxHeight();\n const emptyMessage = this.emptyMessage();\n const search = this.search();\n const activeIndex = this.activeIndex();\n const activeDescendantId = this.activeDescendantId();\n const renderedRows = this.renderedRows();\n const visibleOptions = this.visibleOptions();\n const optionTemplate = this.optionTemplateChild();\n const emptyTemplate = this.emptyTemplateChild();\n const headerTemplate = this.headerTemplateChild();\n const footerTemplate = this.footerTemplateChild();\n const optionLabelFn = this.optionLabel();\n const checkmarkColorClass = this.checkmarkColorClass();\n const panelClassValue = this.resolvePanelClass();\n untracked(() => {\n const instance = this.overlayInstance;\n if (!attached || !instance) return;\n instance.size.set(size);\n instance.color.set(color);\n instance.multiple.set(multiple);\n instance.searchable.set(searchable);\n instance.panelMaxHeight.set(panelMaxHeight);\n instance.emptyMessage.set(emptyMessage);\n instance.search.set(search);\n instance.activeIndex.set(activeIndex);\n instance.activeDescendantId.set(activeDescendantId);\n instance.renderedRows.set(renderedRows);\n instance.visibleOptions.set(visibleOptions);\n instance.optionTemplate.set(optionTemplate);\n instance.emptyTemplate.set(emptyTemplate);\n instance.headerTemplate.set(headerTemplate);\n instance.footerTemplate.set(footerTemplate);\n instance.optionLabelFn.set(optionLabelFn);\n instance.selectedChecker.set((index: number) => this.isVisibleOptionSelected(index));\n instance.computeOptionClass.set(this.computeOptionClass);\n instance.checkmarkColorClass.set(checkmarkColorClass);\n instance.panelClassValue.set(panelClassValue);\n instance.listboxId.set(this.listboxId);\n instance.searchInputId.set(this.searchInputId);\n instance.optionIdFn.set(this.optionId);\n });\n });\n\n // Emit searchChange whenever the user types.\n effect(() => {\n const s = this.search();\n const count = this.visibleOptions().length;\n untracked(() => {\n if (this.overlayInstance) {\n this.searchChange.emit({ search: s, visibleCount: count });\n }\n });\n });\n\n // Dev-mode accessible-name warning.\n afterNextRender(() => {\n if (!isDevMode()) return;\n const hasLabel =\n !!this.ariaLabel() ||\n !!this.ariaLabelledby() ||\n !!this.formField?.hasLabel() ||\n !!this.triggerTemplateChild();\n if (!hasLabel) {\n console.warn(\n '[tw-select] The select has no accessible name. Set aria-label, aria-labelledby, wrap in <tw-form-field> with a <label twLabel>, or project a *twSelectTrigger template.',\n );\n }\n });\n\n // Monitor focus on the trigger (and descendant overlay) for 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) {\n this.onTouched();\n if (wasFocused) {\n // Blur often flips `touched` on the bound `NgControl`; bump the\n // revision so `errorState` recomputes.\n this.errorWiring.bump();\n }\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.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.overlayInstance = null;\n });\n }\n\n // ── Public methods ──\n\n /** Opens the overlay panel. 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 overlay panel. No-op when already closed. */\n closePanel(): void {\n if (!this.open()) return;\n this.open.set(false);\n }\n\n /** Toggles the panel's open state. */\n toggle(): void {\n if (this.open()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n /** Clears the current selection and emits `selectionChange` with `source: 'reset'`. */\n clear(): void {\n const previous = this.internalValue();\n const removed = this.selectedOptions().map((o) => this.optionValue()(o));\n const next: T | readonly T[] | null = this.multiple() ? [] : null;\n this.internalValue.set(next);\n this.value.set(next);\n this.onChange(next);\n this.selectionChange.emit({\n value: next,\n previousValue: previous,\n added: [],\n removed,\n source: 'reset',\n });\n }\n\n /** @internal Whether a visible-option index is currently selected. */\n isVisibleOptionSelected(index: number): boolean {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return false;\n return this.isValueSelected(visible[index].value);\n }\n\n /** @internal */\n isValueSelected(value: T): boolean {\n const current = this.internalValue();\n if (current === null || current === undefined) return false;\n const cmp = this.compareWith();\n if (this.multiple()) {\n const arr = Array.isArray(current) ? current : [];\n return arr.some((x) => cmp(x, value));\n }\n return cmp(current as T, value);\n }\n\n /** @internal */\n selectByVisibleIndex(index: number, source: TwSelectSelectionSource = 'user'): void {\n const visible = this.visibleOptions();\n if (index < 0 || index >= visible.length) return;\n const target = visible[index];\n if (target.disabled) return;\n this.commitSelection(target.value, target.label, source);\n }\n\n // ── Trigger interactions ──\n\n /** @internal */\n onTriggerClick(): void {\n if (this.isDisabled()) return;\n this.toggle();\n }\n\n /**\n * @internal\n *\n * `stopPropagation` + `preventDefault` are load-bearing even now that the\n * control is a sibling of the trigger rather than nested inside it: inside a\n * `tw-form-field` the click still bubbles to the field's control wrapper,\n * which calls `onContainerClick()` and would open the panel on a clear.\n */\n onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n this.focusTrigger();\n }\n\n /**\n * @internal\n *\n * A native `button` already activates on Enter and Space in a browser, so\n * this looks redundant — it is not. `preventDefault()` here suppresses that\n * native activation, so the two paths cannot both fire, and jsdom never\n * synthesises a click from a key event at all, which makes this the only\n * keyboard path a unit spec can exercise.\n */\n onClearKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n this.clear();\n this.focusTrigger();\n }\n }\n\n /**\n * Clearing removes the clear control from the DOM (`showClearButton()` goes\n * false), so whatever had focus is destroyed under the user. Hand focus back\n * to the trigger rather than letting it fall to `<body>` (SC 2.4.3).\n *\n * The disabled guard is not redundant. `[disabled]` on a native button makes\n * `.focus()` a silent no-op (the same trap `calendar-cell` hit), and today\n * the only reason the path cannot be reached is that `showClearButton()`\n * happens to include `!isDisabled()`. That is ordering, not a guarantee: a\n * `setDisabledState(true)` landing between the keydown and this call would\n * drop focus to `<body>` with nothing to show for it.\n */\n private focusTrigger(): void {\n if (this.isDisabled()) return;\n this.triggerButtonRef()?.nativeElement.focus();\n }\n\n /** @internal */\n onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n this.handleKeydown(event);\n }\n\n /** @internal Handles keyboard events from the trigger AND the search input inside the overlay. */\n handleKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const isOpen = this.open();\n const searchMode = this.searchable() && isOpen;\n\n if (event.altKey && (key === 'ArrowDown' || key === 'ArrowUp')) {\n event.preventDefault();\n if (key === 'ArrowDown' && !isOpen) this.openPanel();\n else if (key === 'ArrowUp' && isOpen) this.closePanel();\n return;\n }\n\n switch (key) {\n case 'Enter': {\n if (!isOpen) {\n event.preventDefault();\n this.openPanel();\n return;\n }\n event.preventDefault();\n const idx = this.activeIndex();\n if (idx >= 0) {\n this.selectByVisibleIndex(idx, 'user');\n }\n return;\n }\n case ' ':\n case 'Spacebar': {\n if (searchMode) return;\n event.preventDefault();\n if (!isOpen) {\n this.openPanel();\n return;\n }\n const idx = this.activeIndex();\n if (idx >= 0) {\n this.selectByVisibleIndex(idx, 'user');\n }\n return;\n }\n case 'ArrowDown': {\n event.preventDefault();\n if (!isOpen) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n return;\n }\n case 'ArrowUp': {\n event.preventDefault();\n if (!isOpen) {\n this.openPanel();\n this.moveActiveTo(this.visibleOptions().length - 1, -1);\n } else {\n this.moveActive(-1);\n }\n return;\n }\n case 'Home': {\n if (searchMode) return;\n event.preventDefault();\n if (!isOpen) this.openPanel();\n this.moveActiveTo(0, 1);\n return;\n }\n case 'End': {\n if (searchMode) return;\n event.preventDefault();\n if (!isOpen) this.openPanel();\n this.moveActiveTo(this.visibleOptions().length - 1, -1);\n return;\n }\n case 'PageDown': {\n if (!isOpen) return;\n event.preventDefault();\n this.moveActive(10);\n return;\n }\n case 'PageUp': {\n if (!isOpen) return;\n event.preventDefault();\n this.moveActive(-10);\n return;\n }\n case 'Escape': {\n if (isOpen) {\n event.preventDefault();\n this.closePanel();\n }\n return;\n }\n case 'Tab': {\n if (isOpen) {\n this.closePanel();\n }\n return;\n }\n default:\n if (!searchMode && key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n this.applyTypeAhead(key);\n }\n return;\n }\n }\n\n // ── Type-ahead (non-search mode) ──\n\n private typeAheadBuffer = '';\n private typeAheadTimer: ReturnType<typeof setTimeout> | null = null;\n\n private applyTypeAhead(char: string): void {\n if (this.typeAheadTimer !== null) clearTimeout(this.typeAheadTimer);\n this.typeAheadBuffer += char.toLowerCase();\n const labelFn = this.optionLabel();\n const visible = this.visibleOptions();\n // Disabled options are skipped, matching every other navigation path in this\n // file (`findEnabledFrom`). Without the filter, `aria-activedescendant` could\n // land on an option that `selectByVisibleIndex` then refuses to commit, so\n // Enter did nothing with no feedback.\n const match = visible.findIndex(\n (o) =>\n !o.disabled &&\n labelFn(o.option).toLowerCase().startsWith(this.typeAheadBuffer),\n );\n if (match >= 0) {\n if (!this.open()) this.openPanel();\n this.activeIndex.set(match);\n this.scrollActiveIntoView();\n }\n this.typeAheadTimer = setTimeout(() => {\n this.typeAheadBuffer = '';\n this.typeAheadTimer = null;\n }, 400);\n }\n\n // ── Active-index navigation ──\n\n private moveActive(delta: number): void {\n const visible = this.visibleOptions();\n if (visible.length === 0) {\n this.activeIndex.set(-1);\n return;\n }\n const start = this.activeIndex();\n const direction = delta > 0 ? 1 : -1;\n const steps = Math.abs(delta);\n let current = start;\n for (let i = 0; i < steps; i++) {\n const next = this.findEnabledFrom(current + direction, direction);\n if (next === -1) break;\n current = next;\n }\n if (current !== start && current >= 0) {\n this.activeIndex.set(current);\n this.scrollActiveIntoView();\n }\n }\n\n private moveActiveTo(startIndex: number, direction: 1 | -1): void {\n const next = this.findEnabledFrom(startIndex, direction);\n if (next >= 0) {\n this.activeIndex.set(next);\n this.scrollActiveIntoView();\n }\n }\n\n private findEnabledFrom(start: number, direction: 1 | -1): number {\n const visible = this.visibleOptions();\n let i = start;\n while (i >= 0 && i < visible.length) {\n if (!visible[i].disabled) return i;\n i += direction;\n }\n return -1;\n }\n\n /** @internal */\n initActiveIndexOnOpen(): void {\n const visible = this.visibleOptions();\n if (visible.length === 0) {\n this.activeIndex.set(-1);\n return;\n }\n const selectedIdx = visible.findIndex((v) => this.isValueSelected(v.value));\n if (selectedIdx >= 0 && !visible[selectedIdx].disabled) {\n this.activeIndex.set(selectedIdx);\n } else {\n this.activeIndex.set(this.findEnabledFrom(0, 1));\n }\n this.scrollActiveIntoView();\n }\n\n private scrollActiveIntoView(): void {\n if (!this.platform.isBrowser) return;\n queueMicrotask(() => {\n const id = this.activeDescendantId();\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 // ── Selection commit ──\n\n private commitSelection(value: T, label: string, source: TwSelectSelectionSource): void {\n const previous = this.internalValue();\n if (this.multiple()) {\n const cmp = this.compareWith();\n const currentArr = Array.isArray(previous) ? [...(previous as readonly T[])] : [];\n const existingIdx = currentArr.findIndex((x) => cmp(x, value));\n let added: readonly T[] = [];\n let removed: readonly T[] = [];\n if (existingIdx >= 0) {\n removed = [currentArr[existingIdx]];\n currentArr.splice(existingIdx, 1);\n } else {\n added = [value];\n currentArr.push(value);\n }\n this.internalValue.set(currentArr);\n this.value.set(currentArr);\n if (source === 'user') {\n this.onChange(currentArr);\n this.liveAnnouncer.announce(`${label} ${added.length ? 'selected' : 'deselected'}`, 'polite');\n }\n this.selectionChange.emit({\n value: currentArr,\n previousValue: previous,\n added,\n removed,\n source,\n });\n } else {\n const cmp = this.compareWith();\n const prevSingle = previous as T | null;\n if (prevSingle !== null && prevSingle !== undefined && cmp(prevSingle, value)) {\n if (this.resolvedCloseOnSelect()) this.closePanel();\n return;\n }\n this.internalValue.set(value);\n this.value.set(value);\n if (source === 'user') this.onChange(value);\n this.selectionChange.emit({\n value,\n previousValue: previous,\n added: [value],\n removed: prevSingle !== null && prevSingle !== undefined ? [prevSingle] : [],\n source,\n });\n if (this.resolvedCloseOnSelect()) this.closePanel();\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 * listbox, so DOM focus stays on the trigger (or the panel's search input)\n * and a trap's anchor elements would inject tab stops around the panel.\n */\n private openOverlay(): void {\n const result = this.coordinator.open<SelectOverlayComponent<T>>({\n origin: this.elementRef,\n portalComponent: SelectOverlayComponent as unknown as new () => SelectOverlayComponent<T>,\n viewContainerRef: this.viewContainerRef,\n injector: this.injector,\n positions: buildSelectLikePositions(this.offset()),\n scrollStrategy: resolveSelectScrollStrategy(this.scrollStrategy(), this.overlayService),\n panelClass: 'tw-select-panel',\n focusTrap: false,\n });\n if (!result) return;\n\n const instance = result.instance;\n instance.onSearchInput.set((v) => this.search.set(v));\n instance.onOptionSelect.set((i) => this.selectByVisibleIndex(i, 'user'));\n instance.onOptionActivate.set((i) => this.activeIndex.set(i));\n instance.onPanelKeydown.set((e) => this.handleKeydown(e));\n this.overlayInstance = instance;\n\n this.installResizeObserver();\n this.updateOverlaySize();\n this.subscribePerOpen();\n\n this.search.set('');\n this.initActiveIndexOnOpen();\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 queueMicrotask(() => {\n if (this.searchable()) {\n this.overlayInstance?.focusSearchInput();\n }\n });\n this.openedChange.emit({ open: true, trigger: this.elementRef.nativeElement });\n }\n\n private closeOverlay(): void {\n if (this.closing || !this.overlayInstance) return;\n this.closing = true;\n\n this.overlayInstance.leaving.set(true);\n\n this.triggerButtonRef()?.nativeElement.focus();\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. Keeping it alive would leave it feeding a disposed\n // ref, which is the mirror image of the bug the old reuse path had.\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.overlayInstance = null;\n this.isAttached.set(false);\n this.search.set('');\n this.activeIndex.set(-1);\n untracked(() => this.open.set(false));\n this.closing = false;\n this.openedChange.emit({ open: false, trigger: this.elementRef.nativeElement });\n });\n }\n\n private installResizeObserver(): void {\n if (!this.platform.isBrowser || typeof ResizeObserver === 'undefined') return;\n this.resizeObserver?.disconnect();\n this.resizeObserver = new ResizeObserver(() => this.updateOverlaySize());\n this.resizeObserver.observe(this.elementRef.nativeElement);\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 // The view query, NOT `querySelector('button')`: the clear control is now\n // a second button inside the host, and measuring the wrong one would\n // silently corrupt `panelWidth=\"trigger\"`.\n const button = this.triggerButtonRef()?.nativeElement ?? null;\n const rect = (button ?? this.elementRef.nativeElement).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 * 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.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 /** @internal */\n buildTriggerContext(): TwSelectTriggerContext<T> {\n return {\n $implicit: this.internalValue(),\n open: this.open(),\n empty: this.isEmpty(),\n selectedOptions: this.selectedOptions() as readonly TwSelectOption<T>[],\n };\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: T | readonly T[] | null): void {\n const previous = this.internalValue();\n let normalised: T | readonly T[] | null;\n if (this.multiple()) {\n if (Array.isArray(value)) normalised = value as readonly T[];\n else if (value === null || value === undefined) normalised = [];\n else normalised = [value as T];\n } else {\n if (Array.isArray(value)) normalised = value.length ? (value[0] as T) : null;\n else normalised = (value as T | null) ?? null;\n }\n this.internalValue.set(normalised);\n this.value.set(normalised);\n this.selectionChange.emit({\n value: normalised,\n previousValue: previous,\n added: [],\n removed: [],\n source: 'programmatic',\n });\n }\n\n registerOnChange(fn: (value: T | readonly T[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal Receives the merged `aria-labelledby` ids from the wrapping form-field. The trigger needs explicit labelledby because it's a non-native combobox button — `<label for>` does not reach it. */\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.triggerButtonRef()?.nativeElement.focus();\n if (!event.defaultPrevented) {\n this.openPanel();\n }\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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"}