@tailng-ui/primitives 0.1.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 (374) hide show
  1. package/README.md +36 -0
  2. package/package.json +13 -0
  3. package/src/index.d.ts +55 -0
  4. package/src/index.d.ts.map +1 -0
  5. package/src/index.js +61 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/feedback/empty/tng-empty.d.ts +16 -0
  8. package/src/lib/feedback/empty/tng-empty.d.ts.map +1 -0
  9. package/src/lib/feedback/empty/tng-empty.js +68 -0
  10. package/src/lib/feedback/empty/tng-empty.js.map +1 -0
  11. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts +24 -0
  12. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts.map +1 -0
  13. package/src/lib/feedback/progress-bar/tng-progress-bar.js +100 -0
  14. package/src/lib/feedback/progress-bar/tng-progress-bar.js.map +1 -0
  15. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts +21 -0
  16. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts.map +1 -0
  17. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js +87 -0
  18. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js.map +1 -0
  19. package/src/lib/feedback/skeleton/tng-skeleton.d.ts +11 -0
  20. package/src/lib/feedback/skeleton/tng-skeleton.d.ts.map +1 -0
  21. package/src/lib/feedback/skeleton/tng-skeleton.js +44 -0
  22. package/src/lib/feedback/skeleton/tng-skeleton.js.map +1 -0
  23. package/src/lib/feedback/toast/tng-toast.d.ts +20 -0
  24. package/src/lib/feedback/toast/tng-toast.d.ts.map +1 -0
  25. package/src/lib/feedback/toast/tng-toast.js +79 -0
  26. package/src/lib/feedback/toast/tng-toast.js.map +1 -0
  27. package/src/lib/form/_shared/id/index.d.ts +4 -0
  28. package/src/lib/form/_shared/id/index.d.ts.map +1 -0
  29. package/src/lib/form/_shared/id/index.js +4 -0
  30. package/src/lib/form/_shared/id/index.js.map +1 -0
  31. package/src/lib/form/_shared/id/tng-unique-id.provider.d.ts +11 -0
  32. package/src/lib/form/_shared/id/tng-unique-id.provider.d.ts.map +1 -0
  33. package/src/lib/form/_shared/id/tng-unique-id.provider.js +15 -0
  34. package/src/lib/form/_shared/id/tng-unique-id.provider.js.map +1 -0
  35. package/src/lib/form/_shared/id/tng-unique-id.service.d.ts +9 -0
  36. package/src/lib/form/_shared/id/tng-unique-id.service.d.ts.map +1 -0
  37. package/src/lib/form/_shared/id/tng-unique-id.service.js +18 -0
  38. package/src/lib/form/_shared/id/tng-unique-id.service.js.map +1 -0
  39. package/src/lib/form/_shared/id/tng-unique-id.token.d.ts +8 -0
  40. package/src/lib/form/_shared/id/tng-unique-id.token.d.ts.map +1 -0
  41. package/src/lib/form/_shared/id/tng-unique-id.token.js +13 -0
  42. package/src/lib/form/_shared/id/tng-unique-id.token.js.map +1 -0
  43. package/src/lib/form/_shared/select/tng-select.host-api.d.ts +28 -0
  44. package/src/lib/form/_shared/select/tng-select.host-api.d.ts.map +1 -0
  45. package/src/lib/form/_shared/select/tng-select.host-api.js +1 -0
  46. package/src/lib/form/_shared/select/tng-select.host-api.js.map +1 -0
  47. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts +38 -0
  48. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts.map +1 -0
  49. package/src/lib/form/_shared/select/tng-select.overlay.shared.js +226 -0
  50. package/src/lib/form/_shared/select/tng-select.overlay.shared.js.map +1 -0
  51. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts +35 -0
  52. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts.map +1 -0
  53. package/src/lib/form/_shared/select/tng-select.parts.shared.js +199 -0
  54. package/src/lib/form/_shared/select/tng-select.parts.shared.js.map +1 -0
  55. package/src/lib/form/_shared/select/tng-select.tokens.shared.d.ts +8 -0
  56. package/src/lib/form/_shared/select/tng-select.tokens.shared.d.ts.map +1 -0
  57. package/src/lib/form/_shared/select/tng-select.tokens.shared.js +7 -0
  58. package/src/lib/form/_shared/select/tng-select.tokens.shared.js.map +1 -0
  59. package/src/lib/form/autocomplete/index.d.ts +7 -0
  60. package/src/lib/form/autocomplete/index.d.ts.map +1 -0
  61. package/src/lib/form/autocomplete/index.js +6 -0
  62. package/src/lib/form/autocomplete/index.js.map +1 -0
  63. package/src/lib/form/autocomplete/tng-autocomplete.d.ts +52 -0
  64. package/src/lib/form/autocomplete/tng-autocomplete.d.ts.map +1 -0
  65. package/src/lib/form/autocomplete/tng-autocomplete.js +95 -0
  66. package/src/lib/form/autocomplete/tng-autocomplete.js.map +1 -0
  67. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts +19 -0
  68. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts.map +1 -0
  69. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js +123 -0
  70. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js.map +1 -0
  71. package/src/lib/form/autocomplete/tng-autocomplete.listbox.tokens.d.ts +4 -0
  72. package/src/lib/form/autocomplete/tng-autocomplete.listbox.tokens.d.ts.map +1 -0
  73. package/src/lib/form/autocomplete/tng-autocomplete.listbox.tokens.js +3 -0
  74. package/src/lib/form/autocomplete/tng-autocomplete.listbox.tokens.js.map +1 -0
  75. package/src/lib/form/autocomplete/tng-autocomplete.listbox.types.d.ts +4 -0
  76. package/src/lib/form/autocomplete/tng-autocomplete.listbox.types.d.ts.map +1 -0
  77. package/src/lib/form/autocomplete/tng-autocomplete.listbox.types.js +1 -0
  78. package/src/lib/form/autocomplete/tng-autocomplete.listbox.types.js.map +1 -0
  79. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts +40 -0
  80. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts.map +1 -0
  81. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js +236 -0
  82. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js.map +1 -0
  83. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts +38 -0
  84. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts.map +1 -0
  85. package/src/lib/form/autocomplete/tng-autocomplete.parts.js +252 -0
  86. package/src/lib/form/autocomplete/tng-autocomplete.parts.js.map +1 -0
  87. package/src/lib/form/autocomplete/tng-autocomplete.tokens.d.ts +4 -0
  88. package/src/lib/form/autocomplete/tng-autocomplete.tokens.d.ts.map +1 -0
  89. package/src/lib/form/autocomplete/tng-autocomplete.tokens.js +3 -0
  90. package/src/lib/form/autocomplete/tng-autocomplete.tokens.js.map +1 -0
  91. package/src/lib/form/button-toggle/tng-button-toggle.d.ts +164 -0
  92. package/src/lib/form/button-toggle/tng-button-toggle.d.ts.map +1 -0
  93. package/src/lib/form/button-toggle/tng-button-toggle.js +1097 -0
  94. package/src/lib/form/button-toggle/tng-button-toggle.js.map +1 -0
  95. package/src/lib/form/checkbox/tng-checkbox.d.ts +48 -0
  96. package/src/lib/form/checkbox/tng-checkbox.d.ts.map +1 -0
  97. package/src/lib/form/checkbox/tng-checkbox.js +234 -0
  98. package/src/lib/form/checkbox/tng-checkbox.js.map +1 -0
  99. package/src/lib/form/chips/tng-chips.d.ts +4 -0
  100. package/src/lib/form/chips/tng-chips.d.ts.map +1 -0
  101. package/src/lib/form/chips/tng-chips.js +16 -0
  102. package/src/lib/form/chips/tng-chips.js.map +1 -0
  103. package/src/lib/form/combobox/tng-combobox.d.ts +4 -0
  104. package/src/lib/form/combobox/tng-combobox.d.ts.map +1 -0
  105. package/src/lib/form/combobox/tng-combobox.js +16 -0
  106. package/src/lib/form/combobox/tng-combobox.js.map +1 -0
  107. package/src/lib/form/input/tng-input.d.ts +87 -0
  108. package/src/lib/form/input/tng-input.d.ts.map +1 -0
  109. package/src/lib/form/input/tng-input.js +393 -0
  110. package/src/lib/form/input/tng-input.js.map +1 -0
  111. package/src/lib/form/input-otp/tng-input-otp.d.ts +7 -0
  112. package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -0
  113. package/src/lib/form/input-otp/tng-input-otp.js +33 -0
  114. package/src/lib/form/input-otp/tng-input-otp.js.map +1 -0
  115. package/src/lib/form/label/tng-label.d.ts +6 -0
  116. package/src/lib/form/label/tng-label.d.ts.map +1 -0
  117. package/src/lib/form/label/tng-label.js +25 -0
  118. package/src/lib/form/label/tng-label.js.map +1 -0
  119. package/src/lib/form/listbox/listbox.directive.d.ts +51 -0
  120. package/src/lib/form/listbox/listbox.directive.d.ts.map +1 -0
  121. package/src/lib/form/listbox/listbox.directive.js +439 -0
  122. package/src/lib/form/listbox/listbox.directive.js.map +1 -0
  123. package/src/lib/form/listbox/option.directive.d.ts +22 -0
  124. package/src/lib/form/listbox/option.directive.d.ts.map +1 -0
  125. package/src/lib/form/listbox/option.directive.js +109 -0
  126. package/src/lib/form/listbox/option.directive.js.map +1 -0
  127. package/src/lib/form/listbox/tokens.d.ts +14 -0
  128. package/src/lib/form/listbox/tokens.d.ts.map +1 -0
  129. package/src/lib/form/listbox/tokens.js +13 -0
  130. package/src/lib/form/listbox/tokens.js.map +1 -0
  131. package/src/lib/form/multi-autocomplete/index.d.ts +10 -0
  132. package/src/lib/form/multi-autocomplete/index.d.ts.map +1 -0
  133. package/src/lib/form/multi-autocomplete/index.js +10 -0
  134. package/src/lib/form/multi-autocomplete/index.js.map +1 -0
  135. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts +11 -0
  136. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts.map +1 -0
  137. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js +98 -0
  138. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js.map +1 -0
  139. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts +10 -0
  140. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts.map +1 -0
  141. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js +45 -0
  142. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js.map +1 -0
  143. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts +43 -0
  144. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts.map +1 -0
  145. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js +150 -0
  146. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js.map +1 -0
  147. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts +20 -0
  148. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts.map +1 -0
  149. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js +138 -0
  150. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js.map +1 -0
  151. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.tokens.d.ts +4 -0
  152. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.tokens.d.ts.map +1 -0
  153. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.tokens.js +3 -0
  154. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.tokens.js.map +1 -0
  155. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.types.d.ts +18 -0
  156. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.types.d.ts.map +1 -0
  157. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.types.js +2 -0
  158. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.types.js.map +1 -0
  159. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts +4 -0
  160. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts.map +1 -0
  161. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js +17 -0
  162. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js.map +1 -0
  163. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.tokens.d.ts +4 -0
  164. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.tokens.d.ts.map +1 -0
  165. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.tokens.js +3 -0
  166. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.tokens.js.map +1 -0
  167. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts +21 -0
  168. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts.map +1 -0
  169. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js +241 -0
  170. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js.map +1 -0
  171. package/src/lib/form/multi-select/index.d.ts +7 -0
  172. package/src/lib/form/multi-select/index.d.ts.map +1 -0
  173. package/src/lib/form/multi-select/index.js +6 -0
  174. package/src/lib/form/multi-select/index.js.map +1 -0
  175. package/src/lib/form/multi-select/tng-multi-select.d.ts +45 -0
  176. package/src/lib/form/multi-select/tng-multi-select.d.ts.map +1 -0
  177. package/src/lib/form/multi-select/tng-multi-select.js +136 -0
  178. package/src/lib/form/multi-select/tng-multi-select.js.map +1 -0
  179. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts +21 -0
  180. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts.map +1 -0
  181. package/src/lib/form/multi-select/tng-multi-select.listbox.js +107 -0
  182. package/src/lib/form/multi-select/tng-multi-select.listbox.js.map +1 -0
  183. package/src/lib/form/multi-select/tng-multi-select.listbox.tokens.d.ts +3 -0
  184. package/src/lib/form/multi-select/tng-multi-select.listbox.tokens.d.ts.map +1 -0
  185. package/src/lib/form/multi-select/tng-multi-select.listbox.tokens.js +3 -0
  186. package/src/lib/form/multi-select/tng-multi-select.listbox.tokens.js.map +1 -0
  187. package/src/lib/form/multi-select/tng-multi-select.listbox.types.d.ts +3 -0
  188. package/src/lib/form/multi-select/tng-multi-select.listbox.types.d.ts.map +1 -0
  189. package/src/lib/form/multi-select/tng-multi-select.listbox.types.js +1 -0
  190. package/src/lib/form/multi-select/tng-multi-select.listbox.types.js.map +1 -0
  191. package/src/lib/form/multi-select/tng-multi-select.overlay.d.ts +5 -0
  192. package/src/lib/form/multi-select/tng-multi-select.overlay.d.ts.map +1 -0
  193. package/src/lib/form/multi-select/tng-multi-select.overlay.js +5 -0
  194. package/src/lib/form/multi-select/tng-multi-select.overlay.js.map +1 -0
  195. package/src/lib/form/multi-select/tng-multi-select.parts.d.ts +5 -0
  196. package/src/lib/form/multi-select/tng-multi-select.parts.d.ts.map +1 -0
  197. package/src/lib/form/multi-select/tng-multi-select.parts.js +5 -0
  198. package/src/lib/form/multi-select/tng-multi-select.parts.js.map +1 -0
  199. package/src/lib/form/multi-select/tng-multi-select.tokens.d.ts +4 -0
  200. package/src/lib/form/multi-select/tng-multi-select.tokens.d.ts.map +1 -0
  201. package/src/lib/form/multi-select/tng-multi-select.tokens.js +3 -0
  202. package/src/lib/form/multi-select/tng-multi-select.tokens.js.map +1 -0
  203. package/src/lib/form/multiselect/tng-multiselect.d.ts +4 -0
  204. package/src/lib/form/multiselect/tng-multiselect.d.ts.map +1 -0
  205. package/src/lib/form/multiselect/tng-multiselect.js +16 -0
  206. package/src/lib/form/multiselect/tng-multiselect.js.map +1 -0
  207. package/src/lib/form/radio/tng-radio.d.ts +20 -0
  208. package/src/lib/form/radio/tng-radio.d.ts.map +1 -0
  209. package/src/lib/form/radio/tng-radio.js +86 -0
  210. package/src/lib/form/radio/tng-radio.js.map +1 -0
  211. package/src/lib/form/select/tng-select.d.ts +38 -0
  212. package/src/lib/form/select/tng-select.d.ts.map +1 -0
  213. package/src/lib/form/select/tng-select.js +106 -0
  214. package/src/lib/form/select/tng-select.js.map +1 -0
  215. package/src/lib/form/select/tng-select.listbox.d.ts +20 -0
  216. package/src/lib/form/select/tng-select.listbox.d.ts.map +1 -0
  217. package/src/lib/form/select/tng-select.listbox.js +123 -0
  218. package/src/lib/form/select/tng-select.listbox.js.map +1 -0
  219. package/src/lib/form/select/tng-select.listbox.tokens.d.ts +3 -0
  220. package/src/lib/form/select/tng-select.listbox.tokens.d.ts.map +1 -0
  221. package/src/lib/form/select/tng-select.listbox.tokens.js +3 -0
  222. package/src/lib/form/select/tng-select.listbox.tokens.js.map +1 -0
  223. package/src/lib/form/select/tng-select.listbox.types.d.ts +4 -0
  224. package/src/lib/form/select/tng-select.listbox.types.d.ts.map +1 -0
  225. package/src/lib/form/select/tng-select.listbox.types.js +1 -0
  226. package/src/lib/form/select/tng-select.listbox.types.js.map +1 -0
  227. package/src/lib/form/select/tng-select.overlay.d.ts +5 -0
  228. package/src/lib/form/select/tng-select.overlay.d.ts.map +1 -0
  229. package/src/lib/form/select/tng-select.overlay.js +5 -0
  230. package/src/lib/form/select/tng-select.overlay.js.map +1 -0
  231. package/src/lib/form/select/tng-select.parts.d.ts +5 -0
  232. package/src/lib/form/select/tng-select.parts.d.ts.map +1 -0
  233. package/src/lib/form/select/tng-select.parts.js +5 -0
  234. package/src/lib/form/select/tng-select.parts.js.map +1 -0
  235. package/src/lib/form/select/tng-select.tokens.d.ts +4 -0
  236. package/src/lib/form/select/tng-select.tokens.d.ts.map +1 -0
  237. package/src/lib/form/select/tng-select.tokens.js +3 -0
  238. package/src/lib/form/select/tng-select.tokens.js.map +1 -0
  239. package/src/lib/form/slider/tng-slider.d.ts +19 -0
  240. package/src/lib/form/slider/tng-slider.d.ts.map +1 -0
  241. package/src/lib/form/slider/tng-slider.js +84 -0
  242. package/src/lib/form/slider/tng-slider.js.map +1 -0
  243. package/src/lib/form/switch/tng-switch.d.ts +19 -0
  244. package/src/lib/form/switch/tng-switch.d.ts.map +1 -0
  245. package/src/lib/form/switch/tng-switch.js +79 -0
  246. package/src/lib/form/switch/tng-switch.js.map +1 -0
  247. package/src/lib/form/textarea/tng-textarea.d.ts +23 -0
  248. package/src/lib/form/textarea/tng-textarea.d.ts.map +1 -0
  249. package/src/lib/form/textarea/tng-textarea.js +119 -0
  250. package/src/lib/form/textarea/tng-textarea.js.map +1 -0
  251. package/src/lib/form/toggle/tng-toggle.d.ts +44 -0
  252. package/src/lib/form/toggle/tng-toggle.d.ts.map +1 -0
  253. package/src/lib/form/toggle/tng-toggle.js +203 -0
  254. package/src/lib/form/toggle/tng-toggle.js.map +1 -0
  255. package/src/lib/form/toggle-group/tng-toggle-group.d.ts +35 -0
  256. package/src/lib/form/toggle-group/tng-toggle-group.d.ts.map +1 -0
  257. package/src/lib/form/toggle-group/tng-toggle-group.js +156 -0
  258. package/src/lib/form/toggle-group/tng-toggle-group.js.map +1 -0
  259. package/src/lib/internal/combobox/combobox.active.d.ts +17 -0
  260. package/src/lib/internal/combobox/combobox.active.d.ts.map +1 -0
  261. package/src/lib/internal/combobox/combobox.active.js +19 -0
  262. package/src/lib/internal/combobox/combobox.active.js.map +1 -0
  263. package/src/lib/internal/combobox/combobox.commit.d.ts +20 -0
  264. package/src/lib/internal/combobox/combobox.commit.d.ts.map +1 -0
  265. package/src/lib/internal/combobox/combobox.commit.js +34 -0
  266. package/src/lib/internal/combobox/combobox.commit.js.map +1 -0
  267. package/src/lib/internal/combobox/combobox.keyboard.d.ts +39 -0
  268. package/src/lib/internal/combobox/combobox.keyboard.d.ts.map +1 -0
  269. package/src/lib/internal/combobox/combobox.keyboard.js +88 -0
  270. package/src/lib/internal/combobox/combobox.keyboard.js.map +1 -0
  271. package/src/lib/internal/combobox/combobox.listbox-api.d.ts +19 -0
  272. package/src/lib/internal/combobox/combobox.listbox-api.d.ts.map +1 -0
  273. package/src/lib/internal/combobox/combobox.listbox-api.js +5 -0
  274. package/src/lib/internal/combobox/combobox.listbox-api.js.map +1 -0
  275. package/src/lib/internal/combobox/index.d.ts +5 -0
  276. package/src/lib/internal/combobox/index.d.ts.map +1 -0
  277. package/src/lib/internal/combobox/index.js +4 -0
  278. package/src/lib/internal/combobox/index.js.map +1 -0
  279. package/src/lib/layout/accordion/tng-accordion.d.ts +150 -0
  280. package/src/lib/layout/accordion/tng-accordion.d.ts.map +1 -0
  281. package/src/lib/layout/accordion/tng-accordion.js +852 -0
  282. package/src/lib/layout/accordion/tng-accordion.js.map +1 -0
  283. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts +4 -0
  284. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts.map +1 -0
  285. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js +16 -0
  286. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js.map +1 -0
  287. package/src/lib/layout/card/tng-card.d.ts +31 -0
  288. package/src/lib/layout/card/tng-card.d.ts.map +1 -0
  289. package/src/lib/layout/card/tng-card.js +133 -0
  290. package/src/lib/layout/card/tng-card.js.map +1 -0
  291. package/src/lib/layout/collapsible/tng-collapsible.d.ts +28 -0
  292. package/src/lib/layout/collapsible/tng-collapsible.d.ts.map +1 -0
  293. package/src/lib/layout/collapsible/tng-collapsible.js +123 -0
  294. package/src/lib/layout/collapsible/tng-collapsible.js.map +1 -0
  295. package/src/lib/layout/drawer/tng-drawer.d.ts +177 -0
  296. package/src/lib/layout/drawer/tng-drawer.d.ts.map +1 -0
  297. package/src/lib/layout/drawer/tng-drawer.js +1147 -0
  298. package/src/lib/layout/drawer/tng-drawer.js.map +1 -0
  299. package/src/lib/layout/grid/tng-grid.d.ts +4 -0
  300. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -0
  301. package/src/lib/layout/grid/tng-grid.js +16 -0
  302. package/src/lib/layout/grid/tng-grid.js.map +1 -0
  303. package/src/lib/layout/separator/tng-separator.d.ts +11 -0
  304. package/src/lib/layout/separator/tng-separator.d.ts.map +1 -0
  305. package/src/lib/layout/separator/tng-separator.js +47 -0
  306. package/src/lib/layout/separator/tng-separator.js.map +1 -0
  307. package/src/lib/layout/stepper/tng-stepper.d.ts +4 -0
  308. package/src/lib/layout/stepper/tng-stepper.d.ts.map +1 -0
  309. package/src/lib/layout/stepper/tng-stepper.js +16 -0
  310. package/src/lib/layout/stepper/tng-stepper.js.map +1 -0
  311. package/src/lib/layout/tree/tng-tree.d.ts +4 -0
  312. package/src/lib/layout/tree/tng-tree.d.ts.map +1 -0
  313. package/src/lib/layout/tree/tng-tree.js +16 -0
  314. package/src/lib/layout/tree/tng-tree.js.map +1 -0
  315. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts +17 -0
  316. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts.map +1 -0
  317. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js +72 -0
  318. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js.map +1 -0
  319. package/src/lib/navigation/context-menu/tng-context-menu.d.ts +36 -0
  320. package/src/lib/navigation/context-menu/tng-context-menu.d.ts.map +1 -0
  321. package/src/lib/navigation/context-menu/tng-context-menu.js +159 -0
  322. package/src/lib/navigation/context-menu/tng-context-menu.js.map +1 -0
  323. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts +4 -0
  324. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts.map +1 -0
  325. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js +16 -0
  326. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js.map +1 -0
  327. package/src/lib/navigation/menu/tng-menu.d.ts +173 -0
  328. package/src/lib/navigation/menu/tng-menu.d.ts.map +1 -0
  329. package/src/lib/navigation/menu/tng-menu.js +1026 -0
  330. package/src/lib/navigation/menu/tng-menu.js.map +1 -0
  331. package/src/lib/navigation/menubar/tng-menubar.d.ts +64 -0
  332. package/src/lib/navigation/menubar/tng-menubar.d.ts.map +1 -0
  333. package/src/lib/navigation/menubar/tng-menubar.js +478 -0
  334. package/src/lib/navigation/menubar/tng-menubar.js.map +1 -0
  335. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts +4 -0
  336. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts.map +1 -0
  337. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js +16 -0
  338. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js.map +1 -0
  339. package/src/lib/navigation/tabs/tng-tabs.d.ts +234 -0
  340. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -0
  341. package/src/lib/navigation/tabs/tng-tabs.js +1350 -0
  342. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -0
  343. package/src/lib/navigation/toolbar/tng-toolbar.d.ts +4 -0
  344. package/src/lib/navigation/toolbar/tng-toolbar.d.ts.map +1 -0
  345. package/src/lib/navigation/toolbar/tng-toolbar.js +16 -0
  346. package/src/lib/navigation/toolbar/tng-toolbar.js.map +1 -0
  347. package/src/lib/overlay/tooltip/tng-tooltip.d.ts +25 -0
  348. package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -0
  349. package/src/lib/overlay/tooltip/tng-tooltip.js +99 -0
  350. package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -0
  351. package/src/lib/utility/avatar/tng-avatar.d.ts +10 -0
  352. package/src/lib/utility/avatar/tng-avatar.d.ts.map +1 -0
  353. package/src/lib/utility/avatar/tng-avatar.js +42 -0
  354. package/src/lib/utility/avatar/tng-avatar.js.map +1 -0
  355. package/src/lib/utility/badge/tng-badge.d.ts +63 -0
  356. package/src/lib/utility/badge/tng-badge.d.ts.map +1 -0
  357. package/src/lib/utility/badge/tng-badge.js +345 -0
  358. package/src/lib/utility/badge/tng-badge.js.map +1 -0
  359. package/src/lib/utility/code-block/tng-code-block.d.ts +16 -0
  360. package/src/lib/utility/code-block/tng-code-block.d.ts.map +1 -0
  361. package/src/lib/utility/code-block/tng-code-block.js +68 -0
  362. package/src/lib/utility/code-block/tng-code-block.js.map +1 -0
  363. package/src/lib/utility/copy/tng-copy.d.ts +75 -0
  364. package/src/lib/utility/copy/tng-copy.d.ts.map +1 -0
  365. package/src/lib/utility/copy/tng-copy.js +544 -0
  366. package/src/lib/utility/copy/tng-copy.js.map +1 -0
  367. package/src/lib/utility/press/tng-press.d.ts +33 -0
  368. package/src/lib/utility/press/tng-press.d.ts.map +1 -0
  369. package/src/lib/utility/press/tng-press.js +207 -0
  370. package/src/lib/utility/press/tng-press.js.map +1 -0
  371. package/src/lib/utility/tag/tng-tag.d.ts +4 -0
  372. package/src/lib/utility/tag/tng-tag.d.ts.map +1 -0
  373. package/src/lib/utility/tag/tng-tag.js +16 -0
  374. package/src/lib/utility/tag/tng-tag.js.map +1 -0
@@ -0,0 +1,20 @@
1
+ export type TngToastTone = 'danger' | 'neutral' | 'success' | 'warning';
2
+ export declare function resolveTngToastAriaLive(tone: TngToastTone): 'assertive' | 'polite';
3
+ export declare function resolveTngToastDataState(open: boolean): 'closed' | 'open';
4
+ export declare function resolveTngToastHidden(open: boolean): '' | null;
5
+ export declare function resolveTngToastRole(tone: TngToastTone): 'alert' | 'status';
6
+ export declare class TngToastViewport {
7
+ protected readonly dataSlot: "toast-viewport";
8
+ }
9
+ export declare class TngToastItem {
10
+ readonly open: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
11
+ readonly tone: import("@angular/core").InputSignal<TngToastTone>;
12
+ protected readonly ariaAtomicAttr: "true";
13
+ protected get ariaLiveAttr(): 'assertive' | 'polite';
14
+ protected readonly dataSlot: "toast-item";
15
+ protected get dataStateAttr(): 'closed' | 'open';
16
+ protected get dataToneAttr(): TngToastTone;
17
+ protected get hiddenAttr(): '' | null;
18
+ protected get roleAttr(): 'alert' | 'status';
19
+ }
20
+ //# sourceMappingURL=tng-toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-toast.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/feedback/toast/tng-toast.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAExE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,CAElF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAEzE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,GAAG,IAAI,CAE9D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,GAAG,QAAQ,CAE1E;AAED,qBAIa,gBAAgB;IAE3B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,gBAAgB,CAAU;CACzD;AAED,qBAIa,YAAY;IACvB,SAAgB,IAAI,8EAEjB;IACH,SAAgB,IAAI,oDAAkC;IAGtD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAG,MAAM,CAAU;IAGpD,SAAS,KAAK,YAAY,IAAI,WAAW,GAAG,QAAQ,CAEnD;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,YAAY,CAAU;IAGpD,SAAS,KAAK,aAAa,IAAI,QAAQ,GAAG,MAAM,CAE/C;IAGD,SAAS,KAAK,YAAY,IAAI,YAAY,CAEzC;IAGD,SAAS,KAAK,UAAU,IAAI,EAAE,GAAG,IAAI,CAEpC;IAGD,SAAS,KAAK,QAAQ,IAAI,OAAO,GAAG,QAAQ,CAE3C;CACF"}
@@ -0,0 +1,79 @@
1
+ import { __decorate } from "tslib";
2
+ import { Directive, HostBinding, booleanAttribute, input } from '@angular/core';
3
+ export function resolveTngToastAriaLive(tone) {
4
+ return tone === 'danger' || tone === 'warning' ? 'assertive' : 'polite';
5
+ }
6
+ export function resolveTngToastDataState(open) {
7
+ return open ? 'open' : 'closed';
8
+ }
9
+ export function resolveTngToastHidden(open) {
10
+ return open ? null : '';
11
+ }
12
+ export function resolveTngToastRole(tone) {
13
+ return tone === 'danger' || tone === 'warning' ? 'alert' : 'status';
14
+ }
15
+ let TngToastViewport = class TngToastViewport {
16
+ dataSlot = 'toast-viewport';
17
+ };
18
+ __decorate([
19
+ HostBinding('attr.data-slot')
20
+ ], TngToastViewport.prototype, "dataSlot", void 0);
21
+ TngToastViewport = __decorate([
22
+ Directive({
23
+ selector: '[tngToastViewport]',
24
+ exportAs: 'tngToastViewport',
25
+ })
26
+ ], TngToastViewport);
27
+ export { TngToastViewport };
28
+ let TngToastItem = class TngToastItem {
29
+ open = input(true, {
30
+ transform: booleanAttribute,
31
+ });
32
+ tone = input('neutral');
33
+ ariaAtomicAttr = 'true';
34
+ get ariaLiveAttr() {
35
+ return resolveTngToastAriaLive(this.tone());
36
+ }
37
+ dataSlot = 'toast-item';
38
+ get dataStateAttr() {
39
+ return resolveTngToastDataState(this.open());
40
+ }
41
+ get dataToneAttr() {
42
+ return this.tone();
43
+ }
44
+ get hiddenAttr() {
45
+ return resolveTngToastHidden(this.open());
46
+ }
47
+ get roleAttr() {
48
+ return resolveTngToastRole(this.tone());
49
+ }
50
+ };
51
+ __decorate([
52
+ HostBinding('attr.aria-atomic')
53
+ ], TngToastItem.prototype, "ariaAtomicAttr", void 0);
54
+ __decorate([
55
+ HostBinding('attr.aria-live')
56
+ ], TngToastItem.prototype, "ariaLiveAttr", null);
57
+ __decorate([
58
+ HostBinding('attr.data-slot')
59
+ ], TngToastItem.prototype, "dataSlot", void 0);
60
+ __decorate([
61
+ HostBinding('attr.data-state')
62
+ ], TngToastItem.prototype, "dataStateAttr", null);
63
+ __decorate([
64
+ HostBinding('attr.data-tone')
65
+ ], TngToastItem.prototype, "dataToneAttr", null);
66
+ __decorate([
67
+ HostBinding('attr.hidden')
68
+ ], TngToastItem.prototype, "hiddenAttr", null);
69
+ __decorate([
70
+ HostBinding('attr.role')
71
+ ], TngToastItem.prototype, "roleAttr", null);
72
+ TngToastItem = __decorate([
73
+ Directive({
74
+ selector: '[tngToastItem]',
75
+ exportAs: 'tngToastItem',
76
+ })
77
+ ], TngToastItem);
78
+ export { TngToastItem };
79
+ //# sourceMappingURL=tng-toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-toast.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/feedback/toast/tng-toast.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAIhF,MAAM,UAAU,uBAAuB,CAAC,IAAkB;IACxD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAa;IACpD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAa;IACjD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtE,CAAC;AAMM,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAER,QAAQ,GAAG,gBAAyB,CAAC;CACzD,CAAA;AADoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;kDAC0B;AAF7C,gBAAgB;IAJ5B,SAAS,CAAC;QACT,QAAQ,EAAE,oBAAoB;QAC9B,QAAQ,EAAE,kBAAkB;KAC7B,CAAC;GACW,gBAAgB,CAG5B;;AAMM,IAAM,YAAY,GAAlB,MAAM,YAAY;IACP,IAAI,GAAG,KAAK,CAA4B,IAAI,EAAE;QAC5D,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAAe,SAAS,CAAC,CAAC;IAGnC,cAAc,GAAG,MAAe,CAAC;IAGpD,IAAc,YAAY;QACxB,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAGkB,QAAQ,GAAG,YAAqB,CAAC;IAGpD,IAAc,aAAa;QACzB,OAAO,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAGD,IAAc,YAAY;QACxB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAGD,IAAc,UAAU;QACtB,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAGD,IAAc,QAAQ;QACpB,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF,CAAA;AA7BoB;IADlB,WAAW,CAAC,kBAAkB,CAAC;oDACoB;AAGpD;IADC,WAAW,CAAC,gBAAgB,CAAC;gDAG7B;AAGkB;IADlB,WAAW,CAAC,gBAAgB,CAAC;8CACsB;AAGpD;IADC,WAAW,CAAC,iBAAiB,CAAC;iDAG9B;AAGD;IADC,WAAW,CAAC,gBAAgB,CAAC;gDAG7B;AAGD;IADC,WAAW,CAAC,aAAa,CAAC;8CAG1B;AAGD;IADC,WAAW,CAAC,WAAW,CAAC;4CAGxB;AAnCU,YAAY;IAJxB,SAAS,CAAC;QACT,QAAQ,EAAE,gBAAgB;QAC1B,QAAQ,EAAE,cAAc;KACzB,CAAC;GACW,YAAY,CAoCxB","sourcesContent":["import { Directive, HostBinding, booleanAttribute, input } from '@angular/core';\n\nexport type TngToastTone = 'danger' | 'neutral' | 'success' | 'warning';\n\nexport function resolveTngToastAriaLive(tone: TngToastTone): 'assertive' | 'polite' {\n return tone === 'danger' || tone === 'warning' ? 'assertive' : 'polite';\n}\n\nexport function resolveTngToastDataState(open: boolean): 'closed' | 'open' {\n return open ? 'open' : 'closed';\n}\n\nexport function resolveTngToastHidden(open: boolean): '' | null {\n return open ? null : '';\n}\n\nexport function resolveTngToastRole(tone: TngToastTone): 'alert' | 'status' {\n return tone === 'danger' || tone === 'warning' ? 'alert' : 'status';\n}\n\n@Directive({\n selector: '[tngToastViewport]',\n exportAs: 'tngToastViewport',\n})\nexport class TngToastViewport {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'toast-viewport' as const;\n}\n\n@Directive({\n selector: '[tngToastItem]',\n exportAs: 'tngToastItem',\n})\nexport class TngToastItem {\n public readonly open = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly tone = input<TngToastTone>('neutral');\n\n @HostBinding('attr.aria-atomic')\n protected readonly ariaAtomicAttr = 'true' as const;\n\n @HostBinding('attr.aria-live')\n protected get ariaLiveAttr(): 'assertive' | 'polite' {\n return resolveTngToastAriaLive(this.tone());\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'toast-item' as const;\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'closed' | 'open' {\n return resolveTngToastDataState(this.open());\n }\n\n @HostBinding('attr.data-tone')\n protected get dataToneAttr(): TngToastTone {\n return this.tone();\n }\n\n @HostBinding('attr.hidden')\n protected get hiddenAttr(): '' | null {\n return resolveTngToastHidden(this.open());\n }\n\n @HostBinding('attr.role')\n protected get roleAttr(): 'alert' | 'status' {\n return resolveTngToastRole(this.tone());\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export * from './tng-unique-id.token';
2
+ export * from './tng-unique-id.service';
3
+ export * from './tng-unique-id.provider';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/id/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './tng-unique-id.token';
2
+ export * from './tng-unique-id.service';
3
+ export * from './tng-unique-id.provider';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/id/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './tng-unique-id.token';\nexport * from './tng-unique-id.service';\nexport * from './tng-unique-id.provider';"]}
@@ -0,0 +1,11 @@
1
+ import { Provider } from '@angular/core';
2
+ import { type TngUniqueIdGenerator } from './tng-unique-id.token';
3
+ /**
4
+ * Overrides the unique id generator used by TngUniqueIdService.
5
+ *
6
+ * Useful for:
7
+ * - tests (deterministic ids)
8
+ * - future SSR/hydration strategies
9
+ */
10
+ export declare function provideTngUniqueId(generator: TngUniqueIdGenerator): Provider;
11
+ //# sourceMappingURL=tng-unique-id.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-unique-id.provider.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/id/tng-unique-id.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,GAAG,QAAQ,CAK5E"}
@@ -0,0 +1,15 @@
1
+ import { TNG_UNIQUE_ID_GENERATOR, } from './tng-unique-id.token';
2
+ /**
3
+ * Overrides the unique id generator used by TngUniqueIdService.
4
+ *
5
+ * Useful for:
6
+ * - tests (deterministic ids)
7
+ * - future SSR/hydration strategies
8
+ */
9
+ export function provideTngUniqueId(generator) {
10
+ return {
11
+ provide: TNG_UNIQUE_ID_GENERATOR,
12
+ useValue: generator,
13
+ };
14
+ }
15
+ //# sourceMappingURL=tng-unique-id.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-unique-id.provider.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/id/tng-unique-id.provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA+B;IAChE,OAAO;QACL,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,SAAS;KACpB,CAAC;AACJ,CAAC","sourcesContent":["import { Provider } from '@angular/core';\nimport {\n TNG_UNIQUE_ID_GENERATOR,\n type TngUniqueIdGenerator,\n} from './tng-unique-id.token';\n\n/**\n * Overrides the unique id generator used by TngUniqueIdService.\n *\n * Useful for:\n * - tests (deterministic ids)\n * - future SSR/hydration strategies\n */\nexport function provideTngUniqueId(generator: TngUniqueIdGenerator): Provider {\n return {\n provide: TNG_UNIQUE_ID_GENERATOR,\n useValue: generator,\n };\n}"]}
@@ -0,0 +1,9 @@
1
+ export declare class TngUniqueIdService {
2
+ private readonly generate;
3
+ /**
4
+ * Generates a unique id using the provided prefix.
5
+ * Example: nextId('tng-input') -> 'tng-input-1'
6
+ */
7
+ nextId(prefix: string): string;
8
+ }
9
+ //# sourceMappingURL=tng-unique-id.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-unique-id.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/id/tng-unique-id.service.ts"],"names":[],"mappings":"AAGA,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyD;IAElF;;;OAGG;IACI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAGtC"}
@@ -0,0 +1,18 @@
1
+ import { __decorate } from "tslib";
2
+ import { Injectable, inject } from '@angular/core';
3
+ import { TNG_UNIQUE_ID_GENERATOR } from './tng-unique-id.token';
4
+ let TngUniqueIdService = class TngUniqueIdService {
5
+ generate = inject(TNG_UNIQUE_ID_GENERATOR);
6
+ /**
7
+ * Generates a unique id using the provided prefix.
8
+ * Example: nextId('tng-input') -> 'tng-input-1'
9
+ */
10
+ nextId(prefix) {
11
+ return this.generate(prefix);
12
+ }
13
+ };
14
+ TngUniqueIdService = __decorate([
15
+ Injectable({ providedIn: 'root' })
16
+ ], TngUniqueIdService);
17
+ export { TngUniqueIdService };
18
+ //# sourceMappingURL=tng-unique-id.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-unique-id.service.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/id/tng-unique-id.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAA6B,MAAM,uBAAuB,CAAC;AAGpF,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACZ,QAAQ,GAAyB,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElF;;;OAGG;IACI,MAAM,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AAVY,kBAAkB;IAD9B,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;GACtB,kBAAkB,CAU9B","sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { TNG_UNIQUE_ID_GENERATOR, type TngUniqueIdGenerator } from './tng-unique-id.token';\n\n@Injectable({ providedIn: 'root' })\nexport class TngUniqueIdService {\n private readonly generate: TngUniqueIdGenerator = inject(TNG_UNIQUE_ID_GENERATOR);\n\n /**\n * Generates a unique id using the provided prefix.\n * Example: nextId('tng-input') -> 'tng-input-1'\n */\n public nextId(prefix: string): string {\n return this.generate(prefix);\n }\n}"]}
@@ -0,0 +1,8 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * Generator function used by TngUniqueIdService.
4
+ * Override this in tests (or future SSR strategies) using provideTngUniqueId().
5
+ */
6
+ export type TngUniqueIdGenerator = (prefix: string) => string;
7
+ export declare const TNG_UNIQUE_ID_GENERATOR: InjectionToken<TngUniqueIdGenerator>;
8
+ //# sourceMappingURL=tng-unique-id.token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-unique-id.token.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/id/tng-unique-id.token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAE9D,eAAO,MAAM,uBAAuB,sCAanC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const TNG_UNIQUE_ID_GENERATOR = new InjectionToken('TNG_UNIQUE_ID_GENERATOR', {
3
+ factory: () => {
4
+ // Default generator: monotonic per-app runtime.
5
+ // (Service wraps this with stable state.)
6
+ let next = 0;
7
+ return (prefix) => {
8
+ next += 1;
9
+ return `${prefix}-${next}`;
10
+ };
11
+ },
12
+ });
13
+ //# sourceMappingURL=tng-unique-id.token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-unique-id.token.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/id/tng-unique-id.token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQ/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,cAAc,CACvD,yBAAyB,EACzB;IACE,OAAO,EAAE,GAAG,EAAE;QACZ,gDAAgD;QAChD,0CAA0C;QAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,OAAO,CAAC,MAAc,EAAE,EAAE;YACxB,IAAI,IAAI,CAAC,CAAC;YACV,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC;CACF,CACF,CAAC","sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Generator function used by TngUniqueIdService.\n * Override this in tests (or future SSR strategies) using provideTngUniqueId().\n */\nexport type TngUniqueIdGenerator = (prefix: string) => string;\n\nexport const TNG_UNIQUE_ID_GENERATOR = new InjectionToken<TngUniqueIdGenerator>(\n 'TNG_UNIQUE_ID_GENERATOR',\n {\n factory: () => {\n // Default generator: monotonic per-app runtime.\n // (Service wraps this with stable state.)\n let next = 0;\n return (prefix: string) => {\n next += 1;\n return `${prefix}-${next}`;\n };\n },\n },\n);"]}
@@ -0,0 +1,28 @@
1
+ import type { ComboboxListboxApi } from '../../../internal/combobox';
2
+ /**
3
+ * Abstract host API for select-like controls (single and multi).
4
+ * Shared overlay/parts depend on this, not concrete TngSelect or TngMultiSelect.
5
+ */
6
+ export interface TngSelectHostApi {
7
+ readonly hostElement: HTMLElement;
8
+ readonly open: () => boolean;
9
+ readonly disabled: () => boolean;
10
+ readonly loading: () => boolean;
11
+ readonly invalid: () => boolean;
12
+ readonly labelId: () => string | null;
13
+ readonly descriptionId: () => string | null;
14
+ readonly errorId: () => string | null;
15
+ readonly multiple: () => boolean;
16
+ openSelect(): void;
17
+ close(): void;
18
+ toggle(): void;
19
+ setContentId(id: string | null): void;
20
+ getContentId(): string | null;
21
+ setListboxId(id: string | null): void;
22
+ getListboxId(): string | null;
23
+ setActiveDescendantId(id: string | null): void;
24
+ getActiveDescendantId(): string | null;
25
+ setListboxApi(api: ComboboxListboxApi | null): void;
26
+ getListboxApi(): ComboboxListboxApi | null;
27
+ }
28
+ //# sourceMappingURL=tng-select.host-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.host-api.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.host-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC;IAEjC,UAAU,IAAI,IAAI,CAAC;IACnB,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,IAAI,IAAI,CAAC;IAEf,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC;IAC9B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/C,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAAC;IAEvC,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;IACpD,aAAa,IAAI,kBAAkB,GAAG,IAAI,CAAC;CAC5C"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=tng-select.host-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.host-api.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.host-api.ts"],"names":[],"mappings":"","sourcesContent":["import type { ComboboxListboxApi } from '../../../internal/combobox';\n\n/**\n * Abstract host API for select-like controls (single and multi).\n * Shared overlay/parts depend on this, not concrete TngSelect or TngMultiSelect.\n */\nexport interface TngSelectHostApi {\n readonly hostElement: HTMLElement;\n readonly open: () => boolean;\n readonly disabled: () => boolean;\n readonly loading: () => boolean;\n readonly invalid: () => boolean;\n readonly labelId: () => string | null;\n readonly descriptionId: () => string | null;\n readonly errorId: () => string | null;\n readonly multiple: () => boolean;\n\n openSelect(): void;\n close(): void;\n toggle(): void;\n\n setContentId(id: string | null): void;\n getContentId(): string | null;\n setListboxId(id: string | null): void;\n getListboxId(): string | null;\n setActiveDescendantId(id: string | null): void;\n getActiveDescendantId(): string | null;\n\n setListboxApi(api: ComboboxListboxApi | null): void;\n getListboxApi(): ComboboxListboxApi | null;\n}\n"]}
@@ -0,0 +1,38 @@
1
+ export declare class TngSelectOverlay {
2
+ private readonly host;
3
+ private readonly elRef;
4
+ private readonly destroyRef;
5
+ private lastFocusedBeforeOpen;
6
+ private removeResizeListener;
7
+ private removeScrollListener;
8
+ private resizeObserver;
9
+ readonly placement: import("@angular/core").InputSignal<Readonly<{
10
+ align?: import("@tailng-ui/cdk").TngOverlayAlign;
11
+ side?: import("@tailng-ui/cdk").TngOverlaySide;
12
+ }> | undefined>;
13
+ readonly offset: import("@angular/core").InputSignal<Readonly<{
14
+ align?: number;
15
+ side?: number;
16
+ }> | undefined>;
17
+ readonly collision: import("@angular/core").InputSignal<Readonly<{
18
+ flip?: boolean;
19
+ padding?: number;
20
+ shift?: boolean;
21
+ }> | undefined>;
22
+ protected readonly dataSlot: 'select-overlay';
23
+ protected get hidden(): '' | null;
24
+ private placeholder;
25
+ private originalParent;
26
+ private removeDocPointerListener;
27
+ constructor();
28
+ private reposition;
29
+ private setupRepositionListeners;
30
+ private teardownRepositionListeners;
31
+ private findTriggerEl;
32
+ private mountToBodyAndPosition;
33
+ private restoreToPlaceholder;
34
+ private setupOutsidePointer;
35
+ private teardownOutsidePointer;
36
+ private restoreFocusOnClose;
37
+ }
38
+ //# sourceMappingURL=tng-select.overlay.shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.overlay.shared.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.overlay.shared.ts"],"names":[],"mappings":"AAsCA,qBAKa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,OAAO,CAAC,qBAAqB,CAA4B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,cAAc,CAA+B;IAErD,QAAQ,CAAC,SAAS;;;oBAAqD;IACvE,QAAQ,CAAC,MAAM;;;oBAAkD;IACjE,QAAQ,CAAC,SAAS;;;;oBAA4D;IAG9E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAoB;IAGjE,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;IAED,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,wBAAwB,CAA6B;;IAsB7D,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,mBAAmB;CAa5B"}
@@ -0,0 +1,226 @@
1
+ import { __decorate } from "tslib";
2
+ import { DestroyRef, Directive, ElementRef, HostBinding, inject, input, effect, } from '@angular/core';
3
+ import { computeOverlayPosition } from '@tailng-ui/cdk';
4
+ import { TNG_SELECT_HOST } from './tng-select.tokens.shared';
5
+ function rectFromClientRect(r) {
6
+ return { left: r.left, top: r.top, width: r.width, height: r.height };
7
+ }
8
+ function viewportRect() {
9
+ return { left: 0, top: 0, width: window.innerWidth || 1024, height: window.innerHeight || 768 };
10
+ }
11
+ function isInside(target, container) {
12
+ return !!target && target instanceof Node && container.contains(target);
13
+ }
14
+ let TngSelectOverlay = class TngSelectOverlay {
15
+ host = inject(TNG_SELECT_HOST);
16
+ elRef = inject((ElementRef));
17
+ destroyRef = inject(DestroyRef);
18
+ lastFocusedBeforeOpen = null;
19
+ removeResizeListener = null;
20
+ removeScrollListener = null;
21
+ resizeObserver = null;
22
+ placement = input(undefined);
23
+ offset = input(undefined);
24
+ collision = input(undefined);
25
+ dataSlot = 'select-overlay';
26
+ get hidden() {
27
+ return this.host.open() ? null : '';
28
+ }
29
+ placeholder = null;
30
+ originalParent = null;
31
+ removeDocPointerListener = null;
32
+ constructor() {
33
+ this.placeholder = document.createComment('tng-select-overlay-anchor');
34
+ const hostEl = this.elRef.nativeElement;
35
+ this.originalParent = hostEl.parentNode;
36
+ this.originalParent?.insertBefore(this.placeholder, hostEl);
37
+ effect(() => {
38
+ const open = this.host.open();
39
+ if (open)
40
+ this.mountToBodyAndPosition();
41
+ else
42
+ this.restoreToPlaceholder();
43
+ });
44
+ this.destroyRef.onDestroy(() => {
45
+ this.teardownOutsidePointer();
46
+ this.restoreToPlaceholder(true);
47
+ this.placeholder = null;
48
+ this.originalParent = null;
49
+ });
50
+ }
51
+ reposition() {
52
+ if (!this.host.open())
53
+ return;
54
+ const panel = this.elRef.nativeElement;
55
+ const trigger = this.findTriggerEl();
56
+ if (!trigger)
57
+ return;
58
+ const anchor = rectFromClientRect(trigger.getBoundingClientRect());
59
+ const overlay = rectFromClientRect(panel.getBoundingClientRect());
60
+ const viewport = viewportRect();
61
+ const result = computeOverlayPosition({
62
+ anchorRect: anchor,
63
+ overlayRect: overlay,
64
+ viewportRect: viewport,
65
+ placement: this.placement(),
66
+ offset: this.offset(),
67
+ collision: this.collision(),
68
+ });
69
+ panel.style.left = `${result.x}px`;
70
+ panel.style.top = `${result.y}px`;
71
+ }
72
+ setupRepositionListeners() {
73
+ let rafId = null;
74
+ const schedule = () => {
75
+ if (rafId !== null)
76
+ return;
77
+ rafId = requestAnimationFrame(() => {
78
+ rafId = null;
79
+ this.reposition();
80
+ });
81
+ };
82
+ const onResize = () => schedule();
83
+ const onScroll = () => schedule();
84
+ window.addEventListener('resize', onResize);
85
+ window.addEventListener('scroll', onScroll, true);
86
+ this.removeResizeListener = () => window.removeEventListener('resize', onResize);
87
+ this.removeScrollListener = () => window.removeEventListener('scroll', onScroll, true);
88
+ if ('ResizeObserver' in window) {
89
+ this.resizeObserver = new ResizeObserver(() => schedule());
90
+ const trigger = this.findTriggerEl();
91
+ if (trigger)
92
+ this.resizeObserver.observe(trigger);
93
+ this.resizeObserver.observe(this.elRef.nativeElement);
94
+ }
95
+ }
96
+ teardownRepositionListeners() {
97
+ this.removeResizeListener?.();
98
+ this.removeScrollListener?.();
99
+ this.removeResizeListener = null;
100
+ this.removeScrollListener = null;
101
+ this.resizeObserver?.disconnect();
102
+ this.resizeObserver = null;
103
+ }
104
+ findTriggerEl() {
105
+ const root = this.host.hostElement;
106
+ return root.querySelector('[data-slot="select-trigger"]');
107
+ }
108
+ mountToBodyAndPosition() {
109
+ this.lastFocusedBeforeOpen = document.activeElement;
110
+ this.setupRepositionListeners();
111
+ const panel = this.elRef.nativeElement;
112
+ if (panel.parentNode !== document.body) {
113
+ document.body.appendChild(panel);
114
+ }
115
+ panel.style.position = 'fixed';
116
+ panel.style.left = '0px';
117
+ panel.style.top = '0px';
118
+ panel.style.zIndex = '1000';
119
+ queueMicrotask(() => {
120
+ if (!this.host.open())
121
+ return;
122
+ const trigger = this.findTriggerEl();
123
+ if (!trigger)
124
+ return;
125
+ const anchor = rectFromClientRect(trigger.getBoundingClientRect());
126
+ panel.style.minWidth = `${anchor.width}px`;
127
+ const overlay = rectFromClientRect(panel.getBoundingClientRect());
128
+ const viewport = viewportRect();
129
+ const result = computeOverlayPosition({
130
+ anchorRect: anchor,
131
+ overlayRect: overlay,
132
+ viewportRect: viewport,
133
+ placement: this.placement(),
134
+ offset: this.offset(),
135
+ collision: this.collision(),
136
+ });
137
+ panel.style.left = `${result.x}px`;
138
+ panel.style.top = `${result.y}px`;
139
+ });
140
+ this.setupOutsidePointer();
141
+ }
142
+ restoreToPlaceholder(force = false) {
143
+ const panel = this.elRef.nativeElement;
144
+ if (!force && panel.parentNode !== document.body) {
145
+ this.teardownOutsidePointer();
146
+ return;
147
+ }
148
+ if (this.placeholder?.parentNode) {
149
+ this.placeholder.parentNode.insertBefore(panel, this.placeholder);
150
+ }
151
+ else if (this.originalParent) {
152
+ this.originalParent.appendChild(panel);
153
+ }
154
+ this.teardownRepositionListeners();
155
+ if (this.lastFocusedBeforeOpen &&
156
+ document.contains(this.lastFocusedBeforeOpen)) {
157
+ const active = document.activeElement;
158
+ const panelEl = this.elRef.nativeElement;
159
+ if (!active || panelEl.contains(active)) {
160
+ this.lastFocusedBeforeOpen.focus();
161
+ }
162
+ }
163
+ this.restoreFocusOnClose();
164
+ panel.style.position = '';
165
+ panel.style.left = '';
166
+ panel.style.top = '';
167
+ panel.style.zIndex = '';
168
+ panel.style.minWidth = '';
169
+ this.teardownOutsidePointer();
170
+ }
171
+ setupOutsidePointer() {
172
+ if (this.removeDocPointerListener)
173
+ return;
174
+ const onPointerDown = (ev) => {
175
+ if (!this.host.open())
176
+ return;
177
+ const panel = this.elRef.nativeElement;
178
+ const trigger = this.findTriggerEl();
179
+ if (isInside(ev.target, panel))
180
+ return;
181
+ if (trigger && isInside(ev.target, trigger))
182
+ return;
183
+ if (this.host.multiple() &&
184
+ ev.target &&
185
+ ev.target.closest?.('[data-slot="select-option"], [data-slot="multi-select-option"]'))
186
+ return;
187
+ this.host.close();
188
+ };
189
+ document.addEventListener('pointerdown', onPointerDown, true);
190
+ this.removeDocPointerListener = () => {
191
+ document.removeEventListener('pointerdown', onPointerDown, true);
192
+ };
193
+ }
194
+ teardownOutsidePointer() {
195
+ this.removeDocPointerListener?.();
196
+ this.removeDocPointerListener = null;
197
+ }
198
+ restoreFocusOnClose() {
199
+ const panel = this.elRef.nativeElement;
200
+ const active = document.activeElement;
201
+ if (active && panel.contains(active)) {
202
+ const trigger = this.findTriggerEl();
203
+ trigger?.focus();
204
+ return;
205
+ }
206
+ if (document.activeElement === document.body) {
207
+ const trigger = this.findTriggerEl();
208
+ trigger?.focus();
209
+ }
210
+ }
211
+ };
212
+ __decorate([
213
+ HostBinding('attr.data-slot')
214
+ ], TngSelectOverlay.prototype, "dataSlot", void 0);
215
+ __decorate([
216
+ HostBinding('attr.hidden')
217
+ ], TngSelectOverlay.prototype, "hidden", null);
218
+ TngSelectOverlay = __decorate([
219
+ Directive({
220
+ selector: '[tngSelectOverlay]',
221
+ exportAs: 'tngSelectOverlay',
222
+ standalone: true,
223
+ })
224
+ ], TngSelectOverlay);
225
+ export { TngSelectOverlay };
226
+ //# sourceMappingURL=tng-select.overlay.shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.overlay.shared.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.overlay.shared.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n effect,\n} from '@angular/core';\nimport type {\n TngOverlayCollisionOptions,\n TngOverlayOffset,\n TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport { computeOverlayPosition } from '@tailng-ui/cdk';\n\nimport { TNG_SELECT_HOST } from './tng-select.tokens.shared';\nimport type { TngSelectHostApi } from './tng-select.host-api';\n\ntype MaybeRect = Readonly<{\n left: number;\n top: number;\n width: number;\n height: number;\n}>;\n\nfunction rectFromClientRect(r: DOMRect | ClientRect): MaybeRect {\n return { left: r.left, top: r.top, width: r.width, height: r.height };\n}\n\nfunction viewportRect(): MaybeRect {\n return { left: 0, top: 0, width: window.innerWidth || 1024, height: window.innerHeight || 768 };\n}\n\nfunction isInside(target: EventTarget | null, container: HTMLElement): boolean {\n return !!target && target instanceof Node && container.contains(target);\n}\n\n@Directive({\n selector: '[tngSelectOverlay]',\n exportAs: 'tngSelectOverlay',\n standalone: true,\n})\nexport class TngSelectOverlay {\n private readonly host = inject<TngSelectHostApi>(TNG_SELECT_HOST);\n private readonly elRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private lastFocusedBeforeOpen: HTMLElement | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n readonly placement = input<TngOverlayPlacement | undefined>(undefined);\n readonly offset = input<TngOverlayOffset | undefined>(undefined);\n readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'select-overlay' = 'select-overlay';\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.host.open() ? null : '';\n }\n\n private placeholder: Comment | null = null;\n private originalParent: Node | null = null;\n private removeDocPointerListener: (() => void) | null = null;\n\n constructor() {\n this.placeholder = document.createComment('tng-select-overlay-anchor');\n const hostEl = this.elRef.nativeElement;\n this.originalParent = hostEl.parentNode;\n this.originalParent?.insertBefore(this.placeholder, hostEl);\n\n effect(() => {\n const open = this.host.open();\n if (open) this.mountToBodyAndPosition();\n else this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n this.teardownOutsidePointer();\n this.restoreToPlaceholder(true);\n this.placeholder = null;\n this.originalParent = null;\n });\n }\n\n private reposition(): void {\n if (!this.host.open()) return;\n const panel = this.elRef.nativeElement;\n const trigger = this.findTriggerEl();\n if (!trigger) return;\n\n const anchor = rectFromClientRect(trigger.getBoundingClientRect());\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n }\n\n private setupRepositionListeners(): void {\n let rafId: number | null = null;\n const schedule = () => {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n this.reposition();\n });\n };\n\n const onResize = () => schedule();\n const onScroll = () => schedule();\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n this.removeResizeListener = () => window.removeEventListener('resize', onResize);\n this.removeScrollListener = () => window.removeEventListener('scroll', onScroll, true);\n\n if ('ResizeObserver' in window) {\n this.resizeObserver = new ResizeObserver(() => schedule());\n const trigger = this.findTriggerEl();\n if (trigger) this.resizeObserver.observe(trigger);\n this.resizeObserver.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private findTriggerEl(): HTMLElement | null {\n const root = this.host.hostElement;\n return root.querySelector('[data-slot=\"select-trigger\"]') as HTMLElement | null;\n }\n\n private mountToBodyAndPosition(): void {\n this.lastFocusedBeforeOpen = document.activeElement as HTMLElement | null;\n this.setupRepositionListeners();\n const panel = this.elRef.nativeElement;\n\n if (panel.parentNode !== document.body) {\n document.body.appendChild(panel);\n }\n\n panel.style.position = 'fixed';\n panel.style.left = '0px';\n panel.style.top = '0px';\n panel.style.zIndex = '1000';\n\n queueMicrotask(() => {\n if (!this.host.open()) return;\n const trigger = this.findTriggerEl();\n if (!trigger) return;\n\n const anchor = rectFromClientRect(trigger.getBoundingClientRect());\n panel.style.minWidth = `${anchor.width}px`;\n\n const overlay = rectFromClientRect(panel.getBoundingClientRect());\n const viewport = viewportRect();\n const result = computeOverlayPosition({\n anchorRect: anchor,\n overlayRect: overlay,\n viewportRect: viewport,\n placement: this.placement(),\n offset: this.offset(),\n collision: this.collision(),\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n });\n\n this.setupOutsidePointer();\n }\n\n private restoreToPlaceholder(force = false): void {\n const panel = this.elRef.nativeElement;\n if (!force && panel.parentNode !== document.body) {\n this.teardownOutsidePointer();\n return;\n }\n\n if (this.placeholder?.parentNode) {\n this.placeholder.parentNode.insertBefore(panel, this.placeholder);\n } else if (this.originalParent) {\n this.originalParent.appendChild(panel);\n }\n\n this.teardownRepositionListeners();\n\n if (\n this.lastFocusedBeforeOpen &&\n document.contains(this.lastFocusedBeforeOpen)\n ) {\n const active = document.activeElement as HTMLElement | null;\n const panelEl = this.elRef.nativeElement;\n if (!active || panelEl.contains(active)) {\n this.lastFocusedBeforeOpen.focus();\n }\n }\n\n this.restoreFocusOnClose();\n panel.style.position = '';\n panel.style.left = '';\n panel.style.top = '';\n panel.style.zIndex = '';\n panel.style.minWidth = '';\n this.teardownOutsidePointer();\n }\n\n private setupOutsidePointer(): void {\n if (this.removeDocPointerListener) return;\n\n const onPointerDown = (ev: PointerEvent) => {\n if (!this.host.open()) return;\n const panel = this.elRef.nativeElement;\n const trigger = this.findTriggerEl();\n if (isInside(ev.target, panel)) return;\n if (trigger && isInside(ev.target, trigger)) return;\n if (\n this.host.multiple() &&\n ev.target &&\n (ev.target as Element).closest?.(\n '[data-slot=\"select-option\"], [data-slot=\"multi-select-option\"]'\n )\n )\n return;\n this.host.close();\n };\n\n document.addEventListener('pointerdown', onPointerDown, true);\n this.removeDocPointerListener = () => {\n document.removeEventListener('pointerdown', onPointerDown, true);\n };\n }\n\n private teardownOutsidePointer(): void {\n this.removeDocPointerListener?.();\n this.removeDocPointerListener = null;\n }\n\n private restoreFocusOnClose(): void {\n const panel = this.elRef.nativeElement;\n const active = document.activeElement as HTMLElement | null;\n if (active && panel.contains(active)) {\n const trigger = this.findTriggerEl();\n trigger?.focus();\n return;\n }\n if (document.activeElement === document.body) {\n const trigger = this.findTriggerEl();\n trigger?.focus();\n }\n }\n}\n"]}
@@ -0,0 +1,35 @@
1
+ export declare class TngSelectTrigger {
2
+ private readonly host;
3
+ private readonly el;
4
+ private get listbox();
5
+ private readonly authorTabindex;
6
+ protected readonly dataSlot: 'select-trigger';
7
+ protected readonly role: 'combobox';
8
+ protected readonly haspopup: 'listbox';
9
+ protected get ariaExpanded(): 'true' | 'false';
10
+ protected get ariaDisabled(): 'true' | null;
11
+ protected get ariaControls(): string | null;
12
+ protected get ariaActiveDescendant(): string | null;
13
+ protected get tabindex(): '0' | null;
14
+ protected get ariaInvalid(): 'true' | null;
15
+ protected get ariaLabelledby(): string | null;
16
+ protected get ariaDescribedby(): string | null;
17
+ protected onPointerDown(event: PointerEvent): void;
18
+ protected onKeydown(event: KeyboardEvent): void;
19
+ }
20
+ export declare class TngSelectValue {
21
+ protected readonly dataSlot: 'select-value';
22
+ }
23
+ export declare class TngSelectIcon {
24
+ protected readonly dataSlot: 'select-icon';
25
+ }
26
+ export declare class TngSelectContent {
27
+ private readonly host;
28
+ private readonly destroyRef;
29
+ readonly id: string;
30
+ protected readonly dataSlot: 'select-content';
31
+ protected get hidden(): '' | null;
32
+ protected get ariaBusy(): 'true' | null;
33
+ constructor();
34
+ }
35
+ //# sourceMappingURL=tng-select.parts.shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.parts.shared.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/_shared/select/tng-select.parts.shared.ts"],"names":[],"mappings":"AAMA,qBAKa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;IAEtD,OAAO,KAAK,OAAO,GAElB;IACD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2D;IAG1F,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAoB;IAEvC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAc;IACxC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAa;IAGtF,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,CAElD;IAGD,SAAS,KAAK,QAAQ,IAAI,GAAG,GAAG,IAAI,CAQnC;IAGD,SAAS,KAAK,WAAW,IAAI,MAAM,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,cAAc,IAAI,MAAM,GAAG,IAAI,CAI5C;IAGD,SAAS,KAAK,eAAe,IAAI,MAAM,GAAG,IAAI,CAS7C;IAGD,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAelD,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAWhD;AAED,qBAKa,cAAc;IAEzB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAkB;CAC9D;AAED,qBAKa,aAAa;IAExB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAiB;CAC5D;AAID,qBAKa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAGjD,QAAQ,CAAC,EAAE,SAAqB;IAGhC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAoB;IAGjE,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAEhC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;;CAQF"}