@tailng-ui/primitives 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/package.json +12 -6
  2. package/src/lib/feedback/empty/tng-empty.d.ts +11 -0
  3. package/src/lib/feedback/empty/tng-empty.d.ts.map +1 -1
  4. package/src/lib/feedback/empty/tng-empty.js +76 -66
  5. package/src/lib/feedback/empty/tng-empty.js.map +1 -1
  6. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts +5 -0
  7. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts.map +1 -1
  8. package/src/lib/feedback/progress-bar/tng-progress-bar.js +50 -54
  9. package/src/lib/feedback/progress-bar/tng-progress-bar.js.map +1 -1
  10. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts +3 -0
  11. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts.map +1 -1
  12. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js +35 -41
  13. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js.map +1 -1
  14. package/src/lib/feedback/skeleton/tng-skeleton.d.ts +3 -0
  15. package/src/lib/feedback/skeleton/tng-skeleton.d.ts.map +1 -1
  16. package/src/lib/feedback/skeleton/tng-skeleton.js +30 -32
  17. package/src/lib/feedback/skeleton/tng-skeleton.js.map +1 -1
  18. package/src/lib/feedback/toast/tng-toast.d.ts +5 -0
  19. package/src/lib/feedback/toast/tng-toast.d.ts.map +1 -1
  20. package/src/lib/feedback/toast/tng-toast.js +51 -49
  21. package/src/lib/feedback/toast/tng-toast.js.map +1 -1
  22. package/src/lib/form/_shared/id/tng-unique-id.service.d.ts +3 -0
  23. package/src/lib/form/_shared/id/tng-unique-id.service.d.ts.map +1 -1
  24. package/src/lib/form/_shared/id/tng-unique-id.service.js +9 -7
  25. package/src/lib/form/_shared/id/tng-unique-id.service.js.map +1 -1
  26. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts +3 -0
  27. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts.map +1 -1
  28. package/src/lib/form/_shared/select/tng-select.overlay.shared.js +22 -20
  29. package/src/lib/form/_shared/select/tng-select.overlay.shared.js.map +1 -1
  30. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts +9 -0
  31. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts.map +1 -1
  32. package/src/lib/form/_shared/select/tng-select.parts.shared.js +106 -98
  33. package/src/lib/form/_shared/select/tng-select.parts.shared.js.map +1 -1
  34. package/src/lib/form/autocomplete/tng-autocomplete.d.ts +3 -0
  35. package/src/lib/form/autocomplete/tng-autocomplete.d.ts.map +1 -1
  36. package/src/lib/form/autocomplete/tng-autocomplete.js +40 -38
  37. package/src/lib/form/autocomplete/tng-autocomplete.js.map +1 -1
  38. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts +6 -0
  39. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts.map +1 -1
  40. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js +54 -46
  41. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js.map +1 -1
  42. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts +3 -0
  43. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts.map +1 -1
  44. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js +22 -20
  45. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js.map +1 -1
  46. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts +9 -0
  47. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts.map +1 -1
  48. package/src/lib/form/autocomplete/tng-autocomplete.parts.js +109 -101
  49. package/src/lib/form/autocomplete/tng-autocomplete.parts.js.map +1 -1
  50. package/src/lib/form/button-toggle/tng-button-toggle.d.ts +5 -0
  51. package/src/lib/form/button-toggle/tng-button-toggle.d.ts.map +1 -1
  52. package/src/lib/form/button-toggle/tng-button-toggle.js +121 -155
  53. package/src/lib/form/button-toggle/tng-button-toggle.js.map +1 -1
  54. package/src/lib/form/checkbox/tng-checkbox.d.ts +3 -0
  55. package/src/lib/form/checkbox/tng-checkbox.d.ts.map +1 -1
  56. package/src/lib/form/checkbox/tng-checkbox.js +95 -107
  57. package/src/lib/form/checkbox/tng-checkbox.js.map +1 -1
  58. package/src/lib/form/chips/tng-chips.d.ts +7 -0
  59. package/src/lib/form/chips/tng-chips.d.ts.map +1 -1
  60. package/src/lib/form/chips/tng-chips.js +107 -115
  61. package/src/lib/form/chips/tng-chips.js.map +1 -1
  62. package/src/lib/form/combobox/tng-combobox.d.ts +3 -0
  63. package/src/lib/form/combobox/tng-combobox.d.ts.map +1 -1
  64. package/src/lib/form/combobox/tng-combobox.js +16 -14
  65. package/src/lib/form/combobox/tng-combobox.js.map +1 -1
  66. package/src/lib/form/input/tng-input.d.ts +9 -0
  67. package/src/lib/form/input/tng-input.d.ts.map +1 -1
  68. package/src/lib/form/input/tng-input.js +161 -141
  69. package/src/lib/form/input/tng-input.js.map +1 -1
  70. package/src/lib/form/input-otp/tng-input-otp.d.ts +3 -0
  71. package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -1
  72. package/src/lib/form/input-otp/tng-input-otp.js +58 -70
  73. package/src/lib/form/input-otp/tng-input-otp.js.map +1 -1
  74. package/src/lib/form/label/tng-label.d.ts +3 -0
  75. package/src/lib/form/label/tng-label.d.ts.map +1 -1
  76. package/src/lib/form/label/tng-label.js +24 -26
  77. package/src/lib/form/label/tng-label.js.map +1 -1
  78. package/src/lib/form/listbox/listbox.directive.d.ts +3 -0
  79. package/src/lib/form/listbox/listbox.directive.d.ts.map +1 -1
  80. package/src/lib/form/listbox/listbox.directive.js +45 -43
  81. package/src/lib/form/listbox/listbox.directive.js.map +1 -1
  82. package/src/lib/form/listbox/option.directive.d.ts +3 -0
  83. package/src/lib/form/listbox/option.directive.d.ts.map +1 -1
  84. package/src/lib/form/listbox/option.directive.js +40 -38
  85. package/src/lib/form/listbox/option.directive.js.map +1 -1
  86. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts +3 -0
  87. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts.map +1 -1
  88. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js +23 -21
  89. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js.map +1 -1
  90. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts +3 -0
  91. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts.map +1 -1
  92. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js +25 -23
  93. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js.map +1 -1
  94. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts +3 -0
  95. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts.map +1 -1
  96. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js +35 -33
  97. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js.map +1 -1
  98. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts +6 -0
  99. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts.map +1 -1
  100. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js +57 -46
  101. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js.map +1 -1
  102. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts +3 -0
  103. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts.map +1 -1
  104. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js +16 -14
  105. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js.map +1 -1
  106. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts +3 -0
  107. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts.map +1 -1
  108. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js +52 -50
  109. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js.map +1 -1
  110. package/src/lib/form/multi-select/tng-multi-select.d.ts +3 -0
  111. package/src/lib/form/multi-select/tng-multi-select.d.ts.map +1 -1
  112. package/src/lib/form/multi-select/tng-multi-select.js +41 -36
  113. package/src/lib/form/multi-select/tng-multi-select.js.map +1 -1
  114. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts +6 -0
  115. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts.map +1 -1
  116. package/src/lib/form/multi-select/tng-multi-select.listbox.js +50 -45
  117. package/src/lib/form/multi-select/tng-multi-select.listbox.js.map +1 -1
  118. package/src/lib/form/multiselect/tng-multiselect.d.ts +3 -0
  119. package/src/lib/form/multiselect/tng-multiselect.d.ts.map +1 -1
  120. package/src/lib/form/multiselect/tng-multiselect.js +16 -14
  121. package/src/lib/form/multiselect/tng-multiselect.js.map +1 -1
  122. package/src/lib/form/radio/tng-radio.d.ts +3 -0
  123. package/src/lib/form/radio/tng-radio.d.ts.map +1 -1
  124. package/src/lib/form/radio/tng-radio.js +91 -101
  125. package/src/lib/form/radio/tng-radio.js.map +1 -1
  126. package/src/lib/form/select/tng-select.d.ts +3 -0
  127. package/src/lib/form/select/tng-select.d.ts.map +1 -1
  128. package/src/lib/form/select/tng-select.js +41 -36
  129. package/src/lib/form/select/tng-select.js.map +1 -1
  130. package/src/lib/form/select/tng-select.listbox.d.ts +6 -0
  131. package/src/lib/form/select/tng-select.listbox.d.ts.map +1 -1
  132. package/src/lib/form/select/tng-select.listbox.js +50 -45
  133. package/src/lib/form/select/tng-select.listbox.js.map +1 -1
  134. package/src/lib/form/slider/tng-slider.d.ts +3 -0
  135. package/src/lib/form/slider/tng-slider.d.ts.map +1 -1
  136. package/src/lib/form/slider/tng-slider.js +42 -50
  137. package/src/lib/form/slider/tng-slider.js.map +1 -1
  138. package/src/lib/form/switch/tng-switch.d.ts +3 -0
  139. package/src/lib/form/switch/tng-switch.d.ts.map +1 -1
  140. package/src/lib/form/switch/tng-switch.js +44 -48
  141. package/src/lib/form/switch/tng-switch.js.map +1 -1
  142. package/src/lib/form/textarea/tng-textarea.d.ts +4 -0
  143. package/src/lib/form/textarea/tng-textarea.d.ts.map +1 -1
  144. package/src/lib/form/textarea/tng-textarea.js +40 -41
  145. package/src/lib/form/textarea/tng-textarea.js.map +1 -1
  146. package/src/lib/form/toggle/tng-toggle.d.ts +3 -0
  147. package/src/lib/form/toggle/tng-toggle.d.ts.map +1 -1
  148. package/src/lib/form/toggle/tng-toggle.js +71 -75
  149. package/src/lib/form/toggle/tng-toggle.js.map +1 -1
  150. package/src/lib/form/toggle-group/tng-toggle-group.d.ts +3 -0
  151. package/src/lib/form/toggle-group/tng-toggle-group.d.ts.map +1 -1
  152. package/src/lib/form/toggle-group/tng-toggle-group.js +48 -50
  153. package/src/lib/form/toggle-group/tng-toggle-group.js.map +1 -1
  154. package/src/lib/layout/accordion/tng-accordion.d.ts +9 -0
  155. package/src/lib/layout/accordion/tng-accordion.d.ts.map +1 -1
  156. package/src/lib/layout/accordion/tng-accordion.js +143 -155
  157. package/src/lib/layout/accordion/tng-accordion.js.map +1 -1
  158. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts +3 -0
  159. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts.map +1 -1
  160. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js +16 -14
  161. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js.map +1 -1
  162. package/src/lib/layout/card/tng-card.d.ts +21 -0
  163. package/src/lib/layout/card/tng-card.d.ts.map +1 -1
  164. package/src/lib/layout/card/tng-card.js +151 -131
  165. package/src/lib/layout/card/tng-card.js.map +1 -1
  166. package/src/lib/layout/collapsible/tng-collapsible.d.ts +7 -0
  167. package/src/lib/layout/collapsible/tng-collapsible.d.ts.map +1 -1
  168. package/src/lib/layout/collapsible/tng-collapsible.js +82 -86
  169. package/src/lib/layout/collapsible/tng-collapsible.js.map +1 -1
  170. package/src/lib/layout/drawer/tng-drawer.d.ts +13 -0
  171. package/src/lib/layout/drawer/tng-drawer.d.ts.map +1 -1
  172. package/src/lib/layout/drawer/tng-drawer.js +217 -226
  173. package/src/lib/layout/drawer/tng-drawer.js.map +1 -1
  174. package/src/lib/layout/grid/tng-grid.d.ts +3 -0
  175. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
  176. package/src/lib/layout/grid/tng-grid.js +16 -14
  177. package/src/lib/layout/grid/tng-grid.js.map +1 -1
  178. package/src/lib/layout/separator/tng-separator.d.ts +3 -0
  179. package/src/lib/layout/separator/tng-separator.d.ts.map +1 -1
  180. package/src/lib/layout/separator/tng-separator.js +30 -30
  181. package/src/lib/layout/separator/tng-separator.js.map +1 -1
  182. package/src/lib/layout/stepper/tng-stepper.d.ts +3 -0
  183. package/src/lib/layout/stepper/tng-stepper.d.ts.map +1 -1
  184. package/src/lib/layout/stepper/tng-stepper.js +16 -14
  185. package/src/lib/layout/stepper/tng-stepper.js.map +1 -1
  186. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts +3 -0
  187. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
  188. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +54 -11
  189. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
  190. package/src/lib/layout/tree/tng-tree-group.d.ts +3 -0
  191. package/src/lib/layout/tree/tng-tree-group.d.ts.map +1 -1
  192. package/src/lib/layout/tree/tng-tree-group.js +19 -17
  193. package/src/lib/layout/tree/tng-tree-group.js.map +1 -1
  194. package/src/lib/layout/tree/tng-tree-indicator.d.ts +3 -0
  195. package/src/lib/layout/tree/tng-tree-indicator.d.ts.map +1 -1
  196. package/src/lib/layout/tree/tng-tree-indicator.js +22 -20
  197. package/src/lib/layout/tree/tng-tree-indicator.js.map +1 -1
  198. package/src/lib/layout/tree/tng-tree-item.d.ts +3 -0
  199. package/src/lib/layout/tree/tng-tree-item.d.ts.map +1 -1
  200. package/src/lib/layout/tree/tng-tree-item.js +47 -53
  201. package/src/lib/layout/tree/tng-tree-item.js.map +1 -1
  202. package/src/lib/layout/tree/tng-tree.d.ts +3 -0
  203. package/src/lib/layout/tree/tng-tree.d.ts.map +1 -1
  204. package/src/lib/layout/tree/tng-tree.js +39 -43
  205. package/src/lib/layout/tree/tng-tree.js.map +1 -1
  206. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts +11 -0
  207. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts.map +1 -1
  208. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js +79 -69
  209. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js.map +1 -1
  210. package/src/lib/navigation/context-menu/tng-context-menu.d.ts +5 -0
  211. package/src/lib/navigation/context-menu/tng-context-menu.d.ts.map +1 -1
  212. package/src/lib/navigation/context-menu/tng-context-menu.js +44 -42
  213. package/src/lib/navigation/context-menu/tng-context-menu.js.map +1 -1
  214. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts +3 -0
  215. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts.map +1 -1
  216. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js +16 -14
  217. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js.map +1 -1
  218. package/src/lib/navigation/menu/tng-menu.d.ts +13 -0
  219. package/src/lib/navigation/menu/tng-menu.d.ts.map +1 -1
  220. package/src/lib/navigation/menu/tng-menu.js +184 -186
  221. package/src/lib/navigation/menu/tng-menu.js.map +1 -1
  222. package/src/lib/navigation/menubar/tng-menubar.d.ts +5 -0
  223. package/src/lib/navigation/menubar/tng-menubar.d.ts.map +1 -1
  224. package/src/lib/navigation/menubar/tng-menubar.js +72 -70
  225. package/src/lib/navigation/menubar/tng-menubar.js.map +1 -1
  226. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts +3 -0
  227. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts.map +1 -1
  228. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js +16 -14
  229. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js.map +1 -1
  230. package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -0
  231. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
  232. package/src/lib/navigation/tabs/tng-tabs.js +234 -258
  233. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
  234. package/src/lib/navigation/toolbar/tng-toolbar.d.ts +3 -0
  235. package/src/lib/navigation/toolbar/tng-toolbar.d.ts.map +1 -1
  236. package/src/lib/navigation/toolbar/tng-toolbar.js +16 -14
  237. package/src/lib/navigation/toolbar/tng-toolbar.js.map +1 -1
  238. package/src/lib/overlay/dialog/tng-dialog.d.ts +19 -0
  239. package/src/lib/overlay/dialog/tng-dialog.d.ts.map +1 -1
  240. package/src/lib/overlay/dialog/tng-dialog.js +249 -255
  241. package/src/lib/overlay/dialog/tng-dialog.js.map +1 -1
  242. package/src/lib/overlay/popover/tng-popover.d.ts +9 -0
  243. package/src/lib/overlay/popover/tng-popover.d.ts.map +1 -1
  244. package/src/lib/overlay/popover/tng-popover.js +152 -170
  245. package/src/lib/overlay/popover/tng-popover.js.map +1 -1
  246. package/src/lib/overlay/tooltip/tng-tooltip.d.ts +7 -0
  247. package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -1
  248. package/src/lib/overlay/tooltip/tng-tooltip.js +124 -130
  249. package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -1
  250. package/src/lib/utility/avatar/tng-avatar.d.ts +7 -0
  251. package/src/lib/utility/avatar/tng-avatar.d.ts.map +1 -1
  252. package/src/lib/utility/avatar/tng-avatar.js +46 -40
  253. package/src/lib/utility/avatar/tng-avatar.js.map +1 -1
  254. package/src/lib/utility/badge/tng-badge.d.ts +3 -0
  255. package/src/lib/utility/badge/tng-badge.d.ts.map +1 -1
  256. package/src/lib/utility/badge/tng-badge.js +26 -40
  257. package/src/lib/utility/badge/tng-badge.js.map +1 -1
  258. package/src/lib/utility/code-block/tng-code-block.d.ts +11 -0
  259. package/src/lib/utility/code-block/tng-code-block.d.ts.map +1 -1
  260. package/src/lib/utility/code-block/tng-code-block.js +76 -66
  261. package/src/lib/utility/code-block/tng-code-block.js.map +1 -1
  262. package/src/lib/utility/copy/tng-copy.d.ts +3 -0
  263. package/src/lib/utility/copy/tng-copy.d.ts.map +1 -1
  264. package/src/lib/utility/copy/tng-copy.js +44 -52
  265. package/src/lib/utility/copy/tng-copy.js.map +1 -1
  266. package/src/lib/utility/press/tng-press.d.ts +3 -0
  267. package/src/lib/utility/press/tng-press.d.ts.map +1 -1
  268. package/src/lib/utility/press/tng-press.js +55 -61
  269. package/src/lib/utility/press/tng-press.js.map +1 -1
  270. package/src/lib/utility/tag/tng-tag.d.ts +7 -0
  271. package/src/lib/utility/tag/tng-tag.d.ts.map +1 -1
  272. package/src/lib/utility/tag/tng-tag.js +94 -96
  273. package/src/lib/utility/tag/tng-tag.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.trigger.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n} from '@angular/core';\n\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\nconst NAV_KEYS = new Set(['ArrowDown', 'ArrowUp'] as const);\n\n@Directive({\n selector: '[tngMultiAutocompleteTrigger]',\n exportAs: 'tngMultiAutocompleteTrigger',\n standalone: true,\n})\nexport class TngMultiAutocompleteTrigger {\n private readonly multi = inject<TngMultiAutocomplete>(TNG_MULTI_AUTOCOMPLETE);\n private readonly el = inject(ElementRef<HTMLInputElement>);\n\n private readonly injectedListbox =\n inject<TngMultiAutocompleteListboxApi>(TNG_MULTI_AUTOCOMPLETE_LISTBOX, {\n optional: true,\n });\n\n private get listbox(): TngMultiAutocompleteListboxApi | null {\n return this.multi.getListboxApi() ?? this.injectedListbox ?? null;\n }\n\n private composing = false;\n private lastEmittedQuery: string | null = null;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-trigger' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'combobox' as const;\n\n @HostBinding('attr.aria-haspopup')\n protected readonly haspopup = 'listbox' as const;\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpanded(): 'true' | 'false' {\n return this.multi.open() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.multi.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n if (!this.multi.open()) return null;\n return this.multi.getContentId() ?? this.multi.getListboxId();\n }\n\n @HostBinding('attr.aria-activedescendant')\n protected get ariaActiveDescendant(): string | null {\n if (!this.multi.open()) return null;\n return this.listbox?.activeId?.() ?? this.multi.getActiveDescendantId();\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n if (this.multi.disabled()) return;\n\n if (!this.multi.open()) {\n this.multi.openSelect();\n\n const q = this.el.nativeElement.value ?? '';\n this.multi.query.set(q);\n\n this.lastEmittedQuery = q;\n this.multi.queryChange.emit(q);\n\n this.listbox?.ensureActive('first');\n }\n }\n\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n if (this.multi.disabled()) return;\n\n const value = (event.target as HTMLInputElement | null)?.value ?? '';\n this.multi.query.set(value);\n\n // Policy A: do not emit during IME composition\n if (this.composing) return;\n\n // Avoid double-emit (e.g., compositionend followed by input)\n if (this.lastEmittedQuery === value) return;\n\n this.lastEmittedQuery = value;\n this.multi.queryChange.emit(value);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (this.multi.disabled()) return;\n\n // Tab should leave the widget and close any open overlay.\n if (event.key === 'Tab') {\n if (this.multi.open()) {\n this.multi.close();\n }\n return;\n }\n\n // Escape closes overlay (no selection changes)\n if (event.key === 'Escape') {\n if (this.multi.open()) {\n event.preventDefault();\n event.stopPropagation();\n this.multi.close();\n }\n return;\n }\n\n // Backspace removes last chip when input is empty\n if (event.key === 'Backspace') {\n const inputValue = this.el.nativeElement.value ?? '';\n if (inputValue.length > 0) return;\n\n const selected = this.multi.value();\n if (selected.length === 0) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.multi.removeLast();\n return;\n }\n\n // Enter commits active option (toggle) and stays open\n if (event.key === 'Enter') {\n if (!this.multi.open()) return;\n if (!this.listbox) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.listbox.commitActive();\n return;\n }\n\n // ArrowLeft on input at caret-start → focus last chip (chips UX loop)\n if (event.key === 'ArrowLeft') {\n const input = this.el.nativeElement;\n\n const start = input.selectionStart ?? 0;\n const end = input.selectionEnd ?? 0;\n\n // Only when caret is at the beginning and there's no selection range.\n if (start === 0 && end === 0) {\n const chips = Array.from(\n this.multi.hostElement.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const lastChip = chips[chips.length - 1] ?? null;\n if (lastChip) {\n event.preventDefault();\n event.stopPropagation();\n lastChip.focus();\n }\n }\n\n return;\n }\n\n // Home / End\n // Home\n if (event.key === 'Home') {\n const input = this.el.nativeElement;\n const start = input.selectionStart ?? 0;\n const end = input.selectionEnd ?? 0;\n\n // Chip UX has priority over listbox navigation\n if (start === 0 && end === 0) {\n const chips = Array.from(\n this.multi.hostElement.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const firstChip = chips[0] ?? null;\n if (firstChip) {\n event.preventDefault();\n event.stopPropagation();\n firstChip.focus();\n return;\n }\n }\n\n // Otherwise delegate to listbox when open\n if (this.multi.open()) {\n const handled = this.listbox?.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n return;\n }\n\n // End\n if (event.key === 'End') {\n // When open → delegate to listbox\n if (this.multi.open()) {\n const handled = this.listbox?.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n return;\n }\n\n // When closed → let browser move caret\n return;\n }\n \n // Navigation keys\n if (NAV_KEYS.has(event.key as any)) {\n if (!this.multi.open()) {\n event.preventDefault();\n event.stopPropagation();\n\n this.multi.openSelect();\n if (event.key === 'ArrowUp' || event.key === 'End') {\n this.listbox?.ensureActive('last');\n } else {\n this.listbox?.ensureActive('first');\n }\n return;\n }\n\n if (this.listbox) {\n const handled = this.listbox.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n return;\n }\n\n // printable keys are NOT prevented (input stays editable)\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n if (!this.multi.open()) return;\n\n const next = event.relatedTarget as Node | null;\n if (next && this.multi.hostElement.contains(next)) {\n return;\n }\n\n // Some focus transitions report null relatedTarget. Re-check after DOM focus settles.\n queueMicrotask(() => {\n const active = this.el.nativeElement.ownerDocument.activeElement;\n if (active && this.multi.hostElement.contains(active)) {\n return;\n }\n\n this.multi.close();\n });\n }\n\n @HostListener('compositionstart')\n protected onCompositionStart(): void {\n this.composing = true;\n }\n\n @HostListener('compositionend')\n protected onCompositionEnd(): void {\n this.composing = false;\n\n if (this.multi.disabled()) return;\n\n // Policy A: emit once with the final committed value\n const q = this.el.nativeElement.value ?? '';\n this.multi.query.set(q);\n\n if (this.lastEmittedQuery !== q) {\n this.lastEmittedQuery = q;\n this.multi.queryChange.emit(q);\n }\n }\n\n}\n"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.trigger.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n} from '@angular/core';\n\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\nconst NAV_KEYS = new Set(['ArrowDown', 'ArrowUp'] as const);\n\n@Directive({\n selector: '[tngMultiAutocompleteTrigger]',\n exportAs: 'tngMultiAutocompleteTrigger',\n standalone: true,\n})\nexport class TngMultiAutocompleteTrigger {\n private readonly multi = inject<TngMultiAutocomplete>(TNG_MULTI_AUTOCOMPLETE);\n private readonly el = inject(ElementRef<HTMLInputElement>);\n\n private readonly injectedListbox =\n inject<TngMultiAutocompleteListboxApi>(TNG_MULTI_AUTOCOMPLETE_LISTBOX, {\n optional: true,\n });\n\n private get listbox(): TngMultiAutocompleteListboxApi | null {\n return this.multi.getListboxApi() ?? this.injectedListbox ?? null;\n }\n\n private composing = false;\n private lastEmittedQuery: string | null = null;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-trigger' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'combobox' as const;\n\n @HostBinding('attr.aria-haspopup')\n protected readonly haspopup = 'listbox' as const;\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpanded(): 'true' | 'false' {\n return this.multi.open() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.multi.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n if (!this.multi.open()) return null;\n return this.multi.getContentId() ?? this.multi.getListboxId();\n }\n\n @HostBinding('attr.aria-activedescendant')\n protected get ariaActiveDescendant(): string | null {\n if (!this.multi.open()) return null;\n return this.listbox?.activeId?.() ?? this.multi.getActiveDescendantId();\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n if (this.multi.disabled()) return;\n\n if (!this.multi.open()) {\n this.multi.openSelect();\n\n const q = this.el.nativeElement.value ?? '';\n this.multi.query.set(q);\n\n this.lastEmittedQuery = q;\n this.multi.queryChange.emit(q);\n\n this.listbox?.ensureActive('first');\n }\n }\n\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n if (this.multi.disabled()) return;\n\n const value = (event.target as HTMLInputElement | null)?.value ?? '';\n this.multi.query.set(value);\n\n // Policy A: do not emit during IME composition\n if (this.composing) return;\n\n // Avoid double-emit (e.g., compositionend followed by input)\n if (this.lastEmittedQuery === value) return;\n\n this.lastEmittedQuery = value;\n this.multi.queryChange.emit(value);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (this.multi.disabled()) return;\n\n // Tab should leave the widget and close any open overlay.\n if (event.key === 'Tab') {\n if (this.multi.open()) {\n this.multi.close();\n }\n return;\n }\n\n // Escape closes overlay (no selection changes)\n if (event.key === 'Escape') {\n if (this.multi.open()) {\n event.preventDefault();\n event.stopPropagation();\n this.multi.close();\n }\n return;\n }\n\n // Backspace removes last chip when input is empty\n if (event.key === 'Backspace') {\n const inputValue = this.el.nativeElement.value ?? '';\n if (inputValue.length > 0) return;\n\n const selected = this.multi.value();\n if (selected.length === 0) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.multi.removeLast();\n return;\n }\n\n // Enter commits active option (toggle) and stays open\n if (event.key === 'Enter') {\n if (!this.multi.open()) return;\n if (!this.listbox) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.listbox.commitActive();\n return;\n }\n\n // ArrowLeft on input at caret-start → focus last chip (chips UX loop)\n if (event.key === 'ArrowLeft') {\n const input = this.el.nativeElement;\n\n const start = input.selectionStart ?? 0;\n const end = input.selectionEnd ?? 0;\n\n // Only when caret is at the beginning and there's no selection range.\n if (start === 0 && end === 0) {\n const chips = Array.from(\n this.multi.hostElement.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const lastChip = chips[chips.length - 1] ?? null;\n if (lastChip) {\n event.preventDefault();\n event.stopPropagation();\n lastChip.focus();\n }\n }\n\n return;\n }\n\n // Home / End\n // Home\n if (event.key === 'Home') {\n const input = this.el.nativeElement;\n const start = input.selectionStart ?? 0;\n const end = input.selectionEnd ?? 0;\n\n // Chip UX has priority over listbox navigation\n if (start === 0 && end === 0) {\n const chips = Array.from(\n this.multi.hostElement.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const firstChip = chips[0] ?? null;\n if (firstChip) {\n event.preventDefault();\n event.stopPropagation();\n firstChip.focus();\n return;\n }\n }\n\n // Otherwise delegate to listbox when open\n if (this.multi.open()) {\n const handled = this.listbox?.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n return;\n }\n\n // End\n if (event.key === 'End') {\n // When open → delegate to listbox\n if (this.multi.open()) {\n const handled = this.listbox?.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n return;\n }\n\n // When closed → let browser move caret\n return;\n }\n \n // Navigation keys\n if (NAV_KEYS.has(event.key as any)) {\n if (!this.multi.open()) {\n event.preventDefault();\n event.stopPropagation();\n\n this.multi.openSelect();\n if (event.key === 'ArrowUp' || event.key === 'End') {\n this.listbox?.ensureActive('last');\n } else {\n this.listbox?.ensureActive('first');\n }\n return;\n }\n\n if (this.listbox) {\n const handled = this.listbox.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n return;\n }\n\n // printable keys are NOT prevented (input stays editable)\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n if (!this.multi.open()) return;\n\n const next = event.relatedTarget as Node | null;\n if (next && this.multi.hostElement.contains(next)) {\n return;\n }\n\n // Some focus transitions report null relatedTarget. Re-check after DOM focus settles.\n queueMicrotask(() => {\n const active = this.el.nativeElement.ownerDocument.activeElement;\n if (active && this.multi.hostElement.contains(active)) {\n return;\n }\n\n this.multi.close();\n });\n }\n\n @HostListener('compositionstart')\n protected onCompositionStart(): void {\n this.composing = true;\n }\n\n @HostListener('compositionend')\n protected onCompositionEnd(): void {\n this.composing = false;\n\n if (this.multi.disabled()) return;\n\n // Policy A: emit once with the final committed value\n const q = this.el.nativeElement.value ?? '';\n this.multi.query.set(q);\n\n if (this.lastEmittedQuery !== q) {\n this.lastEmittedQuery = q;\n this.multi.queryChange.emit(q);\n }\n }\n\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';
2
2
  import { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';
3
+ import * as i0 from "@angular/core";
3
4
  export declare class TngMultiSelect<T = unknown> implements TngSelectHostApi {
4
5
  readonly hostElement: any;
5
6
  readonly open: import("@angular/core").ModelSignal<boolean>;
@@ -41,5 +42,7 @@ export declare class TngMultiSelect<T = unknown> implements TngSelectHostApi {
41
42
  clear(): void;
42
43
  setListboxApi(api: TngMultiSelectListboxApi<T> | null): void;
43
44
  getListboxApi(): TngMultiSelectListboxApi<T> | null;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiSelect<any>, never>;
46
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiSelect<any>, "[tngMultiSelect]", ["tngMultiSelect"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "labelId": { "alias": "labelId"; "required": false; "isSignal": true; }; "descriptionId": { "alias": "descriptionId"; "required": false; "isSignal": true; }; "errorId": { "alias": "errorId"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "value": "valueChange"; }, never, never, true, never>;
44
47
  }
45
48
  //# sourceMappingURL=tng-multi-select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-select.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,qBASa,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,gBAAgB;IAClE,QAAQ,CAAC,WAAW,MAAiD;IACrE,SAAgB,IAAI,+CAAyB;IAC7C,SAAgB,QAAQ,+CAAyB;IACjD,8DAA8D;IAC9D,SAAgB,KAAK,oDAA2B;IAEhD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA4C;IAE/D,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,aAAa,qDAA8B;IAC3D,SAAgB,OAAO,qDAA8B;IAGrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAkB;IAG7D,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;IAED,6DAA6D;IAC7D,SAAgB,QAAQ,QAAO,OAAO,CAAS;IAExC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IAGb,MAAM,IAAI,IAAI;IAKrB,6DAA6D;IACtD,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAOrC,gEAAgE;IACzD,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAQxC,gFAAgF;IACzE,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAWxC,4BAA4B;IACrB,KAAK,IAAI,IAAI;IAKb,aAAa,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAG5D,aAAa,IAAI,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI;CAG3D"}
1
+ {"version":3,"file":"tng-multi-select.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;;AAE5E,qBASa,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,gBAAgB;IAClE,QAAQ,CAAC,WAAW,MAAiD;IACrE,SAAgB,IAAI,+CAAyB;IAC7C,SAAgB,QAAQ,+CAAyB;IACjD,8DAA8D;IAC9D,SAAgB,KAAK,oDAA2B;IAEhD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA4C;IAE/D,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,aAAa,qDAA8B;IAC3D,SAAgB,OAAO,qDAA8B;IAGrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAkB;IAG7D,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;IAED,6DAA6D;IAC7D,SAAgB,QAAQ,QAAO,OAAO,CAAS;IAExC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IAGb,MAAM,IAAI,IAAI;IAKrB,6DAA6D;IACtD,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAOrC,gEAAgE;IACzD,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAQxC,gFAAgF;IACzE,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAWxC,4BAA4B;IACrB,KAAK,IAAI,IAAI;IAKb,aAAa,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAG5D,aAAa,IAAI,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI;yCAjH/C,cAAc;2CAAd,cAAc;CAoH1B"}
@@ -1,22 +1,22 @@
1
- import { __decorate } from "tslib";
2
1
  import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';
3
2
  import { TNG_MULTI_SELECT } from './tng-multi-select.tokens';
4
3
  import { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';
5
- let TngMultiSelect = class TngMultiSelect {
4
+ import * as i0 from "@angular/core";
5
+ export class TngMultiSelect {
6
6
  hostElement = inject((ElementRef)).nativeElement;
7
- open = model(false);
8
- disabled = input(false);
7
+ open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
8
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
9
9
  /** Values of selected options. Empty array = no selection. */
10
- value = model([]);
10
+ value = model([], ...(ngDevMode ? [{ debugName: "value" }] : []));
11
11
  _contentId = null;
12
12
  _listboxId = null;
13
13
  _activeId = null;
14
14
  _listboxApi = null;
15
- loading = input(false);
16
- invalid = input(false);
17
- labelId = input(null);
18
- descriptionId = input(null);
19
- errorId = input(null);
15
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
16
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
17
+ labelId = input(null, ...(ngDevMode ? [{ debugName: "labelId" }] : []));
18
+ descriptionId = input(null, ...(ngDevMode ? [{ debugName: "descriptionId" }] : []));
19
+ errorId = input(null, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
20
20
  dataSlot = 'multi-select';
21
21
  get dataState() {
22
22
  return this.open() ? 'open' : 'closed';
@@ -105,32 +105,37 @@ let TngMultiSelect = class TngMultiSelect {
105
105
  getListboxApi() {
106
106
  return this._listboxApi;
107
107
  }
108
- };
109
- __decorate([
110
- HostBinding('attr.data-slot')
111
- ], TngMultiSelect.prototype, "dataSlot", void 0);
112
- __decorate([
113
- HostBinding('attr.data-state')
114
- ], TngMultiSelect.prototype, "dataState", null);
115
- __decorate([
116
- HostBinding('attr.data-disabled')
117
- ], TngMultiSelect.prototype, "dataDisabled", null);
118
- __decorate([
119
- HostBinding('attr.data-loading')
120
- ], TngMultiSelect.prototype, "dataLoading", null);
121
- __decorate([
122
- HostBinding('attr.data-invalid')
123
- ], TngMultiSelect.prototype, "dataInvalid", null);
124
- TngMultiSelect = __decorate([
125
- Directive({
126
- selector: '[tngMultiSelect]',
127
- exportAs: 'tngMultiSelect',
128
- standalone: true,
129
- providers: [
108
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive });
109
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngMultiSelect, isStandalone: true, selector: "[tngMultiSelect]", 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 }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, labelId: { classPropertyName: "labelId", publicName: "labelId", isSignal: true, isRequired: false, transformFunction: null }, descriptionId: { classPropertyName: "descriptionId", publicName: "descriptionId", isSignal: true, isRequired: false, transformFunction: null }, errorId: { classPropertyName: "errorId", publicName: "errorId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", value: "valueChange" }, 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: [
130
110
  { provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },
131
111
  { provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },
132
- ],
133
- })
134
- ], TngMultiSelect);
135
- export { TngMultiSelect };
112
+ ], exportAs: ["tngMultiSelect"], ngImport: i0 });
113
+ }
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiSelect, decorators: [{
115
+ type: Directive,
116
+ args: [{
117
+ selector: '[tngMultiSelect]',
118
+ exportAs: 'tngMultiSelect',
119
+ standalone: true,
120
+ providers: [
121
+ { provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },
122
+ { provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },
123
+ ],
124
+ }]
125
+ }], 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"] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], labelId: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelId", required: false }] }], descriptionId: [{ type: i0.Input, args: [{ isSignal: true, alias: "descriptionId", required: false }] }], errorId: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorId", required: false }] }], dataSlot: [{
126
+ type: HostBinding,
127
+ args: ['attr.data-slot']
128
+ }], dataState: [{
129
+ type: HostBinding,
130
+ args: ['attr.data-state']
131
+ }], dataDisabled: [{
132
+ type: HostBinding,
133
+ args: ['attr.data-disabled']
134
+ }], dataLoading: [{
135
+ type: HostBinding,
136
+ args: ['attr.data-loading']
137
+ }], dataInvalid: [{
138
+ type: HostBinding,
139
+ args: ['attr.data-invalid']
140
+ }] } });
136
141
  //# sourceMappingURL=tng-multi-select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-select.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';\nimport type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\n\n@Directive({\n selector: '[tngMultiSelect]',\n exportAs: 'tngMultiSelect',\n standalone: true,\n providers: [\n { provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },\n { provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },\n ],\n})\nexport class TngMultiSelect<T = unknown> implements TngSelectHostApi {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n public readonly open = model<boolean>(false);\n public readonly disabled = input<boolean>(false);\n /** Values of selected options. Empty array = no selection. */\n public readonly value = model<readonly T[]>([]);\n\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiSelectListboxApi<T> | null = null;\n\n public readonly loading = input<boolean>(false);\n public readonly invalid = input<boolean>(false);\n public readonly labelId = input<string | null>(null);\n public readonly descriptionId = input<string | null>(null);\n public readonly errorId = input<string | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select' = 'multi-select';\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 /** Multi-select: always true. Satisfies TngSelectHostApi. */\n public readonly multiple = (): boolean => true;\n\n public setContentId(id: string | null): void {\n this._contentId = id;\n }\n public getContentId(): string | null {\n return this._contentId;\n }\n public setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n public getListboxId(): string | null {\n return this._listboxId;\n }\n public setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n public getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n public openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n public close(): void {\n this.open.set(false);\n }\n public toggle(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n /** Adds an item to the selection if not already selected. */\n public addSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n if (cur.some((v) => Object.is(v, item))) return;\n this.value.set([...cur, item]);\n }\n\n /** Removes an item from the selection if currently selected. */\n public removeSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n if (idx < 0) return;\n this.value.set([...cur.slice(0, idx), ...cur.slice(idx + 1)]);\n }\n\n /** Toggles an item in the selection (add if not present, remove if present). */\n public toggleSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n const next =\n idx >= 0\n ? [...cur.slice(0, idx), ...cur.slice(idx + 1)]\n : [...cur, item];\n this.value.set(next);\n }\n\n /** Clears the selection. */\n public clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n public setListboxApi(api: TngMultiSelectListboxApi<T> | null): void {\n this._listboxApi = api;\n }\n public getListboxApi(): TngMultiSelectListboxApi<T> | null {\n return this._listboxApi;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-multi-select.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';\nimport type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\n\n@Directive({\n selector: '[tngMultiSelect]',\n exportAs: 'tngMultiSelect',\n standalone: true,\n providers: [\n { provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },\n { provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },\n ],\n})\nexport class TngMultiSelect<T = unknown> implements TngSelectHostApi {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n public readonly open = model<boolean>(false);\n public readonly disabled = input<boolean>(false);\n /** Values of selected options. Empty array = no selection. */\n public readonly value = model<readonly T[]>([]);\n\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiSelectListboxApi<T> | null = null;\n\n public readonly loading = input<boolean>(false);\n public readonly invalid = input<boolean>(false);\n public readonly labelId = input<string | null>(null);\n public readonly descriptionId = input<string | null>(null);\n public readonly errorId = input<string | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select' = 'multi-select';\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 /** Multi-select: always true. Satisfies TngSelectHostApi. */\n public readonly multiple = (): boolean => true;\n\n public setContentId(id: string | null): void {\n this._contentId = id;\n }\n public getContentId(): string | null {\n return this._contentId;\n }\n public setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n public getListboxId(): string | null {\n return this._listboxId;\n }\n public setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n public getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n public openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n public close(): void {\n this.open.set(false);\n }\n public toggle(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n /** Adds an item to the selection if not already selected. */\n public addSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n if (cur.some((v) => Object.is(v, item))) return;\n this.value.set([...cur, item]);\n }\n\n /** Removes an item from the selection if currently selected. */\n public removeSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n if (idx < 0) return;\n this.value.set([...cur.slice(0, idx), ...cur.slice(idx + 1)]);\n }\n\n /** Toggles an item in the selection (add if not present, remove if present). */\n public toggleSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n const next =\n idx >= 0\n ? [...cur.slice(0, idx), ...cur.slice(idx + 1)]\n : [...cur, item];\n this.value.set(next);\n }\n\n /** Clears the selection. */\n public clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n public setListboxApi(api: TngMultiSelectListboxApi<T> | null): void {\n this._listboxApi = api;\n }\n public getListboxApi(): TngMultiSelectListboxApi<T> | null {\n return this._listboxApi;\n }\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@tailng-ui/primitives";
2
4
  export declare class TngMultiSelectListbox<T = unknown> implements TngMultiSelectListboxApi<T> {
3
5
  private readonly multiSelect;
4
6
  private readonly destroyRef;
@@ -14,8 +16,12 @@ export declare class TngMultiSelectListbox<T = unknown> implements TngMultiSelec
14
16
  /** Multi: Enter toggles option, does not close. */
15
17
  commitActive(): void;
16
18
  protected onListboxValueChange(value: T | readonly T[] | null): void;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiSelectListbox<any>, never>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiSelectListbox<any>, "[tngMultiSelectListbox]", never, {}, {}, never, never, true, [{ directive: typeof i1.TngListboxDirective; inputs: { "orientation": "orientation"; "direction": "direction"; "disabled": "disabled"; "loop": "loop"; "value": "value"; "multiple": "multiple"; }; outputs: { "valueChange": "valueChange"; }; }]>;
17
21
  }
18
22
  export declare class TngMultiSelectOption<T> {
19
23
  protected readonly dataSlot: 'multi-select-option';
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiSelectOption<any>, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiSelectOption<any>, "[tngMultiSelectOption]", never, {}, {}, never, never, true, [{ directive: typeof i1.TngOptionDirective; inputs: { "tngValue": "tngValue"; "disabled": "disabled"; }; outputs: {}; }]>;
20
26
  }
21
27
  //# sourceMappingURL=tng-multi-select.listbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-select.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAK5E,qBAYa,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,wBAAwB,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+C;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAA0B;IAG7E,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuB1C,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,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,mDAAmD;IACnD,YAAY,IAAI,IAAI;IAKpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;CAUrE;AAED,qBAUa,oBAAoB,CAAC,CAAC;IAEjC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAyB;CAC5E"}
1
+ {"version":3,"file":"tng-multi-select.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;;;AAK5E,qBAYa,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,wBAAwB,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+C;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAA0B;IAG7E,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuB1C,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,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,mDAAmD;IACnD,YAAY,IAAI,IAAI;IAKpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;yCA1DzD,qBAAqB;2CAArB,qBAAqB;CAoEjC;AAED,qBAUa,oBAAoB,CAAC,CAAC;IAEjC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAyB;yCAFhE,oBAAoB;2CAApB,oBAAoB;CAGhC"}
@@ -1,12 +1,13 @@
1
- import { __decorate } from "tslib";
2
1
  import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';
3
2
  import { createTngIdFactory } from '@tailng-ui/cdk';
4
3
  import { arraysEqual, normalizeToArray } from '../../internal/combobox';
5
4
  import { TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';
6
5
  import { TNG_MULTI_SELECT } from './tng-multi-select.tokens';
7
6
  import { TNG_MULTI_SELECT_LISTBOX } from './tng-multi-select.listbox.tokens';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@tailng-ui/primitives";
8
9
  const createListboxId = createTngIdFactory('tng-multi-select-listbox');
9
- let TngMultiSelectListbox = class TngMultiSelectListbox {
10
+ export class TngMultiSelectListbox {
10
11
  multiSelect = inject(TNG_MULTI_SELECT);
11
12
  destroyRef = inject(DestroyRef);
12
13
  listbox = inject((TngListboxDirective), { self: true });
@@ -60,48 +61,52 @@ let TngMultiSelectListbox = class TngMultiSelectListbox {
60
61
  this.multiSelect.value.set(next && next.length > 0 ? [...next] : []);
61
62
  // Multi: overlay stays open
62
63
  }
63
- };
64
- __decorate([
65
- HostBinding('attr.data-slot')
66
- ], TngMultiSelectListbox.prototype, "dataSlot", void 0);
67
- __decorate([
68
- HostBinding('attr.id')
69
- ], TngMultiSelectListbox.prototype, "id", void 0);
70
- __decorate([
71
- HostListener('valueChange', ['$event'])
72
- ], TngMultiSelectListbox.prototype, "onListboxValueChange", null);
73
- TngMultiSelectListbox = __decorate([
74
- Directive({
75
- selector: '[tngMultiSelectListbox]',
76
- standalone: true,
77
- providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],
78
- hostDirectives: [
79
- {
80
- directive: TngListboxDirective,
81
- inputs: ['orientation', 'direction', 'disabled', 'loop', 'value', 'multiple'],
82
- outputs: ['valueChange'],
83
- },
84
- ],
85
- })
86
- ], TngMultiSelectListbox);
87
- export { TngMultiSelectListbox };
88
- let TngMultiSelectOption = class TngMultiSelectOption {
64
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiSelectListbox, deps: [], target: i0.ɵɵFactoryTarget.Directive });
65
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMultiSelectListbox, isStandalone: true, selector: "[tngMultiSelectListbox]", host: { listeners: { "valueChange": "onListboxValueChange($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.id": "this.id" } }, providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }], hostDirectives: [{ directive: i1.TngListboxDirective, inputs: ["orientation", "orientation", "direction", "direction", "disabled", "disabled", "loop", "loop", "value", "value", "multiple", "multiple"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 });
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiSelectListbox, decorators: [{
68
+ type: Directive,
69
+ args: [{
70
+ selector: '[tngMultiSelectListbox]',
71
+ standalone: true,
72
+ providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],
73
+ hostDirectives: [
74
+ {
75
+ directive: TngListboxDirective,
76
+ inputs: ['orientation', 'direction', 'disabled', 'loop', 'value', 'multiple'],
77
+ outputs: ['valueChange'],
78
+ },
79
+ ],
80
+ }]
81
+ }], ctorParameters: () => [], propDecorators: { dataSlot: [{
82
+ type: HostBinding,
83
+ args: ['attr.data-slot']
84
+ }], id: [{
85
+ type: HostBinding,
86
+ args: ['attr.id']
87
+ }], onListboxValueChange: [{
88
+ type: HostListener,
89
+ args: ['valueChange', ['$event']]
90
+ }] } });
91
+ export class TngMultiSelectOption {
89
92
  dataSlot = 'multi-select-option';
90
- };
91
- __decorate([
92
- HostBinding('attr.data-slot')
93
- ], TngMultiSelectOption.prototype, "dataSlot", void 0);
94
- TngMultiSelectOption = __decorate([
95
- Directive({
96
- selector: '[tngMultiSelectOption]',
97
- standalone: true,
98
- hostDirectives: [
99
- {
100
- directive: TngOptionDirective,
101
- inputs: ['tngValue', 'disabled'],
102
- },
103
- ],
104
- })
105
- ], TngMultiSelectOption);
106
- export { TngMultiSelectOption };
93
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiSelectOption, deps: [], target: i0.ɵɵFactoryTarget.Directive });
94
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMultiSelectOption, isStandalone: true, selector: "[tngMultiSelectOption]", host: { properties: { "attr.data-slot": "this.dataSlot" } }, hostDirectives: [{ directive: i1.TngOptionDirective, inputs: ["tngValue", "tngValue", "disabled", "disabled"] }], ngImport: i0 });
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiSelectOption, decorators: [{
97
+ type: Directive,
98
+ args: [{
99
+ selector: '[tngMultiSelectOption]',
100
+ standalone: true,
101
+ hostDirectives: [
102
+ {
103
+ directive: TngOptionDirective,
104
+ inputs: ['tngValue', 'disabled'],
105
+ },
106
+ ],
107
+ }]
108
+ }], propDecorators: { dataSlot: [{
109
+ type: HostBinding,
110
+ args: ['attr.data-slot']
111
+ }] } });
107
112
  //# sourceMappingURL=tng-multi-select.listbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-select.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { arraysEqual, normalizeToArray } from '../../internal/combobox';\nimport type { ListboxValue } from '../listbox/listbox.directive';\nimport { TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport type { TngMultiSelect } from './tng-multi-select';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\nimport { TNG_MULTI_SELECT_LISTBOX } from './tng-multi-select.listbox.tokens';\n\nconst createListboxId = createTngIdFactory('tng-multi-select-listbox');\n\n@Directive({\n selector: '[tngMultiSelectListbox]',\n standalone: true,\n providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value', 'multiple'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiSelectListbox<T = unknown> implements TngMultiSelectListboxApi<T> {\n private readonly multiSelect = inject<TngMultiSelect<T>>(TNG_MULTI_SELECT);\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-select-listbox' = 'multi-select-listbox';\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multiSelect.setListboxId(this.id);\n this.multiSelect.setListboxApi(this);\n\n effect(() => {\n const v = this.multiSelect.value();\n if (this.multiSelect.open()) return;\n\n const current = untracked(this.listbox.value);\n const arrV = v.length > 0 ? ([...v] as readonly T[]) : null;\n const arrCur = normalizeToArray(current);\n if (arraysEqual(arrV, arrCur)) return;\n this.listbox.value.set((v.length > 0 ? v : null) as ListboxValue<T>);\n });\n\n this.destroyRef.onDestroy(() => {\n this.multiSelect.setListboxId(null);\n this.multiSelect.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 typeahead(key: string): boolean {\n return this.listbox.typeaheadFromCombobox(key);\n }\n\n /** Multi: Enter toggles option, does not close. */\n commitActive(): void {\n this.listbox.handleKeyFromCombobox('Enter');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multiSelect.disabled()) return;\n\n const next = normalizeToArray(value);\n const cur = this.multiSelect.value();\n if (arraysEqual(next, cur.length > 0 ? cur : null)) return;\n\n this.multiSelect.value.set(next && next.length > 0 ? [...next] : []);\n // Multi: overlay stays open\n }\n}\n\n@Directive({\n selector: '[tngMultiSelectOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiSelectOption<T> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select-option' = 'multi-select-option';\n}\n"]}
1
+ {"version":3,"file":"tng-multi-select.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;;;AAE7E,MAAM,eAAe,GAAG,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;AAcvE,MAAM,OAAO,qBAAqB;IACf,WAAW,GAAG,MAAM,CAAoB,gBAAgB,CAAC,CAAC;IAC1D,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,GAA2B,sBAAsB,CAAC;IAG1D,EAAE,GAAG,eAAe,EAAE,CAAC;IAE1C;QACE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;gBAAE,OAAO;YAEpC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;gBAAE,OAAO;YACtC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAoB,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACvC,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,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,mDAAmD;IACnD,YAAY;QACV,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAGS,oBAAoB,CAAC,KAA8B;QAC3D,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YAAE,OAAO;QAExC,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO;QAE3D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,4BAA4B;IAC9B,CAAC;uGAnEU,qBAAqB;2FAArB,qBAAqB,uNATrB,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;;2FAS3E,qBAAqB;kBAZjC,SAAS;mBAAC;oBACT,QAAQ,EAAE,yBAAyB;oBACnC,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,uBAAuB,EAAE,CAAC;oBACtF,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,mBAAmB;4BAC9B,MAAM,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC;4BAC7E,OAAO,EAAE,CAAC,aAAa,CAAC;yBACzB;qBACF;iBACF;;sBAME,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,SAAS;;sBAiDrB,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;AAuBzC,MAAM,OAAO,oBAAoB;IAEZ,QAAQ,GAA0B,qBAAqB,CAAC;uGAFhE,oBAAoB;2FAApB,oBAAoB;;2FAApB,oBAAoB;kBAVhC,SAAS;mBAAC;oBACT,QAAQ,EAAE,wBAAwB;oBAClC,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,kBAAkB;4BAC7B,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;yBACjC;qBACF;iBACF;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { arraysEqual, normalizeToArray } from '../../internal/combobox';\nimport type { ListboxValue } from '../listbox/listbox.directive';\nimport { TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport type { TngMultiSelect } from './tng-multi-select';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\nimport { TNG_MULTI_SELECT_LISTBOX } from './tng-multi-select.listbox.tokens';\n\nconst createListboxId = createTngIdFactory('tng-multi-select-listbox');\n\n@Directive({\n selector: '[tngMultiSelectListbox]',\n standalone: true,\n providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value', 'multiple'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiSelectListbox<T = unknown> implements TngMultiSelectListboxApi<T> {\n private readonly multiSelect = inject<TngMultiSelect<T>>(TNG_MULTI_SELECT);\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-select-listbox' = 'multi-select-listbox';\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multiSelect.setListboxId(this.id);\n this.multiSelect.setListboxApi(this);\n\n effect(() => {\n const v = this.multiSelect.value();\n if (this.multiSelect.open()) return;\n\n const current = untracked(this.listbox.value);\n const arrV = v.length > 0 ? ([...v] as readonly T[]) : null;\n const arrCur = normalizeToArray(current);\n if (arraysEqual(arrV, arrCur)) return;\n this.listbox.value.set((v.length > 0 ? v : null) as ListboxValue<T>);\n });\n\n this.destroyRef.onDestroy(() => {\n this.multiSelect.setListboxId(null);\n this.multiSelect.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 typeahead(key: string): boolean {\n return this.listbox.typeaheadFromCombobox(key);\n }\n\n /** Multi: Enter toggles option, does not close. */\n commitActive(): void {\n this.listbox.handleKeyFromCombobox('Enter');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multiSelect.disabled()) return;\n\n const next = normalizeToArray(value);\n const cur = this.multiSelect.value();\n if (arraysEqual(next, cur.length > 0 ? cur : null)) return;\n\n this.multiSelect.value.set(next && next.length > 0 ? [...next] : []);\n // Multi: overlay stays open\n }\n}\n\n@Directive({\n selector: '[tngMultiSelectOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiSelectOption<T> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select-option' = 'multi-select-option';\n}\n"]}
@@ -1,4 +1,7 @@
1
+ import * as i0 from "@angular/core";
1
2
  export declare class TngMultiselect {
2
3
  protected readonly dataSlot: "multiselect";
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMultiselect, never>;
5
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMultiselect, "[tngMultiselect]", ["tngMultiselect"], {}, {}, never, never, true, never>;
3
6
  }
4
7
  //# sourceMappingURL=tng-multiselect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multiselect.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":"AAEA,qBAKa,cAAc;IAEzB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;CACtD"}
1
+ {"version":3,"file":"tng-multiselect.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":";AAEA,qBAKa,cAAc;IAEzB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;yCAF1C,cAAc;2CAAd,cAAc;CAG1B"}
@@ -1,17 +1,19 @@
1
- import { __decorate } from "tslib";
2
1
  import { Directive, HostBinding } from '@angular/core';
3
- let TngMultiselect = class TngMultiselect {
2
+ import * as i0 from "@angular/core";
3
+ export class TngMultiselect {
4
4
  dataSlot = 'multiselect';
5
- };
6
- __decorate([
7
- HostBinding('attr.data-slot')
8
- ], TngMultiselect.prototype, "dataSlot", void 0);
9
- TngMultiselect = __decorate([
10
- Directive({
11
- selector: '[tngMultiselect]',
12
- exportAs: 'tngMultiselect',
13
- standalone: true,
14
- })
15
- ], TngMultiselect);
16
- export { TngMultiselect };
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiselect, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMultiselect, isStandalone: true, selector: "[tngMultiselect]", host: { properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngMultiselect"], ngImport: i0 });
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMultiselect, decorators: [{
9
+ type: Directive,
10
+ args: [{
11
+ selector: '[tngMultiselect]',
12
+ exportAs: 'tngMultiselect',
13
+ standalone: true,
14
+ }]
15
+ }], propDecorators: { dataSlot: [{
16
+ type: HostBinding,
17
+ args: ['attr.data-slot']
18
+ }] } });
17
19
  //# sourceMappingURL=tng-multiselect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multiselect.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAOhD,IAAM,cAAc,GAApB,MAAM,cAAc;IAEN,QAAQ,GAAG,aAAsB,CAAC;CACtD,CAAA;AADoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;gDACuB;AAF1C,cAAc;IAL1B,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,IAAI;KACjB,CAAC;GACW,cAAc,CAG1B","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiselect]',\n exportAs: 'tngMultiselect',\n standalone: true,\n})\nexport class TngMultiselect {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multiselect' as const;\n}\n"]}
1
+ {"version":3,"file":"tng-multiselect.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAOvD,MAAM,OAAO,cAAc;IAEN,QAAQ,GAAG,aAAsB,CAAC;uGAF1C,cAAc;2FAAd,cAAc;;2FAAd,cAAc;kBAL1B,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE,gBAAgB;oBAC1B,UAAU,EAAE,IAAI;iBACjB;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiselect]',\n exportAs: 'tngMultiselect',\n standalone: true,\n})\nexport class TngMultiselect {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multiselect' as const;\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  type NullableBooleanInput = '' | 'false' | 'true' | boolean | null | undefined;
2
3
  export declare function normalizeTngRadioStringValue(value: string | null | undefined): string | null;
3
4
  export declare function coerceTngRadioNullableBoolean(value: NullableBooleanInput): boolean | null;
@@ -41,6 +42,8 @@ export declare class TngRadio {
41
42
  onFocus(): void;
42
43
  onReadonlyChange(): void;
43
44
  private isInvalid;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngRadio, never>;
46
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngRadio, "input[tngRadio]", ["tngRadio"], { "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "ariaInvalid": { "alias": "ariaInvalid"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
44
47
  }
45
48
  export {};
46
49
  //# sourceMappingURL=tng-radio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-radio.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/radio/tng-radio.ts"],"names":[],"mappings":"AAUA,KAAK,oBAAoB,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO5F;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAczF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAElF;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,WAAW,EAAE,OAAO,GAAG,IAAI,GAC1B,OAAO,CAUT;AAED,qBAKa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoD;IAC/E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAE7B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,WAAW,yFAExB;IACH,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,OAAO,yFAEpB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,qDAA8B;IACnD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IAG/C,SAAS,KAAK,WAAW,IAAI,OAAO,CAEnC;IAGD,SAAS,KAAK,eAAe,IAAI,OAAO,GAAG,MAAM,CAEhD;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEjD;IAGD,SAAS,KAAK,eAAe,IAAI,MAAM,GAAG,IAAI,CAE7C;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,oBAAoB,IAAI,EAAE,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,aAAa,IAAI,SAAS,GAAG,WAAW,CAErD;IAGD,SAAS,KAAK,iBAAiB,IAAI,EAAE,GAAG,IAAI,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAGD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,CAEvC;IAGM,MAAM,IAAI,IAAI;IAMd,OAAO,IAAI,IAAI;IAMf,gBAAgB,IAAI,IAAI;IAQ/B,OAAO,CAAC,SAAS;CAGlB"}
1
+ {"version":3,"file":"tng-radio.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/radio/tng-radio.ts"],"names":[],"mappings":";AAUA,KAAK,oBAAoB,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO5F;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAczF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAElF;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,WAAW,EAAE,OAAO,GAAG,IAAI,GAC1B,OAAO,CAUT;AAED,qBAKa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoD;IAC/E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAE7B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,WAAW,yFAExB;IACH,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,OAAO,yFAEpB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,qDAA8B;IACnD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IAG/C,SAAS,KAAK,WAAW,IAAI,OAAO,CAEnC;IAGD,SAAS,KAAK,eAAe,IAAI,OAAO,GAAG,MAAM,CAEhD;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEjD;IAGD,SAAS,KAAK,eAAe,IAAI,MAAM,GAAG,IAAI,CAE7C;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,oBAAoB,IAAI,EAAE,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,aAAa,IAAI,SAAS,GAAG,WAAW,CAErD;IAGD,SAAS,KAAK,iBAAiB,IAAI,EAAE,GAAG,IAAI,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAGD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,CAEvC;IAGM,MAAM,IAAI,IAAI;IAMd,OAAO,IAAI,IAAI;IAMf,gBAAgB,IAAI,IAAI;IAQ/B,OAAO,CAAC,SAAS;yCArJN,QAAQ;2CAAR,QAAQ;CAwJpB"}