@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,1026 @@
1
+ var TngMenu_1;
2
+ import { __decorate } from "tslib";
3
+ import { ChangeDetectorRef, Directive, ElementRef, HostBinding, HostListener, inject, input, NgZone, output, } from '@angular/core';
4
+ import { createTngIdFactory } from '@tailng-ui/cdk';
5
+ function getNextIndex(currentIndex, total) {
6
+ if (currentIndex < 0) {
7
+ return 0;
8
+ }
9
+ return currentIndex + 1 >= total ? 0 : currentIndex + 1;
10
+ }
11
+ function getPrevIndex(currentIndex, total) {
12
+ if (currentIndex < 0) {
13
+ return total - 1;
14
+ }
15
+ return currentIndex - 1 < 0 ? total - 1 : currentIndex - 1;
16
+ }
17
+ function resolveMenuFocusAction(key) {
18
+ switch (key) {
19
+ case 'ArrowDown':
20
+ return 'next';
21
+ case 'ArrowUp':
22
+ return 'prev';
23
+ case 'Home':
24
+ return 'first';
25
+ case 'End':
26
+ return 'last';
27
+ default:
28
+ return null;
29
+ }
30
+ }
31
+ function resolveFocusIndex(action, currentIndex, total, loop) {
32
+ switch (action) {
33
+ case 'next':
34
+ if (!loop && currentIndex >= total - 1) {
35
+ return total - 1;
36
+ }
37
+ return getNextIndex(currentIndex, total);
38
+ case 'prev':
39
+ if (!loop) {
40
+ if (currentIndex < 0) {
41
+ return 0;
42
+ }
43
+ if (currentIndex <= 0) {
44
+ return 0;
45
+ }
46
+ }
47
+ return getPrevIndex(currentIndex, total);
48
+ case 'first':
49
+ return 0;
50
+ case 'last':
51
+ return total - 1;
52
+ }
53
+ }
54
+ const createMenuId = createTngIdFactory('tng-menu');
55
+ const createMenuItemId = createTngIdFactory('tng-menu-item');
56
+ const createMenuTriggerId = createTngIdFactory('tng-menu-trigger');
57
+ const TYPEAHEAD_RESET_MS = 500;
58
+ let TngMenu = class TngMenu {
59
+ static { TngMenu_1 = this; }
60
+ static openRootMenu = null;
61
+ changeDetectorRef = inject(ChangeDetectorRef);
62
+ hostRef = inject(ElementRef);
63
+ ngZone = inject(NgZone);
64
+ resolvedId = this.hostRef.nativeElement.getAttribute('id') ?? createMenuId();
65
+ itemsById = new Map();
66
+ outsidePointerdownCleanup = null;
67
+ typeaheadResetHandle = null;
68
+ menubarArrowHandler = null;
69
+ menubarTabHandler = null;
70
+ restoreFocusOnOutsideClick = false;
71
+ triggerStateSync = null;
72
+ triggerElement = null;
73
+ activeItemId = null;
74
+ parentMenu = null;
75
+ parentMenuItem = null;
76
+ openSubmenu = null;
77
+ openState = false;
78
+ typeaheadBuffer = '';
79
+ loop = input(true);
80
+ disabled = input(false);
81
+ closeOnSelect = input(true);
82
+ dismissOnOutsideClick = input(true);
83
+ dismissOnFocusout = input(false);
84
+ tngMenuOpened = output();
85
+ tngMenuClosed = output();
86
+ tngMenuSelect = output();
87
+ dataSlot = 'menu';
88
+ role = 'menu';
89
+ id = this.resolvedId;
90
+ get tabIndex() {
91
+ return this.hostRef.nativeElement.getAttribute('tabindex') ?? '-1';
92
+ }
93
+ get dataState() {
94
+ return this.openState ? 'open' : 'closed';
95
+ }
96
+ get hidden() {
97
+ return this.openState ? null : '';
98
+ }
99
+ get ariaActiveDescendant() {
100
+ return this.activeItemId;
101
+ }
102
+ setTriggerElement(triggerElement, triggerStateSync) {
103
+ this.triggerElement = triggerElement;
104
+ this.triggerStateSync = triggerStateSync ?? this.triggerStateSync;
105
+ this.syncAriaLabelledby();
106
+ }
107
+ clearTriggerLink(triggerElement) {
108
+ if (triggerElement !== undefined && this.triggerElement !== triggerElement) {
109
+ return;
110
+ }
111
+ this.triggerElement = null;
112
+ this.triggerStateSync = null;
113
+ this.menubarArrowHandler = null;
114
+ this.menubarTabHandler = null;
115
+ this.syncAriaLabelledby();
116
+ }
117
+ setRestoreFocusOnOutsideClick(restoreFocusOnOutsideClick) {
118
+ this.restoreFocusOnOutsideClick = restoreFocusOnOutsideClick;
119
+ }
120
+ setMenubarArrowHandler(menubarArrowHandler) {
121
+ this.menubarArrowHandler = menubarArrowHandler;
122
+ }
123
+ setMenubarTabHandler(menubarTabHandler) {
124
+ this.menubarTabHandler = menubarTabHandler;
125
+ }
126
+ setParentMenu(parentMenu, parentMenuItem) {
127
+ this.parentMenu = parentMenu;
128
+ this.parentMenuItem = parentMenuItem;
129
+ }
130
+ focusPanel() {
131
+ this.hostRef.nativeElement.focus();
132
+ }
133
+ focusPanelAndMoveActiveItem(action) {
134
+ if (!this.openState) {
135
+ return;
136
+ }
137
+ this.moveActiveItem(action);
138
+ this.hostRef.nativeElement.focus();
139
+ this.changeDetectorRef.detectChanges();
140
+ }
141
+ isOpen() {
142
+ return this.openState;
143
+ }
144
+ isDisabled() {
145
+ return this.disabled();
146
+ }
147
+ isItemActive(itemId) {
148
+ return this.activeItemId === itemId;
149
+ }
150
+ registerItem(item) {
151
+ this.itemsById.set(item.getItemId(), item);
152
+ }
153
+ unregisterItem(item) {
154
+ const orderedItems = Array.from(this.itemsById.values());
155
+ const itemIndex = orderedItems.findIndex((registeredItem) => registeredItem === item);
156
+ if (this.itemsById.get(item.getItemId()) === item) {
157
+ this.itemsById.delete(item.getItemId());
158
+ }
159
+ if (this.activeItemId === item.getItemId()) {
160
+ this.activeItemId =
161
+ itemIndex < 0
162
+ ? this.resolveAdjacentEnabledItemId(item.getItemId())
163
+ : this.resolveAdjacentEnabledItemIdFromRegisteredItems(orderedItems, itemIndex);
164
+ }
165
+ }
166
+ onItemDisabledStateChange(item) {
167
+ if (!item.isDisabled() || this.activeItemId !== item.getItemId()) {
168
+ return;
169
+ }
170
+ this.activeItemId = this.resolveAdjacentEnabledItemId(item.getItemId());
171
+ }
172
+ onItemNavigabilityStateChange(item) {
173
+ if (item.isNavigable() || this.activeItemId !== item.getItemId()) {
174
+ return;
175
+ }
176
+ this.activeItemId = this.resolveAdjacentEnabledItemId(item.getItemId());
177
+ }
178
+ open(focusAction = 'none') {
179
+ if (this.openState || this.disabled()) {
180
+ return;
181
+ }
182
+ if (this.parentMenu === null) {
183
+ if (TngMenu_1.openRootMenu !== null && TngMenu_1.openRootMenu !== this) {
184
+ TngMenu_1.openRootMenu.close(false);
185
+ }
186
+ }
187
+ else {
188
+ this.parentMenu.openChildSubmenu(this);
189
+ }
190
+ this.openState = true;
191
+ if (this.parentMenu === null) {
192
+ TngMenu_1.openRootMenu = this;
193
+ }
194
+ if (focusAction === 'first') {
195
+ this.moveActiveItem('next');
196
+ }
197
+ else if (focusAction === 'last') {
198
+ this.moveActiveItem('prev');
199
+ }
200
+ else {
201
+ this.activeItemId = null;
202
+ }
203
+ this.tngMenuOpened.emit();
204
+ this.triggerStateSync?.();
205
+ this.attachOutsidePointerdownListener();
206
+ this.changeDetectorRef.detectChanges();
207
+ this.hostRef.nativeElement.focus();
208
+ }
209
+ close(restoreFocus) {
210
+ if (!this.openState) {
211
+ return;
212
+ }
213
+ if (this.openSubmenu !== null) {
214
+ this.openSubmenu.close(false);
215
+ this.openSubmenu = null;
216
+ }
217
+ this.openState = false;
218
+ this.activeItemId = null;
219
+ this.clearTypeaheadBuffer();
220
+ this.detachOutsidePointerdownListener();
221
+ this.triggerStateSync?.();
222
+ if (this.parentMenu !== null) {
223
+ this.parentMenu.notifySubmenuClosed(this);
224
+ }
225
+ else if (TngMenu_1.openRootMenu === this) {
226
+ TngMenu_1.openRootMenu = null;
227
+ }
228
+ this.tngMenuClosed.emit();
229
+ if (restoreFocus) {
230
+ this.triggerElement?.focus();
231
+ }
232
+ this.changeDetectorRef.detectChanges();
233
+ }
234
+ ngOnDestroy() {
235
+ const wasOpen = this.openState;
236
+ this.openState = false;
237
+ this.activeItemId = null;
238
+ this.clearTypeaheadBuffer();
239
+ this.detachOutsidePointerdownListener();
240
+ this.openSubmenu = null;
241
+ if (wasOpen) {
242
+ if (this.parentMenu !== null) {
243
+ this.parentMenu.notifySubmenuClosed(this);
244
+ }
245
+ else if (TngMenu_1.openRootMenu === this) {
246
+ TngMenu_1.openRootMenu = null;
247
+ }
248
+ this.triggerStateSync?.();
249
+ }
250
+ this.clearTriggerLink();
251
+ }
252
+ requestSelect(item, trigger) {
253
+ if (!this.openState || !item.isNavigable()) {
254
+ return;
255
+ }
256
+ item.applySelectionState();
257
+ this.activeItemId = item.getItemId();
258
+ this.tngMenuSelect.emit({
259
+ value: item.getValue(),
260
+ itemId: item.getItemId(),
261
+ trigger,
262
+ });
263
+ if (this.closeOnSelect()) {
264
+ this.closeSelfAndAncestorMenus(false);
265
+ }
266
+ }
267
+ setActiveItem(item) {
268
+ if (!this.openState || !item.isNavigable()) {
269
+ return;
270
+ }
271
+ this.activeItemId = item.getItemId();
272
+ this.syncOpenSubmenuWithActiveItem();
273
+ this.changeDetectorRef.detectChanges();
274
+ }
275
+ setSelectedRadioItem(selectedItem) {
276
+ for (const item of this.itemsById.values()) {
277
+ if (item.getRole() !== 'menuitemradio') {
278
+ continue;
279
+ }
280
+ item.setCheckedState(item === selectedItem);
281
+ }
282
+ }
283
+ openChildSubmenu(submenu) {
284
+ if (this.openSubmenu !== null && this.openSubmenu !== submenu) {
285
+ this.openSubmenu.close(false);
286
+ }
287
+ this.openSubmenu = submenu;
288
+ }
289
+ notifySubmenuClosed(submenu) {
290
+ if (this.openSubmenu === submenu) {
291
+ this.openSubmenu = null;
292
+ }
293
+ }
294
+ closeSelfAndAncestorMenus(restoreFocusAtRoot) {
295
+ let menuToClose = this;
296
+ while (menuToClose !== null) {
297
+ const nextAncestorMenu = menuToClose.parentMenu;
298
+ const shouldRestoreFocus = nextAncestorMenu === null && restoreFocusAtRoot;
299
+ menuToClose.close(shouldRestoreFocus);
300
+ menuToClose = nextAncestorMenu;
301
+ }
302
+ }
303
+ getEnabledMenuItems() {
304
+ const items = Array.from(this.hostRef.nativeElement.querySelectorAll('[tngMenuItem]'));
305
+ const enabledItems = [];
306
+ for (const item of items) {
307
+ if (this.isNavigableItemElement(item)) {
308
+ enabledItems.push(item);
309
+ }
310
+ }
311
+ return enabledItems;
312
+ }
313
+ resolveAdjacentEnabledItemId(referenceItemId) {
314
+ const items = Array.from(this.hostRef.nativeElement.querySelectorAll('[tngMenuItem]'));
315
+ if (items.length === 0) {
316
+ return null;
317
+ }
318
+ const referenceIndex = items.findIndex((item) => item.id === referenceItemId);
319
+ if (referenceIndex < 0) {
320
+ return this.getEnabledMenuItems()[0]?.id ?? null;
321
+ }
322
+ for (let index = referenceIndex + 1; index < items.length; index += 1) {
323
+ const candidate = items[index];
324
+ if (this.isNavigableItemElement(candidate)) {
325
+ return candidate.id;
326
+ }
327
+ }
328
+ for (let index = referenceIndex - 1; index >= 0; index -= 1) {
329
+ const candidate = items[index];
330
+ if (this.isNavigableItemElement(candidate)) {
331
+ return candidate.id;
332
+ }
333
+ }
334
+ return null;
335
+ }
336
+ resolveAdjacentEnabledItemIdFromRegisteredItems(items, referenceIndex) {
337
+ for (let index = referenceIndex + 1; index < items.length; index += 1) {
338
+ const candidate = items[index];
339
+ if (candidate.isNavigable() && this.itemsById.get(candidate.getItemId()) === candidate) {
340
+ return candidate.getItemId();
341
+ }
342
+ }
343
+ for (let index = referenceIndex - 1; index >= 0; index -= 1) {
344
+ const candidate = items[index];
345
+ if (candidate.isNavigable() && this.itemsById.get(candidate.getItemId()) === candidate) {
346
+ return candidate.getItemId();
347
+ }
348
+ }
349
+ return null;
350
+ }
351
+ isNavigableItemElement(item) {
352
+ const registeredItem = this.itemsById.get(item.id);
353
+ return registeredItem !== undefined && registeredItem.isNavigable();
354
+ }
355
+ onDocumentPointerdown(event) {
356
+ if (!this.openState || !this.dismissOnOutsideClick()) {
357
+ return;
358
+ }
359
+ const target = event.target;
360
+ if (!(target instanceof Node)) {
361
+ return;
362
+ }
363
+ if (this.isTargetInsideOpenMenuTree(target)) {
364
+ return;
365
+ }
366
+ this.close(this.restoreFocusOnOutsideClick);
367
+ }
368
+ isTargetInsideOpenMenuTree(target) {
369
+ if (this.hostRef.nativeElement.contains(target)) {
370
+ return true;
371
+ }
372
+ if (this.triggerElement?.contains(target) === true) {
373
+ return true;
374
+ }
375
+ return this.openSubmenu?.isTargetInsideOpenMenuTree(target) ?? false;
376
+ }
377
+ onFocusout(event) {
378
+ if (!this.openState || !this.dismissOnFocusout()) {
379
+ return;
380
+ }
381
+ const relatedTarget = event.relatedTarget;
382
+ if (relatedTarget instanceof Node && this.hostRef.nativeElement.contains(relatedTarget)) {
383
+ return;
384
+ }
385
+ this.close(false);
386
+ }
387
+ attachOutsidePointerdownListener() {
388
+ this.detachOutsidePointerdownListener();
389
+ if (!this.dismissOnOutsideClick()) {
390
+ return;
391
+ }
392
+ const handler = (event) => {
393
+ this.onDocumentPointerdown(event);
394
+ };
395
+ this.ngZone.runOutsideAngular(() => {
396
+ document.addEventListener('pointerdown', handler);
397
+ this.outsidePointerdownCleanup = () => {
398
+ document.removeEventListener('pointerdown', handler);
399
+ };
400
+ });
401
+ }
402
+ syncAriaLabelledby() {
403
+ const triggerId = this.triggerElement?.id;
404
+ if (triggerId === undefined || triggerId.length === 0) {
405
+ this.hostRef.nativeElement.removeAttribute('aria-labelledby');
406
+ return;
407
+ }
408
+ this.hostRef.nativeElement.setAttribute('aria-labelledby', triggerId);
409
+ }
410
+ detachOutsidePointerdownListener() {
411
+ this.outsidePointerdownCleanup?.();
412
+ this.outsidePointerdownCleanup = null;
413
+ }
414
+ moveActiveItem(action) {
415
+ const items = this.getEnabledMenuItems();
416
+ if (items.length === 0) {
417
+ this.activeItemId = null;
418
+ return;
419
+ }
420
+ let currentIndex = -1;
421
+ for (let index = 0; index < items.length; index += 1) {
422
+ if (items[index].id === this.activeItemId) {
423
+ currentIndex = index;
424
+ break;
425
+ }
426
+ }
427
+ const targetIndex = resolveFocusIndex(action, currentIndex, items.length, this.loop());
428
+ this.activeItemId = items[targetIndex]?.id ?? null;
429
+ this.syncOpenSubmenuWithActiveItem();
430
+ }
431
+ syncOpenSubmenuWithActiveItem() {
432
+ if (this.openSubmenu !== null && this.parentMenuItem?.getOwnedSubmenu() !== this.openSubmenu) {
433
+ // no-op safeguard for submenu instances
434
+ }
435
+ const activeItem = this.activeItemId === null ? null : this.itemsById.get(this.activeItemId) ?? null;
436
+ if (this.openSubmenu !== null && activeItem !== this.openSubmenu.parentMenuItem) {
437
+ this.openSubmenu.close(false);
438
+ }
439
+ }
440
+ moveActiveItemByTypeahead(key) {
441
+ const items = this.getEnabledMenuItems();
442
+ if (items.length === 0) {
443
+ return false;
444
+ }
445
+ const normalizedKey = key.trim().toLowerCase();
446
+ if (normalizedKey.length !== 1) {
447
+ return false;
448
+ }
449
+ const repeatingSingleChar = this.typeaheadBuffer.length > 0 &&
450
+ this.typeaheadBuffer.split('').every((char) => char === normalizedKey);
451
+ let query = repeatingSingleChar ? normalizedKey : `${this.typeaheadBuffer}${normalizedKey}`;
452
+ let match = this.findTypeaheadMatch(items, query, repeatingSingleChar);
453
+ if (match === null && query !== normalizedKey) {
454
+ query = normalizedKey;
455
+ match = this.findTypeaheadMatch(items, query, true);
456
+ }
457
+ if (match === null) {
458
+ return false;
459
+ }
460
+ this.activeItemId = match.id;
461
+ this.resetTypeaheadBuffer(query);
462
+ return true;
463
+ }
464
+ findTypeaheadMatch(items, query, cycleFromActiveItem) {
465
+ const currentIndex = items.findIndex((item) => item.id === this.activeItemId);
466
+ const startIndex = cycleFromActiveItem && currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;
467
+ for (let offset = 0; offset < items.length; offset += 1) {
468
+ const index = (startIndex + offset) % items.length;
469
+ const item = items[index];
470
+ const label = item.textContent?.trim().toLowerCase() ?? '';
471
+ if (label.startsWith(query)) {
472
+ return item;
473
+ }
474
+ }
475
+ return null;
476
+ }
477
+ resetTypeaheadBuffer(nextBuffer) {
478
+ this.typeaheadBuffer = nextBuffer;
479
+ if (this.typeaheadResetHandle !== null) {
480
+ clearTimeout(this.typeaheadResetHandle);
481
+ }
482
+ this.typeaheadResetHandle = setTimeout(() => {
483
+ this.typeaheadBuffer = '';
484
+ this.typeaheadResetHandle = null;
485
+ }, TYPEAHEAD_RESET_MS);
486
+ }
487
+ clearTypeaheadBuffer() {
488
+ this.typeaheadBuffer = '';
489
+ if (this.typeaheadResetHandle !== null) {
490
+ clearTimeout(this.typeaheadResetHandle);
491
+ this.typeaheadResetHandle = null;
492
+ }
493
+ }
494
+ isEventFromNestedMenu(event) {
495
+ const target = event.target;
496
+ if (!(target instanceof Element)) {
497
+ return false;
498
+ }
499
+ const closestMenu = target.closest('[data-slot="menu"]');
500
+ return closestMenu !== null && closestMenu !== this.hostRef.nativeElement;
501
+ }
502
+ onKeydown(event) {
503
+ if (this.isEventFromNestedMenu(event)) {
504
+ return;
505
+ }
506
+ if (event.key === 'Escape') {
507
+ event.preventDefault();
508
+ if (this.parentMenu !== null) {
509
+ this.close(false);
510
+ this.parentMenu.focusPanel();
511
+ return;
512
+ }
513
+ this.close(true);
514
+ return;
515
+ }
516
+ if (event.key === 'Tab') {
517
+ if (this.parentMenu === null && this.menubarTabHandler !== null && this.menubarTabHandler(event.shiftKey)) {
518
+ event.preventDefault();
519
+ return;
520
+ }
521
+ this.close(false);
522
+ return;
523
+ }
524
+ if (event.key === 'ArrowRight') {
525
+ const activeItem = this.activeItemId === null ? null : this.itemsById.get(this.activeItemId) ?? null;
526
+ if (activeItem !== null && activeItem.getOwnedSubmenu() !== null) {
527
+ event.preventDefault();
528
+ activeItem.openOwnedSubmenu('first');
529
+ }
530
+ else if (this.parentMenu === null && this.menubarArrowHandler !== null) {
531
+ event.preventDefault();
532
+ this.menubarArrowHandler('ArrowRight');
533
+ }
534
+ return;
535
+ }
536
+ if (event.key === 'ArrowLeft') {
537
+ if (this.parentMenu !== null) {
538
+ event.preventDefault();
539
+ this.close(false);
540
+ this.parentMenu.focusPanel();
541
+ }
542
+ else if (this.menubarArrowHandler !== null) {
543
+ event.preventDefault();
544
+ this.menubarArrowHandler('ArrowLeft');
545
+ }
546
+ return;
547
+ }
548
+ if (event.key === 'Enter' || event.key === ' ') {
549
+ const activeItem = this.activeItemId === null ? null : this.itemsById.get(this.activeItemId) ?? null;
550
+ if (activeItem !== null) {
551
+ event.preventDefault();
552
+ this.requestSelect(activeItem, 'keyboard');
553
+ }
554
+ return;
555
+ }
556
+ const action = resolveMenuFocusAction(event.key);
557
+ if (action === null) {
558
+ if (event.key.length === 1 && this.moveActiveItemByTypeahead(event.key)) {
559
+ event.preventDefault();
560
+ }
561
+ return;
562
+ }
563
+ event.preventDefault();
564
+ this.moveActiveItem(action);
565
+ }
566
+ };
567
+ __decorate([
568
+ HostBinding('attr.data-slot')
569
+ ], TngMenu.prototype, "dataSlot", void 0);
570
+ __decorate([
571
+ HostBinding('attr.role')
572
+ ], TngMenu.prototype, "role", void 0);
573
+ __decorate([
574
+ HostBinding('attr.id')
575
+ ], TngMenu.prototype, "id", void 0);
576
+ __decorate([
577
+ HostBinding('attr.tabindex')
578
+ ], TngMenu.prototype, "tabIndex", null);
579
+ __decorate([
580
+ HostBinding('attr.data-state')
581
+ ], TngMenu.prototype, "dataState", null);
582
+ __decorate([
583
+ HostBinding('attr.hidden')
584
+ ], TngMenu.prototype, "hidden", null);
585
+ __decorate([
586
+ HostBinding('attr.aria-activedescendant')
587
+ ], TngMenu.prototype, "ariaActiveDescendant", null);
588
+ __decorate([
589
+ HostListener('focusout', ['$event'])
590
+ ], TngMenu.prototype, "onFocusout", null);
591
+ __decorate([
592
+ HostListener('keydown', ['$event'])
593
+ ], TngMenu.prototype, "onKeydown", null);
594
+ TngMenu = TngMenu_1 = __decorate([
595
+ Directive({
596
+ selector: '[tngMenu]',
597
+ exportAs: 'tngMenu',
598
+ standalone: true,
599
+ })
600
+ ], TngMenu);
601
+ export { TngMenu };
602
+ let TngMenuItem = class TngMenuItem {
603
+ hostRef = inject(ElementRef);
604
+ menu = inject(TngMenu, { optional: true, skipSelf: true });
605
+ resolvedId = this.hostRef.nativeElement.getAttribute('id') ?? createMenuItemId();
606
+ lastDisabledState = false;
607
+ lastNavigableState = true;
608
+ lastCheckedInput = false;
609
+ checkedOverride = null;
610
+ value = input(undefined, {
611
+ alias: 'tngMenuItemValue',
612
+ });
613
+ itemRole = input('menuitem', {
614
+ alias: 'tngMenuItemRole',
615
+ });
616
+ checked = input(false, {
617
+ alias: 'tngMenuItemChecked',
618
+ });
619
+ submenu = input(null, {
620
+ alias: 'tngMenuItemSubmenu',
621
+ });
622
+ constructor() {
623
+ this.lastDisabledState = this.isDisabled();
624
+ this.lastNavigableState = this.isNavigable();
625
+ this.menu?.registerItem(this);
626
+ }
627
+ ngOnInit() {
628
+ this.syncHostId();
629
+ this.lastCheckedInput = this.checked();
630
+ this.syncOwnedSubmenuLink();
631
+ this.syncSubmenuState();
632
+ }
633
+ dataSlot = 'menu-item';
634
+ get role() {
635
+ return this.itemRole();
636
+ }
637
+ id = this.resolvedId;
638
+ tabIndex = -1;
639
+ get ariaDisabled() {
640
+ return this.isDisabled() ? 'true' : null;
641
+ }
642
+ get ariaChecked() {
643
+ if (this.itemRole() === 'menuitem') {
644
+ return null;
645
+ }
646
+ return this.isChecked() ? 'true' : 'false';
647
+ }
648
+ get dataActive() {
649
+ return this.menu?.isItemActive(this.id) ? '' : null;
650
+ }
651
+ get ariaHaspopup() {
652
+ return this.submenu() === null ? null : 'menu';
653
+ }
654
+ get ariaControls() {
655
+ return this.submenu()?.id ?? null;
656
+ }
657
+ onClick(event) {
658
+ if (this.shouldIgnoreNestedInteractiveClick(event)) {
659
+ return;
660
+ }
661
+ if (this.submenu() !== null) {
662
+ this.menu?.setActiveItem(this);
663
+ this.openOwnedSubmenu('first');
664
+ return;
665
+ }
666
+ this.select('pointer');
667
+ }
668
+ ngOnDestroy() {
669
+ this.menu?.unregisterItem(this);
670
+ }
671
+ ngDoCheck() {
672
+ const currentDisabledState = this.isDisabled();
673
+ if (currentDisabledState !== this.lastDisabledState) {
674
+ this.lastDisabledState = currentDisabledState;
675
+ this.menu?.onItemDisabledStateChange(this);
676
+ }
677
+ const currentNavigableState = this.isNavigable();
678
+ if (currentNavigableState !== this.lastNavigableState) {
679
+ this.lastNavigableState = currentNavigableState;
680
+ this.menu?.onItemNavigabilityStateChange(this);
681
+ }
682
+ const currentCheckedInput = this.checked();
683
+ if (currentCheckedInput !== this.lastCheckedInput) {
684
+ this.lastCheckedInput = currentCheckedInput;
685
+ this.checkedOverride = null;
686
+ }
687
+ }
688
+ getItemId() {
689
+ return this.id;
690
+ }
691
+ getValue() {
692
+ return this.value();
693
+ }
694
+ getOwnedSubmenu() {
695
+ return this.submenu();
696
+ }
697
+ getRole() {
698
+ return this.itemRole();
699
+ }
700
+ isDisabled() {
701
+ const element = this.hostRef.nativeElement;
702
+ return element.disabled || element.hasAttribute('disabled');
703
+ }
704
+ isNavigable() {
705
+ return !this.isDisabled() && !this.isHiddenOrInert();
706
+ }
707
+ select(trigger) {
708
+ this.menu?.requestSelect(this, trigger);
709
+ }
710
+ isChecked() {
711
+ return this.checkedOverride ?? this.checked();
712
+ }
713
+ setCheckedState(checked) {
714
+ this.checkedOverride = checked;
715
+ }
716
+ applySelectionState() {
717
+ if (this.itemRole() === 'menuitemcheckbox') {
718
+ this.checkedOverride = !this.isChecked();
719
+ return;
720
+ }
721
+ if (this.itemRole() === 'menuitemradio') {
722
+ this.menu?.setSelectedRadioItem(this);
723
+ }
724
+ }
725
+ openOwnedSubmenu(focusAction) {
726
+ const submenu = this.submenu();
727
+ if (submenu === null) {
728
+ return;
729
+ }
730
+ this.syncOwnedSubmenuLink();
731
+ submenu.open(focusAction);
732
+ }
733
+ syncOwnedSubmenuLink() {
734
+ const submenu = this.submenu();
735
+ if (submenu === null || this.menu === null) {
736
+ return;
737
+ }
738
+ this.syncHostId();
739
+ submenu.setTriggerElement(this.hostRef.nativeElement, () => this.syncSubmenuState());
740
+ submenu.setRestoreFocusOnOutsideClick(false);
741
+ submenu.setParentMenu(this.menu, this);
742
+ }
743
+ syncHostId() {
744
+ if (this.hostRef.nativeElement.id === this.id) {
745
+ return;
746
+ }
747
+ this.hostRef.nativeElement.id = this.id;
748
+ }
749
+ syncSubmenuState() {
750
+ const submenu = this.submenu();
751
+ if (submenu === null) {
752
+ this.hostRef.nativeElement.removeAttribute('aria-expanded');
753
+ return;
754
+ }
755
+ this.hostRef.nativeElement.setAttribute('aria-expanded', submenu.isOpen() ? 'true' : 'false');
756
+ }
757
+ shouldIgnoreNestedInteractiveClick(event) {
758
+ const target = event.target;
759
+ if (!(target instanceof Element)) {
760
+ return false;
761
+ }
762
+ const host = this.hostRef.nativeElement;
763
+ const interactiveTarget = target.closest('button, input, select, textarea, a[href], [role="button"], [role="link"], [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"]');
764
+ return interactiveTarget !== null && interactiveTarget !== host;
765
+ }
766
+ isHiddenOrInert() {
767
+ const element = this.hostRef.nativeElement;
768
+ return element.hidden || Boolean(element.inert) || element.hasAttribute('hidden') || element.hasAttribute('inert');
769
+ }
770
+ };
771
+ __decorate([
772
+ HostBinding('attr.data-slot')
773
+ ], TngMenuItem.prototype, "dataSlot", void 0);
774
+ __decorate([
775
+ HostBinding('attr.role')
776
+ ], TngMenuItem.prototype, "role", null);
777
+ __decorate([
778
+ HostBinding('attr.id')
779
+ ], TngMenuItem.prototype, "id", void 0);
780
+ __decorate([
781
+ HostBinding('attr.tabindex')
782
+ ], TngMenuItem.prototype, "tabIndex", void 0);
783
+ __decorate([
784
+ HostBinding('attr.aria-disabled')
785
+ ], TngMenuItem.prototype, "ariaDisabled", null);
786
+ __decorate([
787
+ HostBinding('attr.aria-checked')
788
+ ], TngMenuItem.prototype, "ariaChecked", null);
789
+ __decorate([
790
+ HostBinding('attr.data-active')
791
+ ], TngMenuItem.prototype, "dataActive", null);
792
+ __decorate([
793
+ HostBinding('attr.aria-haspopup')
794
+ ], TngMenuItem.prototype, "ariaHaspopup", null);
795
+ __decorate([
796
+ HostBinding('attr.aria-controls')
797
+ ], TngMenuItem.prototype, "ariaControls", null);
798
+ __decorate([
799
+ HostListener('click', ['$event'])
800
+ ], TngMenuItem.prototype, "onClick", null);
801
+ TngMenuItem = __decorate([
802
+ Directive({
803
+ selector: '[tngMenuItem]',
804
+ exportAs: 'tngMenuItem',
805
+ standalone: true,
806
+ })
807
+ ], TngMenuItem);
808
+ export { TngMenuItem };
809
+ let TngMenuSeparator = class TngMenuSeparator {
810
+ dataSlot = 'menu-separator';
811
+ role = 'separator';
812
+ };
813
+ __decorate([
814
+ HostBinding('attr.data-slot')
815
+ ], TngMenuSeparator.prototype, "dataSlot", void 0);
816
+ __decorate([
817
+ HostBinding('attr.role')
818
+ ], TngMenuSeparator.prototype, "role", void 0);
819
+ TngMenuSeparator = __decorate([
820
+ Directive({
821
+ selector: '[tngMenuSeparator]',
822
+ exportAs: 'tngMenuSeparator',
823
+ standalone: true,
824
+ })
825
+ ], TngMenuSeparator);
826
+ export { TngMenuSeparator };
827
+ let TngMenuGroupLabel = class TngMenuGroupLabel {
828
+ dataSlot = 'menu-group-label';
829
+ role = 'presentation';
830
+ };
831
+ __decorate([
832
+ HostBinding('attr.data-slot')
833
+ ], TngMenuGroupLabel.prototype, "dataSlot", void 0);
834
+ __decorate([
835
+ HostBinding('attr.role')
836
+ ], TngMenuGroupLabel.prototype, "role", void 0);
837
+ TngMenuGroupLabel = __decorate([
838
+ Directive({
839
+ selector: '[tngMenuGroupLabel]',
840
+ exportAs: 'tngMenuGroupLabel',
841
+ standalone: true,
842
+ })
843
+ ], TngMenuGroupLabel);
844
+ export { TngMenuGroupLabel };
845
+ let TngMenuBackdrop = class TngMenuBackdrop {
846
+ menu = input(null, {
847
+ alias: 'tngMenuBackdrop',
848
+ });
849
+ dataSlot = 'menu-backdrop';
850
+ onClick() {
851
+ const menu = this.menu();
852
+ if (menu?.isOpen()) {
853
+ menu.close(false);
854
+ }
855
+ }
856
+ };
857
+ __decorate([
858
+ HostBinding('attr.data-slot')
859
+ ], TngMenuBackdrop.prototype, "dataSlot", void 0);
860
+ __decorate([
861
+ HostListener('click')
862
+ ], TngMenuBackdrop.prototype, "onClick", null);
863
+ TngMenuBackdrop = __decorate([
864
+ Directive({
865
+ selector: '[tngMenuBackdrop]',
866
+ exportAs: 'tngMenuBackdrop',
867
+ standalone: true,
868
+ })
869
+ ], TngMenuBackdrop);
870
+ export { TngMenuBackdrop };
871
+ let TngMenuTrigger = class TngMenuTrigger {
872
+ hostRef = inject(ElementRef);
873
+ resolvedId = this.hostRef.nativeElement.getAttribute('id') ?? createMenuTriggerId();
874
+ linkedMenu = null;
875
+ menu = input(null, {
876
+ alias: 'tngMenuTrigger',
877
+ });
878
+ dataSlot = 'menu-trigger';
879
+ id = this.resolvedId;
880
+ ariaHaspopup = 'menu';
881
+ get ariaControls() {
882
+ return this.menu()?.id ?? null;
883
+ }
884
+ ngOnInit() {
885
+ this.syncHostId();
886
+ this.syncMenuLink();
887
+ this.syncAriaExpanded();
888
+ }
889
+ ngDoCheck() {
890
+ this.syncHostId();
891
+ this.syncMenuLink();
892
+ this.syncAriaExpanded();
893
+ }
894
+ ngOnDestroy() {
895
+ if (this.linkedMenu === null) {
896
+ return;
897
+ }
898
+ const linkedMenu = this.linkedMenu;
899
+ linkedMenu.clearTriggerLink(this.hostRef.nativeElement);
900
+ if (linkedMenu.isOpen()) {
901
+ linkedMenu.close(false);
902
+ }
903
+ this.linkedMenu = null;
904
+ }
905
+ onClick() {
906
+ if (this.isDisabled()) {
907
+ return;
908
+ }
909
+ const menu = this.syncMenuLink();
910
+ if (menu === null || menu.isDisabled()) {
911
+ return;
912
+ }
913
+ if (menu.isOpen()) {
914
+ menu.close(true);
915
+ return;
916
+ }
917
+ this.openMenu('none');
918
+ }
919
+ onKeydown(event) {
920
+ if (this.isDisabled()) {
921
+ return;
922
+ }
923
+ const menu = this.syncMenuLink();
924
+ switch (event.key) {
925
+ case 'Enter':
926
+ case ' ':
927
+ if (menu === null || menu.isDisabled()) {
928
+ return;
929
+ }
930
+ event.preventDefault();
931
+ this.openMenu('none');
932
+ return;
933
+ case 'ArrowDown':
934
+ if (menu === null || menu.isDisabled()) {
935
+ return;
936
+ }
937
+ event.preventDefault();
938
+ this.openMenu('first');
939
+ return;
940
+ case 'ArrowUp':
941
+ if (menu === null || menu.isDisabled()) {
942
+ return;
943
+ }
944
+ event.preventDefault();
945
+ this.openMenu('last');
946
+ return;
947
+ case 'Escape':
948
+ if (menu?.isOpen()) {
949
+ event.preventDefault();
950
+ menu.close(true);
951
+ }
952
+ return;
953
+ default:
954
+ return;
955
+ }
956
+ }
957
+ openMenu(focusAction) {
958
+ const menu = this.syncMenuLink();
959
+ if (menu === null) {
960
+ return;
961
+ }
962
+ menu.open(focusAction);
963
+ }
964
+ syncAriaExpanded() {
965
+ const menu = this.menu();
966
+ if (menu === null) {
967
+ this.hostRef.nativeElement.removeAttribute('aria-expanded');
968
+ return;
969
+ }
970
+ this.hostRef.nativeElement.setAttribute('aria-expanded', menu.isOpen() ? 'true' : 'false');
971
+ }
972
+ syncHostId() {
973
+ if (this.hostRef.nativeElement.id === this.id) {
974
+ return;
975
+ }
976
+ this.hostRef.nativeElement.id = this.id;
977
+ }
978
+ isDisabled() {
979
+ const element = this.hostRef.nativeElement;
980
+ return element.disabled || element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';
981
+ }
982
+ syncMenuLink() {
983
+ const menu = this.menu();
984
+ if (menu === null) {
985
+ this.linkedMenu?.clearTriggerLink(this.hostRef.nativeElement);
986
+ this.linkedMenu = null;
987
+ return null;
988
+ }
989
+ if (this.linkedMenu === menu) {
990
+ return menu;
991
+ }
992
+ this.linkedMenu?.clearTriggerLink(this.hostRef.nativeElement);
993
+ this.linkedMenu = menu;
994
+ menu.setTriggerElement(this.hostRef.nativeElement, () => this.syncAriaExpanded());
995
+ menu.setRestoreFocusOnOutsideClick(false);
996
+ this.syncAriaExpanded();
997
+ return menu;
998
+ }
999
+ };
1000
+ __decorate([
1001
+ HostBinding('attr.data-slot')
1002
+ ], TngMenuTrigger.prototype, "dataSlot", void 0);
1003
+ __decorate([
1004
+ HostBinding('attr.id')
1005
+ ], TngMenuTrigger.prototype, "id", void 0);
1006
+ __decorate([
1007
+ HostBinding('attr.aria-haspopup')
1008
+ ], TngMenuTrigger.prototype, "ariaHaspopup", void 0);
1009
+ __decorate([
1010
+ HostBinding('attr.aria-controls')
1011
+ ], TngMenuTrigger.prototype, "ariaControls", null);
1012
+ __decorate([
1013
+ HostListener('click')
1014
+ ], TngMenuTrigger.prototype, "onClick", null);
1015
+ __decorate([
1016
+ HostListener('keydown', ['$event'])
1017
+ ], TngMenuTrigger.prototype, "onKeydown", null);
1018
+ TngMenuTrigger = __decorate([
1019
+ Directive({
1020
+ selector: '[tngMenuTrigger]',
1021
+ exportAs: 'tngMenuTrigger',
1022
+ standalone: true,
1023
+ })
1024
+ ], TngMenuTrigger);
1025
+ export { TngMenuTrigger };
1026
+ //# sourceMappingURL=tng-menu.js.map