@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":"listbox.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/listbox/listbox.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\n\nimport { createListboxController } from '@tailng-ui/cdk';\nimport type { TngListNavigationAction } from '@tailng-ui/cdk';\nimport {\n TNG_LISTBOX,\n TNG_LISTBOX_FORCE_MULTIPLE,\n TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER,\n} from './tokens';\n\nexport type ListboxValue<T> = T | readonly T[] | null;\n\n@Directive({\n selector: '[tngListbox]',\n standalone: true,\n providers: [{ provide: TNG_LISTBOX, useExisting: TngListboxDirective }],\n})\nexport class TngListboxDirective<T> {\n private readonly _forceMultiple = inject(TNG_LISTBOX_FORCE_MULTIPLE, { optional: true });\n private readonly preserveValueOnUnregister =\n inject(TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, { optional: true }) ?? false;\n readonly multipleInput = input<boolean>(false, { alias: 'multiple' });\n readonly multiple = computed(() => this._forceMultiple ?? this.multipleInput());\n\n orientation = input<'vertical' | 'horizontal'>('vertical');\n direction = input<'ltr' | 'rtl'>('ltr');\n disabled = input<boolean>(false);\n loop = input<boolean>(true);\n\n /**\n * Enable listbox typeahead (printable key moves active option by option text).\n * Default true for Select compatibility.\n * Autocomplete should set this to false (input owns typing/filtering).\n */\n typeahead = input<boolean>(true);\n\n readonly value = model<ListboxValue<T>>(null);\n\n private readonly el = inject(ElementRef<HTMLElement>);\n\n private idToElement = new Map<string, HTMLElement>();\n private options = signal<{ id: string; value: T; disabled: boolean }[]>([]);\n private controller = signal<ReturnType<typeof createListboxController<T>> | null>(null);\n private activeId = signal<string | null>(null);\n\n // ----------------------------------------------------\n // Host bindings\n // ----------------------------------------------------\n\n @HostBinding('attr.role')\n role = 'listbox';\n\n @HostBinding('attr.aria-multiselectable')\n get ariaMulti() {\n return this.multiple() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled() {\n return this.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-activedescendant')\n get activeDescendant() {\n return this.activeId();\n }\n\n // ----------------------------------------------------\n // Constructor\n // ----------------------------------------------------\n\n constructor() {\n const hostId = `tng-listbox-${Math.random().toString(36).slice(2)}`;\n\n // Controller creation effect\n effect(() => {\n const ctrl = createListboxController<T>({\n hostId,\n selectionMode: this.multiple() ? 'multiple' : 'single',\n orientation: this.orientation(),\n direction: this.direction(),\n disabled: this.disabled(),\n loop: this.loop(),\n });\n\n this.controller.set(ctrl);\n\n const opts = untracked(this.options);\n for (const option of opts) {\n ctrl.registerOption(option);\n }\n });\n\n // Controlled value sanitizer\n effect(() => {\n const isMulti = this.multiple();\n const opts = this.options();\n const external = this.value();\n\n if (!isMulti) {\n if (external === null) return;\n\n const v = external as T;\n const opt = this.findOptionByValue(v, opts);\n\n if (!opt && this.preserveValueOnUnregister) {\n return;\n }\n\n if (!opt || opt.disabled) {\n this.value.set(null);\n }\n return;\n }\n\n if (external === null) return;\n\n const arr = Array.isArray(external)\n ? (external as readonly T[])\n : ([external as T] as readonly T[]);\n\n const filtered = arr.filter((v) => {\n const opt = this.findOptionByValue(v, opts);\n\n if (!opt) {\n return this.preserveValueOnUnregister;\n }\n\n return !opt.disabled;\n });\n\n if (filtered.length !== arr.length) {\n this.value.set(filtered as readonly T[]);\n }\n });\n\n // External value -> controller selection\n effect(() => {\n const ctrl = this.controller();\n if (!ctrl) return;\n\n const opts = this.options();\n const external = this.value();\n\n const toIds = (v: ListboxValue<T>): string[] => {\n if (v === null) return [];\n const arr = Array.isArray(v) ? (v as readonly T[]) : ([v as T] as const);\n\n const ids: string[] = [];\n for (const val of arr) {\n const opt = opts.find((o) => Object.is(o.value, val));\n if (!opt) continue;\n if (opt.disabled) continue;\n ids.push(opt.id);\n }\n return ids;\n };\n\n const nextIds = toIds(external);\n\n if (nextIds.length === 0) {\n ctrl.clearSelection();\n return;\n }\n\n ctrl.setSelectedIds(nextIds);\n });\n\n // Scroll when active changes\n effect(() => {\n const id = this.activeId();\n if (!id) return;\n\n const el = this.idToElement.get(id);\n if (!el) return;\n\n el.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n // ----------------------------------------------------\n // Helpers\n // ----------------------------------------------------\n\n private findOptionByValue(\n value: T,\n opts: readonly { value: T; disabled: boolean }[],\n ) {\n return opts.find((o) => Object.is(o.value, value));\n }\n\n private isSelectableValue(\n value: T,\n opts: readonly { value: T; disabled: boolean }[],\n ): boolean {\n const opt = this.findOptionByValue(value, opts);\n return !!opt && !opt.disabled;\n }\n\n private syncDomOrderToController(): void {\n const ctrl = this.controller();\n if (!ctrl) return;\n\n const root = this.el.nativeElement;\n const optionEls = Array.from(\n root.querySelectorAll('[role=\"option\"][id]'),\n ) as HTMLElement[];\n\n const ids = optionEls.map((x) => x.id).filter(Boolean);\n\n if (ids.length > 0) {\n ctrl.setItemOrder(ids);\n }\n }\n\n private syncActiveFromController(): void {\n const ctrl = this.controller();\n if (!ctrl) return;\n this.activeId.set(ctrl.getActiveId());\n }\n\n private shouldSyncValueFromAction(action: TngListNavigationAction | null): boolean {\n if (!action) return false;\n if (action.extendSelection) return true;\n\n return (\n action.type === 'select-active' ||\n action.type === 'toggle-active' ||\n action.type === 'select-all'\n );\n }\n\n // ----------------------------------------------------\n // Option registration\n // ----------------------------------------------------\n\n registerOption(\n id: string,\n value: T,\n disabled: boolean,\n text?: string,\n el?: HTMLElement,\n ): void {\n if (el) {\n this.idToElement.set(id, el);\n }\n\n this.options.update((list) => {\n const idx = list.findIndex((x) => x.id === id);\n if (idx === -1) return [...list, { id, value, disabled }];\n const copy = list.slice();\n copy[idx] = { id, value, disabled };\n return copy;\n });\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n ctrl.unregisterOption(id);\n ctrl.registerOption({ id, value, disabled, text });\n }\n\n unregisterOption(id: string): void {\n this.options.update((list) => list.filter((x) => x.id !== id));\n this.idToElement.delete(id);\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n ctrl.unregisterOption(id);\n\n this.syncActiveFromController();\n\n if (!this.preserveValueOnUnregister) {\n this.syncExternalValueFromInternal(ctrl, false);\n }\n }\n\n updateOptionDisabled(id: string, disabled: boolean): void {\n let exists = false;\n\n this.options.update((list) =>\n list.map((o) => {\n if (o.id !== id) return o;\n exists = true;\n return { ...o, disabled };\n }),\n );\n\n if (!exists) return;\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n ctrl.setOptionDisabled(id, disabled);\n this.syncActiveFromController();\n }\n\n // ----------------------------------------------------\n // Events\n // ----------------------------------------------------\n\n @HostListener('keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n this.syncDomOrderToController();\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n // ✅ Typeahead (optional)\n if (\n this.typeahead() &&\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n ) {\n const moved = ctrl.typeahead(event.key);\n if (moved) {\n this.syncActiveFromController();\n event.preventDefault();\n return;\n }\n }\n\n const action = ctrl.handleKeyDown(event);\n this.syncActiveFromController();\n\n if (action?.preventDefault) {\n event.preventDefault();\n }\n\n if (this.shouldSyncValueFromAction(action)) {\n this.syncExternalValueFromInternal(ctrl, false);\n }\n }\n\n @HostListener('focusin')\n handleFocusIn() {\n if (this.disabled()) return;\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n if (ctrl.getActiveId() !== null) {\n this.syncActiveFromController();\n return;\n }\n\n ctrl.handleKeyDown({ key: 'Home' });\n this.syncActiveFromController();\n }\n\n @HostListener('focusout', ['$event'])\n handleFocusOut(event: FocusEvent) {\n const nextTarget = event.relatedTarget;\n if (nextTarget instanceof Node && this.el.nativeElement.contains(nextTarget)) {\n return;\n }\n\n const ctrl = this.controller();\n if (!ctrl) return;\n if (ctrl.getActiveId() === null) return;\n\n ctrl.setActiveId(null);\n this.syncActiveFromController();\n }\n\n handleOptionClick(id: string, shiftKey?: boolean) {\n if (this.disabled()) return;\n\n this.syncDomOrderToController();\n\n const opt = this.options().find((o) => o.id === id);\n if (opt?.disabled) return;\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n // Pointer selection should transfer keyboard focus to this listbox so\n // subsequent Arrow keys continue from the clicked list.\n this.el.nativeElement.focus();\n\n ctrl.handleClick(id, shiftKey);\n\n this.syncActiveFromController();\n this.syncExternalValueFromInternal(ctrl, true);\n }\n\n // ----------------------------------------------------\n // Selection sync\n // ----------------------------------------------------\n\n private syncExternalValueFromInternal(\n ctrl: ReturnType<typeof createListboxController<T>>,\n fromClick: boolean,\n ) {\n const selected = ctrl.getSelectedValues();\n\n if (this.multiple()) {\n if (!this.preserveValueOnUnregister) {\n this.value.set([...selected] as readonly T[]);\n return;\n }\n\n const opts = this.options();\n const current = this.value();\n const currentArr =\n current === null\n ? ([] as readonly T[])\n : Array.isArray(current)\n ? (current as readonly T[])\n : ([current as T] as const);\n\n const next: T[] = [];\n\n // Preserve hidden selections in their current order, and keep any currently\n // visible selections that remain selected after the interaction.\n for (const val of currentArr) {\n const isHidden = !opts.some((opt) => Object.is(opt.value, val));\n const isStillSelected = selected.some((entry) => Object.is(entry, val));\n\n if (isHidden || isStillSelected) {\n next.push(val);\n }\n }\n\n // Append newly selected visible values that were not already present.\n for (const val of selected) {\n const alreadyPresent = currentArr.some((entry) => Object.is(entry, val));\n if (!alreadyPresent) {\n next.push(val);\n }\n }\n\n this.value.set(next as readonly T[]);\n } else {\n const newVal = selected[0] ?? null;\n const current = this.value();\n this.value.set(newVal);\n if (fromClick && Object.is(newVal, current)) {\n this.value.set(null);\n this.value.set(newVal);\n }\n }\n }\n\n isSelected(id: string): boolean {\n const ctrl = this.controller();\n if (!ctrl) return false;\n \n // ✅ selection truth is IDs, not value equality\n return ctrl.getSelectedIds().includes(id);\n }\n\n isValueSelected(value: T): boolean {\n const selected = this.value();\n\n if (selected === null) return false;\n\n if (Array.isArray(selected)) {\n return selected.some((entry) => Object.is(entry, value));\n }\n\n return Object.is(selected, value);\n }\n\n isActive(id: string): boolean {\n return this.activeId() === id;\n }\n\n public getActiveId(): string | null {\n return this.activeId();\n }\n\n public ensureActive(pref: 'first' | 'last' = 'first'): void {\n const ctrl = this.controller();\n if (!ctrl) return;\n if (ctrl.getActiveId() !== null) return;\n ctrl.handleKeyDown({ key: pref === 'last' ? 'End' : 'Home' });\n this.syncActiveFromController();\n }\n\n public handleKeyFromCombobox(key: string, shiftKey?: boolean): boolean {\n this.syncDomOrderToController();\n\n const ctrl = this.controller();\n if (!ctrl) return false;\n const action = ctrl.handleKeyDown({ key, shiftKey } as any);\n this.syncActiveFromController();\n if (this.shouldSyncValueFromAction(action)) {\n this.syncExternalValueFromInternal(ctrl, false);\n }\n return !!action;\n }\n\n public typeaheadFromCombobox(key: string): boolean {\n const ctrl = this.controller();\n if (!ctrl) return false;\n const moved = ctrl.typeahead(key);\n if (moved) this.syncActiveFromController();\n return moved;\n }\n\n public setActiveId(id: string | null): void {\n const ctrl = this.controller();\n if (!ctrl) return;\n ctrl.setActiveId(id);\n this.syncActiveFromController();\n }\n\n public getActiveValue(): T | undefined {\n const active = this.activeId();\n if (!active) return undefined;\n const opt = this.options().find((o) => o.id === active);\n return opt?.value;\n }\n}\n"]}
1
+ {"version":3,"file":"listbox.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/listbox/listbox.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\n\nimport { createListboxController } from '@tailng-ui/cdk';\nimport type { TngListNavigationAction } from '@tailng-ui/cdk';\nimport {\n TNG_LISTBOX,\n TNG_LISTBOX_FORCE_MULTIPLE,\n TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER,\n} from './tokens';\n\nexport type ListboxValue<T> = T | readonly T[] | null;\n\n@Directive({\n selector: '[tngListbox]',\n standalone: true,\n providers: [{ provide: TNG_LISTBOX, useExisting: TngListboxDirective }],\n})\nexport class TngListboxDirective<T> {\n private readonly _forceMultiple = inject(TNG_LISTBOX_FORCE_MULTIPLE, { optional: true });\n private readonly preserveValueOnUnregister =\n inject(TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, { optional: true }) ?? false;\n readonly multipleInput = input<boolean>(false, { alias: 'multiple' });\n readonly multiple = computed(() => this._forceMultiple ?? this.multipleInput());\n\n orientation = input<'vertical' | 'horizontal'>('vertical');\n direction = input<'ltr' | 'rtl'>('ltr');\n disabled = input<boolean>(false);\n loop = input<boolean>(true);\n\n /**\n * Enable listbox typeahead (printable key moves active option by option text).\n * Default true for Select compatibility.\n * Autocomplete should set this to false (input owns typing/filtering).\n */\n typeahead = input<boolean>(true);\n\n readonly value = model<ListboxValue<T>>(null);\n\n private readonly el = inject(ElementRef<HTMLElement>);\n\n private idToElement = new Map<string, HTMLElement>();\n private options = signal<{ id: string; value: T; disabled: boolean }[]>([]);\n private controller = signal<ReturnType<typeof createListboxController<T>> | null>(null);\n private activeId = signal<string | null>(null);\n\n // ----------------------------------------------------\n // Host bindings\n // ----------------------------------------------------\n\n @HostBinding('attr.role')\n role = 'listbox';\n\n @HostBinding('attr.aria-multiselectable')\n get ariaMulti() {\n return this.multiple() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled() {\n return this.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-activedescendant')\n get activeDescendant() {\n return this.activeId();\n }\n\n // ----------------------------------------------------\n // Constructor\n // ----------------------------------------------------\n\n constructor() {\n const hostId = `tng-listbox-${Math.random().toString(36).slice(2)}`;\n\n // Controller creation effect\n effect(() => {\n const ctrl = createListboxController<T>({\n hostId,\n selectionMode: this.multiple() ? 'multiple' : 'single',\n orientation: this.orientation(),\n direction: this.direction(),\n disabled: this.disabled(),\n loop: this.loop(),\n });\n\n this.controller.set(ctrl);\n\n const opts = untracked(this.options);\n for (const option of opts) {\n ctrl.registerOption(option);\n }\n });\n\n // Controlled value sanitizer\n effect(() => {\n const isMulti = this.multiple();\n const opts = this.options();\n const external = this.value();\n\n if (!isMulti) {\n if (external === null) return;\n\n const v = external as T;\n const opt = this.findOptionByValue(v, opts);\n\n if (!opt && this.preserveValueOnUnregister) {\n return;\n }\n\n if (!opt || opt.disabled) {\n this.value.set(null);\n }\n return;\n }\n\n if (external === null) return;\n\n const arr = Array.isArray(external)\n ? (external as readonly T[])\n : ([external as T] as readonly T[]);\n\n const filtered = arr.filter((v) => {\n const opt = this.findOptionByValue(v, opts);\n\n if (!opt) {\n return this.preserveValueOnUnregister;\n }\n\n return !opt.disabled;\n });\n\n if (filtered.length !== arr.length) {\n this.value.set(filtered as readonly T[]);\n }\n });\n\n // External value -> controller selection\n effect(() => {\n const ctrl = this.controller();\n if (!ctrl) return;\n\n const opts = this.options();\n const external = this.value();\n\n const toIds = (v: ListboxValue<T>): string[] => {\n if (v === null) return [];\n const arr = Array.isArray(v) ? (v as readonly T[]) : ([v as T] as const);\n\n const ids: string[] = [];\n for (const val of arr) {\n const opt = opts.find((o) => Object.is(o.value, val));\n if (!opt) continue;\n if (opt.disabled) continue;\n ids.push(opt.id);\n }\n return ids;\n };\n\n const nextIds = toIds(external);\n\n if (nextIds.length === 0) {\n ctrl.clearSelection();\n return;\n }\n\n ctrl.setSelectedIds(nextIds);\n });\n\n // Scroll when active changes\n effect(() => {\n const id = this.activeId();\n if (!id) return;\n\n const el = this.idToElement.get(id);\n if (!el) return;\n\n el.scrollIntoView?.({ block: 'nearest' });\n });\n }\n\n // ----------------------------------------------------\n // Helpers\n // ----------------------------------------------------\n\n private findOptionByValue(\n value: T,\n opts: readonly { value: T; disabled: boolean }[],\n ) {\n return opts.find((o) => Object.is(o.value, value));\n }\n\n private isSelectableValue(\n value: T,\n opts: readonly { value: T; disabled: boolean }[],\n ): boolean {\n const opt = this.findOptionByValue(value, opts);\n return !!opt && !opt.disabled;\n }\n\n private syncDomOrderToController(): void {\n const ctrl = this.controller();\n if (!ctrl) return;\n\n const root = this.el.nativeElement;\n const optionEls = Array.from(\n root.querySelectorAll('[role=\"option\"][id]'),\n ) as HTMLElement[];\n\n const ids = optionEls.map((x) => x.id).filter(Boolean);\n\n if (ids.length > 0) {\n ctrl.setItemOrder(ids);\n }\n }\n\n private syncActiveFromController(): void {\n const ctrl = this.controller();\n if (!ctrl) return;\n this.activeId.set(ctrl.getActiveId());\n }\n\n private shouldSyncValueFromAction(action: TngListNavigationAction | null): boolean {\n if (!action) return false;\n if (action.extendSelection) return true;\n\n return (\n action.type === 'select-active' ||\n action.type === 'toggle-active' ||\n action.type === 'select-all'\n );\n }\n\n // ----------------------------------------------------\n // Option registration\n // ----------------------------------------------------\n\n registerOption(\n id: string,\n value: T,\n disabled: boolean,\n text?: string,\n el?: HTMLElement,\n ): void {\n if (el) {\n this.idToElement.set(id, el);\n }\n\n this.options.update((list) => {\n const idx = list.findIndex((x) => x.id === id);\n if (idx === -1) return [...list, { id, value, disabled }];\n const copy = list.slice();\n copy[idx] = { id, value, disabled };\n return copy;\n });\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n ctrl.unregisterOption(id);\n ctrl.registerOption({ id, value, disabled, text });\n }\n\n unregisterOption(id: string): void {\n this.options.update((list) => list.filter((x) => x.id !== id));\n this.idToElement.delete(id);\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n ctrl.unregisterOption(id);\n\n this.syncActiveFromController();\n\n if (!this.preserveValueOnUnregister) {\n this.syncExternalValueFromInternal(ctrl, false);\n }\n }\n\n updateOptionDisabled(id: string, disabled: boolean): void {\n let exists = false;\n\n this.options.update((list) =>\n list.map((o) => {\n if (o.id !== id) return o;\n exists = true;\n return { ...o, disabled };\n }),\n );\n\n if (!exists) return;\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n ctrl.setOptionDisabled(id, disabled);\n this.syncActiveFromController();\n }\n\n // ----------------------------------------------------\n // Events\n // ----------------------------------------------------\n\n @HostListener('keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n this.syncDomOrderToController();\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n // ✅ Typeahead (optional)\n if (\n this.typeahead() &&\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n ) {\n const moved = ctrl.typeahead(event.key);\n if (moved) {\n this.syncActiveFromController();\n event.preventDefault();\n return;\n }\n }\n\n const action = ctrl.handleKeyDown(event);\n this.syncActiveFromController();\n\n if (action?.preventDefault) {\n event.preventDefault();\n }\n\n if (this.shouldSyncValueFromAction(action)) {\n this.syncExternalValueFromInternal(ctrl, false);\n }\n }\n\n @HostListener('focusin')\n handleFocusIn() {\n if (this.disabled()) return;\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n if (ctrl.getActiveId() !== null) {\n this.syncActiveFromController();\n return;\n }\n\n ctrl.handleKeyDown({ key: 'Home' });\n this.syncActiveFromController();\n }\n\n @HostListener('focusout', ['$event'])\n handleFocusOut(event: FocusEvent) {\n const nextTarget = event.relatedTarget;\n if (nextTarget instanceof Node && this.el.nativeElement.contains(nextTarget)) {\n return;\n }\n\n const ctrl = this.controller();\n if (!ctrl) return;\n if (ctrl.getActiveId() === null) return;\n\n ctrl.setActiveId(null);\n this.syncActiveFromController();\n }\n\n handleOptionClick(id: string, shiftKey?: boolean) {\n if (this.disabled()) return;\n\n this.syncDomOrderToController();\n\n const opt = this.options().find((o) => o.id === id);\n if (opt?.disabled) return;\n\n const ctrl = this.controller();\n if (!ctrl) return;\n\n // Pointer selection should transfer keyboard focus to this listbox so\n // subsequent Arrow keys continue from the clicked list.\n this.el.nativeElement.focus();\n\n ctrl.handleClick(id, shiftKey);\n\n this.syncActiveFromController();\n this.syncExternalValueFromInternal(ctrl, true);\n }\n\n // ----------------------------------------------------\n // Selection sync\n // ----------------------------------------------------\n\n private syncExternalValueFromInternal(\n ctrl: ReturnType<typeof createListboxController<T>>,\n fromClick: boolean,\n ) {\n const selected = ctrl.getSelectedValues();\n\n if (this.multiple()) {\n if (!this.preserveValueOnUnregister) {\n this.value.set([...selected] as readonly T[]);\n return;\n }\n\n const opts = this.options();\n const current = this.value();\n const currentArr =\n current === null\n ? ([] as readonly T[])\n : Array.isArray(current)\n ? (current as readonly T[])\n : ([current as T] as const);\n\n const next: T[] = [];\n\n // Preserve hidden selections in their current order, and keep any currently\n // visible selections that remain selected after the interaction.\n for (const val of currentArr) {\n const isHidden = !opts.some((opt) => Object.is(opt.value, val));\n const isStillSelected = selected.some((entry) => Object.is(entry, val));\n\n if (isHidden || isStillSelected) {\n next.push(val);\n }\n }\n\n // Append newly selected visible values that were not already present.\n for (const val of selected) {\n const alreadyPresent = currentArr.some((entry) => Object.is(entry, val));\n if (!alreadyPresent) {\n next.push(val);\n }\n }\n\n this.value.set(next as readonly T[]);\n } else {\n const newVal = selected[0] ?? null;\n const current = this.value();\n this.value.set(newVal);\n if (fromClick && Object.is(newVal, current)) {\n this.value.set(null);\n this.value.set(newVal);\n }\n }\n }\n\n isSelected(id: string): boolean {\n const ctrl = this.controller();\n if (!ctrl) return false;\n \n // ✅ selection truth is IDs, not value equality\n return ctrl.getSelectedIds().includes(id);\n }\n\n isValueSelected(value: T): boolean {\n const selected = this.value();\n\n if (selected === null) return false;\n\n if (Array.isArray(selected)) {\n return selected.some((entry) => Object.is(entry, value));\n }\n\n return Object.is(selected, value);\n }\n\n isActive(id: string): boolean {\n return this.activeId() === id;\n }\n\n public getActiveId(): string | null {\n return this.activeId();\n }\n\n public ensureActive(pref: 'first' | 'last' = 'first'): void {\n const ctrl = this.controller();\n if (!ctrl) return;\n if (ctrl.getActiveId() !== null) return;\n ctrl.handleKeyDown({ key: pref === 'last' ? 'End' : 'Home' });\n this.syncActiveFromController();\n }\n\n public handleKeyFromCombobox(key: string, shiftKey?: boolean): boolean {\n this.syncDomOrderToController();\n\n const ctrl = this.controller();\n if (!ctrl) return false;\n const action = ctrl.handleKeyDown({ key, shiftKey } as any);\n this.syncActiveFromController();\n if (this.shouldSyncValueFromAction(action)) {\n this.syncExternalValueFromInternal(ctrl, false);\n }\n return !!action;\n }\n\n public typeaheadFromCombobox(key: string): boolean {\n const ctrl = this.controller();\n if (!ctrl) return false;\n const moved = ctrl.typeahead(key);\n if (moved) this.syncActiveFromController();\n return moved;\n }\n\n public setActiveId(id: string | null): void {\n const ctrl = this.controller();\n if (!ctrl) return;\n ctrl.setActiveId(id);\n this.syncActiveFromController();\n }\n\n public getActiveValue(): T | undefined {\n const active = this.activeId();\n if (!active) return undefined;\n const opt = this.options().find((o) => o.id === active);\n return opt?.value;\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { AfterViewInit, OnDestroy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
2
3
  export declare class TngOptionDirective<T = unknown> implements AfterViewInit, OnDestroy {
3
4
  tngValue: import("@angular/core").InputSignal<T | undefined>;
4
5
  disabled: import("@angular/core").InputSignal<boolean>;
@@ -18,5 +19,7 @@ export declare class TngOptionDirective<T = unknown> implements AfterViewInit, O
18
19
  ngOnDestroy(): void;
19
20
  onPointerDown(event: PointerEvent): void;
20
21
  private isSelected;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngOptionDirective<any>, never>;
23
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngOptionDirective<any>, "[tngOption]", never, { "tngValue": { "alias": "tngValue"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
21
24
  }
22
25
  //# sourceMappingURL=option.directive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"option.directive.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/listbox/option.directive.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EAKb,SAAS,EAKV,MAAM,eAAe,CAAC;AAOvB,qBAIa,kBAAkB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,aAAa,EAAE,SAAS;IAC9E,QAAQ,qDAA0B;IAClC,QAAQ,+CAAyB;IAEjC,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,EAAE,CAAc;IAGxB,OAAO,CAAC,UAAU,CAAiB;IAGnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAG3B;IAGH,IAAI,SAAY;IAEhB,IACI,MAAM,WAET;IAED,IACI,YAAY,IAAI,MAAM,GAAG,OAAO,CAEnC;IAED,IACI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAGD,IACI,UAAU,IAAI,EAAE,GAAG,IAAI,CAE1B;IAED,IACI,YAAY,IAAI,EAAE,GAAG,IAAI,CAE5B;IAED,IACI,YAAY,IAAI,EAAE,GAAG,IAAI,CAE5B;IAED,eAAe;IAWf,WAAW;IAOX,aAAa,CAAC,KAAK,EAAE,YAAY;IAcjC,OAAO,CAAC,UAAU;CASnB"}
1
+ {"version":3,"file":"option.directive.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/listbox/option.directive.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EAKb,SAAS,EAKV,MAAM,eAAe,CAAC;;AAOvB,qBAIa,kBAAkB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,aAAa,EAAE,SAAS;IAC9E,QAAQ,qDAA0B;IAClC,QAAQ,+CAAyB;IAEjC,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,EAAE,CAAc;IAGxB,OAAO,CAAC,UAAU,CAAiB;IAGnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAG3B;IAGH,IAAI,SAAY;IAEhB,IACI,MAAM,WAET;IAED,IACI,YAAY,IAAI,MAAM,GAAG,OAAO,CAEnC;IAED,IACI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAGD,IACI,UAAU,IAAI,EAAE,GAAG,IAAI,CAE1B;IAED,IACI,YAAY,IAAI,EAAE,GAAG,IAAI,CAE5B;IAED,IACI,YAAY,IAAI,EAAE,GAAG,IAAI,CAE5B;IAED,eAAe;IAWf,WAAW;IAOX,aAAa,CAAC,KAAK,EAAE,YAAY;IAcjC,OAAO,CAAC,UAAU;yCAnFP,kBAAkB;2CAAlB,kBAAkB;CA4F9B"}
@@ -1,23 +1,23 @@
1
- import { __decorate } from "tslib";
2
1
  // option.directive.ts
3
2
  import { Directive, ElementRef, HostBinding, HostListener, effect, inject, input, signal, } from '@angular/core';
4
3
  import { createTngIdFactory } from '@tailng-ui/cdk';
5
4
  import { TNG_LISTBOX } from './tokens';
5
+ import * as i0 from "@angular/core";
6
6
  const createId = createTngIdFactory('tng-option');
7
- let TngOptionDirective = class TngOptionDirective {
8
- tngValue = input();
9
- disabled = input(false);
7
+ export class TngOptionDirective {
8
+ tngValue = input(...(ngDevMode ? [undefined, { debugName: "tngValue" }] : []));
9
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
10
10
  el = inject((ElementRef));
11
11
  listbox = inject(TNG_LISTBOX);
12
12
  id = createId();
13
13
  // gate to ensure we only push updates after initial registration
14
- registered = signal(false);
14
+ registered = signal(false, ...(ngDevMode ? [{ debugName: "registered" }] : []));
15
15
  // ✅ effect is created in injection context (field initializer)
16
16
  _syncDisabled = effect(() => {
17
17
  if (!this.registered())
18
18
  return;
19
19
  this.listbox.updateOptionDisabled(this.id, this.disabled());
20
- });
20
+ }, ...(ngDevMode ? [{ debugName: "_syncDisabled" }] : []));
21
21
  role = 'option';
22
22
  get hostId() {
23
23
  return this.id;
@@ -74,36 +74,38 @@ let TngOptionDirective = class TngOptionDirective {
74
74
  return false;
75
75
  return this.listbox.isValueSelected(value);
76
76
  }
77
- };
78
- __decorate([
79
- HostBinding('attr.role')
80
- ], TngOptionDirective.prototype, "role", void 0);
81
- __decorate([
82
- HostBinding('attr.id')
83
- ], TngOptionDirective.prototype, "hostId", null);
84
- __decorate([
85
- HostBinding('attr.aria-selected')
86
- ], TngOptionDirective.prototype, "ariaSelected", null);
87
- __decorate([
88
- HostBinding('attr.aria-disabled')
89
- ], TngOptionDirective.prototype, "ariaDisabled", null);
90
- __decorate([
91
- HostBinding('attr.data-active')
92
- ], TngOptionDirective.prototype, "dataActive", null);
93
- __decorate([
94
- HostBinding('attr.data-selected')
95
- ], TngOptionDirective.prototype, "dataSelected", null);
96
- __decorate([
97
- HostBinding('attr.data-disabled')
98
- ], TngOptionDirective.prototype, "dataDisabled", null);
99
- __decorate([
100
- HostListener('pointerdown', ['$event'])
101
- ], TngOptionDirective.prototype, "onPointerDown", null);
102
- TngOptionDirective = __decorate([
103
- Directive({
104
- selector: '[tngOption]',
105
- standalone: true,
106
- })
107
- ], TngOptionDirective);
108
- export { TngOptionDirective };
77
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngOptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
78
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngOptionDirective, isStandalone: true, selector: "[tngOption]", inputs: { tngValue: { classPropertyName: "tngValue", publicName: "tngValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointerdown": "onPointerDown($event)" }, properties: { "attr.role": "this.role", "attr.id": "this.hostId", "attr.aria-selected": "this.ariaSelected", "attr.aria-disabled": "this.ariaDisabled", "attr.data-active": "this.dataActive", "attr.data-selected": "this.dataSelected", "attr.data-disabled": "this.dataDisabled" } }, ngImport: i0 });
79
+ }
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngOptionDirective, decorators: [{
81
+ type: Directive,
82
+ args: [{
83
+ selector: '[tngOption]',
84
+ standalone: true,
85
+ }]
86
+ }], propDecorators: { tngValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngValue", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], role: [{
87
+ type: HostBinding,
88
+ args: ['attr.role']
89
+ }], hostId: [{
90
+ type: HostBinding,
91
+ args: ['attr.id']
92
+ }], ariaSelected: [{
93
+ type: HostBinding,
94
+ args: ['attr.aria-selected']
95
+ }], ariaDisabled: [{
96
+ type: HostBinding,
97
+ args: ['attr.aria-disabled']
98
+ }], dataActive: [{
99
+ type: HostBinding,
100
+ args: ['attr.data-active']
101
+ }], dataSelected: [{
102
+ type: HostBinding,
103
+ args: ['attr.data-selected']
104
+ }], dataDisabled: [{
105
+ type: HostBinding,
106
+ args: ['attr.data-disabled']
107
+ }], onPointerDown: [{
108
+ type: HostListener,
109
+ args: ['pointerdown', ['$event']]
110
+ }] } });
109
111
  //# sourceMappingURL=option.directive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"option.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/listbox/option.directive.ts"],"names":[],"mappings":"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","sourcesContent":["// option.directive.ts\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n OnDestroy,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { TNG_LISTBOX } from './tokens';\n\nconst createId = createTngIdFactory('tng-option');\n\n@Directive({\n selector: '[tngOption]',\n standalone: true,\n})\nexport class TngOptionDirective<T = unknown> implements AfterViewInit, OnDestroy {\n tngValue = input<T | undefined>();\n disabled = input<boolean>(false);\n\n private el = inject(ElementRef<HTMLElement>);\n private listbox = inject(TNG_LISTBOX);\n private id = createId();\n\n // gate to ensure we only push updates after initial registration\n private registered = signal(false);\n\n // ✅ effect is created in injection context (field initializer)\n private readonly _syncDisabled = effect(() => {\n if (!this.registered()) return;\n this.listbox.updateOptionDisabled(this.id, this.disabled());\n });\n\n @HostBinding('attr.role')\n role = 'option';\n\n @HostBinding('attr.id')\n get hostId() {\n return this.id;\n }\n\n @HostBinding('attr.aria-selected')\n get ariaSelected(): 'true' | 'false' {\n return this.isSelected() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled(): 'true' | null {\n return this.disabled() ? 'true' : null;\n }\n\n // ✅ Tailwind-friendly state attributes (presence based)\n @HostBinding('attr.data-active')\n get dataActive(): '' | null {\n return this.listbox.isActive(this.id) ? '' : null;\n }\n\n @HostBinding('attr.data-selected')\n get dataSelected(): '' | null {\n return this.isSelected() ? '' : null;\n }\n\n @HostBinding('attr.data-disabled')\n get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n ngAfterViewInit() {\n const value = this.tngValue();\n if (value === undefined) return;\n\n const text = this.el.nativeElement.textContent?.trim() ?? '';\n // pass text for typeahead\n this.listbox.registerOption(this.id, value, this.disabled(), text, this.el.nativeElement);\n\n this.registered.set(true);\n }\n\n ngOnDestroy() {\n this.listbox.unregisterOption(this.id);\n this.registered.set(false);\n // Angular will destroy directive + tear down effect automatically\n }\n\n @HostListener('pointerdown', ['$event'])\n onPointerDown(event: PointerEvent) {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (event.button !== 0) return;\n\n // Prevent focus from moving / text selection, keep listbox behavior stable.\n event.preventDefault();\n\n this.listbox.handleOptionClick(this.id, event.shiftKey);\n }\n\n private isSelected(): boolean {\n if (this.listbox.isSelected(this.id)) return true;\n if (this.disabled()) return false;\n\n const value = this.tngValue();\n if (value === undefined) return false;\n\n return this.listbox.isValueSelected(value);\n }\n}\n"]}
1
+ {"version":3,"file":"option.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/listbox/option.directive.ts"],"names":[],"mappings":"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","sourcesContent":["// option.directive.ts\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n OnDestroy,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { TNG_LISTBOX } from './tokens';\n\nconst createId = createTngIdFactory('tng-option');\n\n@Directive({\n selector: '[tngOption]',\n standalone: true,\n})\nexport class TngOptionDirective<T = unknown> implements AfterViewInit, OnDestroy {\n tngValue = input<T | undefined>();\n disabled = input<boolean>(false);\n\n private el = inject(ElementRef<HTMLElement>);\n private listbox = inject(TNG_LISTBOX);\n private id = createId();\n\n // gate to ensure we only push updates after initial registration\n private registered = signal(false);\n\n // ✅ effect is created in injection context (field initializer)\n private readonly _syncDisabled = effect(() => {\n if (!this.registered()) return;\n this.listbox.updateOptionDisabled(this.id, this.disabled());\n });\n\n @HostBinding('attr.role')\n role = 'option';\n\n @HostBinding('attr.id')\n get hostId() {\n return this.id;\n }\n\n @HostBinding('attr.aria-selected')\n get ariaSelected(): 'true' | 'false' {\n return this.isSelected() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled(): 'true' | null {\n return this.disabled() ? 'true' : null;\n }\n\n // ✅ Tailwind-friendly state attributes (presence based)\n @HostBinding('attr.data-active')\n get dataActive(): '' | null {\n return this.listbox.isActive(this.id) ? '' : null;\n }\n\n @HostBinding('attr.data-selected')\n get dataSelected(): '' | null {\n return this.isSelected() ? '' : null;\n }\n\n @HostBinding('attr.data-disabled')\n get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n ngAfterViewInit() {\n const value = this.tngValue();\n if (value === undefined) return;\n\n const text = this.el.nativeElement.textContent?.trim() ?? '';\n // pass text for typeahead\n this.listbox.registerOption(this.id, value, this.disabled(), text, this.el.nativeElement);\n\n this.registered.set(true);\n }\n\n ngOnDestroy() {\n this.listbox.unregisterOption(this.id);\n this.registered.set(false);\n // Angular will destroy directive + tear down effect automatically\n }\n\n @HostListener('pointerdown', ['$event'])\n onPointerDown(event: PointerEvent) {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (event.button !== 0) return;\n\n // Prevent focus from moving / text selection, keep listbox behavior stable.\n event.preventDefault();\n\n this.listbox.handleOptionClick(this.id, event.shiftKey);\n }\n\n private isSelected(): boolean {\n if (this.listbox.isSelected(this.id)) return true;\n if (this.disabled()) return false;\n\n const value = this.tngValue();\n if (value === undefined) return false;\n\n return this.listbox.isValueSelected(value);\n }\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  export declare class TngMultiAutocompleteChip<T = unknown> {
2
3
  private readonly multi;
3
4
  private readonly el;
@@ -7,5 +8,7 @@ export declare class TngMultiAutocompleteChip<T = unknown> {
7
8
  protected readonly tabIndex = -1;
8
9
  focus(): void;
9
10
  protected onKeydown(event: KeyboardEvent): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiAutocompleteChip<any>, never>;
12
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiAutocompleteChip<any>, "[tngMultiAutocompleteChip]", ["tngMultiAutocompleteChip"], { "tngValue": { "alias": "tngValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
10
13
  }
11
14
  //# sourceMappingURL=tng-multi-autocomplete.chip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.chip.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.ts"],"names":[],"mappings":"AAYA,qBAKa,wBAAwB,CAAC,CAAC,GAAG,OAAO;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2D;IACjF,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;IAEtD,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,gDAAyB;IAG1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,yBAAyB,CAAU;IAGjE,SAAS,CAAC,QAAQ,CAAC,QAAQ,MAAM;IAEjC,KAAK,IAAI,IAAI;IAKb,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAqFhD"}
1
+ {"version":3,"file":"tng-multi-autocomplete.chip.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.ts"],"names":[],"mappings":";AAYA,qBAKa,wBAAwB,CAAC,CAAC,GAAG,OAAO;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2D;IACjF,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;IAEtD,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,gDAAyB;IAG1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,yBAAyB,CAAU;IAGjE,SAAS,CAAC,QAAQ,CAAC,QAAQ,MAAM;IAEjC,KAAK,IAAI,IAAI;IAKb,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;yCAlBpC,wBAAwB;2CAAxB,wBAAwB;CAuGpC"}
@@ -1,11 +1,11 @@
1
- import { __decorate } from "tslib";
2
1
  import { Directive, ElementRef, HostBinding, HostListener, inject, input, } from '@angular/core';
3
2
  import { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';
4
- let TngMultiAutocompleteChip = class TngMultiAutocompleteChip {
3
+ import * as i0 from "@angular/core";
4
+ export class TngMultiAutocompleteChip {
5
5
  multi = inject(TNG_MULTI_AUTOCOMPLETE);
6
6
  el = inject((ElementRef));
7
7
  /** The value represented by this chip (needed for Delete/Backspace remove). */
8
- tngValue = input(null);
8
+ tngValue = input(null, ...(ngDevMode ? [{ debugName: "tngValue" }] : []));
9
9
  dataSlot = 'multi-autocomplete-chip';
10
10
  tabIndex = -1;
11
11
  focus() {
@@ -77,22 +77,24 @@ let TngMultiAutocompleteChip = class TngMultiAutocompleteChip {
77
77
  return;
78
78
  }
79
79
  }
80
- };
81
- __decorate([
82
- HostBinding('attr.data-slot')
83
- ], TngMultiAutocompleteChip.prototype, "dataSlot", void 0);
84
- __decorate([
85
- HostBinding('attr.tabindex')
86
- ], TngMultiAutocompleteChip.prototype, "tabIndex", void 0);
87
- __decorate([
88
- HostListener('keydown', ['$event'])
89
- ], TngMultiAutocompleteChip.prototype, "onKeydown", null);
90
- TngMultiAutocompleteChip = __decorate([
91
- Directive({
92
- selector: '[tngMultiAutocompleteChip]',
93
- exportAs: 'tngMultiAutocompleteChip',
94
- standalone: true,
95
- })
96
- ], TngMultiAutocompleteChip);
97
- export { TngMultiAutocompleteChip };
80
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteChip, deps: [], target: i0.ɵɵFactoryTarget.Directive });
81
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngMultiAutocompleteChip, isStandalone: true, selector: "[tngMultiAutocompleteChip]", inputs: { tngValue: { classPropertyName: "tngValue", publicName: "tngValue", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.tabindex": "this.tabIndex" } }, exportAs: ["tngMultiAutocompleteChip"], ngImport: i0 });
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteChip, decorators: [{
84
+ type: Directive,
85
+ args: [{
86
+ selector: '[tngMultiAutocompleteChip]',
87
+ exportAs: 'tngMultiAutocompleteChip',
88
+ standalone: true,
89
+ }]
90
+ }], propDecorators: { tngValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngValue", required: false }] }], dataSlot: [{
91
+ type: HostBinding,
92
+ args: ['attr.data-slot']
93
+ }], tabIndex: [{
94
+ type: HostBinding,
95
+ args: ['attr.tabindex']
96
+ }], onKeydown: [{
97
+ type: HostListener,
98
+ args: ['keydown', ['$event']]
99
+ }] } });
98
100
  //# sourceMappingURL=tng-multi-autocomplete.chip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.chip.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n} from '@angular/core';\n\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\n\n@Directive({\n selector: '[tngMultiAutocompleteChip]',\n exportAs: 'tngMultiAutocompleteChip',\n standalone: true,\n})\nexport class TngMultiAutocompleteChip<T = unknown> {\n private readonly multi = inject<TngMultiAutocomplete<T>>(TNG_MULTI_AUTOCOMPLETE);\n private readonly el = inject(ElementRef<HTMLElement>);\n\n /** The value represented by this chip (needed for Delete/Backspace remove). */\n readonly tngValue = input<T | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-chip' as const;\n\n @HostBinding('attr.tabindex')\n protected readonly tabIndex = -1;\n\n focus(): void {\n this.el.nativeElement.focus();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n const host = this.multi.hostElement;\n\n const chips = Array.from(\n host.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const currentIndex = chips.indexOf(this.el.nativeElement);\n if (currentIndex < 0) return;\n\n // ArrowLeft → previous chip (if any)\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n event.stopPropagation();\n const prev = chips[currentIndex - 1];\n prev?.focus();\n return;\n }\n\n // ArrowRight → next chip else input trigger\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n event.stopPropagation();\n\n const next = chips[currentIndex + 1];\n if (next) {\n next.focus();\n return;\n }\n\n const input = host.querySelector('[data-slot=\"multi-autocomplete-trigger\"]') as HTMLElement | null;\n input?.focus();\n return;\n }\n\n // Delete / Backspace → remove this chip value\n if (event.key === 'Delete' || event.key === 'Backspace') {\n if (this.multi.disabled()) return;\n\n const v = this.tngValue();\n if (v == null) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n // Choose next focus target *before* removing\n const prev = chips[currentIndex - 1] ?? null;\n const next = chips[currentIndex + 1] ?? null;\n const input = host.querySelector('[data-slot=\"multi-autocomplete-trigger\"]') as HTMLElement | null;\n\n // remove selected value\n this.multi.remove(v);\n\n // focus after DOM updates\n queueMicrotask(() => {\n (prev ?? next ?? input)?.focus?.();\n });\n\n return;\n }\n\n // Home → first chip\n if (event.key === 'Home') {\n event.preventDefault();\n event.stopPropagation();\n\n const first = chips[0] ?? null;\n first?.focus();\n return;\n }\n\n // End → last chip (if any) else input trigger\n // End → input trigger (jump out of chips)\n if (event.key === 'End') {\n event.preventDefault();\n event.stopPropagation();\n\n const input = host.querySelector(\n '[data-slot=\"multi-autocomplete-trigger\"]',\n ) as HTMLElement | null;\n\n input?.focus();\n return;\n }\n }\n}"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.chip.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n} from '@angular/core';\n\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\n\n@Directive({\n selector: '[tngMultiAutocompleteChip]',\n exportAs: 'tngMultiAutocompleteChip',\n standalone: true,\n})\nexport class TngMultiAutocompleteChip<T = unknown> {\n private readonly multi = inject<TngMultiAutocomplete<T>>(TNG_MULTI_AUTOCOMPLETE);\n private readonly el = inject(ElementRef<HTMLElement>);\n\n /** The value represented by this chip (needed for Delete/Backspace remove). */\n readonly tngValue = input<T | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-chip' as const;\n\n @HostBinding('attr.tabindex')\n protected readonly tabIndex = -1;\n\n focus(): void {\n this.el.nativeElement.focus();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n const host = this.multi.hostElement;\n\n const chips = Array.from(\n host.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const currentIndex = chips.indexOf(this.el.nativeElement);\n if (currentIndex < 0) return;\n\n // ArrowLeft → previous chip (if any)\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n event.stopPropagation();\n const prev = chips[currentIndex - 1];\n prev?.focus();\n return;\n }\n\n // ArrowRight → next chip else input trigger\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n event.stopPropagation();\n\n const next = chips[currentIndex + 1];\n if (next) {\n next.focus();\n return;\n }\n\n const input = host.querySelector('[data-slot=\"multi-autocomplete-trigger\"]') as HTMLElement | null;\n input?.focus();\n return;\n }\n\n // Delete / Backspace → remove this chip value\n if (event.key === 'Delete' || event.key === 'Backspace') {\n if (this.multi.disabled()) return;\n\n const v = this.tngValue();\n if (v == null) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n // Choose next focus target *before* removing\n const prev = chips[currentIndex - 1] ?? null;\n const next = chips[currentIndex + 1] ?? null;\n const input = host.querySelector('[data-slot=\"multi-autocomplete-trigger\"]') as HTMLElement | null;\n\n // remove selected value\n this.multi.remove(v);\n\n // focus after DOM updates\n queueMicrotask(() => {\n (prev ?? next ?? input)?.focus?.();\n });\n\n return;\n }\n\n // Home → first chip\n if (event.key === 'Home') {\n event.preventDefault();\n event.stopPropagation();\n\n const first = chips[0] ?? null;\n first?.focus();\n return;\n }\n\n // End → last chip (if any) else input trigger\n // End → input trigger (jump out of chips)\n if (event.key === 'End') {\n event.preventDefault();\n event.stopPropagation();\n\n const input = host.querySelector(\n '[data-slot=\"multi-autocomplete-trigger\"]',\n ) as HTMLElement | null;\n\n input?.focus();\n return;\n }\n }\n}"]}
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  export declare class TngMultiAutocompleteContent {
2
3
  private readonly multi;
3
4
  private readonly destroyRef;
@@ -6,5 +7,7 @@ export declare class TngMultiAutocompleteContent {
6
7
  protected get hidden(): '' | null;
7
8
  protected get ariaBusy(): 'true' | null;
8
9
  constructor();
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiAutocompleteContent, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiAutocompleteContent, "[tngMultiAutocompleteContent]", ["tngMultiAutocompleteContent"], {}, {}, never, never, true, never>;
9
12
  }
10
13
  //# sourceMappingURL=tng-multi-autocomplete.content.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.content.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.ts"],"names":[],"mappings":"AAOA,qBAKa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAGjD,QAAQ,CAAC,EAAE,SAAqB;IAGhC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;;CAQF"}
1
+ {"version":3,"file":"tng-multi-autocomplete.content.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.ts"],"names":[],"mappings":";AAOA,qBAKa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAGjD,QAAQ,CAAC,EAAE,SAAqB;IAGhC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;;yCAlBU,2BAA2B;2CAA3B,2BAA2B;CA0BvC"}
@@ -1,9 +1,9 @@
1
- import { __decorate } from "tslib";
2
1
  import { DestroyRef, Directive, HostBinding, inject } from '@angular/core';
3
2
  import { createTngIdFactory } from '@tailng-ui/cdk';
4
3
  import { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';
4
+ import * as i0 from "@angular/core";
5
5
  const createContentId = createTngIdFactory('tng-multi-autocomplete-content');
6
- let TngMultiAutocompleteContent = class TngMultiAutocompleteContent {
6
+ export class TngMultiAutocompleteContent {
7
7
  multi = inject(TNG_MULTI_AUTOCOMPLETE);
8
8
  destroyRef = inject(DestroyRef);
9
9
  id = createContentId();
@@ -21,25 +21,27 @@ let TngMultiAutocompleteContent = class TngMultiAutocompleteContent {
21
21
  this.multi.setContentId(null);
22
22
  });
23
23
  }
24
- };
25
- __decorate([
26
- HostBinding('attr.id')
27
- ], TngMultiAutocompleteContent.prototype, "id", void 0);
28
- __decorate([
29
- HostBinding('attr.data-slot')
30
- ], TngMultiAutocompleteContent.prototype, "dataSlot", void 0);
31
- __decorate([
32
- HostBinding('attr.hidden')
33
- ], TngMultiAutocompleteContent.prototype, "hidden", null);
34
- __decorate([
35
- HostBinding('attr.aria-busy')
36
- ], TngMultiAutocompleteContent.prototype, "ariaBusy", null);
37
- TngMultiAutocompleteContent = __decorate([
38
- Directive({
39
- selector: '[tngMultiAutocompleteContent]',
40
- exportAs: 'tngMultiAutocompleteContent',
41
- standalone: true,
42
- })
43
- ], TngMultiAutocompleteContent);
44
- export { TngMultiAutocompleteContent };
24
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
25
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMultiAutocompleteContent, isStandalone: true, selector: "[tngMultiAutocompleteContent]", host: { properties: { "attr.id": "this.id", "attr.data-slot": "this.dataSlot", "attr.hidden": "this.hidden", "attr.aria-busy": "this.ariaBusy" } }, exportAs: ["tngMultiAutocompleteContent"], ngImport: i0 });
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteContent, decorators: [{
28
+ type: Directive,
29
+ args: [{
30
+ selector: '[tngMultiAutocompleteContent]',
31
+ exportAs: 'tngMultiAutocompleteContent',
32
+ standalone: true,
33
+ }]
34
+ }], ctorParameters: () => [], propDecorators: { id: [{
35
+ type: HostBinding,
36
+ args: ['attr.id']
37
+ }], dataSlot: [{
38
+ type: HostBinding,
39
+ args: ['attr.data-slot']
40
+ }], hidden: [{
41
+ type: HostBinding,
42
+ args: ['attr.hidden']
43
+ }], ariaBusy: [{
44
+ type: HostBinding,
45
+ args: ['attr.aria-busy']
46
+ }] } });
45
47
  //# sourceMappingURL=tng-multi-autocomplete.content.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.content.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,MAAM,eAAe,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,CAAC;AAOtE,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACrB,KAAK,GAAG,MAAM,CAAuB,sBAAsB,CAAC,CAAC;IAC7D,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAGxC,EAAE,GAAG,eAAe,EAAE,CAAC;IAGb,QAAQ,GAAG,4BAAqC,CAAC;IAGpE,IAAc,MAAM;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;IAGD,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED;QACE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AArBU;IADR,WAAW,CAAC,SAAS,CAAC;uDACS;AAGb;IADlB,WAAW,CAAC,gBAAgB,CAAC;6DACsC;AAGpE;IADC,WAAW,CAAC,aAAa,CAAC;yDAG1B;AAGD;IADC,WAAW,CAAC,gBAAgB,CAAC;2DAG7B;AAlBU,2BAA2B;IALvC,SAAS,CAAC;QACT,QAAQ,EAAE,+BAA+B;QACzC,QAAQ,EAAE,6BAA6B;QACvC,UAAU,EAAE,IAAI;KACjB,CAAC;GACW,2BAA2B,CA0BvC","sourcesContent":["import { DestroyRef, Directive, HostBinding, inject } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\n\nconst createContentId = createTngIdFactory('tng-multi-autocomplete-content');\n\n@Directive({\n selector: '[tngMultiAutocompleteContent]',\n exportAs: 'tngMultiAutocompleteContent',\n standalone: true,\n})\nexport class TngMultiAutocompleteContent {\n private readonly multi = inject<TngMultiAutocomplete>(TNG_MULTI_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 = 'multi-autocomplete-content' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.multi.open() ? null : '';\n }\n\n @HostBinding('attr.aria-busy')\n protected get ariaBusy(): 'true' | null {\n return this.multi.loading() ? 'true' : null;\n }\n\n constructor() {\n this.multi.setContentId(this.id);\n this.destroyRef.onDestroy(() => {\n if (this.multi.getContentId() === this.id) this.multi.setContentId(null);\n });\n }\n}"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.content.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;;AAGzE,MAAM,eAAe,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,CAAC;AAO7E,MAAM,OAAO,2BAA2B;IACrB,KAAK,GAAG,MAAM,CAAuB,sBAAsB,CAAC,CAAC;IAC7D,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAGxC,EAAE,GAAG,eAAe,EAAE,CAAC;IAGb,QAAQ,GAAG,4BAAqC,CAAC;IAEpE,IACc,MAAM;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,IACc,QAAQ;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED;QACE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;uGAzBU,2BAA2B;2FAA3B,2BAA2B;;2FAA3B,2BAA2B;kBALvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,+BAA+B;oBACzC,QAAQ,EAAE,6BAA6B;oBACvC,UAAU,EAAE,IAAI;iBACjB;;sBAKE,WAAW;uBAAC,SAAS;;sBAGrB,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,aAAa;;sBAKzB,WAAW;uBAAC,gBAAgB","sourcesContent":["import { DestroyRef, Directive, HostBinding, inject } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\n\nconst createContentId = createTngIdFactory('tng-multi-autocomplete-content');\n\n@Directive({\n selector: '[tngMultiAutocompleteContent]',\n exportAs: 'tngMultiAutocompleteContent',\n standalone: true,\n})\nexport class TngMultiAutocompleteContent {\n private readonly multi = inject<TngMultiAutocomplete>(TNG_MULTI_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 = 'multi-autocomplete-content' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.multi.open() ? null : '';\n }\n\n @HostBinding('attr.aria-busy')\n protected get ariaBusy(): 'true' | null {\n return this.multi.loading() ? 'true' : null;\n }\n\n constructor() {\n this.multi.setContentId(this.id);\n this.destroyRef.onDestroy(() => {\n if (this.multi.getContentId() === this.id) this.multi.setContentId(null);\n });\n }\n}"]}
@@ -1,4 +1,5 @@
1
1
  import type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';
2
+ import * as i0 from "@angular/core";
2
3
  export declare class TngMultiAutocomplete<T = unknown> {
3
4
  readonly hostElement: any;
4
5
  /** Whether overlay is open. */
@@ -39,5 +40,7 @@ export declare class TngMultiAutocomplete<T = unknown> {
39
40
  getActiveDescendantId(): string | null;
40
41
  setListboxApi(api: TngMultiAutocompleteListboxApi | null): void;
41
42
  getListboxApi(): TngMultiAutocompleteListboxApi | null;
43
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiAutocomplete<any>, never>;
44
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiAutocomplete<any>, "[tngMultiAutocomplete]", ["tngMultiAutocomplete"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "query": { "alias": "query"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "value": "valueChange"; "query": "queryChange"; "queryChange": "queryChange"; }, never, never, true, never>;
42
45
  }
43
46
  //# sourceMappingURL=tng-multi-autocomplete.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAE7F,qBAMa,oBAAoB,CAAC,CAAC,GAAG,OAAO;IAC3C,QAAQ,CAAC,WAAW,MAAiD;IAErE,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,+CAAyB;IAEtC,sBAAsB;IACtB,QAAQ,CAAC,QAAQ,+CAAyB;IAE1C,sCAAsC;IACtC,QAAQ,CAAC,KAAK,oDAA2B;IAEzC,gDAAgD;IAChD,QAAQ,CAAC,KAAK,8CAAqB;IAEnC,oFAAoF;IACpF,QAAQ,CAAC,WAAW,mDAAoB;IAExC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,+CAAyB;IACzC,QAAQ,CAAC,OAAO,+CAAyB;IAGzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA+C;IAKlE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,oBAAoB,CAAU;IAG5D,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAID,UAAU,IAAI,IAAI;IAKlB,KAAK,IAAI,IAAI;IAIb,UAAU,IAAI,IAAI;IASlB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAUnB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAWtB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAatB,KAAK,IAAI,IAAI;IAKb,UAAU,IAAI,IAAI;IAalB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,aAAa,CAAC,GAAG,EAAE,8BAA8B,GAAG,IAAI,GAAG,IAAI;IAG/D,aAAa,IAAI,8BAA8B,GAAG,IAAI;CAGvD"}
1
+ {"version":3,"file":"tng-multi-autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;;AAE7F,qBAMa,oBAAoB,CAAC,CAAC,GAAG,OAAO;IAC3C,QAAQ,CAAC,WAAW,MAAiD;IAErE,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,+CAAyB;IAEtC,sBAAsB;IACtB,QAAQ,CAAC,QAAQ,+CAAyB;IAE1C,sCAAsC;IACtC,QAAQ,CAAC,KAAK,oDAA2B;IAEzC,gDAAgD;IAChD,QAAQ,CAAC,KAAK,8CAAqB;IAEnC,oFAAoF;IACpF,QAAQ,CAAC,WAAW,mDAAoB;IAExC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,+CAAyB;IACzC,QAAQ,CAAC,OAAO,+CAAyB;IAGzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA+C;IAKlE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,oBAAoB,CAAU;IAG5D,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAID,UAAU,IAAI,IAAI;IAKlB,KAAK,IAAI,IAAI;IAIb,UAAU,IAAI,IAAI;IASlB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAUnB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAWtB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAatB,KAAK,IAAI,IAAI;IAKb,UAAU,IAAI,IAAI;IAalB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,aAAa,CAAC,GAAG,EAAE,8BAA8B,GAAG,IAAI,GAAG,IAAI;IAG/D,aAAa,IAAI,8BAA8B,GAAG,IAAI;yCArJ3C,oBAAoB;2CAApB,oBAAoB;CAwJhC"}