@tailng-ui/components 0.17.0 → 0.18.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 (257) hide show
  1. package/package.json +16 -5
  2. package/src/lib/feedback/empty/tng-empty.component.d.ts +16 -1
  3. package/src/lib/feedback/empty/tng-empty.component.d.ts.map +1 -1
  4. package/src/lib/feedback/empty/tng-empty.component.js +47 -57
  5. package/src/lib/feedback/empty/tng-empty.component.js.map +1 -1
  6. package/src/lib/feedback/index.d.ts +0 -5
  7. package/src/lib/feedback/index.d.ts.map +1 -1
  8. package/src/lib/feedback/index.js +4 -5
  9. package/src/lib/feedback/index.js.map +1 -1
  10. package/src/lib/feedback/progress-bar/tng-progress-bar.component.d.ts +4 -0
  11. package/src/lib/feedback/progress-bar/tng-progress-bar.component.d.ts.map +1 -1
  12. package/src/lib/feedback/progress-bar/tng-progress-bar.component.js +16 -26
  13. package/src/lib/feedback/progress-bar/tng-progress-bar.component.js.map +1 -1
  14. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.d.ts +4 -0
  15. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.d.ts.map +1 -1
  16. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.js +18 -32
  17. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.js.map +1 -1
  18. package/src/lib/feedback/skeleton/tng-skeleton.component.d.ts +4 -0
  19. package/src/lib/feedback/skeleton/tng-skeleton.component.d.ts.map +1 -1
  20. package/src/lib/feedback/skeleton/tng-skeleton.component.js +14 -20
  21. package/src/lib/feedback/skeleton/tng-skeleton.component.js.map +1 -1
  22. package/src/lib/feedback/toast/tng-toast.component.d.ts +4 -1
  23. package/src/lib/feedback/toast/tng-toast.component.d.ts.map +1 -1
  24. package/src/lib/feedback/toast/tng-toast.component.js +17 -19
  25. package/src/lib/feedback/toast/tng-toast.component.js.map +1 -1
  26. package/src/lib/form/autocomplete/tng-autocomplete.component.d.ts +4 -0
  27. package/src/lib/form/autocomplete/tng-autocomplete.component.d.ts.map +1 -1
  28. package/src/lib/form/autocomplete/tng-autocomplete.component.js +46 -49
  29. package/src/lib/form/autocomplete/tng-autocomplete.component.js.map +1 -1
  30. package/src/lib/form/button-toggle/tng-button-toggle-group.component.d.ts +3 -0
  31. package/src/lib/form/button-toggle/tng-button-toggle-group.component.d.ts.map +1 -1
  32. package/src/lib/form/button-toggle/tng-button-toggle-group.component.js +33 -58
  33. package/src/lib/form/button-toggle/tng-button-toggle-group.component.js.map +1 -1
  34. package/src/lib/form/button-toggle/tng-button-toggle.component.d.ts +3 -0
  35. package/src/lib/form/button-toggle/tng-button-toggle.component.d.ts.map +1 -1
  36. package/src/lib/form/button-toggle/tng-button-toggle.component.js +15 -26
  37. package/src/lib/form/button-toggle/tng-button-toggle.component.js.map +1 -1
  38. package/src/lib/form/checkbox/tng-checkbox.component.d.ts +3 -0
  39. package/src/lib/form/checkbox/tng-checkbox.component.d.ts.map +1 -1
  40. package/src/lib/form/checkbox/tng-checkbox.component.js +32 -42
  41. package/src/lib/form/checkbox/tng-checkbox.component.js.map +1 -1
  42. package/src/lib/form/chips/tng-chips.component.d.ts +3 -0
  43. package/src/lib/form/chips/tng-chips.component.d.ts.map +1 -1
  44. package/src/lib/form/chips/tng-chips.component.js +14 -19
  45. package/src/lib/form/chips/tng-chips.component.js.map +1 -1
  46. package/src/lib/form/combobox/tng-combobox.component.d.ts +3 -0
  47. package/src/lib/form/combobox/tng-combobox.component.d.ts.map +1 -1
  48. package/src/lib/form/combobox/tng-combobox.component.js +10 -13
  49. package/src/lib/form/combobox/tng-combobox.component.js.map +1 -1
  50. package/src/lib/form/datepicker/tng-datepicker.component.d.ts +4 -1
  51. package/src/lib/form/datepicker/tng-datepicker.component.d.ts.map +1 -1
  52. package/src/lib/form/datepicker/tng-datepicker.component.js +58 -98
  53. package/src/lib/form/datepicker/tng-datepicker.component.js.map +1 -1
  54. package/src/lib/form/form-field/tng-form-field.component.d.ts +3 -0
  55. package/src/lib/form/form-field/tng-form-field.component.d.ts.map +1 -1
  56. package/src/lib/form/form-field/tng-form-field.component.js +28 -33
  57. package/src/lib/form/form-field/tng-form-field.component.js.map +1 -1
  58. package/src/lib/form/index.d.ts +0 -20
  59. package/src/lib/form/index.d.ts.map +1 -1
  60. package/src/lib/form/index.js +4 -20
  61. package/src/lib/form/index.js.map +1 -1
  62. package/src/lib/form/input/tng-input.component.d.ts +3 -0
  63. package/src/lib/form/input/tng-input.component.d.ts.map +1 -1
  64. package/src/lib/form/input/tng-input.component.js +49 -60
  65. package/src/lib/form/input/tng-input.component.js.map +1 -1
  66. package/src/lib/form/input-otp/tng-input-otp.component.d.ts +3 -0
  67. package/src/lib/form/input-otp/tng-input-otp.component.d.ts.map +1 -1
  68. package/src/lib/form/input-otp/tng-input-otp.component.js +55 -69
  69. package/src/lib/form/input-otp/tng-input-otp.component.js.map +1 -1
  70. package/src/lib/form/label/tng-label.component.d.ts +3 -0
  71. package/src/lib/form/label/tng-label.component.d.ts.map +1 -1
  72. package/src/lib/form/label/tng-label.component.js +12 -19
  73. package/src/lib/form/label/tng-label.component.js.map +1 -1
  74. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.d.ts +4 -0
  75. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.d.ts.map +1 -1
  76. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.js +40 -43
  77. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.js.map +1 -1
  78. package/src/lib/form/multiselect/tng-multiselect.component.d.ts +4 -0
  79. package/src/lib/form/multiselect/tng-multiselect.component.d.ts.map +1 -1
  80. package/src/lib/form/multiselect/tng-multiselect.component.js +49 -52
  81. package/src/lib/form/multiselect/tng-multiselect.component.js.map +1 -1
  82. package/src/lib/form/radio/tng-radio.component.d.ts +3 -0
  83. package/src/lib/form/radio/tng-radio.component.d.ts.map +1 -1
  84. package/src/lib/form/radio/tng-radio.component.js +18 -33
  85. package/src/lib/form/radio/tng-radio.component.js.map +1 -1
  86. package/src/lib/form/select/tng-select.component.d.ts +4 -0
  87. package/src/lib/form/select/tng-select.component.d.ts.map +1 -1
  88. package/src/lib/form/select/tng-select.component.js +52 -53
  89. package/src/lib/form/select/tng-select.component.js.map +1 -1
  90. package/src/lib/form/select/tng-select.slots.d.ts +5 -0
  91. package/src/lib/form/select/tng-select.slots.d.ts.map +1 -1
  92. package/src/lib/form/select/tng-select.slots.js +21 -17
  93. package/src/lib/form/select/tng-select.slots.js.map +1 -1
  94. package/src/lib/form/slider/tng-slider.component.d.ts +3 -0
  95. package/src/lib/form/slider/tng-slider.component.d.ts.map +1 -1
  96. package/src/lib/form/slider/tng-slider.component.js +14 -27
  97. package/src/lib/form/slider/tng-slider.component.js.map +1 -1
  98. package/src/lib/form/switch/tng-switch.component.d.ts +3 -0
  99. package/src/lib/form/switch/tng-switch.component.d.ts.map +1 -1
  100. package/src/lib/form/switch/tng-switch.component.js +15 -24
  101. package/src/lib/form/switch/tng-switch.component.js.map +1 -1
  102. package/src/lib/form/textarea/tng-textarea.component.d.ts +3 -0
  103. package/src/lib/form/textarea/tng-textarea.component.d.ts.map +1 -1
  104. package/src/lib/form/textarea/tng-textarea.component.js +19 -36
  105. package/src/lib/form/textarea/tng-textarea.component.js.map +1 -1
  106. package/src/lib/form/toggle/tng-toggle.component.d.ts +3 -0
  107. package/src/lib/form/toggle/tng-toggle.component.d.ts.map +1 -1
  108. package/src/lib/form/toggle/tng-toggle.component.js +41 -41
  109. package/src/lib/form/toggle/tng-toggle.component.js.map +1 -1
  110. package/src/lib/form/toggle-group/tng-toggle-group.component.d.ts +4 -0
  111. package/src/lib/form/toggle-group/tng-toggle-group.component.d.ts.map +1 -1
  112. package/src/lib/form/toggle-group/tng-toggle-group.component.js +28 -31
  113. package/src/lib/form/toggle-group/tng-toggle-group.component.js.map +1 -1
  114. package/src/lib/layout/accordion/tng-accordion.component.d.ts +10 -0
  115. package/src/lib/layout/accordion/tng-accordion.component.d.ts.map +1 -1
  116. package/src/lib/layout/accordion/tng-accordion.component.js +49 -148
  117. package/src/lib/layout/accordion/tng-accordion.component.js.map +1 -1
  118. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.d.ts +3 -0
  119. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.d.ts.map +1 -1
  120. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.js +10 -13
  121. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.js.map +1 -1
  122. package/src/lib/layout/card/tng-card.component.d.ts +21 -0
  123. package/src/lib/layout/card/tng-card.component.d.ts.map +1 -1
  124. package/src/lib/layout/card/tng-card.component.js +92 -136
  125. package/src/lib/layout/card/tng-card.component.js.map +1 -1
  126. package/src/lib/layout/collapsible/tng-collapsible.component.d.ts +3 -0
  127. package/src/lib/layout/collapsible/tng-collapsible.component.d.ts.map +1 -1
  128. package/src/lib/layout/collapsible/tng-collapsible.component.js +17 -24
  129. package/src/lib/layout/collapsible/tng-collapsible.component.js.map +1 -1
  130. package/src/lib/layout/drawer/tng-drawer.component.d.ts +4 -0
  131. package/src/lib/layout/drawer/tng-drawer.component.d.ts.map +1 -1
  132. package/src/lib/layout/drawer/tng-drawer.component.js +48 -51
  133. package/src/lib/layout/drawer/tng-drawer.component.js.map +1 -1
  134. package/src/lib/layout/grid/tng-grid.component.d.ts +8 -0
  135. package/src/lib/layout/grid/tng-grid.component.d.ts.map +1 -1
  136. package/src/lib/layout/grid/tng-grid.component.js +48 -110
  137. package/src/lib/layout/grid/tng-grid.component.js.map +1 -1
  138. package/src/lib/layout/index.d.ts +1 -8
  139. package/src/lib/layout/index.d.ts.map +1 -1
  140. package/src/lib/layout/index.js +5 -8
  141. package/src/lib/layout/index.js.map +1 -1
  142. package/src/lib/layout/separator/tng-separator.component.d.ts +3 -0
  143. package/src/lib/layout/separator/tng-separator.component.d.ts.map +1 -1
  144. package/src/lib/layout/separator/tng-separator.component.js +11 -16
  145. package/src/lib/layout/separator/tng-separator.component.js.map +1 -1
  146. package/src/lib/layout/stepper/tng-stepper.component.d.ts +3 -0
  147. package/src/lib/layout/stepper/tng-stepper.component.d.ts.map +1 -1
  148. package/src/lib/layout/stepper/tng-stepper.component.js +10 -13
  149. package/src/lib/layout/stepper/tng-stepper.component.js.map +1 -1
  150. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.d.ts +4 -0
  151. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.d.ts.map +1 -1
  152. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.js +47 -49
  153. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.js.map +1 -1
  154. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.d.ts +4 -0
  155. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.d.ts.map +1 -1
  156. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.js +16 -18
  157. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.js.map +1 -1
  158. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.d.ts +4 -0
  159. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.d.ts.map +1 -1
  160. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.js +10 -12
  161. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.js.map +1 -1
  162. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.d.ts +3 -0
  163. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.d.ts.map +1 -1
  164. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.js +12 -10
  165. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.js.map +1 -1
  166. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.d.ts +4 -0
  167. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.d.ts.map +1 -1
  168. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.js +12 -14
  169. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.js.map +1 -1
  170. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.d.ts +4 -0
  171. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.d.ts.map +1 -1
  172. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.js +23 -25
  173. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.js.map +1 -1
  174. package/src/lib/navigation/context-menu/tng-context-menu.component.d.ts +5 -0
  175. package/src/lib/navigation/context-menu/tng-context-menu.component.d.ts.map +1 -1
  176. package/src/lib/navigation/context-menu/tng-context-menu.component.js +24 -26
  177. package/src/lib/navigation/context-menu/tng-context-menu.component.js.map +1 -1
  178. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.d.ts +4 -0
  179. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.d.ts.map +1 -1
  180. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.js +19 -23
  181. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.js.map +1 -1
  182. package/src/lib/navigation/index.d.ts +0 -12
  183. package/src/lib/navigation/index.d.ts.map +1 -1
  184. package/src/lib/navigation/index.js +4 -12
  185. package/src/lib/navigation/index.js.map +1 -1
  186. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.d.ts +3 -0
  187. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.d.ts.map +1 -1
  188. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.js +22 -20
  189. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.js.map +1 -1
  190. package/src/lib/navigation/menu/tng-menu.component.d.ts +5 -0
  191. package/src/lib/navigation/menu/tng-menu.component.d.ts.map +1 -1
  192. package/src/lib/navigation/menu/tng-menu.component.js +21 -23
  193. package/src/lib/navigation/menu/tng-menu.component.js.map +1 -1
  194. package/src/lib/navigation/menubar/tng-menubar.component.d.ts +5 -0
  195. package/src/lib/navigation/menubar/tng-menubar.component.d.ts.map +1 -1
  196. package/src/lib/navigation/menubar/tng-menubar.component.js +20 -22
  197. package/src/lib/navigation/menubar/tng-menubar.component.js.map +1 -1
  198. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.d.ts +4 -0
  199. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.d.ts.map +1 -1
  200. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.js +11 -13
  201. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.js.map +1 -1
  202. package/src/lib/navigation/tabs/tng-tabs.component.d.ts +5 -0
  203. package/src/lib/navigation/tabs/tng-tabs.component.d.ts.map +1 -1
  204. package/src/lib/navigation/tabs/tng-tabs.component.js +32 -34
  205. package/src/lib/navigation/tabs/tng-tabs.component.js.map +1 -1
  206. package/src/lib/navigation/toolbar/tng-toolbar.component.d.ts +4 -0
  207. package/src/lib/navigation/toolbar/tng-toolbar.component.d.ts.map +1 -1
  208. package/src/lib/navigation/toolbar/tng-toolbar.component.js +11 -13
  209. package/src/lib/navigation/toolbar/tng-toolbar.component.js.map +1 -1
  210. package/src/lib/overlay/dialog/tng-dialog.component.d.ts +4 -0
  211. package/src/lib/overlay/dialog/tng-dialog.component.d.ts.map +1 -1
  212. package/src/lib/overlay/dialog/tng-dialog.component.js +18 -25
  213. package/src/lib/overlay/dialog/tng-dialog.component.js.map +1 -1
  214. package/src/lib/overlay/index.d.ts +0 -3
  215. package/src/lib/overlay/index.d.ts.map +1 -1
  216. package/src/lib/overlay/index.js +4 -3
  217. package/src/lib/overlay/index.js.map +1 -1
  218. package/src/lib/overlay/popover/tng-popover.component.d.ts +4 -0
  219. package/src/lib/overlay/popover/tng-popover.component.d.ts.map +1 -1
  220. package/src/lib/overlay/popover/tng-popover.component.js +23 -37
  221. package/src/lib/overlay/popover/tng-popover.component.js.map +1 -1
  222. package/src/lib/overlay/tooltip/tng-tooltip.component.d.ts +4 -0
  223. package/src/lib/overlay/tooltip/tng-tooltip.component.d.ts.map +1 -1
  224. package/src/lib/overlay/tooltip/tng-tooltip.component.js +17 -21
  225. package/src/lib/overlay/tooltip/tng-tooltip.component.js.map +1 -1
  226. package/src/lib/utility/avatar/tng-avatar.component.d.ts +4 -1
  227. package/src/lib/utility/avatar/tng-avatar.component.d.ts.map +1 -1
  228. package/src/lib/utility/avatar/tng-avatar.component.js +20 -22
  229. package/src/lib/utility/avatar/tng-avatar.component.js.map +1 -1
  230. package/src/lib/utility/badge/tng-badge.component.d.ts +4 -0
  231. package/src/lib/utility/badge/tng-badge.component.d.ts.map +1 -1
  232. package/src/lib/utility/badge/tng-badge.component.js +13 -10
  233. package/src/lib/utility/badge/tng-badge.component.js.map +1 -1
  234. package/src/lib/utility/button/tng-button.component.d.ts +4 -1
  235. package/src/lib/utility/button/tng-button.component.d.ts.map +1 -1
  236. package/src/lib/utility/button/tng-button.component.js +19 -29
  237. package/src/lib/utility/button/tng-button.component.js.map +1 -1
  238. package/src/lib/utility/code-block/tng-code-block.component.d.ts +4 -0
  239. package/src/lib/utility/code-block/tng-code-block.component.d.ts.map +1 -1
  240. package/src/lib/utility/code-block/tng-code-block.component.js +73 -103
  241. package/src/lib/utility/code-block/tng-code-block.component.js.map +1 -1
  242. package/src/lib/utility/copy-button/tng-copy-button.component.d.ts +4 -1
  243. package/src/lib/utility/copy-button/tng-copy-button.component.d.ts.map +1 -1
  244. package/src/lib/utility/copy-button/tng-copy-button.component.js +28 -36
  245. package/src/lib/utility/copy-button/tng-copy-button.component.js.map +1 -1
  246. package/src/lib/utility/index.d.ts +1 -9
  247. package/src/lib/utility/index.d.ts.map +1 -1
  248. package/src/lib/utility/index.js +5 -8
  249. package/src/lib/utility/index.js.map +1 -1
  250. package/src/lib/utility/tag/tng-tag.component.d.ts +4 -1
  251. package/src/lib/utility/tag/tng-tag.component.d.ts.map +1 -1
  252. package/src/lib/utility/tag/tng-tag.component.js +18 -24
  253. package/src/lib/utility/tag/tng-tag.component.js.map +1 -1
  254. package/src/lib/utility/tree/tng-tree.component.d.ts +4 -1
  255. package/src/lib/utility/tree/tng-tree.component.d.ts.map +1 -1
  256. package/src/lib/utility/tree/tng-tree.component.js +23 -25
  257. package/src/lib/utility/tree/tng-tree.component.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tng-breadcrumb.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/breadcrumb/tng-breadcrumb.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ContentChild,\n ContentChildren,\n computed,\n effect,\n input,\n TemplateRef,\n type AfterContentInit,\n type QueryList,\n} from '@angular/core';\nimport { TngBreadcrumb as TngBreadcrumbPrimitive } from '@tailng-ui/primitives';\nimport { merge, Subscription } from 'rxjs';\nimport { TngBreadcrumbItemComponent, type TngBreadcrumbItemDisplayMode } from './tng-breadcrumb-item.component';\nimport { TngBreadcrumbListComponent } from './tng-breadcrumb-list.component';\nimport { TngBreadcrumbSeparatorTemplateDirective } from './tng-breadcrumb-separator-template.directive';\n\n@Component({\n selector: 'tng-breadcrumb',\n imports: [TngBreadcrumbPrimitive, TngBreadcrumbListComponent],\n templateUrl: './tng-breadcrumb.component.html',\n styleUrl: './tng-breadcrumb.component.css',\n})\nexport class TngBreadcrumbComponent implements AfterContentInit {\n @ContentChildren(TngBreadcrumbItemComponent, { descendants: true })\n private readonly breadcrumbItems?: QueryList<TngBreadcrumbItemComponent>;\n\n @ContentChild(TngBreadcrumbSeparatorTemplateDirective, { read: TemplateRef })\n private readonly separatorTemplate?: TemplateRef<unknown>;\n\n public readonly ariaLabel = input<string | null>('Breadcrumb');\n public readonly separator = input('/');\n public readonly maxItems = input<number | null>(null);\n public readonly itemsBeforeCollapse = input(1);\n public readonly itemsAfterCollapse = input(2);\n public readonly collapseLabel = input('More');\n\n protected readonly resolvedAriaLabel = computed(() => {\n const ariaLabel = this.ariaLabel();\n if (ariaLabel === null) {\n return 'Breadcrumb';\n }\n\n const trimmedAriaLabel = ariaLabel.trim();\n return trimmedAriaLabel.length > 0 ? trimmedAriaLabel : 'Breadcrumb';\n });\n\n private itemStateSubscriptions = Subscription.EMPTY;\n private readonly queryListSubscriptions = new Subscription();\n\n public constructor() {\n effect(() => {\n this.separator();\n this.maxItems();\n this.itemsBeforeCollapse();\n this.itemsAfterCollapse();\n this.collapseLabel();\n this.syncItems();\n });\n }\n\n public ngAfterContentInit(): void {\n this.rebindItemStateSubscriptions();\n if (this.breadcrumbItems === undefined) {\n return;\n }\n\n this.queryListSubscriptions.add(\n this.breadcrumbItems.changes.subscribe(() => {\n this.rebindItemStateSubscriptions();\n }),\n );\n }\n\n public ngOnDestroy(): void {\n this.itemStateSubscriptions.unsubscribe();\n this.queryListSubscriptions.unsubscribe();\n }\n\n private rebindItemStateSubscriptions(): void {\n this.itemStateSubscriptions.unsubscribe();\n\n const items = this.breadcrumbItems?.toArray() ?? [];\n if (items.length === 0) {\n this.syncItems();\n return;\n }\n\n this.itemStateSubscriptions = merge(...items.map((item) => item.stateChanges)).subscribe(() => {\n this.syncItems();\n });\n\n this.syncItems();\n }\n\n private syncItems(): void {\n const items = this.breadcrumbItems?.toArray() ?? [];\n if (items.length === 0) {\n return;\n }\n\n const currentIndex = this.resolveCurrentIndex(items);\n const displayModes = this.resolveDisplayModes(items, currentIndex);\n const visibleIndices = this.resolveVisibleIndices(displayModes);\n\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n const isVisible = displayModes[index] !== 'hidden';\n const isLastVisibleItem = !visibleIndices.some((visibleIndex) => visibleIndex > index);\n\n item.setResolvedCurrent(index === currentIndex);\n item.setDisplayMode(displayModes[index], this.collapseLabel());\n item.setSeparator(this.separator(), isVisible && !isLastVisibleItem, this.separatorTemplate ?? null);\n }\n }\n\n private resolveCurrentIndex(items: readonly TngBreadcrumbItemComponent[]): number {\n const explicitlyCurrentIndices = items.reduce<number[]>((accumulator, item, index) => {\n if (item.current()) {\n accumulator.push(index);\n }\n return accumulator;\n }, []);\n\n if (explicitlyCurrentIndices.length > 0) {\n return explicitlyCurrentIndices[explicitlyCurrentIndices.length - 1];\n }\n\n if (items.length === 1) {\n return 0;\n }\n\n return -1;\n }\n\n // eslint-disable-next-line complexity,max-lines-per-function\n private resolveDisplayModes(\n items: readonly TngBreadcrumbItemComponent[],\n currentIndex: number,\n ): readonly TngBreadcrumbItemDisplayMode[] {\n const itemCount = items.length;\n const maxItems = this.maxItems();\n if (maxItems === null || maxItems < 1 || itemCount <= maxItems) {\n return Array.from({ length: itemCount }, () => 'visible' as const);\n }\n\n const itemsBeforeCollapse = Math.max(1, Math.floor(this.itemsBeforeCollapse()));\n const itemsAfterCollapse = Math.max(1, Math.floor(this.itemsAfterCollapse()));\n const visibleIndices = new Set<number>();\n\n for (let index = 0; index < Math.min(itemsBeforeCollapse, itemCount); index += 1) {\n visibleIndices.add(index);\n }\n\n for (\n let index = Math.max(itemCount - itemsAfterCollapse, 0);\n index < itemCount;\n index += 1\n ) {\n visibleIndices.add(index);\n }\n\n if (currentIndex >= 0) {\n visibleIndices.add(currentIndex);\n }\n\n const hiddenIndices: number[] = [];\n for (let index = 0; index < itemCount; index += 1) {\n if (!visibleIndices.has(index)) {\n hiddenIndices.push(index);\n }\n }\n\n if (hiddenIndices.length === 0) {\n return Array.from({ length: itemCount }, () => 'visible' as const);\n }\n\n const displayModes: TngBreadcrumbItemDisplayMode[] = Array.from(\n { length: itemCount },\n () => 'visible' as const,\n );\n\n for (const hiddenIndex of hiddenIndices) {\n displayModes[hiddenIndex] = 'hidden';\n }\n\n // The first hidden item becomes the collapse marker so we avoid introducing a separate focusable node.\n displayModes[hiddenIndices[0]] = 'ellipsis';\n return displayModes;\n }\n\n private resolveVisibleIndices(displayModes: readonly TngBreadcrumbItemDisplayMode[]): readonly number[] {\n const visibleIndices: number[] = [];\n for (let index = 0; index < displayModes.length; index += 1) {\n if (displayModes[index] !== 'hidden') {\n visibleIndices.push(index);\n }\n }\n return visibleIndices;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-breadcrumb.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/breadcrumb/tng-breadcrumb.component.ts","../../../../../../../../libs/tailng-ui/components/src/lib/navigation/breadcrumb/tng-breadcrumb.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ContentChild,\n ContentChildren,\n computed,\n effect,\n input,\n TemplateRef,\n type AfterContentInit,\n type QueryList,\n} from '@angular/core';\nimport { TngBreadcrumb as TngBreadcrumbPrimitive } from '@tailng-ui/primitives';\nimport { merge, Subscription } from 'rxjs';\nimport { TngBreadcrumbItemComponent, type TngBreadcrumbItemDisplayMode } from './tng-breadcrumb-item.component';\nimport { TngBreadcrumbListComponent } from './tng-breadcrumb-list.component';\nimport { TngBreadcrumbSeparatorTemplateDirective } from './tng-breadcrumb-separator-template.directive';\n\n@Component({\n selector: 'tng-breadcrumb',\n imports: [TngBreadcrumbPrimitive, TngBreadcrumbListComponent],\n templateUrl: './tng-breadcrumb.component.html',\n styleUrl: './tng-breadcrumb.component.css',\n})\nexport class TngBreadcrumbComponent implements AfterContentInit {\n @ContentChildren(TngBreadcrumbItemComponent, { descendants: true })\n private readonly breadcrumbItems?: QueryList<TngBreadcrumbItemComponent>;\n\n @ContentChild(TngBreadcrumbSeparatorTemplateDirective, { read: TemplateRef })\n private readonly separatorTemplate?: TemplateRef<unknown>;\n\n public readonly ariaLabel = input<string | null>('Breadcrumb');\n public readonly separator = input('/');\n public readonly maxItems = input<number | null>(null);\n public readonly itemsBeforeCollapse = input(1);\n public readonly itemsAfterCollapse = input(2);\n public readonly collapseLabel = input('More');\n\n protected readonly resolvedAriaLabel = computed(() => {\n const ariaLabel = this.ariaLabel();\n if (ariaLabel === null) {\n return 'Breadcrumb';\n }\n\n const trimmedAriaLabel = ariaLabel.trim();\n return trimmedAriaLabel.length > 0 ? trimmedAriaLabel : 'Breadcrumb';\n });\n\n private itemStateSubscriptions = Subscription.EMPTY;\n private readonly queryListSubscriptions = new Subscription();\n\n public constructor() {\n effect(() => {\n this.separator();\n this.maxItems();\n this.itemsBeforeCollapse();\n this.itemsAfterCollapse();\n this.collapseLabel();\n this.syncItems();\n });\n }\n\n public ngAfterContentInit(): void {\n this.rebindItemStateSubscriptions();\n if (this.breadcrumbItems === undefined) {\n return;\n }\n\n this.queryListSubscriptions.add(\n this.breadcrumbItems.changes.subscribe(() => {\n this.rebindItemStateSubscriptions();\n }),\n );\n }\n\n public ngOnDestroy(): void {\n this.itemStateSubscriptions.unsubscribe();\n this.queryListSubscriptions.unsubscribe();\n }\n\n private rebindItemStateSubscriptions(): void {\n this.itemStateSubscriptions.unsubscribe();\n\n const items = this.breadcrumbItems?.toArray() ?? [];\n if (items.length === 0) {\n this.syncItems();\n return;\n }\n\n this.itemStateSubscriptions = merge(...items.map((item) => item.stateChanges)).subscribe(() => {\n this.syncItems();\n });\n\n this.syncItems();\n }\n\n private syncItems(): void {\n const items = this.breadcrumbItems?.toArray() ?? [];\n if (items.length === 0) {\n return;\n }\n\n const currentIndex = this.resolveCurrentIndex(items);\n const displayModes = this.resolveDisplayModes(items, currentIndex);\n const visibleIndices = this.resolveVisibleIndices(displayModes);\n\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n const isVisible = displayModes[index] !== 'hidden';\n const isLastVisibleItem = !visibleIndices.some((visibleIndex) => visibleIndex > index);\n\n item.setResolvedCurrent(index === currentIndex);\n item.setDisplayMode(displayModes[index], this.collapseLabel());\n item.setSeparator(this.separator(), isVisible && !isLastVisibleItem, this.separatorTemplate ?? null);\n }\n }\n\n private resolveCurrentIndex(items: readonly TngBreadcrumbItemComponent[]): number {\n const explicitlyCurrentIndices = items.reduce<number[]>((accumulator, item, index) => {\n if (item.current()) {\n accumulator.push(index);\n }\n return accumulator;\n }, []);\n\n if (explicitlyCurrentIndices.length > 0) {\n return explicitlyCurrentIndices[explicitlyCurrentIndices.length - 1];\n }\n\n if (items.length === 1) {\n return 0;\n }\n\n return -1;\n }\n\n // eslint-disable-next-line complexity,max-lines-per-function\n private resolveDisplayModes(\n items: readonly TngBreadcrumbItemComponent[],\n currentIndex: number,\n ): readonly TngBreadcrumbItemDisplayMode[] {\n const itemCount = items.length;\n const maxItems = this.maxItems();\n if (maxItems === null || maxItems < 1 || itemCount <= maxItems) {\n return Array.from({ length: itemCount }, () => 'visible' as const);\n }\n\n const itemsBeforeCollapse = Math.max(1, Math.floor(this.itemsBeforeCollapse()));\n const itemsAfterCollapse = Math.max(1, Math.floor(this.itemsAfterCollapse()));\n const visibleIndices = new Set<number>();\n\n for (let index = 0; index < Math.min(itemsBeforeCollapse, itemCount); index += 1) {\n visibleIndices.add(index);\n }\n\n for (\n let index = Math.max(itemCount - itemsAfterCollapse, 0);\n index < itemCount;\n index += 1\n ) {\n visibleIndices.add(index);\n }\n\n if (currentIndex >= 0) {\n visibleIndices.add(currentIndex);\n }\n\n const hiddenIndices: number[] = [];\n for (let index = 0; index < itemCount; index += 1) {\n if (!visibleIndices.has(index)) {\n hiddenIndices.push(index);\n }\n }\n\n if (hiddenIndices.length === 0) {\n return Array.from({ length: itemCount }, () => 'visible' as const);\n }\n\n const displayModes: TngBreadcrumbItemDisplayMode[] = Array.from(\n { length: itemCount },\n () => 'visible' as const,\n );\n\n for (const hiddenIndex of hiddenIndices) {\n displayModes[hiddenIndex] = 'hidden';\n }\n\n // The first hidden item becomes the collapse marker so we avoid introducing a separate focusable node.\n displayModes[hiddenIndices[0]] = 'ellipsis';\n return displayModes;\n }\n\n private resolveVisibleIndices(displayModes: readonly TngBreadcrumbItemDisplayMode[]): readonly number[] {\n const visibleIndices: number[] = [];\n for (let index = 0; index < displayModes.length; index += 1) {\n if (displayModes[index] !== 'hidden') {\n visibleIndices.push(index);\n }\n }\n return visibleIndices;\n }\n}\nexport { TngBreadcrumbComponent as TngBreadcrumb };\n","<nav tngBreadcrumb class=\"tng-breadcrumb\" [attr.aria-label]=\"resolvedAriaLabel()\">\n <tng-breadcrumb-list>\n <ng-content />\n </tng-breadcrumb-list>\n</nav>\n"]}
@@ -1,5 +1,10 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@tailng-ui/primitives";
1
3
  export declare class TngContextMenuComponent {
2
4
  readonly ariaLabel: import("@angular/core").InputSignal<string>;
3
5
  protected get hostAriaLabel(): string;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngContextMenuComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<TngContextMenuComponent, "tng-context-menu", ["tngContextMenuComponent"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.TngMenu; inputs: { "loop": "loop"; "disabled": "disabled"; "closeOnSelect": "closeOnSelect"; "dismissOnOutsideClick": "dismissOnOutsideClick"; "dismissOnFocusout": "dismissOnFocusout"; }; outputs: { "tngMenuOpened": "tngMenuOpened"; "tngMenuClosed": "tngMenuClosed"; "tngMenuSelect": "tngMenuSelect"; }; }, { directive: typeof i1.TngContextMenu; inputs: {}; outputs: {}; }]>;
4
8
  }
9
+ export { TngContextMenuComponent as TngContextMenu };
5
10
  //# sourceMappingURL=tng-context-menu.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-context-menu.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/context-menu/tng-context-menu.component.ts"],"names":[],"mappings":"AAMA,qBAgBa,uBAAuB;IAClC,SAAgB,SAAS,8CAAiC;IAG1D,SAAS,KAAK,aAAa,IAAI,MAAM,CAEpC;CACF"}
1
+ {"version":3,"file":"tng-context-menu.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/context-menu/tng-context-menu.component.ts"],"names":[],"mappings":";;AAMA,qBAgBa,uBAAuB;IAClC,SAAgB,SAAS,8CAAiC;IAG1D,SAAS,KAAK,aAAa,IAAI,MAAM,CAEpC;yCANU,uBAAuB;2CAAvB,uBAAuB;CAOnC;AACD,OAAO,EAAE,uBAAuB,IAAI,cAAc,EAAE,CAAC"}
@@ -1,32 +1,30 @@
1
- import { __decorate } from "tslib";
2
1
  import { Component, HostBinding, input } from '@angular/core';
3
2
  import { TngContextMenu as TngContextMenuPrimitive, TngMenu as TngMenuPrimitive, } from '@tailng-ui/primitives';
4
- let TngContextMenuComponent = class TngContextMenuComponent {
5
- ariaLabel = input('Context menu');
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@tailng-ui/primitives";
5
+ export class TngContextMenuComponent {
6
+ ariaLabel = input('Context menu', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
6
7
  get hostAriaLabel() {
7
8
  return this.ariaLabel();
8
9
  }
9
- };
10
- __decorate([
11
- HostBinding('attr.aria-label')
12
- ], TngContextMenuComponent.prototype, "hostAriaLabel", null);
13
- TngContextMenuComponent = __decorate([
14
- Component({
15
- selector: 'tng-context-menu',
16
- hostDirectives: [
17
- {
18
- directive: TngMenuPrimitive,
19
- inputs: ['loop', 'disabled', 'closeOnSelect', 'dismissOnOutsideClick', 'dismissOnFocusout'],
20
- outputs: ['tngMenuOpened', 'tngMenuClosed', 'tngMenuSelect'],
21
- },
22
- {
23
- directive: TngContextMenuPrimitive,
24
- },
25
- ],
26
- templateUrl: './tng-context-menu.component.html',
27
- styleUrl: './tng-context-menu.component.css',
28
- exportAs: 'tngContextMenuComponent',
29
- })
30
- ], TngContextMenuComponent);
31
- export { TngContextMenuComponent };
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngContextMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.1", type: TngContextMenuComponent, isStandalone: true, selector: "tng-context-menu", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-label": "this.hostAriaLabel" } }, exportAs: ["tngContextMenuComponent"], hostDirectives: [{ directive: i1.TngMenu, inputs: ["loop", "loop", "disabled", "disabled", "closeOnSelect", "closeOnSelect", "dismissOnOutsideClick", "dismissOnOutsideClick", "dismissOnFocusout", "dismissOnFocusout"], outputs: ["tngMenuOpened", "tngMenuOpened", "tngMenuClosed", "tngMenuClosed", "tngMenuSelect", "tngMenuSelect"] }, { directive: i1.TngContextMenu }], ngImport: i0, template: "<ng-content />\n", styles: [":host {\n background: var(--tng-semantic-background-canvas);\n border: 1px solid var(--tng-semantic-border-subtle);\n border-radius: 0.75rem;\n color: var(--tng-semantic-foreground-primary);\n display: block;\n min-width: 14rem;\n padding: 0.45rem;\n}\n\n:host[data-state='open'] {\n color: var(--tng-semantic-foreground-primary);\n display: grid;\n gap: 0.22rem;\n}\n\n:host[hidden] {\n display: none !important;\n}\n"] });
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngContextMenuComponent, decorators: [{
14
+ type: Component,
15
+ args: [{ selector: 'tng-context-menu', hostDirectives: [
16
+ {
17
+ directive: TngMenuPrimitive,
18
+ inputs: ['loop', 'disabled', 'closeOnSelect', 'dismissOnOutsideClick', 'dismissOnFocusout'],
19
+ outputs: ['tngMenuOpened', 'tngMenuClosed', 'tngMenuSelect'],
20
+ },
21
+ {
22
+ directive: TngContextMenuPrimitive,
23
+ },
24
+ ], exportAs: 'tngContextMenuComponent', template: "<ng-content />\n", styles: [":host {\n background: var(--tng-semantic-background-canvas);\n border: 1px solid var(--tng-semantic-border-subtle);\n border-radius: 0.75rem;\n color: var(--tng-semantic-foreground-primary);\n display: block;\n min-width: 14rem;\n padding: 0.45rem;\n}\n\n:host[data-state='open'] {\n color: var(--tng-semantic-foreground-primary);\n display: grid;\n gap: 0.22rem;\n}\n\n:host[hidden] {\n display: none !important;\n}\n"] }]
25
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], hostAriaLabel: [{
26
+ type: HostBinding,
27
+ args: ['attr.aria-label']
28
+ }] } });
29
+ export { TngContextMenuComponent as TngContextMenu };
32
30
  //# sourceMappingURL=tng-context-menu.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-context-menu.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/context-menu/tng-context-menu.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,cAAc,IAAI,uBAAuB,EACzC,OAAO,IAAI,gBAAgB,GAC5B,MAAM,uBAAuB,CAAC;AAkBxB,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClB,SAAS,GAAG,KAAK,CAAS,cAAc,CAAC,CAAC;IAG1D,IAAc,aAAa;QACzB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;CACF,CAAA;AAHC;IADC,WAAW,CAAC,iBAAiB,CAAC;4DAG9B;AANU,uBAAuB;IAhBnC,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,cAAc,EAAE;YACd;gBACE,SAAS,EAAE,gBAAgB;gBAC3B,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,EAAE,mBAAmB,CAAC;gBAC3F,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC;aAC7D;YACD;gBACE,SAAS,EAAE,uBAAuB;aACnC;SACF;QACD,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,kCAAkC;QAC5C,QAAQ,EAAE,yBAAyB;KACpC,CAAC;GACW,uBAAuB,CAOnC","sourcesContent":["import { Component, HostBinding, input } from '@angular/core';\nimport {\n TngContextMenu as TngContextMenuPrimitive,\n TngMenu as TngMenuPrimitive,\n} from '@tailng-ui/primitives';\n\n@Component({\n selector: 'tng-context-menu',\n hostDirectives: [\n {\n directive: TngMenuPrimitive,\n inputs: ['loop', 'disabled', 'closeOnSelect', 'dismissOnOutsideClick', 'dismissOnFocusout'],\n outputs: ['tngMenuOpened', 'tngMenuClosed', 'tngMenuSelect'],\n },\n {\n directive: TngContextMenuPrimitive,\n },\n ],\n templateUrl: './tng-context-menu.component.html',\n styleUrl: './tng-context-menu.component.css',\n exportAs: 'tngContextMenuComponent',\n})\nexport class TngContextMenuComponent {\n public readonly ariaLabel = input<string>('Context menu');\n\n @HostBinding('attr.aria-label')\n protected get hostAriaLabel(): string {\n return this.ariaLabel();\n }\n}\n"]}
1
+ {"version":3,"file":"tng-context-menu.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/context-menu/tng-context-menu.component.ts","../../../../../../../../libs/tailng-ui/components/src/lib/navigation/context-menu/tng-context-menu.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,cAAc,IAAI,uBAAuB,EACzC,OAAO,IAAI,gBAAgB,GAC5B,MAAM,uBAAuB,CAAC;;;AAkB/B,MAAM,OAAO,uBAAuB;IAClB,SAAS,GAAG,KAAK,CAAS,cAAc,qDAAC,CAAC;IAE1D,IACc,aAAa;QACzB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;uGANU,uBAAuB;2FAAvB,uBAAuB,srBCtBpC,kBACA;;2FDqBa,uBAAuB;kBAhBnC,SAAS;+BACE,kBAAkB,kBACZ;wBACd;4BACE,SAAS,EAAE,gBAAgB;4BAC3B,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,EAAE,mBAAmB,CAAC;4BAC3F,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC;yBAC7D;wBACD;4BACE,SAAS,EAAE,uBAAuB;yBACnC;qBACF,YAGS,yBAAyB;;sBAKlC,WAAW;uBAAC,iBAAiB;;AAKhC,OAAO,EAAE,uBAAuB,IAAI,cAAc,EAAE,CAAC","sourcesContent":["import { Component, HostBinding, input } from '@angular/core';\nimport {\n TngContextMenu as TngContextMenuPrimitive,\n TngMenu as TngMenuPrimitive,\n} from '@tailng-ui/primitives';\n\n@Component({\n selector: 'tng-context-menu',\n hostDirectives: [\n {\n directive: TngMenuPrimitive,\n inputs: ['loop', 'disabled', 'closeOnSelect', 'dismissOnOutsideClick', 'dismissOnFocusout'],\n outputs: ['tngMenuOpened', 'tngMenuClosed', 'tngMenuSelect'],\n },\n {\n directive: TngContextMenuPrimitive,\n },\n ],\n templateUrl: './tng-context-menu.component.html',\n styleUrl: './tng-context-menu.component.css',\n exportAs: 'tngContextMenuComponent',\n})\nexport class TngContextMenuComponent {\n public readonly ariaLabel = input<string>('Context menu');\n\n @HostBinding('attr.aria-label')\n protected get hostAriaLabel(): string {\n return this.ariaLabel();\n }\n}\nexport { TngContextMenuComponent as TngContextMenu };\n","<ng-content />\n"]}
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  export declare class TngDropdownMenuComponent {
2
3
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
3
4
  readonly label: import("@angular/core").InputSignal<string>;
@@ -6,5 +7,8 @@ export declare class TngDropdownMenuComponent {
6
7
  protected onDocumentClick(event: unknown): void;
7
8
  protected onEscapeKeydown(): void;
8
9
  protected toggleOpen(): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngDropdownMenuComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<TngDropdownMenuComponent, "tng-dropdown-menu", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
9
12
  }
13
+ export { TngDropdownMenuComponent as TngDropdownMenu };
10
14
  //# sourceMappingURL=tng-dropdown-menu.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-dropdown-menu.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.ts"],"names":[],"mappings":"AAWA,qBAMa,wBAAwB;IACnC,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAA4B;IAEjD,SAAS,CAAC,QAAQ,CAAC,IAAI,kDAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IAGvE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAoB/C,SAAS,CAAC,eAAe,IAAI,IAAI;IAQjC,SAAS,CAAC,UAAU,IAAI,IAAI;CAO7B"}
1
+ {"version":3,"file":"tng-dropdown-menu.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.ts"],"names":[],"mappings":";AAWA,qBAMa,wBAAwB;IACnC,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAA4B;IAEjD,SAAS,CAAC,QAAQ,CAAC,IAAI,kDAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IAGvE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAoB/C,SAAS,CAAC,eAAe,IAAI,IAAI;IAQjC,SAAS,CAAC,UAAU,IAAI,IAAI;yCAvCjB,wBAAwB;2CAAxB,wBAAwB;CA8CpC;AACD,OAAO,EAAE,wBAAwB,IAAI,eAAe,EAAE,CAAC"}
@@ -1,12 +1,10 @@
1
- import { __decorate } from "tslib";
2
1
  import { Component, ElementRef, HostListener, booleanAttribute, inject, input, signal, } from '@angular/core';
3
2
  import { TngDropdownMenu as TngDropdownMenuPrimitive } from '@tailng-ui/primitives';
4
- let TngDropdownMenuComponent = class TngDropdownMenuComponent {
5
- disabled = input(false, {
6
- transform: booleanAttribute,
7
- });
8
- label = input('Actions');
9
- open = signal(false);
3
+ import * as i0 from "@angular/core";
4
+ export class TngDropdownMenuComponent {
5
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
6
+ label = input('Actions', ...(ngDevMode ? [{ debugName: "label" }] : []));
7
+ open = signal(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
10
8
  hostRef = inject(ElementRef);
11
9
  onDocumentClick(event) {
12
10
  if (!(event instanceof Event)) {
@@ -35,20 +33,18 @@ let TngDropdownMenuComponent = class TngDropdownMenuComponent {
35
33
  }
36
34
  this.open.set(!this.open());
37
35
  }
38
- };
39
- __decorate([
40
- HostListener('document:click', ['$event'])
41
- ], TngDropdownMenuComponent.prototype, "onDocumentClick", null);
42
- __decorate([
43
- HostListener('document:keydown.escape')
44
- ], TngDropdownMenuComponent.prototype, "onEscapeKeydown", null);
45
- TngDropdownMenuComponent = __decorate([
46
- Component({
47
- selector: 'tng-dropdown-menu',
48
- imports: [TngDropdownMenuPrimitive],
49
- templateUrl: './tng-dropdown-menu.component.html',
50
- styleUrl: './tng-dropdown-menu.component.css',
51
- })
52
- ], TngDropdownMenuComponent);
53
- export { TngDropdownMenuComponent };
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: TngDropdownMenuComponent, isStandalone: true, selector: "tng-dropdown-menu", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "document:click": "onDocumentClick($event)", "document:keydown.escape": "onEscapeKeydown()" } }, ngImport: i0, template: "<div tngDropdownMenu class=\"tng-dropdown-menu\">\n <button\n type=\"button\"\n class=\"tng-dropdown-menu__trigger\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-haspopup]=\"'menu'\"\n (click)=\"toggleOpen()\"\n >\n {{ label() }}\n </button>\n\n @if (open()) {\n <ul role=\"menu\" class=\"tng-dropdown-menu__panel\">\n <ng-content />\n </ul>\n }\n</div>\n", styles: [":host {\n display: inline-block;\n}\n\n.tng-dropdown-menu {\n display: inline-grid;\n gap: 0.45rem;\n position: relative;\n}\n\n.tng-dropdown-menu__trigger {\n align-items: center;\n background: var(--tng-semantic-background-surface);\n border: 1px solid var(--tng-semantic-border-subtle);\n border-radius: 0.6rem;\n color: var(--tng-semantic-foreground-primary);\n cursor: pointer;\n display: inline-flex;\n font: inherit;\n min-height: 2.35rem;\n padding: 0 0.85rem;\n}\n\n.tng-dropdown-menu__trigger:focus-visible {\n outline: 2px solid var(--tng-semantic-focus-ring);\n outline-offset: 1px;\n}\n\n.tng-dropdown-menu__panel {\n background: var(--tng-semantic-background-base);\n border: 1px solid var(--tng-semantic-border-subtle);\n border-radius: 0.75rem;\n box-shadow: 0 16px 34px color-mix(in srgb, var(--tng-semantic-foreground-primary) 18%, transparent);\n display: grid;\n gap: 0.25rem;\n list-style: none;\n margin: 0;\n min-width: 12rem;\n padding: 0.45rem;\n position: absolute;\n top: calc(100% + 0.25rem);\n z-index: 10;\n}\n\n.tng-dropdown-menu__panel :where([role='menuitem']) {\n border-radius: 0.45rem;\n cursor: pointer;\n min-height: 2rem;\n padding: 0.35rem 0.6rem;\n}\n\n.tng-dropdown-menu__panel :where([role='menuitem']:hover, [role='menuitem']:focus-visible) {\n background: var(--tng-semantic-background-muted);\n outline: none;\n}\n"], dependencies: [{ kind: "directive", type: TngDropdownMenuPrimitive, selector: "[tngDropdownMenu]", exportAs: ["tngDropdownMenu"] }] });
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDropdownMenuComponent, decorators: [{
40
+ type: Component,
41
+ args: [{ selector: 'tng-dropdown-menu', imports: [TngDropdownMenuPrimitive], template: "<div tngDropdownMenu class=\"tng-dropdown-menu\">\n <button\n type=\"button\"\n class=\"tng-dropdown-menu__trigger\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-haspopup]=\"'menu'\"\n (click)=\"toggleOpen()\"\n >\n {{ label() }}\n </button>\n\n @if (open()) {\n <ul role=\"menu\" class=\"tng-dropdown-menu__panel\">\n <ng-content />\n </ul>\n }\n</div>\n", styles: [":host {\n display: inline-block;\n}\n\n.tng-dropdown-menu {\n display: inline-grid;\n gap: 0.45rem;\n position: relative;\n}\n\n.tng-dropdown-menu__trigger {\n align-items: center;\n background: var(--tng-semantic-background-surface);\n border: 1px solid var(--tng-semantic-border-subtle);\n border-radius: 0.6rem;\n color: var(--tng-semantic-foreground-primary);\n cursor: pointer;\n display: inline-flex;\n font: inherit;\n min-height: 2.35rem;\n padding: 0 0.85rem;\n}\n\n.tng-dropdown-menu__trigger:focus-visible {\n outline: 2px solid var(--tng-semantic-focus-ring);\n outline-offset: 1px;\n}\n\n.tng-dropdown-menu__panel {\n background: var(--tng-semantic-background-base);\n border: 1px solid var(--tng-semantic-border-subtle);\n border-radius: 0.75rem;\n box-shadow: 0 16px 34px color-mix(in srgb, var(--tng-semantic-foreground-primary) 18%, transparent);\n display: grid;\n gap: 0.25rem;\n list-style: none;\n margin: 0;\n min-width: 12rem;\n padding: 0.45rem;\n position: absolute;\n top: calc(100% + 0.25rem);\n z-index: 10;\n}\n\n.tng-dropdown-menu__panel :where([role='menuitem']) {\n border-radius: 0.45rem;\n cursor: pointer;\n min-height: 2rem;\n padding: 0.35rem 0.6rem;\n}\n\n.tng-dropdown-menu__panel :where([role='menuitem']:hover, [role='menuitem']:focus-visible) {\n background: var(--tng-semantic-background-muted);\n outline: none;\n}\n"] }]
42
+ }], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], onDocumentClick: [{
43
+ type: HostListener,
44
+ args: ['document:click', ['$event']]
45
+ }], onEscapeKeydown: [{
46
+ type: HostListener,
47
+ args: ['document:keydown.escape']
48
+ }] } });
49
+ export { TngDropdownMenuComponent as TngDropdownMenu };
54
50
  //# sourceMappingURL=tng-dropdown-menu.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-dropdown-menu.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,IAAI,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAQ7E,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnB,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,SAAS,CAAC,CAAC;IAE9B,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvB,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;IAG7D,eAAe,CAAC,KAAc;QACtC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAGS,eAAe;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAES,UAAU;QAClB,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF,CAAA;AAnCW;IADT,YAAY,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAC;+DAkB1C;AAGS;IADT,YAAY,CAAC,yBAAyB,CAAC;+DAOvC;AArCU,wBAAwB;IANpC,SAAS,CAAC;QACT,QAAQ,EAAE,mBAAmB;QAC7B,OAAO,EAAE,CAAC,wBAAwB,CAAC;QACnC,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE,mCAAmC;KAC9C,CAAC;GACW,wBAAwB,CA8CpC","sourcesContent":["import {\n Component,\n ElementRef,\n HostListener,\n booleanAttribute,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { TngDropdownMenu as TngDropdownMenuPrimitive } from '@tailng-ui/primitives';\n\n@Component({\n selector: 'tng-dropdown-menu',\n imports: [TngDropdownMenuPrimitive],\n templateUrl: './tng-dropdown-menu.component.html',\n styleUrl: './tng-dropdown-menu.component.css',\n})\nexport class TngDropdownMenuComponent {\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly label = input<string>('Actions');\n\n protected readonly open = signal(false);\n\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n @HostListener('document:click', ['$event'])\n protected onDocumentClick(event: unknown): void {\n if (!(event instanceof Event)) {\n return;\n }\n\n if (!this.open()) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (!this.hostRef.nativeElement.contains(target)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscapeKeydown(): void {\n if (!this.open()) {\n return;\n }\n\n this.open.set(false);\n }\n\n protected toggleOpen(): void {\n if (this.disabled()) {\n return;\n }\n\n this.open.set(!this.open());\n }\n}\n"]}
1
+ {"version":3,"file":"tng-dropdown-menu.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.ts","../../../../../../../../libs/tailng-ui/components/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,IAAI,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;;AAQpF,MAAM,OAAO,wBAAwB;IACnB,QAAQ,GAAG,KAAK,CAA4B,KAAK,qDAC/D,SAAS,EAAE,gBAAgB,GAC3B,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,SAAS,iDAAC,CAAC;IAE9B,IAAI,GAAG,MAAM,CAAC,KAAK,gDAAC,CAAC;IAEvB,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;IAG7D,eAAe,CAAC,KAAc;QACtC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAGS,eAAe;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAES,UAAU;QAClB,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;uGA7CU,wBAAwB;2FAAxB,wBAAwB,wcCjBrC,waAkBA,66CDLY,wBAAwB;;2FAIvB,wBAAwB;kBANpC,SAAS;+BACE,mBAAmB,WACpB,CAAC,wBAAwB,CAAC;;sBAclC,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;sBAoBzC,YAAY;uBAAC,yBAAyB;;AAiBzC,OAAO,EAAE,wBAAwB,IAAI,eAAe,EAAE,CAAC","sourcesContent":["import {\n Component,\n ElementRef,\n HostListener,\n booleanAttribute,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { TngDropdownMenu as TngDropdownMenuPrimitive } from '@tailng-ui/primitives';\n\n@Component({\n selector: 'tng-dropdown-menu',\n imports: [TngDropdownMenuPrimitive],\n templateUrl: './tng-dropdown-menu.component.html',\n styleUrl: './tng-dropdown-menu.component.css',\n})\nexport class TngDropdownMenuComponent {\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly label = input<string>('Actions');\n\n protected readonly open = signal(false);\n\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n @HostListener('document:click', ['$event'])\n protected onDocumentClick(event: unknown): void {\n if (!(event instanceof Event)) {\n return;\n }\n\n if (!this.open()) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n if (!this.hostRef.nativeElement.contains(target)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscapeKeydown(): void {\n if (!this.open()) {\n return;\n }\n\n this.open.set(false);\n }\n\n protected toggleOpen(): void {\n if (this.disabled()) {\n return;\n }\n\n this.open.set(!this.open());\n }\n}\nexport { TngDropdownMenuComponent as TngDropdownMenu };\n","<div tngDropdownMenu class=\"tng-dropdown-menu\">\n <button\n type=\"button\"\n class=\"tng-dropdown-menu__trigger\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-haspopup]=\"'menu'\"\n (click)=\"toggleOpen()\"\n >\n {{ label() }}\n </button>\n\n @if (open()) {\n <ul role=\"menu\" class=\"tng-dropdown-menu__panel\">\n <ng-content />\n </ul>\n }\n</div>\n"]}
@@ -1,27 +1,15 @@
1
1
  export * from './breadcrumb/tng-breadcrumb.component';
2
- export { TngBreadcrumbComponent as TngBreadcrumb } from './breadcrumb/tng-breadcrumb.component';
3
2
  export * from './breadcrumb/tng-breadcrumb-item.component';
4
- export { TngBreadcrumbItemComponent as TngBreadcrumbItem } from './breadcrumb/tng-breadcrumb-item.component';
5
3
  export * from './breadcrumb/tng-breadcrumb-link.component';
6
- export { TngBreadcrumbLinkComponent as TngBreadcrumbLink } from './breadcrumb/tng-breadcrumb-link.component';
7
4
  export * from './breadcrumb/tng-breadcrumb-list.component';
8
- export { TngBreadcrumbListComponent as TngBreadcrumbList } from './breadcrumb/tng-breadcrumb-list.component';
9
5
  export * from './breadcrumb/tng-breadcrumb-separator.component';
10
- export { TngBreadcrumbSeparatorComponent as TngBreadcrumbSeparator, } from './breadcrumb/tng-breadcrumb-separator.component';
11
6
  export * from './breadcrumb/tng-breadcrumb-separator-template.directive';
12
7
  export * from './context-menu/tng-context-menu.component';
13
- export { TngContextMenuComponent as TngContextMenu } from './context-menu/tng-context-menu.component';
14
8
  export * from './dropdown-menu/tng-dropdown-menu.component';
15
- export { TngDropdownMenuComponent as TngDropdownMenu } from './dropdown-menu/tng-dropdown-menu.component';
16
9
  export * from './menu/tng-menu.component';
17
- export { TngMenuComponent as TngMenu } from './menu/tng-menu.component';
18
10
  export * from './menu/tng-menu-trigger-for.directive';
19
11
  export * from './menubar/tng-menubar.component';
20
- export { TngMenubarComponent as TngMenubar } from './menubar/tng-menubar.component';
21
12
  export * from './navigation-menu/tng-navigation-menu.component';
22
- export { TngNavigationMenuComponent as TngNavigationMenu } from './navigation-menu/tng-navigation-menu.component';
23
13
  export * from './tabs/tng-tabs.component';
24
- export { TngTabsComponent as TngTabs } from './tabs/tng-tabs.component';
25
14
  export * from './toolbar/tng-toolbar.component';
26
- export { TngToolbarComponent as TngToolbar } from './toolbar/tng-toolbar.component';
27
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/components/src/lib/navigation/index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,sBAAsB,IAAI,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAChG,cAAc,4CAA4C,CAAC;AAC3D,OAAO,EAAE,0BAA0B,IAAI,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC7G,cAAc,4CAA4C,CAAC;AAC3D,OAAO,EAAE,0BAA0B,IAAI,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC7G,cAAc,4CAA4C,CAAC;AAC3D,OAAO,EAAE,0BAA0B,IAAI,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC7G,cAAc,iDAAiD,CAAC;AAChE,OAAO,EACL,+BAA+B,IAAI,sBAAsB,GAC1D,MAAM,iDAAiD,CAAC;AACzD,cAAc,0DAA0D,CAAC;AACzE,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,uBAAuB,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtG,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,wBAAwB,IAAI,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC1G,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACxE,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,mBAAmB,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACpF,cAAc,iDAAiD,CAAC;AAChE,OAAO,EAAE,0BAA0B,IAAI,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAClH,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACxE,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,mBAAmB,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/components/src/lib/navigation/index.ts"],"names":[],"mappings":"AAKA,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iDAAiD,CAAC;AAChE,cAAc,0DAA0D,CAAC;AACzE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iDAAiD,CAAC;AAChE,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC"}
@@ -1,27 +1,19 @@
1
+ // Navigation components
2
+ //
3
+ // Note: keep exports aligned with `src/index.ts` (root barrel) so the public API stays stable.
4
+ // The root barrel will re-export this file.
1
5
  export * from './breadcrumb/tng-breadcrumb.component';
2
- export { TngBreadcrumbComponent as TngBreadcrumb } from './breadcrumb/tng-breadcrumb.component';
3
6
  export * from './breadcrumb/tng-breadcrumb-item.component';
4
- export { TngBreadcrumbItemComponent as TngBreadcrumbItem } from './breadcrumb/tng-breadcrumb-item.component';
5
7
  export * from './breadcrumb/tng-breadcrumb-link.component';
6
- export { TngBreadcrumbLinkComponent as TngBreadcrumbLink } from './breadcrumb/tng-breadcrumb-link.component';
7
8
  export * from './breadcrumb/tng-breadcrumb-list.component';
8
- export { TngBreadcrumbListComponent as TngBreadcrumbList } from './breadcrumb/tng-breadcrumb-list.component';
9
9
  export * from './breadcrumb/tng-breadcrumb-separator.component';
10
- export { TngBreadcrumbSeparatorComponent as TngBreadcrumbSeparator, } from './breadcrumb/tng-breadcrumb-separator.component';
11
10
  export * from './breadcrumb/tng-breadcrumb-separator-template.directive';
12
11
  export * from './context-menu/tng-context-menu.component';
13
- export { TngContextMenuComponent as TngContextMenu } from './context-menu/tng-context-menu.component';
14
12
  export * from './dropdown-menu/tng-dropdown-menu.component';
15
- export { TngDropdownMenuComponent as TngDropdownMenu } from './dropdown-menu/tng-dropdown-menu.component';
16
13
  export * from './menu/tng-menu.component';
17
- export { TngMenuComponent as TngMenu } from './menu/tng-menu.component';
18
14
  export * from './menu/tng-menu-trigger-for.directive';
19
15
  export * from './menubar/tng-menubar.component';
20
- export { TngMenubarComponent as TngMenubar } from './menubar/tng-menubar.component';
21
16
  export * from './navigation-menu/tng-navigation-menu.component';
22
- export { TngNavigationMenuComponent as TngNavigationMenu } from './navigation-menu/tng-navigation-menu.component';
23
17
  export * from './tabs/tng-tabs.component';
24
- export { TngTabsComponent as TngTabs } from './tabs/tng-tabs.component';
25
18
  export * from './toolbar/tng-toolbar.component';
26
- export { TngToolbarComponent as TngToolbar } from './toolbar/tng-toolbar.component';
27
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/components/src/lib/navigation/index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,sBAAsB,IAAI,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAChG,cAAc,4CAA4C,CAAC;AAC3D,OAAO,EAAE,0BAA0B,IAAI,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC7G,cAAc,4CAA4C,CAAC;AAC3D,OAAO,EAAE,0BAA0B,IAAI,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC7G,cAAc,4CAA4C,CAAC;AAC3D,OAAO,EAAE,0BAA0B,IAAI,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC7G,cAAc,iDAAiD,CAAC;AAChE,OAAO,EACL,+BAA+B,IAAI,sBAAsB,GAC1D,MAAM,iDAAiD,CAAC;AACzD,cAAc,0DAA0D,CAAC;AACzE,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,uBAAuB,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtG,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,wBAAwB,IAAI,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC1G,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACxE,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,mBAAmB,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACpF,cAAc,iDAAiD,CAAC;AAChE,OAAO,EAAE,0BAA0B,IAAI,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAClH,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACxE,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,mBAAmB,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC","sourcesContent":["export * from './breadcrumb/tng-breadcrumb.component';\nexport { TngBreadcrumbComponent as TngBreadcrumb } from './breadcrumb/tng-breadcrumb.component';\nexport * from './breadcrumb/tng-breadcrumb-item.component';\nexport { TngBreadcrumbItemComponent as TngBreadcrumbItem } from './breadcrumb/tng-breadcrumb-item.component';\nexport * from './breadcrumb/tng-breadcrumb-link.component';\nexport { TngBreadcrumbLinkComponent as TngBreadcrumbLink } from './breadcrumb/tng-breadcrumb-link.component';\nexport * from './breadcrumb/tng-breadcrumb-list.component';\nexport { TngBreadcrumbListComponent as TngBreadcrumbList } from './breadcrumb/tng-breadcrumb-list.component';\nexport * from './breadcrumb/tng-breadcrumb-separator.component';\nexport {\n TngBreadcrumbSeparatorComponent as TngBreadcrumbSeparator,\n} from './breadcrumb/tng-breadcrumb-separator.component';\nexport * from './breadcrumb/tng-breadcrumb-separator-template.directive';\nexport * from './context-menu/tng-context-menu.component';\nexport { TngContextMenuComponent as TngContextMenu } from './context-menu/tng-context-menu.component';\nexport * from './dropdown-menu/tng-dropdown-menu.component';\nexport { TngDropdownMenuComponent as TngDropdownMenu } from './dropdown-menu/tng-dropdown-menu.component';\nexport * from './menu/tng-menu.component';\nexport { TngMenuComponent as TngMenu } from './menu/tng-menu.component';\nexport * from './menu/tng-menu-trigger-for.directive';\nexport * from './menubar/tng-menubar.component';\nexport { TngMenubarComponent as TngMenubar } from './menubar/tng-menubar.component';\nexport * from './navigation-menu/tng-navigation-menu.component';\nexport { TngNavigationMenuComponent as TngNavigationMenu } from './navigation-menu/tng-navigation-menu.component';\nexport * from './tabs/tng-tabs.component';\nexport { TngTabsComponent as TngTabs } from './tabs/tng-tabs.component';\nexport * from './toolbar/tng-toolbar.component';\nexport { TngToolbarComponent as TngToolbar } from './toolbar/tng-toolbar.component';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/components/src/lib/navigation/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,EAAE;AACF,+FAA+F;AAC/F,4CAA4C;AAE5C,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iDAAiD,CAAC;AAChE,cAAc,0DAA0D,CAAC;AACzE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iDAAiD,CAAC;AAChE,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC","sourcesContent":["// Navigation components\n//\n// Note: keep exports aligned with `src/index.ts` (root barrel) so the public API stays stable.\n// The root barrel will re-export this file.\n\nexport * from './breadcrumb/tng-breadcrumb.component';\nexport * from './breadcrumb/tng-breadcrumb-item.component';\nexport * from './breadcrumb/tng-breadcrumb-link.component';\nexport * from './breadcrumb/tng-breadcrumb-list.component';\nexport * from './breadcrumb/tng-breadcrumb-separator.component';\nexport * from './breadcrumb/tng-breadcrumb-separator-template.directive';\nexport * from './context-menu/tng-context-menu.component';\nexport * from './dropdown-menu/tng-dropdown-menu.component';\nexport * from './menu/tng-menu.component';\nexport * from './menu/tng-menu-trigger-for.directive';\nexport * from './menubar/tng-menubar.component';\nexport * from './navigation-menu/tng-navigation-menu.component';\nexport * from './tabs/tng-tabs.component';\nexport * from './toolbar/tng-toolbar.component';\n"]}
@@ -1,4 +1,5 @@
1
1
  import { TngMenu } from '@tailng-ui/primitives';
2
+ import * as i0 from "@angular/core";
2
3
  type TngMenuTriggerKeyboardEvent = Readonly<Pick<KeyboardEvent, 'key'>> & Readonly<{
3
4
  preventDefault: () => void;
4
5
  }>;
@@ -10,6 +11,8 @@ export declare class TngMenuTriggerFor {
10
11
  protected onClick(): void;
11
12
  protected onKeydown(event: TngMenuTriggerKeyboardEvent): void;
12
13
  private syncAriaState;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMenuTriggerFor, never>;
15
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TngMenuTriggerFor, "[tngMenuTriggerFor]", ["tngMenuTriggerFor"], { "tngMenuTriggerFor": { "alias": "tngMenuTriggerFor"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
13
16
  }
14
17
  export {};
15
18
  //# sourceMappingURL=tng-menu-trigger-for.directive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-menu-trigger-for.directive.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu-trigger-for.directive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,KAAK,2BAA2B,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GACrE,QAAQ,CAAC;IAAE,cAAc,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AAkB3C,qBAIa,iBAAiB;IAC5B,QAAQ,CAAC,iBAAiB,+CAA6B;IAEvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IAGvE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAG,MAAM,CAAU;;IAmBlD,SAAS,CAAC,OAAO,IAAI,IAAI;IAezB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI;IAmB7D,OAAO,CAAC,aAAa;CAOtB"}
1
+ {"version":3,"file":"tng-menu-trigger-for.directive.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu-trigger-for.directive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;;AAEhD,KAAK,2BAA2B,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GACrE,QAAQ,CAAC;IAAE,cAAc,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AAkB3C,qBAIa,iBAAiB;IAC5B,QAAQ,CAAC,iBAAiB,+CAA6B;IAEvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IAGvE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAG,MAAM,CAAU;;IAmBlD,SAAS,CAAC,OAAO,IAAI,IAAI;IAezB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI;IAmB7D,OAAO,CAAC,aAAa;yCA3DV,iBAAiB;2CAAjB,iBAAiB;CAkE7B"}
@@ -1,5 +1,5 @@
1
- import { __decorate } from "tslib";
2
1
  import { Directive, ElementRef, HostBinding, HostListener, effect, inject, input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
3
  function resolveFocusActionForOpenKey(key) {
4
4
  switch (key) {
5
5
  case 'ArrowDown':
@@ -13,8 +13,8 @@ function resolveFocusActionForOpenKey(key) {
13
13
  return null;
14
14
  }
15
15
  }
16
- let TngMenuTriggerFor = class TngMenuTriggerFor {
17
- tngMenuTriggerFor = input.required();
16
+ export class TngMenuTriggerFor {
17
+ tngMenuTriggerFor = input.required(...(ngDevMode ? [{ debugName: "tngMenuTriggerFor" }] : []));
18
18
  hostRef = inject(ElementRef);
19
19
  ariaHasPopup = 'menu';
20
20
  constructor() {
@@ -64,21 +64,23 @@ let TngMenuTriggerFor = class TngMenuTriggerFor {
64
64
  trigger.setAttribute('aria-controls', menu.id);
65
65
  trigger.setAttribute('aria-expanded', menu.isOpen() ? 'true' : 'false');
66
66
  }
67
- };
68
- __decorate([
69
- HostBinding('attr.aria-haspopup')
70
- ], TngMenuTriggerFor.prototype, "ariaHasPopup", void 0);
71
- __decorate([
72
- HostListener('click')
73
- ], TngMenuTriggerFor.prototype, "onClick", null);
74
- __decorate([
75
- HostListener('keydown', ['$event'])
76
- ], TngMenuTriggerFor.prototype, "onKeydown", null);
77
- TngMenuTriggerFor = __decorate([
78
- Directive({
79
- selector: '[tngMenuTriggerFor]',
80
- exportAs: 'tngMenuTriggerFor',
81
- })
82
- ], TngMenuTriggerFor);
83
- export { TngMenuTriggerFor };
67
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMenuTriggerFor, deps: [], target: i0.ɵɵFactoryTarget.Directive });
68
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngMenuTriggerFor, isStandalone: true, selector: "[tngMenuTriggerFor]", inputs: { tngMenuTriggerFor: { classPropertyName: "tngMenuTriggerFor", publicName: "tngMenuTriggerFor", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()", "keydown": "onKeydown($event)" }, properties: { "attr.aria-haspopup": "this.ariaHasPopup" } }, exportAs: ["tngMenuTriggerFor"], ngImport: i0 });
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMenuTriggerFor, decorators: [{
71
+ type: Directive,
72
+ args: [{
73
+ selector: '[tngMenuTriggerFor]',
74
+ exportAs: 'tngMenuTriggerFor',
75
+ }]
76
+ }], ctorParameters: () => [], propDecorators: { tngMenuTriggerFor: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngMenuTriggerFor", required: true }] }], ariaHasPopup: [{
77
+ type: HostBinding,
78
+ args: ['attr.aria-haspopup']
79
+ }], onClick: [{
80
+ type: HostListener,
81
+ args: ['click']
82
+ }], onKeydown: [{
83
+ type: HostListener,
84
+ args: ['keydown', ['$event']]
85
+ }] } });
84
86
  //# sourceMappingURL=tng-menu-trigger-for.directive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-menu-trigger-for.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu-trigger-for.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, HostListener, effect, inject, input } from '@angular/core';\nimport { TngMenu } from '@tailng-ui/primitives';\n\ntype TngMenuTriggerKeyboardEvent = Readonly<Pick<KeyboardEvent, 'key'>> &\n Readonly<{ preventDefault: () => void }>;\n\ntype TngMenuOpenFocusAction = 'none' | 'first' | 'last';\n\nfunction resolveFocusActionForOpenKey(key: string): TngMenuOpenFocusAction | null {\n switch (key) {\n case 'ArrowDown':\n return 'first';\n case 'ArrowUp':\n return 'last';\n case 'Enter':\n case ' ':\n return 'none';\n default:\n return null;\n }\n}\n\n@Directive({\n selector: '[tngMenuTriggerFor]',\n exportAs: 'tngMenuTriggerFor',\n})\nexport class TngMenuTriggerFor {\n readonly tngMenuTriggerFor = input.required<TngMenu>();\n\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n @HostBinding('attr.aria-haspopup')\n protected readonly ariaHasPopup = 'menu' as const;\n\n public constructor() {\n effect((onCleanup): void => {\n const menu = this.tngMenuTriggerFor();\n const trigger = this.hostRef.nativeElement;\n menu.setTriggerElement(trigger, () => this.syncAriaState());\n menu.setRestoreFocusOnOutsideClick(false);\n this.syncAriaState();\n\n onCleanup((): void => {\n menu.clearTriggerLink(trigger);\n trigger.removeAttribute('aria-controls');\n trigger.removeAttribute('aria-expanded');\n });\n });\n }\n\n @HostListener('click')\n protected onClick(): void {\n const menu = this.tngMenuTriggerFor();\n if (menu.isDisabled()) {\n return;\n }\n\n if (menu.isOpen()) {\n menu.close(true);\n return;\n }\n\n menu.open('none');\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: TngMenuTriggerKeyboardEvent): void {\n const menu = this.tngMenuTriggerFor();\n if (menu.isDisabled()) {\n return;\n }\n\n const focusAction = resolveFocusActionForOpenKey(event.key);\n if (focusAction !== null) {\n event.preventDefault();\n menu.open(focusAction);\n return;\n }\n\n if (event.key === 'Escape' && menu.isOpen()) {\n event.preventDefault();\n menu.close(true);\n }\n }\n\n private syncAriaState(): void {\n const trigger = this.hostRef.nativeElement;\n const menu = this.tngMenuTriggerFor();\n\n trigger.setAttribute('aria-controls', menu.id);\n trigger.setAttribute('aria-expanded', menu.isOpen() ? 'true' : 'false');\n }\n}\n"]}
1
+ {"version":3,"file":"tng-menu-trigger-for.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu-trigger-for.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, HostListener, effect, inject, input } from '@angular/core';\nimport { TngMenu } from '@tailng-ui/primitives';\n\ntype TngMenuTriggerKeyboardEvent = Readonly<Pick<KeyboardEvent, 'key'>> &\n Readonly<{ preventDefault: () => void }>;\n\ntype TngMenuOpenFocusAction = 'none' | 'first' | 'last';\n\nfunction resolveFocusActionForOpenKey(key: string): TngMenuOpenFocusAction | null {\n switch (key) {\n case 'ArrowDown':\n return 'first';\n case 'ArrowUp':\n return 'last';\n case 'Enter':\n case ' ':\n return 'none';\n default:\n return null;\n }\n}\n\n@Directive({\n selector: '[tngMenuTriggerFor]',\n exportAs: 'tngMenuTriggerFor',\n})\nexport class TngMenuTriggerFor {\n readonly tngMenuTriggerFor = input.required<TngMenu>();\n\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n @HostBinding('attr.aria-haspopup')\n protected readonly ariaHasPopup = 'menu' as const;\n\n public constructor() {\n effect((onCleanup): void => {\n const menu = this.tngMenuTriggerFor();\n const trigger = this.hostRef.nativeElement;\n menu.setTriggerElement(trigger, () => this.syncAriaState());\n menu.setRestoreFocusOnOutsideClick(false);\n this.syncAriaState();\n\n onCleanup((): void => {\n menu.clearTriggerLink(trigger);\n trigger.removeAttribute('aria-controls');\n trigger.removeAttribute('aria-expanded');\n });\n });\n }\n\n @HostListener('click')\n protected onClick(): void {\n const menu = this.tngMenuTriggerFor();\n if (menu.isDisabled()) {\n return;\n }\n\n if (menu.isOpen()) {\n menu.close(true);\n return;\n }\n\n menu.open('none');\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: TngMenuTriggerKeyboardEvent): void {\n const menu = this.tngMenuTriggerFor();\n if (menu.isDisabled()) {\n return;\n }\n\n const focusAction = resolveFocusActionForOpenKey(event.key);\n if (focusAction !== null) {\n event.preventDefault();\n menu.open(focusAction);\n return;\n }\n\n if (event.key === 'Escape' && menu.isOpen()) {\n event.preventDefault();\n menu.close(true);\n }\n }\n\n private syncAriaState(): void {\n const trigger = this.hostRef.nativeElement;\n const menu = this.tngMenuTriggerFor();\n\n trigger.setAttribute('aria-controls', menu.id);\n trigger.setAttribute('aria-expanded', menu.isOpen() ? 'true' : 'false');\n }\n}\n"]}
@@ -1,3 +1,5 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@tailng-ui/primitives";
1
3
  export declare class TngMenuComponent {
2
4
  private readonly hostRef;
3
5
  private readonly primitive;
@@ -9,5 +11,8 @@ export declare class TngMenuComponent {
9
11
  ngDoCheck(): void;
10
12
  private queueFocusSync;
11
13
  private getDeepestOpenSubmenu;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngMenuComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<TngMenuComponent, "tng-menu", ["tngMenuComponent"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.TngMenu; inputs: { "loop": "loop"; "disabled": "disabled"; "closeOnSelect": "closeOnSelect"; "dismissOnOutsideClick": "dismissOnOutsideClick"; "dismissOnFocusout": "dismissOnFocusout"; }; outputs: { "tngMenuOpened": "tngMenuOpened"; "tngMenuClosed": "tngMenuClosed"; "tngMenuSelect": "tngMenuSelect"; }; }]>;
12
16
  }
17
+ export { TngMenuComponent as TngMenu };
13
18
  //# sourceMappingURL=tng-menu.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-menu.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu.component.ts"],"names":[],"mappings":"AAKA,qBAaa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IACxE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAK;IAE9B,QAAQ,CAAC,SAAS,8CAAyB;IAG3C,SAAS,KAAK,aAAa,IAAI,MAAM,CAEpC;IAED,SAAS,IAAI,IAAI;IA+BjB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,qBAAqB;CAW9B"}
1
+ {"version":3,"file":"tng-menu.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu.component.ts"],"names":[],"mappings":";;AAKA,qBAaa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IACxE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAK;IAE9B,QAAQ,CAAC,SAAS,8CAAyB;IAG3C,SAAS,KAAK,aAAa,IAAI,MAAM,CAEpC;IAED,SAAS,IAAI,IAAI;IA+BjB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,qBAAqB;yCA/ElB,gBAAgB;2CAAhB,gBAAgB;CA0F5B;AACD,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
@@ -1,14 +1,15 @@
1
- import { __decorate } from "tslib";
2
1
  import { Component, ElementRef, HostBinding, inject, input } from '@angular/core';
3
2
  import { TngMenu as TngMenuPrimitive } from '@tailng-ui/primitives';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@tailng-ui/primitives";
4
5
  const MAX_FOCUS_SYNC_ATTEMPTS = 4;
5
- let TngMenuComponent = class TngMenuComponent {
6
+ export class TngMenuComponent {
6
7
  hostRef = inject(ElementRef);
7
8
  primitive = inject(TngMenuPrimitive);
8
9
  lastOpenState = false;
9
10
  focusSyncQueued = false;
10
11
  focusSyncAttempts = 0;
11
- ariaLabel = input('Menu');
12
+ ariaLabel = input('Menu', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
12
13
  get hostAriaLabel() {
13
14
  return this.ariaLabel();
14
15
  }
@@ -68,24 +69,21 @@ let TngMenuComponent = class TngMenuComponent {
68
69
  }
69
70
  return openNestedMenus[openNestedMenus.length - 1] ?? null;
70
71
  }
71
- };
72
- __decorate([
73
- HostBinding('attr.aria-label')
74
- ], TngMenuComponent.prototype, "hostAriaLabel", null);
75
- TngMenuComponent = __decorate([
76
- Component({
77
- selector: 'tng-menu',
78
- hostDirectives: [
79
- {
80
- directive: TngMenuPrimitive,
81
- inputs: ['loop', 'disabled', 'closeOnSelect', 'dismissOnOutsideClick', 'dismissOnFocusout'],
82
- outputs: ['tngMenuOpened', 'tngMenuClosed', 'tngMenuSelect'],
83
- },
84
- ],
85
- templateUrl: './tng-menu.component.html',
86
- styleUrl: './tng-menu.component.css',
87
- exportAs: 'tngMenuComponent',
88
- })
89
- ], TngMenuComponent);
90
- export { TngMenuComponent };
72
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
73
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.1", type: TngMenuComponent, isStandalone: true, selector: "tng-menu", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-label": "this.hostAriaLabel" } }, exportAs: ["tngMenuComponent"], hostDirectives: [{ directive: i1.TngMenu, inputs: ["loop", "loop", "disabled", "disabled", "closeOnSelect", "closeOnSelect", "dismissOnOutsideClick", "dismissOnOutsideClick", "dismissOnFocusout", "dismissOnFocusout"], outputs: ["tngMenuOpened", "tngMenuOpened", "tngMenuClosed", "tngMenuClosed", "tngMenuSelect", "tngMenuSelect"] }], ngImport: i0, template: "<ng-content />\n", styles: [":host {}\n"] });
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMenuComponent, decorators: [{
76
+ type: Component,
77
+ args: [{ selector: 'tng-menu', hostDirectives: [
78
+ {
79
+ directive: TngMenuPrimitive,
80
+ inputs: ['loop', 'disabled', 'closeOnSelect', 'dismissOnOutsideClick', 'dismissOnFocusout'],
81
+ outputs: ['tngMenuOpened', 'tngMenuClosed', 'tngMenuSelect'],
82
+ },
83
+ ], exportAs: 'tngMenuComponent', template: "<ng-content />\n", styles: [":host {}\n"] }]
84
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], hostAriaLabel: [{
85
+ type: HostBinding,
86
+ args: ['attr.aria-label']
87
+ }] } });
88
+ export { TngMenuComponent as TngMenu };
91
89
  //# sourceMappingURL=tng-menu.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-menu.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ElementRef, HostBinding, inject, input } from '@angular/core';\nimport { TngMenu as TngMenuPrimitive } from '@tailng-ui/primitives';\n\nconst MAX_FOCUS_SYNC_ATTEMPTS = 4;\n\n@Component({\n selector: 'tng-menu',\n hostDirectives: [\n {\n directive: TngMenuPrimitive,\n inputs: ['loop', 'disabled', 'closeOnSelect', 'dismissOnOutsideClick', 'dismissOnFocusout'],\n outputs: ['tngMenuOpened', 'tngMenuClosed', 'tngMenuSelect'],\n },\n ],\n templateUrl: './tng-menu.component.html',\n styleUrl: './tng-menu.component.css',\n exportAs: 'tngMenuComponent',\n})\nexport class TngMenuComponent {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly primitive = inject<TngMenuPrimitive>(TngMenuPrimitive);\n private lastOpenState = false;\n private focusSyncQueued = false;\n private focusSyncAttempts = 0;\n\n readonly ariaLabel = input<string>('Menu');\n\n @HostBinding('attr.aria-label')\n protected get hostAriaLabel(): string {\n return this.ariaLabel();\n }\n\n ngDoCheck(): void {\n const isOpen = this.primitive.isOpen();\n if (!isOpen) {\n this.lastOpenState = false;\n this.focusSyncAttempts = 0;\n this.focusSyncQueued = false;\n return;\n }\n\n const host = this.hostRef.nativeElement;\n const activeElement = document.activeElement;\n const deepestOpenSubmenu = this.getDeepestOpenSubmenu(host);\n const hasFocusInDeepestOpenSubmenu =\n deepestOpenSubmenu !== null &&\n activeElement instanceof Node &&\n deepestOpenSubmenu.contains(activeElement);\n const hasFocusInsideHost = activeElement instanceof Node && host.contains(activeElement);\n\n const shouldSyncFocusToHostOrDeepestSubmenu =\n deepestOpenSubmenu !== null ? !hasFocusInDeepestOpenSubmenu : !hasFocusInsideHost;\n\n if (\n (!this.lastOpenState || shouldSyncFocusToHostOrDeepestSubmenu) &&\n this.focusSyncAttempts < MAX_FOCUS_SYNC_ATTEMPTS\n ) {\n this.queueFocusSync();\n }\n\n this.lastOpenState = true;\n }\n\n private queueFocusSync(): void {\n if (this.focusSyncQueued) {\n return;\n }\n\n this.focusSyncQueued = true;\n queueMicrotask((): void => {\n this.focusSyncQueued = false;\n\n if (!this.primitive.isOpen()) {\n return;\n }\n\n const host = this.hostRef.nativeElement;\n const activeElement = document.activeElement;\n const deepestOpenSubmenu = this.getDeepestOpenSubmenu(host);\n\n if (deepestOpenSubmenu !== null) {\n if (!(activeElement instanceof Node) || !deepestOpenSubmenu.contains(activeElement)) {\n this.focusSyncAttempts += 1;\n deepestOpenSubmenu.focus();\n }\n return;\n }\n\n if (activeElement instanceof Node && host.contains(activeElement)) {\n return;\n }\n\n this.focusSyncAttempts += 1;\n host.focus();\n });\n }\n\n private getDeepestOpenSubmenu(host: HTMLElement): HTMLElement | null {\n const openNestedMenus = Array.from(\n host.querySelectorAll<HTMLElement>('[data-slot=\"menu\"][data-state=\"open\"]'),\n ).filter((menuElement) => menuElement !== host);\n\n if (openNestedMenus.length === 0) {\n return null;\n }\n\n return openNestedMenus[openNestedMenus.length - 1] ?? null;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-menu.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu.component.ts","../../../../../../../../libs/tailng-ui/components/src/lib/navigation/menu/tng-menu.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;;;AAEpE,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAelC,MAAM,OAAO,gBAAgB;IACV,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;IACtD,SAAS,GAAG,MAAM,CAAmB,gBAAgB,CAAC,CAAC;IAChE,aAAa,GAAG,KAAK,CAAC;IACtB,eAAe,GAAG,KAAK,CAAC;IACxB,iBAAiB,GAAG,CAAC,CAAC;IAErB,SAAS,GAAG,KAAK,CAAS,MAAM,qDAAC,CAAC;IAE3C,IACc,aAAa;QACzB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,4BAA4B,GAChC,kBAAkB,KAAK,IAAI;YAC3B,aAAa,YAAY,IAAI;YAC7B,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,kBAAkB,GAAG,aAAa,YAAY,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEzF,MAAM,qCAAqC,GACzC,kBAAkB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAEpF,IACE,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,qCAAqC,CAAC;YAC9D,IAAI,CAAC,iBAAiB,GAAG,uBAAuB,EAChD,CAAC;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,cAAc,CAAC,GAAS,EAAE;YACxB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAE7B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7B,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;YAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAE5D,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,aAAa,YAAY,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBACpF,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;oBAC5B,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC7B,CAAC;gBACD,OAAO;YACT,CAAC;YAED,IAAI,aAAa,YAAY,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClE,OAAO;YACT,CAAC;YAED,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,IAAiB;QAC7C,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAChC,IAAI,CAAC,gBAAgB,CAAc,uCAAuC,CAAC,CAC5E,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;QAEhD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;uGAzFU,gBAAgB;2FAAhB,gBAAgB,qoBClB7B,kBACA;;2FDiBa,gBAAgB;kBAb5B,SAAS;+BACE,UAAU,kBACJ;wBACd;4BACE,SAAS,EAAE,gBAAgB;4BAC3B,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,EAAE,mBAAmB,CAAC;4BAC3F,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC;yBAC7D;qBACF,YAGS,kBAAkB;;sBAW3B,WAAW;uBAAC,iBAAiB;;AAkFhC,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC","sourcesContent":["import { Component, ElementRef, HostBinding, inject, input } from '@angular/core';\nimport { TngMenu as TngMenuPrimitive } from '@tailng-ui/primitives';\n\nconst MAX_FOCUS_SYNC_ATTEMPTS = 4;\n\n@Component({\n selector: 'tng-menu',\n hostDirectives: [\n {\n directive: TngMenuPrimitive,\n inputs: ['loop', 'disabled', 'closeOnSelect', 'dismissOnOutsideClick', 'dismissOnFocusout'],\n outputs: ['tngMenuOpened', 'tngMenuClosed', 'tngMenuSelect'],\n },\n ],\n templateUrl: './tng-menu.component.html',\n styleUrl: './tng-menu.component.css',\n exportAs: 'tngMenuComponent',\n})\nexport class TngMenuComponent {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly primitive = inject<TngMenuPrimitive>(TngMenuPrimitive);\n private lastOpenState = false;\n private focusSyncQueued = false;\n private focusSyncAttempts = 0;\n\n readonly ariaLabel = input<string>('Menu');\n\n @HostBinding('attr.aria-label')\n protected get hostAriaLabel(): string {\n return this.ariaLabel();\n }\n\n ngDoCheck(): void {\n const isOpen = this.primitive.isOpen();\n if (!isOpen) {\n this.lastOpenState = false;\n this.focusSyncAttempts = 0;\n this.focusSyncQueued = false;\n return;\n }\n\n const host = this.hostRef.nativeElement;\n const activeElement = document.activeElement;\n const deepestOpenSubmenu = this.getDeepestOpenSubmenu(host);\n const hasFocusInDeepestOpenSubmenu =\n deepestOpenSubmenu !== null &&\n activeElement instanceof Node &&\n deepestOpenSubmenu.contains(activeElement);\n const hasFocusInsideHost = activeElement instanceof Node && host.contains(activeElement);\n\n const shouldSyncFocusToHostOrDeepestSubmenu =\n deepestOpenSubmenu !== null ? !hasFocusInDeepestOpenSubmenu : !hasFocusInsideHost;\n\n if (\n (!this.lastOpenState || shouldSyncFocusToHostOrDeepestSubmenu) &&\n this.focusSyncAttempts < MAX_FOCUS_SYNC_ATTEMPTS\n ) {\n this.queueFocusSync();\n }\n\n this.lastOpenState = true;\n }\n\n private queueFocusSync(): void {\n if (this.focusSyncQueued) {\n return;\n }\n\n this.focusSyncQueued = true;\n queueMicrotask((): void => {\n this.focusSyncQueued = false;\n\n if (!this.primitive.isOpen()) {\n return;\n }\n\n const host = this.hostRef.nativeElement;\n const activeElement = document.activeElement;\n const deepestOpenSubmenu = this.getDeepestOpenSubmenu(host);\n\n if (deepestOpenSubmenu !== null) {\n if (!(activeElement instanceof Node) || !deepestOpenSubmenu.contains(activeElement)) {\n this.focusSyncAttempts += 1;\n deepestOpenSubmenu.focus();\n }\n return;\n }\n\n if (activeElement instanceof Node && host.contains(activeElement)) {\n return;\n }\n\n this.focusSyncAttempts += 1;\n host.focus();\n });\n }\n\n private getDeepestOpenSubmenu(host: HTMLElement): HTMLElement | null {\n const openNestedMenus = Array.from(\n host.querySelectorAll<HTMLElement>('[data-slot=\"menu\"][data-state=\"open\"]'),\n ).filter((menuElement) => menuElement !== host);\n\n if (openNestedMenus.length === 0) {\n return null;\n }\n\n return openNestedMenus[openNestedMenus.length - 1] ?? null;\n }\n}\nexport { TngMenuComponent as TngMenu };\n","<ng-content />\n"]}