@radix-ng/primitives 0.42.0 → 0.44.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 (453) hide show
  1. package/accordion/index.d.ts +160 -15
  2. package/alert-dialog/index.d.ts +54 -14
  3. package/arrow/README.md +1 -0
  4. package/arrow/index.d.ts +11 -0
  5. package/aspect-ratio/index.d.ts +35 -1
  6. package/avatar/index.d.ts +81 -11
  7. package/calendar/index.d.ts +310 -29
  8. package/checkbox/index.d.ts +163 -15
  9. package/collapsible/index.d.ts +82 -11
  10. package/config/index.d.ts +35 -2
  11. package/context-menu/index.d.ts +126 -23
  12. package/core/index.d.ts +898 -27
  13. package/cropper/index.d.ts +134 -14
  14. package/date-field/index.d.ts +209 -10
  15. package/dialog/index.d.ts +202 -20
  16. package/dismissable-layer/README.md +1 -0
  17. package/dismissable-layer/index.d.ts +126 -0
  18. package/dropdown-menu/index.d.ts +168 -23
  19. package/editable/index.d.ts +70 -1
  20. package/fesm2022/radix-ng-primitives-accordion.mjs +36 -36
  21. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +28 -28
  23. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-arrow.mjs +38 -0
  25. package/fesm2022/radix-ng-primitives-arrow.mjs.map +1 -0
  26. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +5 -5
  27. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-avatar.mjs +20 -20
  29. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-calendar.mjs +110 -95
  31. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-checkbox.mjs +219 -209
  33. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-collapsible.mjs +27 -27
  35. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  36. package/fesm2022/radix-ng-primitives-config.mjs +5 -5
  37. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  38. package/fesm2022/radix-ng-primitives-context-menu.mjs +34 -34
  39. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-core.mjs +72 -24
  41. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  42. package/fesm2022/radix-ng-primitives-cropper.mjs +51 -51
  43. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  44. package/fesm2022/radix-ng-primitives-date-field.mjs +48 -48
  45. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-dialog.mjs +33 -33
  47. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +418 -0
  49. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -0
  50. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +37 -37
  51. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-editable.mjs +21 -21
  53. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-focus-guards.mjs +53 -0
  55. package/fesm2022/radix-ng-primitives-focus-guards.mjs.map +1 -0
  56. package/fesm2022/radix-ng-primitives-focus-scope.mjs +17 -9
  57. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-hover-card.mjs +74 -74
  59. package/fesm2022/radix-ng-primitives-hover-card.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-label.mjs +8 -8
  61. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-menu.mjs +65 -65
  63. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-menubar.mjs +31 -31
  65. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +91 -88
  67. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  68. package/fesm2022/radix-ng-primitives-number-field.mjs +56 -43
  69. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-pagination.mjs +45 -45
  71. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-popover.mjs +68 -68
  73. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-popper.mjs +418 -0
  75. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -0
  76. package/fesm2022/radix-ng-primitives-portal.mjs +51 -0
  77. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -0
  78. package/fesm2022/radix-ng-primitives-presence.mjs +4 -4
  79. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-progress.mjs +15 -15
  81. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  82. package/fesm2022/radix-ng-primitives-radio.mjs +30 -30
  83. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  84. package/fesm2022/radix-ng-primitives-roving-focus.mjs +179 -163
  85. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  86. package/fesm2022/radix-ng-primitives-select.mjs +37 -37
  87. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  88. package/fesm2022/radix-ng-primitives-separator.mjs +16 -14
  89. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  90. package/fesm2022/radix-ng-primitives-slider.mjs +75 -75
  91. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  92. package/fesm2022/radix-ng-primitives-stepper.mjs +45 -45
  93. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  94. package/fesm2022/radix-ng-primitives-switch.mjs +28 -28
  95. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  96. package/fesm2022/radix-ng-primitives-tabs.mjs +33 -33
  97. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  98. package/fesm2022/radix-ng-primitives-time-field.mjs +78 -66
  99. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  100. package/fesm2022/radix-ng-primitives-toggle-group.mjs +22 -22
  101. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  102. package/fesm2022/radix-ng-primitives-toggle.mjs +9 -9
  103. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  104. package/fesm2022/radix-ng-primitives-toolbar.mjs +28 -28
  105. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  106. package/fesm2022/radix-ng-primitives-tooltip.mjs +74 -74
  107. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  108. package/fesm2022/radix-ng-primitives-tooltip2.mjs +740 -0
  109. package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +1 -0
  110. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +93 -98
  111. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  112. package/fesm2022/radix-ng-primitives.mjs.map +1 -1
  113. package/focus-guards/README.md +1 -0
  114. package/focus-guards/index.d.ts +15 -0
  115. package/focus-scope/index.d.ts +65 -1
  116. package/hover-card/index.d.ts +471 -19
  117. package/index.d.ts +2 -1
  118. package/label/index.d.ts +27 -1
  119. package/menu/index.d.ts +136 -26
  120. package/menubar/index.d.ts +53 -21
  121. package/navigation-menu/index.d.ts +402 -25
  122. package/number-field/index.d.ts +202 -16
  123. package/package.json +26 -5
  124. package/pagination/index.d.ts +96 -20
  125. package/popover/index.d.ts +402 -19
  126. package/popper/README.md +3 -0
  127. package/popper/index.d.ts +206 -0
  128. package/portal/README.md +1 -0
  129. package/portal/index.d.ts +22 -0
  130. package/presence/index.d.ts +103 -5
  131. package/progress/index.d.ts +76 -8
  132. package/radio/index.d.ts +118 -4
  133. package/roving-focus/index.d.ts +174 -3
  134. package/select/index.d.ts +211 -23
  135. package/separator/index.d.ts +63 -1
  136. package/slider/index.d.ts +262 -17
  137. package/stepper/index.d.ts +122 -21
  138. package/switch/index.d.ts +102 -9
  139. package/tabs/index.d.ts +111 -13
  140. package/time-field/index.d.ts +211 -10
  141. package/toggle/index.d.ts +75 -3
  142. package/toggle-group/index.d.ts +194 -5
  143. package/toolbar/index.d.ts +52 -16
  144. package/tooltip/index.d.ts +432 -19
  145. package/tooltip2/README.md +3 -0
  146. package/tooltip2/index.d.ts +325 -0
  147. package/visually-hidden/index.d.ts +65 -3
  148. package/accordion/src/accordion-content-presence.directive.d.ts +0 -6
  149. package/accordion/src/accordion-content.directive.d.ts +0 -8
  150. package/accordion/src/accordion-header.directive.d.ts +0 -7
  151. package/accordion/src/accordion-item.directive.d.ts +0 -43
  152. package/accordion/src/accordion-root.directive.d.ts +0 -83
  153. package/accordion/src/accordion-trigger.directive.d.ts +0 -10
  154. package/alert-dialog/src/alert-dialog-cancel.directive.d.ts +0 -7
  155. package/alert-dialog/src/alert-dialog-content.directive.d.ts +0 -9
  156. package/alert-dialog/src/alert-dialog-root.directive.d.ts +0 -9
  157. package/alert-dialog/src/alert-dialog-title.directive.d.ts +0 -5
  158. package/alert-dialog/src/alert-dialog-trigger.directive.d.ts +0 -7
  159. package/alert-dialog/src/alert-dialog.service.d.ts +0 -14
  160. package/aspect-ratio/src/aspect-ratio.directive.d.ts +0 -32
  161. package/avatar/src/avatar-context.token.d.ts +0 -7
  162. package/avatar/src/avatar-fallback.directive.d.ts +0 -20
  163. package/avatar/src/avatar-image.directive.d.ts +0 -29
  164. package/avatar/src/avatar-root.directive.d.ts +0 -8
  165. package/avatar/src/avatar.config.d.ts +0 -13
  166. package/avatar/src/types.d.ts +0 -2
  167. package/calendar/src/calendar-cell-trigger.directive.d.ts +0 -54
  168. package/calendar/src/calendar-cell.directive.d.ts +0 -11
  169. package/calendar/src/calendar-grid-body.directive.d.ts +0 -5
  170. package/calendar/src/calendar-grid-head.directive.d.ts +0 -5
  171. package/calendar/src/calendar-grid-row.directive.d.ts +0 -5
  172. package/calendar/src/calendar-grid.directive.d.ts +0 -8
  173. package/calendar/src/calendar-head-cell.directive.d.ts +0 -5
  174. package/calendar/src/calendar-header.directive.d.ts +0 -5
  175. package/calendar/src/calendar-heading.directive.d.ts +0 -7
  176. package/calendar/src/calendar-next.directive.d.ts +0 -16
  177. package/calendar/src/calendar-prev.directive.d.ts +0 -16
  178. package/calendar/src/calendar-root.directive.d.ts +0 -148
  179. package/calendar/src/calendar.d.ts +0 -44
  180. package/calendar/src//321/201alendar-/321/201ontext.token.d.ts +0 -24
  181. package/checkbox/src/checkbox-button.directive.d.ts +0 -8
  182. package/checkbox/src/checkbox-indicator.directive.d.ts +0 -6
  183. package/checkbox/src/checkbox-input.directive.d.ts +0 -10
  184. package/checkbox/src/checkbox.directive.d.ts +0 -86
  185. package/checkbox/src/checkbox.token.d.ts +0 -4
  186. package/collapsible/src/collapsible-content-presence.directive.d.ts +0 -6
  187. package/collapsible/src/collapsible-content.directive.d.ts +0 -18
  188. package/collapsible/src/collapsible-root.directive.d.ts +0 -44
  189. package/collapsible/src/collapsible-trigger.directive.d.ts +0 -6
  190. package/config/src/config.d.ts +0 -21
  191. package/config/src/config.provider.d.ts +0 -10
  192. package/context-menu/src/context-menu-content.directive.d.ts +0 -15
  193. package/context-menu/src/context-menu-item-checkbox.directive.d.ts +0 -9
  194. package/context-menu/src/context-menu-item-indicator.directive.d.ts +0 -7
  195. package/context-menu/src/context-menu-item-radio-group.directive.d.ts +0 -12
  196. package/context-menu/src/context-menu-item-radio.directive.d.ts +0 -19
  197. package/context-menu/src/context-menu-item-selectable.d.ts +0 -12
  198. package/context-menu/src/context-menu-item.directive.d.ts +0 -17
  199. package/context-menu/src/context-menu-label.directive.d.ts +0 -5
  200. package/context-menu/src/context-menu-separator.directive.d.ts +0 -6
  201. package/context-menu/src/context-menu-trigger.directive.d.ts +0 -31
  202. package/core/src/accessor/control-value-accessor.d.ts +0 -67
  203. package/core/src/accessor/provide-value-accessor.d.ts +0 -12
  204. package/core/src/auto-focus.directive.d.ts +0 -14
  205. package/core/src/chunk.d.ts +0 -12
  206. package/core/src/clamp.d.ts +0 -38
  207. package/core/src/create-context.d.ts +0 -10
  208. package/core/src/date-time/calendar.d.ts +0 -33
  209. package/core/src/date-time/comparators.d.ts +0 -98
  210. package/core/src/date-time/formatter.d.ts +0 -30
  211. package/core/src/date-time/index.d.ts +0 -9
  212. package/core/src/date-time/parser.d.ts +0 -37
  213. package/core/src/date-time/parts.d.ts +0 -12
  214. package/core/src/date-time/placeholders.d.ts +0 -8
  215. package/core/src/date-time/segment.d.ts +0 -4
  216. package/core/src/date-time/types.d.ts +0 -58
  217. package/core/src/date-time/useDateField.d.ts +0 -142
  218. package/core/src/date-time/utils.d.ts +0 -7
  219. package/core/src/document.d.ts +0 -1
  220. package/core/src/focus-initial.directive.d.ts +0 -9
  221. package/core/src/getActiveElement.d.ts +0 -1
  222. package/core/src/id-generator.d.ts +0 -12
  223. package/core/src/inject-ng-control.d.ts +0 -8
  224. package/core/src/is-client.d.ts +0 -1
  225. package/core/src/is-equal.d.ts +0 -7
  226. package/core/src/is-inside-form.d.ts +0 -2
  227. package/core/src/is-nullish.d.ts +0 -1
  228. package/core/src/is-number.d.ts +0 -1
  229. package/core/src/isValueEqualOrExist.d.ts +0 -10
  230. package/core/src/kbd-constants.d.ts +0 -41
  231. package/core/src/positioning/constants.d.ts +0 -3
  232. package/core/src/positioning/types.d.ts +0 -42
  233. package/core/src/positioning/utils.d.ts +0 -12
  234. package/core/src/provide-token.d.ts +0 -22
  235. package/core/src/serialize.d.ts +0 -11
  236. package/core/src/types.d.ts +0 -25
  237. package/core/src/useArrowNavigation.d.ts +0 -65
  238. package/core/src/useResizeObserver.d.ts +0 -15
  239. package/core/src/watch.d.ts +0 -41
  240. package/core/src/window.d.ts +0 -3
  241. package/cropper/src/cropper-context.token.d.ts +0 -12
  242. package/cropper/src/cropper-crop-area.directive.d.ts +0 -6
  243. package/cropper/src/cropper-description.directive.d.ts +0 -6
  244. package/cropper/src/cropper-image.component.d.ts +0 -10
  245. package/cropper/src/cropper-root.directive.d.ts +0 -91
  246. package/date-field/src/date-field-context.token.d.ts +0 -19
  247. package/date-field/src/date-field-input.directive.d.ts +0 -53
  248. package/date-field/src/date-field-root.directive.d.ts +0 -131
  249. package/dialog/src/dialog-close.directive.d.ts +0 -7
  250. package/dialog/src/dialog-content.directive.d.ts +0 -21
  251. package/dialog/src/dialog-description.directive.d.ts +0 -5
  252. package/dialog/src/dialog-dismiss.directive.d.ts +0 -7
  253. package/dialog/src/dialog-ref.d.ts +0 -40
  254. package/dialog/src/dialog-title.directive.d.ts +0 -5
  255. package/dialog/src/dialog-trigger.directive.d.ts +0 -28
  256. package/dialog/src/dialog.config.d.ts +0 -41
  257. package/dialog/src/dialog.injectors.d.ts +0 -4
  258. package/dialog/src/dialog.providers.d.ts +0 -19
  259. package/dialog/src/dialog.service.d.ts +0 -26
  260. package/dismissible-layer/README.md +0 -1
  261. package/dismissible-layer/index.d.ts +0 -1
  262. package/dismissible-layer/src/utils.d.ts +0 -38
  263. package/dropdown-menu/src/dropdown-menu-content.directive.d.ts +0 -15
  264. package/dropdown-menu/src/dropdown-menu-item-checkbox.directive.d.ts +0 -9
  265. package/dropdown-menu/src/dropdown-menu-item-indicator.directive.d.ts +0 -7
  266. package/dropdown-menu/src/dropdown-menu-item-radio-group.directive.d.ts +0 -12
  267. package/dropdown-menu/src/dropdown-menu-item-radio.directive.d.ts +0 -19
  268. package/dropdown-menu/src/dropdown-menu-item-selectable.d.ts +0 -12
  269. package/dropdown-menu/src/dropdown-menu-item.directive.d.ts +0 -17
  270. package/dropdown-menu/src/dropdown-menu-label.directive.d.ts +0 -6
  271. package/dropdown-menu/src/dropdown-menu-separator.directive.d.ts +0 -6
  272. package/dropdown-menu/src/dropdown-menu-trigger.directive.d.ts +0 -73
  273. package/editable/src/editable-root.d.ts +0 -67
  274. package/fesm2022/radix-ng-primitives-dismissible-layer.mjs +0 -211
  275. package/fesm2022/radix-ng-primitives-dismissible-layer.mjs.map +0 -1
  276. package/focus-scope/src/focus-scope.d.ts +0 -53
  277. package/focus-scope/src/stack.d.ts +0 -13
  278. package/focus-scope/src/utils.d.ts +0 -46
  279. package/hover-card/src/hover-card-anchor.directive.d.ts +0 -28
  280. package/hover-card/src/hover-card-anchor.token.d.ts +0 -3
  281. package/hover-card/src/hover-card-arrow.directive.d.ts +0 -45
  282. package/hover-card/src/hover-card-arrow.token.d.ts +0 -3
  283. package/hover-card/src/hover-card-close.directive.d.ts +0 -18
  284. package/hover-card/src/hover-card-close.token.d.ts +0 -3
  285. package/hover-card/src/hover-card-content-attributes.component.d.ts +0 -25
  286. package/hover-card/src/hover-card-content-attributes.token.d.ts +0 -3
  287. package/hover-card/src/hover-card-content.directive.d.ts +0 -124
  288. package/hover-card/src/hover-card-root.directive.d.ts +0 -182
  289. package/hover-card/src/hover-card-root.inject.d.ts +0 -3
  290. package/hover-card/src/hover-card-trigger.directive.d.ts +0 -26
  291. package/hover-card/src/hover-card.types.d.ts +0 -18
  292. package/hover-card/src/utils/cdk-event.service.d.ts +0 -30
  293. package/hover-card/src/utils/constants.d.ts +0 -1
  294. package/hover-card/src/utils/types.d.ts +0 -7
  295. package/label/src/label.directive.d.ts +0 -24
  296. package/menu/src/menu-content.directive.d.ts +0 -6
  297. package/menu/src/menu-directive.d.ts +0 -6
  298. package/menu/src/menu-group.directive.d.ts +0 -6
  299. package/menu/src/menu-item-checkbox.directive.d.ts +0 -21
  300. package/menu/src/menu-item-indicator.directive.d.ts +0 -10
  301. package/menu/src/menu-item-radio.directive.d.ts +0 -20
  302. package/menu/src/menu-item.directive.d.ts +0 -18
  303. package/menu/src/menu-label.directive.d.ts +0 -5
  304. package/menu/src/menu-radio-group.directive.d.ts +0 -6
  305. package/menu/src/menu-separator.directive.d.ts +0 -5
  306. package/menu/src/menu-trigger.directive.d.ts +0 -35
  307. package/menu/src/utils.d.ts +0 -3
  308. package/menubar/src/menubar-content.directive.d.ts +0 -6
  309. package/menubar/src/menubar-item-checkbox.directive.d.ts +0 -6
  310. package/menubar/src/menubar-item-indicator.directive.d.ts +0 -6
  311. package/menubar/src/menubar-item-radio.directive.d.ts +0 -6
  312. package/menubar/src/menubar-item.directive.d.ts +0 -6
  313. package/menubar/src/menubar-radio-group.directive.d.ts +0 -6
  314. package/menubar/src/menubar-root.directive.d.ts +0 -6
  315. package/menubar/src/menubar-separator.directive.d.ts +0 -6
  316. package/menubar/src/menubar-trigger.directive.d.ts +0 -6
  317. package/navigation-menu/src/navigation-menu-a11y.component.d.ts +0 -15
  318. package/navigation-menu/src/navigation-menu-content.directive.d.ts +0 -31
  319. package/navigation-menu/src/navigation-menu-indicator.directive.d.ts +0 -29
  320. package/navigation-menu/src/navigation-menu-item.directive.d.ts +0 -44
  321. package/navigation-menu/src/navigation-menu-link.directive.d.ts +0 -17
  322. package/navigation-menu/src/navigation-menu-list.directive.d.ts +0 -38
  323. package/navigation-menu/src/navigation-menu-sub.directive.d.ts +0 -19
  324. package/navigation-menu/src/navigation-menu-trigger.directive.d.ts +0 -33
  325. package/navigation-menu/src/navigation-menu-viewport.directive.d.ts +0 -61
  326. package/navigation-menu/src/navigation-menu.directive.d.ts +0 -76
  327. package/navigation-menu/src/navigation-menu.token.d.ts +0 -36
  328. package/navigation-menu/src/navigation-menu.types.d.ts +0 -13
  329. package/navigation-menu/src/utils.d.ts +0 -44
  330. package/number-field/src/number-field-context.token.d.ts +0 -24
  331. package/number-field/src/number-field-decrement.directive.d.ts +0 -23
  332. package/number-field/src/number-field-increment.directive.d.ts +0 -23
  333. package/number-field/src/number-field-input.directive.d.ts +0 -22
  334. package/number-field/src/number-field-root.directive.d.ts +0 -86
  335. package/number-field/src/types.d.ts +0 -1
  336. package/number-field/src/utils.d.ts +0 -18
  337. package/pagination/src/pagination-context.token.d.ts +0 -11
  338. package/pagination/src/pagination-ellipsis.directive.d.ts +0 -5
  339. package/pagination/src/pagination-first.directive.d.ts +0 -8
  340. package/pagination/src/pagination-last.directive.d.ts +0 -8
  341. package/pagination/src/pagination-list-item.directive.d.ts +0 -10
  342. package/pagination/src/pagination-list.directive.d.ts +0 -12
  343. package/pagination/src/pagination-next.directive.d.ts +0 -8
  344. package/pagination/src/pagination-prev.directive.d.ts +0 -8
  345. package/pagination/src/pagination-root.directive.d.ts +0 -18
  346. package/pagination/src/utils.d.ts +0 -9
  347. package/popover/src/popover-anchor.directive.d.ts +0 -28
  348. package/popover/src/popover-anchor.token.d.ts +0 -3
  349. package/popover/src/popover-arrow.directive.d.ts +0 -40
  350. package/popover/src/popover-arrow.token.d.ts +0 -3
  351. package/popover/src/popover-close.directive.d.ts +0 -15
  352. package/popover/src/popover-close.token.d.ts +0 -3
  353. package/popover/src/popover-content-attributes.component.d.ts +0 -23
  354. package/popover/src/popover-content-attributes.token.d.ts +0 -3
  355. package/popover/src/popover-content.directive.d.ts +0 -104
  356. package/popover/src/popover-root.directive.d.ts +0 -155
  357. package/popover/src/popover-root.inject.d.ts +0 -3
  358. package/popover/src/popover-trigger.directive.d.ts +0 -18
  359. package/popover/src/popover.types.d.ts +0 -14
  360. package/popover/src/utils/cdk-event.service.d.ts +0 -30
  361. package/popover/src/utils/constants.d.ts +0 -1
  362. package/popover/src/utils/types.d.ts +0 -7
  363. package/presence/src/presence.d.ts +0 -42
  364. package/presence/src/presence.directive.d.ts +0 -27
  365. package/presence/src/transitions/transition.collapse.d.ts +0 -15
  366. package/presence/src/transitions/transition.toast.d.ts +0 -3
  367. package/presence/src/types.d.ts +0 -15
  368. package/presence/src/utils.d.ts +0 -42
  369. package/progress/src/progress-indicator.directive.d.ts +0 -15
  370. package/progress/src/progress-root.directive.d.ts +0 -54
  371. package/radio/src/radio-indicator.directive.d.ts +0 -9
  372. package/radio/src/radio-item-input.directive.d.ts +0 -12
  373. package/radio/src/radio-item.directive.d.ts +0 -30
  374. package/radio/src/radio-root.directive.d.ts +0 -57
  375. package/radio/src/radio-tokens.d.ts +0 -14
  376. package/roving-focus/src/roving-focus-group.directive.d.ts +0 -50
  377. package/roving-focus/src/roving-focus-item.directive.d.ts +0 -50
  378. package/roving-focus/src/utils.d.ts +0 -19
  379. package/select/src/select-content.directive.d.ts +0 -20
  380. package/select/src/select-group.directive.d.ts +0 -5
  381. package/select/src/select-icon.directive.d.ts +0 -5
  382. package/select/src/select-item-indicator.directive.d.ts +0 -7
  383. package/select/src/select-item.directive.d.ts +0 -53
  384. package/select/src/select-label.directive.d.ts +0 -5
  385. package/select/src/select-separator.directive.d.ts +0 -5
  386. package/select/src/select-trigger.directive.d.ts +0 -17
  387. package/select/src/select-value.directive.d.ts +0 -8
  388. package/select/src/select.component.d.ts +0 -98
  389. package/separator/src/separator.directive.d.ts +0 -60
  390. package/slider/src/slider-horizontal.component.d.ts +0 -28
  391. package/slider/src/slider-impl.directive.d.ts +0 -17
  392. package/slider/src/slider-orientation-context.service.d.ts +0 -14
  393. package/slider/src/slider-range.component.d.ts +0 -13
  394. package/slider/src/slider-root.component.d.ts +0 -123
  395. package/slider/src/slider-thumb-impl.directive.d.ts +0 -27
  396. package/slider/src/slider-thumb.component.d.ts +0 -6
  397. package/slider/src/slider-track.component.d.ts +0 -7
  398. package/slider/src/slider-vertical.component.d.ts +0 -28
  399. package/slider/src/utils.d.ts +0 -52
  400. package/stepper/src/stepper-description.directive.d.ts +0 -6
  401. package/stepper/src/stepper-indicator.directive.d.ts +0 -6
  402. package/stepper/src/stepper-item-context.token.d.ts +0 -13
  403. package/stepper/src/stepper-item.directive.d.ts +0 -21
  404. package/stepper/src/stepper-root-context.token.d.ts +0 -12
  405. package/stepper/src/stepper-root.directive.d.ts +0 -33
  406. package/stepper/src/stepper-separator.directive.d.ts +0 -10
  407. package/stepper/src/stepper-title.directive.d.ts +0 -6
  408. package/stepper/src/stepper-trigger.directive.d.ts +0 -14
  409. package/stepper/src/types.d.ts +0 -1
  410. package/switch/src/switch-input.directive.d.ts +0 -11
  411. package/switch/src/switch-root.directive.d.ts +0 -74
  412. package/switch/src/switch-thumb.directive.d.ts +0 -9
  413. package/tabs/src/tabs-content.directive.d.ts +0 -13
  414. package/tabs/src/tabs-list.directive.d.ts +0 -10
  415. package/tabs/src/tabs-root.directive.d.ts +0 -53
  416. package/tabs/src/tabs-trigger.directive.d.ts +0 -29
  417. package/tabs/src/utils.d.ts +0 -2
  418. package/time-field/src/time-field-context.token.d.ts +0 -20
  419. package/time-field/src/time-field-input.directive.d.ts +0 -53
  420. package/time-field/src/time-field-root.directive.d.ts +0 -130
  421. package/toggle/src/toggle-visually-hidden-input.directive.d.ts +0 -6
  422. package/toggle/src/toggle.directive.d.ts +0 -65
  423. package/toggle-group/src/toggle-group-item.directive.d.ts +0 -37
  424. package/toggle-group/src/toggle-group-item.token.d.ts +0 -4
  425. package/toggle-group/src/toggle-group-without-focus.directive.d.ts +0 -69
  426. package/toggle-group/src/toggle-group.directive.d.ts +0 -74
  427. package/toggle-group/src/toggle-group.token.d.ts +0 -10
  428. package/toolbar/src/toolbar-button.directive.d.ts +0 -11
  429. package/toolbar/src/toolbar-link.directive.d.ts +0 -7
  430. package/toolbar/src/toolbar-root.directive.d.ts +0 -8
  431. package/toolbar/src/toolbar-root.token.d.ts +0 -5
  432. package/toolbar/src/toolbar-separator.directive.d.ts +0 -6
  433. package/toolbar/src/toolbar-toggle-group.directive.d.ts +0 -6
  434. package/toolbar/src/toolbar-toggle-item.directive.d.ts +0 -6
  435. package/tooltip/src/tooltip-anchor.directive.d.ts +0 -28
  436. package/tooltip/src/tooltip-anchor.token.d.ts +0 -3
  437. package/tooltip/src/tooltip-arrow.directive.d.ts +0 -40
  438. package/tooltip/src/tooltip-arrow.token.d.ts +0 -3
  439. package/tooltip/src/tooltip-close.directive.d.ts +0 -18
  440. package/tooltip/src/tooltip-close.token.d.ts +0 -3
  441. package/tooltip/src/tooltip-content-attributes.component.d.ts +0 -25
  442. package/tooltip/src/tooltip-content-attributes.token.d.ts +0 -3
  443. package/tooltip/src/tooltip-content.directive.d.ts +0 -104
  444. package/tooltip/src/tooltip-root.directive.d.ts +0 -168
  445. package/tooltip/src/tooltip-root.inject.d.ts +0 -3
  446. package/tooltip/src/tooltip-trigger.directive.d.ts +0 -26
  447. package/tooltip/src/tooltip.types.d.ts +0 -18
  448. package/tooltip/src/utils/cdk-event.service.d.ts +0 -30
  449. package/tooltip/src/utils/constants.d.ts +0 -1
  450. package/tooltip/src/utils/types.d.ts +0 -7
  451. package/visually-hidden/src/visually-hidden-input-bubble.directive.d.ts +0 -23
  452. package/visually-hidden/src/visually-hidden-input.directive.d.ts +0 -19
  453. package/visually-hidden/src/visually-hidden.directive.d.ts +0 -17
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-navigation-menu.mjs","sources":["../../../packages/primitives/navigation-menu/src/navigation-menu-a11y.component.ts","../../../packages/primitives/navigation-menu/src/navigation-menu.token.ts","../../../packages/primitives/navigation-menu/src/navigation-menu.types.ts","../../../packages/primitives/navigation-menu/src/utils.ts","../../../packages/primitives/navigation-menu/src/navigation-menu-item.directive.ts","../../../packages/primitives/navigation-menu/src/navigation-menu-content.directive.ts","../../../packages/primitives/navigation-menu/src/navigation-menu-indicator.directive.ts","../../../packages/primitives/navigation-menu/src/navigation-menu-link.directive.ts","../../../packages/primitives/navigation-menu/src/navigation-menu-list.directive.ts","../../../packages/primitives/navigation-menu/src/navigation-menu.directive.ts","../../../packages/primitives/navigation-menu/src/navigation-menu-sub.directive.ts","../../../packages/primitives/navigation-menu/src/navigation-menu-trigger.directive.ts","../../../packages/primitives/navigation-menu/src/navigation-menu-viewport.directive.ts","../../../packages/primitives/navigation-menu/index.ts","../../../packages/primitives/navigation-menu/radix-ng-primitives-navigation-menu.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RdxVisuallyHiddenDirective } from '@radix-ng/primitives/visually-hidden';\n\n@Component({\n selector: 'rdx-navigation-menu-focus-proxy',\n template: `\n <span\n [attr.tabindex]=\"0\"\n [attr.aria-hidden]=\"true\"\n (focus)=\"onFocus($event)\"\n rdxVisuallyHidden\n feature=\"focusable\"\n ></span>\n `,\n imports: [RdxVisuallyHiddenDirective]\n})\nexport class RdxNavigationMenuFocusProxyComponent {\n @Input() triggerElement: HTMLElement | null = null;\n @Input() contentElement: HTMLElement | null = null;\n @Output() proxyFocus = new EventEmitter<'start' | 'end'>();\n\n onFocus(event: FocusEvent): void {\n const prevFocusedElement = event.relatedTarget as HTMLElement | null;\n const wasTriggerFocused = prevFocusedElement === this.triggerElement;\n const wasFocusFromContent = this.contentElement ? this.contentElement.contains(prevFocusedElement) : false;\n\n if (wasTriggerFocused || !wasFocusFromContent) {\n this.proxyFocus.emit(wasTriggerFocused ? 'start' : 'end');\n }\n }\n}\n\n@Component({\n selector: 'rdx-navigation-menu-aria-owns',\n template: `\n <span [attr.aria-owns]=\"contentId\" rdxVisuallyHidden feature=\"fully-hidden\"></span>\n `,\n imports: [RdxVisuallyHiddenDirective]\n})\nexport class RdxNavigationMenuAriaOwnsComponent {\n @Input() contentId: string = '';\n}\n","import { inject, InjectionToken, Provider, Type } from '@angular/core';\nimport { RdxNavigationMenuSubDirective } from './navigation-menu-sub.directive';\nimport { RdxNavigationMenuDirective } from './navigation-menu.directive';\n\nexport interface NavigationMenuContext {\n isRootMenu: boolean;\n value: () => string;\n previousValue: () => string;\n baseId: string;\n dir: 'ltr' | 'rtl';\n orientation: 'horizontal' | 'vertical';\n loop: boolean;\n rootNavigationMenu: () => HTMLElement | null;\n\n indicatorTrack?: () => HTMLElement | null;\n onIndicatorTrackChange?: (track: HTMLElement | null) => void;\n userDismissedByClick?: () => boolean;\n resetUserDismissed?: () => void;\n viewport?: () => HTMLElement | null;\n onViewportChange?: (viewport: HTMLElement | null) => void;\n viewportContent?: () => Map<string, any>;\n onViewportContentChange?: (contentValue: string, contentData: any) => void;\n onViewportContentRemove?: (contentValue: string) => void;\n onTriggerEnter?: (itemValue: string) => void;\n onTriggerLeave?: () => void;\n onContentEnter?: () => void;\n onContentLeave?: () => void;\n onItemSelect?: (itemValue: string) => void;\n onItemDismiss?: () => void;\n handleClose?: (force?: boolean) => void;\n setTriggerPointerState?: (isOver: boolean) => void;\n setContentPointerState?: (isOver: boolean) => void;\n isPointerInSystem?: () => boolean;\n}\n\nexport const RDX_NAVIGATION_MENU_TOKEN = new InjectionToken<NavigationMenuContext>('RdxNavigationMenuToken');\n\nexport function injectNavigationMenu(): NavigationMenuContext {\n return inject(RDX_NAVIGATION_MENU_TOKEN);\n}\n\nexport function isRootNavigationMenu(context: NavigationMenuContext): boolean {\n return context.isRootMenu;\n}\n\nexport function provideNavigationMenuContext(\n provider: Type<RdxNavigationMenuDirective | RdxNavigationMenuSubDirective>\n): Provider {\n return {\n provide: RDX_NAVIGATION_MENU_TOKEN,\n useExisting: provider\n };\n}\n","import { FocusableOption } from '@angular/cdk/a11y';\n\nexport enum RdxNavigationMenuAnimationStatus {\n OPEN_STARTED = 'open_started',\n OPEN_ENDED = 'open_ended',\n CLOSED_STARTED = 'closed_started',\n CLOSED_ENDED = 'closed_ended'\n}\n\n/**\n * A stub class solely used to query a single type of focusable element in the navigation menu.\n */\nexport abstract class RdxNavigationMenuFocusableOption implements FocusableOption {\n focus(): void {\n throw new Error('Method not implemented.');\n }\n}\n","export type NavigationMenuOrientation = 'horizontal' | 'vertical';\nexport type NavigationMenuDirection = 'ltr' | 'rtl';\nexport type MotionAttribute = 'to-start' | 'to-end' | 'from-start' | 'from-end';\n\nexport const ROOT_CONTENT_DISMISS = 'navigationMenu.rootContentDismiss';\n\n/**\n * Generate a unique ID\n */\nexport function generateId(): string {\n return Math.random().toString(36).substring(2, 11);\n}\n\n/**\n * Get the open state for data-state attribute\n */\nexport function getOpenStateLabel(open: boolean): 'open' | 'closed' {\n return open ? 'open' : 'closed';\n}\n\n/**\n * Create a trigger ID from base ID and value\n */\nexport function makeTriggerId(baseId: string, value: string): string {\n return `${baseId}-trigger-${value}`;\n}\n\n/**\n * Create a content ID from base ID and value\n */\nexport function makeContentId(baseId: string, value: string): string {\n return `${baseId}-content-${value}`;\n}\n\n/**\n * Get the motion attribute for animations\n */\nexport function getMotionAttribute(\n currentValue: string | null,\n previousValue: string | null,\n itemValue: string,\n itemValues: string[],\n dir: NavigationMenuDirection\n): MotionAttribute | null {\n // reverse values in RTL\n const values = dir === 'rtl' ? [...itemValues].reverse() : itemValues;\n\n const currentIndex = currentValue !== null ? values.indexOf(currentValue) : -1;\n const prevIndex = previousValue !== null ? values.indexOf(previousValue) : -1;\n\n const isSelected = itemValue === currentValue;\n const wasSelected = itemValue === previousValue && previousValue !== null;\n\n // Preserve motion attribute for items not directly involved in the transition\n // (This matches React's behaviour, using a ref/signal might be needed\n // in the component using this function to fully replicate React's prevMotionAttributeRef)\n // For now, returning null if not involved, as per the original code's intent here.\n if (!isSelected && !wasSelected) {\n return null;\n }\n\n // handle transitions between items\n if (currentIndex !== -1 && prevIndex !== -1) {\n // if moving to this item (isSelected)\n if (isSelected) {\n return currentIndex > prevIndex ? 'from-end' : 'from-start';\n }\n // if moving away from this item (wasSelected)\n if (wasSelected) {\n return currentIndex > prevIndex ? 'to-start' : 'to-end';\n }\n }\n\n // handle initial open (prevIndex is -1, currentIndex is valid)\n if (isSelected && prevIndex === -1) {\n return null;\n }\n\n // handle closing entirely (currentIndex is -1, prevIndex is valid)\n if (wasSelected && currentIndex === -1) {\n return null;\n }\n\n // fallback if none of the above conditions met (should ideally not happen with clear states)\n return null;\n}\n\n/**\n * Focus the first element in a list of candidates\n * @param candidates Array of elements that can receive focus\n * @param preventScroll Whether to prevent scrolling when focusing\n * @param activateKeyboardNav Whether to dispatch a dummy keydown event to activate keyboard navigation handlers\n * @returns Whether focus was successfully moved\n */\nexport function focusFirst(candidates: HTMLElement[], preventScroll = false, activateKeyboardNav = true): boolean {\n const prevFocusedElement = document.activeElement;\n\n // sort candidates by tabindex to ensure proper order\n const sortedCandidates = [...candidates].sort((a, b) => {\n const aIndex = a.tabIndex || 0;\n const bIndex = b.tabIndex || 0;\n return aIndex - bIndex;\n });\n\n const success = sortedCandidates.some((candidate) => {\n // if focus is already where we want it, do nothing\n if (candidate === prevFocusedElement) return true;\n\n try {\n candidate.focus({ preventScroll });\n return document.activeElement !== prevFocusedElement;\n } catch (e) {\n console.error('Error focusing element:', e);\n return false;\n }\n });\n\n // if focus was moved successfully and we want to activate keyboard navigation,\n // dispatch a dummy keypress to ensure keyboard handlers are activated\n if (success && activateKeyboardNav && document.activeElement !== prevFocusedElement) {\n try {\n // dispatch a no-op keydown event to activate any keyboard handlers\n document.activeElement?.dispatchEvent(\n new KeyboardEvent('keydown', {\n bubbles: true,\n cancelable: true,\n key: 'Tab',\n code: 'Tab'\n })\n );\n } catch (e) {\n console.error('Error dispatching keyboard event:', e);\n }\n }\n\n return success;\n}\n\n/**\n * Get all tabbable candidates in a container\n */\nexport function getTabbableCandidates(container: HTMLElement): HTMLElement[] {\n if (!container || !container.querySelectorAll) return [];\n\n const TABBABLE_SELECTOR =\n 'a[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), ' +\n 'select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]), ' +\n '[contenteditable=\"true\"]:not([tabindex=\"-1\"])';\n\n // use querySelector for better browser support\n const elements = Array.from(container.querySelectorAll(TABBABLE_SELECTOR)) as HTMLElement[];\n\n // filter out elements that are hidden, have display:none, etc.\n return elements.filter((element) => {\n if (element.tabIndex < 0) return false;\n if (element.hasAttribute('disabled')) return false;\n if (element.hasAttribute('aria-hidden') && element.getAttribute('aria-hidden') === 'true') return false;\n\n // Check if element or any parent is hidden\n let current: HTMLElement | null = element;\n while (current) {\n const style = window.getComputedStyle(current);\n if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {\n return false;\n }\n current = current.parentElement;\n }\n\n return true;\n });\n}\n\n/**\n * Remove elements from tab order and return a function to restore them\n */\nexport function removeFromTabOrder(candidates: HTMLElement[]): () => void {\n const originalValues = new Map<HTMLElement, string | null>();\n\n candidates.forEach((candidate) => {\n // Store original tabindex\n originalValues.set(candidate, candidate.getAttribute('tabindex'));\n\n // Set to -1 to remove from tab order\n candidate.setAttribute('tabindex', '-1');\n });\n\n // Return restore function\n return () => {\n candidates.forEach((candidate) => {\n const originalValue = originalValues.get(candidate);\n if (originalValue == null) {\n candidate.removeAttribute('tabindex');\n } else {\n candidate.setAttribute('tabindex', originalValue);\n }\n });\n };\n}\n\n/**\n * Wrap array around itself at given start index\n */\nexport function wrapArray<T>(array: T[], startIndex: number): T[] {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport { contentChild, Directive, ElementRef, inject, input, Signal, signal } from '@angular/core';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport { RdxNavigationMenuFocusableOption } from './navigation-menu.types';\nimport { focusFirst, getTabbableCandidates, removeFromTabOrder } from './utils';\n\n@Directive({\n selector: '[rdxNavigationMenuItem]',\n host: {\n '[attr.value]': 'value()'\n },\n exportAs: 'rdxNavigationMenuItem'\n})\nexport class RdxNavigationMenuItemDirective implements FocusableOption {\n readonly elementRef = inject(ElementRef);\n private readonly context = injectNavigationMenu();\n\n readonly value = input('');\n\n /**\n * @ignore\n */\n readonly triggerOrLink = contentChild(RdxNavigationMenuFocusableOption);\n\n readonly triggerRef = signal<HTMLElement | null>(null);\n readonly contentRef = signal<HTMLElement | null>(null);\n readonly focusProxyRef = signal<HTMLElement | null>(null);\n readonly wasEscapeCloseRef = signal(false);\n\n private readonly _restoreContentTabOrderRef = signal<(() => void) | null>(null);\n\n get restoreContentTabOrderRef(): Signal<(() => void) | null> {\n return this._restoreContentTabOrderRef;\n }\n\n /**\n * Handle keyboard entry into content from trigger\n */\n onEntryKeyDown() {\n // Check if we're using a viewport in a root menu\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n const viewport = this.context.viewport();\n if (viewport) {\n // find tabbable elements in the viewport\n const candidates = getTabbableCandidates(viewport);\n if (candidates.length) {\n this.ensureTabOrder();\n\n // focus the first element\n focusFirst(candidates);\n return;\n }\n }\n }\n\n // fallback to content if no viewport or no tabbable elements in viewport\n if (this.contentRef()) {\n // restore tab order if needed\n const restoreFn = this._restoreContentTabOrderRef();\n if (restoreFn) restoreFn();\n\n // find and focus first tabbable element\n const candidates = getTabbableCandidates(this.contentRef()!);\n if (candidates.length) {\n focusFirst(candidates);\n }\n }\n }\n\n focus(): void {\n this.triggerOrLink()?.focus();\n }\n\n /**\n * Ensure elements are in the tab order by restoring any previously removed tabindex values\n */\n private ensureTabOrder(): void {\n const restoreFn = this._restoreContentTabOrderRef();\n if (restoreFn) {\n restoreFn();\n this._restoreContentTabOrderRef.set(null);\n }\n }\n\n /**\n * Handle focus coming from the focus proxy element\n * @param side Which side the focus is coming from (start = from trigger, end = from after content)\n */\n onFocusProxyEnter(side: 'start' | 'end' = 'start') {\n // check for viewport first\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n const viewport = this.context.viewport();\n if (viewport) {\n const candidates = getTabbableCandidates(viewport);\n if (candidates.length) {\n this.ensureTabOrder();\n\n // focus first or last element depending on direction\n focusFirst(side === 'start' ? candidates : [...candidates].reverse());\n return;\n }\n }\n }\n\n // fallback to content\n if (this.contentRef()) {\n // restore tab order if needed\n const restoreFn = this._restoreContentTabOrderRef();\n if (restoreFn) restoreFn();\n\n // find and focus appropriate element based on direction\n const candidates = getTabbableCandidates(this.contentRef()!);\n if (candidates.length) {\n // Focus first or last element depending on which direction we're coming from\n focusFirst(side === 'start' ? candidates : [...candidates].reverse());\n }\n }\n }\n\n /**\n * Handle focus moving outside of the content\n * Remove elements from tab order when not focused\n */\n onContentFocusOutside() {\n // get all tabbable elements from both viewport and content\n let allCandidates: HTMLElement[] = [];\n\n // check viewport first\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n const viewport = this.context.viewport();\n if (viewport) {\n allCandidates = getTabbableCandidates(viewport);\n }\n }\n\n // ... also check direct content\n if (this.contentRef()) {\n const contentCandidates = getTabbableCandidates(this.contentRef()!);\n allCandidates = [...allCandidates, ...contentCandidates];\n }\n\n // remove from tab order and store restore function\n if (allCandidates.length) {\n this._restoreContentTabOrderRef.set(removeFromTabOrder(allCandidates));\n }\n }\n\n /**\n * Handle content being closed from root menu\n */\n onRootContentClose() {\n this.onContentFocusOutside();\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n input,\n NgZone,\n OnDestroy,\n OnInit,\n TemplateRef\n} from '@angular/core';\nimport { ESCAPE, injectDocument } from '@radix-ng/primitives/core';\nimport { RdxNavigationMenuItemDirective } from './navigation-menu-item.directive';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport { getMotionAttribute, makeContentId, makeTriggerId } from './utils';\n\n@Directive({\n selector: '[rdxNavigationMenuContent]'\n})\nexport class RdxNavigationMenuContentDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n private readonly template = inject(TemplateRef);\n private readonly document = injectDocument();\n private readonly item = inject(RdxNavigationMenuItemDirective);\n private readonly context = injectNavigationMenu();\n\n @Input({ transform: booleanAttribute })\n set rdxNavigationMenuContent(value: boolean) {\n // structural directive requires this input even if unused\n }\n\n /**\n * Used to keep the content rendered and available in the DOM, even when closed.\n * Useful for animations or SEO.\n * @default false\n */\n readonly forceMount = input(false, { transform: booleanAttribute });\n\n /** @ignore */\n readonly contentId = makeContentId(this.context.baseId, this.item.value());\n /** @ignore */\n readonly triggerId = makeTriggerId(this.context.baseId, this.item.value());\n\n private escapeHandler: ((e: KeyboardEvent) => void) | null = null;\n\n /** @ignore */\n ngOnInit() {\n this.item.contentRef.set(this.elementRef.nativeElement);\n\n // register template with viewport in root menu via context\n if (isRootNavigationMenu(this.context) && this.context.onViewportContentChange) {\n this.context.onViewportContentChange(this.item.value(), {\n ref: this.elementRef,\n templateRef: this.template,\n forceMount: this.forceMount(),\n value: this.item.value(),\n getMotionAttribute: this.getMotionAttribute.bind(this),\n additionalAttrs: {\n id: this.contentId,\n 'aria-labelledby': this.triggerId,\n role: 'menu'\n }\n });\n }\n\n // add Escape key handler\n this.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === ESCAPE && this.context.value() === this.item.value()) {\n // mark that this close was triggered by Escape\n this.item.wasEscapeCloseRef.set(true);\n\n // close the content\n if (this.context.onItemDismiss) {\n this.context.onItemDismiss();\n }\n\n // refocus the trigger\n setTimeout(() => {\n const trigger = this.item.triggerRef();\n if (trigger) trigger.focus();\n }, 0);\n\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n this.ngZone.runOutsideAngular(() => {\n if (this.escapeHandler) {\n this.document.addEventListener('keydown', this.escapeHandler);\n }\n });\n }\n\n /** @ignore */\n ngOnDestroy() {\n // unregister from viewport\n if (isRootNavigationMenu(this.context) && this.context.onViewportContentRemove) {\n this.context.onViewportContentRemove(this.item.value());\n }\n\n // remove escape key handler\n if (this.escapeHandler) {\n this.document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = null;\n }\n }\n\n /** @ignore - Compute motion attribute for animations */\n getMotionAttribute(): string | null {\n if (!isRootNavigationMenu(this.context)) return null;\n\n const itemValues = Array.from(this.context.viewportContent?.() ?? new Map()).map(([value]) => value);\n\n return getMotionAttribute(\n this.context.value(),\n this.context.previousValue(),\n this.item.value(),\n itemValues,\n this.context.dir\n );\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n Renderer2,\n runInInjectionContext,\n signal,\n untracked\n} from '@angular/core';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\n\n@Directive({\n selector: '[rdxNavigationMenuIndicator]',\n host: {\n '[attr.data-state]': 'isVisible() ? \"visible\" : \"hidden\"',\n '[attr.data-orientation]': 'context.orientation',\n '[style.display]': 'isVisible() ? null : \"none\"',\n 'aria-hidden': 'true'\n }\n})\nexport class RdxNavigationMenuIndicatorDirective implements OnDestroy {\n private readonly context = injectNavigationMenu();\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n /**\n * Used to keep the indicator rendered and available in the DOM, even when hidden.\n * Useful for animations.\n * @default false\n */\n readonly forceMount = input(false, { transform: booleanAttribute });\n\n /** @ignore */\n private readonly _position = signal<{ size: number; offset: number } | null>(null);\n /** @ignore */\n private readonly _activeTrigger = signal<HTMLElement | null>(null);\n /** @ignore */\n private readonly _resizeObserver = new ResizeObserver(() => this.updatePosition());\n\n readonly isVisible = computed(() => Boolean(this.context.value() || this.forceMount()));\n\n constructor() {\n // set up effect for tracking active trigger and position\n effect(() => {\n // this effect runs when the current value changes\n const value = this.context.value();\n\n untracked(() => {\n if (value && isRootNavigationMenu(this.context)) {\n this.findAndSetActiveTrigger();\n }\n });\n });\n\n // initialize observers for position tracking\n runInInjectionContext(this.context as any, () => {\n if (isRootNavigationMenu(this.context) && this.context.indicatorTrack) {\n const track = this.context.indicatorTrack();\n if (track) {\n // observe size changes on the track\n this._resizeObserver.observe(track);\n }\n\n // initial position update if menu is open\n if (this.context.value()) {\n setTimeout(() => this.findAndSetActiveTrigger(), 0);\n }\n }\n });\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._resizeObserver.disconnect();\n }\n\n /** @ignore */\n private findAndSetActiveTrigger(): void {\n if (!isRootNavigationMenu(this.context) || !this.context.indicatorTrack) return;\n\n const track = this.context.indicatorTrack();\n if (!track) return;\n\n // find all triggers within the track\n const triggers = Array.from(track.querySelectorAll('[rdxNavigationMenuTrigger]')) as HTMLElement[];\n\n // find the active trigger based on the current menu value\n const activeTrigger = triggers.find((trigger) => {\n const item = trigger.closest('[rdxNavigationMenuItem]');\n if (!item) return false;\n\n const value = item.getAttribute('value');\n return value === this.context.value();\n });\n\n if (activeTrigger && activeTrigger !== this._activeTrigger()) {\n this._activeTrigger.set(activeTrigger);\n this.updatePosition();\n }\n }\n\n /** @ignore */\n private updatePosition(): void {\n const trigger = this._activeTrigger();\n if (!trigger) return;\n\n const isHorizontal = this.context.orientation === 'horizontal';\n\n // calculate new position\n const newPosition = {\n size: isHorizontal ? trigger.offsetWidth : trigger.offsetHeight,\n offset: isHorizontal ? trigger.offsetLeft : trigger.offsetTop\n };\n\n // only update if position has changed\n if (JSON.stringify(newPosition) !== JSON.stringify(this._position())) {\n this._position.set(newPosition);\n\n // apply position styles\n const styles = isHorizontal\n ? {\n position: 'absolute',\n left: '0',\n width: `${newPosition.size}px`,\n transform: `translateX(${newPosition.offset}px)`\n }\n : {\n position: 'absolute',\n top: '0',\n height: `${newPosition.size}px`,\n transform: `translateY(${newPosition.offset}px)`\n };\n\n Object.entries(styles).forEach(([key, value]) => {\n this.renderer.setStyle(this.elementRef.nativeElement, key, value);\n });\n }\n }\n}\n","import { booleanAttribute, Directive, ElementRef, inject, input, OnInit } from '@angular/core';\nimport { ENTER, SPACE } from '@radix-ng/primitives/core';\nimport { RdxRovingFocusItemDirective } from '@radix-ng/primitives/roving-focus';\nimport { RdxNavigationMenuFocusableOption } from './navigation-menu.types';\nimport { generateId } from './utils';\n\nconst LINK_SELECT = 'navigationMenu.linkSelect';\nconst ROOT_CONTENT_DISMISS = 'navigationMenu.rootContentDismiss';\n\n@Directive({\n selector: '[rdxNavigationMenuLink]',\n hostDirectives: [{ directive: RdxRovingFocusItemDirective, inputs: ['focusable'] }],\n host: {\n '[attr.data-active]': 'active() ? \"\" : undefined',\n '[attr.aria-current]': 'active() ? \"page\" : undefined',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)'\n },\n providers: [{ provide: RdxNavigationMenuFocusableOption, useExisting: RdxNavigationMenuLinkDirective }]\n})\nexport class RdxNavigationMenuLinkDirective extends RdxNavigationMenuFocusableOption implements OnInit {\n private readonly rovingFocusItem = inject(RdxRovingFocusItemDirective, { self: true });\n private readonly uniqueId = generateId();\n readonly active = input(false, { transform: booleanAttribute });\n readonly onSelect = input<(event: Event) => void>();\n readonly elementRef = inject(ElementRef);\n\n ngOnInit(): void {\n this.rovingFocusItem.tabStopId = this.elementRef.nativeElement.id || `link-${this.uniqueId}`;\n }\n\n override focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n onClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n // dispatch link select event\n const linkSelectEvent = new CustomEvent(LINK_SELECT, {\n bubbles: true,\n cancelable: true\n });\n\n // add one-time listener for onSelect handler\n const onSelect = this.onSelect();\n if (onSelect) {\n target.addEventListener(LINK_SELECT, onSelect, { once: true });\n }\n\n // dispatch event\n target.dispatchEvent(linkSelectEvent);\n\n // if not prevented and not meta key, dismiss content\n if (!linkSelectEvent.defaultPrevented && !event.metaKey) {\n const dismissEvent = new CustomEvent(ROOT_CONTENT_DISMISS, {\n bubbles: true,\n cancelable: true\n });\n target.dispatchEvent(dismissEvent);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n // activate link on Enter or Space\n if (event.key === ENTER || event.key === SPACE) {\n // prevent default behavior like scrolling (Space) or form submission (Enter) BEFORE simulating the click.\n event.preventDefault();\n\n // simulate a click event on the link element itself\n const clickEvent = new MouseEvent('click', { bubbles: true, cancelable: true });\n this.elementRef.nativeElement.dispatchEvent(clickEvent);\n\n return;\n }\n }\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport {\n AfterContentInit,\n AfterViewInit,\n contentChildren,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n Renderer2\n} from '@angular/core';\nimport { TAB } from '@radix-ng/primitives/core';\nimport { RdxRovingFocusGroupDirective } from '@radix-ng/primitives/roving-focus'; // Import Roving Focus Group\nimport { RdxNavigationMenuItemDirective } from './navigation-menu-item.directive';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\n\n@Directive({\n selector: '[rdxNavigationMenuList]',\n hostDirectives: [RdxRovingFocusGroupDirective],\n host: {\n role: 'menubar',\n '(keydown)': 'onKeydown($event)'\n }\n})\nexport class RdxNavigationMenuListDirective implements AfterContentInit, AfterViewInit {\n private readonly context = injectNavigationMenu();\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly rovingFocusGroup = inject(RdxRovingFocusGroupDirective, { self: true });\n\n /**\n * @private\n * @ignore\n */\n readonly items = contentChildren(\n forwardRef(() => RdxNavigationMenuItemDirective),\n { descendants: true }\n );\n\n /**\n * @ignore\n */\n protected keyManager: FocusKeyManager<RdxNavigationMenuItemDirective>;\n\n /**\n * @ignore\n */\n ngAfterContentInit(): void {\n const items = this.items();\n this.keyManager = new FocusKeyManager(items);\n\n if (this.context.orientation === 'horizontal') {\n this.keyManager.withHorizontalOrientation(this.context.dir || 'ltr');\n } else {\n this.keyManager.withVerticalOrientation();\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit() {\n this.rovingFocusGroup.orientation = this.context.orientation;\n this.rovingFocusGroup.dir = this.context.dir;\n\n // looping typically only applies to the root menu bar\n if (isRootNavigationMenu(this.context)) {\n this.rovingFocusGroup.loop = this.context.loop ?? false;\n } else {\n this.rovingFocusGroup.loop = false;\n }\n\n if (isRootNavigationMenu(this.context) && this.context.onIndicatorTrackChange) {\n const listElement = this.elementRef.nativeElement;\n const parent = listElement.parentNode;\n\n // ensure parent exists and list hasn't already been wrapped\n if (parent && !listElement.parentElement?.hasAttribute('data-radix-navigation-menu-list-wrapper')) {\n // create a wrapper div with relative positioning\n const wrapper = this.renderer.createElement('div');\n this.renderer.setAttribute(wrapper, 'data-radix-navigation-menu-list-wrapper', ''); // Add marker\n this.renderer.setStyle(wrapper, 'position', 'relative');\n\n // insert the wrapper before the list element in the parent\n this.renderer.insertBefore(parent, wrapper, listElement);\n\n // move the list element inside the new wrapper\n this.renderer.appendChild(wrapper, listElement);\n\n // register the wrapper element as the track for the indicator positioning\n this.context.onIndicatorTrackChange(wrapper);\n } else if (listElement.parentElement?.hasAttribute('data-radix-navigation-menu-list-wrapper')) {\n // if wrapper somehow already exists, ensure context has the correct reference\n this.context.onIndicatorTrackChange(listElement.parentElement);\n }\n }\n }\n\n /**\n * @ignore\n */\n onKeydown(event: KeyboardEvent) {\n if (!this.keyManager.activeItem) {\n this.keyManager.setFirstItemActive();\n }\n\n if (event.key === TAB && event.shiftKey) {\n if (this.keyManager.activeItemIndex === 0) return;\n this.keyManager.setPreviousItemActive();\n event.preventDefault();\n } else if (event.key === TAB) {\n const items = this.items();\n if (this.keyManager.activeItemIndex === items.length - 1) {\n return;\n }\n this.keyManager.setNextItemActive();\n event.preventDefault();\n } else {\n this.keyManager.onKeydown(event);\n }\n }\n\n /**\n * @ignore\n */\n setActiveItem(item: RdxNavigationMenuItemDirective) {\n this.keyManager.setActiveItem(item);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n effect,\n ElementRef,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectDocument, injectWindow } from '@radix-ng/primitives/core';\nimport { debounce, map, Subject, tap, timer } from 'rxjs';\nimport { provideNavigationMenuContext } from './navigation-menu.token';\nimport { RdxNavigationMenuAnimationStatus } from './navigation-menu.types';\nimport { generateId } from './utils';\n\n// define action types for clearer intent\nexport enum RdxNavigationMenuAction {\n OPEN = 'open',\n CLOSE = 'close'\n}\n\n@Directive({\n selector: '[rdxNavigationMenu]',\n providers: [provideNavigationMenuContext(RdxNavigationMenuDirective)],\n host: {\n '[attr.data-orientation]': 'orientation',\n '[attr.dir]': 'dir',\n 'aria-label': 'Main',\n role: 'navigation'\n },\n exportAs: 'rdxNavigationMenu'\n})\nexport class RdxNavigationMenuDirective implements OnDestroy {\n private readonly elementRef = inject(ElementRef);\n private readonly document = injectDocument();\n private readonly window = injectWindow();\n\n // State\n readonly #value = signal<string>('');\n readonly #previousValue = signal<string>('');\n readonly baseId = `rdx-nav-menu-${generateId()}`;\n readonly #indicatorTrack = signal<HTMLElement | null>(null);\n readonly #viewport = signal<HTMLElement | null>(null);\n readonly #viewportContent = signal<Map<string, any>>(new Map());\n readonly #rootNavigationMenu = signal<HTMLElement | null>(this.elementRef.nativeElement);\n\n readonly #userDismissedByClick = signal(false);\n userDismissedByClick = () => this.#userDismissedByClick();\n resetUserDismissed = () => this.#userDismissedByClick.set(false);\n\n // delay timers\n private openTimerRef = 0;\n private closeTimerRef = 0;\n private skipDelayTimerRef = 0;\n private recentlyActivatedTimerRef = 0;\n private readonly recentlyActivatedItem = signal<string | null>(null);\n readonly #isOpenDelayed = signal(true);\n\n // pointer tracking\n readonly #isPointerOverContent = signal(false);\n readonly #isPointerOverTrigger = signal(false);\n private documentMouseLeaveHandler: ((e: Event) => void) | null = null;\n\n readonly actionSubject$ = new Subject<{ action: RdxNavigationMenuAction; itemValue?: string }>();\n\n @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\n @Input() dir: 'ltr' | 'rtl' = 'ltr';\n @Input({ transform: numberAttribute }) clickIgnoreDuration = 250;\n @Input({ transform: numberAttribute }) delayDuration = 200;\n @Input({ transform: numberAttribute }) skipDelayDuration = 300;\n @Input({ transform: booleanAttribute }) loop = false;\n @Input({ transform: booleanAttribute }) cssAnimation = false;\n @Input({ transform: booleanAttribute }) cssOpeningAnimation = false;\n @Input({ transform: booleanAttribute }) cssClosingAnimation = false;\n\n readonly isRootMenu = true;\n readonly cssAnimationStatus: WritableSignal<RdxNavigationMenuAnimationStatus | null> = signal(null);\n\n // exposed state as functions for the token\n value = () => this.#value();\n previousValue = () => this.#previousValue();\n rootNavigationMenu = () => this.#rootNavigationMenu();\n indicatorTrack = () => this.#indicatorTrack();\n viewport = () => this.#viewport();\n viewportContent = () => this.#viewportContent();\n\n // exposed pointer state\n setTriggerPointerState = (isOver: boolean) => this.#isPointerOverTrigger.set(isOver);\n setContentPointerState = (isOver: boolean) => this.#isPointerOverContent.set(isOver);\n isPointerInSystem = () => this.#isPointerOverContent() || this.#isPointerOverTrigger();\n\n // exposed animation state\n getCssAnimation = () => this.cssAnimation;\n getCssOpeningAnimation = () => this.cssOpeningAnimation;\n getCssClosingAnimation = () => this.cssClosingAnimation;\n\n constructor() {\n effect(() => {\n const value = this.#value();\n if (value) {\n this.window.clearTimeout(this.skipDelayTimerRef);\n if (this.skipDelayDuration > 0) {\n this.#isOpenDelayed.set(false);\n }\n } else {\n // menu is closed, start skip delay timer\n this.window.clearTimeout(this.skipDelayTimerRef);\n this.skipDelayTimerRef = this.window.setTimeout(() => {\n this.#isOpenDelayed.set(true);\n }, this.skipDelayDuration);\n }\n });\n\n this.actionSubject$\n .pipe(\n map((config) => {\n // different delays for open vs close (better ux)\n const duration = config.action === RdxNavigationMenuAction.OPEN ? this.delayDuration : 150;\n return { ...config, duration };\n }),\n debounce((config) => timer(config.duration)),\n tap((config) => {\n switch (config.action) {\n case RdxNavigationMenuAction.OPEN:\n if (config.itemValue) {\n this.setValue(config.itemValue);\n }\n break;\n case RdxNavigationMenuAction.CLOSE:\n // only close if not hovering over any part of the system\n if (!this.isPointerInSystem()) {\n this.setValue('');\n }\n break;\n }\n }),\n takeUntilDestroyed()\n )\n .subscribe();\n\n // set up document mouseleave handler to close menu when mouse leaves window\n this.documentMouseLeaveHandler = () => this.handleClose();\n this.document.addEventListener('mouseleave', this.documentMouseLeaveHandler);\n }\n\n ngOnDestroy() {\n this.window.clearTimeout(this.openTimerRef);\n this.window.clearTimeout(this.closeTimerRef);\n this.window.clearTimeout(this.skipDelayTimerRef);\n this.window.clearTimeout(this.recentlyActivatedTimerRef);\n\n // clean up document event listener\n if (this.documentMouseLeaveHandler) {\n document.removeEventListener('mouseleave', this.documentMouseLeaveHandler);\n }\n }\n\n onIndicatorTrackChange(track: HTMLElement | null) {\n this.#indicatorTrack.set(track);\n }\n\n onViewportChange(viewport: HTMLElement | null) {\n this.#viewport.set(viewport);\n }\n\n onTriggerEnter(itemValue: string) {\n // skip opening if user explicitly dismissed this menu\n if (this.#userDismissedByClick() && itemValue === this.#previousValue()) {\n return;\n }\n\n this.window.clearTimeout(this.openTimerRef);\n this.window.clearTimeout(this.closeTimerRef);\n\n if (this.#isOpenDelayed()) {\n this.handleDelayedOpen(itemValue);\n } else {\n this.handleOpen(itemValue);\n }\n }\n\n onTriggerLeave() {\n this.window.clearTimeout(this.openTimerRef);\n this.startCloseTimer();\n }\n\n onContentEnter() {\n this.window.clearTimeout(this.closeTimerRef);\n }\n\n onContentLeave() {\n this.startCloseTimer();\n }\n\n handleClose() {\n this.actionSubject$.next({ action: RdxNavigationMenuAction.CLOSE });\n }\n\n onItemSelect(itemValue: string) {\n const wasOpen = this.#value() === itemValue;\n\n // if this item just opened and the click would close it,\n // ignore the click during the brief protection window\n if (this.recentlyActivatedItem() === itemValue && wasOpen) {\n return;\n }\n\n const newValue = wasOpen ? '' : itemValue;\n\n // if user is closing an open menu, mark as user-dismissed\n if (wasOpen) {\n this.#userDismissedByClick.set(true);\n } else {\n this.#userDismissedByClick.set(false);\n }\n\n this.setValue(newValue);\n }\n\n onItemDismiss() {\n this.setValue('');\n }\n\n onViewportContentChange(contentValue: string, contentData: any) {\n const newMap = new Map(this.#viewportContent());\n newMap.set(contentValue, contentData);\n this.#viewportContent.set(newMap);\n }\n\n onViewportContentRemove(contentValue: string) {\n const newMap = new Map(this.#viewportContent());\n if (newMap.has(contentValue)) {\n newMap.delete(contentValue);\n this.#viewportContent.set(newMap);\n }\n }\n\n private setValue(value: string) {\n const previousValue = this.#value();\n\n if (value && value !== previousValue) {\n this.window.clearTimeout(this.recentlyActivatedTimerRef);\n\n this.recentlyActivatedItem.set(value);\n\n this.recentlyActivatedTimerRef = this.window.setTimeout(() => {\n this.recentlyActivatedItem.set(null);\n }, this.clickIgnoreDuration);\n }\n\n // store previous value before changing\n this.#previousValue.set(previousValue);\n this.#value.set(value);\n }\n\n private startCloseTimer() {\n this.window.clearTimeout(this.closeTimerRef);\n this.closeTimerRef = this.window.setTimeout(() => {\n // only close if not hovering over any part of the system\n if (!this.isPointerInSystem()) {\n this.setValue('');\n }\n }, 150);\n }\n\n private handleOpen(itemValue: string) {\n this.window.clearTimeout(this.closeTimerRef);\n this.setValue(itemValue);\n }\n\n private handleDelayedOpen(itemValue: string) {\n const isOpenItem = this.#value() === itemValue;\n if (isOpenItem) {\n // if the item is already open, clear close timer\n this.window.clearTimeout(this.closeTimerRef);\n } else {\n // otherwise, start the open timer\n this.openTimerRef = this.window.setTimeout(() => {\n this.window.clearTimeout(this.closeTimerRef);\n this.setValue(itemValue);\n }, this.delayDuration);\n }\n }\n}\n","import { Directive, inject, Input, input, output, signal } from '@angular/core';\nimport { RdxNavigationMenuDirective } from './navigation-menu.directive';\nimport { provideNavigationMenuContext } from './navigation-menu.token';\nimport { generateId } from './utils';\n\n@Directive({\n selector: '[rdxNavigationMenuSub]',\n providers: [provideNavigationMenuContext(RdxNavigationMenuSubDirective)],\n host: {\n '[attr.data-orientation]': 'orientation()'\n }\n})\nexport class RdxNavigationMenuSubDirective {\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n @Input() set defaultValue(val: string) {\n if (val) this.value.set(val);\n }\n\n readonly valueChange = output<string>();\n\n readonly value = signal<string>('');\n readonly previousValue = signal<string>('');\n readonly baseId = `rdx-nav-menu-sub-${generateId()}`;\n readonly isRootMenu = false;\n\n private readonly parent = inject(RdxNavigationMenuDirective, { optional: true });\n\n get dir(): 'ltr' | 'rtl' {\n if (!this.parent) {\n return 'ltr';\n }\n\n return this.parent.dir || 'ltr';\n }\n\n get rootNavigationMenu(): HTMLElement | null {\n return this.parent?.rootNavigationMenu() || null;\n }\n\n onTriggerEnter(itemValue: string) {\n this.setValue(itemValue);\n }\n\n onItemSelect(itemValue: string) {\n this.setValue(itemValue);\n }\n\n onItemDismiss() {\n this.setValue('');\n }\n\n private setValue(value: string) {\n this.previousValue.set(this.value());\n this.value.set(value);\n this.valueChange.emit(value);\n }\n}\n","import {\n booleanAttribute,\n ComponentRef,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n untracked,\n ViewContainerRef\n} from '@angular/core';\nimport { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ENTER, SPACE, TAB } from '@radix-ng/primitives/core';\nimport { RdxRovingFocusItemDirective } from '@radix-ng/primitives/roving-focus';\nimport {\n RdxNavigationMenuAriaOwnsComponent,\n RdxNavigationMenuFocusProxyComponent\n} from './navigation-menu-a11y.component';\nimport { RdxNavigationMenuItemDirective } from './navigation-menu-item.directive';\nimport { RdxNavigationMenuListDirective } from './navigation-menu-list.directive';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport { RdxNavigationMenuFocusableOption } from './navigation-menu.types';\nimport { getTabbableCandidates, makeContentId, makeTriggerId } from './utils';\n\n@Directive({\n selector: '[rdxNavigationMenuTrigger]',\n hostDirectives: [RdxRovingFocusItemDirective],\n host: {\n '[id]': 'triggerId',\n '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n '[attr.data-orientation]': 'context.orientation',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[disabled]': 'disabled() ? true : null',\n '[attr.aria-expanded]': 'open()',\n '[attr.aria-controls]': 'contentId',\n '[attr.aria-haspopup]': '\"menu\"',\n '(pointerenter)': 'onPointerEnter()',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerleave)': 'onPointerLeave($event)',\n '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)',\n type: 'button'\n },\n providers: [{ provide: RdxNavigationMenuFocusableOption, useExisting: RdxNavigationMenuTriggerDirective }]\n})\nexport class RdxNavigationMenuTriggerDirective extends RdxNavigationMenuFocusableOption implements OnInit, OnDestroy {\n private readonly context = injectNavigationMenu();\n private readonly item = inject(RdxNavigationMenuItemDirective);\n private readonly list = inject(RdxNavigationMenuListDirective);\n private readonly rovingFocusItem = inject(RdxRovingFocusItemDirective, { self: true });\n private readonly elementRef = inject(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly triggerId = makeTriggerId(this.context.baseId, this.item.value());\n readonly contentId = makeContentId(this.context.baseId, this.item.value());\n readonly open = computed(() => {\n return this.item.value() === this.context.value();\n });\n\n private focusProxyRef: ComponentRef<RdxNavigationMenuFocusProxyComponent> | null = null;\n private ariaOwnsRef: ComponentRef<RdxNavigationMenuAriaOwnsComponent> | null = null;\n\n private hasPointerMoveOpened = false;\n private wasClickClose = false;\n\n constructor() {\n super();\n\n effect(() => {\n this.rovingFocusItem.focusable = !this.disabled();\n });\n\n effect(() => {\n const isOpen = this.open();\n\n untracked(() => {\n // handle focus proxy and aria-owns when open state changes\n if (isOpen) {\n this.createAccessibilityComponents();\n } else {\n this.removeAccessibilityComponents();\n\n if (!this.item.wasEscapeCloseRef()) {\n this.item.onRootContentClose();\n }\n\n this.hasPointerMoveOpened = false;\n }\n });\n });\n }\n\n ngOnInit() {\n this.item.triggerRef.set(this.elementRef.nativeElement);\n\n // configure the static part of the roving focus item directive instance\n this.rovingFocusItem.tabStopId = this.item.value();\n }\n\n ngOnDestroy() {\n this.removeAccessibilityComponents();\n }\n\n override focus() {\n this.elementRef.nativeElement.focus();\n }\n\n private createAccessibilityComponents(): void {\n if (this.focusProxyRef || this.ariaOwnsRef) {\n return;\n }\n\n // create focus proxy component\n this.focusProxyRef = this.viewContainerRef.createComponent(RdxNavigationMenuFocusProxyComponent);\n this.focusProxyRef.instance.triggerElement = this.elementRef.nativeElement;\n this.focusProxyRef.instance.contentElement = this.item.contentRef();\n this.focusProxyRef.instance.proxyFocus.subscribe((direction: 'start' | 'end') => {\n this.item.onFocusProxyEnter(direction);\n });\n\n // store reference in item directive\n this.item.focusProxyRef.set(this.focusProxyRef.location.nativeElement);\n\n // only add aria-owns component if using viewport\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n this.ariaOwnsRef = this.viewContainerRef.createComponent(RdxNavigationMenuAriaOwnsComponent);\n this.ariaOwnsRef.instance.contentId = this.contentId;\n }\n }\n\n private removeAccessibilityComponents(): void {\n if (this.focusProxyRef) {\n this.focusProxyRef.destroy();\n this.focusProxyRef = null;\n this.item.focusProxyRef.set(null);\n }\n\n if (this.ariaOwnsRef) {\n this.ariaOwnsRef.destroy();\n this.ariaOwnsRef = null;\n }\n }\n\n onPointerEnter(): void {\n // ignore if disabled or not the root menu (hover logic primarily for root)\n if (this.disabled() || !isRootNavigationMenu(this.context)) return;\n\n this.wasClickClose = false; // Reset click close flag on enter\n this.item.wasEscapeCloseRef.set(false); // Reset escape flag\n this.context.setTriggerPointerState?.(true); // Update context state\n\n // if the menu isn't already open for this item, trigger the enter logic (handles delays)\n if (!this.open()) {\n this.context.onTriggerEnter?.(this.item.value());\n }\n }\n\n onPointerMove(event: PointerEvent): void {\n // ignore if not a mouse event, disabled, closed by click/escape, or already opened by this move\n if (\n event.pointerType !== 'mouse' ||\n this.disabled() ||\n this.wasClickClose ||\n this.item.wasEscapeCloseRef() ||\n this.hasPointerMoveOpened ||\n !isRootNavigationMenu(this.context)\n ) {\n return;\n }\n this.hasPointerMoveOpened = true;\n }\n\n onPointerLeave(event: PointerEvent): void {\n // ignore if not a mouse event or disabled\n if (event.pointerType !== 'mouse' || this.disabled() || !isRootNavigationMenu(this.context)) {\n return;\n }\n\n this.context.setTriggerPointerState?.(false); // Update context state\n this.context.onTriggerLeave?.(); // Trigger leave logic (handles delays)\n this.hasPointerMoveOpened = false; // Reset flag\n\n // reset user dismissal flag if pointer leaves the whole system (trigger + content)\n if (this.context.resetUserDismissed) {\n // relay slightly to allow pointer movement to content area without resetting dismissal state\n setTimeout(() => {\n if (!this.context.isPointerInSystem?.()) {\n this.context.resetUserDismissed?.();\n }\n }, 50); // small delay for tolerance\n }\n }\n\n onClick(): void {\n if (this.disabled()) return;\n\n // manually set the `KeyManager` active item to this trigger\n this.list.setActiveItem(this.item);\n\n if (this.context.onItemSelect) {\n this.context.onItemSelect(this.item.value());\n // track if this click action resulted in closing the menu\n this.wasClickClose = !this.open();\n // reset escape flag if menu was opened by click\n if (this.open()) {\n this.item.wasEscapeCloseRef.set(false);\n }\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n\n if (event.key === ENTER || event.key === SPACE) {\n event.preventDefault(); // prevent default button behavior\n this.onClick();\n\n // if menu was opened by this keypress, move focus into the content\n if (this.open()) {\n // defer focus slightly to ensure content is ready\n setTimeout(() => this.item.onEntryKeyDown(), 0);\n }\n return;\n }\n\n const isHorizontal = this.context.orientation === 'horizontal';\n const isRTL = this.context.dir === 'rtl';\n\n // handle `ArrowDown` specifically for viewport navigation\n if (event.key === ARROW_DOWN || event.key === TAB) {\n if (event.key === ARROW_DOWN) {\n event.preventDefault();\n }\n\n // if the menu is open, focus into the content\n if (this.open()) {\n if (event.key === TAB) {\n // needed to ensure that the `keyManager` on the list directive does not activate\n // any focus updates, shifting focus to the subsequent focusable list item\n event.stopImmediatePropagation();\n }\n\n // direct focus handling for viewport case\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n // get the viewport element\n const viewport = this.context.viewport();\n if (viewport) {\n // find all tabbable elements in the viewport\n const tabbables = getTabbableCandidates(viewport);\n if (tabbables.length > 0) {\n // focus the first tabbable element directly\n setTimeout(() => {\n tabbables[0].focus();\n }, 0);\n return;\n }\n }\n }\n\n // fallback to the standard entry key down approach\n setTimeout(() => this.item.onEntryKeyDown(), 0);\n return;\n }\n\n // if not open but in horizontal orientation, emulate right key navigation\n if (isHorizontal) {\n const nextEvent = new KeyboardEvent('keydown', {\n key: isRTL ? ARROW_LEFT : ARROW_RIGHT,\n bubbles: true\n });\n this.elementRef.nativeElement.dispatchEvent(nextEvent);\n return;\n }\n }\n\n // handle ArrowUp in horizontal orientation\n if (isHorizontal && event.key === ARROW_UP) {\n event.preventDefault();\n\n // emulate a left key press to move to the previous item\n const nextEvent = new KeyboardEvent('keydown', {\n key: isRTL ? ARROW_RIGHT : ARROW_LEFT,\n bubbles: true\n });\n this.elementRef.nativeElement.dispatchEvent(nextEvent);\n return;\n }\n\n // handle vertical navigation and entry into content\n const verticalEntryKey = isRTL ? ARROW_LEFT : ARROW_RIGHT;\n const entryKey = isHorizontal ? ARROW_DOWN : verticalEntryKey;\n\n if (this.item.contentRef() && event.key === entryKey && event.key !== ARROW_DOWN) {\n // Skip if it's ArrowDown as we already handled it above\n event.preventDefault();\n\n if (!this.open()) {\n // if closed, open the menu first\n this.context.onItemSelect?.(this.item.value());\n // defer focus movement into content until after state update and render\n setTimeout(() => this.item.onEntryKeyDown(), 0);\n } else {\n // if already open, just move focus into the content\n this.item.onEntryKeyDown();\n }\n return;\n }\n }\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n EmbeddedViewRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n signal,\n untracked,\n ViewContainerRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ARROW_DOWN, ARROW_UP, injectDocument, injectWindow } from '@radix-ng/primitives/core';\nimport { TransitionOptions, TransitionStartFn, usePresence } from '@radix-ng/primitives/presence';\nimport { Subscription } from 'rxjs';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport { getOpenStateLabel, getTabbableCandidates } from './utils';\n\ninterface ContentNode {\n embeddedView: EmbeddedViewRef<unknown>;\n element: HTMLElement;\n contentValue: string;\n state: 'open' | 'closed';\n transitionSubscription?: Subscription | null;\n}\n\n@Directive({\n selector: '[rdxNavigationMenuViewport]',\n host: {\n '[attr.data-state]': 'dataState()',\n '[attr.data-orientation]': 'context.orientation',\n '[style.--radix-navigation-menu-viewport-width.px]': 'viewportSize()?.width',\n '[style.--radix-navigation-menu-viewport-height.px]': 'viewportSize()?.height',\n '(keydown)': 'onKeydown($event)',\n '(pointerenter)': 'onPointerEnter()',\n '(pointerleave)': 'onPointerLeave()'\n }\n})\nexport class RdxNavigationMenuViewportDirective implements OnInit, OnDestroy {\n private readonly context = injectNavigationMenu();\n private readonly document = injectDocument();\n private readonly window = injectWindow();\n private readonly elementRef = inject(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly renderer = inject(Renderer2);\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * Used to keep the viewport rendered and available in the DOM, even when closed.\n * Useful for animations.\n * @default false\n */\n readonly forceMount = input(false, { transform: booleanAttribute });\n\n private readonly _contentNodes = signal(new Map<string, ContentNode>());\n private readonly _activeContentNode = signal<ContentNode | null>(null);\n private readonly _leavingContentNode = signal<ContentNode | null>(null);\n private readonly _viewportSize = signal<{ width: number; height: number } | null>(null);\n\n readonly activeContentValue = computed(() => {\n if (!isRootNavigationMenu(this.context)) return null;\n return this.context.value() || this.context.previousValue();\n });\n readonly isOpen = computed(() => {\n if (!isRootNavigationMenu(this.context)) return false;\n return Boolean(this.context.value() || this.forceMount());\n });\n readonly dataState = computed(() => getOpenStateLabel(this.isOpen()));\n readonly viewportSize = computed(() => this._viewportSize());\n\n private readonly _resizeObserver = new ResizeObserver(() => this.updateSize());\n\n constructor() {\n this.setupViewportEffect();\n }\n\n ngOnInit() {\n if (isRootNavigationMenu(this.context) && this.context.onViewportChange) {\n this.context.onViewportChange(this.elementRef.nativeElement);\n }\n }\n\n ngOnDestroy() {\n this._resizeObserver.disconnect();\n // clean up any remaining nodes/views/subscriptions\n this._contentNodes().forEach((node) => this.cleanupAfterLeave(node));\n if (isRootNavigationMenu(this.context) && this.context.onViewportChange) {\n this.context.onViewportChange(null);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.isOpen()) return;\n const tabbableElements = getTabbableCandidates(this.elementRef.nativeElement);\n if (!tabbableElements.length) return;\n const activeElement = this.document.activeElement as HTMLElement | null;\n const currentIndex = tabbableElements.findIndex((el) => el === activeElement);\n\n if (event.key === ARROW_DOWN) {\n event.preventDefault();\n const nextIndex = currentIndex >= 0 && currentIndex < tabbableElements.length - 1 ? currentIndex + 1 : 0;\n tabbableElements[nextIndex]?.focus();\n } else if (event.key === ARROW_UP) {\n event.preventDefault();\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : tabbableElements.length - 1;\n tabbableElements[prevIndex]?.focus();\n }\n }\n\n onPointerEnter(): void {\n if (isRootNavigationMenu(this.context) && this.context.onContentEnter) {\n this.context.onContentEnter();\n }\n if (isRootNavigationMenu(this.context) && this.context.setContentPointerState) {\n this.context.setContentPointerState(true);\n }\n }\n\n onPointerLeave(): void {\n if (isRootNavigationMenu(this.context) && this.context.onContentLeave) {\n this.context.onContentLeave();\n }\n if (isRootNavigationMenu(this.context) && this.context.setContentPointerState) {\n this.context.setContentPointerState(false);\n }\n }\n\n private setupViewportEffect(): void {\n effect(() => {\n const currentActiveValue = this.context.value();\n const previousActiveValue = this.context.previousValue();\n const forceMount = this.forceMount();\n\n untracked(() => {\n // ensure context is root before proceeding\n if (!isRootNavigationMenu(this.context) || !this.context.viewportContent) {\n return;\n }\n\n const allContentData = this.context.viewportContent();\n const currentNodesMap = this._contentNodes();\n let enteringNode: ContentNode | null = null;\n let leavingNode = this._leavingContentNode(); // get potentially already leaving node\n\n // 1. Identify Entering Node\n if (currentActiveValue && allContentData.has(currentActiveValue)) {\n enteringNode = this.getOrCreateContentNode(currentActiveValue);\n }\n\n // 2. Identify Leaving Node\n const nodeThatWasActive = previousActiveValue ? currentNodesMap.get(previousActiveValue) : null;\n // if there was a previously active node, it's different from the entering one,\n // and it's not already leaving, mark it for removal.\n if (nodeThatWasActive && nodeThatWasActive !== enteringNode && nodeThatWasActive !== leavingNode) {\n // if another node was already leaving, force complete its transition\n if (leavingNode) {\n this.forceCompleteLeaveTransition(leavingNode);\n }\n leavingNode = nodeThatWasActive;\n this._leavingContentNode.set(leavingNode);\n }\n\n // 3. Handle Entering Node\n if (enteringNode) {\n // cancel any pending leave transition for this node if it was leaving\n if (enteringNode === leavingNode) {\n this.cancelLeaveTransition(enteringNode);\n leavingNode = null;\n this._leavingContentNode.set(null);\n }\n // ensure it's in the DOM and set state to open\n this.addNodeToDOM(enteringNode);\n this.setNodeState(enteringNode, 'open'); // Triggers enter animation via data-state\n this._activeContentNode.set(enteringNode);\n this.updateSize(); // Update size based on the entering node\n } else {\n // no node entering, clear active node state\n this._activeContentNode.set(null);\n }\n\n // 4. Handle Leaving Node\n if (leavingNode) {\n if (forceMount) {\n // if forceMount, just mark as closed, don't trigger removal animation\n this.setNodeState(leavingNode, 'closed');\n this._leavingContentNode.set(null); // No longer considered \"leaving\"\n } else {\n // start the leave transition (usePresence handles DOM removal)\n this.startLeaveTransition(leavingNode);\n }\n }\n });\n });\n }\n\n // gets or creates the ContentNode (wrapper + view)\n private getOrCreateContentNode(contentValue: string): ContentNode | null {\n const existingNode = this._contentNodes().get(contentValue);\n if (existingNode && !existingNode.embeddedView.destroyed) {\n return existingNode;\n }\n\n // create if doesn't exist or view was destroyed\n if (!isRootNavigationMenu(this.context) || !this.context.viewportContent) return null;\n const allContentData = this.context.viewportContent();\n const contentData = allContentData.get(contentValue);\n const templateRef = contentData?.templateRef;\n\n if (!templateRef) {\n console.error(`No templateRef found for content value: ${contentValue}`);\n return null;\n }\n\n try {\n const embeddedView = this.viewContainerRef.createEmbeddedView(templateRef);\n const container = this.renderer.createElement('div');\n this.renderer.setAttribute(container, 'class', 'NavigationMenuContentWrapper');\n this.renderer.setAttribute(container, 'data-content-value', contentValue);\n embeddedView.rootNodes.forEach((node: Node) => this.renderer.appendChild(container, node));\n\n const newNode: ContentNode = {\n embeddedView,\n element: container,\n contentValue,\n state: 'closed'\n };\n\n const newMap = new Map(this._contentNodes());\n newMap.set(contentValue, newNode);\n this._contentNodes.set(newMap);\n return newNode;\n } catch (error) {\n console.error(`Error creating content node for ${contentValue}:`, error);\n return null;\n }\n }\n\n // adds node element to viewport DOM if not already present\n private addNodeToDOM(node: ContentNode): void {\n if (!this.elementRef.nativeElement.contains(node.element)) {\n this.renderer.appendChild(this.elementRef.nativeElement, node.element);\n // observe size only when added to DOM\n this._resizeObserver.observe(node.element);\n }\n }\n\n // removes node element from viewport DOM\n private removeNodeFromDOM(node: ContentNode): void {\n if (this.elementRef.nativeElement.contains(node.element)) {\n this._resizeObserver.unobserve(node.element); // stop observing before removal\n this.renderer.removeChild(this.elementRef.nativeElement, node.element);\n }\n }\n\n // updates the data-state and motion attributes\n private setNodeState(node: ContentNode, state: 'open' | 'closed'): void {\n if (node.state === state) return; // avoid redundant updates\n\n node.state = state;\n this.renderer.setAttribute(node.element, 'data-state', state);\n\n // apply motion attribute based on context\n if (isRootNavigationMenu(this.context) && this.context.viewportContent) {\n const contentData = this.context.viewportContent().get(node.contentValue);\n if (contentData?.getMotionAttribute) {\n // get motion based on current state transition\n const motionAttr = contentData.getMotionAttribute();\n if (motionAttr) {\n this.renderer.setAttribute(node.element, 'data-motion', motionAttr);\n } else {\n this.renderer.removeAttribute(node.element, 'data-motion');\n }\n } else {\n this.renderer.removeAttribute(node.element, 'data-motion');\n }\n }\n\n // apply A11y attributes (might only be needed on open?)\n if (state === 'open') {\n this.applyA11yAttributes(node);\n }\n }\n\n // apply A11y attributes to the first child element\n private applyA11yAttributes(node: ContentNode): void {\n if (!isRootNavigationMenu(this.context) || !this.context.viewportContent) return;\n const contentData = this.context.viewportContent().get(node.contentValue);\n if (contentData?.additionalAttrs && node.embeddedView.rootNodes.length > 0) {\n const firstRootNode = node.embeddedView.rootNodes[0] as Element;\n if (firstRootNode) {\n Object.entries(contentData.additionalAttrs).forEach(([attr, value]) => {\n this.renderer.setAttribute(firstRootNode, attr, value as string);\n });\n }\n }\n }\n\n private startLeaveTransition(node: ContentNode): void {\n // ensure node exists and isn't already leaving with an active subscription\n if (!node || node.transitionSubscription) {\n node.transitionSubscription?.unsubscribe();\n return;\n }\n\n const startFn: TransitionStartFn<null> = () => {\n this.setNodeState(node, 'closed');\n return () => this.cleanupAfterLeave(node);\n };\n\n const options: TransitionOptions<null> = {\n animation: true, // assuming CSS animations/transitions handle the exit\n state: 'continue' // start the leave process\n };\n\n node.transitionSubscription = usePresence(this.zone, node.element, startFn, options)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n complete: () => {\n this.cleanupAfterLeave(node);\n }\n });\n }\n\n /**\n * Cleanup function called after leave animation finishes\n * @param node The node that is leaving\n */\n private cleanupAfterLeave(node: ContentNode): void {\n // check if this node is still marked as the one leaving\n if (this._leavingContentNode() === node) {\n this.removeNodeFromDOM(node);\n if (!this.forceMount() && node.embeddedView && !node.embeddedView.destroyed) {\n node.embeddedView.destroy();\n // Remove from cache if destroyed\n const newMap = new Map(this._contentNodes());\n newMap.delete(node.contentValue);\n this._contentNodes.set(newMap);\n }\n\n node.transitionSubscription = null;\n this._leavingContentNode.set(null);\n\n if (!this._activeContentNode() && !this.forceMount()) {\n this._viewportSize.set(null);\n }\n } else {\n // if this node is NOT the one currently marked as leaving, it means\n // a new transition started before this one finished. Just clean up DOM/Sub.\n this.removeNodeFromDOM(node);\n node.transitionSubscription?.unsubscribe();\n node.transitionSubscription = null;\n }\n }\n\n /**\n * Cancels an ongoing leave transition (e.g., if user hovers back)\n * @param node The node that is leaving\n */\n private cancelLeaveTransition(node: ContentNode): void {\n node.transitionSubscription?.unsubscribe();\n node.transitionSubscription = null;\n }\n\n /**\n * Force completes a leave transition (e.g., if another leave starts)\n * @param node The node that is leaving\n */\n private forceCompleteLeaveTransition(node: ContentNode): void {\n if (node && node.transitionSubscription) {\n node.transitionSubscription.unsubscribe();\n\n // perform cleanup immediately\n this.cleanupAfterLeave(node);\n }\n }\n\n private updateSize() {\n const activeNode = this._activeContentNode()?.element; // measure the currently active node\n if (!activeNode || !activeNode.isConnected) return;\n\n const firstChild = activeNode.firstChild as HTMLElement;\n if (!firstChild) return;\n\n this.window.requestAnimationFrame(() => {\n // keep rAF here for measurement stability\n activeNode.getBoundingClientRect(); // force layout\n const width = Math.ceil(firstChild.offsetWidth);\n const height = Math.ceil(firstChild.offsetHeight);\n\n if (width !== 0 || height !== 0) {\n const currentSize = this._viewportSize();\n if (!currentSize || currentSize.width !== width || currentSize.height !== height) {\n this._viewportSize.set({ width, height });\n }\n } else if (this._viewportSize() !== null) {\n this._viewportSize.set(null);\n }\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n RdxNavigationMenuAriaOwnsComponent,\n RdxNavigationMenuFocusProxyComponent\n} from './src/navigation-menu-a11y.component';\nimport { RdxNavigationMenuContentDirective } from './src/navigation-menu-content.directive';\nimport { RdxNavigationMenuIndicatorDirective } from './src/navigation-menu-indicator.directive';\nimport { RdxNavigationMenuItemDirective } from './src/navigation-menu-item.directive';\nimport { RdxNavigationMenuLinkDirective } from './src/navigation-menu-link.directive';\nimport { RdxNavigationMenuListDirective } from './src/navigation-menu-list.directive';\nimport { RdxNavigationMenuSubDirective } from './src/navigation-menu-sub.directive';\nimport { RdxNavigationMenuTriggerDirective } from './src/navigation-menu-trigger.directive';\nimport { RdxNavigationMenuViewportDirective } from './src/navigation-menu-viewport.directive';\nimport { RdxNavigationMenuDirective } from './src/navigation-menu.directive';\n\nexport * from './src/navigation-menu-a11y.component';\nexport * from './src/navigation-menu-content.directive';\nexport * from './src/navigation-menu-indicator.directive';\nexport * from './src/navigation-menu-item.directive';\nexport * from './src/navigation-menu-link.directive';\nexport * from './src/navigation-menu-list.directive';\nexport * from './src/navigation-menu-sub.directive';\nexport * from './src/navigation-menu-trigger.directive';\nexport * from './src/navigation-menu-viewport.directive';\nexport * from './src/navigation-menu.directive';\nexport * from './src/navigation-menu.token';\nexport * from './src/navigation-menu.types';\n\nconst _imports = [\n RdxNavigationMenuDirective,\n RdxNavigationMenuSubDirective,\n RdxNavigationMenuListDirective,\n RdxNavigationMenuItemDirective,\n RdxNavigationMenuTriggerDirective,\n RdxNavigationMenuLinkDirective,\n RdxNavigationMenuIndicatorDirective,\n RdxNavigationMenuContentDirective,\n RdxNavigationMenuViewportDirective,\n RdxNavigationMenuFocusProxyComponent,\n RdxNavigationMenuAriaOwnsComponent\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxNavigationMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ROOT_CONTENT_DISMISS"],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-navigation-menu.mjs","sources":["../tmp-esm2022/navigation-menu/src/navigation-menu-a11y.component.js","../tmp-esm2022/navigation-menu/src/navigation-menu.token.js","../tmp-esm2022/navigation-menu/src/navigation-menu.types.js","../tmp-esm2022/navigation-menu/src/utils.js","../tmp-esm2022/navigation-menu/src/navigation-menu-item.directive.js","../tmp-esm2022/navigation-menu/src/navigation-menu-content.directive.js","../tmp-esm2022/navigation-menu/src/navigation-menu-indicator.directive.js","../tmp-esm2022/navigation-menu/src/navigation-menu-link.directive.js","../tmp-esm2022/navigation-menu/src/navigation-menu-list.directive.js","../tmp-esm2022/navigation-menu/src/navigation-menu.directive.js","../tmp-esm2022/navigation-menu/src/navigation-menu-sub.directive.js","../tmp-esm2022/navigation-menu/src/navigation-menu-trigger.directive.js","../tmp-esm2022/navigation-menu/src/navigation-menu-viewport.directive.js","../tmp-esm2022/navigation-menu/index.js","../tmp-esm2022/navigation-menu/radix-ng-primitives-navigation-menu.js"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { RdxVisuallyHiddenDirective } from '@radix-ng/primitives/visually-hidden';\nimport * as i0 from \"@angular/core\";\nexport class RdxNavigationMenuFocusProxyComponent {\n constructor() {\n this.triggerElement = null;\n this.contentElement = null;\n this.proxyFocus = new EventEmitter();\n }\n onFocus(event) {\n const prevFocusedElement = event.relatedTarget;\n const wasTriggerFocused = prevFocusedElement === this.triggerElement;\n const wasFocusFromContent = this.contentElement ? this.contentElement.contains(prevFocusedElement) : false;\n if (wasTriggerFocused || !wasFocusFromContent) {\n this.proxyFocus.emit(wasTriggerFocused ? 'start' : 'end');\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuFocusProxyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.3\", type: RdxNavigationMenuFocusProxyComponent, isStandalone: true, selector: \"rdx-navigation-menu-focus-proxy\", inputs: { triggerElement: \"triggerElement\", contentElement: \"contentElement\" }, outputs: { proxyFocus: \"proxyFocus\" }, ngImport: i0, template: `\n <span\n [attr.tabindex]=\"0\"\n [attr.aria-hidden]=\"true\"\n (focus)=\"onFocus($event)\"\n rdxVisuallyHidden\n feature=\"focusable\"\n ></span>\n `, isInline: true, dependencies: [{ kind: \"directive\", type: RdxVisuallyHiddenDirective, selector: \"[rdxVisuallyHidden]\", inputs: [\"feature\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuFocusProxyComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'rdx-navigation-menu-focus-proxy',\n template: `\n <span\n [attr.tabindex]=\"0\"\n [attr.aria-hidden]=\"true\"\n (focus)=\"onFocus($event)\"\n rdxVisuallyHidden\n feature=\"focusable\"\n ></span>\n `,\n imports: [RdxVisuallyHiddenDirective]\n }]\n }], propDecorators: { triggerElement: [{\n type: Input\n }], contentElement: [{\n type: Input\n }], proxyFocus: [{\n type: Output\n }] } });\nexport class RdxNavigationMenuAriaOwnsComponent {\n constructor() {\n this.contentId = '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuAriaOwnsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.3\", type: RdxNavigationMenuAriaOwnsComponent, isStandalone: true, selector: \"rdx-navigation-menu-aria-owns\", inputs: { contentId: \"contentId\" }, ngImport: i0, template: `\n <span [attr.aria-owns]=\"contentId\" rdxVisuallyHidden feature=\"fully-hidden\"></span>\n `, isInline: true, dependencies: [{ kind: \"directive\", type: RdxVisuallyHiddenDirective, selector: \"[rdxVisuallyHidden]\", inputs: [\"feature\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuAriaOwnsComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'rdx-navigation-menu-aria-owns',\n template: `\n <span [attr.aria-owns]=\"contentId\" rdxVisuallyHidden feature=\"fully-hidden\"></span>\n `,\n imports: [RdxVisuallyHiddenDirective]\n }]\n }], propDecorators: { contentId: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LWExMXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9uYXZpZ2F0aW9uLW1lbnUvc3JjL25hdmlnYXRpb24tbWVudS1hMTF5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQWVsRixNQUFNLE9BQU8sb0NBQW9DO0lBYmpEO1FBY2EsbUJBQWMsR0FBdUIsSUFBSSxDQUFDO1FBQzFDLG1CQUFjLEdBQXVCLElBQUksQ0FBQztRQUN6QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7S0FXOUQ7SUFURyxPQUFPLENBQUMsS0FBaUI7UUFDckIsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsYUFBbUMsQ0FBQztRQUNyRSxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixLQUFLLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDckUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFM0csSUFBSSxpQkFBaUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNMLENBQUM7OEdBYlEsb0NBQW9DO2tHQUFwQyxvQ0FBb0Msa05BWG5DOzs7Ozs7OztLQVFULDREQUNTLDBCQUEwQjs7MkZBRTNCLG9DQUFvQztrQkFiaEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUNBQWlDO29CQUMzQyxRQUFRLEVBQUU7Ozs7Ozs7O0tBUVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsMEJBQTBCLENBQUM7aUJBQ3hDOzhCQUVZLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNOztBQW9CWCxNQUFNLE9BQU8sa0NBQWtDO0lBUC9DO1FBUWEsY0FBUyxHQUFXLEVBQUUsQ0FBQztLQUNuQzs4R0FGWSxrQ0FBa0M7a0dBQWxDLGtDQUFrQyw2SEFMakM7O0tBRVQsNERBQ1MsMEJBQTBCOzsyRkFFM0Isa0NBQWtDO2tCQVA5QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwrQkFBK0I7b0JBQ3pDLFFBQVEsRUFBRTs7S0FFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDeEM7OEJBRVksU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhWaXN1YWxseUhpZGRlbkRpcmVjdGl2ZSB9IGZyb20gJ0ByYWRpeC1uZy9wcmltaXRpdmVzL3Zpc3VhbGx5LWhpZGRlbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncmR4LW5hdmlnYXRpb24tbWVudS1mb2N1cy1wcm94eScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgIHJkeFZpc3VhbGx5SGlkZGVuXG4gICAgICAgICAgICBmZWF0dXJlPVwiZm9jdXNhYmxlXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtSZHhWaXN1YWxseUhpZGRlbkRpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgUmR4TmF2aWdhdGlvbk1lbnVGb2N1c1Byb3h5Q29tcG9uZW50IHtcbiAgICBASW5wdXQoKSB0cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBAT3V0cHV0KCkgcHJveHlGb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8J3N0YXJ0JyB8ICdlbmQnPigpO1xuXG4gICAgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2Rm9jdXNlZEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgY29uc3Qgd2FzVHJpZ2dlckZvY3VzZWQgPSBwcmV2Rm9jdXNlZEVsZW1lbnQgPT09IHRoaXMudHJpZ2dlckVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHdhc0ZvY3VzRnJvbUNvbnRlbnQgPSB0aGlzLmNvbnRlbnRFbGVtZW50ID8gdGhpcy5jb250ZW50RWxlbWVudC5jb250YWlucyhwcmV2Rm9jdXNlZEVsZW1lbnQpIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKHdhc1RyaWdnZXJGb2N1c2VkIHx8ICF3YXNGb2N1c0Zyb21Db250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByb3h5Rm9jdXMuZW1pdCh3YXNUcmlnZ2VyRm9jdXNlZCA/ICdzdGFydCcgOiAnZW5kJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncmR4LW5hdmlnYXRpb24tbWVudS1hcmlhLW93bnMnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxzcGFuIFthdHRyLmFyaWEtb3duc109XCJjb250ZW50SWRcIiByZHhWaXN1YWxseUhpZGRlbiBmZWF0dXJlPVwiZnVsbHktaGlkZGVuXCI+PC9zcGFuPlxuICAgIGAsXG4gICAgaW1wb3J0czogW1JkeFZpc3VhbGx5SGlkZGVuRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBSZHhOYXZpZ2F0aW9uTWVudUFyaWFPd25zQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBjb250ZW50SWQ6IHN0cmluZyA9ICcnO1xufVxuIl19","import { inject, InjectionToken } from '@angular/core';\nexport const RDX_NAVIGATION_MENU_TOKEN = new InjectionToken('RdxNavigationMenuToken');\nexport function injectNavigationMenu() {\n return inject(RDX_NAVIGATION_MENU_TOKEN);\n}\nexport function isRootNavigationMenu(context) {\n return context.isRootMenu;\n}\nexport function provideNavigationMenuContext(provider) {\n return {\n provide: RDX_NAVIGATION_MENU_TOKEN,\n useExisting: provider\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9uYXZpZ2F0aW9uLW1lbnUvc3JjL25hdmlnYXRpb24tbWVudS50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFtQ3ZFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUF3Qix3QkFBd0IsQ0FBQyxDQUFDO0FBRTdHLE1BQU0sVUFBVSxvQkFBb0I7SUFDaEMsT0FBTyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQThCO0lBQy9ELE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QixDQUN4QyxRQUEwRTtJQUUxRSxPQUFPO1FBQ0gsT0FBTyxFQUFFLHlCQUF5QjtRQUNsQyxXQUFXLEVBQUUsUUFBUTtLQUN4QixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhOYXZpZ2F0aW9uTWVudVN1YkRpcmVjdGl2ZSB9IGZyb20gJy4vbmF2aWdhdGlvbi1tZW51LXN1Yi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4TmF2aWdhdGlvbk1lbnVEaXJlY3RpdmUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS5kaXJlY3RpdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25NZW51Q29udGV4dCB7XG4gICAgaXNSb290TWVudTogYm9vbGVhbjtcbiAgICB2YWx1ZTogKCkgPT4gc3RyaW5nO1xuICAgIHByZXZpb3VzVmFsdWU6ICgpID0+IHN0cmluZztcbiAgICBiYXNlSWQ6IHN0cmluZztcbiAgICBkaXI6ICdsdHInIHwgJ3J0bCc7XG4gICAgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG4gICAgbG9vcDogYm9vbGVhbjtcbiAgICByb290TmF2aWdhdGlvbk1lbnU6ICgpID0+IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIGluZGljYXRvclRyYWNrPzogKCkgPT4gSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIG9uSW5kaWNhdG9yVHJhY2tDaGFuZ2U/OiAodHJhY2s6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4gdm9pZDtcbiAgICB1c2VyRGlzbWlzc2VkQnlDbGljaz86ICgpID0+IGJvb2xlYW47XG4gICAgcmVzZXRVc2VyRGlzbWlzc2VkPzogKCkgPT4gdm9pZDtcbiAgICB2aWV3cG9ydD86ICgpID0+IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBvblZpZXdwb3J0Q2hhbmdlPzogKHZpZXdwb3J0OiBIVE1MRWxlbWVudCB8IG51bGwpID0+IHZvaWQ7XG4gICAgdmlld3BvcnRDb250ZW50PzogKCkgPT4gTWFwPHN0cmluZywgYW55PjtcbiAgICBvblZpZXdwb3J0Q29udGVudENoYW5nZT86IChjb250ZW50VmFsdWU6IHN0cmluZywgY29udGVudERhdGE6IGFueSkgPT4gdm9pZDtcbiAgICBvblZpZXdwb3J0Q29udGVudFJlbW92ZT86IChjb250ZW50VmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgICBvblRyaWdnZXJFbnRlcj86IChpdGVtVmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgICBvblRyaWdnZXJMZWF2ZT86ICgpID0+IHZvaWQ7XG4gICAgb25Db250ZW50RW50ZXI/OiAoKSA9PiB2b2lkO1xuICAgIG9uQ29udGVudExlYXZlPzogKCkgPT4gdm9pZDtcbiAgICBvbkl0ZW1TZWxlY3Q/OiAoaXRlbVZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgb25JdGVtRGlzbWlzcz86ICgpID0+IHZvaWQ7XG4gICAgaGFuZGxlQ2xvc2U/OiAoZm9yY2U/OiBib29sZWFuKSA9PiB2b2lkO1xuICAgIHNldFRyaWdnZXJQb2ludGVyU3RhdGU/OiAoaXNPdmVyOiBib29sZWFuKSA9PiB2b2lkO1xuICAgIHNldENvbnRlbnRQb2ludGVyU3RhdGU/OiAoaXNPdmVyOiBib29sZWFuKSA9PiB2b2lkO1xuICAgIGlzUG9pbnRlckluU3lzdGVtPzogKCkgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFJEWF9OQVZJR0FUSU9OX01FTlVfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TmF2aWdhdGlvbk1lbnVDb250ZXh0PignUmR4TmF2aWdhdGlvbk1lbnVUb2tlbicpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0TmF2aWdhdGlvbk1lbnUoKTogTmF2aWdhdGlvbk1lbnVDb250ZXh0IHtcbiAgICByZXR1cm4gaW5qZWN0KFJEWF9OQVZJR0FUSU9OX01FTlVfVE9LRU4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSb290TmF2aWdhdGlvbk1lbnUoY29udGV4dDogTmF2aWdhdGlvbk1lbnVDb250ZXh0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbnRleHQuaXNSb290TWVudTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOYXZpZ2F0aW9uTWVudUNvbnRleHQoXG4gICAgcHJvdmlkZXI6IFR5cGU8UmR4TmF2aWdhdGlvbk1lbnVEaXJlY3RpdmUgfCBSZHhOYXZpZ2F0aW9uTWVudVN1YkRpcmVjdGl2ZT5cbik6IFByb3ZpZGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlOiBSRFhfTkFWSUdBVElPTl9NRU5VX1RPS0VOLFxuICAgICAgICB1c2VFeGlzdGluZzogcHJvdmlkZXJcbiAgICB9O1xufVxuIl19","export var RdxNavigationMenuAnimationStatus;\n(function (RdxNavigationMenuAnimationStatus) {\n RdxNavigationMenuAnimationStatus[\"OPEN_STARTED\"] = \"open_started\";\n RdxNavigationMenuAnimationStatus[\"OPEN_ENDED\"] = \"open_ended\";\n RdxNavigationMenuAnimationStatus[\"CLOSED_STARTED\"] = \"closed_started\";\n RdxNavigationMenuAnimationStatus[\"CLOSED_ENDED\"] = \"closed_ended\";\n})(RdxNavigationMenuAnimationStatus || (RdxNavigationMenuAnimationStatus = {}));\n/**\n * A stub class solely used to query a single type of focusable element in the navigation menu.\n */\nexport class RdxNavigationMenuFocusableOption {\n focus() {\n throw new Error('Method not implemented.');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9uYXZpZ2F0aW9uLW1lbnUvc3JjL25hdmlnYXRpb24tbWVudS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQU4sSUFBWSxnQ0FLWDtBQUxELFdBQVksZ0NBQWdDO0lBQ3hDLGlFQUE2QixDQUFBO0lBQzdCLDZEQUF5QixDQUFBO0lBQ3pCLHFFQUFpQyxDQUFBO0lBQ2pDLGlFQUE2QixDQUFBO0FBQ2pDLENBQUMsRUFMVyxnQ0FBZ0MsS0FBaEMsZ0NBQWdDLFFBSzNDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGdDQUFnQztJQUNsRCxLQUFLO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzYWJsZU9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuZXhwb3J0IGVudW0gUmR4TmF2aWdhdGlvbk1lbnVBbmltYXRpb25TdGF0dXMge1xuICAgIE9QRU5fU1RBUlRFRCA9ICdvcGVuX3N0YXJ0ZWQnLFxuICAgIE9QRU5fRU5ERUQgPSAnb3Blbl9lbmRlZCcsXG4gICAgQ0xPU0VEX1NUQVJURUQgPSAnY2xvc2VkX3N0YXJ0ZWQnLFxuICAgIENMT1NFRF9FTkRFRCA9ICdjbG9zZWRfZW5kZWQnXG59XG5cbi8qKlxuICogQSBzdHViIGNsYXNzIHNvbGVseSB1c2VkIHRvIHF1ZXJ5IGEgc2luZ2xlIHR5cGUgb2YgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIG5hdmlnYXRpb24gbWVudS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJkeE5hdmlnYXRpb25NZW51Rm9jdXNhYmxlT3B0aW9uIGltcGxlbWVudHMgRm9jdXNhYmxlT3B0aW9uIHtcbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbn1cbiJdfQ==","export const ROOT_CONTENT_DISMISS = 'navigationMenu.rootContentDismiss';\n/**\n * Generate a unique ID\n */\nexport function generateId() {\n return Math.random().toString(36).substring(2, 11);\n}\n/**\n * Get the open state for data-state attribute\n */\nexport function getOpenStateLabel(open) {\n return open ? 'open' : 'closed';\n}\n/**\n * Create a trigger ID from base ID and value\n */\nexport function makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\n/**\n * Create a content ID from base ID and value\n */\nexport function makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\n/**\n * Get the motion attribute for animations\n */\nexport function getMotionAttribute(currentValue, previousValue, itemValue, itemValues, dir) {\n // reverse values in RTL\n const values = dir === 'rtl' ? [...itemValues].reverse() : itemValues;\n const currentIndex = currentValue !== null ? values.indexOf(currentValue) : -1;\n const prevIndex = previousValue !== null ? values.indexOf(previousValue) : -1;\n const isSelected = itemValue === currentValue;\n const wasSelected = itemValue === previousValue && previousValue !== null;\n // Preserve motion attribute for items not directly involved in the transition\n // (This matches React's behaviour, using a ref/signal might be needed\n // in the component using this function to fully replicate React's prevMotionAttributeRef)\n // For now, returning null if not involved, as per the original code's intent here.\n if (!isSelected && !wasSelected) {\n return null;\n }\n // handle transitions between items\n if (currentIndex !== -1 && prevIndex !== -1) {\n // if moving to this item (isSelected)\n if (isSelected) {\n return currentIndex > prevIndex ? 'from-end' : 'from-start';\n }\n // if moving away from this item (wasSelected)\n if (wasSelected) {\n return currentIndex > prevIndex ? 'to-start' : 'to-end';\n }\n }\n // handle initial open (prevIndex is -1, currentIndex is valid)\n if (isSelected && prevIndex === -1) {\n return null;\n }\n // handle closing entirely (currentIndex is -1, prevIndex is valid)\n if (wasSelected && currentIndex === -1) {\n return null;\n }\n // fallback if none of the above conditions met (should ideally not happen with clear states)\n return null;\n}\n/**\n * Focus the first element in a list of candidates\n * @param candidates Array of elements that can receive focus\n * @param preventScroll Whether to prevent scrolling when focusing\n * @param activateKeyboardNav Whether to dispatch a dummy keydown event to activate keyboard navigation handlers\n * @returns Whether focus was successfully moved\n */\nexport function focusFirst(candidates, preventScroll = false, activateKeyboardNav = true) {\n const prevFocusedElement = document.activeElement;\n // sort candidates by tabindex to ensure proper order\n const sortedCandidates = [...candidates].sort((a, b) => {\n const aIndex = a.tabIndex || 0;\n const bIndex = b.tabIndex || 0;\n return aIndex - bIndex;\n });\n const success = sortedCandidates.some((candidate) => {\n // if focus is already where we want it, do nothing\n if (candidate === prevFocusedElement)\n return true;\n try {\n candidate.focus({ preventScroll });\n return document.activeElement !== prevFocusedElement;\n }\n catch (e) {\n console.error('Error focusing element:', e);\n return false;\n }\n });\n // if focus was moved successfully and we want to activate keyboard navigation,\n // dispatch a dummy keypress to ensure keyboard handlers are activated\n if (success && activateKeyboardNav && document.activeElement !== prevFocusedElement) {\n try {\n // dispatch a no-op keydown event to activate any keyboard handlers\n document.activeElement?.dispatchEvent(new KeyboardEvent('keydown', {\n bubbles: true,\n cancelable: true,\n key: 'Tab',\n code: 'Tab'\n }));\n }\n catch (e) {\n console.error('Error dispatching keyboard event:', e);\n }\n }\n return success;\n}\n/**\n * Get all tabbable candidates in a container\n */\nexport function getTabbableCandidates(container) {\n if (!container || !container.querySelectorAll)\n return [];\n const TABBABLE_SELECTOR = 'a[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), ' +\n 'select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]), ' +\n '[contenteditable=\"true\"]:not([tabindex=\"-1\"])';\n // use querySelector for better browser support\n const elements = Array.from(container.querySelectorAll(TABBABLE_SELECTOR));\n // filter out elements that are hidden, have display:none, etc.\n return elements.filter((element) => {\n if (element.tabIndex < 0)\n return false;\n if (element.hasAttribute('disabled'))\n return false;\n if (element.hasAttribute('aria-hidden') && element.getAttribute('aria-hidden') === 'true')\n return false;\n // Check if element or any parent is hidden\n let current = element;\n while (current) {\n const style = window.getComputedStyle(current);\n if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {\n return false;\n }\n current = current.parentElement;\n }\n return true;\n });\n}\n/**\n * Remove elements from tab order and return a function to restore them\n */\nexport function removeFromTabOrder(candidates) {\n const originalValues = new Map();\n candidates.forEach((candidate) => {\n // Store original tabindex\n originalValues.set(candidate, candidate.getAttribute('tabindex'));\n // Set to -1 to remove from tab order\n candidate.setAttribute('tabindex', '-1');\n });\n // Return restore function\n return () => {\n candidates.forEach((candidate) => {\n const originalValue = originalValues.get(candidate);\n if (originalValue == null) {\n candidate.removeAttribute('tabindex');\n }\n else {\n candidate.setAttribute('tabindex', originalValue);\n }\n });\n };\n}\n/**\n * Wrap array around itself at given start index\n */\nexport function wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL25hdmlnYXRpb24tbWVudS9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsbUNBQW1DLENBQUM7QUFFeEU7O0dBRUc7QUFDSCxNQUFNLFVBQVUsVUFBVTtJQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYTtJQUMzQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDcEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFjLEVBQUUsS0FBYTtJQUN2RCxPQUFPLEdBQUcsTUFBTSxZQUFZLEtBQUssRUFBRSxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBYyxFQUFFLEtBQWE7SUFDdkQsT0FBTyxHQUFHLE1BQU0sWUFBWSxLQUFLLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQzlCLFlBQTJCLEVBQzNCLGFBQTRCLEVBQzVCLFNBQWlCLEVBQ2pCLFVBQW9CLEVBQ3BCLEdBQTRCO0lBRTVCLHdCQUF3QjtJQUN4QixNQUFNLE1BQU0sR0FBRyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUV0RSxNQUFNLFlBQVksR0FBRyxZQUFZLEtBQUss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QUFVLENBQUMsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBSSxLQUFVLEVBQUUsVUFBa0I7SUFDdkQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBOYXZpZ2F0aW9uTWVudU9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25NZW51RGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcbmV4cG9ydCB0eXBlIE1vdGlvbkF0dHJpYnV0ZSA9ICd0by1zdGFydCcgfCAndG8tZW5kJyB8ICdmcm9tLXN0YXJ0JyB8ICdmcm9tLWVuZCc7XG5cbmV4cG9ydCBjb25zdCBST09UX0NPTlRFTlRfRElTTUlTUyA9ICduYXZpZ2F0aW9uTWVudS5yb290Q29udGVudERpc21pc3MnO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgdW5pcXVlIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvcGVuIHN0YXRlIGZvciBkYXRhLXN0YXRlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlblN0YXRlTGFiZWwob3BlbjogYm9vbGVhbik6ICdvcGVuJyB8ICdjbG9zZWQnIHtcbiAgICByZXR1cm4gb3BlbiA/ICdvcGVuJyA6ICdjbG9zZWQnO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHRyaWdnZXIgSUQgZnJvbSBiYXNlIElEIGFuZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVRyaWdnZXJJZChiYXNlSWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2Jhc2VJZH0tdHJpZ2dlci0ke3ZhbHVlfWA7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY29udGVudCBJRCBmcm9tIGJhc2UgSUQgYW5kIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQ29udGVudElkKGJhc2VJZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7YmFzZUlkfS1jb250ZW50LSR7dmFsdWV9YDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1vdGlvbiBhdHRyaWJ1dGUgZm9yIGFuaW1hdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vdGlvbkF0dHJpYnV0ZShcbiAgICBjdXJyZW50VmFsdWU6IHN0cmluZyB8IG51bGwsXG4gICAgcHJldmlvdXNWYWx1ZTogc3RyaW5nIHwgbnVsbCxcbiAgICBpdGVtVmFsdWU6IHN0cmluZyxcbiAgICBpdGVtVmFsdWVzOiBzdHJpbmdbXSxcbiAgICBkaXI6IE5hdmlnYXRpb25NZW51RGlyZWN0aW9uXG4pOiBNb3Rpb25BdHRyaWJ1dGUgfCBudWxsIHtcbiAgICAvLyByZXZlcnNlIHZhbHVlcyBpbiBSVExcbiAgICBjb25zdCB2YWx1ZXMgPSBkaXIgPT09ICdydGwnID8gWy4uLml0ZW1WYWx1ZXNdLnJldmVyc2UoKSA6IGl0ZW1WYWx1ZXM7XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjdXJyZW50VmFsdWUgIT09IG51bGwgPyB2YWx1ZXMuaW5kZXhPZihjdXJyZW50VmFsdWUpIDogLTE7XG4gICAgY29uc3QgcHJldkluZGV4ID0gcHJldmlvdXNWYWx1ZSAhPT0gbnVsbCA/IHZhbHVlcy5pbmRleE9mKHByZXZpb3VzVmFsdWUpIDogLTE7XG5cbiAgICBjb25zdCBpc1NlbGVjdGVkID0gaXRlbVZhbHVlID09PSBjdXJyZW50VmFsdWU7XG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSBpdGVtVmFsdWUgPT09IHByZXZpb3VzVmFsdWUgJiYgcHJldmlvdXNWYWx1ZSAhPT0gbnVsbDtcblxuICAgIC8vIFByZXNlcnZlIG1vdGlvbiBhdHRyaWJ1dGUgZm9yIGl0ZW1zIG5vdCBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgdHJhbnNpdGlvblxuICAgIC8vIChUaGlzIG1hdGNoZXMgUmVhY3QncyBiZWhhdmlvdXIsIHVzaW5nIGEgcmVmL3NpZ25hbCBtaWdodCBiZSBuZWVkZWRcbiAgICAvLyBpbiB0aGUgY29tcG9uZW50IHVzaW5nIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgcmVwbGljYXRlIFJlYWN0J3MgcHJldk1vdGlvbkF0dHJpYnV0ZVJlZilcbiAgICAvLyBGb3Igbm93LCByZXR1cm5pbmcgbnVsbCBpZiBub3QgaW52b2x2ZWQsIGFzIHBlciB0aGUgb3JpZ2luYWwgY29kZSdzIGludGVudCBoZXJlLlxuICAgIGlmICghaXNTZWxlY3RlZCAmJiAhd2FzU2VsZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRyYW5zaXRpb25zIGJldHdlZW4gaXRlbXNcbiAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSAmJiBwcmV2SW5kZXggIT09IC0xKSB7XG4gICAgICAgIC8vIGlmIG1vdmluZyB0byB0aGlzIGl0ZW0gKGlzU2VsZWN0ZWQpXG4gICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEluZGV4ID4gcHJldkluZGV4ID8gJ2Zyb20tZW5kJyA6ICdmcm9tLXN0YXJ0JztcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBtb3ZpbmcgYXdheSBmcm9tIHRoaXMgaXRlbSAod2FzU2VsZWN0ZWQpXG4gICAgICAgIGlmICh3YXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleCA+IHByZXZJbmRleCA/ICd0by1zdGFydCcgOiAndG8tZW5kJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhhbmRsZSBpbml0aWFsIG9wZW4gKHByZXZJbmRleCBpcyAtMSwgY3VycmVudEluZGV4IGlzIHZhbGlkKVxuICAgIGlmIChpc1NlbGVjdGVkICYmIHByZXZJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIGNsb3NpbmcgZW50aXJlbHkgKGN1cnJlbnRJbmRleCBpcyAtMSwgcHJldkluZGV4IGlzIHZhbGlkKVxuICAgIGlmICh3YXNTZWxlY3RlZCAmJiBjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGZhbGxiYWNrIGlmIG5vbmUgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgbWV0IChzaG91bGQgaWRlYWxseSBub3QgaGFwcGVuIHdpdGggY2xlYXIgc3RhdGVzKVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEZvY3VzIHRoZSBmaXJzdCBlbGVtZW50IGluIGEgbGlzdCBvZiBjYW5kaWRhdGVzXG4gKiBAcGFyYW0gY2FuZGlkYXRlcyBBcnJheSBvZiBlbGVtZW50cyB0aGF0IGNhbiByZWNlaXZlIGZvY3VzXG4gKiBAcGFyYW0gcHJldmVudFNjcm9sbCBXaGV0aGVyIHRvIHByZXZlbnQgc2Nyb2xsaW5nIHdoZW4gZm9jdXNpbmdcbiAqIEBwYXJhbSBhY3RpdmF0ZUtleWJvYXJkTmF2IFdoZXRoZXIgdG8gZGlzcGF0Y2ggYSBkdW1teSBrZXlkb3duIGV2ZW50IHRvIGFjdGl2YXRlIGtleWJvYXJkIG5hdmlnYXRpb24gaGFuZGxlcnNcbiAqIEByZXR1cm5zIFdoZXRoZXIgZm9jdXMgd2FzIHN1Y2Nlc3NmdWxseSBtb3ZlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNGaXJzdChjYW5kaWRhdGVzOiBIVE1MRWxlbWVudFtdLCBwcmV2ZW50U2Nyb2xsID0gZmFsc2UsIGFjdGl2YXRlS2V5Ym9hcmROYXYgPSB0cnVlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJldkZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgIC8vIHNvcnQgY2FuZGlkYXRlcyBieSB0YWJpbmRleCB0byBlbnN1cmUgcHJvcGVyIG9yZGVyXG4gICAgY29uc3Qgc29ydGVkQ2FuZGlkYXRlcyA9IFsuLi5jYW5kaWRhdGVzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFJbmRleCA9IGEudGFiSW5kZXggfHwgMDtcbiAgICAgICAgY29uc3QgYkluZGV4ID0gYi50YWJJbmRleCB8fCAwO1xuICAgICAgICByZXR1cm4gYUluZGV4IC0gYkluZGV4O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VjY2VzcyA9IHNvcnRlZENhbmRpZGF0ZXMuc29tZSgoY2FuZGlkYXRlKSA9PiB7XG4gICAgICAgIC8vIGlmIGZvY3VzIGlzIGFscmVhZHkgd2hlcmUgd2Ugd2FudCBpdCwgZG8gbm90aGluZ1xuICAgICAgICBpZiAoY2FuZGlkYXRlID09PSBwcmV2Rm9jdXNlZEVsZW1lbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYW5kaWRhdGUuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHByZXZGb2N1c2VkRWxlbWVudDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZm9jdXNpbmcgZWxlbWVudDonLCBlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gaWYgZm9jdXMgd2FzIG1vdmVkIHN1Y2Nlc3NmdWxseSBhbmQgd2Ugd2FudCB0byBhY3RpdmF0ZSBrZXlib2FyZCBuYXZpZ2F0aW9uLFxuICAgIC8vIGRpc3BhdGNoIGEgZHVtbXkga2V5cHJlc3MgdG8gZW5zdXJlIGtleWJvYXJkIGhhbmRsZXJzIGFyZSBhY3RpdmF0ZWRcbiAgICBpZiAoc3VjY2VzcyAmJiBhY3RpdmF0ZUtleWJvYXJkTmF2ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHByZXZGb2N1c2VkRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZGlzcGF0Y2ggYSBuby1vcCBrZXlkb3duIGV2ZW50IHRvIGFjdGl2YXRlIGFueSBrZXlib2FyZCBoYW5kbGVyc1xuICAgICAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudD8uZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICBuZXcgS2V5Ym9hcmRFdmVudCgna2V5ZG93bicsIHtcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnVGFiJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1RhYidcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgZXZlbnQ6JywgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2Vzcztcbn1cblxuLyoqXG4gKiBHZXQgYWxsIHRhYmJhYmxlIGNhbmRpZGF0ZXMgaW4gYSBjb250YWluZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmJhYmxlQ2FuZGlkYXRlcyhjb250YWluZXI6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBUQUJCQUJMRV9TRUxFQ1RPUiA9XG4gICAgICAgICdhW2hyZWZdLCBidXR0b246bm90KFtkaXNhYmxlZF0pLCBpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0eXBlPVwiaGlkZGVuXCJdKSwgJyArXG4gICAgICAgICdzZWxlY3Q6bm90KFtkaXNhYmxlZF0pLCB0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSksIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSwgJyArXG4gICAgICAgICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcblxuICAgIC8vIHVzZSBxdWVyeVNlbGVjdG9yIGZvciBiZXR0ZXIgYnJvd3NlciBzdXBwb3J0XG4gICAgY29uc3QgZWxlbWVudHMgPSBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFRBQkJBQkxFX1NFTEVDVE9SKSkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgIC8vIGZpbHRlciBvdXQgZWxlbWVudHMgdGhhdCBhcmUgaGlkZGVuLCBoYXZlIGRpc3BsYXk6bm9uZSwgZXRjLlxuICAgIHJldHVybiBlbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQudGFiSW5kZXggPCAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT09ICd0cnVlJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGVsZW1lbnQgb3IgYW55IHBhcmVudCBpcyBoaWRkZW5cbiAgICAgICAgbGV0IGN1cnJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGN1cnJlbnQpO1xuICAgICAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXkgPT09ICdub25lJyB8fCBzdHlsZS52aXNpYmlsaXR5ID09PSAnaGlkZGVuJyB8fCBzdHlsZS5vcGFjaXR5ID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGVsZW1lbnRzIGZyb20gdGFiIG9yZGVyIGFuZCByZXR1cm4gYSBmdW5jdGlvbiB0byByZXN0b3JlIHRoZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZyb21UYWJPcmRlcihjYW5kaWRhdGVzOiBIVE1MRWxlbWVudFtdKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZXMgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBzdHJpbmcgfCBudWxsPigpO1xuXG4gICAgY2FuZGlkYXRlcy5mb3JFYWNoKChjYW5kaWRhdGUpID0+IHtcbiAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgdGFiaW5kZXhcbiAgICAgICAgb3JpZ2luYWxWYWx1ZXMuc2V0KGNhbmRpZGF0ZSwgY2FuZGlkYXRlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSk7XG5cbiAgICAgICAgLy8gU2V0IHRvIC0xIHRvIHJlbW92ZSBmcm9tIHRhYiBvcmRlclxuICAgICAgICBjYW5kaWRhdGUuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJuIHJlc3RvcmUgZnVuY3Rpb25cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjYW5kaWRhdGVzLmZvckVhY2goKGNhbmRpZGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWVzLmdldChjYW5kaWRhdGUpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4Jywgb3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbi8qKlxuICogV3JhcCBhcnJheSBhcm91bmQgaXRzZWxmIGF0IGdpdmVuIHN0YXJ0IGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwQXJyYXk8VD4oYXJyYXk6IFRbXSwgc3RhcnRJbmRleDogbnVtYmVyKTogVFtdIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKChfLCBpbmRleCkgPT4gYXJyYXlbKHN0YXJ0SW5kZXggKyBpbmRleCkgJSBhcnJheS5sZW5ndGhdKTtcbn1cbiJdfQ==","import { contentChild, Directive, ElementRef, inject, input, signal } from '@angular/core';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport { RdxNavigationMenuFocusableOption } from './navigation-menu.types';\nimport { focusFirst, getTabbableCandidates, removeFromTabOrder } from './utils';\nimport * as i0 from \"@angular/core\";\nexport class RdxNavigationMenuItemDirective {\n constructor() {\n this.elementRef = inject(ElementRef);\n this.context = injectNavigationMenu();\n this.value = input('', ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n /**\n * @ignore\n */\n this.triggerOrLink = contentChild(RdxNavigationMenuFocusableOption, ...(ngDevMode ? [{ debugName: \"triggerOrLink\" }] : []));\n this.triggerRef = signal(null, ...(ngDevMode ? [{ debugName: \"triggerRef\" }] : []));\n this.contentRef = signal(null, ...(ngDevMode ? [{ debugName: \"contentRef\" }] : []));\n this.focusProxyRef = signal(null, ...(ngDevMode ? [{ debugName: \"focusProxyRef\" }] : []));\n this.wasEscapeCloseRef = signal(false, ...(ngDevMode ? [{ debugName: \"wasEscapeCloseRef\" }] : []));\n this._restoreContentTabOrderRef = signal(null, ...(ngDevMode ? [{ debugName: \"_restoreContentTabOrderRef\" }] : []));\n }\n get restoreContentTabOrderRef() {\n return this._restoreContentTabOrderRef;\n }\n /**\n * Handle keyboard entry into content from trigger\n */\n onEntryKeyDown() {\n // Check if we're using a viewport in a root menu\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n const viewport = this.context.viewport();\n if (viewport) {\n // find tabbable elements in the viewport\n const candidates = getTabbableCandidates(viewport);\n if (candidates.length) {\n this.ensureTabOrder();\n // focus the first element\n focusFirst(candidates);\n return;\n }\n }\n }\n // fallback to content if no viewport or no tabbable elements in viewport\n if (this.contentRef()) {\n // restore tab order if needed\n const restoreFn = this._restoreContentTabOrderRef();\n if (restoreFn)\n restoreFn();\n // find and focus first tabbable element\n const candidates = getTabbableCandidates(this.contentRef());\n if (candidates.length) {\n focusFirst(candidates);\n }\n }\n }\n focus() {\n this.triggerOrLink()?.focus();\n }\n /**\n * Ensure elements are in the tab order by restoring any previously removed tabindex values\n */\n ensureTabOrder() {\n const restoreFn = this._restoreContentTabOrderRef();\n if (restoreFn) {\n restoreFn();\n this._restoreContentTabOrderRef.set(null);\n }\n }\n /**\n * Handle focus coming from the focus proxy element\n * @param side Which side the focus is coming from (start = from trigger, end = from after content)\n */\n onFocusProxyEnter(side = 'start') {\n // check for viewport first\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n const viewport = this.context.viewport();\n if (viewport) {\n const candidates = getTabbableCandidates(viewport);\n if (candidates.length) {\n this.ensureTabOrder();\n // focus first or last element depending on direction\n focusFirst(side === 'start' ? candidates : [...candidates].reverse());\n return;\n }\n }\n }\n // fallback to content\n if (this.contentRef()) {\n // restore tab order if needed\n const restoreFn = this._restoreContentTabOrderRef();\n if (restoreFn)\n restoreFn();\n // find and focus appropriate element based on direction\n const candidates = getTabbableCandidates(this.contentRef());\n if (candidates.length) {\n // Focus first or last element depending on which direction we're coming from\n focusFirst(side === 'start' ? candidates : [...candidates].reverse());\n }\n }\n }\n /**\n * Handle focus moving outside of the content\n * Remove elements from tab order when not focused\n */\n onContentFocusOutside() {\n // get all tabbable elements from both viewport and content\n let allCandidates = [];\n // check viewport first\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n const viewport = this.context.viewport();\n if (viewport) {\n allCandidates = getTabbableCandidates(viewport);\n }\n }\n // ... also check direct content\n if (this.contentRef()) {\n const contentCandidates = getTabbableCandidates(this.contentRef());\n allCandidates = [...allCandidates, ...contentCandidates];\n }\n // remove from tab order and store restore function\n if (allCandidates.length) {\n this._restoreContentTabOrderRef.set(removeFromTabOrder(allCandidates));\n }\n }\n /**\n * Handle content being closed from root menu\n */\n onRootContentClose() {\n this.onContentFocusOutside();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.3.3\", type: RdxNavigationMenuItemDirective, isStandalone: true, selector: \"[rdxNavigationMenuItem]\", inputs: { value: { classPropertyName: \"value\", publicName: \"value\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"attr.value\": \"value()\" } }, queries: [{ propertyName: \"triggerOrLink\", first: true, predicate: RdxNavigationMenuFocusableOption, descendants: true, isSignal: true }], exportAs: [\"rdxNavigationMenuItem\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenuItem]',\n host: {\n '[attr.value]': 'value()'\n },\n exportAs: 'rdxNavigationMenuItem'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9uYXZpZ2F0aW9uLW1lbnUvc3JjL25hdmlnYXRpb24tbWVudS1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFTaEYsTUFBTSxPQUFPLDhCQUE4QjtJQVAzQztRQVFhLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEIsWUFBTyxHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFFekMsVUFBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLGlEQUFDLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLFlBQVksQ0FBQyxnQ0FBZ0MseURBQUMsQ0FBQztRQUUvRCxlQUFVLEdBQUcsTUFBTSxDQUFxQixJQUFJLHNEQUFDLENBQUM7UUFDOUMsZUFBVSxHQUFHLE1BQU0sQ0FBcUIsSUFBSSxzREFBQyxDQUFDO1FBQzlDLGtCQUFhLEdBQUcsTUFBTSxDQUFxQixJQUFJLHlEQUFDLENBQUM7UUFDakQsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssNkRBQUMsQ0FBQztRQUUxQiwrQkFBMEIsR0FBRyxNQUFNLENBQXNCLElBQUksc0VBQUMsQ0FBQztLQTRIbkY7SUExSEcsSUFBSSx5QkFBeUI7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Q0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDakMsQ0FBQzs4R0EzSVEsOEJBQThCO2tHQUE5Qiw4QkFBOEIscVRBU0QsZ0NBQWdDOzsyRkFUN0QsOEJBQThCO2tCQVAxQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLElBQUksRUFBRTt3QkFDRixjQUFjLEVBQUUsU0FBUztxQkFDNUI7b0JBQ0QsUUFBUSxFQUFFLHVCQUF1QjtpQkFDcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c2FibGVPcHRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdE5hdmlnYXRpb25NZW51LCBpc1Jvb3ROYXZpZ2F0aW9uTWVudSB9IGZyb20gJy4vbmF2aWdhdGlvbi1tZW51LnRva2VuJztcbmltcG9ydCB7IFJkeE5hdmlnYXRpb25NZW51Rm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLW1lbnUudHlwZXMnO1xuaW1wb3J0IHsgZm9jdXNGaXJzdCwgZ2V0VGFiYmFibGVDYW5kaWRhdGVzLCByZW1vdmVGcm9tVGFiT3JkZXIgfSBmcm9tICcuL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4TmF2aWdhdGlvbk1lbnVJdGVtXScsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudmFsdWVdJzogJ3ZhbHVlKCknXG4gICAgfSxcbiAgICBleHBvcnRBczogJ3JkeE5hdmlnYXRpb25NZW51SXRlbSdcbn0pXG5leHBvcnQgY2xhc3MgUmR4TmF2aWdhdGlvbk1lbnVJdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgRm9jdXNhYmxlT3B0aW9uIHtcbiAgICByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dCA9IGluamVjdE5hdmlnYXRpb25NZW51KCk7XG5cbiAgICByZWFkb25seSB2YWx1ZSA9IGlucHV0KCcnKTtcblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZWFkb25seSB0cmlnZ2VyT3JMaW5rID0gY29udGVudENoaWxkKFJkeE5hdmlnYXRpb25NZW51Rm9jdXNhYmxlT3B0aW9uKTtcblxuICAgIHJlYWRvbmx5IHRyaWdnZXJSZWYgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICByZWFkb25seSBjb250ZW50UmVmID0gc2lnbmFsPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gICAgcmVhZG9ubHkgZm9jdXNQcm94eVJlZiA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICAgIHJlYWRvbmx5IHdhc0VzY2FwZUNsb3NlUmVmID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jlc3RvcmVDb250ZW50VGFiT3JkZXJSZWYgPSBzaWduYWw8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbCk7XG5cbiAgICBnZXQgcmVzdG9yZUNvbnRlbnRUYWJPcmRlclJlZigpOiBTaWduYWw8KCgpID0+IHZvaWQpIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzdG9yZUNvbnRlbnRUYWJPcmRlclJlZjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUga2V5Ym9hcmQgZW50cnkgaW50byBjb250ZW50IGZyb20gdHJpZ2dlclxuICAgICAqL1xuICAgIG9uRW50cnlLZXlEb3duKCkge1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB1c2luZyBhIHZpZXdwb3J0IGluIGEgcm9vdCBtZW51XG4gICAgICAgIGlmIChpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpICYmIHRoaXMuY29udGV4dC52aWV3cG9ydCAmJiB0aGlzLmNvbnRleHQudmlld3BvcnQoKSkge1xuICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmNvbnRleHQudmlld3BvcnQoKTtcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgdGFiYmFibGUgZWxlbWVudHMgaW4gdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IGdldFRhYmJhYmxlQ2FuZGlkYXRlcyh2aWV3cG9ydCk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlVGFiT3JkZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBmb2N1cyB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBmb2N1c0ZpcnN0KGNhbmRpZGF0ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gY29udGVudCBpZiBubyB2aWV3cG9ydCBvciBubyB0YWJiYWJsZSBlbGVtZW50cyBpbiB2aWV3cG9ydFxuICAgICAgICBpZiAodGhpcy5jb250ZW50UmVmKCkpIHtcbiAgICAgICAgICAgIC8vIHJlc3RvcmUgdGFiIG9yZGVyIGlmIG5lZWRlZFxuICAgICAgICAgICAgY29uc3QgcmVzdG9yZUZuID0gdGhpcy5fcmVzdG9yZUNvbnRlbnRUYWJPcmRlclJlZigpO1xuICAgICAgICAgICAgaWYgKHJlc3RvcmVGbikgcmVzdG9yZUZuKCk7XG5cbiAgICAgICAgICAgIC8vIGZpbmQgYW5kIGZvY3VzIGZpcnN0IHRhYmJhYmxlIGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZXRUYWJiYWJsZUNhbmRpZGF0ZXModGhpcy5jb250ZW50UmVmKCkhKTtcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvY3VzRmlyc3QoY2FuZGlkYXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyT3JMaW5rKCk/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5zdXJlIGVsZW1lbnRzIGFyZSBpbiB0aGUgdGFiIG9yZGVyIGJ5IHJlc3RvcmluZyBhbnkgcHJldmlvdXNseSByZW1vdmVkIHRhYmluZGV4IHZhbHVlc1xuICAgICAqL1xuICAgIHByaXZhdGUgZW5zdXJlVGFiT3JkZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVGbiA9IHRoaXMuX3Jlc3RvcmVDb250ZW50VGFiT3JkZXJSZWYoKTtcbiAgICAgICAgaWYgKHJlc3RvcmVGbikge1xuICAgICAgICAgICAgcmVzdG9yZUZuKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXN0b3JlQ29udGVudFRhYk9yZGVyUmVmLnNldChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBmb2N1cyBjb21pbmcgZnJvbSB0aGUgZm9jdXMgcHJveHkgZWxlbWVudFxuICAgICAqIEBwYXJhbSBzaWRlIFdoaWNoIHNpZGUgdGhlIGZvY3VzIGlzIGNvbWluZyBmcm9tIChzdGFydCA9IGZyb20gdHJpZ2dlciwgZW5kID0gZnJvbSBhZnRlciBjb250ZW50KVxuICAgICAqL1xuICAgIG9uRm9jdXNQcm94eUVudGVyKHNpZGU6ICdzdGFydCcgfCAnZW5kJyA9ICdzdGFydCcpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIHZpZXdwb3J0IGZpcnN0XG4gICAgICAgIGlmIChpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpICYmIHRoaXMuY29udGV4dC52aWV3cG9ydCAmJiB0aGlzLmNvbnRleHQudmlld3BvcnQoKSkge1xuICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmNvbnRleHQudmlld3BvcnQoKTtcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZXRUYWJiYWJsZUNhbmRpZGF0ZXModmlld3BvcnQpO1xuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuc3VyZVRhYk9yZGVyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZm9jdXMgZmlyc3Qgb3IgbGFzdCBlbGVtZW50IGRlcGVuZGluZyBvbiBkaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNGaXJzdChzaWRlID09PSAnc3RhcnQnID8gY2FuZGlkYXRlcyA6IFsuLi5jYW5kaWRhdGVzXS5yZXZlcnNlKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gY29udGVudFxuICAgICAgICBpZiAodGhpcy5jb250ZW50UmVmKCkpIHtcbiAgICAgICAgICAgIC8vIHJlc3RvcmUgdGFiIG9yZGVyIGlmIG5lZWRlZFxuICAgICAgICAgICAgY29uc3QgcmVzdG9yZUZuID0gdGhpcy5fcmVzdG9yZUNvbnRlbnRUYWJPcmRlclJlZigpO1xuICAgICAgICAgICAgaWYgKHJlc3RvcmVGbikgcmVzdG9yZUZuKCk7XG5cbiAgICAgICAgICAgIC8vIGZpbmQgYW5kIGZvY3VzIGFwcHJvcHJpYXRlIGVsZW1lbnQgYmFzZWQgb24gZGlyZWN0aW9uXG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gZ2V0VGFiYmFibGVDYW5kaWRhdGVzKHRoaXMuY29udGVudFJlZigpISk7XG4gICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBvciBsYXN0IGVsZW1lbnQgZGVwZW5kaW5nIG9uIHdoaWNoIGRpcmVjdGlvbiB3ZSdyZSBjb21pbmcgZnJvbVxuICAgICAgICAgICAgICAgIGZvY3VzRmlyc3Qoc2lkZSA9PT0gJ3N0YXJ0JyA/IGNhbmRpZGF0ZXMgOiBbLi4uY2FuZGlkYXRlc10ucmV2ZXJzZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBmb2N1cyBtb3Zpbmcgb3V0c2lkZSBvZiB0aGUgY29udGVudFxuICAgICAqIFJlbW92ZSBlbGVtZW50cyBmcm9tIHRhYiBvcmRlciB3aGVuIG5vdCBmb2N1c2VkXG4gICAgICovXG4gICAgb25Db250ZW50Rm9jdXNPdXRzaWRlKCkge1xuICAgICAgICAvLyBnZXQgYWxsIHRhYmJhYmxlIGVsZW1lbnRzIGZyb20gYm90aCB2aWV3cG9ydCBhbmQgY29udGVudFxuICAgICAgICBsZXQgYWxsQ2FuZGlkYXRlczogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgICAgIC8vIGNoZWNrIHZpZXdwb3J0IGZpcnN0XG4gICAgICAgIGlmIChpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpICYmIHRoaXMuY29udGV4dC52aWV3cG9ydCAmJiB0aGlzLmNvbnRleHQudmlld3BvcnQoKSkge1xuICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmNvbnRleHQudmlld3BvcnQoKTtcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIGFsbENhbmRpZGF0ZXMgPSBnZXRUYWJiYWJsZUNhbmRpZGF0ZXModmlld3BvcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLi4uIGFsc28gY2hlY2sgZGlyZWN0IGNvbnRlbnRcbiAgICAgICAgaWYgKHRoaXMuY29udGVudFJlZigpKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50Q2FuZGlkYXRlcyA9IGdldFRhYmJhYmxlQ2FuZGlkYXRlcyh0aGlzLmNvbnRlbnRSZWYoKSEpO1xuICAgICAgICAgICAgYWxsQ2FuZGlkYXRlcyA9IFsuLi5hbGxDYW5kaWRhdGVzLCAuLi5jb250ZW50Q2FuZGlkYXRlc107XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1vdmUgZnJvbSB0YWIgb3JkZXIgYW5kIHN0b3JlIHJlc3RvcmUgZnVuY3Rpb25cbiAgICAgICAgaWYgKGFsbENhbmRpZGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXN0b3JlQ29udGVudFRhYk9yZGVyUmVmLnNldChyZW1vdmVGcm9tVGFiT3JkZXIoYWxsQ2FuZGlkYXRlcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGNvbnRlbnQgYmVpbmcgY2xvc2VkIGZyb20gcm9vdCBtZW51XG4gICAgICovXG4gICAgb25Sb290Q29udGVudENsb3NlKCkge1xuICAgICAgICB0aGlzLm9uQ29udGVudEZvY3VzT3V0c2lkZSgpO1xuICAgIH1cbn1cbiJdfQ==","import { booleanAttribute, Directive, ElementRef, inject, Input, input, NgZone, TemplateRef } from '@angular/core';\nimport { ESCAPE, injectDocument } from '@radix-ng/primitives/core';\nimport { RdxNavigationMenuItemDirective } from './navigation-menu-item.directive';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport { getMotionAttribute, makeContentId, makeTriggerId } from './utils';\nimport * as i0 from \"@angular/core\";\nexport class RdxNavigationMenuContentDirective {\n constructor() {\n this.elementRef = inject(ElementRef);\n this.ngZone = inject(NgZone);\n this.template = inject(TemplateRef);\n this.document = injectDocument();\n this.item = inject(RdxNavigationMenuItemDirective);\n this.context = injectNavigationMenu();\n /**\n * Used to keep the content rendered and available in the DOM, even when closed.\n * Useful for animations or SEO.\n * @default false\n */\n this.forceMount = input(false, ...(ngDevMode ? [{ debugName: \"forceMount\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n /** @ignore */\n this.contentId = makeContentId(this.context.baseId, this.item.value());\n /** @ignore */\n this.triggerId = makeTriggerId(this.context.baseId, this.item.value());\n this.escapeHandler = null;\n }\n set rdxNavigationMenuContent(value) {\n // structural directive requires this input even if unused\n }\n /** @ignore */\n ngOnInit() {\n this.item.contentRef.set(this.elementRef.nativeElement);\n // register template with viewport in root menu via context\n if (isRootNavigationMenu(this.context) && this.context.onViewportContentChange) {\n this.context.onViewportContentChange(this.item.value(), {\n ref: this.elementRef,\n templateRef: this.template,\n forceMount: this.forceMount(),\n value: this.item.value(),\n getMotionAttribute: this.getMotionAttribute.bind(this),\n additionalAttrs: {\n id: this.contentId,\n 'aria-labelledby': this.triggerId,\n role: 'menu'\n }\n });\n }\n // add Escape key handler\n this.escapeHandler = (event) => {\n if (event.key === ESCAPE && this.context.value() === this.item.value()) {\n // mark that this close was triggered by Escape\n this.item.wasEscapeCloseRef.set(true);\n // close the content\n if (this.context.onItemDismiss) {\n this.context.onItemDismiss();\n }\n // refocus the trigger\n setTimeout(() => {\n const trigger = this.item.triggerRef();\n if (trigger)\n trigger.focus();\n }, 0);\n event.preventDefault();\n event.stopPropagation();\n }\n };\n this.ngZone.runOutsideAngular(() => {\n if (this.escapeHandler) {\n this.document.addEventListener('keydown', this.escapeHandler);\n }\n });\n }\n /** @ignore */\n ngOnDestroy() {\n // unregister from viewport\n if (isRootNavigationMenu(this.context) && this.context.onViewportContentRemove) {\n this.context.onViewportContentRemove(this.item.value());\n }\n // remove escape key handler\n if (this.escapeHandler) {\n this.document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = null;\n }\n }\n /** @ignore - Compute motion attribute for animations */\n getMotionAttribute() {\n if (!isRootNavigationMenu(this.context))\n return null;\n const itemValues = Array.from(this.context.viewportContent?.() ?? new Map()).map(([value]) => value);\n return getMotionAttribute(this.context.value(), this.context.previousValue(), this.item.value(), itemValues, this.context.dir);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: RdxNavigationMenuContentDirective, isStandalone: true, selector: \"[rdxNavigationMenuContent]\", inputs: { rdxNavigationMenuContent: { classPropertyName: \"rdxNavigationMenuContent\", publicName: \"rdxNavigationMenuContent\", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, forceMount: { classPropertyName: \"forceMount\", publicName: \"forceMount\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuContentDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenuContent]'\n }]\n }], propDecorators: { rdxNavigationMenuContent: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LWNvbnRlbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9uYXZpZ2F0aW9uLW1lbnUvc3JjL25hdmlnYXRpb24tbWVudS1jb250ZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUdOLFdBQVcsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUszRSxNQUFNLE9BQU8saUNBQWlDO0lBSDlDO1FBSXFCLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLGFBQVEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUM1QixTQUFJLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFPbEQ7Ozs7V0FJRztRQUNNLGVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyw4Q0FBSSxTQUFTLEVBQUUsZ0JBQWdCLE9BQTdCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLEdBQUMs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QkFEM0IsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgaW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFU0NBUEUsIGluamVjdERvY3VtZW50IH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvY29yZSc7XG5pbXBvcnQgeyBSZHhOYXZpZ2F0aW9uTWVudUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpbmplY3ROYXZpZ2F0aW9uTWVudSwgaXNSb290TmF2aWdhdGlvbk1lbnUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS50b2tlbic7XG5pbXBvcnQgeyBnZXRNb3Rpb25BdHRyaWJ1dGUsIG1ha2VDb250ZW50SWQsIG1ha2VUcmlnZ2VySWQgfSBmcm9tICcuL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4TmF2aWdhdGlvbk1lbnVDb250ZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgUmR4TmF2aWdhdGlvbk1lbnVDb250ZW50RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGUgPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3REb2N1bWVudCgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXRlbSA9IGluamVjdChSZHhOYXZpZ2F0aW9uTWVudUl0ZW1EaXJlY3RpdmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dCA9IGluamVjdE5hdmlnYXRpb25NZW51KCk7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgcmR4TmF2aWdhdGlvbk1lbnVDb250ZW50KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIC8vIHN0cnVjdHVyYWwgZGlyZWN0aXZlIHJlcXVpcmVzIHRoaXMgaW5wdXQgZXZlbiBpZiB1bnVzZWRcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGtlZXAgdGhlIGNvbnRlbnQgcmVuZGVyZWQgYW5kIGF2YWlsYWJsZSBpbiB0aGUgRE9NLCBldmVuIHdoZW4gY2xvc2VkLlxuICAgICAqIFVzZWZ1bCBmb3IgYW5pbWF0aW9ucyBvciBTRU8uXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBmb3JjZU1vdW50ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBjb250ZW50SWQgPSBtYWtlQ29udGVudElkKHRoaXMuY29udGV4dC5iYXNlSWQsIHRoaXMuaXRlbS52YWx1ZSgpKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHRyaWdnZXJJZCA9IG1ha2VUcmlnZ2VySWQodGhpcy5jb250ZXh0LmJhc2VJZCwgdGhpcy5pdGVtLnZhbHVlKCkpO1xuXG4gICAgcHJpdmF0ZSBlc2NhcGVIYW5kbGVyOiAoKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLml0ZW0uY29udGVudFJlZi5zZXQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIC8vIHJlZ2lzdGVyIHRlbXBsYXRlIHdpdGggdmlld3BvcnQgaW4gcm9vdCBtZW51IHZpYSBjb250ZXh0XG4gICAgICAgIGlmIChpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpICYmIHRoaXMuY29udGV4dC5vblZpZXdwb3J0Q29udGVudENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm9uVmlld3BvcnRDb250ZW50Q2hhbmdlKHRoaXMuaXRlbS52YWx1ZSgpLCB7XG4gICAgICAgICAgICAgICAgcmVmOiB0aGlzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6IHRoaXMudGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgZm9yY2VNb3VudDogdGhpcy5mb3JjZU1vdW50KCksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaXRlbS52YWx1ZSgpLFxuICAgICAgICAgICAgICAgIGdldE1vdGlvbkF0dHJpYnV0ZTogdGhpcy5nZXRNb3Rpb25BdHRyaWJ1dGUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuY29udGVudElkLFxuICAgICAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogdGhpcy50cmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIHJvbGU6ICdtZW51J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIEVzY2FwZSBrZXkgaGFuZGxlclxuICAgICAgICB0aGlzLmVzY2FwZUhhbmRsZXIgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IEVTQ0FQRSAmJiB0aGlzLmNvbnRleHQudmFsdWUoKSA9PT0gdGhpcy5pdGVtLnZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIHRoYXQgdGhpcyBjbG9zZSB3YXMgdHJpZ2dlcmVkIGJ5IEVzY2FwZVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbS53YXNFc2NhcGVDbG9zZVJlZi5zZXQodHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgY29udGVudFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQub25JdGVtRGlzbWlzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQub25JdGVtRGlzbWlzcygpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHJlZm9jdXMgdGhlIHRyaWdnZXJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IHRoaXMuaXRlbS50cmlnZ2VyUmVmKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cmlnZ2VyKSB0cmlnZ2VyLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVzY2FwZUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmVzY2FwZUhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyB1bnJlZ2lzdGVyIGZyb20gdmlld3BvcnRcbiAgICAgICAgaWYgKGlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkgJiYgdGhpcy5jb250ZXh0Lm9uVmlld3BvcnRDb250ZW50UmVtb3ZlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQub25WaWV3cG9ydENvbnRlbnRSZW1vdmUodGhpcy5pdGVtLnZhbHVlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIGVzY2FwZSBrZXkgaGFuZGxlclxuICAgICAgICBpZiAodGhpcy5lc2NhcGVIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmVzY2FwZUhhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5lc2NhcGVIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaWdub3JlIC0gQ29tcHV0ZSBtb3Rpb24gYXR0cmlidXRlIGZvciBhbmltYXRpb25zICovXG4gICAgZ2V0TW90aW9uQXR0cmlidXRlKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAoIWlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1WYWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuY29udGV4dC52aWV3cG9ydENvbnRlbnQ/LigpID8/IG5ldyBNYXAoKSkubWFwKChbdmFsdWVdKSA9PiB2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIGdldE1vdGlvbkF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC52YWx1ZSgpLFxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnByZXZpb3VzVmFsdWUoKSxcbiAgICAgICAgICAgIHRoaXMuaXRlbS52YWx1ZSgpLFxuICAgICAgICAgICAgaXRlbVZhbHVlcyxcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaXJcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input, Renderer2, runInInjectionContext, signal, untracked } from '@angular/core';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport * as i0 from \"@angular/core\";\nexport class RdxNavigationMenuIndicatorDirective {\n constructor() {\n this.context = injectNavigationMenu();\n this.elementRef = inject(ElementRef);\n this.renderer = inject(Renderer2);\n /**\n * Used to keep the indicator rendered and available in the DOM, even when hidden.\n * Useful for animations.\n * @default false\n */\n this.forceMount = input(false, ...(ngDevMode ? [{ debugName: \"forceMount\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n /** @ignore */\n this._position = signal(null, ...(ngDevMode ? [{ debugName: \"_position\" }] : []));\n /** @ignore */\n this._activeTrigger = signal(null, ...(ngDevMode ? [{ debugName: \"_activeTrigger\" }] : []));\n /** @ignore */\n this._resizeObserver = new ResizeObserver(() => this.updatePosition());\n this.isVisible = computed(() => Boolean(this.context.value() || this.forceMount()), ...(ngDevMode ? [{ debugName: \"isVisible\" }] : []));\n // set up effect for tracking active trigger and position\n effect(() => {\n // this effect runs when the current value changes\n const value = this.context.value();\n untracked(() => {\n if (value && isRootNavigationMenu(this.context)) {\n this.findAndSetActiveTrigger();\n }\n });\n });\n // initialize observers for position tracking\n runInInjectionContext(this.context, () => {\n if (isRootNavigationMenu(this.context) && this.context.indicatorTrack) {\n const track = this.context.indicatorTrack();\n if (track) {\n // observe size changes on the track\n this._resizeObserver.observe(track);\n }\n // initial position update if menu is open\n if (this.context.value()) {\n setTimeout(() => this.findAndSetActiveTrigger(), 0);\n }\n }\n });\n }\n /** @ignore */\n ngOnDestroy() {\n this._resizeObserver.disconnect();\n }\n /** @ignore */\n findAndSetActiveTrigger() {\n if (!isRootNavigationMenu(this.context) || !this.context.indicatorTrack)\n return;\n const track = this.context.indicatorTrack();\n if (!track)\n return;\n // find all triggers within the track\n const triggers = Array.from(track.querySelectorAll('[rdxNavigationMenuTrigger]'));\n // find the active trigger based on the current menu value\n const activeTrigger = triggers.find((trigger) => {\n const item = trigger.closest('[rdxNavigationMenuItem]');\n if (!item)\n return false;\n const value = item.getAttribute('value');\n return value === this.context.value();\n });\n if (activeTrigger && activeTrigger !== this._activeTrigger()) {\n this._activeTrigger.set(activeTrigger);\n this.updatePosition();\n }\n }\n /** @ignore */\n updatePosition() {\n const trigger = this._activeTrigger();\n if (!trigger)\n return;\n const isHorizontal = this.context.orientation === 'horizontal';\n // calculate new position\n const newPosition = {\n size: isHorizontal ? trigger.offsetWidth : trigger.offsetHeight,\n offset: isHorizontal ? trigger.offsetLeft : trigger.offsetTop\n };\n // only update if position has changed\n if (JSON.stringify(newPosition) !== JSON.stringify(this._position())) {\n this._position.set(newPosition);\n // apply position styles\n const styles = isHorizontal\n ? {\n position: 'absolute',\n left: '0',\n width: `${newPosition.size}px`,\n transform: `translateX(${newPosition.offset}px)`\n }\n : {\n position: 'absolute',\n top: '0',\n height: `${newPosition.size}px`,\n transform: `translateY(${newPosition.offset}px)`\n };\n Object.entries(styles).forEach(([key, value]) => {\n this.renderer.setStyle(this.elementRef.nativeElement, key, value);\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: RdxNavigationMenuIndicatorDirective, isStandalone: true, selector: \"[rdxNavigationMenuIndicator]\", inputs: { forceMount: { classPropertyName: \"forceMount\", publicName: \"forceMount\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"aria-hidden\": \"true\" }, properties: { \"attr.data-state\": \"isVisible() ? \\\"visible\\\" : \\\"hidden\\\"\", \"attr.data-orientation\": \"context.orientation\", \"style.display\": \"isVisible() ? null : \\\"none\\\"\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuIndicatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenuIndicator]',\n host: {\n '[attr.data-state]': 'isVisible() ? \"visible\" : \"hidden\"',\n '[attr.data-orientation]': 'context.orientation',\n '[style.display]': 'isVisible() ? null : \"none\"',\n 'aria-hidden': 'true'\n }\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LWluZGljYXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL25hdmlnYXRpb24tbWVudS9zcmMvbmF2aWdhdGlvbi1tZW51LWluZGljYXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEVBQ1QscUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBV3JGLE1BQU0sT0FBTyxtQ0FBbUM7SUFxQjVDO1FBcEJpQixZQUFPLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUNqQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUM7Ozs7V0FJRztRQUNNLGVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyw4Q0FBSSxTQUFTLEVBQUUsZ0JBQWdCLE9BQTdCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLEdBQUMsQ0FBQztRQUVwRSxjQUFjO1FBQ0csY0FBUyxHQUFHLE1BQU0sQ0FBMEMsSUFBSSxxREFBQyxDQUFDO1FBQ25GLGNBQWM7UUFDRyxtQkFBYyxHQUFHLE1BQU0sQ0FBcUIsSUFBSSwwREFBQyxDQUFDO1FBQ25FLGNBQWM7UUFDRyxvQkFBZSxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRTFFLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENB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QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQzs4R0FySFEsbUNBQW1DO2tHQUFuQyxtQ0FBbUM7OzJGQUFuQyxtQ0FBbUM7a0JBVC9DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsSUFBSSxFQUFFO3dCQUNGLG1CQUFtQixFQUFFLG9DQUFvQzt3QkFDekQseUJBQXlCLEVBQUUscUJBQXFCO3dCQUNoRCxpQkFBaUIsRUFBRSw2QkFBNkI7d0JBQ2hELGFBQWEsRUFBRSxNQUFNO3FCQUN4QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBjb21wdXRlZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBSZW5kZXJlcjIsXG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3ROYXZpZ2F0aW9uTWVudSwgaXNSb290TmF2aWdhdGlvbk1lbnUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JkeE5hdmlnYXRpb25NZW51SW5kaWNhdG9yXScsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuZGF0YS1zdGF0ZV0nOiAnaXNWaXNpYmxlKCkgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCInLFxuICAgICAgICAnW2F0dHIuZGF0YS1vcmllbnRhdGlvbl0nOiAnY29udGV4dC5vcmllbnRhdGlvbicsXG4gICAgICAgICdbc3R5bGUuZGlzcGxheV0nOiAnaXNWaXNpYmxlKCkgPyBudWxsIDogXCJub25lXCInLFxuICAgICAgICAnYXJpYS1oaWRkZW4nOiAndHJ1ZSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeE5hdmlnYXRpb25NZW51SW5kaWNhdG9yRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3ROYXZpZ2F0aW9uTWVudSgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGtlZXAgdGhlIGluZGljYXRvciByZW5kZXJlZCBhbmQgYXZhaWxhYmxlIGluIHRoZSBET00sIGV2ZW4gd2hlbiBoaWRkZW4uXG4gICAgICogVXNlZnVsIGZvciBhbmltYXRpb25zLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9yY2VNb3VudCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcG9zaXRpb24gPSBzaWduYWw8eyBzaXplOiBudW1iZXI7IG9mZnNldDogbnVtYmVyIH0gfCBudWxsPihudWxsKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVRyaWdnZXIgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSk7XG5cbiAgICByZWFkb25seSBpc1Zpc2libGUgPSBjb21wdXRlZCgoKSA9PiBCb29sZWFuKHRoaXMuY29udGV4dC52YWx1ZSgpIHx8IHRoaXMuZm9yY2VNb3VudCgpKSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gc2V0IHVwIGVmZmVjdCBmb3IgdHJhY2tpbmcgYWN0aXZlIHRyaWdnZXIgYW5kIHBvc2l0aW9uXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzIGVmZmVjdCBydW5zIHdoZW4gdGhlIGN1cnJlbnQgdmFsdWUgY2hhbmdlc1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHQudmFsdWUoKTtcblxuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRBbmRTZXRBY3RpdmVUcmlnZ2VyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGluaXRpYWxpemUgb2JzZXJ2ZXJzIGZvciBwb3NpdGlvbiB0cmFja2luZ1xuICAgICAgICBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5jb250ZXh0IGFzIGFueSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkgJiYgdGhpcy5jb250ZXh0LmluZGljYXRvclRyYWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2sgPSB0aGlzLmNvbnRleHQuaW5kaWNhdG9yVHJhY2soKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb2JzZXJ2ZSBzaXplIGNoYW5nZXMgb24gdGhlIHRyYWNrXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodHJhY2spO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWwgcG9zaXRpb24gdXBkYXRlIGlmIG1lbnUgaXMgb3BlblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQudmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZmluZEFuZFNldEFjdGl2ZVRyaWdnZXIoKSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGZpbmRBbmRTZXRBY3RpdmVUcmlnZ2VyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkgfHwgIXRoaXMuY29udGV4dC5pbmRpY2F0b3JUcmFjaykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRyYWNrID0gdGhpcy5jb250ZXh0LmluZGljYXRvclRyYWNrKCk7XG4gICAgICAgIGlmICghdHJhY2spIHJldHVybjtcblxuICAgICAgICAvLyBmaW5kIGFsbCB0cmlnZ2VycyB3aXRoaW4gdGhlIHRyYWNrXG4gICAgICAgIGNvbnN0IHRyaWdnZXJzID0gQXJyYXkuZnJvbSh0cmFjay5xdWVyeVNlbGVjdG9yQWxsKCdbcmR4TmF2aWdhdGlvbk1lbnVUcmlnZ2VyXScpKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gICAgICAgIC8vIGZpbmQgdGhlIGFjdGl2ZSB0cmlnZ2VyIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1lbnUgdmFsdWVcbiAgICAgICAgY29uc3QgYWN0aXZlVHJpZ2dlciA9IHRyaWdnZXJzLmZpbmQoKHRyaWdnZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0cmlnZ2VyLmNsb3Nlc3QoJ1tyZHhOYXZpZ2F0aW9uTWVudUl0ZW1dJyk7XG4gICAgICAgICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGhpcy5jb250ZXh0LnZhbHVlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhY3RpdmVUcmlnZ2VyICYmIGFjdGl2ZVRyaWdnZXIgIT09IHRoaXMuX2FjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlVHJpZ2dlci5zZXQoYWN0aXZlVHJpZ2dlcik7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgdXBkYXRlUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLl9hY3RpdmVUcmlnZ2VyKCk7XG4gICAgICAgIGlmICghdHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMuY29udGV4dC5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBuZXcgcG9zaXRpb25cbiAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSB7XG4gICAgICAgICAgICBzaXplOiBpc0hvcml6b250YWwgPyB0cmlnZ2VyLm9mZnNldFdpZHRoIDogdHJpZ2dlci5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICBvZmZzZXQ6IGlzSG9yaXpvbnRhbCA/IHRyaWdnZXIub2Zmc2V0TGVmdCA6IHRyaWdnZXIub2Zmc2V0VG9wXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gb25seSB1cGRhdGUgaWYgcG9zaXRpb24gaGFzIGNoYW5nZWRcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KG5ld1Bvc2l0aW9uKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5fcG9zaXRpb24oKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uLnNldChuZXdQb3NpdGlvbik7XG5cbiAgICAgICAgICAgIC8vIGFwcGx5IHBvc2l0aW9uIHN0eWxlc1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzID0gaXNIb3Jpem9udGFsXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgbGVmdDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHtuZXdQb3NpdGlvbi5zaXplfXB4YCxcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKCR7bmV3UG9zaXRpb24ub2Zmc2V0fXB4KWBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICB0b3A6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGAke25ld1Bvc2l0aW9uLnNpemV9cHhgLFxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogYHRyYW5zbGF0ZVkoJHtuZXdQb3NpdGlvbi5vZmZzZXR9cHgpYFxuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19","import { booleanAttribute, Directive, ElementRef, inject, input } from '@angular/core';\nimport { ENTER, SPACE } from '@radix-ng/primitives/core';\nimport { RdxRovingFocusItemDirective } from '@radix-ng/primitives/roving-focus';\nimport { RdxNavigationMenuFocusableOption } from './navigation-menu.types';\nimport { generateId } from './utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@radix-ng/primitives/roving-focus\";\nconst LINK_SELECT = 'navigationMenu.linkSelect';\nconst ROOT_CONTENT_DISMISS = 'navigationMenu.rootContentDismiss';\nexport class RdxNavigationMenuLinkDirective extends RdxNavigationMenuFocusableOption {\n constructor() {\n super(...arguments);\n this.rovingFocusItem = inject(RdxRovingFocusItemDirective, { self: true });\n this.uniqueId = generateId();\n this.active = input(false, ...(ngDevMode ? [{ debugName: \"active\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.onSelect = input(...(ngDevMode ? [undefined, { debugName: \"onSelect\" }] : []));\n this.elementRef = inject(ElementRef);\n }\n ngOnInit() {\n this.rovingFocusItem.setTabStopId(this.elementRef.nativeElement.id || `link-${this.uniqueId}`);\n }\n focus() {\n this.elementRef.nativeElement.focus();\n }\n onClick(event) {\n const target = event.target;\n // dispatch link select event\n const linkSelectEvent = new CustomEvent(LINK_SELECT, {\n bubbles: true,\n cancelable: true\n });\n // add one-time listener for onSelect handler\n const onSelect = this.onSelect();\n if (onSelect) {\n target.addEventListener(LINK_SELECT, onSelect, { once: true });\n }\n // dispatch event\n target.dispatchEvent(linkSelectEvent);\n // if not prevented and not meta key, dismiss content\n if (!linkSelectEvent.defaultPrevented && !event.metaKey) {\n const dismissEvent = new CustomEvent(ROOT_CONTENT_DISMISS, {\n bubbles: true,\n cancelable: true\n });\n target.dispatchEvent(dismissEvent);\n }\n }\n onKeydown(event) {\n // activate link on Enter or Space\n if (event.key === ENTER || event.key === SPACE) {\n // prevent default behavior like scrolling (Space) or form submission (Enter) BEFORE simulating the click.\n event.preventDefault();\n // simulate a click event on the link element itself\n const clickEvent = new MouseEvent('click', { bubbles: true, cancelable: true });\n this.elementRef.nativeElement.dispatchEvent(clickEvent);\n return;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuLinkDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: RdxNavigationMenuLinkDirective, isStandalone: true, selector: \"[rdxNavigationMenuLink]\", inputs: { active: { classPropertyName: \"active\", publicName: \"active\", isSignal: true, isRequired: false, transformFunction: null }, onSelect: { classPropertyName: \"onSelect\", publicName: \"onSelect\", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { \"click\": \"onClick($event)\", \"keydown\": \"onKeydown($event)\" }, properties: { \"attr.data-active\": \"active() ? \\\"\\\" : undefined\", \"attr.aria-current\": \"active() ? \\\"page\\\" : undefined\" } }, providers: [{ provide: RdxNavigationMenuFocusableOption, useExisting: RdxNavigationMenuLinkDirective }], usesInheritance: true, hostDirectives: [{ directive: i1.RdxRovingFocusItemDirective, inputs: [\"focusable\", \"focusable\"] }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuLinkDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenuLink]',\n hostDirectives: [{ directive: RdxRovingFocusItemDirective, inputs: ['focusable'] }],\n host: {\n '[attr.data-active]': 'active() ? \"\" : undefined',\n '[attr.aria-current]': 'active() ? \"page\" : undefined',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)'\n },\n providers: [{ provide: RdxNavigationMenuFocusableOption, useExisting: RdxNavigationMenuLinkDirective }]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9uYXZpZ2F0aW9uLW1lbnUvc3JjL25hdmlnYXRpb24tbWVudS1saW5rLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7O0FBRXJDLE1BQU0sV0FBVyxHQUFHLDJCQUEyQixDQUFDO0FBQ2hELE1BQU0sb0JBQW9CLEdBQUcsbUNBQW1DLENBQUM7QUFhakUsTUFBTSxPQUFPLDhCQUErQixTQUFRLGdDQUFnQztJQVhwRjs7UUFZcUIsb0JBQWUsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxhQUFRLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDaEMsV0FBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLDBDQUFJLFNBQVMsRUFBRSxnQkFBZ0IsT0FBN0IsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBQyxDQUFDO1FBQ3ZELGFBQVEsR0FBRyxLQUFLLDhEQUEwQixDQUFDO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7S0FtRDVDO0lBakRHLFFBQVE7UUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRVEsS0FBSztRQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBaUI7UUFDckIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFFM0MsNkJBQTZCO1FBQzdCLE1BQU0sZUFBZSxHQUFHLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUNqRCxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztRQUVILDZDQUE2QztRQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixNQUFNLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXRDLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RELE1BQU0sWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLG9CQUFvQixFQUFFO2dCQUN2RCxPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsSUFBSTthQUNuQixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW9CO1FBQzFCLGtDQUFrQztRQUNsQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0MsMEdBQTBHO1lBQzFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV2QixvREFBb0Q7WUFDcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFeEQsT0FBTztRQUNYLENBQUM7SUFDTCxDQUFDOzhHQXZEUSw4QkFBOEI7a0dBQTlCLDhCQUE4Qiw4aEJBRjVCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsV0FBVyxFQUFFLDhCQUE4QixFQUFFLENBQUM7OzJGQUU5Riw4QkFBOEI7a0JBWDFDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsY0FBYyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDbkYsSUFBSSxFQUFFO3dCQUNGLG9CQUFvQixFQUFFLDJCQUEyQjt3QkFDakQscUJBQXFCLEVBQUUsK0JBQStCO3dCQUN0RCxTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixXQUFXLEVBQUUsbUJBQW1CO3FCQUNuQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxXQUFXLGdDQUFnQyxFQUFFLENBQUM7aUJBQzFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYm9vbGVhbkF0dHJpYnV0ZSwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVOVEVSLCBTUEFDRSB9IGZyb20gJ0ByYWRpeC1uZy9wcmltaXRpdmVzL2NvcmUnO1xuaW1wb3J0IHsgUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvcm92aW5nLWZvY3VzJztcbmltcG9ydCB7IFJkeE5hdmlnYXRpb25NZW51Rm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLW1lbnUudHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBMSU5LX1NFTEVDVCA9ICduYXZpZ2F0aW9uTWVudS5saW5rU2VsZWN0JztcbmNvbnN0IFJPT1RfQ09OVEVOVF9ESVNNSVNTID0gJ25hdmlnYXRpb25NZW51LnJvb3RDb250ZW50RGlzbWlzcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JkeE5hdmlnYXRpb25NZW51TGlua10nLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbeyBkaXJlY3RpdmU6IFJkeFJvdmluZ0ZvY3VzSXRlbURpcmVjdGl2ZSwgaW5wdXRzOiBbJ2ZvY3VzYWJsZSddIH1dLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmRhdGEtYWN0aXZlXSc6ICdhY3RpdmUoKSA/IFwiXCIgOiB1bmRlZmluZWQnLFxuICAgICAgICAnW2F0dHIuYXJpYS1jdXJyZW50XSc6ICdhY3RpdmUoKSA/IFwicGFnZVwiIDogdW5kZWZpbmVkJyxcbiAgICAgICAgJyhjbGljayknOiAnb25DbGljaygkZXZlbnQpJyxcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleWRvd24oJGV2ZW50KSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogUmR4TmF2aWdhdGlvbk1lbnVGb2N1c2FibGVPcHRpb24sIHVzZUV4aXN0aW5nOiBSZHhOYXZpZ2F0aW9uTWVudUxpbmtEaXJlY3RpdmUgfV1cbn0pXG5leHBvcnQgY2xhc3MgUmR4TmF2aWdhdGlvbk1lbnVMaW5rRGlyZWN0aXZlIGV4dGVuZHMgUmR4TmF2aWdhdGlvbk1lbnVGb2N1c2FibGVPcHRpb24gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm92aW5nRm9jdXNJdGVtID0gaW5qZWN0KFJkeFJvdmluZ0ZvY3VzSXRlbURpcmVjdGl2ZSwgeyBzZWxmOiB0cnVlIH0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdW5pcXVlSWQgPSBnZW5lcmF0ZUlkKCk7XG4gICAgcmVhZG9ubHkgYWN0aXZlID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICAgIHJlYWRvbmx5IG9uU2VsZWN0ID0gaW5wdXQ8KGV2ZW50OiBFdmVudCkgPT4gdm9pZD4oKTtcbiAgICByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm92aW5nRm9jdXNJdGVtLnNldFRhYlN0b3BJZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pZCB8fCBgbGluay0ke3RoaXMudW5pcXVlSWR9YCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgLy8gZGlzcGF0Y2ggbGluayBzZWxlY3QgZXZlbnRcbiAgICAgICAgY29uc3QgbGlua1NlbGVjdEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KExJTktfU0VMRUNULCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBhZGQgb25lLXRpbWUgbGlzdGVuZXIgZm9yIG9uU2VsZWN0IGhhbmRsZXJcbiAgICAgICAgY29uc3Qgb25TZWxlY3QgPSB0aGlzLm9uU2VsZWN0KCk7XG4gICAgICAgIGlmIChvblNlbGVjdCkge1xuICAgICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoTElOS19TRUxFQ1QsIG9uU2VsZWN0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkaXNwYXRjaCBldmVudFxuICAgICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChsaW5rU2VsZWN0RXZlbnQpO1xuXG4gICAgICAgIC8vIGlmIG5vdCBwcmV2ZW50ZWQgYW5kIG5vdCBtZXRhIGtleSwgZGlzbWlzcyBjb250ZW50XG4gICAgICAgIGlmICghbGlua1NlbGVjdEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgIWV2ZW50Lm1ldGFLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc21pc3NFdmVudCA9IG5ldyBDdXN0b21FdmVudChST09UX0NPTlRFTlRfRElTTUlTUywge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChkaXNtaXNzRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIGFjdGl2YXRlIGxpbmsgb24gRW50ZXIgb3IgU3BhY2VcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gRU5URVIgfHwgZXZlbnQua2V5ID09PSBTUEFDRSkge1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIGxpa2Ugc2Nyb2xsaW5nIChTcGFjZSkgb3IgZm9ybSBzdWJtaXNzaW9uIChFbnRlcikgQkVGT1JFIHNpbXVsYXRpbmcgdGhlIGNsaWNrLlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gc2ltdWxhdGUgYSBjbGljayBldmVudCBvbiB0aGUgbGluayBlbGVtZW50IGl0c2VsZlxuICAgICAgICAgICAgY29uc3QgY2xpY2tFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoY2xpY2tFdmVudCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { contentChildren, Directive, ElementRef, forwardRef, inject, Renderer2 } from '@angular/core';\nimport { TAB } from '@radix-ng/primitives/core';\nimport { RdxRovingFocusGroupDirective } from '@radix-ng/primitives/roving-focus'; // Import Roving Focus Group\nimport { RdxNavigationMenuItemDirective } from './navigation-menu-item.directive';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@radix-ng/primitives/roving-focus\";\nexport class RdxNavigationMenuListDirective {\n constructor() {\n this.context = injectNavigationMenu();\n this.elementRef = inject((ElementRef));\n this.renderer = inject(Renderer2);\n this.rovingFocusGroup = inject(RdxRovingFocusGroupDirective, { self: true });\n /**\n * @private\n * @ignore\n */\n this.items = contentChildren(forwardRef(() => RdxNavigationMenuItemDirective), ...(ngDevMode ? [{ debugName: \"items\", descendants: true }] : [{ descendants: true }]));\n }\n /**\n * @ignore\n */\n ngAfterContentInit() {\n const items = this.items();\n this.keyManager = new FocusKeyManager(items);\n if (this.context.orientation === 'horizontal') {\n this.keyManager.withHorizontalOrientation(this.context.dir || 'ltr');\n }\n else {\n this.keyManager.withVerticalOrientation();\n }\n }\n /**\n * @ignore\n */\n ngAfterViewInit() {\n this.rovingFocusGroup.setOrientation(this.context.orientation);\n this.rovingFocusGroup.setDir(this.context.dir);\n // looping typically only applies to the root menu bar\n if (isRootNavigationMenu(this.context)) {\n this.rovingFocusGroup.setLoop(this.context.loop ?? false);\n }\n else {\n this.rovingFocusGroup.setLoop(false);\n }\n if (isRootNavigationMenu(this.context) && this.context.onIndicatorTrackChange) {\n const listElement = this.elementRef.nativeElement;\n const parent = listElement.parentNode;\n // ensure parent exists and list hasn't already been wrapped\n if (parent && !listElement.parentElement?.hasAttribute('data-radix-navigation-menu-list-wrapper')) {\n // create a wrapper div with relative positioning\n const wrapper = this.renderer.createElement('div');\n this.renderer.setAttribute(wrapper, 'data-radix-navigation-menu-list-wrapper', ''); // Add marker\n this.renderer.setStyle(wrapper, 'position', 'relative');\n // insert the wrapper before the list element in the parent\n this.renderer.insertBefore(parent, wrapper, listElement);\n // move the list element inside the new wrapper\n this.renderer.appendChild(wrapper, listElement);\n // register the wrapper element as the track for the indicator positioning\n this.context.onIndicatorTrackChange(wrapper);\n }\n else if (listElement.parentElement?.hasAttribute('data-radix-navigation-menu-list-wrapper')) {\n // if wrapper somehow already exists, ensure context has the correct reference\n this.context.onIndicatorTrackChange(listElement.parentElement);\n }\n }\n }\n /**\n * @ignore\n */\n onKeydown(event) {\n if (!this.keyManager.activeItem) {\n this.keyManager.setFirstItemActive();\n }\n if (event.key === TAB && event.shiftKey) {\n if (this.keyManager.activeItemIndex === 0)\n return;\n this.keyManager.setPreviousItemActive();\n event.preventDefault();\n }\n else if (event.key === TAB) {\n const items = this.items();\n if (this.keyManager.activeItemIndex === items.length - 1) {\n return;\n }\n this.keyManager.setNextItemActive();\n event.preventDefault();\n }\n else {\n this.keyManager.onKeydown(event);\n }\n }\n /**\n * @ignore\n */\n setActiveItem(item) {\n this.keyManager.setActiveItem(item);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuListDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.3.3\", type: RdxNavigationMenuListDirective, isStandalone: true, selector: \"[rdxNavigationMenuList]\", host: { attributes: { \"role\": \"menubar\" }, listeners: { \"keydown\": \"onKeydown($event)\" } }, queries: [{ propertyName: \"items\", predicate: i0.forwardRef(() => RdxNavigationMenuItemDirective), descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.RdxRovingFocusGroupDirective }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuListDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenuList]',\n hostDirectives: [RdxRovingFocusGroupDirective],\n host: {\n role: 'menubar',\n '(keydown)': 'onKeydown($event)'\n }\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9uYXZpZ2F0aW9uLW1lbnUvc3JjL25hdmlnYXRpb24tbWVudS1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUdILGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyxDQUFDLDRCQUE0QjtBQUM5RyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBVXJGLE1BQU0sT0FBTyw4QkFBOEI7SUFSM0M7UUFTcUIsWUFBTyxHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFDakMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBQzdDLGFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IscUJBQWdCLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFekY7OztXQUdHO1FBQ00sVUFBSyxHQUFHLGVBQWUsQ0FDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDhCQUE4QixDQUFDLHlDQUM5QyxXQUFXLEVBQUUsSUFBSSxPQUFuQixFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FDeEIs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eyBGb2N1c0tleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBjb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVEFCIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvY29yZSc7XG5pbXBvcnQgeyBSZHhSb3ZpbmdGb2N1c0dyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvcm92aW5nLWZvY3VzJzsgLy8gSW1wb3J0IFJvdmluZyBGb2N1cyBHcm91cFxuaW1wb3J0IHsgUmR4TmF2aWdhdGlvbk1lbnVJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLW1lbnUtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgaW5qZWN0TmF2aWdhdGlvbk1lbnUsIGlzUm9vdE5hdmlnYXRpb25NZW51IH0gZnJvbSAnLi9uYXZpZ2F0aW9uLW1lbnUudG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhOYXZpZ2F0aW9uTWVudUxpc3RdJyxcbiAgICBob3N0RGlyZWN0aXZlczogW1JkeFJvdmluZ0ZvY3VzR3JvdXBEaXJlY3RpdmVdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgcm9sZTogJ21lbnViYXInLFxuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5ZG93bigkZXZlbnQpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgUmR4TmF2aWdhdGlvbk1lbnVMaXN0RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0ID0gaW5qZWN0TmF2aWdhdGlvbk1lbnUoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdmluZ0ZvY3VzR3JvdXAgPSBpbmplY3QoUmR4Um92aW5nRm9jdXNHcm91cERpcmVjdGl2ZSwgeyBzZWxmOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcmVhZG9ubHkgaXRlbXMgPSBjb250ZW50Q2hpbGRyZW4oXG4gICAgICAgIGZvcndhcmRSZWYoKCkgPT4gUmR4TmF2aWdhdGlvbk1lbnVJdGVtRGlyZWN0aXZlKSxcbiAgICAgICAgeyBkZXNjZW5kYW50czogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQga2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPFJkeE5hdmlnYXRpb25NZW51SXRlbURpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMoKTtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcihpdGVtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLmNvbnRleHQuZGlyIHx8ICdsdHInKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci53aXRoVmVydGljYWxPcmllbnRhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5yb3ZpbmdGb2N1c0dyb3VwLnNldE9yaWVudGF0aW9uKHRoaXMuY29udGV4dC5vcmllbnRhdGlvbik7XG4gICAgICAgIHRoaXMucm92aW5nRm9jdXNHcm91cC5zZXREaXIodGhpcy5jb250ZXh0LmRpcik7XG5cbiAgICAgICAgLy8gbG9vcGluZyB0eXBpY2FsbHkgb25seSBhcHBsaWVzIHRvIHRoZSByb290IG1lbnUgYmFyXG4gICAgICAgIGlmIChpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpKSB7XG4gICAgICAgICAgICB0aGlzLnJvdmluZ0ZvY3VzR3JvdXAuc2V0TG9vcCh0aGlzLmNvbnRleHQubG9vcCA/PyBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdmluZ0ZvY3VzR3JvdXAuc2V0TG9vcChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSAmJiB0aGlzLmNvbnRleHQub25JbmRpY2F0b3JUcmFja0NoYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgbGlzdEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGxpc3RFbGVtZW50LnBhcmVudE5vZGU7XG5cbiAgICAgICAgICAgIC8vIGVuc3VyZSBwYXJlbnQgZXhpc3RzIGFuZCBsaXN0IGhhc24ndCBhbHJlYWR5IGJlZW4gd3JhcHBlZFxuICAgICAgICAgICAgaWYgKHBhcmVudCAmJiAhbGlzdEVsZW1lbnQucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKCdkYXRhLXJhZGl4LW5hdmlnYXRpb24tbWVudS1saXN0LXdyYXBwZXInKSkge1xuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIHdyYXBwZXIgZGl2IHdpdGggcmVsYXRpdmUgcG9zaXRpb25pbmdcbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh3cmFwcGVyLCAnZGF0YS1yYWRpeC1uYXZpZ2F0aW9uLW1lbnUtbGlzdC13cmFwcGVyJywgJycpOyAvLyBBZGQgbWFya2VyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh3cmFwcGVyLCAncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcblxuICAgICAgICAgICAgICAgIC8vIGluc2VydCB0aGUgd3JhcHBlciBiZWZvcmUgdGhlIGxpc3QgZWxlbWVudCBpbiB0aGUgcGFyZW50XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUocGFyZW50LCB3cmFwcGVyLCBsaXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAvLyBtb3ZlIHRoZSBsaXN0IGVsZW1lbnQgaW5zaWRlIHRoZSBuZXcgd3JhcHBlclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQod3JhcHBlciwgbGlzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIHdyYXBwZXIgZWxlbWVudCBhcyB0aGUgdHJhY2sgZm9yIHRoZSBpbmRpY2F0b3IgcG9zaXRpb25pbmdcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQub25JbmRpY2F0b3JUcmFja0NoYW5nZSh3cmFwcGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdEVsZW1lbnQucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKCdkYXRhLXJhZGl4LW5hdmlnYXRpb24tbWVudS1saXN0LXdyYXBwZXInKSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdyYXBwZXIgc29tZWhvdyBhbHJlYWR5IGV4aXN0cywgZW5zdXJlIGNvbnRleHQgaGFzIHRoZSBjb3JyZWN0IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5vbkluZGljYXRvclRyYWNrQ2hhbmdlKGxpc3RFbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBUQUIgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gVEFCKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ID09PSBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldE5leHRJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgc2V0QWN0aXZlSXRlbShpdGVtOiBSZHhOYXZpZ2F0aW9uTWVudUl0ZW1EaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaXRlbSk7XG4gICAgfVxufVxuIl19","import { booleanAttribute, Directive, effect, ElementRef, inject, Input, numberAttribute, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectDocument, injectWindow } from '@radix-ng/primitives/core';\nimport { debounce, map, Subject, tap, timer } from 'rxjs';\nimport { provideNavigationMenuContext } from './navigation-menu.token';\nimport { generateId } from './utils';\nimport * as i0 from \"@angular/core\";\n// define action types for clearer intent\nexport var RdxNavigationMenuAction;\n(function (RdxNavigationMenuAction) {\n RdxNavigationMenuAction[\"OPEN\"] = \"open\";\n RdxNavigationMenuAction[\"CLOSE\"] = \"close\";\n})(RdxNavigationMenuAction || (RdxNavigationMenuAction = {}));\nexport class RdxNavigationMenuDirective {\n // State\n #value;\n #previousValue;\n #indicatorTrack;\n #viewport;\n #viewportContent;\n #rootNavigationMenu;\n #userDismissedByClick;\n #isOpenDelayed;\n // pointer tracking\n #isPointerOverContent;\n #isPointerOverTrigger;\n constructor() {\n this.elementRef = inject(ElementRef);\n this.document = injectDocument();\n this.window = injectWindow();\n // State\n this.#value = signal('', ...(ngDevMode ? [{ debugName: \"#value\" }] : []));\n this.#previousValue = signal('', ...(ngDevMode ? [{ debugName: \"#previousValue\" }] : []));\n this.baseId = `rdx-nav-menu-${generateId()}`;\n this.#indicatorTrack = signal(null, ...(ngDevMode ? [{ debugName: \"#indicatorTrack\" }] : []));\n this.#viewport = signal(null, ...(ngDevMode ? [{ debugName: \"#viewport\" }] : []));\n this.#viewportContent = signal(new Map(), ...(ngDevMode ? [{ debugName: \"#viewportContent\" }] : []));\n this.#rootNavigationMenu = signal(this.elementRef.nativeElement, ...(ngDevMode ? [{ debugName: \"#rootNavigationMenu\" }] : []));\n this.#userDismissedByClick = signal(false, ...(ngDevMode ? [{ debugName: \"#userDismissedByClick\" }] : []));\n this.userDismissedByClick = () => this.#userDismissedByClick();\n this.resetUserDismissed = () => this.#userDismissedByClick.set(false);\n // delay timers\n this.openTimerRef = 0;\n this.closeTimerRef = 0;\n this.skipDelayTimerRef = 0;\n this.recentlyActivatedTimerRef = 0;\n this.recentlyActivatedItem = signal(null, ...(ngDevMode ? [{ debugName: \"recentlyActivatedItem\" }] : []));\n this.#isOpenDelayed = signal(true, ...(ngDevMode ? [{ debugName: \"#isOpenDelayed\" }] : []));\n // pointer tracking\n this.#isPointerOverContent = signal(false, ...(ngDevMode ? [{ debugName: \"#isPointerOverContent\" }] : []));\n this.#isPointerOverTrigger = signal(false, ...(ngDevMode ? [{ debugName: \"#isPointerOverTrigger\" }] : []));\n this.documentMouseLeaveHandler = null;\n this.actionSubject$ = new Subject();\n this.orientation = 'horizontal';\n this.dir = 'ltr';\n this.clickIgnoreDuration = 250;\n this.delayDuration = 200;\n this.skipDelayDuration = 300;\n this.loop = false;\n this.cssAnimation = false;\n this.cssOpeningAnimation = false;\n this.cssClosingAnimation = false;\n this.isRootMenu = true;\n this.cssAnimationStatus = signal(null, ...(ngDevMode ? [{ debugName: \"cssAnimationStatus\" }] : []));\n // exposed state as functions for the token\n this.value = () => this.#value();\n this.previousValue = () => this.#previousValue();\n this.rootNavigationMenu = () => this.#rootNavigationMenu();\n this.indicatorTrack = () => this.#indicatorTrack();\n this.viewport = () => this.#viewport();\n this.viewportContent = () => this.#viewportContent();\n // exposed pointer state\n this.setTriggerPointerState = (isOver) => this.#isPointerOverTrigger.set(isOver);\n this.setContentPointerState = (isOver) => this.#isPointerOverContent.set(isOver);\n this.isPointerInSystem = () => this.#isPointerOverContent() || this.#isPointerOverTrigger();\n // exposed animation state\n this.getCssAnimation = () => this.cssAnimation;\n this.getCssOpeningAnimation = () => this.cssOpeningAnimation;\n this.getCssClosingAnimation = () => this.cssClosingAnimation;\n effect(() => {\n const value = this.#value();\n if (value) {\n this.window.clearTimeout(this.skipDelayTimerRef);\n if (this.skipDelayDuration > 0) {\n this.#isOpenDelayed.set(false);\n }\n }\n else {\n // menu is closed, start skip delay timer\n this.window.clearTimeout(this.skipDelayTimerRef);\n this.skipDelayTimerRef = this.window.setTimeout(() => {\n this.#isOpenDelayed.set(true);\n }, this.skipDelayDuration);\n }\n });\n this.actionSubject$\n .pipe(map((config) => {\n // different delays for open vs close (better ux)\n const duration = config.action === RdxNavigationMenuAction.OPEN ? this.delayDuration : 150;\n return { ...config, duration };\n }), debounce((config) => timer(config.duration)), tap((config) => {\n switch (config.action) {\n case RdxNavigationMenuAction.OPEN:\n if (config.itemValue) {\n this.setValue(config.itemValue);\n }\n break;\n case RdxNavigationMenuAction.CLOSE:\n // only close if not hovering over any part of the system\n if (!this.isPointerInSystem()) {\n this.setValue('');\n }\n break;\n }\n }), takeUntilDestroyed())\n .subscribe();\n // set up document mouseleave handler to close menu when mouse leaves window\n this.documentMouseLeaveHandler = () => this.handleClose();\n this.document.addEventListener('mouseleave', this.documentMouseLeaveHandler);\n }\n ngOnDestroy() {\n this.window.clearTimeout(this.openTimerRef);\n this.window.clearTimeout(this.closeTimerRef);\n this.window.clearTimeout(this.skipDelayTimerRef);\n this.window.clearTimeout(this.recentlyActivatedTimerRef);\n // clean up document event listener\n if (this.documentMouseLeaveHandler) {\n document.removeEventListener('mouseleave', this.documentMouseLeaveHandler);\n }\n }\n onIndicatorTrackChange(track) {\n this.#indicatorTrack.set(track);\n }\n onViewportChange(viewport) {\n this.#viewport.set(viewport);\n }\n onTriggerEnter(itemValue) {\n // skip opening if user explicitly dismissed this menu\n if (this.#userDismissedByClick() && itemValue === this.#previousValue()) {\n return;\n }\n this.window.clearTimeout(this.openTimerRef);\n this.window.clearTimeout(this.closeTimerRef);\n if (this.#isOpenDelayed()) {\n this.handleDelayedOpen(itemValue);\n }\n else {\n this.handleOpen(itemValue);\n }\n }\n onTriggerLeave() {\n this.window.clearTimeout(this.openTimerRef);\n this.startCloseTimer();\n }\n onContentEnter() {\n this.window.clearTimeout(this.closeTimerRef);\n }\n onContentLeave() {\n this.startCloseTimer();\n }\n handleClose() {\n this.actionSubject$.next({ action: RdxNavigationMenuAction.CLOSE });\n }\n onItemSelect(itemValue) {\n const wasOpen = this.#value() === itemValue;\n // if this item just opened and the click would close it,\n // ignore the click during the brief protection window\n if (this.recentlyActivatedItem() === itemValue && wasOpen) {\n return;\n }\n const newValue = wasOpen ? '' : itemValue;\n // if user is closing an open menu, mark as user-dismissed\n if (wasOpen) {\n this.#userDismissedByClick.set(true);\n }\n else {\n this.#userDismissedByClick.set(false);\n }\n this.setValue(newValue);\n }\n onItemDismiss() {\n this.setValue('');\n }\n onViewportContentChange(contentValue, contentData) {\n const newMap = new Map(this.#viewportContent());\n newMap.set(contentValue, contentData);\n this.#viewportContent.set(newMap);\n }\n onViewportContentRemove(contentValue) {\n const newMap = new Map(this.#viewportContent());\n if (newMap.has(contentValue)) {\n newMap.delete(contentValue);\n this.#viewportContent.set(newMap);\n }\n }\n setValue(value) {\n const previousValue = this.#value();\n if (value && value !== previousValue) {\n this.window.clearTimeout(this.recentlyActivatedTimerRef);\n this.recentlyActivatedItem.set(value);\n this.recentlyActivatedTimerRef = this.window.setTimeout(() => {\n this.recentlyActivatedItem.set(null);\n }, this.clickIgnoreDuration);\n }\n // store previous value before changing\n this.#previousValue.set(previousValue);\n this.#value.set(value);\n }\n startCloseTimer() {\n this.window.clearTimeout(this.closeTimerRef);\n this.closeTimerRef = this.window.setTimeout(() => {\n // only close if not hovering over any part of the system\n if (!this.isPointerInSystem()) {\n this.setValue('');\n }\n }, 150);\n }\n handleOpen(itemValue) {\n this.window.clearTimeout(this.closeTimerRef);\n this.setValue(itemValue);\n }\n handleDelayedOpen(itemValue) {\n const isOpenItem = this.#value() === itemValue;\n if (isOpenItem) {\n // if the item is already open, clear close timer\n this.window.clearTimeout(this.closeTimerRef);\n }\n else {\n // otherwise, start the open timer\n this.openTimerRef = this.window.setTimeout(() => {\n this.window.clearTimeout(this.closeTimerRef);\n this.setValue(itemValue);\n }, this.delayDuration);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.3.3\", type: RdxNavigationMenuDirective, isStandalone: true, selector: \"[rdxNavigationMenu]\", inputs: { orientation: \"orientation\", dir: \"dir\", clickIgnoreDuration: [\"clickIgnoreDuration\", \"clickIgnoreDuration\", numberAttribute], delayDuration: [\"delayDuration\", \"delayDuration\", numberAttribute], skipDelayDuration: [\"skipDelayDuration\", \"skipDelayDuration\", numberAttribute], loop: [\"loop\", \"loop\", booleanAttribute], cssAnimation: [\"cssAnimation\", \"cssAnimation\", booleanAttribute], cssOpeningAnimation: [\"cssOpeningAnimation\", \"cssOpeningAnimation\", booleanAttribute], cssClosingAnimation: [\"cssClosingAnimation\", \"cssClosingAnimation\", booleanAttribute] }, host: { attributes: { \"aria-label\": \"Main\", \"role\": \"navigation\" }, properties: { \"attr.data-orientation\": \"orientation\", \"attr.dir\": \"dir\" } }, providers: [provideNavigationMenuContext(RdxNavigationMenuDirective)], exportAs: [\"rdxNavigationMenu\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenu]',\n providers: [provideNavigationMenuContext(RdxNavigationMenuDirective)],\n host: {\n '[attr.data-orientation]': 'orientation',\n '[attr.dir]': 'dir',\n 'aria-label': 'Main',\n role: 'navigation'\n },\n exportAs: 'rdxNavigationMenu'\n }]\n }], ctorParameters: () => [], propDecorators: { orientation: [{\n type: Input\n }], dir: [{\n type: Input\n }], clickIgnoreDuration: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], delayDuration: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], skipDelayDuration: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], loop: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], cssAnimation: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], cssOpeningAnimation: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], cssClosingAnimation: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvbmF2aWdhdGlvbi1tZW51L3NyYy9uYXZpZ2F0aW9uLW1lbnUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBRWYsTUFBTSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFFckMseUNBQXlDO0FBQ3pDLE1BQU0sQ0FBTixJQUFZLHVCQUdYO0FBSEQsV0FBWSx1QkFBdUI7SUFDL0Isd0NBQWEsQ0FBQTtJQUNiLDBDQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUhXLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFHbEM7QUFhRCxNQUFNLE9BQU8sMEJBQTBCO0lBS25DLFFBQVE7SUFDQyxNQUFNLENBQXNCO0lBQzVCLGNBQWMsQ0FBc0I7SUFFcEMsZUFBZSxDQUFvQztJQUNuRCxTQUFTLENBQW9DO0lBQzdDLGdCQUFnQixDQUF1QztJQUN2RCxtQkFBbUIsQ0FBNkQ7SUFFaEYscUJBQXFCLENBQWlCO0lBVXRDLGNBQWMsQ0FBZ0I7SUFFdkMsbUJBQW1CO0lBQ1YscUJBQXFCLENB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O3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLG1CQUFtQjtzQkFBMUQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxtQkFBbUI7c0JBQTFELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgRGlyZWN0aXZlLFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25EZXN0cm95LFxuICAgIHNpZ25hbCxcbiAgICBXcml0YWJsZVNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGluamVjdERvY3VtZW50LCBpbmplY3RXaW5kb3cgfSBmcm9tICdAcmFkaXgtbmcvcHJpbWl0aXZlcy9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlLCBtYXAsIFN1YmplY3QsIHRhcCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHByb3ZpZGVOYXZpZ2F0aW9uTWVudUNvbnRleHQgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS50b2tlbic7XG5pbXBvcnQgeyBSZHhOYXZpZ2F0aW9uTWVudUFuaW1hdGlvblN0YXR1cyB9IGZyb20gJy4vbmF2aWdhdGlvbi1tZW51LnR5cGVzJztcbmltcG9ydCB7IGdlbmVyYXRlSWQgfSBmcm9tICcuL3V0aWxzJztcblxuLy8gZGVmaW5lIGFjdGlvbiB0eXBlcyBmb3IgY2xlYXJlciBpbnRlbnRcbmV4cG9ydCBlbnVtIFJkeE5hdmlnYXRpb25NZW51QWN0aW9uIHtcbiAgICBPUEVOID0gJ29wZW4nLFxuICAgIENMT1NFID0gJ2Nsb3NlJ1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhOYXZpZ2F0aW9uTWVudV0nLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVOYXZpZ2F0aW9uTWVudUNvbnRleHQoUmR4TmF2aWdhdGlvbk1lbnVEaXJlY3RpdmUpXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdvcmllbnRhdGlvbicsXG4gICAgICAgICdbYXR0ci5kaXJdJzogJ2RpcicsXG4gICAgICAgICdhcmlhLWxhYmVsJzogJ01haW4nLFxuICAgICAgICByb2xlOiAnbmF2aWdhdGlvbidcbiAgICB9LFxuICAgIGV4cG9ydEFzOiAncmR4TmF2aWdhdGlvbk1lbnUnXG59KVxuZXhwb3J0IGNsYXNzIFJkeE5hdmlnYXRpb25NZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdERvY3VtZW50KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3cgPSBpbmplY3RXaW5kb3coKTtcblxuICAgIC8vIFN0YXRlXG4gICAgcmVhZG9ubHkgI3ZhbHVlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAgIHJlYWRvbmx5ICNwcmV2aW91c1ZhbHVlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAgIHJlYWRvbmx5IGJhc2VJZCA9IGByZHgtbmF2LW1lbnUtJHtnZW5lcmF0ZUlkKCl9YDtcbiAgICByZWFkb25seSAjaW5kaWNhdG9yVHJhY2sgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICByZWFkb25seSAjdmlld3BvcnQgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICByZWFkb25seSAjdmlld3BvcnRDb250ZW50ID0gc2lnbmFsPE1hcDxzdHJpbmcsIGFueT4+KG5ldyBNYXAoKSk7XG4gICAgcmVhZG9ubHkgI3Jvb3ROYXZpZ2F0aW9uTWVudSA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IG51bGw+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIHJlYWRvbmx5ICN1c2VyRGlzbWlzc2VkQnlDbGljayA9IHNpZ25hbChmYWxzZSk7XG4gICAgdXNlckRpc21pc3NlZEJ5Q2xpY2sgPSAoKSA9PiB0aGlzLiN1c2VyRGlzbWlzc2VkQnlDbGljaygpO1xuICAgIHJlc2V0VXNlckRpc21pc3NlZCA9ICgpID0+IHRoaXMuI3VzZXJEaXNtaXNzZWRCeUNsaWNrLnNldChmYWxzZSk7XG5cbiAgICAvLyBkZWxheSB0aW1lcnNcbiAgICBwcml2YXRlIG9wZW5UaW1lclJlZiA9IDA7XG4gICAgcHJpdmF0ZSBjbG9zZVRpbWVyUmVmID0gMDtcbiAgICBwcml2YXRlIHNraXBEZWxheVRpbWVyUmVmID0gMDtcbiAgICBwcml2YXRlIHJlY2VudGx5QWN0aXZhdGVkVGltZXJSZWYgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVjZW50bHlBY3RpdmF0ZWRJdGVtID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIHJlYWRvbmx5ICNpc09wZW5EZWxheWVkID0gc2lnbmFsKHRydWUpO1xuXG4gICAgLy8gcG9pbnRlciB0cmFja2luZ1xuICAgIHJlYWRvbmx5ICNpc1BvaW50ZXJPdmVyQ29udGVudCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcmVhZG9ubHkgI2lzUG9pbnRlck92ZXJUcmlnZ2VyID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIGRvY3VtZW50TW91c2VMZWF2ZUhhbmRsZXI6ICgoZTogRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgICByZWFkb25seSBhY3Rpb25TdWJqZWN0JCA9IG5ldyBTdWJqZWN0PHsgYWN0aW9uOiBSZHhOYXZpZ2F0aW9uTWVudUFjdGlvbjsgaXRlbVZhbHVlPzogc3RyaW5nIH0+KCk7XG5cbiAgICBASW5wdXQoKSBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcbiAgICBASW5wdXQoKSBkaXI6ICdsdHInIHwgJ3J0bCcgPSAnbHRyJztcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBjbGlja0lnbm9yZUR1cmF0aW9uID0gMjUwO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGRlbGF5RHVyYXRpb24gPSAyMDA7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc2tpcERlbGF5RHVyYXRpb24gPSAzMDA7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxvb3AgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY3NzQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNzc09wZW5pbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY3NzQ2xvc2luZ0FuaW1hdGlvbiA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgaXNSb290TWVudSA9IHRydWU7XG4gICAgcmVhZG9ubHkgY3NzQW5pbWF0aW9uU3RhdHVzOiBXcml0YWJsZVNpZ25hbDxSZHhOYXZpZ2F0aW9uTWVudUFuaW1hdGlvblN0YXR1cyB8IG51bGw+ID0gc2lnbmFsKG51bGwpO1xuXG4gICAgLy8gZXhwb3NlZCBzdGF0ZSBhcyBmdW5jdGlvbnMgZm9yIHRoZSB0b2tlblxuICAgIHZhbHVlID0gKCkgPT4gdGhpcy4jdmFsdWUoKTtcbiAgICBwcmV2aW91c1ZhbHVlID0gKCkgPT4gdGhpcy4jcHJldmlvdXNWYWx1ZSgpO1xuICAgIHJvb3ROYXZpZ2F0aW9uTWVudSA9ICgpID0+IHRoaXMuI3Jvb3ROYXZpZ2F0aW9uTWVudSgpO1xuICAgIGluZGljYXRvclRyYWNrID0gKCkgPT4gdGhpcy4jaW5kaWNhdG9yVHJhY2soKTtcbiAgICB2aWV3cG9ydCA9ICgpID0+IHRoaXMuI3ZpZXdwb3J0KCk7XG4gICAgdmlld3BvcnRDb250ZW50ID0gKCkgPT4gdGhpcy4jdmlld3BvcnRDb250ZW50KCk7XG5cbiAgICAvLyBleHBvc2VkIHBvaW50ZXIgc3RhdGVcbiAgICBzZXRUcmlnZ2VyUG9pbnRlclN0YXRlID0gKGlzT3ZlcjogYm9vbGVhbikgPT4gdGhpcy4jaXNQb2ludGVyT3ZlclRyaWdnZXIuc2V0KGlzT3Zlcik7XG4gICAgc2V0Q29udGVudFBvaW50ZXJTdGF0ZSA9IChpc092ZXI6IGJvb2xlYW4pID0+IHRoaXMuI2lzUG9pbnRlck92ZXJDb250ZW50LnNldChpc092ZXIpO1xuICAgIGlzUG9pbnRlckluU3lzdGVtID0gKCkgPT4gdGhpcy4jaXNQb2ludGVyT3ZlckNvbnRlbnQoKSB8fCB0aGlzLiNpc1BvaW50ZXJPdmVyVHJpZ2dlcigpO1xuXG4gICAgLy8gZXhwb3NlZCAgYW5pbWF0aW9uIHN0YXRlXG4gICAgZ2V0Q3NzQW5pbWF0aW9uID0gKCkgPT4gdGhpcy5jc3NBbmltYXRpb247XG4gICAgZ2V0Q3NzT3BlbmluZ0FuaW1hdGlvbiA9ICgpID0+IHRoaXMuY3NzT3BlbmluZ0FuaW1hdGlvbjtcbiAgICBnZXRDc3NDbG9zaW5nQW5pbWF0aW9uID0gKCkgPT4gdGhpcy5jc3NDbG9zaW5nQW5pbWF0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI3ZhbHVlKCk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5za2lwRGVsYXlUaW1lclJlZik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2tpcERlbGF5RHVyYXRpb24gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2lzT3BlbkRlbGF5ZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG1lbnUgaXMgY2xvc2VkLCBzdGFydCBza2lwIGRlbGF5IHRpbWVyXG4gICAgICAgICAgICAgICAgdGhpcy53aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuc2tpcERlbGF5VGltZXJSZWYpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcERlbGF5VGltZXJSZWYgPSB0aGlzLndpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaXNPcGVuRGVsYXllZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5za2lwRGVsYXlEdXJhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWN0aW9uU3ViamVjdCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBkZWxheXMgZm9yIG9wZW4gdnMgY2xvc2UgKGJldHRlciB1eClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBjb25maWcuYWN0aW9uID09PSBSZHhOYXZpZ2F0aW9uTWVudUFjdGlvbi5PUEVOID8gdGhpcy5kZWxheUR1cmF0aW9uIDogMTUwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5jb25maWcsIGR1cmF0aW9uIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2UoKGNvbmZpZykgPT4gdGltZXIoY29uZmlnLmR1cmF0aW9uKSksXG4gICAgICAgICAgICAgICAgdGFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb25maWcuYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJkeE5hdmlnYXRpb25NZW51QWN0aW9uLk9QRU46XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShjb25maWcuaXRlbVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJkeE5hdmlnYXRpb25NZW51QWN0aW9uLkNMT1NFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgY2xvc2UgaWYgbm90IGhvdmVyaW5nIG92ZXIgYW55IHBhcnQgb2YgdGhlIHN5c3RlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1BvaW50ZXJJblN5c3RlbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgLy8gc2V0IHVwIGRvY3VtZW50IG1vdXNlbGVhdmUgaGFuZGxlciB0byBjbG9zZSBtZW51IHdoZW4gbW91c2UgbGVhdmVzIHdpbmRvd1xuICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VMZWF2ZUhhbmRsZXIgPSAoKSA9PiB0aGlzLmhhbmRsZUNsb3NlKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuZG9jdW1lbnRNb3VzZUxlYXZlSGFuZGxlcik7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMud2luZG93LmNsZWFyVGltZW91dCh0aGlzLm9wZW5UaW1lclJlZik7XG4gICAgICAgIHRoaXMud2luZG93LmNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZXJSZWYpO1xuICAgICAgICB0aGlzLndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5za2lwRGVsYXlUaW1lclJlZik7XG4gICAgICAgIHRoaXMud2luZG93LmNsZWFyVGltZW91dCh0aGlzLnJlY2VudGx5QWN0aXZhdGVkVGltZXJSZWYpO1xuXG4gICAgICAgIC8vIGNsZWFuIHVwIGRvY3VtZW50IGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VMZWF2ZUhhbmRsZXIpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLmRvY3VtZW50TW91c2VMZWF2ZUhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbmRpY2F0b3JUcmFja0NoYW5nZSh0cmFjazogSFRNTEVsZW1lbnQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuI2luZGljYXRvclRyYWNrLnNldCh0cmFjayk7XG4gICAgfVxuXG4gICAgb25WaWV3cG9ydENoYW5nZSh2aWV3cG9ydDogSFRNTEVsZW1lbnQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuI3ZpZXdwb3J0LnNldCh2aWV3cG9ydCk7XG4gICAgfVxuXG4gICAgb25UcmlnZ2VyRW50ZXIoaXRlbVZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gc2tpcCBvcGVuaW5nIGlmIHVzZXIgZXhwbGljaXRseSBkaXNtaXNzZWQgdGhpcyBtZW51XG4gICAgICAgIGlmICh0aGlzLiN1c2VyRGlzbWlzc2VkQnlDbGljaygpICYmIGl0ZW1WYWx1ZSA9PT0gdGhpcy4jcHJldmlvdXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZXJSZWYpO1xuICAgICAgICB0aGlzLndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVyUmVmKTtcblxuICAgICAgICBpZiAodGhpcy4jaXNPcGVuRGVsYXllZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURlbGF5ZWRPcGVuKGl0ZW1WYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU9wZW4oaXRlbVZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVHJpZ2dlckxlYXZlKCkge1xuICAgICAgICB0aGlzLndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5vcGVuVGltZXJSZWYpO1xuICAgICAgICB0aGlzLnN0YXJ0Q2xvc2VUaW1lcigpO1xuICAgIH1cblxuICAgIG9uQ29udGVudEVudGVyKCkge1xuICAgICAgICB0aGlzLndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVyUmVmKTtcbiAgICB9XG5cbiAgICBvbkNvbnRlbnRMZWF2ZSgpIHtcbiAgICAgICAgdGhpcy5zdGFydENsb3NlVGltZXIoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbG9zZSgpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25TdWJqZWN0JC5uZXh0KHsgYWN0aW9uOiBSZHhOYXZpZ2F0aW9uTWVudUFjdGlvbi5DTE9TRSB9KTtcbiAgICB9XG5cbiAgICBvbkl0ZW1TZWxlY3QoaXRlbVZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgd2FzT3BlbiA9IHRoaXMuI3ZhbHVlKCkgPT09IGl0ZW1WYWx1ZTtcblxuICAgICAgICAvLyBpZiB0aGlzIGl0ZW0ganVzdCBvcGVuZWQgYW5kIHRoZSBjbGljayB3b3VsZCBjbG9zZSBpdCxcbiAgICAgICAgLy8gaWdub3JlIHRoZSBjbGljayBkdXJpbmcgdGhlIGJyaWVmIHByb3RlY3Rpb24gd2luZG93XG4gICAgICAgIGlmICh0aGlzLnJlY2VudGx5QWN0aXZhdGVkSXRlbSgpID09PSBpdGVtVmFsdWUgJiYgd2FzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB3YXNPcGVuID8gJycgOiBpdGVtVmFsdWU7XG5cbiAgICAgICAgLy8gaWYgdXNlciBpcyBjbG9zaW5nIGFuIG9wZW4gbWVudSwgbWFyayBhcyB1c2VyLWRpc21pc3NlZFxuICAgICAgICBpZiAod2FzT3Blbikge1xuICAgICAgICAgICAgdGhpcy4jdXNlckRpc21pc3NlZEJ5Q2xpY2suc2V0KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jdXNlckRpc21pc3NlZEJ5Q2xpY2suc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIG9uSXRlbURpc21pc3MoKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoJycpO1xuICAgIH1cblxuICAgIG9uVmlld3BvcnRDb250ZW50Q2hhbmdlKGNvbnRlbnRWYWx1ZTogc3RyaW5nLCBjb250ZW50RGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAodGhpcy4jdmlld3BvcnRDb250ZW50KCkpO1xuICAgICAgICBuZXdNYXAuc2V0KGNvbnRlbnRWYWx1ZSwgY29udGVudERhdGEpO1xuICAgICAgICB0aGlzLiN2aWV3cG9ydENvbnRlbnQuc2V0KG5ld01hcCk7XG4gICAgfVxuXG4gICAgb25WaWV3cG9ydENvbnRlbnRSZW1vdmUoY29udGVudFZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcCh0aGlzLiN2aWV3cG9ydENvbnRlbnQoKSk7XG4gICAgICAgIGlmIChuZXdNYXAuaGFzKGNvbnRlbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld01hcC5kZWxldGUoY29udGVudFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuI3ZpZXdwb3J0Q29udGVudC5zZXQobmV3TWFwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy4jdmFsdWUoKTtcblxuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMud2luZG93LmNsZWFyVGltZW91dCh0aGlzLnJlY2VudGx5QWN0aXZhdGVkVGltZXJSZWYpO1xuXG4gICAgICAgICAgICB0aGlzLnJlY2VudGx5QWN0aXZhdGVkSXRlbS5zZXQodmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzLnJlY2VudGx5QWN0aXZhdGVkVGltZXJSZWYgPSB0aGlzLndpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2VudGx5QWN0aXZhdGVkSXRlbS5zZXQobnVsbCk7XG4gICAgICAgICAgICB9LCB0aGlzLmNsaWNrSWdub3JlRHVyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RvcmUgcHJldmlvdXMgdmFsdWUgYmVmb3JlIGNoYW5naW5nXG4gICAgICAgIHRoaXMuI3ByZXZpb3VzVmFsdWUuc2V0KHByZXZpb3VzVmFsdWUpO1xuICAgICAgICB0aGlzLiN2YWx1ZS5zZXQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRDbG9zZVRpbWVyKCkge1xuICAgICAgICB0aGlzLndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVyUmVmKTtcbiAgICAgICAgdGhpcy5jbG9zZVRpbWVyUmVmID0gdGhpcy53aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBvbmx5IGNsb3NlIGlmIG5vdCBob3ZlcmluZyBvdmVyIGFueSBwYXJ0IG9mIHRoZSBzeXN0ZW1cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1BvaW50ZXJJblN5c3RlbSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDE1MCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVPcGVuKGl0ZW1WYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMud2luZG93LmNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZXJSZWYpO1xuICAgICAgICB0aGlzLnNldFZhbHVlKGl0ZW1WYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVEZWxheWVkT3BlbihpdGVtVmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpc09wZW5JdGVtID0gdGhpcy4jdmFsdWUoKSA9PT0gaXRlbVZhbHVlO1xuICAgICAgICBpZiAoaXNPcGVuSXRlbSkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGl0ZW0gaXMgYWxyZWFkeSBvcGVuLCBjbGVhciBjbG9zZSB0aW1lclxuICAgICAgICAgICAgdGhpcy53aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VUaW1lclJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIHN0YXJ0IHRoZSBvcGVuIHRpbWVyXG4gICAgICAgICAgICB0aGlzLm9wZW5UaW1lclJlZiA9IHRoaXMud2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2luZG93LmNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZXJSZWYpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoaXRlbVZhbHVlKTtcbiAgICAgICAgICAgIH0sIHRoaXMuZGVsYXlEdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=","import { Directive, inject, Input, input, output, signal } from '@angular/core';\nimport { RdxNavigationMenuDirective } from './navigation-menu.directive';\nimport { provideNavigationMenuContext } from './navigation-menu.token';\nimport { generateId } from './utils';\nimport * as i0 from \"@angular/core\";\nexport class RdxNavigationMenuSubDirective {\n constructor() {\n this.orientation = input('horizontal', ...(ngDevMode ? [{ debugName: \"orientation\" }] : []));\n this.valueChange = output();\n this.value = signal('', ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n this.previousValue = signal('', ...(ngDevMode ? [{ debugName: \"previousValue\" }] : []));\n this.baseId = `rdx-nav-menu-sub-${generateId()}`;\n this.isRootMenu = false;\n this.parent = inject(RdxNavigationMenuDirective, { optional: true });\n }\n set defaultValue(val) {\n if (val)\n this.value.set(val);\n }\n get dir() {\n if (!this.parent) {\n return 'ltr';\n }\n return this.parent.dir || 'ltr';\n }\n get rootNavigationMenu() {\n return this.parent?.rootNavigationMenu() || null;\n }\n onTriggerEnter(itemValue) {\n this.setValue(itemValue);\n }\n onItemSelect(itemValue) {\n this.setValue(itemValue);\n }\n onItemDismiss() {\n this.setValue('');\n }\n setValue(value) {\n this.previousValue.set(this.value());\n this.value.set(value);\n this.valueChange.emit(value);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuSubDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: RdxNavigationMenuSubDirective, isStandalone: true, selector: \"[rdxNavigationMenuSub]\", inputs: { orientation: { classPropertyName: \"orientation\", publicName: \"orientation\", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: \"defaultValue\", publicName: \"defaultValue\", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: \"valueChange\" }, host: { properties: { \"attr.data-orientation\": \"orientation()\" } }, providers: [provideNavigationMenuContext(RdxNavigationMenuSubDirective)], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuSubDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenuSub]',\n providers: [provideNavigationMenuContext(RdxNavigationMenuSubDirective)],\n host: {\n '[attr.data-orientation]': 'orientation()'\n }\n }]\n }], propDecorators: { defaultValue: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LXN1Yi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL25hdmlnYXRpb24tbWVudS9zcmMvbmF2aWdhdGlvbi1tZW51LXN1Yi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBU3JDLE1BQU0sT0FBTyw2QkFBNkI7SUFQMUM7UUFRYSxnQkFBVyxHQUFHLEtBQUssQ0FBNEIsWUFBWSx1REFBQyxDQUFDO1FBSzdELGdCQUFXLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFFL0IsVUFBSyxHQUFHLE1BQU0sQ0FBUyxFQUFFLGlEQUFDLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxNQUFNLENBQVMsRUFBRSx5REFBQyxDQUFDO1FBQ25DLFdBQU0sR0FBRyxvQkFBb0IsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUM1QyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRVgsV0FBTSxHQUFHLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBK0JwRjtJQTFDRyxJQUFhLFlBQVksQ0FBQyxHQUFXO1FBQ2pDLElBQUksR0FBRztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFXRCxJQUFJLEdBQUc7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFpQjtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBaUI7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OEdBM0NRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHNkQUwzQixDQUFDLDRCQUE0QixDQUFDLDZCQUE2QixDQUFDLENBQUM7OzJGQUsvRCw2QkFBNkI7a0JBUHpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsU0FBUyxFQUFFLENBQUMsNEJBQTRCLCtCQUErQixDQUFDO29CQUN4RSxJQUFJLEVBQUU7d0JBQ0YseUJBQXlCLEVBQUUsZUFBZTtxQkFDN0M7aUJBQ0o7OEJBR2dCLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgSW5wdXQsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4TmF2aWdhdGlvbk1lbnVEaXJlY3RpdmUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgcHJvdmlkZU5hdmlnYXRpb25NZW51Q29udGV4dCB9IGZyb20gJy4vbmF2aWdhdGlvbi1tZW51LnRva2VuJztcbmltcG9ydCB7IGdlbmVyYXRlSWQgfSBmcm9tICcuL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4TmF2aWdhdGlvbk1lbnVTdWJdJyxcbiAgICBwcm92aWRlcnM6IFtwcm92aWRlTmF2aWdhdGlvbk1lbnVDb250ZXh0KFJkeE5hdmlnYXRpb25NZW51U3ViRGlyZWN0aXZlKV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuZGF0YS1vcmllbnRhdGlvbl0nOiAnb3JpZW50YXRpb24oKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeE5hdmlnYXRpb25NZW51U3ViRGlyZWN0aXZlIHtcbiAgICByZWFkb25seSBvcmllbnRhdGlvbiA9IGlucHV0PCdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc+KCdob3Jpem9udGFsJyk7XG4gICAgQElucHV0KCkgc2V0IGRlZmF1bHRWYWx1ZSh2YWw6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsKSB0aGlzLnZhbHVlLnNldCh2YWwpO1xuICAgIH1cblxuICAgIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICAgIHJlYWRvbmx5IHZhbHVlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAgIHJlYWRvbmx5IHByZXZpb3VzVmFsdWUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gICAgcmVhZG9ubHkgYmFzZUlkID0gYHJkeC1uYXYtbWVudS1zdWItJHtnZW5lcmF0ZUlkKCl9YDtcbiAgICByZWFkb25seSBpc1Jvb3RNZW51ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudCA9IGluamVjdChSZHhOYXZpZ2F0aW9uTWVudURpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIGdldCBkaXIoKTogJ2x0cicgfCAncnRsJyB7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAnbHRyJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5kaXIgfHwgJ2x0cic7XG4gICAgfVxuXG4gICAgZ2V0IHJvb3ROYXZpZ2F0aW9uTWVudSgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ/LnJvb3ROYXZpZ2F0aW9uTWVudSgpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgb25UcmlnZ2VyRW50ZXIoaXRlbVZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShpdGVtVmFsdWUpO1xuICAgIH1cblxuICAgIG9uSXRlbVNlbGVjdChpdGVtVmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldFZhbHVlKGl0ZW1WYWx1ZSk7XG4gICAgfVxuXG4gICAgb25JdGVtRGlzbWlzcygpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNWYWx1ZS5zZXQodGhpcy52YWx1ZSgpKTtcbiAgICAgICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input, untracked, ViewContainerRef } from '@angular/core';\nimport { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ENTER, SPACE, TAB } from '@radix-ng/primitives/core';\nimport { RdxRovingFocusItemDirective } from '@radix-ng/primitives/roving-focus';\nimport { RdxNavigationMenuAriaOwnsComponent, RdxNavigationMenuFocusProxyComponent } from './navigation-menu-a11y.component';\nimport { RdxNavigationMenuItemDirective } from './navigation-menu-item.directive';\nimport { RdxNavigationMenuListDirective } from './navigation-menu-list.directive';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport { RdxNavigationMenuFocusableOption } from './navigation-menu.types';\nimport { getTabbableCandidates, makeContentId, makeTriggerId } from './utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@radix-ng/primitives/roving-focus\";\nexport class RdxNavigationMenuTriggerDirective extends RdxNavigationMenuFocusableOption {\n constructor() {\n super();\n this.context = injectNavigationMenu();\n this.item = inject(RdxNavigationMenuItemDirective);\n this.list = inject(RdxNavigationMenuListDirective);\n this.rovingFocusItem = inject(RdxRovingFocusItemDirective, { self: true });\n this.elementRef = inject(ElementRef);\n this.viewContainerRef = inject(ViewContainerRef);\n this.disabled = input(false, ...(ngDevMode ? [{ debugName: \"disabled\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.openOnHover = input(true, ...(ngDevMode ? [{ debugName: \"openOnHover\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.triggerId = makeTriggerId(this.context.baseId, this.item.value());\n this.contentId = makeContentId(this.context.baseId, this.item.value());\n this.open = computed(() => {\n return this.item.value() === this.context.value();\n }, ...(ngDevMode ? [{ debugName: \"open\" }] : []));\n this.focusProxyRef = null;\n this.ariaOwnsRef = null;\n this.hasPointerMoveOpened = false;\n this.wasClickClose = false;\n effect(() => {\n this.rovingFocusItem.setFocusable(!this.disabled());\n });\n effect(() => {\n const isOpen = this.open();\n untracked(() => {\n // handle focus proxy and aria-owns when open state changes\n if (isOpen) {\n this.createAccessibilityComponents();\n }\n else {\n this.removeAccessibilityComponents();\n if (!this.item.wasEscapeCloseRef()) {\n this.item.onRootContentClose();\n }\n this.hasPointerMoveOpened = false;\n }\n });\n });\n }\n ngOnInit() {\n this.item.triggerRef.set(this.elementRef.nativeElement);\n // configure the static part of the roving focus item directive instance\n this.rovingFocusItem.setTabStopId(this.item.value());\n }\n ngOnDestroy() {\n this.removeAccessibilityComponents();\n }\n focus() {\n this.elementRef.nativeElement.focus();\n }\n createAccessibilityComponents() {\n if (this.focusProxyRef || this.ariaOwnsRef) {\n return;\n }\n // create focus proxy component\n this.focusProxyRef = this.viewContainerRef.createComponent(RdxNavigationMenuFocusProxyComponent);\n this.focusProxyRef.instance.triggerElement = this.elementRef.nativeElement;\n this.focusProxyRef.instance.contentElement = this.item.contentRef();\n this.focusProxyRef.instance.proxyFocus.subscribe((direction) => {\n this.item.onFocusProxyEnter(direction);\n });\n // store reference in item directive\n this.item.focusProxyRef.set(this.focusProxyRef.location.nativeElement);\n // only add aria-owns component if using viewport\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n this.ariaOwnsRef = this.viewContainerRef.createComponent(RdxNavigationMenuAriaOwnsComponent);\n this.ariaOwnsRef.instance.contentId = this.contentId;\n }\n }\n removeAccessibilityComponents() {\n if (this.focusProxyRef) {\n this.focusProxyRef.destroy();\n this.focusProxyRef = null;\n this.item.focusProxyRef.set(null);\n }\n if (this.ariaOwnsRef) {\n this.ariaOwnsRef.destroy();\n this.ariaOwnsRef = null;\n }\n }\n onPointerEnter() {\n // ignore if disabled or not the root menu\n if (this.disabled() || !isRootNavigationMenu(this.context))\n return;\n this.wasClickClose = false; // Reset click close flag on enter\n this.item.wasEscapeCloseRef.set(false); // Reset escape flag\n this.context.setTriggerPointerState?.(true); // Update context state\n // if the menu isn't already open for this item, trigger the enter logic\n if (!this.open()) {\n if (this.openOnHover() || this.context.value() !== '') {\n this.context.onTriggerEnter?.(this.item.value());\n }\n }\n }\n onPointerMove(event) {\n // ignore if not a mouse event, disabled, closed by click/escape, or already opened by this move\n if (event.pointerType !== 'mouse' ||\n this.disabled() ||\n this.wasClickClose ||\n this.item.wasEscapeCloseRef() ||\n this.hasPointerMoveOpened ||\n !isRootNavigationMenu(this.context)) {\n return;\n }\n this.hasPointerMoveOpened = true;\n }\n onPointerLeave(event) {\n // ignore if not a mouse event or disabled\n if (event.pointerType !== 'mouse' || this.disabled() || !isRootNavigationMenu(this.context)) {\n return;\n }\n this.context.setTriggerPointerState?.(false); // Update context state\n this.context.onTriggerLeave?.(); // Trigger leave logic (handles delays)\n this.hasPointerMoveOpened = false; // Reset flag\n // reset user dismissal flag if pointer leaves the whole system (trigger + content)\n if (this.context.resetUserDismissed) {\n // relay slightly to allow pointer movement to content area without resetting dismissal state\n setTimeout(() => {\n if (!this.context.isPointerInSystem?.()) {\n this.context.resetUserDismissed?.();\n }\n }, 50); // small delay for tolerance\n }\n }\n onClick() {\n if (this.disabled())\n return;\n // manually set the `KeyManager` active item to this trigger\n this.list.setActiveItem(this.item);\n if (this.context.onItemSelect) {\n this.context.onItemSelect(this.item.value());\n // track if this click action resulted in closing the menu\n this.wasClickClose = !this.open();\n // reset escape flag if menu was opened by click\n if (this.open()) {\n this.item.wasEscapeCloseRef.set(false);\n }\n }\n }\n onKeydown(event) {\n if (this.disabled())\n return;\n if (event.key === ENTER || event.key === SPACE) {\n event.preventDefault(); // prevent default button behavior\n this.onClick();\n // if menu was opened by this keypress, move focus into the content\n if (this.open()) {\n // defer focus slightly to ensure content is ready\n setTimeout(() => this.item.onEntryKeyDown(), 0);\n }\n return;\n }\n const isHorizontal = this.context.orientation === 'horizontal';\n const isRTL = this.context.dir === 'rtl';\n // handle `ArrowDown` specifically for viewport navigation\n if (event.key === ARROW_DOWN || event.key === TAB) {\n if (event.key === ARROW_DOWN) {\n event.preventDefault();\n }\n // if the menu is open, focus into the content\n if (this.open()) {\n if (event.key === TAB) {\n // needed to ensure that the `keyManager` on the list directive does not activate\n // any focus updates, shifting focus to the subsequent focusable list item\n event.stopImmediatePropagation();\n }\n // direct focus handling for viewport case\n if (isRootNavigationMenu(this.context) && this.context.viewport && this.context.viewport()) {\n // get the viewport element\n const viewport = this.context.viewport();\n if (viewport) {\n // find all tabbable elements in the viewport\n const tabbables = getTabbableCandidates(viewport);\n if (tabbables.length > 0) {\n // focus the first tabbable element directly\n setTimeout(() => {\n tabbables[0].focus();\n }, 0);\n return;\n }\n }\n }\n // fallback to the standard entry key down approach\n setTimeout(() => this.item.onEntryKeyDown(), 0);\n return;\n }\n // if not open but in horizontal orientation, emulate right key navigation\n if (isHorizontal) {\n const nextEvent = new KeyboardEvent('keydown', {\n key: isRTL ? ARROW_LEFT : ARROW_RIGHT,\n bubbles: true\n });\n this.elementRef.nativeElement.dispatchEvent(nextEvent);\n return;\n }\n }\n // handle ArrowUp in horizontal orientation\n if (isHorizontal && event.key === ARROW_UP) {\n event.preventDefault();\n // emulate a left key press to move to the previous item\n const nextEvent = new KeyboardEvent('keydown', {\n key: isRTL ? ARROW_RIGHT : ARROW_LEFT,\n bubbles: true\n });\n this.elementRef.nativeElement.dispatchEvent(nextEvent);\n return;\n }\n // handle vertical navigation and entry into content\n const verticalEntryKey = isRTL ? ARROW_LEFT : ARROW_RIGHT;\n const entryKey = isHorizontal ? ARROW_DOWN : verticalEntryKey;\n if (this.item.contentRef() && event.key === entryKey && event.key !== ARROW_DOWN) {\n // Skip if it's ArrowDown as we already handled it above\n event.preventDefault();\n if (!this.open()) {\n // if closed, open the menu first\n this.context.onItemSelect?.(this.item.value());\n // defer focus movement into content until after state update and render\n setTimeout(() => this.item.onEntryKeyDown(), 0);\n }\n else {\n // if already open, just move focus into the content\n this.item.onEntryKeyDown();\n }\n return;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: RdxNavigationMenuTriggerDirective, isStandalone: true, selector: \"[rdxNavigationMenuTrigger]\", inputs: { disabled: { classPropertyName: \"disabled\", publicName: \"disabled\", isSignal: true, isRequired: false, transformFunction: null }, openOnHover: { classPropertyName: \"openOnHover\", publicName: \"openOnHover\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"type\": \"button\" }, listeners: { \"pointerenter\": \"onPointerEnter()\", \"pointermove\": \"onPointerMove($event)\", \"pointerleave\": \"onPointerLeave($event)\", \"click\": \"onClick()\", \"keydown\": \"onKeydown($event)\" }, properties: { \"id\": \"triggerId\", \"attr.data-state\": \"open() ? \\\"open\\\" : \\\"closed\\\"\", \"attr.data-orientation\": \"context.orientation\", \"attr.data-disabled\": \"disabled() ? \\\"\\\" : undefined\", \"disabled\": \"disabled() ? true : null\", \"attr.aria-expanded\": \"open()\", \"attr.aria-controls\": \"contentId\", \"attr.aria-haspopup\": \"\\\"menu\\\"\" } }, providers: [{ provide: RdxNavigationMenuFocusableOption, useExisting: RdxNavigationMenuTriggerDirective }], usesInheritance: true, hostDirectives: [{ directive: i1.RdxRovingFocusItemDirective }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuTriggerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenuTrigger]',\n hostDirectives: [RdxRovingFocusItemDirective],\n host: {\n '[id]': 'triggerId',\n '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n '[attr.data-orientation]': 'context.orientation',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[disabled]': 'disabled() ? true : null',\n '[attr.aria-expanded]': 'open()',\n '[attr.aria-controls]': 'contentId',\n '[attr.aria-haspopup]': '\"menu\"',\n '(pointerenter)': 'onPointerEnter()',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerleave)': 'onPointerLeave($event)',\n '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)',\n type: 'button'\n },\n providers: [{ provide: RdxNavigationMenuFocusableOption, useExisting: RdxNavigationMenuTriggerDirective }]\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LXRyaWdnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9uYXZpZ2F0aW9uLW1lbnUvc3JjL25hdmlnYXRpb24tbWVudS10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsZ0JBQWdCLEVBRWhCLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hGLE9BQU8sRUFDSCxrQ0FBa0MsRUFDbEMsb0NBQW9DLEVBQ3ZDLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7OztBQXVCOUUsTUFBTSxPQUFPLGlDQUFrQyxTQUFRLGdDQUFnQztJQXVCbkY7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQXZCTyxZQUFPLEdBQUcsb0JBQW9CLEVBQUcsQ0FBQztRQUNwQyxTQUFJ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QWUsRUFBRSx1QkFBdUI7d0JBQ3hDLGdCQUFnQixFQUFFLHdCQUF3Qjt3QkFDMUMsU0FBUyxFQUFFLFdBQVc7d0JBQ3RCLFdBQVcsRUFBRSxtQkFBbUI7d0JBQ2hDLElBQUksRUFBRSxRQUFRO3FCQUNqQjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxXQUFXLG1DQUFtQyxFQUFFLENBQUM7aUJBQzdHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBjb21wdXRlZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgdW50cmFja2VkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAsIEVOVEVSLCBTUEFDRSwgVEFCIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvY29yZSc7XG5pbXBvcnQgeyBSZHhSb3ZpbmdGb2N1c0l0ZW1EaXJlY3RpdmUgfSBmcm9tICdAcmFkaXgtbmcvcHJpbWl0aXZlcy9yb3ZpbmctZm9jdXMnO1xuaW1wb3J0IHtcbiAgICBSZHhOYXZpZ2F0aW9uTWVudUFyaWFPd25zQ29tcG9uZW50LFxuICAgIFJkeE5hdmlnYXRpb25NZW51Rm9jdXNQcm94eUNvbXBvbmVudFxufSBmcm9tICcuL25hdmlnYXRpb24tbWVudS1hMTF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZHhOYXZpZ2F0aW9uTWVudUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhOYXZpZ2F0aW9uTWVudUxpc3REaXJlY3RpdmUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS1saXN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpbmplY3ROYXZpZ2F0aW9uTWVudSwgaXNSb290TmF2aWdhdGlvbk1lbnUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS50b2tlbic7XG5pbXBvcnQgeyBSZHhOYXZpZ2F0aW9uTWVudUZvY3VzYWJsZU9wdGlvbiB9IGZyb20gJy4vbmF2aWdhdGlvbi1tZW51LnR5cGVzJztcbmltcG9ydCB7IGdldFRhYmJhYmxlQ2FuZGlkYXRlcywgbWFrZUNvbnRlbnRJZCwgbWFrZVRyaWdnZXJJZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhOYXZpZ2F0aW9uTWVudVRyaWdnZXJdJyxcbiAgICBob3N0RGlyZWN0aXZlczogW1JkeFJvdmluZ0ZvY3VzSXRlbURpcmVjdGl2ZV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2lkXSc6ICd0cmlnZ2VySWQnLFxuICAgICAgICAnW2F0dHIuZGF0YS1zdGF0ZV0nOiAnb3BlbigpID8gXCJvcGVuXCIgOiBcImNsb3NlZFwiJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtb3JpZW50YXRpb25dJzogJ2NvbnRleHQub3JpZW50YXRpb24nLFxuICAgICAgICAnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQoKSA/IFwiXCIgOiB1bmRlZmluZWQnLFxuICAgICAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCgpID8gdHJ1ZSA6IG51bGwnLFxuICAgICAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAnb3BlbigpJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtY29udHJvbHNdJzogJ2NvbnRlbnRJZCcsXG4gICAgICAgICdbYXR0ci5hcmlhLWhhc3BvcHVwXSc6ICdcIm1lbnVcIicsXG4gICAgICAgICcocG9pbnRlcmVudGVyKSc6ICdvblBvaW50ZXJFbnRlcigpJyxcbiAgICAgICAgJyhwb2ludGVybW92ZSknOiAnb25Qb2ludGVyTW92ZSgkZXZlbnQpJyxcbiAgICAgICAgJyhwb2ludGVybGVhdmUpJzogJ29uUG9pbnRlckxlYXZlKCRldmVudCknLFxuICAgICAgICAnKGNsaWNrKSc6ICdvbkNsaWNrKCknLFxuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5ZG93bigkZXZlbnQpJyxcbiAgICAgICAgdHlwZTogJ2J1dHRvbidcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogUmR4TmF2aWdhdGlvbk1lbnVGb2N1c2FibGVPcHRpb24sIHVzZUV4aXN0aW5nOiBSZHhOYXZpZ2F0aW9uTWVudVRyaWdnZXJEaXJlY3RpdmUgfV1cbn0pXG5leHBvcnQgY2xhc3MgUmR4TmF2aWdhdGlvbk1lbnVUcmlnZ2VyRGlyZWN0aXZlIGV4dGVuZHMgUmR4TmF2aWdhdGlvbk1lbnVGb2N1c2FibGVPcHRpb24gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3ROYXZpZ2F0aW9uTWVudSgpITtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW0gPSBpbmplY3QoUmR4TmF2aWdhdGlvbk1lbnVJdGVtRGlyZWN0aXZlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3QgPSBpbmplY3QoUmR4TmF2aWdhdGlvbk1lbnVMaXN0RGlyZWN0aXZlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdmluZ0ZvY3VzSXRlbSA9IGluamVjdChSZHhSb3ZpbmdGb2N1c0l0ZW1EaXJlY3RpdmUsIHsgc2VsZjogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG4gICAgcmVhZG9ubHkgb3Blbk9uSG92ZXIgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIHJlYWRvbmx5IHRyaWdnZXJJZCA9IG1ha2VUcmlnZ2VySWQodGhpcy5jb250ZXh0LmJhc2VJZCwgdGhpcy5pdGVtLnZhbHVlKCkpO1xuICAgIHJlYWRvbmx5IGNvbnRlbnRJZCA9IG1ha2VDb250ZW50SWQodGhpcy5jb250ZXh0LmJhc2VJZCwgdGhpcy5pdGVtLnZhbHVlKCkpO1xuICAgIHJlYWRvbmx5IG9wZW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW0udmFsdWUoKSA9PT0gdGhpcy5jb250ZXh0LnZhbHVlKCk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIGZvY3VzUHJveHlSZWY6IENvbXBvbmVudFJlZjxSZHhOYXZpZ2F0aW9uTWVudUZvY3VzUHJveHlDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBhcmlhT3duc1JlZjogQ29tcG9uZW50UmVmPFJkeE5hdmlnYXRpb25NZW51QXJpYU93bnNDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIGhhc1BvaW50ZXJNb3ZlT3BlbmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSB3YXNDbGlja0Nsb3NlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3ZpbmdGb2N1c0l0ZW0uc2V0Rm9jdXNhYmxlKCF0aGlzLmRpc2FibGVkKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5vcGVuKCk7XG5cbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIGZvY3VzIHByb3h5IGFuZCBhcmlhLW93bnMgd2hlbiBvcGVuIHN0YXRlIGNoYW5nZXNcbiAgICAgICAgICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQWNjZXNzaWJpbGl0eUNvbXBvbmVudHMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUFjY2Vzc2liaWxpdHlDb21wb25lbnRzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW0ud2FzRXNjYXBlQ2xvc2VSZWYoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLm9uUm9vdENvbnRlbnRDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNQb2ludGVyTW92ZU9wZW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pdGVtLnRyaWdnZXJSZWYuc2V0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAvLyBjb25maWd1cmUgdGhlIHN0YXRpYyBwYXJ0IG9mIHRoZSByb3ZpbmcgZm9jdXMgaXRlbSBkaXJlY3RpdmUgaW5zdGFuY2VcbiAgICAgICAgdGhpcy5yb3ZpbmdGb2N1c0l0ZW0uc2V0VGFiU3RvcElkKHRoaXMuaXRlbS52YWx1ZSgpKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVBY2Nlc3NpYmlsaXR5Q29tcG9uZW50cygpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGZvY3VzKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQWNjZXNzaWJpbGl0eUNvbXBvbmVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzUHJveHlSZWYgfHwgdGhpcy5hcmlhT3duc1JlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIGZvY3VzIHByb3h5IGNvbXBvbmVudFxuICAgICAgICB0aGlzLmZvY3VzUHJveHlSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFJkeE5hdmlnYXRpb25NZW51Rm9jdXNQcm94eUNvbXBvbmVudCk7XG4gICAgICAgIHRoaXMuZm9jdXNQcm94eVJlZi5pbnN0YW5jZS50cmlnZ2VyRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmZvY3VzUHJveHlSZWYuaW5zdGFuY2UuY29udGVudEVsZW1lbnQgPSB0aGlzLml0ZW0uY29udGVudFJlZigpO1xuICAgICAgICB0aGlzLmZvY3VzUHJveHlSZWYuaW5zdGFuY2UucHJveHlGb2N1cy5zdWJzY3JpYmUoKGRpcmVjdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW0ub25Gb2N1c1Byb3h5RW50ZXIoZGlyZWN0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gc3RvcmUgcmVmZXJlbmNlIGluIGl0ZW0gZGlyZWN0aXZlXG4gICAgICAgIHRoaXMuaXRlbS5mb2N1c1Byb3h5UmVmLnNldCh0aGlzLmZvY3VzUHJveHlSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgLy8gb25seSBhZGQgYXJpYS1vd25zIGNvbXBvbmVudCBpZiB1c2luZyB2aWV3cG9ydFxuICAgICAgICBpZiAoaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSAmJiB0aGlzLmNvbnRleHQudmlld3BvcnQgJiYgdGhpcy5jb250ZXh0LnZpZXdwb3J0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXJpYU93bnNSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFJkeE5hdmlnYXRpb25NZW51QXJpYU93bnNDb21wb25lbnQpO1xuICAgICAgICAgICAgdGhpcy5hcmlhT3duc1JlZi5pbnN0YW5jZS5jb250ZW50SWQgPSB0aGlzLmNvbnRlbnRJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQWNjZXNzaWJpbGl0eUNvbXBvbmVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzUHJveHlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNQcm94eVJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzUHJveHlSZWYgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5pdGVtLmZvY3VzUHJveHlSZWYuc2V0KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJpYU93bnNSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYXJpYU93bnNSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5hcmlhT3duc1JlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBvaW50ZXJFbnRlcigpOiB2b2lkIHtcbiAgICAgICAgLy8gaWdub3JlIGlmIGRpc2FibGVkIG9yIG5vdCB0aGUgcm9vdCBtZW51XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgIWlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkpIHJldHVybjtcblxuICAgICAgICB0aGlzLndhc0NsaWNrQ2xvc2UgPSBmYWxzZTsgLy8gUmVzZXQgY2xpY2sgY2xvc2UgZmxhZyBvbiBlbnRlclxuICAgICAgICB0aGlzLml0ZW0ud2FzRXNjYXBlQ2xvc2VSZWYuc2V0KGZhbHNlKTsgLy8gUmVzZXQgZXNjYXBlIGZsYWdcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldFRyaWdnZXJQb2ludGVyU3RhdGU/Lih0cnVlKTsgLy8gVXBkYXRlIGNvbnRleHQgc3RhdGVcblxuICAgICAgICAvLyBpZiB0aGUgbWVudSBpc24ndCBhbHJlYWR5IG9wZW4gZm9yIHRoaXMgaXRlbSwgdHJpZ2dlciB0aGUgZW50ZXIgbG9naWNcbiAgICAgICAgaWYgKCF0aGlzLm9wZW4oKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3Blbk9uSG92ZXIoKSB8fCB0aGlzLmNvbnRleHQudmFsdWUoKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQub25UcmlnZ2VyRW50ZXI/Lih0aGlzLml0ZW0udmFsdWUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBvaW50ZXJNb3ZlKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gaWdub3JlIGlmIG5vdCBhIG1vdXNlIGV2ZW50LCBkaXNhYmxlZCwgY2xvc2VkIGJ5IGNsaWNrL2VzY2FwZSwgb3IgYWxyZWFkeSBvcGVuZWQgYnkgdGhpcyBtb3ZlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGV2ZW50LnBvaW50ZXJUeXBlICE9PSAnbW91c2UnIHx8XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkKCkgfHxcbiAgICAgICAgICAgIHRoaXMud2FzQ2xpY2tDbG9zZSB8fFxuICAgICAgICAgICAgdGhpcy5pdGVtLndhc0VzY2FwZUNsb3NlUmVmKCkgfHxcbiAgICAgICAgICAgIHRoaXMuaGFzUG9pbnRlck1vdmVPcGVuZWQgfHxcbiAgICAgICAgICAgICFpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzUG9pbnRlck1vdmVPcGVuZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uUG9pbnRlckxlYXZlKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gaWdub3JlIGlmIG5vdCBhIG1vdXNlIGV2ZW50IG9yIGRpc2FibGVkXG4gICAgICAgIGlmIChldmVudC5wb2ludGVyVHlwZSAhPT0gJ21vdXNlJyB8fCB0aGlzLmRpc2FibGVkKCkgfHwgIWlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGV4dC5zZXRUcmlnZ2VyUG9pbnRlclN0YXRlPy4oZmFsc2UpOyAvLyBVcGRhdGUgY29udGV4dCBzdGF0ZVxuICAgICAgICB0aGlzLmNvbnRleHQub25UcmlnZ2VyTGVhdmU/LigpOyAvLyBUcmlnZ2VyIGxlYXZlIGxvZ2ljIChoYW5kbGVzIGRlbGF5cylcbiAgICAgICAgdGhpcy5oYXNQb2ludGVyTW92ZU9wZW5lZCA9IGZhbHNlOyAvLyBSZXNldCBmbGFnXG5cbiAgICAgICAgLy8gcmVzZXQgdXNlciBkaXNtaXNzYWwgZmxhZyBpZiBwb2ludGVyIGxlYXZlcyB0aGUgd2hvbGUgc3lzdGVtICh0cmlnZ2VyICsgY29udGVudClcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5yZXNldFVzZXJEaXNtaXNzZWQpIHtcbiAgICAgICAgICAgIC8vIHJlbGF5IHNsaWdodGx5IHRvIGFsbG93IHBvaW50ZXIgbW92ZW1lbnQgdG8gY29udGVudCBhcmVhIHdpdGhvdXQgcmVzZXR0aW5nIGRpc21pc3NhbCBzdGF0ZVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNQb2ludGVySW5TeXN0ZW0/LigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXNldFVzZXJEaXNtaXNzZWQ/LigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDUwKTsgLy8gc21hbGwgZGVsYXkgZm9yIHRvbGVyYW5jZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIG1hbnVhbGx5IHNldCB0aGUgYEtleU1hbmFnZXJgIGFjdGl2ZSBpdGVtIHRvIHRoaXMgdHJpZ2dlclxuICAgICAgICB0aGlzLmxpc3Quc2V0QWN0aXZlSXRlbSh0aGlzLml0ZW0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQub25JdGVtU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQub25JdGVtU2VsZWN0KHRoaXMuaXRlbS52YWx1ZSgpKTtcbiAgICAgICAgICAgIC8vIHRyYWNrIGlmIHRoaXMgY2xpY2sgYWN0aW9uIHJlc3VsdGVkIGluIGNsb3NpbmcgdGhlIG1lbnVcbiAgICAgICAgICAgIHRoaXMud2FzQ2xpY2tDbG9zZSA9ICF0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgIC8vIHJlc2V0IGVzY2FwZSBmbGFnIGlmIG1lbnUgd2FzIG9wZW5lZCBieSBjbGlja1xuICAgICAgICAgICAgaWYgKHRoaXMub3BlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtLndhc0VzY2FwZUNsb3NlUmVmLnNldChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEVOVEVSIHx8IGV2ZW50LmtleSA9PT0gU1BBQ0UpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgZGVmYXVsdCBidXR0b24gYmVoYXZpb3JcbiAgICAgICAgICAgIHRoaXMub25DbGljaygpO1xuXG4gICAgICAgICAgICAvLyBpZiBtZW51IHdhcyBvcGVuZWQgYnkgdGhpcyBrZXlwcmVzcywgbW92ZSBmb2N1cyBpbnRvIHRoZSBjb250ZW50XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZlciBmb2N1cyBzbGlnaHRseSB0byBlbnN1cmUgY29udGVudCBpcyByZWFkeVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pdGVtLm9uRW50cnlLZXlEb3duKCksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy5jb250ZXh0Lm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIGNvbnN0IGlzUlRMID0gdGhpcy5jb250ZXh0LmRpciA9PT0gJ3J0bCc7XG5cbiAgICAgICAgLy8gaGFuZGxlIGBBcnJvd0Rvd25gIHNwZWNpZmljYWxseSBmb3Igdmlld3BvcnQgbmF2aWdhdGlvblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBBUlJPV19ET1dOIHx8IGV2ZW50LmtleSA9PT0gVEFCKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBBUlJPV19ET1dOKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIG1lbnUgaXMgb3BlbiwgZm9jdXMgaW50byB0aGUgY29udGVudFxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbigpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gVEFCKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5lZWRlZCB0byBlbnN1cmUgdGhhdCB0aGUgYGtleU1hbmFnZXJgIG9uIHRoZSBsaXN0IGRpcmVjdGl2ZSBkb2VzIG5vdCBhY3RpdmF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyBhbnkgZm9jdXMgdXBkYXRlcywgc2hpZnRpbmcgZm9jdXMgdG8gdGhlIHN1YnNlcXVlbnQgZm9jdXNhYmxlIGxpc3QgaXRlbVxuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBkaXJlY3QgZm9jdXMgaGFuZGxpbmcgZm9yIHZpZXdwb3J0IGNhc2VcbiAgICAgICAgICAgICAgICBpZiAoaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSAmJiB0aGlzLmNvbnRleHQudmlld3BvcnQgJiYgdGhpcy5jb250ZXh0LnZpZXdwb3J0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSB2aWV3cG9ydCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5jb250ZXh0LnZpZXdwb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBhbGwgdGFiYmFibGUgZWxlbWVudHMgaW4gdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJiYWJsZXMgPSBnZXRUYWJiYWJsZUNhbmRpZGF0ZXModmlld3BvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmJhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9jdXMgdGhlIGZpcnN0IHRhYmJhYmxlIGVsZW1lbnQgZGlyZWN0bHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiYmFibGVzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZmFsbGJhY2sgdG8gdGhlIHN0YW5kYXJkIGVudHJ5IGtleSBkb3duIGFwcHJvYWNoXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLml0ZW0ub25FbnRyeUtleURvd24oKSwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBub3Qgb3BlbiBidXQgaW4gaG9yaXpvbnRhbCBvcmllbnRhdGlvbiwgZW11bGF0ZSByaWdodCBrZXkgbmF2aWdhdGlvblxuICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFdmVudCA9IG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGlzUlRMID8gQVJST1dfTEVGVCA6IEFSUk9XX1JJR0hULFxuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXh0RXZlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBBcnJvd1VwIGluIGhvcml6b250YWwgb3JpZW50YXRpb25cbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCAmJiBldmVudC5rZXkgPT09IEFSUk9XX1VQKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBlbXVsYXRlIGEgbGVmdCBrZXkgcHJlc3MgdG8gbW92ZSB0byB0aGUgcHJldmlvdXMgaXRlbVxuICAgICAgICAgICAgY29uc3QgbmV4dEV2ZW50ID0gbmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCB7XG4gICAgICAgICAgICAgICAga2V5OiBpc1JUTCA/IEFSUk9XX1JJR0hUIDogQVJST1dfTEVGVCxcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV4dEV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIGFuZCBlbnRyeSBpbnRvIGNvbnRlbnRcbiAgICAgICAgY29uc3QgdmVydGljYWxFbnRyeUtleSA9IGlzUlRMID8gQVJST1dfTEVGVCA6IEFSUk9XX1JJR0hUO1xuICAgICAgICBjb25zdCBlbnRyeUtleSA9IGlzSG9yaXpvbnRhbCA/IEFSUk9XX0RPV04gOiB2ZXJ0aWNhbEVudHJ5S2V5O1xuXG4gICAgICAgIGlmICh0aGlzLml0ZW0uY29udGVudFJlZigpICYmIGV2ZW50LmtleSA9PT0gZW50cnlLZXkgJiYgZXZlbnQua2V5ICE9PSBBUlJPV19ET1dOKSB7XG4gICAgICAgICAgICAvLyBTa2lwIGlmIGl0J3MgQXJyb3dEb3duIGFzIHdlIGFscmVhZHkgaGFuZGxlZCBpdCBhYm92ZVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW4oKSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGNsb3NlZCwgb3BlbiB0aGUgbWVudSBmaXJzdFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5vbkl0ZW1TZWxlY3Q/Lih0aGlzLml0ZW0udmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgLy8gZGVmZXIgZm9jdXMgbW92ZW1lbnQgaW50byBjb250ZW50IHVudGlsIGFmdGVyIHN0YXRlIHVwZGF0ZSBhbmQgcmVuZGVyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLml0ZW0ub25FbnRyeUtleURvd24oKSwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIGFscmVhZHkgb3BlbiwganVzdCBtb3ZlIGZvY3VzIGludG8gdGhlIGNvbnRlbnRcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0ub25FbnRyeUtleURvd24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","import { booleanAttribute, computed, DestroyRef, Directive, effect, ElementRef, inject, input, NgZone, Renderer2, signal, untracked, ViewContainerRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ARROW_DOWN, ARROW_UP, injectDocument, injectWindow } from '@radix-ng/primitives/core';\nimport { usePresence } from '@radix-ng/primitives/presence';\nimport { injectNavigationMenu, isRootNavigationMenu } from './navigation-menu.token';\nimport { getOpenStateLabel, getTabbableCandidates } from './utils';\nimport * as i0 from \"@angular/core\";\nexport class RdxNavigationMenuViewportDirective {\n constructor() {\n this.context = injectNavigationMenu();\n this.document = injectDocument();\n this.window = injectWindow();\n this.elementRef = inject(ElementRef);\n this.viewContainerRef = inject(ViewContainerRef);\n this.renderer = inject(Renderer2);\n this.zone = inject(NgZone);\n this.destroyRef = inject(DestroyRef);\n /**\n * Used to keep the viewport rendered and available in the DOM, even when closed.\n * Useful for animations.\n * @default false\n */\n this.forceMount = input(false, ...(ngDevMode ? [{ debugName: \"forceMount\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this._contentNodes = signal(new Map(), ...(ngDevMode ? [{ debugName: \"_contentNodes\" }] : []));\n this._activeContentNode = signal(null, ...(ngDevMode ? [{ debugName: \"_activeContentNode\" }] : []));\n this._leavingContentNode = signal(null, ...(ngDevMode ? [{ debugName: \"_leavingContentNode\" }] : []));\n this._viewportSize = signal(null, ...(ngDevMode ? [{ debugName: \"_viewportSize\" }] : []));\n this.activeContentValue = computed(() => {\n if (!isRootNavigationMenu(this.context))\n return null;\n return this.context.value() || this.context.previousValue();\n }, ...(ngDevMode ? [{ debugName: \"activeContentValue\" }] : []));\n this.isOpen = computed(() => {\n if (!isRootNavigationMenu(this.context))\n return false;\n return Boolean(this.context.value() || this.forceMount());\n }, ...(ngDevMode ? [{ debugName: \"isOpen\" }] : []));\n this.dataState = computed(() => getOpenStateLabel(this.isOpen()), ...(ngDevMode ? [{ debugName: \"dataState\" }] : []));\n this.viewportSize = computed(() => this._viewportSize(), ...(ngDevMode ? [{ debugName: \"viewportSize\" }] : []));\n this._resizeObserver = new ResizeObserver(() => this.updateSize());\n this.setupViewportEffect();\n }\n ngOnInit() {\n if (isRootNavigationMenu(this.context) && this.context.onViewportChange) {\n this.context.onViewportChange(this.elementRef.nativeElement);\n }\n }\n ngOnDestroy() {\n this._resizeObserver.disconnect();\n // clean up any remaining nodes/views/subscriptions\n this._contentNodes().forEach((node) => this.cleanupAfterLeave(node));\n if (isRootNavigationMenu(this.context) && this.context.onViewportChange) {\n this.context.onViewportChange(null);\n }\n }\n onKeydown(event) {\n if (!this.isOpen())\n return;\n const tabbableElements = getTabbableCandidates(this.elementRef.nativeElement);\n if (!tabbableElements.length)\n return;\n const activeElement = this.document.activeElement;\n const currentIndex = tabbableElements.findIndex((el) => el === activeElement);\n if (event.key === ARROW_DOWN) {\n event.preventDefault();\n const nextIndex = currentIndex >= 0 && currentIndex < tabbableElements.length - 1 ? currentIndex + 1 : 0;\n tabbableElements[nextIndex]?.focus();\n }\n else if (event.key === ARROW_UP) {\n event.preventDefault();\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : tabbableElements.length - 1;\n tabbableElements[prevIndex]?.focus();\n }\n }\n onPointerEnter() {\n if (isRootNavigationMenu(this.context) && this.context.onContentEnter) {\n this.context.onContentEnter();\n }\n if (isRootNavigationMenu(this.context) && this.context.setContentPointerState) {\n this.context.setContentPointerState(true);\n }\n }\n onPointerLeave() {\n if (isRootNavigationMenu(this.context) && this.context.onContentLeave) {\n this.context.onContentLeave();\n }\n if (isRootNavigationMenu(this.context) && this.context.setContentPointerState) {\n this.context.setContentPointerState(false);\n }\n }\n setupViewportEffect() {\n effect(() => {\n const currentActiveValue = this.context.value();\n const previousActiveValue = this.context.previousValue();\n const forceMount = this.forceMount();\n untracked(() => {\n // ensure context is root before proceeding\n if (!isRootNavigationMenu(this.context) || !this.context.viewportContent) {\n return;\n }\n const allContentData = this.context.viewportContent();\n const currentNodesMap = this._contentNodes();\n let enteringNode = null;\n let leavingNode = this._leavingContentNode(); // get potentially already leaving node\n // 1. Identify Entering Node\n if (currentActiveValue && allContentData.has(currentActiveValue)) {\n enteringNode = this.getOrCreateContentNode(currentActiveValue);\n }\n // 2. Identify Leaving Node\n const nodeThatWasActive = previousActiveValue ? currentNodesMap.get(previousActiveValue) : null;\n // if there was a previously active node, it's different from the entering one,\n // and it's not already leaving, mark it for removal.\n if (nodeThatWasActive && nodeThatWasActive !== enteringNode && nodeThatWasActive !== leavingNode) {\n // if another node was already leaving, force complete its transition\n if (leavingNode) {\n this.forceCompleteLeaveTransition(leavingNode);\n }\n leavingNode = nodeThatWasActive;\n this._leavingContentNode.set(leavingNode);\n }\n // 3. Handle Entering Node\n if (enteringNode) {\n // cancel any pending leave transition for this node if it was leaving\n if (enteringNode === leavingNode) {\n this.cancelLeaveTransition(enteringNode);\n leavingNode = null;\n this._leavingContentNode.set(null);\n }\n // ensure it's in the DOM and set state to open\n this.addNodeToDOM(enteringNode);\n this.setNodeState(enteringNode, 'open'); // Triggers enter animation via data-state\n this._activeContentNode.set(enteringNode);\n this.updateSize(); // Update size based on the entering node\n }\n else {\n // no node entering, clear active node state\n this._activeContentNode.set(null);\n }\n // 4. Handle Leaving Node\n if (leavingNode) {\n if (forceMount) {\n // if forceMount, just mark as closed, don't trigger removal animation\n this.setNodeState(leavingNode, 'closed');\n this._leavingContentNode.set(null); // No longer considered \"leaving\"\n }\n else {\n // start the leave transition (usePresence handles DOM removal)\n this.startLeaveTransition(leavingNode);\n }\n }\n });\n });\n }\n // gets or creates the ContentNode (wrapper + view)\n getOrCreateContentNode(contentValue) {\n const existingNode = this._contentNodes().get(contentValue);\n if (existingNode && !existingNode.embeddedView.destroyed) {\n return existingNode;\n }\n // create if doesn't exist or view was destroyed\n if (!isRootNavigationMenu(this.context) || !this.context.viewportContent)\n return null;\n const allContentData = this.context.viewportContent();\n const contentData = allContentData.get(contentValue);\n const templateRef = contentData?.templateRef;\n if (!templateRef) {\n console.error(`No templateRef found for content value: ${contentValue}`);\n return null;\n }\n try {\n const embeddedView = this.viewContainerRef.createEmbeddedView(templateRef);\n const container = this.renderer.createElement('div');\n this.renderer.setAttribute(container, 'class', 'NavigationMenuContentWrapper');\n this.renderer.setAttribute(container, 'data-content-value', contentValue);\n embeddedView.rootNodes.forEach((node) => this.renderer.appendChild(container, node));\n const newNode = {\n embeddedView,\n element: container,\n contentValue,\n state: 'closed'\n };\n const newMap = new Map(this._contentNodes());\n newMap.set(contentValue, newNode);\n this._contentNodes.set(newMap);\n return newNode;\n }\n catch (error) {\n console.error(`Error creating content node for ${contentValue}:`, error);\n return null;\n }\n }\n // adds node element to viewport DOM if not already present\n addNodeToDOM(node) {\n if (!this.elementRef.nativeElement.contains(node.element)) {\n this.renderer.appendChild(this.elementRef.nativeElement, node.element);\n // observe size only when added to DOM\n this._resizeObserver.observe(node.element);\n }\n }\n // removes node element from viewport DOM\n removeNodeFromDOM(node) {\n if (this.elementRef.nativeElement.contains(node.element)) {\n this._resizeObserver.unobserve(node.element); // stop observing before removal\n this.renderer.removeChild(this.elementRef.nativeElement, node.element);\n }\n }\n // updates the data-state and motion attributes\n setNodeState(node, state) {\n if (node.state === state)\n return; // avoid redundant updates\n node.state = state;\n this.renderer.setAttribute(node.element, 'data-state', state);\n // apply motion attribute based on context\n if (isRootNavigationMenu(this.context) && this.context.viewportContent) {\n const contentData = this.context.viewportContent().get(node.contentValue);\n if (contentData?.getMotionAttribute) {\n // get motion based on current state transition\n const motionAttr = contentData.getMotionAttribute();\n if (motionAttr) {\n this.renderer.setAttribute(node.element, 'data-motion', motionAttr);\n }\n else {\n this.renderer.removeAttribute(node.element, 'data-motion');\n }\n }\n else {\n this.renderer.removeAttribute(node.element, 'data-motion');\n }\n }\n // apply A11y attributes (might only be needed on open?)\n if (state === 'open') {\n this.applyA11yAttributes(node);\n }\n }\n // apply A11y attributes to the first child element\n applyA11yAttributes(node) {\n if (!isRootNavigationMenu(this.context) || !this.context.viewportContent)\n return;\n const contentData = this.context.viewportContent().get(node.contentValue);\n if (contentData?.additionalAttrs && node.embeddedView.rootNodes.length > 0) {\n const firstRootNode = node.embeddedView.rootNodes[0];\n if (firstRootNode) {\n Object.entries(contentData.additionalAttrs).forEach(([attr, value]) => {\n this.renderer.setAttribute(firstRootNode, attr, value);\n });\n }\n }\n }\n startLeaveTransition(node) {\n // ensure node exists and isn't already leaving with an active subscription\n if (!node || node.transitionSubscription) {\n node.transitionSubscription?.unsubscribe();\n return;\n }\n const startFn = () => {\n this.setNodeState(node, 'closed');\n return () => this.cleanupAfterLeave(node);\n };\n const options = {\n animation: true, // assuming CSS animations/transitions handle the exit\n state: 'continue' // start the leave process\n };\n node.transitionSubscription = usePresence(this.zone, node.element, startFn, options)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n complete: () => {\n this.cleanupAfterLeave(node);\n }\n });\n }\n /**\n * Cleanup function called after leave animation finishes\n * @param node The node that is leaving\n */\n cleanupAfterLeave(node) {\n // check if this node is still marked as the one leaving\n if (this._leavingContentNode() === node) {\n this.removeNodeFromDOM(node);\n if (!this.forceMount() && node.embeddedView && !node.embeddedView.destroyed) {\n node.embeddedView.destroy();\n // Remove from cache if destroyed\n const newMap = new Map(this._contentNodes());\n newMap.delete(node.contentValue);\n this._contentNodes.set(newMap);\n }\n node.transitionSubscription = null;\n this._leavingContentNode.set(null);\n if (!this._activeContentNode() && !this.forceMount()) {\n this._viewportSize.set(null);\n }\n }\n else {\n // if this node is NOT the one currently marked as leaving, it means\n // a new transition started before this one finished. Just clean up DOM/Sub.\n this.removeNodeFromDOM(node);\n node.transitionSubscription?.unsubscribe();\n node.transitionSubscription = null;\n }\n }\n /**\n * Cancels an ongoing leave transition (e.g., if user hovers back)\n * @param node The node that is leaving\n */\n cancelLeaveTransition(node) {\n node.transitionSubscription?.unsubscribe();\n node.transitionSubscription = null;\n }\n /**\n * Force completes a leave transition (e.g., if another leave starts)\n * @param node The node that is leaving\n */\n forceCompleteLeaveTransition(node) {\n if (node && node.transitionSubscription) {\n node.transitionSubscription.unsubscribe();\n // perform cleanup immediately\n this.cleanupAfterLeave(node);\n }\n }\n updateSize() {\n const activeNode = this._activeContentNode()?.element; // measure the currently active node\n if (!activeNode || !activeNode.isConnected)\n return;\n const firstChild = activeNode.firstChild;\n if (!firstChild)\n return;\n this.window.requestAnimationFrame(() => {\n // keep rAF here for measurement stability\n activeNode.getBoundingClientRect(); // force layout\n const width = Math.ceil(firstChild.offsetWidth);\n const height = Math.ceil(firstChild.offsetHeight);\n if (width !== 0 || height !== 0) {\n const currentSize = this._viewportSize();\n if (!currentSize || currentSize.width !== width || currentSize.height !== height) {\n this._viewportSize.set({ width, height });\n }\n }\n else if (this._viewportSize() !== null) {\n this._viewportSize.set(null);\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuViewportDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: RdxNavigationMenuViewportDirective, isStandalone: true, selector: \"[rdxNavigationMenuViewport]\", inputs: { forceMount: { classPropertyName: \"forceMount\", publicName: \"forceMount\", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { \"keydown\": \"onKeydown($event)\", \"pointerenter\": \"onPointerEnter()\", \"pointerleave\": \"onPointerLeave()\" }, properties: { \"attr.data-state\": \"dataState()\", \"attr.data-orientation\": \"context.orientation\", \"style.--radix-navigation-menu-viewport-width.px\": \"viewportSize()?.width\", \"style.--radix-navigation-menu-viewport-height.px\": \"viewportSize()?.height\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuViewportDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdxNavigationMenuViewport]',\n host: {\n '[attr.data-state]': 'dataState()',\n '[attr.data-orientation]': 'context.orientation',\n '[style.--radix-navigation-menu-viewport-width.px]': 'viewportSize()?.width',\n '[style.--radix-navigation-menu-viewport-height.px]': 'viewportSize()?.height',\n '(keydown)': 'onKeydown($event)',\n '(pointerenter)': 'onPointerEnter()',\n '(pointerleave)': 'onPointerLeave()'\n }\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tZW51LXZpZXdwb3J0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvbmF2aWdhdGlvbi1tZW51L3NyYy9uYXZpZ2F0aW9uLW1lbnUtdmlld3BvcnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFFVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9GLE9BQU8sRUFBd0MsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQXNCbkUsTUFBTSxPQUFPLGtDQUFrQztJQW1DM0M7UUFsQ2lCLFlBQU8sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2pDLGFBQVEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUM1QixXQUFNLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDeEIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFD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LEVBQUUsa0JBQWtCO3dCQUNwQyxnQkFBZ0IsRUFBRSxrQkFBa0I7cUJBQ3ZDO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFSUk9XX0RPV04sIEFSUk9XX1VQLCBpbmplY3REb2N1bWVudCwgaW5qZWN0V2luZG93IH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uT3B0aW9ucywgVHJhbnNpdGlvblN0YXJ0Rm4sIHVzZVByZXNlbmNlIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvcHJlc2VuY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3ROYXZpZ2F0aW9uTWVudSwgaXNSb290TmF2aWdhdGlvbk1lbnUgfSBmcm9tICcuL25hdmlnYXRpb24tbWVudS50b2tlbic7XG5pbXBvcnQgeyBnZXRPcGVuU3RhdGVMYWJlbCwgZ2V0VGFiYmFibGVDYW5kaWRhdGVzIH0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBDb250ZW50Tm9kZSB7XG4gICAgZW1iZWRkZWRWaWV3OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj47XG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgY29udGVudFZhbHVlOiBzdHJpbmc7XG4gICAgc3RhdGU6ICdvcGVuJyB8ICdjbG9zZWQnO1xuICAgIHRyYW5zaXRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb24gfCBudWxsO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhOYXZpZ2F0aW9uTWVudVZpZXdwb3J0XScsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuZGF0YS1zdGF0ZV0nOiAnZGF0YVN0YXRlKCknLFxuICAgICAgICAnW2F0dHIuZGF0YS1vcmllbnRhdGlvbl0nOiAnY29udGV4dC5vcmllbnRhdGlvbicsXG4gICAgICAgICdbc3R5bGUuLS1yYWRpeC1uYXZpZ2F0aW9uLW1lbnUtdmlld3BvcnQtd2lkdGgucHhdJzogJ3ZpZXdwb3J0U2l6ZSgpPy53aWR0aCcsXG4gICAgICAgICdbc3R5bGUuLS1yYWRpeC1uYXZpZ2F0aW9uLW1lbnUtdmlld3BvcnQtaGVpZ2h0LnB4XSc6ICd2aWV3cG9ydFNpemUoKT8uaGVpZ2h0JyxcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleWRvd24oJGV2ZW50KScsXG4gICAgICAgICcocG9pbnRlcmVudGVyKSc6ICdvblBvaW50ZXJFbnRlcigpJyxcbiAgICAgICAgJyhwb2ludGVybGVhdmUpJzogJ29uUG9pbnRlckxlYXZlKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSZHhOYXZpZ2F0aW9uTWVudVZpZXdwb3J0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dCA9IGluamVjdE5hdmlnYXRpb25NZW51KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdERvY3VtZW50KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3cgPSBpbmplY3RXaW5kb3coKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGtlZXAgdGhlIHZpZXdwb3J0IHJlbmRlcmVkIGFuZCBhdmFpbGFibGUgaW4gdGhlIERPTSwgZXZlbiB3aGVuIGNsb3NlZC5cbiAgICAgKiBVc2VmdWwgZm9yIGFuaW1hdGlvbnMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICByZWFkb25seSBmb3JjZU1vdW50ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udGVudE5vZGVzID0gc2lnbmFsKG5ldyBNYXA8c3RyaW5nLCBDb250ZW50Tm9kZT4oKSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlQ29udGVudE5vZGUgPSBzaWduYWw8Q29udGVudE5vZGUgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sZWF2aW5nQ29udGVudE5vZGUgPSBzaWduYWw8Q29udGVudE5vZGUgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3cG9ydFNpemUgPSBzaWduYWw8eyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG5cbiAgICByZWFkb25seSBhY3RpdmVDb250ZW50VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQudmFsdWUoKSB8fCB0aGlzLmNvbnRleHQucHJldmlvdXNWYWx1ZSgpO1xuICAgIH0pO1xuICAgIHJlYWRvbmx5IGlzT3BlbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKCFpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuY29udGV4dC52YWx1ZSgpIHx8IHRoaXMuZm9yY2VNb3VudCgpKTtcbiAgICB9KTtcbiAgICByZWFkb25seSBkYXRhU3RhdGUgPSBjb21wdXRlZCgoKSA9PiBnZXRPcGVuU3RhdGVMYWJlbCh0aGlzLmlzT3BlbigpKSk7XG4gICAgcmVhZG9ubHkgdmlld3BvcnRTaXplID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fdmlld3BvcnRTaXplKCkpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy51cGRhdGVTaXplKCkpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2V0dXBWaWV3cG9ydEVmZmVjdCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSAmJiB0aGlzLmNvbnRleHQub25WaWV3cG9ydENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm9uVmlld3BvcnRDaGFuZ2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgLy8gY2xlYW4gdXAgYW55IHJlbWFpbmluZyBub2Rlcy92aWV3cy9zdWJzY3JpcHRpb25zXG4gICAgICAgIHRoaXMuX2NvbnRlbnROb2RlcygpLmZvckVhY2goKG5vZGUpID0+IHRoaXMuY2xlYW51cEFmdGVyTGVhdmUobm9kZSkpO1xuICAgICAgICBpZiAoaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSAmJiB0aGlzLmNvbnRleHQub25WaWV3cG9ydENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm9uVmlld3BvcnRDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHRhYmJhYmxlRWxlbWVudHMgPSBnZXRUYWJiYWJsZUNhbmRpZGF0ZXModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIXRhYmJhYmxlRWxlbWVudHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0YWJiYWJsZUVsZW1lbnRzLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBhY3RpdmVFbGVtZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBBUlJPV19ET1dOKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ID49IDAgJiYgY3VycmVudEluZGV4IDwgdGFiYmFibGVFbGVtZW50cy5sZW5ndGggLSAxID8gY3VycmVudEluZGV4ICsgMSA6IDA7XG4gICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnRzW25leHRJbmRleF0/LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBBUlJPV19VUCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZJbmRleCA9IGN1cnJlbnRJbmRleCA+IDAgPyBjdXJyZW50SW5kZXggLSAxIDogdGFiYmFibGVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGFiYmFibGVFbGVtZW50c1twcmV2SW5kZXhdPy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qb2ludGVyRW50ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpICYmIHRoaXMuY29udGV4dC5vbkNvbnRlbnRFbnRlcikge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm9uQ29udGVudEVudGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkgJiYgdGhpcy5jb250ZXh0LnNldENvbnRlbnRQb2ludGVyU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zZXRDb250ZW50UG9pbnRlclN0YXRlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qb2ludGVyTGVhdmUoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpICYmIHRoaXMuY29udGV4dC5vbkNvbnRlbnRMZWF2ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm9uQ29udGVudExlYXZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkgJiYgdGhpcy5jb250ZXh0LnNldENvbnRlbnRQb2ludGVyU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zZXRDb250ZW50UG9pbnRlclN0YXRlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBWaWV3cG9ydEVmZmVjdCgpOiB2b2lkIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBY3RpdmVWYWx1ZSA9IHRoaXMuY29udGV4dC52YWx1ZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBY3RpdmVWYWx1ZSA9IHRoaXMuY29udGV4dC5wcmV2aW91c1ZhbHVlKCk7XG4gICAgICAgICAgICBjb25zdCBmb3JjZU1vdW50ID0gdGhpcy5mb3JjZU1vdW50KCk7XG5cbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZW5zdXJlIGNvbnRleHQgaXMgcm9vdCBiZWZvcmUgcHJvY2VlZGluZ1xuICAgICAgICAgICAgICAgIGlmICghaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSB8fCAhdGhpcy5jb250ZXh0LnZpZXdwb3J0Q29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgYWxsQ29udGVudERhdGEgPSB0aGlzLmNvbnRleHQudmlld3BvcnRDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudE5vZGVzTWFwID0gdGhpcy5fY29udGVudE5vZGVzKCk7XG4gICAgICAgICAgICAgICAgbGV0IGVudGVyaW5nTm9kZTogQ29udGVudE5vZGUgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgbGVhdmluZ05vZGUgPSB0aGlzLl9sZWF2aW5nQ29udGVudE5vZGUoKTsgLy8gZ2V0IHBvdGVudGlhbGx5IGFscmVhZHkgbGVhdmluZyBub2RlXG5cbiAgICAgICAgICAgICAgICAvLyAxLiBJZGVudGlmeSBFbnRlcmluZyBOb2RlXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBY3RpdmVWYWx1ZSAmJiBhbGxDb250ZW50RGF0YS5oYXMoY3VycmVudEFjdGl2ZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRlcmluZ05vZGUgPSB0aGlzLmdldE9yQ3JlYXRlQ29udGVudE5vZGUoY3VycmVudEFjdGl2ZVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyAyLiBJZGVudGlmeSBMZWF2aW5nIE5vZGVcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlVGhhdFdhc0FjdGl2ZSA9IHByZXZpb3VzQWN0aXZlVmFsdWUgPyBjdXJyZW50Tm9kZXNNYXAuZ2V0KHByZXZpb3VzQWN0aXZlVmFsdWUpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgYSBwcmV2aW91c2x5IGFjdGl2ZSBub2RlLCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBlbnRlcmluZyBvbmUsXG4gICAgICAgICAgICAgICAgLy8gYW5kIGl0J3Mgbm90IGFscmVhZHkgbGVhdmluZywgbWFyayBpdCBmb3IgcmVtb3ZhbC5cbiAgICAgICAgICAgICAgICBpZiAobm9kZVRoYXRXYXNBY3RpdmUgJiYgbm9kZVRoYXRXYXNBY3RpdmUgIT09IGVudGVyaW5nTm9kZSAmJiBub2RlVGhhdFdhc0FjdGl2ZSAhPT0gbGVhdmluZ05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW5vdGhlciBub2RlIHdhcyBhbHJlYWR5IGxlYXZpbmcsIGZvcmNlIGNvbXBsZXRlIGl0cyB0cmFuc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWF2aW5nTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZUNvbXBsZXRlTGVhdmVUcmFuc2l0aW9uKGxlYXZpbmdOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZWF2aW5nTm9kZSA9IG5vZGVUaGF0V2FzQWN0aXZlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWF2aW5nQ29udGVudE5vZGUuc2V0KGxlYXZpbmdOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyAzLiBIYW5kbGUgRW50ZXJpbmcgTm9kZVxuICAgICAgICAgICAgICAgIGlmIChlbnRlcmluZ05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsIGFueSBwZW5kaW5nIGxlYXZlIHRyYW5zaXRpb24gZm9yIHRoaXMgbm9kZSBpZiBpdCB3YXMgbGVhdmluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50ZXJpbmdOb2RlID09PSBsZWF2aW5nTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxMZWF2ZVRyYW5zaXRpb24oZW50ZXJpbmdOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYXZpbmdOb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZpbmdDb250ZW50Tm9kZS5zZXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGl0J3MgaW4gdGhlIERPTSBhbmQgc2V0IHN0YXRlIHRvIG9wZW5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGROb2RlVG9ET00oZW50ZXJpbmdOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlU3RhdGUoZW50ZXJpbmdOb2RlLCAnb3BlbicpOyAvLyBUcmlnZ2VycyBlbnRlciBhbmltYXRpb24gdmlhIGRhdGEtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ29udGVudE5vZGUuc2V0KGVudGVyaW5nTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpOyAvLyBVcGRhdGUgc2l6ZSBiYXNlZCBvbiB0aGUgZW50ZXJpbmcgbm9kZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIG5vZGUgZW50ZXJpbmcsIGNsZWFyIGFjdGl2ZSBub2RlIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNvbnRlbnROb2RlLnNldChudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyA0LiBIYW5kbGUgTGVhdmluZyBOb2RlXG4gICAgICAgICAgICAgICAgaWYgKGxlYXZpbmdOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JjZU1vdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBmb3JjZU1vdW50LCBqdXN0IG1hcmsgYXMgY2xvc2VkLCBkb24ndCB0cmlnZ2VyIHJlbW92YWwgYW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVTdGF0ZShsZWF2aW5nTm9kZSwgJ2Nsb3NlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVhdmluZ0NvbnRlbnROb2RlLnNldChudWxsKTsgLy8gTm8gbG9uZ2VyIGNvbnNpZGVyZWQgXCJsZWF2aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHRoZSBsZWF2ZSB0cmFuc2l0aW9uICh1c2VQcmVzZW5jZSBoYW5kbGVzIERPTSByZW1vdmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydExlYXZlVHJhbnNpdGlvbihsZWF2aW5nTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZ2V0cyBvciBjcmVhdGVzIHRoZSBDb250ZW50Tm9kZSAod3JhcHBlciArIHZpZXcpXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZUNvbnRlbnROb2RlKGNvbnRlbnRWYWx1ZTogc3RyaW5nKTogQ29udGVudE5vZGUgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdOb2RlID0gdGhpcy5fY29udGVudE5vZGVzKCkuZ2V0KGNvbnRlbnRWYWx1ZSk7XG4gICAgICAgIGlmIChleGlzdGluZ05vZGUgJiYgIWV4aXN0aW5nTm9kZS5lbWJlZGRlZFZpZXcuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIGlmIGRvZXNuJ3QgZXhpc3Qgb3IgdmlldyB3YXMgZGVzdHJveWVkXG4gICAgICAgIGlmICghaXNSb290TmF2aWdhdGlvbk1lbnUodGhpcy5jb250ZXh0KSB8fCAhdGhpcy5jb250ZXh0LnZpZXdwb3J0Q29udGVudCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGFsbENvbnRlbnREYXRhID0gdGhpcy5jb250ZXh0LnZpZXdwb3J0Q29udGVudCgpO1xuICAgICAgICBjb25zdCBjb250ZW50RGF0YSA9IGFsbENvbnRlbnREYXRhLmdldChjb250ZW50VmFsdWUpO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVJlZiA9IGNvbnRlbnREYXRhPy50ZW1wbGF0ZVJlZjtcblxuICAgICAgICBpZiAoIXRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBObyB0ZW1wbGF0ZVJlZiBmb3VuZCBmb3IgY29udGVudCB2YWx1ZTogJHtjb250ZW50VmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZFZpZXcgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRlbXBsYXRlUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShjb250YWluZXIsICdjbGFzcycsICdOYXZpZ2F0aW9uTWVudUNvbnRlbnRXcmFwcGVyJyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShjb250YWluZXIsICdkYXRhLWNvbnRlbnQtdmFsdWUnLCBjb250ZW50VmFsdWUpO1xuICAgICAgICAgICAgZW1iZWRkZWRWaWV3LnJvb3ROb2Rlcy5mb3JFYWNoKChub2RlOiBOb2RlKSA9PiB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lciwgbm9kZSkpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdOb2RlOiBDb250ZW50Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICBlbWJlZGRlZFZpZXcsXG4gICAgICAgICAgICAgICAgZWxlbWVudDogY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2Nsb3NlZCdcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAodGhpcy5fY29udGVudE5vZGVzKCkpO1xuICAgICAgICAgICAgbmV3TWFwLnNldChjb250ZW50VmFsdWUsIG5ld05vZGUpO1xuICAgICAgICAgICAgdGhpcy5fY29udGVudE5vZGVzLnNldChuZXdNYXApO1xuICAgICAgICAgICAgcmV0dXJuIG5ld05vZGU7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBjcmVhdGluZyBjb250ZW50IG5vZGUgZm9yICR7Y29udGVudFZhbHVlfTpgLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZHMgbm9kZSBlbGVtZW50IHRvIHZpZXdwb3J0IERPTSBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gICAgcHJpdmF0ZSBhZGROb2RlVG9ET00obm9kZTogQ29udGVudE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhub2RlLmVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBub2RlLmVsZW1lbnQpO1xuICAgICAgICAgICAgLy8gb2JzZXJ2ZSBzaXplIG9ubHkgd2hlbiBhZGRlZCB0byBET01cbiAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUobm9kZS5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZXMgbm9kZSBlbGVtZW50IGZyb20gdmlld3BvcnQgRE9NXG4gICAgcHJpdmF0ZSByZW1vdmVOb2RlRnJvbURPTShub2RlOiBDb250ZW50Tm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMobm9kZS5lbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKG5vZGUuZWxlbWVudCk7IC8vIHN0b3Agb2JzZXJ2aW5nIGJlZm9yZSByZW1vdmFsXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBub2RlLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlcyB0aGUgZGF0YS1zdGF0ZSBhbmQgbW90aW9uIGF0dHJpYnV0ZXNcbiAgICBwcml2YXRlIHNldE5vZGVTdGF0ZShub2RlOiBDb250ZW50Tm9kZSwgc3RhdGU6ICdvcGVuJyB8ICdjbG9zZWQnKTogdm9pZCB7XG4gICAgICAgIGlmIChub2RlLnN0YXRlID09PSBzdGF0ZSkgcmV0dXJuOyAvLyBhdm9pZCByZWR1bmRhbnQgdXBkYXRlc1xuXG4gICAgICAgIG5vZGUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobm9kZS5lbGVtZW50LCAnZGF0YS1zdGF0ZScsIHN0YXRlKTtcblxuICAgICAgICAvLyBhcHBseSBtb3Rpb24gYXR0cmlidXRlIGJhc2VkIG9uIGNvbnRleHRcbiAgICAgICAgaWYgKGlzUm9vdE5hdmlnYXRpb25NZW51KHRoaXMuY29udGV4dCkgJiYgdGhpcy5jb250ZXh0LnZpZXdwb3J0Q29udGVudCkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudERhdGEgPSB0aGlzLmNvbnRleHQudmlld3BvcnRDb250ZW50KCkuZ2V0KG5vZGUuY29udGVudFZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjb250ZW50RGF0YT8uZ2V0TW90aW9uQXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IG1vdGlvbiBiYXNlZCBvbiBjdXJyZW50IHN0YXRlIHRyYW5zaXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBtb3Rpb25BdHRyID0gY29udGVudERhdGEuZ2V0TW90aW9uQXR0cmlidXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKG1vdGlvbkF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobm9kZS5lbGVtZW50LCAnZGF0YS1tb3Rpb24nLCBtb3Rpb25BdHRyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShub2RlLmVsZW1lbnQsICdkYXRhLW1vdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUobm9kZS5lbGVtZW50LCAnZGF0YS1tb3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IEExMXkgYXR0cmlidXRlcyAobWlnaHQgb25seSBiZSBuZWVkZWQgb24gb3Blbj8pXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ29wZW4nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5QTExeUF0dHJpYnV0ZXMobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhcHBseSBBMTF5IGF0dHJpYnV0ZXMgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnRcbiAgICBwcml2YXRlIGFwcGx5QTExeUF0dHJpYnV0ZXMobm9kZTogQ29udGVudE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc1Jvb3ROYXZpZ2F0aW9uTWVudSh0aGlzLmNvbnRleHQpIHx8ICF0aGlzLmNvbnRleHQudmlld3BvcnRDb250ZW50KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbnRlbnREYXRhID0gdGhpcy5jb250ZXh0LnZpZXdwb3J0Q29udGVudCgpLmdldChub2RlLmNvbnRlbnRWYWx1ZSk7XG4gICAgICAgIGlmIChjb250ZW50RGF0YT8uYWRkaXRpb25hbEF0dHJzICYmIG5vZGUuZW1iZWRkZWRWaWV3LnJvb3ROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvb3ROb2RlID0gbm9kZS5lbWJlZGRlZFZpZXcucm9vdE5vZGVzWzBdIGFzIEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RSb290Tm9kZSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbnRlbnREYXRhLmFkZGl0aW9uYWxBdHRycykuZm9yRWFjaCgoW2F0dHIsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShmaXJzdFJvb3ROb2RlLCBhdHRyLCB2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydExlYXZlVHJhbnNpdGlvbihub2RlOiBDb250ZW50Tm9kZSk6IHZvaWQge1xuICAgICAgICAvLyBlbnN1cmUgbm9kZSBleGlzdHMgYW5kIGlzbid0IGFscmVhZHkgbGVhdmluZyB3aXRoIGFuIGFjdGl2ZSBzdWJzY3JpcHRpb25cbiAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUudHJhbnNpdGlvblN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgbm9kZS50cmFuc2l0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRGbjogVHJhbnNpdGlvblN0YXJ0Rm48bnVsbD4gPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldE5vZGVTdGF0ZShub2RlLCAnY2xvc2VkJyk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5jbGVhbnVwQWZ0ZXJMZWF2ZShub2RlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9uczxudWxsPiA9IHtcbiAgICAgICAgICAgIGFuaW1hdGlvbjogdHJ1ZSwgLy8gYXNzdW1pbmcgQ1NTIGFuaW1hdGlvbnMvdHJhbnNpdGlvbnMgaGFuZGxlIHRoZSBleGl0XG4gICAgICAgICAgICBzdGF0ZTogJ2NvbnRpbnVlJyAvLyBzdGFydCB0aGUgbGVhdmUgcHJvY2Vzc1xuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGUudHJhbnNpdGlvblN1YnNjcmlwdGlvbiA9IHVzZVByZXNlbmNlKHRoaXMuem9uZSwgbm9kZS5lbGVtZW50LCBzdGFydEZuLCBvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXBBZnRlckxlYXZlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIGxlYXZlIGFuaW1hdGlvbiBmaW5pc2hlc1xuICAgICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHRoYXQgaXMgbGVhdmluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYW51cEFmdGVyTGVhdmUobm9kZTogQ29udGVudE5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBub2RlIGlzIHN0aWxsIG1hcmtlZCBhcyB0aGUgb25lIGxlYXZpbmdcbiAgICAgICAgaWYgKHRoaXMuX2xlYXZpbmdDb250ZW50Tm9kZSgpID09PSBub2RlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU5vZGVGcm9tRE9NKG5vZGUpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcmNlTW91bnQoKSAmJiBub2RlLmVtYmVkZGVkVmlldyAmJiAhbm9kZS5lbWJlZGRlZFZpZXcuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5lbWJlZGRlZFZpZXcuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlIGlmIGRlc3Ryb3llZFxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAodGhpcy5fY29udGVudE5vZGVzKCkpO1xuICAgICAgICAgICAgICAgIG5ld01hcC5kZWxldGUobm9kZS5jb250ZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnROb2Rlcy5zZXQobmV3TWFwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZS50cmFuc2l0aW9uU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xlYXZpbmdDb250ZW50Tm9kZS5zZXQobnVsbCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fYWN0aXZlQ29udGVudE5vZGUoKSAmJiAhdGhpcy5mb3JjZU1vdW50KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3cG9ydFNpemUuc2V0KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBub2RlIGlzIE5PVCB0aGUgb25lIGN1cnJlbnRseSBtYXJrZWQgYXMgbGVhdmluZywgaXQgbWVhbnNcbiAgICAgICAgICAgIC8vIGEgbmV3IHRyYW5zaXRpb24gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgZmluaXNoZWQuIEp1c3QgY2xlYW4gdXAgRE9NL1N1Yi5cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTm9kZUZyb21ET00obm9kZSk7XG4gICAgICAgICAgICBub2RlLnRyYW5zaXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBub2RlLnRyYW5zaXRpb25TdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VscyBhbiBvbmdvaW5nIGxlYXZlIHRyYW5zaXRpb24gKGUuZy4sIGlmIHVzZXIgaG92ZXJzIGJhY2spXG4gICAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdGhhdCBpcyBsZWF2aW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5jZWxMZWF2ZVRyYW5zaXRpb24obm9kZTogQ29udGVudE5vZGUpOiB2b2lkIHtcbiAgICAgICAgbm9kZS50cmFuc2l0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBub2RlLnRyYW5zaXRpb25TdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcmNlIGNvbXBsZXRlcyBhIGxlYXZlIHRyYW5zaXRpb24gKGUuZy4sIGlmIGFub3RoZXIgbGVhdmUgc3RhcnRzKVxuICAgICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHRoYXQgaXMgbGVhdmluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgZm9yY2VDb21wbGV0ZUxlYXZlVHJhbnNpdGlvbihub2RlOiBDb250ZW50Tm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnRyYW5zaXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIG5vZGUudHJhbnNpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgICAvLyBwZXJmb3JtIGNsZWFudXAgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cEFmdGVyTGVhdmUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNpemUoKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU5vZGUgPSB0aGlzLl9hY3RpdmVDb250ZW50Tm9kZSgpPy5lbGVtZW50OyAvLyBtZWFzdXJlIHRoZSBjdXJyZW50bHkgYWN0aXZlIG5vZGVcbiAgICAgICAgaWYgKCFhY3RpdmVOb2RlIHx8ICFhY3RpdmVOb2RlLmlzQ29ubmVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGFjdGl2ZU5vZGUuZmlyc3RDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFmaXJzdENoaWxkKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy53aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIC8vIGtlZXAgckFGIGhlcmUgZm9yIG1lYXN1cmVtZW50IHN0YWJpbGl0eVxuICAgICAgICAgICAgYWN0aXZlTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgLy8gZm9yY2UgbGF5b3V0XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguY2VpbChmaXJzdENoaWxkLm9mZnNldFdpZHRoKTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGguY2VpbChmaXJzdENoaWxkLm9mZnNldEhlaWdodCk7XG5cbiAgICAgICAgICAgIGlmICh3aWR0aCAhPT0gMCB8fCBoZWlnaHQgIT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2l6ZSA9IHRoaXMuX3ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgICAgICAgIGlmICghY3VycmVudFNpemUgfHwgY3VycmVudFNpemUud2lkdGggIT09IHdpZHRoIHx8IGN1cnJlbnRTaXplLmhlaWdodCAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdwb3J0U2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmlld3BvcnRTaXplKCkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3cG9ydFNpemUuc2V0KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=","import { NgModule } from '@angular/core';\nimport { RdxNavigationMenuAriaOwnsComponent, RdxNavigationMenuFocusProxyComponent } from './src/navigation-menu-a11y.component';\nimport { RdxNavigationMenuContentDirective } from './src/navigation-menu-content.directive';\nimport { RdxNavigationMenuIndicatorDirective } from './src/navigation-menu-indicator.directive';\nimport { RdxNavigationMenuItemDirective } from './src/navigation-menu-item.directive';\nimport { RdxNavigationMenuLinkDirective } from './src/navigation-menu-link.directive';\nimport { RdxNavigationMenuListDirective } from './src/navigation-menu-list.directive';\nimport { RdxNavigationMenuSubDirective } from './src/navigation-menu-sub.directive';\nimport { RdxNavigationMenuTriggerDirective } from './src/navigation-menu-trigger.directive';\nimport { RdxNavigationMenuViewportDirective } from './src/navigation-menu-viewport.directive';\nimport { RdxNavigationMenuDirective } from './src/navigation-menu.directive';\nimport * as i0 from \"@angular/core\";\nexport * from './src/navigation-menu-a11y.component';\nexport * from './src/navigation-menu-content.directive';\nexport * from './src/navigation-menu-indicator.directive';\nexport * from './src/navigation-menu-item.directive';\nexport * from './src/navigation-menu-link.directive';\nexport * from './src/navigation-menu-list.directive';\nexport * from './src/navigation-menu-sub.directive';\nexport * from './src/navigation-menu-trigger.directive';\nexport * from './src/navigation-menu-viewport.directive';\nexport * from './src/navigation-menu.directive';\nexport * from './src/navigation-menu.token';\nexport * from './src/navigation-menu.types';\nconst _imports = [\n RdxNavigationMenuDirective,\n RdxNavigationMenuSubDirective,\n RdxNavigationMenuListDirective,\n RdxNavigationMenuItemDirective,\n RdxNavigationMenuTriggerDirective,\n RdxNavigationMenuLinkDirective,\n RdxNavigationMenuIndicatorDirective,\n RdxNavigationMenuContentDirective,\n RdxNavigationMenuViewportDirective,\n RdxNavigationMenuFocusProxyComponent,\n RdxNavigationMenuAriaOwnsComponent\n];\nexport class RdxNavigationMenuModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuModule, imports: [RdxNavigationMenuDirective,\n RdxNavigationMenuSubDirective,\n RdxNavigationMenuListDirective,\n RdxNavigationMenuItemDirective,\n RdxNavigationMenuTriggerDirective,\n RdxNavigationMenuLinkDirective,\n RdxNavigationMenuIndicatorDirective,\n RdxNavigationMenuContentDirective,\n RdxNavigationMenuViewportDirective,\n RdxNavigationMenuFocusProxyComponent,\n RdxNavigationMenuAriaOwnsComponent], exports: [RdxNavigationMenuDirective,\n RdxNavigationMenuSubDirective,\n RdxNavigationMenuListDirective,\n RdxNavigationMenuItemDirective,\n RdxNavigationMenuTriggerDirective,\n RdxNavigationMenuLinkDirective,\n RdxNavigationMenuIndicatorDirective,\n RdxNavigationMenuContentDirective,\n RdxNavigationMenuViewportDirective,\n RdxNavigationMenuFocusProxyComponent,\n RdxNavigationMenuAriaOwnsComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: RdxNavigationMenuModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [..._imports],\n exports: [..._imports]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL25hdmlnYXRpb24tbWVudS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDSCxrQ0FBa0MsRUFDbEMsb0NBQW9DLEVBQ3ZDLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDNUYsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDOUYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBRTdFLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLE1BQU0sUUFBUSxHQUFHO0lBQ2IsMEJBQTBCO0lBQzFCLDZCQUE2QjtJQUM3Qiw4QkFBOEI7SUFDOUIsOEJBQThCO0lBQzlCLGlDQUFpQztJQUNqQyw4QkFBOEI7SUFDOUIsbUNBQW1DO0lBQ25DLGlDQUFpQztJQUNqQyxrQ0FBa0M7SUFDbEMsb0NBQW9DO0lBQ3BDLGtDQUFrQztDQUNyQyxDQUFDO0FBTUYsTUFBTSxPQUFPLHVCQUF1Qjs4R0FBdkIsdUJBQXVCOytHQUF2Qix1QkFBdUIsWUFqQmhDLDBCQUEwQjtZQUMxQiw2QkFBNkI7WUFDN0IsOEJBQThCO1lBQzlCLDhCQUE4QjtZQUM5QixpQ0FBaUM7WUFDakMsOEJBQThCO1lBQzlCLG1DQUFtQztZQUNuQyxpQ0FBaUM7WUFDakMsa0NBQWtDO1lBQ2xDLG9DQUFvQztZQUNwQyxrQ0FBa0MsYUFWbEMsMEJBQTBCO1lBQzFCLDZCQUE2QjtZQUM3Qiw4QkFBOEI7WUFDOUIsOEJBQThCO1lBQzlCLGlDQUFpQztZQUNqQyw4QkFBOEI7WUFDOUIsbUNBQW1DO1lBQ25DLGlDQUFpQztZQUNqQyxrQ0FBa0M7WUFDbEMsb0NBQW9DO1lBQ3BDLGtDQUFrQzsrR0FPekIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQUpuQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBSZHhOYXZpZ2F0aW9uTWVudUFyaWFPd25zQ29tcG9uZW50LFxuICAgIFJkeE5hdmlnYXRpb25NZW51Rm9jdXNQcm94eUNvbXBvbmVudFxufSBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUtYTExeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmR4TmF2aWdhdGlvbk1lbnVDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvbmF2aWdhdGlvbi1tZW51LWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJkeE5hdmlnYXRpb25NZW51SW5kaWNhdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvbmF2aWdhdGlvbi1tZW51LWluZGljYXRvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4TmF2aWdhdGlvbk1lbnVJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvbmF2aWdhdGlvbi1tZW51LWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IFJkeE5hdmlnYXRpb25NZW51TGlua0RpcmVjdGl2ZSB9IGZyb20gJy4vc3JjL25hdmlnYXRpb24tbWVudS1saW5rLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhOYXZpZ2F0aW9uTWVudUxpc3REaXJlY3RpdmUgfSBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUtbGlzdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4TmF2aWdhdGlvbk1lbnVTdWJEaXJlY3RpdmUgfSBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUtc3ViLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhOYXZpZ2F0aW9uTWVudVRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUtdHJpZ2dlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4TmF2aWdhdGlvbk1lbnVWaWV3cG9ydERpcmVjdGl2ZSB9IGZyb20gJy4vc3JjL25hdmlnYXRpb24tbWVudS12aWV3cG9ydC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4TmF2aWdhdGlvbk1lbnVEaXJlY3RpdmUgfSBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUuZGlyZWN0aXZlJztcblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvbmF2aWdhdGlvbi1tZW51LWExMXkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL25hdmlnYXRpb24tbWVudS1jb250ZW50LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUtaW5kaWNhdG9yLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUtaXRlbS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvbmF2aWdhdGlvbi1tZW51LWxpbmsuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL25hdmlnYXRpb24tbWVudS1saXN0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUtc3ViLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUtdHJpZ2dlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvbmF2aWdhdGlvbi1tZW51LXZpZXdwb3J0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL25hdmlnYXRpb24tbWVudS50b2tlbic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9uYXZpZ2F0aW9uLW1lbnUudHlwZXMnO1xuXG5jb25zdCBfaW1wb3J0cyA9IFtcbiAgICBSZHhOYXZpZ2F0aW9uTWVudURpcmVjdGl2ZSxcbiAgICBSZHhOYXZpZ2F0aW9uTWVudVN1YkRpcmVjdGl2ZSxcbiAgICBSZHhOYXZpZ2F0aW9uTWVudUxpc3REaXJlY3RpdmUsXG4gICAgUmR4TmF2aWdhdGlvbk1lbnVJdGVtRGlyZWN0aXZlLFxuICAgIFJkeE5hdmlnYXRpb25NZW51VHJpZ2dlckRpcmVjdGl2ZSxcbiAgICBSZHhOYXZpZ2F0aW9uTWVudUxpbmtEaXJlY3RpdmUsXG4gICAgUmR4TmF2aWdhdGlvbk1lbnVJbmRpY2F0b3JEaXJlY3RpdmUsXG4gICAgUmR4TmF2aWdhdGlvbk1lbnVDb250ZW50RGlyZWN0aXZlLFxuICAgIFJkeE5hdmlnYXRpb25NZW51Vmlld3BvcnREaXJlY3RpdmUsXG4gICAgUmR4TmF2aWdhdGlvbk1lbnVGb2N1c1Byb3h5Q29tcG9uZW50LFxuICAgIFJkeE5hdmlnYXRpb25NZW51QXJpYU93bnNDb21wb25lbnRcbl07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogWy4uLl9pbXBvcnRzXSxcbiAgICBleHBvcnRzOiBbLi4uX2ltcG9ydHNdXG59KVxuZXhwb3J0IGNsYXNzIFJkeE5hdmlnYXRpb25NZW51TW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaXgtbmctcHJpbWl0aXZlcy1uYXZpZ2F0aW9uLW1lbnUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL25hdmlnYXRpb24tbWVudS9yYWRpeC1uZy1wcmltaXRpdmVzLW5hdmlnYXRpb24tbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["ROOT_CONTENT_DISMISS"],"mappings":"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"}