@tailng-ui/primitives 0.12.0 → 0.13.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 (273) hide show
  1. package/package.json +12 -6
  2. package/src/lib/feedback/empty/tng-empty.d.ts +11 -0
  3. package/src/lib/feedback/empty/tng-empty.d.ts.map +1 -1
  4. package/src/lib/feedback/empty/tng-empty.js +76 -66
  5. package/src/lib/feedback/empty/tng-empty.js.map +1 -1
  6. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts +5 -0
  7. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts.map +1 -1
  8. package/src/lib/feedback/progress-bar/tng-progress-bar.js +50 -54
  9. package/src/lib/feedback/progress-bar/tng-progress-bar.js.map +1 -1
  10. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts +3 -0
  11. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts.map +1 -1
  12. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js +35 -41
  13. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js.map +1 -1
  14. package/src/lib/feedback/skeleton/tng-skeleton.d.ts +3 -0
  15. package/src/lib/feedback/skeleton/tng-skeleton.d.ts.map +1 -1
  16. package/src/lib/feedback/skeleton/tng-skeleton.js +30 -32
  17. package/src/lib/feedback/skeleton/tng-skeleton.js.map +1 -1
  18. package/src/lib/feedback/toast/tng-toast.d.ts +5 -0
  19. package/src/lib/feedback/toast/tng-toast.d.ts.map +1 -1
  20. package/src/lib/feedback/toast/tng-toast.js +51 -49
  21. package/src/lib/feedback/toast/tng-toast.js.map +1 -1
  22. package/src/lib/form/_shared/id/tng-unique-id.service.d.ts +3 -0
  23. package/src/lib/form/_shared/id/tng-unique-id.service.d.ts.map +1 -1
  24. package/src/lib/form/_shared/id/tng-unique-id.service.js +9 -7
  25. package/src/lib/form/_shared/id/tng-unique-id.service.js.map +1 -1
  26. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts +3 -0
  27. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts.map +1 -1
  28. package/src/lib/form/_shared/select/tng-select.overlay.shared.js +22 -20
  29. package/src/lib/form/_shared/select/tng-select.overlay.shared.js.map +1 -1
  30. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts +9 -0
  31. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts.map +1 -1
  32. package/src/lib/form/_shared/select/tng-select.parts.shared.js +106 -98
  33. package/src/lib/form/_shared/select/tng-select.parts.shared.js.map +1 -1
  34. package/src/lib/form/autocomplete/tng-autocomplete.d.ts +3 -0
  35. package/src/lib/form/autocomplete/tng-autocomplete.d.ts.map +1 -1
  36. package/src/lib/form/autocomplete/tng-autocomplete.js +40 -38
  37. package/src/lib/form/autocomplete/tng-autocomplete.js.map +1 -1
  38. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts +6 -0
  39. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts.map +1 -1
  40. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js +54 -46
  41. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js.map +1 -1
  42. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts +3 -0
  43. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts.map +1 -1
  44. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js +22 -20
  45. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js.map +1 -1
  46. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts +9 -0
  47. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts.map +1 -1
  48. package/src/lib/form/autocomplete/tng-autocomplete.parts.js +109 -101
  49. package/src/lib/form/autocomplete/tng-autocomplete.parts.js.map +1 -1
  50. package/src/lib/form/button-toggle/tng-button-toggle.d.ts +5 -0
  51. package/src/lib/form/button-toggle/tng-button-toggle.d.ts.map +1 -1
  52. package/src/lib/form/button-toggle/tng-button-toggle.js +121 -155
  53. package/src/lib/form/button-toggle/tng-button-toggle.js.map +1 -1
  54. package/src/lib/form/checkbox/tng-checkbox.d.ts +3 -0
  55. package/src/lib/form/checkbox/tng-checkbox.d.ts.map +1 -1
  56. package/src/lib/form/checkbox/tng-checkbox.js +95 -107
  57. package/src/lib/form/checkbox/tng-checkbox.js.map +1 -1
  58. package/src/lib/form/chips/tng-chips.d.ts +7 -0
  59. package/src/lib/form/chips/tng-chips.d.ts.map +1 -1
  60. package/src/lib/form/chips/tng-chips.js +107 -115
  61. package/src/lib/form/chips/tng-chips.js.map +1 -1
  62. package/src/lib/form/combobox/tng-combobox.d.ts +3 -0
  63. package/src/lib/form/combobox/tng-combobox.d.ts.map +1 -1
  64. package/src/lib/form/combobox/tng-combobox.js +16 -14
  65. package/src/lib/form/combobox/tng-combobox.js.map +1 -1
  66. package/src/lib/form/input/tng-input.d.ts +9 -0
  67. package/src/lib/form/input/tng-input.d.ts.map +1 -1
  68. package/src/lib/form/input/tng-input.js +161 -141
  69. package/src/lib/form/input/tng-input.js.map +1 -1
  70. package/src/lib/form/input-otp/tng-input-otp.d.ts +3 -0
  71. package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -1
  72. package/src/lib/form/input-otp/tng-input-otp.js +58 -70
  73. package/src/lib/form/input-otp/tng-input-otp.js.map +1 -1
  74. package/src/lib/form/label/tng-label.d.ts +3 -0
  75. package/src/lib/form/label/tng-label.d.ts.map +1 -1
  76. package/src/lib/form/label/tng-label.js +24 -26
  77. package/src/lib/form/label/tng-label.js.map +1 -1
  78. package/src/lib/form/listbox/listbox.directive.d.ts +3 -0
  79. package/src/lib/form/listbox/listbox.directive.d.ts.map +1 -1
  80. package/src/lib/form/listbox/listbox.directive.js +45 -43
  81. package/src/lib/form/listbox/listbox.directive.js.map +1 -1
  82. package/src/lib/form/listbox/option.directive.d.ts +3 -0
  83. package/src/lib/form/listbox/option.directive.d.ts.map +1 -1
  84. package/src/lib/form/listbox/option.directive.js +40 -38
  85. package/src/lib/form/listbox/option.directive.js.map +1 -1
  86. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts +3 -0
  87. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts.map +1 -1
  88. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js +23 -21
  89. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js.map +1 -1
  90. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts +3 -0
  91. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts.map +1 -1
  92. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js +25 -23
  93. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js.map +1 -1
  94. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts +3 -0
  95. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts.map +1 -1
  96. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js +35 -33
  97. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js.map +1 -1
  98. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts +6 -0
  99. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts.map +1 -1
  100. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js +57 -46
  101. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js.map +1 -1
  102. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts +3 -0
  103. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts.map +1 -1
  104. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js +16 -14
  105. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js.map +1 -1
  106. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts +3 -0
  107. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts.map +1 -1
  108. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js +52 -50
  109. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js.map +1 -1
  110. package/src/lib/form/multi-select/tng-multi-select.d.ts +3 -0
  111. package/src/lib/form/multi-select/tng-multi-select.d.ts.map +1 -1
  112. package/src/lib/form/multi-select/tng-multi-select.js +41 -36
  113. package/src/lib/form/multi-select/tng-multi-select.js.map +1 -1
  114. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts +6 -0
  115. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts.map +1 -1
  116. package/src/lib/form/multi-select/tng-multi-select.listbox.js +50 -45
  117. package/src/lib/form/multi-select/tng-multi-select.listbox.js.map +1 -1
  118. package/src/lib/form/multiselect/tng-multiselect.d.ts +3 -0
  119. package/src/lib/form/multiselect/tng-multiselect.d.ts.map +1 -1
  120. package/src/lib/form/multiselect/tng-multiselect.js +16 -14
  121. package/src/lib/form/multiselect/tng-multiselect.js.map +1 -1
  122. package/src/lib/form/radio/tng-radio.d.ts +3 -0
  123. package/src/lib/form/radio/tng-radio.d.ts.map +1 -1
  124. package/src/lib/form/radio/tng-radio.js +91 -101
  125. package/src/lib/form/radio/tng-radio.js.map +1 -1
  126. package/src/lib/form/select/tng-select.d.ts +3 -0
  127. package/src/lib/form/select/tng-select.d.ts.map +1 -1
  128. package/src/lib/form/select/tng-select.js +41 -36
  129. package/src/lib/form/select/tng-select.js.map +1 -1
  130. package/src/lib/form/select/tng-select.listbox.d.ts +6 -0
  131. package/src/lib/form/select/tng-select.listbox.d.ts.map +1 -1
  132. package/src/lib/form/select/tng-select.listbox.js +50 -45
  133. package/src/lib/form/select/tng-select.listbox.js.map +1 -1
  134. package/src/lib/form/slider/tng-slider.d.ts +3 -0
  135. package/src/lib/form/slider/tng-slider.d.ts.map +1 -1
  136. package/src/lib/form/slider/tng-slider.js +42 -50
  137. package/src/lib/form/slider/tng-slider.js.map +1 -1
  138. package/src/lib/form/switch/tng-switch.d.ts +3 -0
  139. package/src/lib/form/switch/tng-switch.d.ts.map +1 -1
  140. package/src/lib/form/switch/tng-switch.js +44 -48
  141. package/src/lib/form/switch/tng-switch.js.map +1 -1
  142. package/src/lib/form/textarea/tng-textarea.d.ts +4 -0
  143. package/src/lib/form/textarea/tng-textarea.d.ts.map +1 -1
  144. package/src/lib/form/textarea/tng-textarea.js +40 -41
  145. package/src/lib/form/textarea/tng-textarea.js.map +1 -1
  146. package/src/lib/form/toggle/tng-toggle.d.ts +3 -0
  147. package/src/lib/form/toggle/tng-toggle.d.ts.map +1 -1
  148. package/src/lib/form/toggle/tng-toggle.js +71 -75
  149. package/src/lib/form/toggle/tng-toggle.js.map +1 -1
  150. package/src/lib/form/toggle-group/tng-toggle-group.d.ts +3 -0
  151. package/src/lib/form/toggle-group/tng-toggle-group.d.ts.map +1 -1
  152. package/src/lib/form/toggle-group/tng-toggle-group.js +48 -50
  153. package/src/lib/form/toggle-group/tng-toggle-group.js.map +1 -1
  154. package/src/lib/layout/accordion/tng-accordion.d.ts +9 -0
  155. package/src/lib/layout/accordion/tng-accordion.d.ts.map +1 -1
  156. package/src/lib/layout/accordion/tng-accordion.js +143 -155
  157. package/src/lib/layout/accordion/tng-accordion.js.map +1 -1
  158. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts +3 -0
  159. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts.map +1 -1
  160. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js +16 -14
  161. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js.map +1 -1
  162. package/src/lib/layout/card/tng-card.d.ts +21 -0
  163. package/src/lib/layout/card/tng-card.d.ts.map +1 -1
  164. package/src/lib/layout/card/tng-card.js +151 -131
  165. package/src/lib/layout/card/tng-card.js.map +1 -1
  166. package/src/lib/layout/collapsible/tng-collapsible.d.ts +7 -0
  167. package/src/lib/layout/collapsible/tng-collapsible.d.ts.map +1 -1
  168. package/src/lib/layout/collapsible/tng-collapsible.js +82 -86
  169. package/src/lib/layout/collapsible/tng-collapsible.js.map +1 -1
  170. package/src/lib/layout/drawer/tng-drawer.d.ts +13 -0
  171. package/src/lib/layout/drawer/tng-drawer.d.ts.map +1 -1
  172. package/src/lib/layout/drawer/tng-drawer.js +217 -226
  173. package/src/lib/layout/drawer/tng-drawer.js.map +1 -1
  174. package/src/lib/layout/grid/tng-grid.d.ts +3 -0
  175. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
  176. package/src/lib/layout/grid/tng-grid.js +16 -14
  177. package/src/lib/layout/grid/tng-grid.js.map +1 -1
  178. package/src/lib/layout/separator/tng-separator.d.ts +3 -0
  179. package/src/lib/layout/separator/tng-separator.d.ts.map +1 -1
  180. package/src/lib/layout/separator/tng-separator.js +30 -30
  181. package/src/lib/layout/separator/tng-separator.js.map +1 -1
  182. package/src/lib/layout/stepper/tng-stepper.d.ts +3 -0
  183. package/src/lib/layout/stepper/tng-stepper.d.ts.map +1 -1
  184. package/src/lib/layout/stepper/tng-stepper.js +16 -14
  185. package/src/lib/layout/stepper/tng-stepper.js.map +1 -1
  186. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts +3 -0
  187. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
  188. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +54 -11
  189. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
  190. package/src/lib/layout/tree/tng-tree-group.d.ts +3 -0
  191. package/src/lib/layout/tree/tng-tree-group.d.ts.map +1 -1
  192. package/src/lib/layout/tree/tng-tree-group.js +19 -17
  193. package/src/lib/layout/tree/tng-tree-group.js.map +1 -1
  194. package/src/lib/layout/tree/tng-tree-indicator.d.ts +3 -0
  195. package/src/lib/layout/tree/tng-tree-indicator.d.ts.map +1 -1
  196. package/src/lib/layout/tree/tng-tree-indicator.js +22 -20
  197. package/src/lib/layout/tree/tng-tree-indicator.js.map +1 -1
  198. package/src/lib/layout/tree/tng-tree-item.d.ts +3 -0
  199. package/src/lib/layout/tree/tng-tree-item.d.ts.map +1 -1
  200. package/src/lib/layout/tree/tng-tree-item.js +47 -53
  201. package/src/lib/layout/tree/tng-tree-item.js.map +1 -1
  202. package/src/lib/layout/tree/tng-tree.d.ts +3 -0
  203. package/src/lib/layout/tree/tng-tree.d.ts.map +1 -1
  204. package/src/lib/layout/tree/tng-tree.js +39 -43
  205. package/src/lib/layout/tree/tng-tree.js.map +1 -1
  206. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts +11 -0
  207. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts.map +1 -1
  208. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js +79 -69
  209. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js.map +1 -1
  210. package/src/lib/navigation/context-menu/tng-context-menu.d.ts +5 -0
  211. package/src/lib/navigation/context-menu/tng-context-menu.d.ts.map +1 -1
  212. package/src/lib/navigation/context-menu/tng-context-menu.js +44 -42
  213. package/src/lib/navigation/context-menu/tng-context-menu.js.map +1 -1
  214. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts +3 -0
  215. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts.map +1 -1
  216. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js +16 -14
  217. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js.map +1 -1
  218. package/src/lib/navigation/menu/tng-menu.d.ts +13 -0
  219. package/src/lib/navigation/menu/tng-menu.d.ts.map +1 -1
  220. package/src/lib/navigation/menu/tng-menu.js +184 -186
  221. package/src/lib/navigation/menu/tng-menu.js.map +1 -1
  222. package/src/lib/navigation/menubar/tng-menubar.d.ts +5 -0
  223. package/src/lib/navigation/menubar/tng-menubar.d.ts.map +1 -1
  224. package/src/lib/navigation/menubar/tng-menubar.js +72 -70
  225. package/src/lib/navigation/menubar/tng-menubar.js.map +1 -1
  226. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts +3 -0
  227. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts.map +1 -1
  228. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js +16 -14
  229. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js.map +1 -1
  230. package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -0
  231. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
  232. package/src/lib/navigation/tabs/tng-tabs.js +234 -258
  233. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
  234. package/src/lib/navigation/toolbar/tng-toolbar.d.ts +3 -0
  235. package/src/lib/navigation/toolbar/tng-toolbar.d.ts.map +1 -1
  236. package/src/lib/navigation/toolbar/tng-toolbar.js +16 -14
  237. package/src/lib/navigation/toolbar/tng-toolbar.js.map +1 -1
  238. package/src/lib/overlay/dialog/tng-dialog.d.ts +19 -0
  239. package/src/lib/overlay/dialog/tng-dialog.d.ts.map +1 -1
  240. package/src/lib/overlay/dialog/tng-dialog.js +249 -255
  241. package/src/lib/overlay/dialog/tng-dialog.js.map +1 -1
  242. package/src/lib/overlay/popover/tng-popover.d.ts +9 -0
  243. package/src/lib/overlay/popover/tng-popover.d.ts.map +1 -1
  244. package/src/lib/overlay/popover/tng-popover.js +152 -170
  245. package/src/lib/overlay/popover/tng-popover.js.map +1 -1
  246. package/src/lib/overlay/tooltip/tng-tooltip.d.ts +7 -0
  247. package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -1
  248. package/src/lib/overlay/tooltip/tng-tooltip.js +124 -130
  249. package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -1
  250. package/src/lib/utility/avatar/tng-avatar.d.ts +7 -0
  251. package/src/lib/utility/avatar/tng-avatar.d.ts.map +1 -1
  252. package/src/lib/utility/avatar/tng-avatar.js +46 -40
  253. package/src/lib/utility/avatar/tng-avatar.js.map +1 -1
  254. package/src/lib/utility/badge/tng-badge.d.ts +3 -0
  255. package/src/lib/utility/badge/tng-badge.d.ts.map +1 -1
  256. package/src/lib/utility/badge/tng-badge.js +26 -40
  257. package/src/lib/utility/badge/tng-badge.js.map +1 -1
  258. package/src/lib/utility/code-block/tng-code-block.d.ts +11 -0
  259. package/src/lib/utility/code-block/tng-code-block.d.ts.map +1 -1
  260. package/src/lib/utility/code-block/tng-code-block.js +76 -66
  261. package/src/lib/utility/code-block/tng-code-block.js.map +1 -1
  262. package/src/lib/utility/copy/tng-copy.d.ts +3 -0
  263. package/src/lib/utility/copy/tng-copy.d.ts.map +1 -1
  264. package/src/lib/utility/copy/tng-copy.js +44 -52
  265. package/src/lib/utility/copy/tng-copy.js.map +1 -1
  266. package/src/lib/utility/press/tng-press.d.ts +3 -0
  267. package/src/lib/utility/press/tng-press.d.ts.map +1 -1
  268. package/src/lib/utility/press/tng-press.js +55 -61
  269. package/src/lib/utility/press/tng-press.js.map +1 -1
  270. package/src/lib/utility/tag/tng-tag.d.ts +7 -0
  271. package/src/lib/utility/tag/tng-tag.d.ts.map +1 -1
  272. package/src/lib/utility/tag/tng-tag.js +94 -96
  273. package/src/lib/utility/tag/tng-tag.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tng-autocomplete.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.listbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { TNG_LISTBOX_FORCE_TYPEAHEAD, TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';\nimport { normalizeToSingle } from '../../internal/combobox';\nimport type { TngAutocomplete } from './tng-autocomplete';\nimport { TNG_AUTOCOMPLETE_LISTBOX } from './tng-autocomplete.listbox.tokens';\nimport { TngAutocompleteListboxApi } from './tng-autocomplete.listbox.types';\nimport { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';\n\nconst createListboxId = createTngIdFactory('tng-autocomplete-listbox');\n\n@Directive({\n selector: '[tngAutocompleteListbox]',\n standalone: true,\n providers: [\n { provide: TNG_AUTOCOMPLETE_LISTBOX, useExisting: TngAutocompleteListbox },\n { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false }\n ],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngAutocompleteListbox<T = unknown> implements TngAutocompleteListboxApi {\n private readonly autocomplete = inject<TngAutocomplete<T>>(TNG_AUTOCOMPLETE);\n private readonly destroyRef = inject(DestroyRef);\n private readonly listbox = inject(TngListboxDirective<T>, { self: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-listbox' as const;\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.autocomplete.setListboxId(this.id);\n this.autocomplete.setListboxApi(this);\n\n effect(() => {\n const v = this.autocomplete.value();\n if (this.autocomplete.open()) return;\n\n if (this.autocomplete._createJustEmitted) {\n this.autocomplete._createJustEmitted = false;\n return;\n }\n\n const current = untracked(this.listbox.value);\n const currentSingle = normalizeToSingle(current);\n if (Object.is(currentSingle, v)) return;\n this.listbox.value.set(v as T | null);\n });\n\n this.destroyRef.onDestroy(() => {\n this.autocomplete.setListboxId(null);\n this.autocomplete.setListboxApi(null);\n });\n }\n\n getHostId(): string | null {\n return this.id ?? null;\n }\n\n getActiveId(): string | null {\n return this.listbox.getActiveId();\n }\n\n ensureActive(pref?: 'first' | 'last'): void {\n this.listbox.ensureActive(pref);\n }\n\n handleKey(key: string, shiftKey?: boolean): boolean {\n return this.listbox.handleKeyFromCombobox(key, shiftKey);\n }\n\n commitActive(): void {\n const value = this.listbox.getActiveValue();\n if (value === undefined) return;\n this.autocomplete.selectValue(value as T);\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.autocomplete.disabled()) return;\n\n const next = normalizeToSingle(value);\n if (Object.is(next, this.autocomplete.value())) {\n if (this.autocomplete.open() && next !== null) {\n this.autocomplete.selectValue(next as T);\n }\n return;\n }\n\n if (!this.autocomplete.open()) {\n this.autocomplete.value.set(next as T | null);\n return;\n }\n\n if (next === null) {\n // When overlay is open, null usually means the previous selection dropped out of\n // filtered options (user is typing to filter). Preserve value and stay open.\n return;\n }\n\n this.autocomplete.selectValue(next);\n }\n}\n\n@Directive({\n selector: '[tngAutocompleteOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngAutocompleteOption<T> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-option' as const;\n}\n"]}
1
+ {"version":3,"file":"tng-autocomplete.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.listbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;;;AAE7D,MAAM,eAAe,GAAG,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;AAiBvE,MAAM,OAAO,sBAAsB;IAChB,YAAY,GAAG,MAAM,CAAqB,gBAAgB,CAAC,CAAC;IAC5D,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,OAAO,GAAG,MAAM,CAAC,CAAA,mBAAsB,CAAA,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAGvD,QAAQ,GAAG,sBAA+B,CAAC;IAG3C,EAAE,GAAG,eAAe,EAAE,CAAC;IAE1C;QACE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;gBAAE,OAAO;YAErC,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;gBAAE,OAAO;YACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAa,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,IAAuB;QAClC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,QAAkB;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAU,CAAC,CAAC;IAC5C,CAAC;IAGS,oBAAoB,CAAC,KAA8B;QAC3D,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAAE,OAAO;QAEzC,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAS,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAgB,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,iFAAiF;YACjF,6EAA6E;YAC7E,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;uGAlFU,sBAAsB;2FAAtB,sBAAsB,wNAZtB;YACT,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,sBAAsB,EAAE;YAC1E,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE;SAC1D;;2FASU,sBAAsB;kBAflC,SAAS;mBAAC;oBACT,QAAQ,EAAE,0BAA0B;oBACpC,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,wBAAwB,EAAE;wBAC1E,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE;qBAC1D;oBACD,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,mBAAmB;4BAC9B,MAAM,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;4BACjE,OAAO,EAAE,CAAC,aAAa,CAAC;yBACzB;qBACF;iBACF;;sBAME,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,SAAS;;sBAkDrB,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;AAqCzC,MAAM,OAAO,qBAAqB;IAEb,QAAQ,GAAG,qBAA8B,CAAC;uGAFlD,qBAAqB;2FAArB,qBAAqB;;2FAArB,qBAAqB;kBAVjC,SAAS;mBAAC;oBACT,QAAQ,EAAE,yBAAyB;oBACnC,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,kBAAkB;4BAC7B,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;yBACjC;qBACF;iBACF;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { TNG_LISTBOX_FORCE_TYPEAHEAD, TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';\nimport { normalizeToSingle } from '../../internal/combobox';\nimport type { TngAutocomplete } from './tng-autocomplete';\nimport { TNG_AUTOCOMPLETE_LISTBOX } from './tng-autocomplete.listbox.tokens';\nimport { TngAutocompleteListboxApi } from './tng-autocomplete.listbox.types';\nimport { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';\n\nconst createListboxId = createTngIdFactory('tng-autocomplete-listbox');\n\n@Directive({\n selector: '[tngAutocompleteListbox]',\n standalone: true,\n providers: [\n { provide: TNG_AUTOCOMPLETE_LISTBOX, useExisting: TngAutocompleteListbox },\n { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false }\n ],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngAutocompleteListbox<T = unknown> implements TngAutocompleteListboxApi {\n private readonly autocomplete = inject<TngAutocomplete<T>>(TNG_AUTOCOMPLETE);\n private readonly destroyRef = inject(DestroyRef);\n private readonly listbox = inject(TngListboxDirective<T>, { self: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-listbox' as const;\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.autocomplete.setListboxId(this.id);\n this.autocomplete.setListboxApi(this);\n\n effect(() => {\n const v = this.autocomplete.value();\n if (this.autocomplete.open()) return;\n\n if (this.autocomplete._createJustEmitted) {\n this.autocomplete._createJustEmitted = false;\n return;\n }\n\n const current = untracked(this.listbox.value);\n const currentSingle = normalizeToSingle(current);\n if (Object.is(currentSingle, v)) return;\n this.listbox.value.set(v as T | null);\n });\n\n this.destroyRef.onDestroy(() => {\n this.autocomplete.setListboxId(null);\n this.autocomplete.setListboxApi(null);\n });\n }\n\n getHostId(): string | null {\n return this.id ?? null;\n }\n\n getActiveId(): string | null {\n return this.listbox.getActiveId();\n }\n\n ensureActive(pref?: 'first' | 'last'): void {\n this.listbox.ensureActive(pref);\n }\n\n handleKey(key: string, shiftKey?: boolean): boolean {\n return this.listbox.handleKeyFromCombobox(key, shiftKey);\n }\n\n commitActive(): void {\n const value = this.listbox.getActiveValue();\n if (value === undefined) return;\n this.autocomplete.selectValue(value as T);\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.autocomplete.disabled()) return;\n\n const next = normalizeToSingle(value);\n if (Object.is(next, this.autocomplete.value())) {\n if (this.autocomplete.open() && next !== null) {\n this.autocomplete.selectValue(next as T);\n }\n return;\n }\n\n if (!this.autocomplete.open()) {\n this.autocomplete.value.set(next as T | null);\n return;\n }\n\n if (next === null) {\n // When overlay is open, null usually means the previous selection dropped out of\n // filtered options (user is typing to filter). Preserve value and stay open.\n return;\n }\n\n this.autocomplete.selectValue(next);\n }\n}\n\n@Directive({\n selector: '[tngAutocompleteOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngAutocompleteOption<T> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-option' as const;\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  export declare class TngAutocompleteOverlay {
2
3
  private readonly autocomplete;
3
4
  private readonly elRef;
@@ -36,5 +37,7 @@ export declare class TngAutocompleteOverlay {
36
37
  private mountToBodyAndPosition;
37
38
  private restoreToPlaceholder;
38
39
  private restoreFocusOnClose;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngAutocompleteOverlay, never>;
41
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngAutocompleteOverlay, "[tngAutocompleteOverlay]", ["tngAutocompleteOverlay"], { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "collision": { "alias": "collision"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
39
42
  }
40
43
  //# sourceMappingURL=tng-autocomplete.overlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-autocomplete.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.overlay.ts"],"names":[],"mappings":"AAgCA,qBAKa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,wBAAwB,CAA6B;IAE7D,QAAQ,CAAC,SAAS;;;oBAAqD;IACvE,QAAQ,CAAC,MAAM;;;oBAAkD;IACjE,QAAQ,CAAC,SAAS;;;;oBAA4D;IAE9E,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAqB;IAG3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,sBAAsB,CAAU;IAG9D,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;;IAsBD,uFAAuF;IACvF,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,sBAAsB;IAmC9B,OAAO,CAAC,oBAAoB;IAkC5B,OAAO,CAAC,mBAAmB;CAkB5B"}
1
+ {"version":3,"file":"tng-autocomplete.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.overlay.ts"],"names":[],"mappings":";AAgCA,qBAKa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,wBAAwB,CAA6B;IAE7D,QAAQ,CAAC,SAAS;;;oBAAqD;IACvE,QAAQ,CAAC,MAAM;;;oBAAkD;IACjE,QAAQ,CAAC,SAAS;;;;oBAA4D;IAE9E,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAqB;IAG3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,sBAAsB,CAAU;IAG9D,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;;IAsBD,uFAAuF;IACvF,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,sBAAsB;IAmC9B,OAAO,CAAC,oBAAoB;IAkC5B,OAAO,CAAC,mBAAmB;yCAzMhB,sBAAsB;2CAAtB,sBAAsB;CA2NlC"}
@@ -1,7 +1,7 @@
1
- import { __decorate } from "tslib";
2
1
  import { DestroyRef, Directive, ElementRef, HostBinding, inject, input, effect, } from '@angular/core';
3
2
  import { computeOverlayPosition } from '@tailng-ui/cdk';
4
3
  import { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';
4
+ import * as i0 from "@angular/core";
5
5
  function rectFromClientRect(r) {
6
6
  return { left: r.left, top: r.top, width: r.width, height: r.height };
7
7
  }
@@ -11,7 +11,7 @@ function viewportRect() {
11
11
  function isInside(target, container) {
12
12
  return !!target && target instanceof Node && container.contains(target);
13
13
  }
14
- let TngAutocompleteOverlay = class TngAutocompleteOverlay {
14
+ export class TngAutocompleteOverlay {
15
15
  autocomplete = inject(TNG_AUTOCOMPLETE);
16
16
  elRef = inject((ElementRef));
17
17
  destroyRef = inject(DestroyRef);
@@ -20,9 +20,9 @@ let TngAutocompleteOverlay = class TngAutocompleteOverlay {
20
20
  removeScrollListener = null;
21
21
  resizeObserver = null;
22
22
  removeDocPointerListener = null;
23
- placement = input(undefined);
24
- offset = input(undefined);
25
- collision = input(undefined);
23
+ placement = input(undefined, ...(ngDevMode ? [{ debugName: "placement" }] : []));
24
+ offset = input(undefined, ...(ngDevMode ? [{ debugName: "offset" }] : []));
25
+ collision = input(undefined, ...(ngDevMode ? [{ debugName: "collision" }] : []));
26
26
  placeholder = null;
27
27
  originalParent = null;
28
28
  dataSlot = 'autocomplete-overlay';
@@ -218,19 +218,21 @@ let TngAutocompleteOverlay = class TngAutocompleteOverlay {
218
218
  queueMicrotask(() => { this.autocomplete._restoringFocus = false; });
219
219
  }
220
220
  }
221
- };
222
- __decorate([
223
- HostBinding('attr.data-slot')
224
- ], TngAutocompleteOverlay.prototype, "dataSlot", void 0);
225
- __decorate([
226
- HostBinding('attr.hidden')
227
- ], TngAutocompleteOverlay.prototype, "hidden", null);
228
- TngAutocompleteOverlay = __decorate([
229
- Directive({
230
- selector: '[tngAutocompleteOverlay]',
231
- exportAs: 'tngAutocompleteOverlay',
232
- standalone: true,
233
- })
234
- ], TngAutocompleteOverlay);
235
- export { TngAutocompleteOverlay };
221
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteOverlay, deps: [], target: i0.ɵɵFactoryTarget.Directive });
222
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngAutocompleteOverlay, isStandalone: true, selector: "[tngAutocompleteOverlay]", inputs: { placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, collision: { classPropertyName: "collision", publicName: "collision", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-slot": "this.dataSlot", "attr.hidden": "this.hidden" } }, exportAs: ["tngAutocompleteOverlay"], ngImport: i0 });
223
+ }
224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteOverlay, decorators: [{
225
+ type: Directive,
226
+ args: [{
227
+ selector: '[tngAutocompleteOverlay]',
228
+ exportAs: 'tngAutocompleteOverlay',
229
+ standalone: true,
230
+ }]
231
+ }], ctorParameters: () => [], propDecorators: { placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], collision: [{ type: i0.Input, args: [{ isSignal: true, alias: "collision", required: false }] }], dataSlot: [{
232
+ type: HostBinding,
233
+ args: ['attr.data-slot']
234
+ }], hidden: [{
235
+ type: HostBinding,
236
+ args: ['attr.hidden']
237
+ }] } });
236
238
  //# sourceMappingURL=tng-autocomplete.overlay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-autocomplete.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n effect,\n} from '@angular/core';\nimport type {\n TngOverlayCollisionOptions,\n TngOverlayOffset,\n TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport { computeOverlayPosition } from '@tailng-ui/cdk';\nimport { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';\nimport type { TngAutocomplete } from './tng-autocomplete';\n\ntype MaybeRect = Readonly<{ left: number; top: number; width: number; height: number }>;\n\nfunction rectFromClientRect(r: DOMRect | ClientRect): MaybeRect {\n return { left: r.left, top: r.top, width: r.width, height: r.height };\n}\n\nfunction viewportRect(): MaybeRect {\n return { left: 0, top: 0, width: window.innerWidth || 1024, height: window.innerHeight || 768 };\n}\n\nfunction isInside(target: EventTarget | null, container: HTMLElement): boolean {\n return !!target && target instanceof Node && container.contains(target);\n}\n\n@Directive({\n selector: '[tngAutocompleteOverlay]',\n exportAs: 'tngAutocompleteOverlay',\n standalone: true,\n})\nexport class TngAutocompleteOverlay {\n private readonly autocomplete = inject<TngAutocomplete>(TNG_AUTOCOMPLETE);\n private readonly elRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private lastFocusedBeforeOpen: HTMLElement | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private removeDocPointerListener: (() => void) | null = null;\n\n readonly placement = input<TngOverlayPlacement | undefined>(undefined);\n readonly offset = input<TngOverlayOffset | undefined>(undefined);\n readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined);\n\n private placeholder: Comment | null = null;\n private originalParent: Node | null = null;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-overlay' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.autocomplete.open() ? null : '';\n }\n\n constructor() {\n this.placeholder = document.createComment('tng-autocomplete-overlay-anchor');\n const hostEl = this.elRef.nativeElement;\n this.originalParent = hostEl.parentNode;\n this.originalParent?.insertBefore(this.placeholder, hostEl);\n\n effect(() => {\n const open = this.autocomplete.open();\n if (open) this.mountToBodyAndPosition();\n else this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n this.teardownOutsidePointer();\n this.restoreToPlaceholder(true);\n this.placeholder = null;\n this.originalParent = null;\n });\n }\n\n /** Anchor for overlay: container (trigger+icon) if present, else the input trigger. */\n private findAnchorEl(): HTMLElement | null {\n const root = this.autocomplete.hostElement;\n const container = root.querySelector('[data-slot=\"autocomplete-trigger-container\"]') as HTMLElement | null;\n if (container) return container;\n return root.querySelector('[data-slot=\"autocomplete-trigger\"]') as HTMLElement | null;\n }\n\n private findTriggerEl(): HTMLElement | null {\n const root = this.autocomplete.hostElement;\n return root.querySelector('[data-slot=\"autocomplete-trigger\"]') as HTMLElement | null;\n }\n\n private reposition(): void {\n if (!this.autocomplete.open()) return;\n const panel = this.elRef.nativeElement;\n const anchorEl = this.findAnchorEl();\n if (!anchorEl) return;\n const anchor = rectFromClientRect(anchorEl.getBoundingClientRect());\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n }\n\n private setupRepositionListeners(): void {\n let rafId: number | null = null;\n const schedule = () => {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n this.reposition();\n });\n };\n const onResize = () => schedule();\n const onScroll = () => schedule();\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n this.removeResizeListener = () => window.removeEventListener('resize', onResize);\n this.removeScrollListener = () => window.removeEventListener('scroll', onScroll, true);\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => schedule());\n const anchorEl = this.findAnchorEl();\n if (anchorEl) this.resizeObserver.observe(anchorEl);\n this.resizeObserver.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private setupOutsidePointer(): void {\n if (this.removeDocPointerListener) return;\n const onPointerDown = (ev: PointerEvent) => {\n if (!this.autocomplete.open()) return;\n const panel = this.elRef.nativeElement;\n const anchorEl = this.findAnchorEl();\n if (isInside(ev.target, panel)) return;\n if (anchorEl && isInside(ev.target, anchorEl)) return;\n if (ev.target && (ev.target as Element).closest?.('[data-slot=\"autocomplete-option\"]')) return;\n this.autocomplete.close();\n };\n document.addEventListener('pointerdown', onPointerDown, true);\n this.removeDocPointerListener = () =>\n document.removeEventListener('pointerdown', onPointerDown, true);\n }\n\n private teardownOutsidePointer(): void {\n this.removeDocPointerListener?.();\n this.removeDocPointerListener = null;\n }\n\n private mountToBodyAndPosition(): void {\n this.lastFocusedBeforeOpen = document.activeElement as HTMLElement | null;\n this.setupRepositionListeners();\n const panel = this.elRef.nativeElement;\n if (panel.parentNode !== document.body) {\n document.body.appendChild(panel);\n }\n panel.style.position = 'fixed';\n panel.style.left = '0px';\n panel.style.top = '0px';\n panel.style.zIndex = '1000';\n\n queueMicrotask(() => {\n if (!this.autocomplete.open()) return;\n const anchorEl = this.findAnchorEl();\n if (!anchorEl) return;\n const anchor = rectFromClientRect(anchorEl.getBoundingClientRect());\n panel.style.minWidth = `${anchor.width}px`;\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n });\n\n this.setupOutsidePointer();\n }\n\n private restoreToPlaceholder(force = false): void {\n const panel = this.elRef.nativeElement;\n if (!force && panel.parentNode !== document.body) {\n this.teardownOutsidePointer();\n return;\n }\n if (this.placeholder?.parentNode) {\n this.placeholder.parentNode.insertBefore(panel, this.placeholder);\n } else if (this.originalParent) {\n this.originalParent.appendChild(panel);\n }\n this.teardownRepositionListeners();\n\n if (\n this.lastFocusedBeforeOpen &&\n document.contains(this.lastFocusedBeforeOpen)\n ) {\n const active = document.activeElement as HTMLElement | null;\n if (!active || panel.contains(active)) {\n this.autocomplete._restoringFocus = true;\n this.lastFocusedBeforeOpen.focus();\n queueMicrotask(() => { this.autocomplete._restoringFocus = false; });\n }\n }\n this.restoreFocusOnClose();\n\n panel.style.position = '';\n panel.style.left = '';\n panel.style.top = '';\n panel.style.zIndex = '';\n panel.style.minWidth = '';\n this.teardownOutsidePointer();\n }\n\n private restoreFocusOnClose(): void {\n const panel = this.elRef.nativeElement;\n const active = document.activeElement as HTMLElement | null;\n const trigger = this.findTriggerEl();\n if (!trigger) return;\n\n if (active && panel.contains(active)) {\n this.autocomplete._restoringFocus = true;\n trigger.focus();\n queueMicrotask(() => { this.autocomplete._restoringFocus = false; });\n return;\n }\n if (document.activeElement === document.body) {\n this.autocomplete._restoringFocus = true;\n trigger.focus();\n queueMicrotask(() => { this.autocomplete._restoringFocus = false; });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"tng-autocomplete.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n effect,\n} from '@angular/core';\nimport type {\n TngOverlayCollisionOptions,\n TngOverlayOffset,\n TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport { computeOverlayPosition } from '@tailng-ui/cdk';\nimport { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';\nimport type { TngAutocomplete } from './tng-autocomplete';\n\ntype MaybeRect = Readonly<{ left: number; top: number; width: number; height: number }>;\n\nfunction rectFromClientRect(r: DOMRect | ClientRect): MaybeRect {\n return { left: r.left, top: r.top, width: r.width, height: r.height };\n}\n\nfunction viewportRect(): MaybeRect {\n return { left: 0, top: 0, width: window.innerWidth || 1024, height: window.innerHeight || 768 };\n}\n\nfunction isInside(target: EventTarget | null, container: HTMLElement): boolean {\n return !!target && target instanceof Node && container.contains(target);\n}\n\n@Directive({\n selector: '[tngAutocompleteOverlay]',\n exportAs: 'tngAutocompleteOverlay',\n standalone: true,\n})\nexport class TngAutocompleteOverlay {\n private readonly autocomplete = inject<TngAutocomplete>(TNG_AUTOCOMPLETE);\n private readonly elRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private lastFocusedBeforeOpen: HTMLElement | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private removeDocPointerListener: (() => void) | null = null;\n\n readonly placement = input<TngOverlayPlacement | undefined>(undefined);\n readonly offset = input<TngOverlayOffset | undefined>(undefined);\n readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined);\n\n private placeholder: Comment | null = null;\n private originalParent: Node | null = null;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-overlay' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.autocomplete.open() ? null : '';\n }\n\n constructor() {\n this.placeholder = document.createComment('tng-autocomplete-overlay-anchor');\n const hostEl = this.elRef.nativeElement;\n this.originalParent = hostEl.parentNode;\n this.originalParent?.insertBefore(this.placeholder, hostEl);\n\n effect(() => {\n const open = this.autocomplete.open();\n if (open) this.mountToBodyAndPosition();\n else this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n this.teardownOutsidePointer();\n this.restoreToPlaceholder(true);\n this.placeholder = null;\n this.originalParent = null;\n });\n }\n\n /** Anchor for overlay: container (trigger+icon) if present, else the input trigger. */\n private findAnchorEl(): HTMLElement | null {\n const root = this.autocomplete.hostElement;\n const container = root.querySelector('[data-slot=\"autocomplete-trigger-container\"]') as HTMLElement | null;\n if (container) return container;\n return root.querySelector('[data-slot=\"autocomplete-trigger\"]') as HTMLElement | null;\n }\n\n private findTriggerEl(): HTMLElement | null {\n const root = this.autocomplete.hostElement;\n return root.querySelector('[data-slot=\"autocomplete-trigger\"]') as HTMLElement | null;\n }\n\n private reposition(): void {\n if (!this.autocomplete.open()) return;\n const panel = this.elRef.nativeElement;\n const anchorEl = this.findAnchorEl();\n if (!anchorEl) return;\n const anchor = rectFromClientRect(anchorEl.getBoundingClientRect());\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n }\n\n private setupRepositionListeners(): void {\n let rafId: number | null = null;\n const schedule = () => {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n this.reposition();\n });\n };\n const onResize = () => schedule();\n const onScroll = () => schedule();\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n this.removeResizeListener = () => window.removeEventListener('resize', onResize);\n this.removeScrollListener = () => window.removeEventListener('scroll', onScroll, true);\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => schedule());\n const anchorEl = this.findAnchorEl();\n if (anchorEl) this.resizeObserver.observe(anchorEl);\n this.resizeObserver.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private setupOutsidePointer(): void {\n if (this.removeDocPointerListener) return;\n const onPointerDown = (ev: PointerEvent) => {\n if (!this.autocomplete.open()) return;\n const panel = this.elRef.nativeElement;\n const anchorEl = this.findAnchorEl();\n if (isInside(ev.target, panel)) return;\n if (anchorEl && isInside(ev.target, anchorEl)) return;\n if (ev.target && (ev.target as Element).closest?.('[data-slot=\"autocomplete-option\"]')) return;\n this.autocomplete.close();\n };\n document.addEventListener('pointerdown', onPointerDown, true);\n this.removeDocPointerListener = () =>\n document.removeEventListener('pointerdown', onPointerDown, true);\n }\n\n private teardownOutsidePointer(): void {\n this.removeDocPointerListener?.();\n this.removeDocPointerListener = null;\n }\n\n private mountToBodyAndPosition(): void {\n this.lastFocusedBeforeOpen = document.activeElement as HTMLElement | null;\n this.setupRepositionListeners();\n const panel = this.elRef.nativeElement;\n if (panel.parentNode !== document.body) {\n document.body.appendChild(panel);\n }\n panel.style.position = 'fixed';\n panel.style.left = '0px';\n panel.style.top = '0px';\n panel.style.zIndex = '1000';\n\n queueMicrotask(() => {\n if (!this.autocomplete.open()) return;\n const anchorEl = this.findAnchorEl();\n if (!anchorEl) return;\n const anchor = rectFromClientRect(anchorEl.getBoundingClientRect());\n panel.style.minWidth = `${anchor.width}px`;\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n });\n\n this.setupOutsidePointer();\n }\n\n private restoreToPlaceholder(force = false): void {\n const panel = this.elRef.nativeElement;\n if (!force && panel.parentNode !== document.body) {\n this.teardownOutsidePointer();\n return;\n }\n if (this.placeholder?.parentNode) {\n this.placeholder.parentNode.insertBefore(panel, this.placeholder);\n } else if (this.originalParent) {\n this.originalParent.appendChild(panel);\n }\n this.teardownRepositionListeners();\n\n if (\n this.lastFocusedBeforeOpen &&\n document.contains(this.lastFocusedBeforeOpen)\n ) {\n const active = document.activeElement as HTMLElement | null;\n if (!active || panel.contains(active)) {\n this.autocomplete._restoringFocus = true;\n this.lastFocusedBeforeOpen.focus();\n queueMicrotask(() => { this.autocomplete._restoringFocus = false; });\n }\n }\n this.restoreFocusOnClose();\n\n panel.style.position = '';\n panel.style.left = '';\n panel.style.top = '';\n panel.style.zIndex = '';\n panel.style.minWidth = '';\n this.teardownOutsidePointer();\n }\n\n private restoreFocusOnClose(): void {\n const panel = this.elRef.nativeElement;\n const active = document.activeElement as HTMLElement | null;\n const trigger = this.findTriggerEl();\n if (!trigger) return;\n\n if (active && panel.contains(active)) {\n this.autocomplete._restoringFocus = true;\n trigger.focus();\n queueMicrotask(() => { this.autocomplete._restoringFocus = false; });\n return;\n }\n if (document.activeElement === document.body) {\n this.autocomplete._restoringFocus = true;\n trigger.focus();\n queueMicrotask(() => { this.autocomplete._restoringFocus = false; });\n }\n }\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  export declare class TngAutocompleteTrigger {
2
3
  private readonly autocomplete;
3
4
  private readonly el;
@@ -15,16 +16,22 @@ export declare class TngAutocompleteTrigger {
15
16
  protected onFocus(): void;
16
17
  protected onKeydown(event: KeyboardEvent): void;
17
18
  protected onInput(event: Event): void;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngAutocompleteTrigger, never>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngAutocompleteTrigger, "[tngAutocompleteTrigger]", ["tngAutocompleteTrigger"], {}, {}, never, never, true, never>;
18
21
  }
19
22
  /** Wrapper for trigger + optional icon. When present, overlay uses this for width/position (full control width). */
20
23
  export declare class TngAutocompleteTriggerContainer {
21
24
  protected readonly dataSlot: "autocomplete-trigger-container";
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngAutocompleteTriggerContainer, never>;
26
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngAutocompleteTriggerContainer, "[tngAutocompleteTriggerContainer]", ["tngAutocompleteTriggerContainer"], {}, {}, never, never, true, never>;
22
27
  }
23
28
  /** Slot for an icon (e.g. chevron) beside the trigger. Consumer provides markup. Matches Select's tngSelectIcon. */
24
29
  export declare class TngAutocompleteIcon {
25
30
  private readonly autocomplete;
26
31
  protected readonly dataSlot: "autocomplete-icon";
27
32
  protected onClick(): void;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngAutocompleteIcon, never>;
34
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngAutocompleteIcon, "[tngAutocompleteIcon]", ["tngAutocompleteIcon"], {}, {}, never, never, true, never>;
28
35
  }
29
36
  export declare class TngAutocompleteContent {
30
37
  private readonly autocomplete;
@@ -34,5 +41,7 @@ export declare class TngAutocompleteContent {
34
41
  protected get hidden(): '' | null;
35
42
  protected get ariaBusy(): 'true' | null;
36
43
  constructor();
44
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngAutocompleteContent, never>;
45
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngAutocompleteContent, "[tngAutocompleteContent]", ["tngAutocompleteContent"], {}, {}, never, never, true, never>;
37
46
  }
38
47
  //# sourceMappingURL=tng-autocomplete.parts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-autocomplete.parts.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.parts.ts"],"names":[],"mappings":"AAUA,qBAKa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;IAEtD,OAAO,KAAK,OAAO,GAElB;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,sBAAsB,CAAU;IAG9D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAG9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IAGjD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,OAAO,CAE7C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAG1C;IAGD,SAAS,KAAK,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAIlD;IAGD,SAAS,KAAK,WAAW,IAAI,MAAM,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,cAAc,IAAI,MAAM,GAAG,IAAI,CAI5C;IAGD,SAAS,KAAK,eAAe,IAAI,MAAM,GAAG,IAAI,CAS7C;IAGD,SAAS,CAAC,OAAO,IAAI,IAAI;IAmBzB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAsD/C,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAKtC;AAED,oHAAoH;AACpH,qBAKa,+BAA+B;IAE1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,gCAAgC,CAAU;CACzE;AAED,oHAAoH;AACpH,qBAKa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,mBAAmB,CAAU;IAG3D,SAAS,CAAC,OAAO,IAAI,IAAI;CAO1B;AAID,qBAKa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAGjD,QAAQ,CAAC,EAAE,SAAqB;IAGhC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,sBAAsB,CAAU;IAG9D,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;;CAUF"}
1
+ {"version":3,"file":"tng-autocomplete.parts.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.parts.ts"],"names":[],"mappings":";AAUA,qBAKa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;IAEtD,OAAO,KAAK,OAAO,GAElB;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,sBAAsB,CAAU;IAG9D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAG9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IAGjD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,OAAO,CAE7C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAG1C;IAGD,SAAS,KAAK,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAIlD;IAGD,SAAS,KAAK,WAAW,IAAI,MAAM,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,cAAc,IAAI,MAAM,GAAG,IAAI,CAI5C;IAGD,SAAS,KAAK,eAAe,IAAI,MAAM,GAAG,IAAI,CAS7C;IAGD,SAAS,CAAC,OAAO,IAAI,IAAI;IAmBzB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAsD/C,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;yCA1I1B,sBAAsB;2CAAtB,sBAAsB;CA+IlC;AAED,oHAAoH;AACpH,qBAKa,+BAA+B;IAE1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,gCAAgC,CAAU;yCAF7D,+BAA+B;2CAA/B,+BAA+B;CAG3C;AAED,oHAAoH;AACpH,qBAKa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,mBAAmB,CAAU;IAG3D,SAAS,CAAC,OAAO,IAAI,IAAI;yCAPd,mBAAmB;2CAAnB,mBAAmB;CAc/B;AAID,qBAKa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAGjD,QAAQ,CAAC,EAAE,SAAqB;IAGhC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,sBAAsB,CAAU;IAG9D,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;;yCAlBU,sBAAsB;2CAAtB,sBAAsB;CA4BlC"}
@@ -1,11 +1,11 @@
1
- import { __decorate } from "tslib";
2
1
  import { DestroyRef, Directive, ElementRef, HostBinding, HostListener, inject } from '@angular/core';
3
2
  import { createTngIdFactory } from '@tailng-ui/cdk';
4
3
  import { ensureActiveAndSync, handleComboboxKeydown } from '../../internal/combobox';
5
4
  import { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';
5
+ import * as i0 from "@angular/core";
6
6
  /** Keys that open autocomplete when closed. ArrowDown/Up + Backspace/Delete (user editing clears selection). */
7
7
  const AUTOCOMPLETE_KEYS_TO_OPEN = ['ArrowDown', 'ArrowUp', 'Backspace', 'Delete'];
8
- let TngAutocompleteTrigger = class TngAutocompleteTrigger {
8
+ export class TngAutocompleteTrigger {
9
9
  autocomplete = inject(TNG_AUTOCOMPLETE);
10
10
  el = inject((ElementRef));
11
11
  get listbox() {
@@ -120,71 +120,75 @@ let TngAutocompleteTrigger = class TngAutocompleteTrigger {
120
120
  this.autocomplete.query.set(value);
121
121
  this.autocomplete.queryChange.emit(value);
122
122
  }
123
- };
124
- __decorate([
125
- HostBinding('attr.data-slot')
126
- ], TngAutocompleteTrigger.prototype, "dataSlot", void 0);
127
- __decorate([
128
- HostBinding('attr.role')
129
- ], TngAutocompleteTrigger.prototype, "role", void 0);
130
- __decorate([
131
- HostBinding('attr.aria-haspopup')
132
- ], TngAutocompleteTrigger.prototype, "haspopup", void 0);
133
- __decorate([
134
- HostBinding('attr.aria-expanded')
135
- ], TngAutocompleteTrigger.prototype, "ariaExpanded", null);
136
- __decorate([
137
- HostBinding('attr.aria-disabled')
138
- ], TngAutocompleteTrigger.prototype, "ariaDisabled", null);
139
- __decorate([
140
- HostBinding('attr.aria-controls')
141
- ], TngAutocompleteTrigger.prototype, "ariaControls", null);
142
- __decorate([
143
- HostBinding('attr.aria-activedescendant')
144
- ], TngAutocompleteTrigger.prototype, "ariaActiveDescendant", null);
145
- __decorate([
146
- HostBinding('attr.aria-invalid')
147
- ], TngAutocompleteTrigger.prototype, "ariaInvalid", null);
148
- __decorate([
149
- HostBinding('attr.aria-labelledby')
150
- ], TngAutocompleteTrigger.prototype, "ariaLabelledby", null);
151
- __decorate([
152
- HostBinding('attr.aria-describedby')
153
- ], TngAutocompleteTrigger.prototype, "ariaDescribedby", null);
154
- __decorate([
155
- HostListener('focus')
156
- ], TngAutocompleteTrigger.prototype, "onFocus", null);
157
- __decorate([
158
- HostListener('keydown', ['$event'])
159
- ], TngAutocompleteTrigger.prototype, "onKeydown", null);
160
- __decorate([
161
- HostListener('input', ['$event'])
162
- ], TngAutocompleteTrigger.prototype, "onInput", null);
163
- TngAutocompleteTrigger = __decorate([
164
- Directive({
165
- selector: '[tngAutocompleteTrigger]',
166
- exportAs: 'tngAutocompleteTrigger',
167
- standalone: true,
168
- })
169
- ], TngAutocompleteTrigger);
170
- export { TngAutocompleteTrigger };
123
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
124
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngAutocompleteTrigger, isStandalone: true, selector: "[tngAutocompleteTrigger]", host: { listeners: { "focus": "onFocus()", "keydown": "onKeydown($event)", "input": "onInput($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.role": "this.role", "attr.aria-haspopup": "this.haspopup", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-controls": "this.ariaControls", "attr.aria-activedescendant": "this.ariaActiveDescendant", "attr.aria-invalid": "this.ariaInvalid", "attr.aria-labelledby": "this.ariaLabelledby", "attr.aria-describedby": "this.ariaDescribedby" } }, exportAs: ["tngAutocompleteTrigger"], ngImport: i0 });
125
+ }
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteTrigger, decorators: [{
127
+ type: Directive,
128
+ args: [{
129
+ selector: '[tngAutocompleteTrigger]',
130
+ exportAs: 'tngAutocompleteTrigger',
131
+ standalone: true,
132
+ }]
133
+ }], propDecorators: { dataSlot: [{
134
+ type: HostBinding,
135
+ args: ['attr.data-slot']
136
+ }], role: [{
137
+ type: HostBinding,
138
+ args: ['attr.role']
139
+ }], haspopup: [{
140
+ type: HostBinding,
141
+ args: ['attr.aria-haspopup']
142
+ }], ariaExpanded: [{
143
+ type: HostBinding,
144
+ args: ['attr.aria-expanded']
145
+ }], ariaDisabled: [{
146
+ type: HostBinding,
147
+ args: ['attr.aria-disabled']
148
+ }], ariaControls: [{
149
+ type: HostBinding,
150
+ args: ['attr.aria-controls']
151
+ }], ariaActiveDescendant: [{
152
+ type: HostBinding,
153
+ args: ['attr.aria-activedescendant']
154
+ }], ariaInvalid: [{
155
+ type: HostBinding,
156
+ args: ['attr.aria-invalid']
157
+ }], ariaLabelledby: [{
158
+ type: HostBinding,
159
+ args: ['attr.aria-labelledby']
160
+ }], ariaDescribedby: [{
161
+ type: HostBinding,
162
+ args: ['attr.aria-describedby']
163
+ }], onFocus: [{
164
+ type: HostListener,
165
+ args: ['focus']
166
+ }], onKeydown: [{
167
+ type: HostListener,
168
+ args: ['keydown', ['$event']]
169
+ }], onInput: [{
170
+ type: HostListener,
171
+ args: ['input', ['$event']]
172
+ }] } });
171
173
  /** Wrapper for trigger + optional icon. When present, overlay uses this for width/position (full control width). */
172
- let TngAutocompleteTriggerContainer = class TngAutocompleteTriggerContainer {
174
+ export class TngAutocompleteTriggerContainer {
173
175
  dataSlot = 'autocomplete-trigger-container';
174
- };
175
- __decorate([
176
- HostBinding('attr.data-slot')
177
- ], TngAutocompleteTriggerContainer.prototype, "dataSlot", void 0);
178
- TngAutocompleteTriggerContainer = __decorate([
179
- Directive({
180
- selector: '[tngAutocompleteTriggerContainer]',
181
- exportAs: 'tngAutocompleteTriggerContainer',
182
- standalone: true,
183
- })
184
- ], TngAutocompleteTriggerContainer);
185
- export { TngAutocompleteTriggerContainer };
176
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteTriggerContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
177
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngAutocompleteTriggerContainer, isStandalone: true, selector: "[tngAutocompleteTriggerContainer]", host: { properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngAutocompleteTriggerContainer"], ngImport: i0 });
178
+ }
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteTriggerContainer, decorators: [{
180
+ type: Directive,
181
+ args: [{
182
+ selector: '[tngAutocompleteTriggerContainer]',
183
+ exportAs: 'tngAutocompleteTriggerContainer',
184
+ standalone: true,
185
+ }]
186
+ }], propDecorators: { dataSlot: [{
187
+ type: HostBinding,
188
+ args: ['attr.data-slot']
189
+ }] } });
186
190
  /** Slot for an icon (e.g. chevron) beside the trigger. Consumer provides markup. Matches Select's tngSelectIcon. */
187
- let TngAutocompleteIcon = class TngAutocompleteIcon {
191
+ export class TngAutocompleteIcon {
188
192
  autocomplete = inject(TNG_AUTOCOMPLETE);
189
193
  dataSlot = 'autocomplete-icon';
190
194
  onClick() {
@@ -193,23 +197,25 @@ let TngAutocompleteIcon = class TngAutocompleteIcon {
193
197
  const trigger = this.autocomplete.hostElement.querySelector('[data-slot="autocomplete-trigger"]');
194
198
  trigger?.focus();
195
199
  }
196
- };
197
- __decorate([
198
- HostBinding('attr.data-slot')
199
- ], TngAutocompleteIcon.prototype, "dataSlot", void 0);
200
- __decorate([
201
- HostListener('click')
202
- ], TngAutocompleteIcon.prototype, "onClick", null);
203
- TngAutocompleteIcon = __decorate([
204
- Directive({
205
- selector: '[tngAutocompleteIcon]',
206
- exportAs: 'tngAutocompleteIcon',
207
- standalone: true,
208
- })
209
- ], TngAutocompleteIcon);
210
- export { TngAutocompleteIcon };
200
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
201
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngAutocompleteIcon, isStandalone: true, selector: "[tngAutocompleteIcon]", host: { listeners: { "click": "onClick()" }, properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngAutocompleteIcon"], ngImport: i0 });
202
+ }
203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteIcon, decorators: [{
204
+ type: Directive,
205
+ args: [{
206
+ selector: '[tngAutocompleteIcon]',
207
+ exportAs: 'tngAutocompleteIcon',
208
+ standalone: true,
209
+ }]
210
+ }], propDecorators: { dataSlot: [{
211
+ type: HostBinding,
212
+ args: ['attr.data-slot']
213
+ }], onClick: [{
214
+ type: HostListener,
215
+ args: ['click']
216
+ }] } });
211
217
  const createContentId = createTngIdFactory('tng-autocomplete-content');
212
- let TngAutocompleteContent = class TngAutocompleteContent {
218
+ export class TngAutocompleteContent {
213
219
  autocomplete = inject(TNG_AUTOCOMPLETE);
214
220
  destroyRef = inject(DestroyRef);
215
221
  id = createContentId();
@@ -228,25 +234,27 @@ let TngAutocompleteContent = class TngAutocompleteContent {
228
234
  }
229
235
  });
230
236
  }
231
- };
232
- __decorate([
233
- HostBinding('attr.id')
234
- ], TngAutocompleteContent.prototype, "id", void 0);
235
- __decorate([
236
- HostBinding('attr.data-slot')
237
- ], TngAutocompleteContent.prototype, "dataSlot", void 0);
238
- __decorate([
239
- HostBinding('attr.hidden')
240
- ], TngAutocompleteContent.prototype, "hidden", null);
241
- __decorate([
242
- HostBinding('attr.aria-busy')
243
- ], TngAutocompleteContent.prototype, "ariaBusy", null);
244
- TngAutocompleteContent = __decorate([
245
- Directive({
246
- selector: '[tngAutocompleteContent]',
247
- exportAs: 'tngAutocompleteContent',
248
- standalone: true,
249
- })
250
- ], TngAutocompleteContent);
251
- export { TngAutocompleteContent };
237
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
238
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngAutocompleteContent, isStandalone: true, selector: "[tngAutocompleteContent]", host: { properties: { "attr.id": "this.id", "attr.data-slot": "this.dataSlot", "attr.hidden": "this.hidden", "attr.aria-busy": "this.ariaBusy" } }, exportAs: ["tngAutocompleteContent"], ngImport: i0 });
239
+ }
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngAutocompleteContent, decorators: [{
241
+ type: Directive,
242
+ args: [{
243
+ selector: '[tngAutocompleteContent]',
244
+ exportAs: 'tngAutocompleteContent',
245
+ standalone: true,
246
+ }]
247
+ }], ctorParameters: () => [], propDecorators: { id: [{
248
+ type: HostBinding,
249
+ args: ['attr.id']
250
+ }], dataSlot: [{
251
+ type: HostBinding,
252
+ args: ['attr.data-slot']
253
+ }], hidden: [{
254
+ type: HostBinding,
255
+ args: ['attr.hidden']
256
+ }], ariaBusy: [{
257
+ type: HostBinding,
258
+ args: ['attr.aria-busy']
259
+ }] } });
252
260
  //# sourceMappingURL=tng-autocomplete.parts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-autocomplete.parts.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.parts.ts"],"names":[],"mappings":"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","sourcesContent":["import { DestroyRef, Directive, ElementRef, HostBinding, HostListener, inject } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { ensureActiveAndSync, handleComboboxKeydown } from '../../internal/combobox';\nimport type { TngAutocomplete } from './tng-autocomplete';\nimport { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';\nimport type { TngAutocompleteListboxApi } from './tng-autocomplete.listbox.types';\n\n/** Keys that open autocomplete when closed. ArrowDown/Up + Backspace/Delete (user editing clears selection). */\nconst AUTOCOMPLETE_KEYS_TO_OPEN = ['ArrowDown', 'ArrowUp', 'Backspace', 'Delete'] as const;\n\n@Directive({\n selector: '[tngAutocompleteTrigger]',\n exportAs: 'tngAutocompleteTrigger',\n standalone: true,\n})\nexport class TngAutocompleteTrigger {\n private readonly autocomplete = inject<TngAutocomplete>(TNG_AUTOCOMPLETE);\n private readonly el = inject(ElementRef<HTMLElement>);\n\n private get listbox(): TngAutocompleteListboxApi | null {\n return this.autocomplete.getListboxApi();\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-trigger' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'combobox' as const;\n\n @HostBinding('attr.aria-haspopup')\n protected readonly haspopup = 'listbox' as const;\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpanded(): 'true' | 'false' {\n return this.autocomplete.open() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.autocomplete.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n if (!this.autocomplete.open()) return null;\n return this.autocomplete.getContentId() ?? this.autocomplete.getListboxId();\n }\n\n @HostBinding('attr.aria-activedescendant')\n protected get ariaActiveDescendant(): string | null {\n if (!this.autocomplete.open()) return null;\n if (this.listbox) return this.listbox.getActiveId();\n return this.autocomplete.getActiveDescendantId();\n }\n\n @HostBinding('attr.aria-invalid')\n protected get ariaInvalid(): 'true' | null {\n return this.autocomplete.invalid() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledby(): string | null {\n const node = this.el.nativeElement;\n if (node.hasAttribute('aria-label')) return null;\n return this.autocomplete.labelId();\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedby(): string | null {\n const ids: string[] = [];\n const desc = this.autocomplete.descriptionId();\n if (desc) ids.push(desc);\n if (this.autocomplete.invalid()) {\n const err = this.autocomplete.errorId();\n if (err) ids.push(err);\n }\n return ids.length ? ids.join(' ') : null;\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n if (this.autocomplete.disabled()) return;\n if (this.autocomplete._restoringFocus) return;\n if (!this.autocomplete.open()) {\n this.autocomplete.openSelect();\n\n // ✅ Emit empty query (or current query) on open-on-focus.\n // This is the behavior your test expects.\n const input = this.el.nativeElement as HTMLInputElement;\n const value = input?.value ?? '';\n\n this.autocomplete.query.set(value);\n this.autocomplete.queryChange.emit(value);\n \n ensureActiveAndSync(this.listbox, (id) => this.autocomplete.setActiveDescendantId(id));\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n // Free-form create: Enter (only) with no active option → emit create, close.\n // Space is NOT used here so it can insert into input for typing (e.g. \"United St\").\n if (\n event.key === 'Enter' &&\n this.autocomplete.open() &&\n !this.autocomplete.disabled() &&\n this.autocomplete.allowCreate() &&\n !this.autocomplete.strict()\n ) {\n const hasActive = this.listbox?.getActiveId() != null;\n if (!hasActive) {\n event.preventDefault();\n event.stopPropagation();\n const query = (this.el.nativeElement as HTMLInputElement)?.value ?? '';\n this.autocomplete._createJustEmitted = true;\n this.autocomplete.create.emit({ query });\n queueMicrotask(() => this.autocomplete.close());\n return;\n }\n }\n\n // When closed, typeable keys (a-z, 0-9, etc.) open overlay without preventDefault so input receives the char\n if (\n !this.autocomplete.open() &&\n !this.autocomplete.disabled() &&\n event.key.length === 1 &&\n event.key !== ' ' &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !['Tab', 'Escape', 'Enter'].includes(event.key)\n ) {\n this.autocomplete.openSelect();\n ensureActiveAndSync(this.listbox, (id) => this.autocomplete.setActiveDescendantId(id));\n return;\n }\n\n handleComboboxKeydown(event, {\n disabled: this.autocomplete.disabled(),\n open: this.autocomplete.open(),\n openSelect: () => this.autocomplete.openSelect(),\n close: () => this.autocomplete.close(),\n listbox: this.listbox,\n setActiveDescendantId: (id) => this.autocomplete.setActiveDescendantId(id),\n }, {\n enableTypeahead: false,\n keysToOpen: AUTOCOMPLETE_KEYS_TO_OPEN,\n keysToOpenNoPreventDefault: ['Backspace', 'Delete'],\n spaceCommits: false, // Space inserts into input for typing (e.g. \"United St\" for filtering)\n });\n }\n\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement)?.value ?? '';\n this.autocomplete.query.set(value);\n this.autocomplete.queryChange.emit(value);\n }\n}\n\n/** Wrapper for trigger + optional icon. When present, overlay uses this for width/position (full control width). */\n@Directive({\n selector: '[tngAutocompleteTriggerContainer]',\n exportAs: 'tngAutocompleteTriggerContainer',\n standalone: true,\n})\nexport class TngAutocompleteTriggerContainer {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-trigger-container' as const;\n}\n\n/** Slot for an icon (e.g. chevron) beside the trigger. Consumer provides markup. Matches Select's tngSelectIcon. */\n@Directive({\n selector: '[tngAutocompleteIcon]',\n exportAs: 'tngAutocompleteIcon',\n standalone: true,\n})\nexport class TngAutocompleteIcon {\n private readonly autocomplete = inject<TngAutocomplete>(TNG_AUTOCOMPLETE);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-icon' as const;\n\n @HostListener('click')\n protected onClick(): void {\n if (this.autocomplete.disabled()) return;\n const trigger = this.autocomplete.hostElement.querySelector(\n '[data-slot=\"autocomplete-trigger\"]'\n ) as HTMLElement | null;\n trigger?.focus();\n }\n}\n\nconst createContentId = createTngIdFactory('tng-autocomplete-content');\n\n@Directive({\n selector: '[tngAutocompleteContent]',\n exportAs: 'tngAutocompleteContent',\n standalone: true,\n})\nexport class TngAutocompleteContent {\n private readonly autocomplete = inject<TngAutocomplete>(TNG_AUTOCOMPLETE);\n private readonly destroyRef = inject(DestroyRef);\n\n @HostBinding('attr.id')\n readonly id = createContentId();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-content' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.autocomplete.open() ? null : '';\n }\n\n @HostBinding('attr.aria-busy')\n protected get ariaBusy(): 'true' | null {\n return this.autocomplete.loading() ? 'true' : null;\n }\n\n constructor() {\n this.autocomplete.setContentId(this.id);\n this.destroyRef.onDestroy(() => {\n if (this.autocomplete.getContentId() === this.id) {\n this.autocomplete.setContentId(null);\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"tng-autocomplete.parts.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/autocomplete/tng-autocomplete.parts.ts"],"names":[],"mappings":"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","sourcesContent":["import { DestroyRef, Directive, ElementRef, HostBinding, HostListener, inject } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { ensureActiveAndSync, handleComboboxKeydown } from '../../internal/combobox';\nimport type { TngAutocomplete } from './tng-autocomplete';\nimport { TNG_AUTOCOMPLETE } from './tng-autocomplete.tokens';\nimport type { TngAutocompleteListboxApi } from './tng-autocomplete.listbox.types';\n\n/** Keys that open autocomplete when closed. ArrowDown/Up + Backspace/Delete (user editing clears selection). */\nconst AUTOCOMPLETE_KEYS_TO_OPEN = ['ArrowDown', 'ArrowUp', 'Backspace', 'Delete'] as const;\n\n@Directive({\n selector: '[tngAutocompleteTrigger]',\n exportAs: 'tngAutocompleteTrigger',\n standalone: true,\n})\nexport class TngAutocompleteTrigger {\n private readonly autocomplete = inject<TngAutocomplete>(TNG_AUTOCOMPLETE);\n private readonly el = inject(ElementRef<HTMLElement>);\n\n private get listbox(): TngAutocompleteListboxApi | null {\n return this.autocomplete.getListboxApi();\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-trigger' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'combobox' as const;\n\n @HostBinding('attr.aria-haspopup')\n protected readonly haspopup = 'listbox' as const;\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpanded(): 'true' | 'false' {\n return this.autocomplete.open() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.autocomplete.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n if (!this.autocomplete.open()) return null;\n return this.autocomplete.getContentId() ?? this.autocomplete.getListboxId();\n }\n\n @HostBinding('attr.aria-activedescendant')\n protected get ariaActiveDescendant(): string | null {\n if (!this.autocomplete.open()) return null;\n if (this.listbox) return this.listbox.getActiveId();\n return this.autocomplete.getActiveDescendantId();\n }\n\n @HostBinding('attr.aria-invalid')\n protected get ariaInvalid(): 'true' | null {\n return this.autocomplete.invalid() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledby(): string | null {\n const node = this.el.nativeElement;\n if (node.hasAttribute('aria-label')) return null;\n return this.autocomplete.labelId();\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedby(): string | null {\n const ids: string[] = [];\n const desc = this.autocomplete.descriptionId();\n if (desc) ids.push(desc);\n if (this.autocomplete.invalid()) {\n const err = this.autocomplete.errorId();\n if (err) ids.push(err);\n }\n return ids.length ? ids.join(' ') : null;\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n if (this.autocomplete.disabled()) return;\n if (this.autocomplete._restoringFocus) return;\n if (!this.autocomplete.open()) {\n this.autocomplete.openSelect();\n\n // ✅ Emit empty query (or current query) on open-on-focus.\n // This is the behavior your test expects.\n const input = this.el.nativeElement as HTMLInputElement;\n const value = input?.value ?? '';\n\n this.autocomplete.query.set(value);\n this.autocomplete.queryChange.emit(value);\n \n ensureActiveAndSync(this.listbox, (id) => this.autocomplete.setActiveDescendantId(id));\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n // Free-form create: Enter (only) with no active option → emit create, close.\n // Space is NOT used here so it can insert into input for typing (e.g. \"United St\").\n if (\n event.key === 'Enter' &&\n this.autocomplete.open() &&\n !this.autocomplete.disabled() &&\n this.autocomplete.allowCreate() &&\n !this.autocomplete.strict()\n ) {\n const hasActive = this.listbox?.getActiveId() != null;\n if (!hasActive) {\n event.preventDefault();\n event.stopPropagation();\n const query = (this.el.nativeElement as HTMLInputElement)?.value ?? '';\n this.autocomplete._createJustEmitted = true;\n this.autocomplete.create.emit({ query });\n queueMicrotask(() => this.autocomplete.close());\n return;\n }\n }\n\n // When closed, typeable keys (a-z, 0-9, etc.) open overlay without preventDefault so input receives the char\n if (\n !this.autocomplete.open() &&\n !this.autocomplete.disabled() &&\n event.key.length === 1 &&\n event.key !== ' ' &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !['Tab', 'Escape', 'Enter'].includes(event.key)\n ) {\n this.autocomplete.openSelect();\n ensureActiveAndSync(this.listbox, (id) => this.autocomplete.setActiveDescendantId(id));\n return;\n }\n\n handleComboboxKeydown(event, {\n disabled: this.autocomplete.disabled(),\n open: this.autocomplete.open(),\n openSelect: () => this.autocomplete.openSelect(),\n close: () => this.autocomplete.close(),\n listbox: this.listbox,\n setActiveDescendantId: (id) => this.autocomplete.setActiveDescendantId(id),\n }, {\n enableTypeahead: false,\n keysToOpen: AUTOCOMPLETE_KEYS_TO_OPEN,\n keysToOpenNoPreventDefault: ['Backspace', 'Delete'],\n spaceCommits: false, // Space inserts into input for typing (e.g. \"United St\" for filtering)\n });\n }\n\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement)?.value ?? '';\n this.autocomplete.query.set(value);\n this.autocomplete.queryChange.emit(value);\n }\n}\n\n/** Wrapper for trigger + optional icon. When present, overlay uses this for width/position (full control width). */\n@Directive({\n selector: '[tngAutocompleteTriggerContainer]',\n exportAs: 'tngAutocompleteTriggerContainer',\n standalone: true,\n})\nexport class TngAutocompleteTriggerContainer {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-trigger-container' as const;\n}\n\n/** Slot for an icon (e.g. chevron) beside the trigger. Consumer provides markup. Matches Select's tngSelectIcon. */\n@Directive({\n selector: '[tngAutocompleteIcon]',\n exportAs: 'tngAutocompleteIcon',\n standalone: true,\n})\nexport class TngAutocompleteIcon {\n private readonly autocomplete = inject<TngAutocomplete>(TNG_AUTOCOMPLETE);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-icon' as const;\n\n @HostListener('click')\n protected onClick(): void {\n if (this.autocomplete.disabled()) return;\n const trigger = this.autocomplete.hostElement.querySelector(\n '[data-slot=\"autocomplete-trigger\"]'\n ) as HTMLElement | null;\n trigger?.focus();\n }\n}\n\nconst createContentId = createTngIdFactory('tng-autocomplete-content');\n\n@Directive({\n selector: '[tngAutocompleteContent]',\n exportAs: 'tngAutocompleteContent',\n standalone: true,\n})\nexport class TngAutocompleteContent {\n private readonly autocomplete = inject<TngAutocomplete>(TNG_AUTOCOMPLETE);\n private readonly destroyRef = inject(DestroyRef);\n\n @HostBinding('attr.id')\n readonly id = createContentId();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'autocomplete-content' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.autocomplete.open() ? null : '';\n }\n\n @HostBinding('attr.aria-busy')\n protected get ariaBusy(): 'true' | null {\n return this.autocomplete.loading() ? 'true' : null;\n }\n\n constructor() {\n this.autocomplete.setContentId(this.id);\n this.destroyRef.onDestroy(() => {\n if (this.autocomplete.getContentId() === this.id) {\n this.autocomplete.setContentId(null);\n }\n });\n }\n}\n"]}