@tailng-ui/primitives 0.11.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 (274) hide show
  1. package/README.md +97 -11
  2. package/package.json +12 -6
  3. package/src/lib/feedback/empty/tng-empty.d.ts +11 -0
  4. package/src/lib/feedback/empty/tng-empty.d.ts.map +1 -1
  5. package/src/lib/feedback/empty/tng-empty.js +76 -61
  6. package/src/lib/feedback/empty/tng-empty.js.map +1 -1
  7. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts +5 -0
  8. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts.map +1 -1
  9. package/src/lib/feedback/progress-bar/tng-progress-bar.js +50 -52
  10. package/src/lib/feedback/progress-bar/tng-progress-bar.js.map +1 -1
  11. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts +3 -0
  12. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts.map +1 -1
  13. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js +35 -40
  14. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js.map +1 -1
  15. package/src/lib/feedback/skeleton/tng-skeleton.d.ts +3 -0
  16. package/src/lib/feedback/skeleton/tng-skeleton.d.ts.map +1 -1
  17. package/src/lib/feedback/skeleton/tng-skeleton.js +30 -31
  18. package/src/lib/feedback/skeleton/tng-skeleton.js.map +1 -1
  19. package/src/lib/feedback/toast/tng-toast.d.ts +5 -0
  20. package/src/lib/feedback/toast/tng-toast.d.ts.map +1 -1
  21. package/src/lib/feedback/toast/tng-toast.js +51 -47
  22. package/src/lib/feedback/toast/tng-toast.js.map +1 -1
  23. package/src/lib/form/_shared/id/tng-unique-id.service.d.ts +3 -0
  24. package/src/lib/form/_shared/id/tng-unique-id.service.d.ts.map +1 -1
  25. package/src/lib/form/_shared/id/tng-unique-id.service.js +9 -7
  26. package/src/lib/form/_shared/id/tng-unique-id.service.js.map +1 -1
  27. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts +3 -0
  28. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts.map +1 -1
  29. package/src/lib/form/_shared/select/tng-select.overlay.shared.js +22 -20
  30. package/src/lib/form/_shared/select/tng-select.overlay.shared.js.map +1 -1
  31. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts +9 -0
  32. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts.map +1 -1
  33. package/src/lib/form/_shared/select/tng-select.parts.shared.js +106 -98
  34. package/src/lib/form/_shared/select/tng-select.parts.shared.js.map +1 -1
  35. package/src/lib/form/autocomplete/tng-autocomplete.d.ts +3 -0
  36. package/src/lib/form/autocomplete/tng-autocomplete.d.ts.map +1 -1
  37. package/src/lib/form/autocomplete/tng-autocomplete.js +40 -38
  38. package/src/lib/form/autocomplete/tng-autocomplete.js.map +1 -1
  39. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts +6 -0
  40. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts.map +1 -1
  41. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js +54 -46
  42. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js.map +1 -1
  43. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts +3 -0
  44. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts.map +1 -1
  45. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js +22 -20
  46. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js.map +1 -1
  47. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts +9 -0
  48. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts.map +1 -1
  49. package/src/lib/form/autocomplete/tng-autocomplete.parts.js +109 -101
  50. package/src/lib/form/autocomplete/tng-autocomplete.parts.js.map +1 -1
  51. package/src/lib/form/button-toggle/tng-button-toggle.d.ts +5 -0
  52. package/src/lib/form/button-toggle/tng-button-toggle.d.ts.map +1 -1
  53. package/src/lib/form/button-toggle/tng-button-toggle.js +121 -155
  54. package/src/lib/form/button-toggle/tng-button-toggle.js.map +1 -1
  55. package/src/lib/form/checkbox/tng-checkbox.d.ts +3 -0
  56. package/src/lib/form/checkbox/tng-checkbox.d.ts.map +1 -1
  57. package/src/lib/form/checkbox/tng-checkbox.js +95 -106
  58. package/src/lib/form/checkbox/tng-checkbox.js.map +1 -1
  59. package/src/lib/form/chips/tng-chips.d.ts +7 -0
  60. package/src/lib/form/chips/tng-chips.d.ts.map +1 -1
  61. package/src/lib/form/chips/tng-chips.js +107 -112
  62. package/src/lib/form/chips/tng-chips.js.map +1 -1
  63. package/src/lib/form/combobox/tng-combobox.d.ts +3 -0
  64. package/src/lib/form/combobox/tng-combobox.d.ts.map +1 -1
  65. package/src/lib/form/combobox/tng-combobox.js +16 -13
  66. package/src/lib/form/combobox/tng-combobox.js.map +1 -1
  67. package/src/lib/form/input/tng-input.d.ts +9 -0
  68. package/src/lib/form/input/tng-input.d.ts.map +1 -1
  69. package/src/lib/form/input/tng-input.js +161 -141
  70. package/src/lib/form/input/tng-input.js.map +1 -1
  71. package/src/lib/form/input-otp/tng-input-otp.d.ts +3 -0
  72. package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -1
  73. package/src/lib/form/input-otp/tng-input-otp.js +58 -69
  74. package/src/lib/form/input-otp/tng-input-otp.js.map +1 -1
  75. package/src/lib/form/label/tng-label.d.ts +3 -0
  76. package/src/lib/form/label/tng-label.d.ts.map +1 -1
  77. package/src/lib/form/label/tng-label.js +24 -25
  78. package/src/lib/form/label/tng-label.js.map +1 -1
  79. package/src/lib/form/listbox/listbox.directive.d.ts +3 -0
  80. package/src/lib/form/listbox/listbox.directive.d.ts.map +1 -1
  81. package/src/lib/form/listbox/listbox.directive.js +45 -43
  82. package/src/lib/form/listbox/listbox.directive.js.map +1 -1
  83. package/src/lib/form/listbox/option.directive.d.ts +3 -0
  84. package/src/lib/form/listbox/option.directive.d.ts.map +1 -1
  85. package/src/lib/form/listbox/option.directive.js +40 -38
  86. package/src/lib/form/listbox/option.directive.js.map +1 -1
  87. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts +3 -0
  88. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts.map +1 -1
  89. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js +23 -21
  90. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js.map +1 -1
  91. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts +3 -0
  92. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts.map +1 -1
  93. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js +25 -23
  94. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js.map +1 -1
  95. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts +3 -0
  96. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts.map +1 -1
  97. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js +35 -33
  98. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js.map +1 -1
  99. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts +6 -0
  100. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts.map +1 -1
  101. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js +57 -46
  102. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js.map +1 -1
  103. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts +3 -0
  104. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts.map +1 -1
  105. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js +16 -14
  106. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js.map +1 -1
  107. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts +3 -0
  108. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts.map +1 -1
  109. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js +52 -50
  110. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js.map +1 -1
  111. package/src/lib/form/multi-select/tng-multi-select.d.ts +3 -0
  112. package/src/lib/form/multi-select/tng-multi-select.d.ts.map +1 -1
  113. package/src/lib/form/multi-select/tng-multi-select.js +41 -36
  114. package/src/lib/form/multi-select/tng-multi-select.js.map +1 -1
  115. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts +6 -0
  116. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts.map +1 -1
  117. package/src/lib/form/multi-select/tng-multi-select.listbox.js +50 -45
  118. package/src/lib/form/multi-select/tng-multi-select.listbox.js.map +1 -1
  119. package/src/lib/form/multiselect/tng-multiselect.d.ts +3 -0
  120. package/src/lib/form/multiselect/tng-multiselect.d.ts.map +1 -1
  121. package/src/lib/form/multiselect/tng-multiselect.js +16 -13
  122. package/src/lib/form/multiselect/tng-multiselect.js.map +1 -1
  123. package/src/lib/form/radio/tng-radio.d.ts +3 -0
  124. package/src/lib/form/radio/tng-radio.d.ts.map +1 -1
  125. package/src/lib/form/radio/tng-radio.js +91 -100
  126. package/src/lib/form/radio/tng-radio.js.map +1 -1
  127. package/src/lib/form/select/tng-select.d.ts +3 -0
  128. package/src/lib/form/select/tng-select.d.ts.map +1 -1
  129. package/src/lib/form/select/tng-select.js +41 -36
  130. package/src/lib/form/select/tng-select.js.map +1 -1
  131. package/src/lib/form/select/tng-select.listbox.d.ts +6 -0
  132. package/src/lib/form/select/tng-select.listbox.d.ts.map +1 -1
  133. package/src/lib/form/select/tng-select.listbox.js +50 -45
  134. package/src/lib/form/select/tng-select.listbox.js.map +1 -1
  135. package/src/lib/form/slider/tng-slider.d.ts +3 -0
  136. package/src/lib/form/slider/tng-slider.d.ts.map +1 -1
  137. package/src/lib/form/slider/tng-slider.js +42 -49
  138. package/src/lib/form/slider/tng-slider.js.map +1 -1
  139. package/src/lib/form/switch/tng-switch.d.ts +3 -0
  140. package/src/lib/form/switch/tng-switch.d.ts.map +1 -1
  141. package/src/lib/form/switch/tng-switch.js +44 -47
  142. package/src/lib/form/switch/tng-switch.js.map +1 -1
  143. package/src/lib/form/textarea/tng-textarea.d.ts +4 -0
  144. package/src/lib/form/textarea/tng-textarea.d.ts.map +1 -1
  145. package/src/lib/form/textarea/tng-textarea.js +40 -41
  146. package/src/lib/form/textarea/tng-textarea.js.map +1 -1
  147. package/src/lib/form/toggle/tng-toggle.d.ts +3 -0
  148. package/src/lib/form/toggle/tng-toggle.d.ts.map +1 -1
  149. package/src/lib/form/toggle/tng-toggle.js +71 -74
  150. package/src/lib/form/toggle/tng-toggle.js.map +1 -1
  151. package/src/lib/form/toggle-group/tng-toggle-group.d.ts +3 -0
  152. package/src/lib/form/toggle-group/tng-toggle-group.d.ts.map +1 -1
  153. package/src/lib/form/toggle-group/tng-toggle-group.js +48 -49
  154. package/src/lib/form/toggle-group/tng-toggle-group.js.map +1 -1
  155. package/src/lib/layout/accordion/tng-accordion.d.ts +9 -0
  156. package/src/lib/layout/accordion/tng-accordion.d.ts.map +1 -1
  157. package/src/lib/layout/accordion/tng-accordion.js +143 -155
  158. package/src/lib/layout/accordion/tng-accordion.js.map +1 -1
  159. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts +3 -0
  160. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts.map +1 -1
  161. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js +16 -13
  162. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js.map +1 -1
  163. package/src/lib/layout/card/tng-card.d.ts +21 -0
  164. package/src/lib/layout/card/tng-card.d.ts.map +1 -1
  165. package/src/lib/layout/card/tng-card.js +151 -121
  166. package/src/lib/layout/card/tng-card.js.map +1 -1
  167. package/src/lib/layout/collapsible/tng-collapsible.d.ts +7 -0
  168. package/src/lib/layout/collapsible/tng-collapsible.d.ts.map +1 -1
  169. package/src/lib/layout/collapsible/tng-collapsible.js +82 -83
  170. package/src/lib/layout/collapsible/tng-collapsible.js.map +1 -1
  171. package/src/lib/layout/drawer/tng-drawer.d.ts +13 -0
  172. package/src/lib/layout/drawer/tng-drawer.d.ts.map +1 -1
  173. package/src/lib/layout/drawer/tng-drawer.js +217 -226
  174. package/src/lib/layout/drawer/tng-drawer.js.map +1 -1
  175. package/src/lib/layout/grid/tng-grid.d.ts +3 -0
  176. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
  177. package/src/lib/layout/grid/tng-grid.js +16 -13
  178. package/src/lib/layout/grid/tng-grid.js.map +1 -1
  179. package/src/lib/layout/separator/tng-separator.d.ts +3 -0
  180. package/src/lib/layout/separator/tng-separator.d.ts.map +1 -1
  181. package/src/lib/layout/separator/tng-separator.js +30 -29
  182. package/src/lib/layout/separator/tng-separator.js.map +1 -1
  183. package/src/lib/layout/stepper/tng-stepper.d.ts +3 -0
  184. package/src/lib/layout/stepper/tng-stepper.d.ts.map +1 -1
  185. package/src/lib/layout/stepper/tng-stepper.js +16 -13
  186. package/src/lib/layout/stepper/tng-stepper.js.map +1 -1
  187. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts +3 -0
  188. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
  189. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +54 -11
  190. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
  191. package/src/lib/layout/tree/tng-tree-group.d.ts +3 -0
  192. package/src/lib/layout/tree/tng-tree-group.d.ts.map +1 -1
  193. package/src/lib/layout/tree/tng-tree-group.js +19 -17
  194. package/src/lib/layout/tree/tng-tree-group.js.map +1 -1
  195. package/src/lib/layout/tree/tng-tree-indicator.d.ts +3 -0
  196. package/src/lib/layout/tree/tng-tree-indicator.d.ts.map +1 -1
  197. package/src/lib/layout/tree/tng-tree-indicator.js +22 -20
  198. package/src/lib/layout/tree/tng-tree-indicator.js.map +1 -1
  199. package/src/lib/layout/tree/tng-tree-item.d.ts +3 -0
  200. package/src/lib/layout/tree/tng-tree-item.d.ts.map +1 -1
  201. package/src/lib/layout/tree/tng-tree-item.js +47 -53
  202. package/src/lib/layout/tree/tng-tree-item.js.map +1 -1
  203. package/src/lib/layout/tree/tng-tree.d.ts +3 -0
  204. package/src/lib/layout/tree/tng-tree.d.ts.map +1 -1
  205. package/src/lib/layout/tree/tng-tree.js +39 -43
  206. package/src/lib/layout/tree/tng-tree.js.map +1 -1
  207. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts +11 -0
  208. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts.map +1 -1
  209. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js +79 -64
  210. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js.map +1 -1
  211. package/src/lib/navigation/context-menu/tng-context-menu.d.ts +5 -0
  212. package/src/lib/navigation/context-menu/tng-context-menu.d.ts.map +1 -1
  213. package/src/lib/navigation/context-menu/tng-context-menu.js +44 -42
  214. package/src/lib/navigation/context-menu/tng-context-menu.js.map +1 -1
  215. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts +3 -0
  216. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts.map +1 -1
  217. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js +16 -13
  218. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js.map +1 -1
  219. package/src/lib/navigation/menu/tng-menu.d.ts +13 -0
  220. package/src/lib/navigation/menu/tng-menu.d.ts.map +1 -1
  221. package/src/lib/navigation/menu/tng-menu.js +184 -186
  222. package/src/lib/navigation/menu/tng-menu.js.map +1 -1
  223. package/src/lib/navigation/menubar/tng-menubar.d.ts +5 -0
  224. package/src/lib/navigation/menubar/tng-menubar.d.ts.map +1 -1
  225. package/src/lib/navigation/menubar/tng-menubar.js +72 -70
  226. package/src/lib/navigation/menubar/tng-menubar.js.map +1 -1
  227. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts +3 -0
  228. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts.map +1 -1
  229. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js +16 -13
  230. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js.map +1 -1
  231. package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -0
  232. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
  233. package/src/lib/navigation/tabs/tng-tabs.js +234 -258
  234. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
  235. package/src/lib/navigation/toolbar/tng-toolbar.d.ts +3 -0
  236. package/src/lib/navigation/toolbar/tng-toolbar.d.ts.map +1 -1
  237. package/src/lib/navigation/toolbar/tng-toolbar.js +16 -13
  238. package/src/lib/navigation/toolbar/tng-toolbar.js.map +1 -1
  239. package/src/lib/overlay/dialog/tng-dialog.d.ts +19 -0
  240. package/src/lib/overlay/dialog/tng-dialog.d.ts.map +1 -1
  241. package/src/lib/overlay/dialog/tng-dialog.js +249 -255
  242. package/src/lib/overlay/dialog/tng-dialog.js.map +1 -1
  243. package/src/lib/overlay/popover/tng-popover.d.ts +9 -0
  244. package/src/lib/overlay/popover/tng-popover.d.ts.map +1 -1
  245. package/src/lib/overlay/popover/tng-popover.js +152 -170
  246. package/src/lib/overlay/popover/tng-popover.js.map +1 -1
  247. package/src/lib/overlay/tooltip/tng-tooltip.d.ts +7 -0
  248. package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -1
  249. package/src/lib/overlay/tooltip/tng-tooltip.js +124 -127
  250. package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -1
  251. package/src/lib/utility/avatar/tng-avatar.d.ts +7 -0
  252. package/src/lib/utility/avatar/tng-avatar.d.ts.map +1 -1
  253. package/src/lib/utility/avatar/tng-avatar.js +46 -37
  254. package/src/lib/utility/avatar/tng-avatar.js.map +1 -1
  255. package/src/lib/utility/badge/tng-badge.d.ts +3 -0
  256. package/src/lib/utility/badge/tng-badge.d.ts.map +1 -1
  257. package/src/lib/utility/badge/tng-badge.js +26 -39
  258. package/src/lib/utility/badge/tng-badge.js.map +1 -1
  259. package/src/lib/utility/code-block/tng-code-block.d.ts +11 -0
  260. package/src/lib/utility/code-block/tng-code-block.d.ts.map +1 -1
  261. package/src/lib/utility/code-block/tng-code-block.js +76 -61
  262. package/src/lib/utility/code-block/tng-code-block.js.map +1 -1
  263. package/src/lib/utility/copy/tng-copy.d.ts +3 -0
  264. package/src/lib/utility/copy/tng-copy.d.ts.map +1 -1
  265. package/src/lib/utility/copy/tng-copy.js +44 -51
  266. package/src/lib/utility/copy/tng-copy.js.map +1 -1
  267. package/src/lib/utility/press/tng-press.d.ts +3 -0
  268. package/src/lib/utility/press/tng-press.d.ts.map +1 -1
  269. package/src/lib/utility/press/tng-press.js +55 -60
  270. package/src/lib/utility/press/tng-press.js.map +1 -1
  271. package/src/lib/utility/tag/tng-tag.d.ts +7 -0
  272. package/src/lib/utility/tag/tng-tag.d.ts.map +1 -1
  273. package/src/lib/utility/tag/tng-tag.js +94 -93
  274. package/src/lib/utility/tag/tng-tag.js.map +1 -1
@@ -1,21 +1,21 @@
1
- import { __decorate } from "tslib";
2
1
  import { Directive, ElementRef, HostBinding, inject, input, model, output, } from '@angular/core';
3
2
  import { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';
4
- let TngMultiAutocomplete = class TngMultiAutocomplete {
3
+ import * as i0 from "@angular/core";
4
+ export class TngMultiAutocomplete {
5
5
  hostElement = inject((ElementRef)).nativeElement;
6
6
  /** Whether overlay is open. */
7
- open = model(false);
7
+ open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
8
8
  /** Disabled state. */
9
- disabled = input(false);
9
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
10
10
  /** Selected values (always array). */
11
- value = model([]);
11
+ value = model([], ...(ngDevMode ? [{ debugName: "value" }] : []));
12
12
  /** Current input query (used for filtering). */
13
- query = model('');
13
+ query = model('', ...(ngDevMode ? [{ debugName: "query" }] : []));
14
14
  /** Emits whenever query changes (focus-open emit, typing, selection-clear, etc.) */
15
15
  queryChange = output();
16
16
  /** Optional states (styling/aria). */
17
- loading = input(false);
18
- invalid = input(false);
17
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
18
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
19
19
  // ---- internal bridge state ----
20
20
  _contentId = null;
21
21
  _listboxId = null;
@@ -122,29 +122,31 @@ let TngMultiAutocomplete = class TngMultiAutocomplete {
122
122
  getListboxApi() {
123
123
  return this._listboxApi;
124
124
  }
125
- };
126
- __decorate([
127
- HostBinding('attr.data-slot')
128
- ], TngMultiAutocomplete.prototype, "dataSlot", void 0);
129
- __decorate([
130
- HostBinding('attr.data-state')
131
- ], TngMultiAutocomplete.prototype, "dataState", null);
132
- __decorate([
133
- HostBinding('attr.data-disabled')
134
- ], TngMultiAutocomplete.prototype, "dataDisabled", null);
135
- __decorate([
136
- HostBinding('attr.data-loading')
137
- ], TngMultiAutocomplete.prototype, "dataLoading", null);
138
- __decorate([
139
- HostBinding('attr.data-invalid')
140
- ], TngMultiAutocomplete.prototype, "dataInvalid", null);
141
- TngMultiAutocomplete = __decorate([
142
- Directive({
143
- selector: '[tngMultiAutocomplete]',
144
- exportAs: 'tngMultiAutocomplete',
145
- standalone: true,
146
- providers: [{ provide: TNG_MULTI_AUTOCOMPLETE, useExisting: TngMultiAutocomplete }],
147
- })
148
- ], TngMultiAutocomplete);
149
- export { TngMultiAutocomplete };
125
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocomplete, deps: [], target: i0.ɵɵFactoryTarget.Directive });
126
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngMultiAutocomplete, isStandalone: true, selector: "[tngMultiAutocomplete]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", value: "valueChange", query: "queryChange", queryChange: "queryChange" }, host: { properties: { "attr.data-slot": "this.dataSlot", "attr.data-state": "this.dataState", "attr.data-disabled": "this.dataDisabled", "attr.data-loading": "this.dataLoading", "attr.data-invalid": "this.dataInvalid" } }, providers: [{ provide: TNG_MULTI_AUTOCOMPLETE, useExisting: TngMultiAutocomplete }], exportAs: ["tngMultiAutocomplete"], ngImport: i0 });
127
+ }
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocomplete, decorators: [{
129
+ type: Directive,
130
+ args: [{
131
+ selector: '[tngMultiAutocomplete]',
132
+ exportAs: 'tngMultiAutocomplete',
133
+ standalone: true,
134
+ providers: [{ provide: TNG_MULTI_AUTOCOMPLETE, useExisting: TngMultiAutocomplete }],
135
+ }]
136
+ }], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], query: [{ type: i0.Input, args: [{ isSignal: true, alias: "query", required: false }] }, { type: i0.Output, args: ["queryChange"] }], queryChange: [{ type: i0.Output, args: ["queryChange"] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], dataSlot: [{
137
+ type: HostBinding,
138
+ args: ['attr.data-slot']
139
+ }], dataState: [{
140
+ type: HostBinding,
141
+ args: ['attr.data-state']
142
+ }], dataDisabled: [{
143
+ type: HostBinding,
144
+ args: ['attr.data-disabled']
145
+ }], dataLoading: [{
146
+ type: HostBinding,
147
+ args: ['attr.data-loading']
148
+ }], dataInvalid: [{
149
+ type: HostBinding,
150
+ args: ['attr.data-invalid']
151
+ }] } });
150
152
  //# sourceMappingURL=tng-multi-autocomplete.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\n@Directive({\n selector: '[tngMultiAutocomplete]',\n exportAs: 'tngMultiAutocomplete',\n standalone: true,\n providers: [{ provide: TNG_MULTI_AUTOCOMPLETE, useExisting: TngMultiAutocomplete }],\n})\nexport class TngMultiAutocomplete<T = unknown> {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n /** Whether overlay is open. */\n readonly open = model<boolean>(false);\n\n /** Disabled state. */\n readonly disabled = input<boolean>(false);\n\n /** Selected values (always array). */\n readonly value = model<readonly T[]>([]);\n\n /** Current input query (used for filtering). */\n readonly query = model<string>('');\n\n /** Emits whenever query changes (focus-open emit, typing, selection-clear, etc.) */\n readonly queryChange = output<string>();\n\n /** Optional states (styling/aria). */\n readonly loading = input<boolean>(false);\n readonly invalid = input<boolean>(false);\n\n // ---- internal bridge state ----\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiAutocompleteListboxApi | null = null;\n\n // ---- host styling hooks ----\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete' as const;\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n // ---- overlay control ----\n\n openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n\n close(): void {\n this.open.set(false);\n }\n\n toggleOpen(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n // =========================================================\n // Selection API\n // =========================================================\n\n add(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const exists = current.some((v) => Object.is(v, value));\n if (exists) return;\n\n this.value.set([...current, value]);\n }\n\n remove(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const next = current.filter((v) => !Object.is(v, value));\n\n if (next.length !== current.length) {\n this.value.set(next);\n }\n }\n\n toggle(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const exists = current.some((v) => Object.is(v, value));\n\n if (exists) {\n this.value.set(current.filter((v) => !Object.is(v, value)));\n } else {\n this.value.set([...current, value]);\n }\n }\n\n clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n removeLast(): void {\n if (this.disabled()) return;\n\n const current = this.value();\n if (current.length === 0) return;\n\n this.value.set(current.slice(0, -1));\n }\n\n // =========================================================\n // Listbox bridge\n // =========================================================\n\n setContentId(id: string | null): void {\n this._contentId = id;\n }\n getContentId(): string | null {\n return this._contentId;\n }\n\n setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n getListboxId(): string | null {\n return this._listboxId;\n }\n\n setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n setListboxApi(api: TngMultiAutocompleteListboxApi | null): void {\n this._listboxApi = api;\n }\n getListboxApi(): TngMultiAutocompleteListboxApi | null {\n return this._listboxApi;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\n@Directive({\n selector: '[tngMultiAutocomplete]',\n exportAs: 'tngMultiAutocomplete',\n standalone: true,\n providers: [{ provide: TNG_MULTI_AUTOCOMPLETE, useExisting: TngMultiAutocomplete }],\n})\nexport class TngMultiAutocomplete<T = unknown> {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n /** Whether overlay is open. */\n readonly open = model<boolean>(false);\n\n /** Disabled state. */\n readonly disabled = input<boolean>(false);\n\n /** Selected values (always array). */\n readonly value = model<readonly T[]>([]);\n\n /** Current input query (used for filtering). */\n readonly query = model<string>('');\n\n /** Emits whenever query changes (focus-open emit, typing, selection-clear, etc.) */\n readonly queryChange = output<string>();\n\n /** Optional states (styling/aria). */\n readonly loading = input<boolean>(false);\n readonly invalid = input<boolean>(false);\n\n // ---- internal bridge state ----\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiAutocompleteListboxApi | null = null;\n\n // ---- host styling hooks ----\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete' as const;\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n // ---- overlay control ----\n\n openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n\n close(): void {\n this.open.set(false);\n }\n\n toggleOpen(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n // =========================================================\n // Selection API\n // =========================================================\n\n add(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const exists = current.some((v) => Object.is(v, value));\n if (exists) return;\n\n this.value.set([...current, value]);\n }\n\n remove(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const next = current.filter((v) => !Object.is(v, value));\n\n if (next.length !== current.length) {\n this.value.set(next);\n }\n }\n\n toggle(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const exists = current.some((v) => Object.is(v, value));\n\n if (exists) {\n this.value.set(current.filter((v) => !Object.is(v, value)));\n } else {\n this.value.set([...current, value]);\n }\n }\n\n clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n removeLast(): void {\n if (this.disabled()) return;\n\n const current = this.value();\n if (current.length === 0) return;\n\n this.value.set(current.slice(0, -1));\n }\n\n // =========================================================\n // Listbox bridge\n // =========================================================\n\n setContentId(id: string | null): void {\n this._contentId = id;\n }\n getContentId(): string | null {\n return this._contentId;\n }\n\n setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n getListboxId(): string | null {\n return this._listboxId;\n }\n\n setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n setListboxApi(api: TngMultiAutocompleteListboxApi | null): void {\n this._listboxApi = api;\n }\n getListboxApi(): TngMultiAutocompleteListboxApi | null {\n return this._listboxApi;\n }\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@tailng-ui/primitives";
2
4
  export declare class TngMultiAutocompleteListbox<T = unknown> implements TngMultiAutocompleteListboxApi<T> {
3
5
  private readonly multi;
4
6
  private readonly destroyRef;
@@ -13,8 +15,12 @@ export declare class TngMultiAutocompleteListbox<T = unknown> implements TngMult
13
15
  commitActive(): void;
14
16
  protected onListboxValueChange(value: T | readonly T[] | null): void;
15
17
  getValue?(): readonly T[];
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiAutocompleteListbox<any>, never>;
19
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiAutocompleteListbox<any>, "[tngMultiAutocompleteListbox]", never, {}, {}, never, never, true, [{ directive: typeof i1.TngListboxDirective; inputs: { "orientation": "orientation"; "direction": "direction"; "disabled": "disabled"; "loop": "loop"; "value": "value"; }; outputs: { "valueChange": "valueChange"; }; }]>;
16
20
  }
17
21
  export declare class TngMultiAutocompleteOption<T = unknown> {
18
22
  protected readonly dataSlot: "multi-autocomplete-option";
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiAutocompleteOption<any>, never>;
24
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiAutocompleteOption<any>, "[tngMultiAutocompleteOption]", never, {}, {}, never, never, true, [{ directive: typeof i1.TngOptionDirective; inputs: { "tngValue": "tngValue"; "disabled": "disabled"; }; outputs: {}; }]>;
19
25
  }
20
26
  //# sourceMappingURL=tng-multi-autocomplete.listbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAI7F,qBAkBa,2BAA2B,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,8BAA8B,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2D;IACjF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuC1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,YAAY,IAAI,IAAI;IAUpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;IAsBpE,QAAQ,CAAC,IAAI,SAAS,CAAC,EAAE;CAK1B;AAED,qBAUa,0BAA0B,CAAC,CAAC,GAAG,OAAO;IAEjD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,2BAA2B,CAAU;CACpE"}
1
+ {"version":3,"file":"tng-multi-autocomplete.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;;;AAI7F,qBAkBa,2BAA2B,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,8BAA8B,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2D;IACjF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuC1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,YAAY,IAAI,IAAI;IAUpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;IAsBpE,QAAQ,CAAC,IAAI,SAAS,CAAC,EAAE;yCAhGd,2BAA2B;2CAA3B,2BAA2B;CAqGvC;AAED,qBAUa,0BAA0B,CAAC,CAAC,GAAG,OAAO;IAEjD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,2BAA2B,CAAU;yCAFxD,0BAA0B;2CAA1B,0BAA0B;CAGtC"}
@@ -1,12 +1,13 @@
1
- import { __decorate } from "tslib";
2
1
  // libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts
3
2
  import { DestroyRef, Directive, HostBinding, HostListener, effect, inject, untracked, } from '@angular/core';
4
3
  import { createTngIdFactory } from '@tailng-ui/cdk';
5
4
  import { TNG_LISTBOX_FORCE_TYPEAHEAD, TNG_LISTBOX_FORCE_MULTIPLE, TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, TngListboxDirective, TngOptionDirective, } from '@tailng-ui/primitives';
6
5
  import { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';
7
6
  import { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@tailng-ui/primitives";
8
9
  const createListboxId = createTngIdFactory('tng-multi-autocomplete-listbox');
9
- let TngMultiAutocompleteListbox = class TngMultiAutocompleteListbox {
10
+ export class TngMultiAutocompleteListbox {
10
11
  multi = inject(TNG_MULTI_AUTOCOMPLETE);
11
12
  destroyRef = inject(DestroyRef);
12
13
  listbox = inject((TngListboxDirective), { self: true });
@@ -85,54 +86,64 @@ let TngMultiAutocompleteListbox = class TngMultiAutocompleteListbox {
85
86
  return [];
86
87
  return Array.isArray(v) ? v : [v];
87
88
  }
88
- };
89
- __decorate([
90
- HostBinding('attr.data-slot')
91
- ], TngMultiAutocompleteListbox.prototype, "dataSlot", void 0);
92
- __decorate([
93
- HostBinding('attr.id')
94
- ], TngMultiAutocompleteListbox.prototype, "id", void 0);
95
- __decorate([
96
- HostListener('valueChange', ['$event'])
97
- ], TngMultiAutocompleteListbox.prototype, "onListboxValueChange", null);
98
- TngMultiAutocompleteListbox = __decorate([
99
- Directive({
100
- selector: '[tngMultiAutocompleteListbox]',
101
- standalone: true,
102
- providers: [
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteListbox, deps: [], target: i0.ɵɵFactoryTarget.Directive });
90
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMultiAutocompleteListbox, isStandalone: true, selector: "[tngMultiAutocompleteListbox]", host: { listeners: { "valueChange": "onListboxValueChange($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.id": "this.id" } }, providers: [
103
91
  { provide: TNG_MULTI_AUTOCOMPLETE_LISTBOX, useExisting: TngMultiAutocompleteListbox },
104
92
  // Multi-autocomplete typing happens in the input. Listbox must NOT typeahead.
105
93
  { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },
106
94
  { provide: TNG_LISTBOX_FORCE_MULTIPLE, useValue: true },
107
95
  { provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },
108
- ],
109
- hostDirectives: [
110
- {
111
- directive: TngListboxDirective,
112
- inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],
113
- outputs: ['valueChange'],
114
- },
115
- ],
116
- })
117
- ], TngMultiAutocompleteListbox);
118
- export { TngMultiAutocompleteListbox };
119
- let TngMultiAutocompleteOption = class TngMultiAutocompleteOption {
96
+ ], hostDirectives: [{ directive: i1.TngListboxDirective, inputs: ["orientation", "orientation", "direction", "direction", "disabled", "disabled", "loop", "loop", "value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 });
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteListbox, decorators: [{
99
+ type: Directive,
100
+ args: [{
101
+ selector: '[tngMultiAutocompleteListbox]',
102
+ standalone: true,
103
+ providers: [
104
+ { provide: TNG_MULTI_AUTOCOMPLETE_LISTBOX, useExisting: TngMultiAutocompleteListbox },
105
+ // Multi-autocomplete typing happens in the input. Listbox must NOT typeahead.
106
+ { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },
107
+ { provide: TNG_LISTBOX_FORCE_MULTIPLE, useValue: true },
108
+ { provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },
109
+ ],
110
+ hostDirectives: [
111
+ {
112
+ directive: TngListboxDirective,
113
+ inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],
114
+ outputs: ['valueChange'],
115
+ },
116
+ ],
117
+ }]
118
+ }], ctorParameters: () => [], propDecorators: { dataSlot: [{
119
+ type: HostBinding,
120
+ args: ['attr.data-slot']
121
+ }], id: [{
122
+ type: HostBinding,
123
+ args: ['attr.id']
124
+ }], onListboxValueChange: [{
125
+ type: HostListener,
126
+ args: ['valueChange', ['$event']]
127
+ }] } });
128
+ export class TngMultiAutocompleteOption {
120
129
  dataSlot = 'multi-autocomplete-option';
121
- };
122
- __decorate([
123
- HostBinding('attr.data-slot')
124
- ], TngMultiAutocompleteOption.prototype, "dataSlot", void 0);
125
- TngMultiAutocompleteOption = __decorate([
126
- Directive({
127
- selector: '[tngMultiAutocompleteOption]',
128
- standalone: true,
129
- hostDirectives: [
130
- {
131
- directive: TngOptionDirective,
132
- inputs: ['tngValue', 'disabled'],
133
- },
134
- ],
135
- })
136
- ], TngMultiAutocompleteOption);
137
- export { TngMultiAutocompleteOption };
130
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteOption, deps: [], target: i0.ɵɵFactoryTarget.Directive });
131
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMultiAutocompleteOption, isStandalone: true, selector: "[tngMultiAutocompleteOption]", host: { properties: { "attr.data-slot": "this.dataSlot" } }, hostDirectives: [{ directive: i1.TngOptionDirective, inputs: ["tngValue", "tngValue", "disabled", "disabled"] }], ngImport: i0 });
132
+ }
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteOption, decorators: [{
134
+ type: Directive,
135
+ args: [{
136
+ selector: '[tngMultiAutocompleteOption]',
137
+ standalone: true,
138
+ hostDirectives: [
139
+ {
140
+ directive: TngOptionDirective,
141
+ inputs: ['tngValue', 'disabled'],
142
+ },
143
+ ],
144
+ }]
145
+ }], propDecorators: { dataSlot: [{
146
+ type: HostBinding,
147
+ args: ['attr.data-slot']
148
+ }] } });
138
149
  //# sourceMappingURL=tng-multi-autocomplete.listbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts"],"names":[],"mappings":"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","sourcesContent":["// libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts\nimport {\n DestroyRef,\n Directive,\n HostBinding,\n HostListener,\n effect,\n inject,\n untracked,\n} from '@angular/core';\n\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport {\n TNG_LISTBOX_FORCE_TYPEAHEAD,\n TNG_LISTBOX_FORCE_MULTIPLE,\n TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER,\n TngListboxDirective,\n TngOptionDirective,\n} from '@tailng-ui/primitives';\n\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\nimport { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\nconst createListboxId = createTngIdFactory('tng-multi-autocomplete-listbox');\n\n@Directive({\n selector: '[tngMultiAutocompleteListbox]',\n standalone: true,\n providers: [\n { provide: TNG_MULTI_AUTOCOMPLETE_LISTBOX, useExisting: TngMultiAutocompleteListbox },\n // Multi-autocomplete typing happens in the input. Listbox must NOT typeahead.\n { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },\n { provide: TNG_LISTBOX_FORCE_MULTIPLE, useValue: true },\n { provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },\n ],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiAutocompleteListbox<T = unknown> implements TngMultiAutocompleteListboxApi<T> {\n private readonly multi = inject<TngMultiAutocomplete<T>>(TNG_MULTI_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 = 'multi-autocomplete-listbox' as const;\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multi.setListboxId(this.id);\n this.multi.setListboxApi(this);\n\n // External multi.value -> listbox.value (keeps selection UI in sync)\n effect(() => {\n const v = this.multi.value(); // readonly T[]\n const current = untracked(() => this.listbox.value()); // ListboxValue<T>\n const currentArr = Array.isArray(current)\n ? (current as readonly T[])\n : current === null\n ? ([] as readonly T[])\n : ([current as T] as const);\n\n // compare by order + Object.is (good enough for now)\n if (\n currentArr.length === v.length &&\n v.every((val, i) => Object.is(val, currentArr[i]))\n ) {\n return;\n }\n\n this.listbox.value.set([...v] as readonly T[]);\n\n // External controlled value changes while closed should reset filtering state.\n if (!this.multi.open()) {\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.multi.setListboxId(null);\n this.multi.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.multi.toggle(value as T);\n this.listbox.setActiveId(null);\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multi.disabled()) return;\n\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n\n // Option unregister/re-register during filtering can cause listbox to emit a fresh\n // array instance even when the logical selection did not change. Treat that as a\n // no-op so typing does not clear the controlled query.\n const current = this.multi.value();\n if (\n current.length === arr.length &&\n arr.every((val, i) => Object.is(val, current[i]))\n ) {\n return;\n }\n\n this.multi.value.set([...arr] as readonly T[]);\n this.listbox.setActiveId(null);\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n\n getValue?(): readonly T[] {\n const v = this.listbox.value();\n if (v === null) return [];\n return Array.isArray(v) ? (v as readonly T[]) : ([v as T] as const);\n }\n}\n\n@Directive({\n selector: '[tngMultiAutocompleteOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiAutocompleteOption<T = unknown> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-option' as const;\n}\n"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,EACN,MAAM,EACN,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,wCAAwC,EACxC,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;;;AAGzF,MAAM,eAAe,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,CAAC;AAoB7E,MAAM,OAAO,2BAA2B;IACrB,KAAK,GAAG,MAAM,CAA0B,sBAAsB,CAAC,CAAC;IAChE,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,4BAAqC,CAAC;IAGjD,EAAE,GAAG,eAAe,EAAE,CAAC;IAE1C;QACE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/B,qEAAqE;QACrE,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,eAAe;YAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,kBAAkB;YACzE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBACvC,CAAC,CAAE,OAAwB;gBAC3B,CAAC,CAAC,OAAO,KAAK,IAAI;oBAChB,CAAC,CAAE,EAAmB;oBACtB,CAAC,CAAE,CAAC,OAAY,CAAW,CAAC;YAEhC,qDAAqD;YACrD,IACE,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAC9B,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAClD,CAAC;gBACD,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAiB,CAAC,CAAC;YAE/C,+EAA+E;YAC/E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,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,KAAK,CAAC,MAAM,CAAC,KAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAGS,oBAAoB,CAAC,KAA8B;QAC3D,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAAE,OAAO;QAElC,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzE,mFAAmF;QACnF,iFAAiF;QACjF,uDAAuD;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnC,IACE,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;YAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAiB,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACN,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAkB,CAAC,CAAC,CAAE,CAAC,CAAM,CAAW,CAAC;IACtE,CAAC;uGApGU,2BAA2B;2FAA3B,2BAA2B,6NAf3B;YACT,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,2BAA2B,EAAE;YACrF,8EAA8E;YAC9E,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE;YACzD,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvD,EAAE,OAAO,EAAE,wCAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE;SACtE;;2FASU,2BAA2B;kBAlBvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,+BAA+B;oBACzC,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,6BAA6B,EAAE;wBACrF,8EAA8E;wBAC9E,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE;wBACzD,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE;wBACvD,EAAE,OAAO,EAAE,wCAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE;qBACtE;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;;sBAiErB,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;AAwCzC,MAAM,OAAO,0BAA0B;IAElB,QAAQ,GAAG,2BAAoC,CAAC;uGAFxD,0BAA0B;2FAA1B,0BAA0B;;2FAA1B,0BAA0B;kBAVtC,SAAS;mBAAC;oBACT,QAAQ,EAAE,8BAA8B;oBACxC,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":["// libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts\nimport {\n DestroyRef,\n Directive,\n HostBinding,\n HostListener,\n effect,\n inject,\n untracked,\n} from '@angular/core';\n\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport {\n TNG_LISTBOX_FORCE_TYPEAHEAD,\n TNG_LISTBOX_FORCE_MULTIPLE,\n TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER,\n TngListboxDirective,\n TngOptionDirective,\n} from '@tailng-ui/primitives';\n\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\nimport { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\nconst createListboxId = createTngIdFactory('tng-multi-autocomplete-listbox');\n\n@Directive({\n selector: '[tngMultiAutocompleteListbox]',\n standalone: true,\n providers: [\n { provide: TNG_MULTI_AUTOCOMPLETE_LISTBOX, useExisting: TngMultiAutocompleteListbox },\n // Multi-autocomplete typing happens in the input. Listbox must NOT typeahead.\n { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },\n { provide: TNG_LISTBOX_FORCE_MULTIPLE, useValue: true },\n { provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },\n ],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiAutocompleteListbox<T = unknown> implements TngMultiAutocompleteListboxApi<T> {\n private readonly multi = inject<TngMultiAutocomplete<T>>(TNG_MULTI_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 = 'multi-autocomplete-listbox' as const;\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multi.setListboxId(this.id);\n this.multi.setListboxApi(this);\n\n // External multi.value -> listbox.value (keeps selection UI in sync)\n effect(() => {\n const v = this.multi.value(); // readonly T[]\n const current = untracked(() => this.listbox.value()); // ListboxValue<T>\n const currentArr = Array.isArray(current)\n ? (current as readonly T[])\n : current === null\n ? ([] as readonly T[])\n : ([current as T] as const);\n\n // compare by order + Object.is (good enough for now)\n if (\n currentArr.length === v.length &&\n v.every((val, i) => Object.is(val, currentArr[i]))\n ) {\n return;\n }\n\n this.listbox.value.set([...v] as readonly T[]);\n\n // External controlled value changes while closed should reset filtering state.\n if (!this.multi.open()) {\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.multi.setListboxId(null);\n this.multi.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.multi.toggle(value as T);\n this.listbox.setActiveId(null);\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multi.disabled()) return;\n\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n\n // Option unregister/re-register during filtering can cause listbox to emit a fresh\n // array instance even when the logical selection did not change. Treat that as a\n // no-op so typing does not clear the controlled query.\n const current = this.multi.value();\n if (\n current.length === arr.length &&\n arr.every((val, i) => Object.is(val, current[i]))\n ) {\n return;\n }\n\n this.multi.value.set([...arr] as readonly T[]);\n this.listbox.setActiveId(null);\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n\n getValue?(): readonly T[] {\n const v = this.listbox.value();\n if (v === null) return [];\n return Array.isArray(v) ? (v as readonly T[]) : ([v as T] as const);\n }\n}\n\n@Directive({\n selector: '[tngMultiAutocompleteOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiAutocompleteOption<T = unknown> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-option' as const;\n}\n"]}
@@ -1,4 +1,7 @@
1
+ import * as i0 from "@angular/core";
1
2
  export declare class TngMultiAutocompleteOverlay {
2
3
  protected readonly dataSlot: "multi-autocomplete-overlay";
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiAutocompleteOverlay, never>;
5
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiAutocompleteOverlay, "[tngMultiAutocompleteOverlay]", ["tngMultiAutocompleteOverlay"], {}, {}, never, never, true, never>;
3
6
  }
4
7
  //# sourceMappingURL=tng-multi-autocomplete.overlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.ts"],"names":[],"mappings":"AAEA,qBAKa,2BAA2B;IAEtC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;CACrE"}
1
+ {"version":3,"file":"tng-multi-autocomplete.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.ts"],"names":[],"mappings":";AAEA,qBAKa,2BAA2B;IAEtC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;yCAFzD,2BAA2B;2CAA3B,2BAA2B;CAGvC"}
@@ -1,17 +1,19 @@
1
- import { __decorate } from "tslib";
2
1
  import { Directive, HostBinding } from '@angular/core';
3
- let TngMultiAutocompleteOverlay = class TngMultiAutocompleteOverlay {
2
+ import * as i0 from "@angular/core";
3
+ export class TngMultiAutocompleteOverlay {
4
4
  dataSlot = 'multi-autocomplete-overlay';
5
- };
6
- __decorate([
7
- HostBinding('attr.data-slot')
8
- ], TngMultiAutocompleteOverlay.prototype, "dataSlot", void 0);
9
- TngMultiAutocompleteOverlay = __decorate([
10
- Directive({
11
- selector: '[tngMultiAutocompleteOverlay]',
12
- exportAs: 'tngMultiAutocompleteOverlay',
13
- standalone: true,
14
- })
15
- ], TngMultiAutocompleteOverlay);
16
- export { TngMultiAutocompleteOverlay };
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteOverlay, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMultiAutocompleteOverlay, isStandalone: true, selector: "[tngMultiAutocompleteOverlay]", host: { properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngMultiAutocompleteOverlay"], ngImport: i0 });
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteOverlay, decorators: [{
9
+ type: Directive,
10
+ args: [{
11
+ selector: '[tngMultiAutocompleteOverlay]',
12
+ exportAs: 'tngMultiAutocompleteOverlay',
13
+ standalone: true,
14
+ }]
15
+ }], propDecorators: { dataSlot: [{
16
+ type: HostBinding,
17
+ args: ['attr.data-slot']
18
+ }] } });
17
19
  //# sourceMappingURL=tng-multi-autocomplete.overlay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAOhD,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAEnB,QAAQ,GAAG,4BAAqC,CAAC;CACrE,CAAA;AADoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;6DACsC;AAFzD,2BAA2B;IALvC,SAAS,CAAC;QACT,QAAQ,EAAE,+BAA+B;QACzC,QAAQ,EAAE,6BAA6B;QACvC,UAAU,EAAE,IAAI;KACjB,CAAC;GACW,2BAA2B,CAGvC","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiAutocompleteOverlay]',\n exportAs: 'tngMultiAutocompleteOverlay',\n standalone: true,\n})\nexport class TngMultiAutocompleteOverlay {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-overlay' as const;\n}"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAOvD,MAAM,OAAO,2BAA2B;IAEnB,QAAQ,GAAG,4BAAqC,CAAC;uGAFzD,2BAA2B;2FAA3B,2BAA2B;;2FAA3B,2BAA2B;kBALvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,+BAA+B;oBACzC,QAAQ,EAAE,6BAA6B;oBACvC,UAAU,EAAE,IAAI;iBACjB;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiAutocompleteOverlay]',\n exportAs: 'tngMultiAutocompleteOverlay',\n standalone: true,\n})\nexport class TngMultiAutocompleteOverlay {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-overlay' as const;\n}"]}
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  export declare class TngMultiAutocompleteTrigger {
2
3
  private readonly multi;
3
4
  private readonly el;
@@ -18,5 +19,7 @@ export declare class TngMultiAutocompleteTrigger {
18
19
  protected onFocusOut(event: FocusEvent): void;
19
20
  protected onCompositionStart(): void;
20
21
  protected onCompositionEnd(): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiAutocompleteTrigger, never>;
23
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiAutocompleteTrigger, "[tngMultiAutocompleteTrigger]", ["tngMultiAutocompleteTrigger"], {}, {}, never, never, true, never>;
21
24
  }
22
25
  //# sourceMappingURL=tng-multi-autocomplete.trigger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.trigger.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.ts"],"names":[],"mappings":"AAeA,qBAKa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAwC;IAE3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG3B;IAEL,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAuB;IAG/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,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,CAGlD;IAGD,SAAS,CAAC,OAAO,IAAI,IAAI;IAiBzB,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAiBrC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAqJ/C,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAoB7C,SAAS,CAAC,kBAAkB,IAAI,IAAI;IAKpC,SAAS,CAAC,gBAAgB,IAAI,IAAI;CAenC"}
1
+ {"version":3,"file":"tng-multi-autocomplete.trigger.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.ts"],"names":[],"mappings":";AAeA,qBAKa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAwC;IAE3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG3B;IAEL,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAuB;IAG/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,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,CAGlD;IAGD,SAAS,CAAC,OAAO,IAAI,IAAI;IAiBzB,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAiBrC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAqJ/C,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAoB7C,SAAS,CAAC,kBAAkB,IAAI,IAAI;IAKpC,SAAS,CAAC,gBAAgB,IAAI,IAAI;yCAhQvB,2BAA2B;2CAA3B,2BAA2B;CA+QvC"}
@@ -1,9 +1,9 @@
1
- import { __decorate } from "tslib";
2
1
  import { Directive, ElementRef, HostBinding, HostListener, inject, } from '@angular/core';
3
2
  import { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';
4
3
  import { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';
4
+ import * as i0 from "@angular/core";
5
5
  const NAV_KEYS = new Set(['ArrowDown', 'ArrowUp']);
6
- let TngMultiAutocompleteTrigger = class TngMultiAutocompleteTrigger {
6
+ export class TngMultiAutocompleteTrigger {
7
7
  multi = inject(TNG_MULTI_AUTOCOMPLETE);
8
8
  el = inject((ElementRef));
9
9
  injectedListbox = inject(TNG_MULTI_AUTOCOMPLETE_LISTBOX, {
@@ -216,52 +216,54 @@ let TngMultiAutocompleteTrigger = class TngMultiAutocompleteTrigger {
216
216
  this.multi.queryChange.emit(q);
217
217
  }
218
218
  }
219
- };
220
- __decorate([
221
- HostBinding('attr.data-slot')
222
- ], TngMultiAutocompleteTrigger.prototype, "dataSlot", void 0);
223
- __decorate([
224
- HostBinding('attr.role')
225
- ], TngMultiAutocompleteTrigger.prototype, "role", void 0);
226
- __decorate([
227
- HostBinding('attr.aria-haspopup')
228
- ], TngMultiAutocompleteTrigger.prototype, "haspopup", void 0);
229
- __decorate([
230
- HostBinding('attr.aria-expanded')
231
- ], TngMultiAutocompleteTrigger.prototype, "ariaExpanded", null);
232
- __decorate([
233
- HostBinding('attr.aria-disabled')
234
- ], TngMultiAutocompleteTrigger.prototype, "ariaDisabled", null);
235
- __decorate([
236
- HostBinding('attr.aria-controls')
237
- ], TngMultiAutocompleteTrigger.prototype, "ariaControls", null);
238
- __decorate([
239
- HostBinding('attr.aria-activedescendant')
240
- ], TngMultiAutocompleteTrigger.prototype, "ariaActiveDescendant", null);
241
- __decorate([
242
- HostListener('focus')
243
- ], TngMultiAutocompleteTrigger.prototype, "onFocus", null);
244
- __decorate([
245
- HostListener('input', ['$event'])
246
- ], TngMultiAutocompleteTrigger.prototype, "onInput", null);
247
- __decorate([
248
- HostListener('keydown', ['$event'])
249
- ], TngMultiAutocompleteTrigger.prototype, "onKeydown", null);
250
- __decorate([
251
- HostListener('focusout', ['$event'])
252
- ], TngMultiAutocompleteTrigger.prototype, "onFocusOut", null);
253
- __decorate([
254
- HostListener('compositionstart')
255
- ], TngMultiAutocompleteTrigger.prototype, "onCompositionStart", null);
256
- __decorate([
257
- HostListener('compositionend')
258
- ], TngMultiAutocompleteTrigger.prototype, "onCompositionEnd", null);
259
- TngMultiAutocompleteTrigger = __decorate([
260
- Directive({
261
- selector: '[tngMultiAutocompleteTrigger]',
262
- exportAs: 'tngMultiAutocompleteTrigger',
263
- standalone: true,
264
- })
265
- ], TngMultiAutocompleteTrigger);
266
- export { TngMultiAutocompleteTrigger };
219
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
220
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMultiAutocompleteTrigger, isStandalone: true, selector: "[tngMultiAutocompleteTrigger]", host: { listeners: { "focus": "onFocus()", "input": "onInput($event)", "keydown": "onKeydown($event)", "focusout": "onFocusOut($event)", "compositionstart": "onCompositionStart()", "compositionend": "onCompositionEnd()" }, 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" } }, exportAs: ["tngMultiAutocompleteTrigger"], ngImport: i0 });
221
+ }
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiAutocompleteTrigger, decorators: [{
223
+ type: Directive,
224
+ args: [{
225
+ selector: '[tngMultiAutocompleteTrigger]',
226
+ exportAs: 'tngMultiAutocompleteTrigger',
227
+ standalone: true,
228
+ }]
229
+ }], propDecorators: { dataSlot: [{
230
+ type: HostBinding,
231
+ args: ['attr.data-slot']
232
+ }], role: [{
233
+ type: HostBinding,
234
+ args: ['attr.role']
235
+ }], haspopup: [{
236
+ type: HostBinding,
237
+ args: ['attr.aria-haspopup']
238
+ }], ariaExpanded: [{
239
+ type: HostBinding,
240
+ args: ['attr.aria-expanded']
241
+ }], ariaDisabled: [{
242
+ type: HostBinding,
243
+ args: ['attr.aria-disabled']
244
+ }], ariaControls: [{
245
+ type: HostBinding,
246
+ args: ['attr.aria-controls']
247
+ }], ariaActiveDescendant: [{
248
+ type: HostBinding,
249
+ args: ['attr.aria-activedescendant']
250
+ }], onFocus: [{
251
+ type: HostListener,
252
+ args: ['focus']
253
+ }], onInput: [{
254
+ type: HostListener,
255
+ args: ['input', ['$event']]
256
+ }], onKeydown: [{
257
+ type: HostListener,
258
+ args: ['keydown', ['$event']]
259
+ }], onFocusOut: [{
260
+ type: HostListener,
261
+ args: ['focusout', ['$event']]
262
+ }], onCompositionStart: [{
263
+ type: HostListener,
264
+ args: ['compositionstart']
265
+ }], onCompositionEnd: [{
266
+ type: HostListener,
267
+ args: ['compositionend']
268
+ }] } });
267
269
  //# sourceMappingURL=tng-multi-autocomplete.trigger.js.map