@angular/cdk 19.0.0-next.1 → 19.0.0-next.2

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 (311) hide show
  1. package/a11y/index.d.ts +5 -1
  2. package/fesm2022/a11y.mjs +21 -11
  3. package/fesm2022/a11y.mjs.map +1 -1
  4. package/fesm2022/cdk.mjs +1 -1
  5. package/fesm2022/cdk.mjs.map +1 -1
  6. package/fesm2022/drag-drop.mjs +2 -1
  7. package/fesm2022/drag-drop.mjs.map +1 -1
  8. package/fesm2022/overlay.mjs +20 -1
  9. package/fesm2022/overlay.mjs.map +1 -1
  10. package/fesm2022/private.mjs +9 -7
  11. package/fesm2022/private.mjs.map +1 -1
  12. package/fesm2022/text-field.mjs +17 -2
  13. package/fesm2022/text-field.mjs.map +1 -1
  14. package/fesm2022/tree.mjs +13 -7
  15. package/fesm2022/tree.mjs.map +1 -1
  16. package/overlay/_index.scss +15 -13
  17. package/overlay/index.d.ts +5 -0
  18. package/overlay-prebuilt.css +1 -1
  19. package/package.json +1 -57
  20. package/private/index.d.ts +1 -0
  21. package/schematics/ng-add/index.js +1 -1
  22. package/schematics/ng-add/index.mjs +1 -1
  23. package/text-field/index.d.ts +1 -0
  24. package/tree/index.d.ts +3 -1
  25. package/esm2022/a11y/a11y-module.mjs +0 -31
  26. package/esm2022/a11y/a11y_public_index.mjs +0 -5
  27. package/esm2022/a11y/aria-describer/aria-describer.mjs +0 -232
  28. package/esm2022/a11y/aria-describer/aria-reference.mjs +0 -47
  29. package/esm2022/a11y/fake-event-detection.mjs +0 -29
  30. package/esm2022/a11y/focus-monitor/focus-monitor.mjs +0 -468
  31. package/esm2022/a11y/focus-trap/configurable-focus-trap-config.mjs +0 -9
  32. package/esm2022/a11y/focus-trap/configurable-focus-trap-factory.mjs +0 -54
  33. package/esm2022/a11y/focus-trap/configurable-focus-trap.mjs +0 -51
  34. package/esm2022/a11y/focus-trap/event-listener-inert-strategy.mjs +0 -61
  35. package/esm2022/a11y/focus-trap/focus-trap-inert-strategy.mjs +0 -11
  36. package/esm2022/a11y/focus-trap/focus-trap-manager.mjs +0 -53
  37. package/esm2022/a11y/focus-trap/focus-trap.mjs +0 -396
  38. package/esm2022/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +0 -116
  39. package/esm2022/a11y/index.mjs +0 -9
  40. package/esm2022/a11y/input-modality/input-modality-detector.mjs +0 -176
  41. package/esm2022/a11y/interactivity-checker/interactivity-checker.mjs +0 -238
  42. package/esm2022/a11y/key-manager/activedescendant-key-manager.mjs +0 -20
  43. package/esm2022/a11y/key-manager/focus-key-manager.mjs +0 -29
  44. package/esm2022/a11y/key-manager/list-key-manager.mjs +0 -357
  45. package/esm2022/a11y/key-manager/noop-tree-key-manager.mjs +0 -94
  46. package/esm2022/a11y/key-manager/tree-key-manager-strategy.mjs +0 -9
  47. package/esm2022/a11y/key-manager/tree-key-manager.mjs +0 -345
  48. package/esm2022/a11y/key-manager/typeahead.mjs +0 -91
  49. package/esm2022/a11y/live-announcer/live-announcer-tokens.mjs +0 -19
  50. package/esm2022/a11y/live-announcer/live-announcer.mjs +0 -210
  51. package/esm2022/a11y/public-api.mjs +0 -30
  52. package/esm2022/accordion/accordion-item.mjs +0 -162
  53. package/esm2022/accordion/accordion-module.mjs +0 -24
  54. package/esm2022/accordion/accordion.mjs +0 -65
  55. package/esm2022/accordion/accordion_public_index.mjs +0 -5
  56. package/esm2022/accordion/index.mjs +0 -9
  57. package/esm2022/accordion/public-api.mjs +0 -11
  58. package/esm2022/bidi/bidi-module.mjs +0 -23
  59. package/esm2022/bidi/bidi_public_index.mjs +0 -5
  60. package/esm2022/bidi/dir-document-token.mjs +0 -33
  61. package/esm2022/bidi/dir.mjs +0 -70
  62. package/esm2022/bidi/directionality.mjs +0 -52
  63. package/esm2022/bidi/index.mjs +0 -9
  64. package/esm2022/bidi/public-api.mjs +0 -12
  65. package/esm2022/clipboard/clipboard-module.mjs +0 -23
  66. package/esm2022/clipboard/clipboard.mjs +0 -53
  67. package/esm2022/clipboard/clipboard_public_index.mjs +0 -5
  68. package/esm2022/clipboard/copy-to-clipboard.mjs +0 -100
  69. package/esm2022/clipboard/index.mjs +0 -9
  70. package/esm2022/clipboard/pending-copy.mjs +0 -71
  71. package/esm2022/clipboard/public-api.mjs +0 -12
  72. package/esm2022/coercion/array.mjs +0 -11
  73. package/esm2022/coercion/boolean-property.mjs +0 -12
  74. package/esm2022/coercion/css-pixel-value.mjs +0 -15
  75. package/esm2022/coercion/element.mjs +0 -16
  76. package/esm2022/coercion/index.mjs +0 -9
  77. package/esm2022/coercion/number-property.mjs +0 -24
  78. package/esm2022/coercion/private/index.mjs +0 -9
  79. package/esm2022/coercion/private/observable.mjs +0 -19
  80. package/esm2022/coercion/private/private_public_index.mjs +0 -5
  81. package/esm2022/coercion/public-api.mjs +0 -14
  82. package/esm2022/coercion/string-array.mjs +0 -38
  83. package/esm2022/collections/array-data-source.mjs +0 -21
  84. package/esm2022/collections/collection-viewer.mjs +0 -9
  85. package/esm2022/collections/collections_public_index.mjs +0 -5
  86. package/esm2022/collections/data-source.mjs +0 -19
  87. package/esm2022/collections/dispose-view-repeater-strategy.mjs +0 -48
  88. package/esm2022/collections/index.mjs +0 -9
  89. package/esm2022/collections/public-api.mjs +0 -17
  90. package/esm2022/collections/recycle-view-repeater-strategy.mjs +0 -129
  91. package/esm2022/collections/selection-model.mjs +0 -225
  92. package/esm2022/collections/tree-adapter.mjs +0 -9
  93. package/esm2022/collections/unique-selection-dispatcher.mjs +0 -55
  94. package/esm2022/collections/view-repeater.mjs +0 -26
  95. package/esm2022/dialog/dialog-config.mjs +0 -70
  96. package/esm2022/dialog/dialog-container.mjs +0 -308
  97. package/esm2022/dialog/dialog-injectors.mjs +0 -40
  98. package/esm2022/dialog/dialog-module.mjs +0 -40
  99. package/esm2022/dialog/dialog-ref.mjs +0 -85
  100. package/esm2022/dialog/dialog.mjs +0 -303
  101. package/esm2022/dialog/dialog_public_index.mjs +0 -5
  102. package/esm2022/dialog/index.mjs +0 -9
  103. package/esm2022/dialog/public-api.mjs +0 -14
  104. package/esm2022/drag-drop/directives/assertions.mjs +0 -18
  105. package/esm2022/drag-drop/directives/config.mjs +0 -14
  106. package/esm2022/drag-drop/directives/drag-handle.mjs +0 -68
  107. package/esm2022/drag-drop/directives/drag-placeholder.mjs +0 -43
  108. package/esm2022/drag-drop/directives/drag-preview.mjs +0 -48
  109. package/esm2022/drag-drop/directives/drag.mjs +0 -520
  110. package/esm2022/drag-drop/directives/drop-list-group.mjs +0 -47
  111. package/esm2022/drag-drop/directives/drop-list.mjs +0 -352
  112. package/esm2022/drag-drop/dom/clone-node.mjs +0 -65
  113. package/esm2022/drag-drop/dom/dom-rect.mjs +0 -64
  114. package/esm2022/drag-drop/dom/parent-position-tracker.mjs +0 -76
  115. package/esm2022/drag-drop/dom/root-node.mjs +0 -21
  116. package/esm2022/drag-drop/dom/styling.mjs +0 -89
  117. package/esm2022/drag-drop/dom/transition-duration.mjs +0 -36
  118. package/esm2022/drag-drop/drag-drop-module.mjs +0 -49
  119. package/esm2022/drag-drop/drag-drop-registry.mjs +0 -248
  120. package/esm2022/drag-drop/drag-drop.mjs +0 -57
  121. package/esm2022/drag-drop/drag-drop_public_index.mjs +0 -5
  122. package/esm2022/drag-drop/drag-events.mjs +0 -9
  123. package/esm2022/drag-drop/drag-parent.mjs +0 -16
  124. package/esm2022/drag-drop/drag-ref.mjs +0 -1097
  125. package/esm2022/drag-drop/drag-utils.mjs +0 -60
  126. package/esm2022/drag-drop/drop-list-ref.mjs +0 -672
  127. package/esm2022/drag-drop/index.mjs +0 -9
  128. package/esm2022/drag-drop/preview-ref.mjs +0 -125
  129. package/esm2022/drag-drop/public-api.mjs +0 -23
  130. package/esm2022/drag-drop/sorting/drop-list-sort-strategy.mjs +0 -9
  131. package/esm2022/drag-drop/sorting/mixed-sort-strategy.mjs +0 -246
  132. package/esm2022/drag-drop/sorting/single-axis-sort-strategy.mjs +0 -343
  133. package/esm2022/index.mjs +0 -9
  134. package/esm2022/keycodes/index.mjs +0 -9
  135. package/esm2022/keycodes/keycodes.mjs +0 -127
  136. package/esm2022/keycodes/keycodes_public_index.mjs +0 -5
  137. package/esm2022/keycodes/modifiers.mjs +0 -18
  138. package/esm2022/keycodes/public-api.mjs +0 -10
  139. package/esm2022/layout/breakpoints-observer.mjs +0 -105
  140. package/esm2022/layout/breakpoints.mjs +0 -29
  141. package/esm2022/layout/index.mjs +0 -9
  142. package/esm2022/layout/layout-module.mjs +0 -19
  143. package/esm2022/layout/layout_public_index.mjs +0 -5
  144. package/esm2022/layout/media-matcher.mjs +0 -94
  145. package/esm2022/layout/public-api.mjs +0 -12
  146. package/esm2022/listbox/index.mjs +0 -9
  147. package/esm2022/listbox/listbox-module.mjs +0 -24
  148. package/esm2022/listbox/listbox.mjs +0 -888
  149. package/esm2022/listbox/listbox_public_index.mjs +0 -5
  150. package/esm2022/listbox/public-api.mjs +0 -10
  151. package/esm2022/menu/context-menu-trigger.mjs +0 -221
  152. package/esm2022/menu/event-detection.mjs +0 -28
  153. package/esm2022/menu/index.mjs +0 -9
  154. package/esm2022/menu/menu-aim.mjs +0 -204
  155. package/esm2022/menu/menu-bar.mjs +0 -134
  156. package/esm2022/menu/menu-base.mjs +0 -192
  157. package/esm2022/menu/menu-errors.mjs +0 -22
  158. package/esm2022/menu/menu-group.mjs +0 -31
  159. package/esm2022/menu/menu-interface.mjs +0 -11
  160. package/esm2022/menu/menu-item-checkbox.mjs +0 -50
  161. package/esm2022/menu/menu-item-radio.mjs +0 -72
  162. package/esm2022/menu/menu-item-selectable.mjs +0 -36
  163. package/esm2022/menu/menu-item.mjs +0 -270
  164. package/esm2022/menu/menu-module.mjs +0 -60
  165. package/esm2022/menu/menu-stack.mjs +0 -163
  166. package/esm2022/menu/menu-trigger-base.mjs +0 -119
  167. package/esm2022/menu/menu-trigger.mjs +0 -313
  168. package/esm2022/menu/menu.mjs +0 -135
  169. package/esm2022/menu/menu_public_index.mjs +0 -5
  170. package/esm2022/menu/pointer-focus-tracker.mjs +0 -51
  171. package/esm2022/menu/public-api.mjs +0 -24
  172. package/esm2022/observers/index.mjs +0 -9
  173. package/esm2022/observers/observe-content.mjs +0 -216
  174. package/esm2022/observers/observers_public_index.mjs +0 -5
  175. package/esm2022/observers/private/index.mjs +0 -9
  176. package/esm2022/observers/private/private_public_index.mjs +0 -5
  177. package/esm2022/observers/private/shared-resize-observer.mjs +0 -125
  178. package/esm2022/observers/public-api.mjs +0 -9
  179. package/esm2022/overlay/dispatchers/base-overlay-dispatcher.mjs +0 -52
  180. package/esm2022/overlay/dispatchers/index.mjs +0 -10
  181. package/esm2022/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +0 -81
  182. package/esm2022/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +0 -151
  183. package/esm2022/overlay/fullscreen-overlay-container.mjs +0 -94
  184. package/esm2022/overlay/index.mjs +0 -9
  185. package/esm2022/overlay/overlay-config.mjs +0 -45
  186. package/esm2022/overlay/overlay-container.mjs +0 -81
  187. package/esm2022/overlay/overlay-directives.mjs +0 -432
  188. package/esm2022/overlay/overlay-module.mjs +0 -28
  189. package/esm2022/overlay/overlay-ref.mjs +0 -437
  190. package/esm2022/overlay/overlay.mjs +0 -126
  191. package/esm2022/overlay/overlay_public_index.mjs +0 -5
  192. package/esm2022/overlay/position/connected-position.mjs +0 -88
  193. package/esm2022/overlay/position/flexible-connected-position-strategy.mjs +0 -1002
  194. package/esm2022/overlay/position/global-position-strategy.mjs +0 -237
  195. package/esm2022/overlay/position/overlay-position-builder.mjs +0 -50
  196. package/esm2022/overlay/position/position-strategy.mjs +0 -9
  197. package/esm2022/overlay/position/scroll-clip.mjs +0 -40
  198. package/esm2022/overlay/public-api.mjs +0 -22
  199. package/esm2022/overlay/scroll/block-scroll-strategy.mjs +0 -80
  200. package/esm2022/overlay/scroll/close-scroll-strategy.mjs +0 -65
  201. package/esm2022/overlay/scroll/index.mjs +0 -14
  202. package/esm2022/overlay/scroll/noop-scroll-strategy.mjs +0 -17
  203. package/esm2022/overlay/scroll/reposition-scroll-strategy.mjs +0 -61
  204. package/esm2022/overlay/scroll/scroll-strategy-options.mjs +0 -55
  205. package/esm2022/overlay/scroll/scroll-strategy.mjs +0 -14
  206. package/esm2022/platform/features/input-types.mjs +0 -59
  207. package/esm2022/platform/features/passive-listeners.mjs +0 -36
  208. package/esm2022/platform/features/scrolling.mjs +0 -104
  209. package/esm2022/platform/features/shadow-dom.mjs +0 -54
  210. package/esm2022/platform/features/test-environment.mjs +0 -24
  211. package/esm2022/platform/index.mjs +0 -9
  212. package/esm2022/platform/platform-module.mjs +0 -19
  213. package/esm2022/platform/platform.mjs +0 -82
  214. package/esm2022/platform/platform_public_index.mjs +0 -5
  215. package/esm2022/platform/public-api.mjs +0 -15
  216. package/esm2022/portal/dom-portal-outlet.mjs +0 -158
  217. package/esm2022/portal/index.mjs +0 -9
  218. package/esm2022/portal/portal-directives.mjs +0 -251
  219. package/esm2022/portal/portal-errors.mjs +0 -51
  220. package/esm2022/portal/portal-injector.mjs +0 -28
  221. package/esm2022/portal/portal.mjs +0 -189
  222. package/esm2022/portal/portal_public_index.mjs +0 -5
  223. package/esm2022/portal/public-api.mjs +0 -12
  224. package/esm2022/private/index.mjs +0 -9
  225. package/esm2022/private/private_public_index.mjs +0 -5
  226. package/esm2022/private/public-api.mjs +0 -9
  227. package/esm2022/private/style-loader.mjs +0 -50
  228. package/esm2022/public-api.mjs +0 -9
  229. package/esm2022/scrolling/fixed-size-virtual-scroll.mjs +0 -218
  230. package/esm2022/scrolling/index.mjs +0 -9
  231. package/esm2022/scrolling/public-api.mjs +0 -20
  232. package/esm2022/scrolling/scroll-dispatcher.mjs +0 -163
  233. package/esm2022/scrolling/scrollable.mjs +0 -177
  234. package/esm2022/scrolling/scrolling-module.mjs +0 -69
  235. package/esm2022/scrolling/scrolling_public_index.mjs +0 -5
  236. package/esm2022/scrolling/viewport-ruler.mjs +0 -146
  237. package/esm2022/scrolling/virtual-for-of.mjs +0 -299
  238. package/esm2022/scrolling/virtual-scroll-repeater.mjs +0 -9
  239. package/esm2022/scrolling/virtual-scroll-strategy.mjs +0 -11
  240. package/esm2022/scrolling/virtual-scroll-viewport.mjs +0 -445
  241. package/esm2022/scrolling/virtual-scrollable-element.mjs +0 -42
  242. package/esm2022/scrolling/virtual-scrollable-window.mjs +0 -41
  243. package/esm2022/scrolling/virtual-scrollable.mjs +0 -40
  244. package/esm2022/stepper/index.mjs +0 -9
  245. package/esm2022/stepper/public-api.mjs +0 -13
  246. package/esm2022/stepper/step-header.mjs +0 -31
  247. package/esm2022/stepper/step-label.mjs +0 -24
  248. package/esm2022/stepper/stepper-button.mjs +0 -58
  249. package/esm2022/stepper/stepper-module.mjs +0 -41
  250. package/esm2022/stepper/stepper.mjs +0 -452
  251. package/esm2022/stepper/stepper_public_index.mjs +0 -5
  252. package/esm2022/table/can-stick.mjs +0 -46
  253. package/esm2022/table/cell.mjs +0 -245
  254. package/esm2022/table/coalesced-style-scheduler.mjs +0 -79
  255. package/esm2022/table/index.mjs +0 -9
  256. package/esm2022/table/public-api.mjs +0 -20
  257. package/esm2022/table/row.mjs +0 -317
  258. package/esm2022/table/sticky-position-listener.mjs +0 -11
  259. package/esm2022/table/sticky-styler.mjs +0 -347
  260. package/esm2022/table/table-errors.mjs +0 -67
  261. package/esm2022/table/table-module.mjs +0 -93
  262. package/esm2022/table/table.mjs +0 -1148
  263. package/esm2022/table/table_public_index.mjs +0 -5
  264. package/esm2022/table/text-column.mjs +0 -154
  265. package/esm2022/table/tokens.mjs +0 -16
  266. package/esm2022/testing/change-detection.mjs +0 -102
  267. package/esm2022/testing/component-harness.mjs +0 -328
  268. package/esm2022/testing/element-dimensions.mjs +0 -9
  269. package/esm2022/testing/harness-environment.mjs +0 -220
  270. package/esm2022/testing/index.mjs +0 -9
  271. package/esm2022/testing/public-api.mjs +0 -15
  272. package/esm2022/testing/selenium-webdriver/index.mjs +0 -9
  273. package/esm2022/testing/selenium-webdriver/public-api.mjs +0 -10
  274. package/esm2022/testing/selenium-webdriver/selenium-web-driver-element.mjs +0 -216
  275. package/esm2022/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +0 -88
  276. package/esm2022/testing/selenium-webdriver/selenium-webdriver-keys.mjs +0 -64
  277. package/esm2022/testing/test-element-errors.mjs +0 -15
  278. package/esm2022/testing/test-element.mjs +0 -49
  279. package/esm2022/testing/testbed/fake-events/dispatch-events.mjs +0 -53
  280. package/esm2022/testing/testbed/fake-events/element-focus.mjs +0 -39
  281. package/esm2022/testing/testbed/fake-events/event-objects.mjs +0 -127
  282. package/esm2022/testing/testbed/fake-events/index.mjs +0 -14
  283. package/esm2022/testing/testbed/fake-events/type-in-element.mjs +0 -97
  284. package/esm2022/testing/testbed/index.mjs +0 -9
  285. package/esm2022/testing/testbed/public-api.mjs +0 -10
  286. package/esm2022/testing/testbed/task-state-zone-interceptor.mjs +0 -83
  287. package/esm2022/testing/testbed/testbed-harness-environment.mjs +0 -165
  288. package/esm2022/testing/testbed/unit-test-element.mjs +0 -258
  289. package/esm2022/testing/text-filtering.mjs +0 -21
  290. package/esm2022/text-field/autofill.mjs +0 -114
  291. package/esm2022/text-field/autosize.mjs +0 -309
  292. package/esm2022/text-field/index.mjs +0 -9
  293. package/esm2022/text-field/public-api.mjs +0 -11
  294. package/esm2022/text-field/text-field-module.mjs +0 -24
  295. package/esm2022/text-field/text-field_public_index.mjs +0 -5
  296. package/esm2022/tree/control/base-tree-control.mjs +0 -62
  297. package/esm2022/tree/control/flat-tree-control.mjs +0 -57
  298. package/esm2022/tree/control/nested-tree-control.mjs +0 -67
  299. package/esm2022/tree/control/tree-control.mjs +0 -2
  300. package/esm2022/tree/index.mjs +0 -9
  301. package/esm2022/tree/nested-node.mjs +0 -103
  302. package/esm2022/tree/node.mjs +0 -36
  303. package/esm2022/tree/outlet.mjs +0 -40
  304. package/esm2022/tree/padding.mjs +0 -129
  305. package/esm2022/tree/public-api.mjs +0 -20
  306. package/esm2022/tree/toggle.mjs +0 -51
  307. package/esm2022/tree/tree-errors.mjs +0 -44
  308. package/esm2022/tree/tree-module.mjs +0 -49
  309. package/esm2022/tree/tree.mjs +0 -1123
  310. package/esm2022/tree/tree_public_index.mjs +0 -5
  311. package/esm2022/version.mjs +0 -11
@@ -1,270 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { booleanAttribute, Directive, ElementRef, EventEmitter, inject, Input, NgZone, Output, } from '@angular/core';
9
- import { InputModalityDetector } from '@angular/cdk/a11y';
10
- import { ENTER, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';
11
- import { Directionality } from '@angular/cdk/bidi';
12
- import { fromEvent, Subject } from 'rxjs';
13
- import { filter, takeUntil } from 'rxjs/operators';
14
- import { CdkMenuTrigger } from './menu-trigger';
15
- import { CDK_MENU } from './menu-interface';
16
- import { FocusNext, MENU_STACK } from './menu-stack';
17
- import { MENU_AIM } from './menu-aim';
18
- import { eventDispatchesNativeClick } from './event-detection';
19
- import * as i0 from "@angular/core";
20
- /**
21
- * Directive which provides the ability for an element to be focused and navigated to using the
22
- * keyboard when residing in a CdkMenu, CdkMenuBar, or CdkMenuGroup. It performs user defined
23
- * behavior when clicked.
24
- */
25
- export class CdkMenuItem {
26
- /** Whether the menu item opens a menu. */
27
- get hasMenu() {
28
- return this._menuTrigger?.menuTemplateRef != null;
29
- }
30
- constructor() {
31
- this._dir = inject(Directionality, { optional: true });
32
- this._elementRef = inject(ElementRef);
33
- this._ngZone = inject(NgZone);
34
- this._inputModalityDetector = inject(InputModalityDetector);
35
- /** The menu aim service used by this menu. */
36
- this._menuAim = inject(MENU_AIM, { optional: true });
37
- /** The stack of menus this menu belongs to. */
38
- this._menuStack = inject(MENU_STACK);
39
- /** The parent menu in which this menuitem resides. */
40
- this._parentMenu = inject(CDK_MENU, { optional: true });
41
- /** Reference to the CdkMenuItemTrigger directive if one is added to the same element */
42
- this._menuTrigger = inject(CdkMenuTrigger, { optional: true, self: true });
43
- /** Whether the CdkMenuItem is disabled - defaults to false */
44
- this.disabled = false;
45
- /**
46
- * If this MenuItem is a regular MenuItem, outputs when it is triggered by a keyboard or mouse
47
- * event.
48
- */
49
- this.triggered = new EventEmitter();
50
- /**
51
- * The tabindex for this menu item managed internally and used for implementing roving a
52
- * tab index.
53
- */
54
- this._tabindex = -1;
55
- /** Whether the item should close the menu if triggered by the spacebar. */
56
- this.closeOnSpacebarTrigger = true;
57
- /** Emits when the menu item is destroyed. */
58
- this.destroyed = new Subject();
59
- this._setupMouseEnter();
60
- this._setType();
61
- if (this._isStandaloneItem()) {
62
- this._tabindex = 0;
63
- }
64
- }
65
- ngOnDestroy() {
66
- this.destroyed.next();
67
- this.destroyed.complete();
68
- }
69
- /** Place focus on the element. */
70
- focus() {
71
- this._elementRef.nativeElement.focus();
72
- }
73
- /**
74
- * If the menu item is not disabled and the element does not have a menu trigger attached, emit
75
- * on the cdkMenuItemTriggered emitter and close all open menus.
76
- * @param options Options the configure how the item is triggered
77
- * - keepOpen: specifies that the menu should be kept open after triggering the item.
78
- */
79
- trigger(options) {
80
- const { keepOpen } = { ...options };
81
- if (!this.disabled && !this.hasMenu) {
82
- this.triggered.next();
83
- if (!keepOpen) {
84
- this._menuStack.closeAll({ focusParentTrigger: true });
85
- }
86
- }
87
- }
88
- /** Return true if this MenuItem has an attached menu and it is open. */
89
- isMenuOpen() {
90
- return !!this._menuTrigger?.isOpen();
91
- }
92
- /**
93
- * Get a reference to the rendered Menu if the Menu is open and it is visible in the DOM.
94
- * @return the menu if it is open, otherwise undefined.
95
- */
96
- getMenu() {
97
- return this._menuTrigger?.getMenu();
98
- }
99
- /** Get the CdkMenuTrigger associated with this element. */
100
- getMenuTrigger() {
101
- return this._menuTrigger;
102
- }
103
- /** Get the label for this element which is required by the FocusableOption interface. */
104
- getLabel() {
105
- return this.typeaheadLabel || this._elementRef.nativeElement.textContent?.trim() || '';
106
- }
107
- /** Reset the tabindex to -1. */
108
- _resetTabIndex() {
109
- if (!this._isStandaloneItem()) {
110
- this._tabindex = -1;
111
- }
112
- }
113
- /**
114
- * Set the tab index to 0 if not disabled and it's a focus event, or a mouse enter if this element
115
- * is not in a menu bar.
116
- */
117
- _setTabIndex(event) {
118
- if (this.disabled) {
119
- return;
120
- }
121
- // don't set the tabindex if there are no open sibling or parent menus
122
- if (!event || !this._menuStack.isEmpty()) {
123
- this._tabindex = 0;
124
- }
125
- }
126
- /**
127
- * Handles keyboard events for the menu item, specifically either triggering the user defined
128
- * callback or opening/closing the current menu based on whether the left or right arrow key was
129
- * pressed.
130
- * @param event the keyboard event to handle
131
- */
132
- _onKeydown(event) {
133
- switch (event.keyCode) {
134
- case SPACE:
135
- case ENTER:
136
- // Skip events that will trigger clicks so the handler doesn't get triggered twice.
137
- if (!hasModifierKey(event) && !eventDispatchesNativeClick(this._elementRef, event)) {
138
- this.trigger({ keepOpen: event.keyCode === SPACE && !this.closeOnSpacebarTrigger });
139
- }
140
- break;
141
- case RIGHT_ARROW:
142
- if (!hasModifierKey(event)) {
143
- if (this._parentMenu && this._isParentVertical()) {
144
- if (this._dir?.value !== 'rtl') {
145
- this._forwardArrowPressed(event);
146
- }
147
- else {
148
- this._backArrowPressed(event);
149
- }
150
- }
151
- }
152
- break;
153
- case LEFT_ARROW:
154
- if (!hasModifierKey(event)) {
155
- if (this._parentMenu && this._isParentVertical()) {
156
- if (this._dir?.value !== 'rtl') {
157
- this._backArrowPressed(event);
158
- }
159
- else {
160
- this._forwardArrowPressed(event);
161
- }
162
- }
163
- }
164
- break;
165
- }
166
- }
167
- /** Whether this menu item is standalone or within a menu or menu bar. */
168
- _isStandaloneItem() {
169
- return !this._parentMenu;
170
- }
171
- /**
172
- * Handles the user pressing the back arrow key.
173
- * @param event The keyboard event.
174
- */
175
- _backArrowPressed(event) {
176
- const parentMenu = this._parentMenu;
177
- if (this._menuStack.hasInlineMenu() || this._menuStack.length() > 1) {
178
- event.preventDefault();
179
- this._menuStack.close(parentMenu, {
180
- focusNextOnEmpty: this._menuStack.inlineMenuOrientation() === 'horizontal'
181
- ? FocusNext.previousItem
182
- : FocusNext.currentItem,
183
- focusParentTrigger: true,
184
- });
185
- }
186
- }
187
- /**
188
- * Handles the user pressing the forward arrow key.
189
- * @param event The keyboard event.
190
- */
191
- _forwardArrowPressed(event) {
192
- if (!this.hasMenu && this._menuStack.inlineMenuOrientation() === 'horizontal') {
193
- event.preventDefault();
194
- this._menuStack.closeAll({
195
- focusNextOnEmpty: FocusNext.nextItem,
196
- focusParentTrigger: true,
197
- });
198
- }
199
- }
200
- /**
201
- * Subscribe to the mouseenter events and close any sibling menu items if this element is moused
202
- * into.
203
- */
204
- _setupMouseEnter() {
205
- if (!this._isStandaloneItem()) {
206
- const closeOpenSiblings = () => this._ngZone.run(() => this._menuStack.closeSubMenuOf(this._parentMenu));
207
- this._ngZone.runOutsideAngular(() => fromEvent(this._elementRef.nativeElement, 'mouseenter')
208
- .pipe(filter(() => {
209
- return (
210
- // Skip fake `mouseenter` events dispatched by touch devices.
211
- this._inputModalityDetector.mostRecentModality !== 'touch' &&
212
- !this._menuStack.isEmpty() &&
213
- !this.hasMenu);
214
- }), takeUntil(this.destroyed))
215
- .subscribe(() => {
216
- if (this._menuAim) {
217
- this._menuAim.toggle(closeOpenSiblings);
218
- }
219
- else {
220
- closeOpenSiblings();
221
- }
222
- }));
223
- }
224
- }
225
- /**
226
- * Return true if the enclosing parent menu is configured in a horizontal orientation, false
227
- * otherwise or if no parent.
228
- */
229
- _isParentVertical() {
230
- return this._parentMenu?.orientation === 'vertical';
231
- }
232
- /** Sets the `type` attribute of the menu item. */
233
- _setType() {
234
- const element = this._elementRef.nativeElement;
235
- if (element.nodeName === 'BUTTON' && !element.getAttribute('type')) {
236
- // Prevent form submissions.
237
- element.setAttribute('type', 'button');
238
- }
239
- }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
241
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.0-next.2", type: CdkMenuItem, isStandalone: true, selector: "[cdkMenuItem]", inputs: { disabled: ["cdkMenuItemDisabled", "disabled", booleanAttribute], typeaheadLabel: ["cdkMenuitemTypeaheadLabel", "typeaheadLabel"] }, outputs: { triggered: "cdkMenuItemTriggered" }, host: { attributes: { "role": "menuitem" }, listeners: { "blur": "_resetTabIndex()", "focus": "_setTabIndex()", "click": "trigger()", "keydown": "_onKeydown($event)" }, properties: { "tabindex": "_tabindex", "attr.aria-disabled": "disabled || null" }, classAttribute: "cdk-menu-item" }, exportAs: ["cdkMenuItem"], ngImport: i0 }); }
242
- }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkMenuItem, decorators: [{
244
- type: Directive,
245
- args: [{
246
- selector: '[cdkMenuItem]',
247
- exportAs: 'cdkMenuItem',
248
- standalone: true,
249
- host: {
250
- 'role': 'menuitem',
251
- 'class': 'cdk-menu-item',
252
- '[tabindex]': '_tabindex',
253
- '[attr.aria-disabled]': 'disabled || null',
254
- '(blur)': '_resetTabIndex()',
255
- '(focus)': '_setTabIndex()',
256
- '(click)': 'trigger()',
257
- '(keydown)': '_onKeydown($event)',
258
- },
259
- }]
260
- }], ctorParameters: () => [], propDecorators: { disabled: [{
261
- type: Input,
262
- args: [{ alias: 'cdkMenuItemDisabled', transform: booleanAttribute }]
263
- }], typeaheadLabel: [{
264
- type: Input,
265
- args: ['cdkMenuitemTypeaheadLabel']
266
- }], triggered: [{
267
- type: Output,
268
- args: ['cdkMenuItemTriggered']
269
- }] } });
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9tZW51L21lbnUtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWtCLHFCQUFxQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFFBQVEsRUFBTyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRW5ELE9BQU8sRUFBQyxRQUFRLEVBQVUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7O0FBRTdEOzs7O0dBSUc7QUFnQkgsTUFBTSxPQUFPLFdBQVc7SUFpQ3RCLDBDQUEwQztJQUMxQyxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsZUFBZSxJQUFJLElBQUksQ0FBQztJQUNwRCxDQUFDO0lBY0Q7UUFqRG1CLFNBQUksR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDMUQsZ0JBQVcsR0FBNEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELFlBQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFeEUsOENBQThDO1FBQzdCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFFL0QsK0NBQStDO1FBQzlCLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakQsc0RBQXNEO1FBQ3JDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRWxFLHdGQUF3RjtRQUN2RSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRXJGLCtEQUErRDtRQUNLLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFROUY7OztXQUdHO1FBQ3NDLGNBQVMsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU81Rjs7O1dBR0c7UUFDSCxjQUFTLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFdkIsMkVBQTJFO1FBQ2pFLDJCQUFzQixHQUFHLElBQUksQ0FBQztRQUV4Qyw2Q0FBNkM7UUFDMUIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFHakQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxLQUFLO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLE9BQTZCO1FBQ25DLE1BQU0sRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxVQUFVO1FBQ1IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsMkRBQTJEO0lBQzNELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELHlGQUF5RjtJQUN6RixRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekYsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxLQUFrQjtRQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsS0FBb0I7UUFDN0IsUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLEtBQUs7Z0JBQ1IsbUZBQW1GO2dCQUNuRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNuRixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFDLENBQUMsQ0FBQztnQkFDcEYsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7d0JBQ2pELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7NEJBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDbkMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDaEMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzNCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO3dCQUNqRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDOzRCQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2hDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25DLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELHlFQUF5RTtJQUNqRSxpQkFBaUI7UUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGlCQUFpQixDQUFDLEtBQW9CO1FBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFZLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRTtnQkFDaEMsZ0JBQWdCLEVBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLFlBQVk7b0JBQ3RELENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWTtvQkFDeEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXO2dCQUMzQixrQkFBa0IsRUFBRSxJQUFJO2FBQ3pCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssb0JBQW9CLENBQUMsS0FBb0I7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQzlFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDdkIsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLFFBQVE7Z0JBQ3BDLGtCQUFrQixFQUFFLElBQUk7YUFDekIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDOUIsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVksQ0FBQyxDQUFDLENBQUM7WUFFNUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQztpQkFDcEQsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsT0FBTztnQkFDTCw2REFBNkQ7Z0JBQzdELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsS0FBSyxPQUFPO29CQUMxRCxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO29CQUMxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQ2QsQ0FBQztZQUNKLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzFDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssaUJBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEtBQUssVUFBVSxDQUFDO0lBQ3RELENBQUM7SUFFRCxrREFBa0Q7SUFDMUMsUUFBUTtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBRS9DLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbkUsNEJBQTRCO1lBQzVCLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO3FIQWxRVSxXQUFXO3lHQUFYLFdBQVcseUdBbUIyQixnQkFBZ0I7O2tHQW5CdEQsV0FBVztrQkFmdkIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLFVBQVU7d0JBQ2xCLE9BQU8sRUFBRSxlQUFlO3dCQUN4QixZQUFZLEVBQUUsV0FBVzt3QkFDekIsc0JBQXNCLEVBQUUsa0JBQWtCO3dCQUMxQyxRQUFRLEVBQUUsa0JBQWtCO3dCQUM1QixTQUFTLEVBQUUsZ0JBQWdCO3dCQUMzQixTQUFTLEVBQUUsV0FBVzt3QkFDdEIsV0FBVyxFQUFFLG9CQUFvQjtxQkFDbEM7aUJBQ0Y7d0RBb0JxRSxRQUFRO3NCQUEzRSxLQUFLO3VCQUFDLEVBQUMsS0FBSyxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQztnQkFNOUIsY0FBYztzQkFBakQsS0FBSzt1QkFBQywyQkFBMkI7Z0JBTU8sU0FBUztzQkFBakQsTUFBTTt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb2N1c2FibGVPcHRpb24sIElucHV0TW9kYWxpdHlEZXRlY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtFTlRFUiwgaGFzTW9kaWZpZXJLZXksIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBTUEFDRX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7RGlyZWN0aW9uYWxpdHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7ZnJvbUV2ZW50LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q2RrTWVudVRyaWdnZXJ9IGZyb20gJy4vbWVudS10cmlnZ2VyJztcbmltcG9ydCB7Q0RLX01FTlUsIE1lbnV9IGZyb20gJy4vbWVudS1pbnRlcmZhY2UnO1xuaW1wb3J0IHtGb2N1c05leHQsIE1FTlVfU1RBQ0t9IGZyb20gJy4vbWVudS1zdGFjayc7XG5pbXBvcnQge0ZvY3VzYWJsZUVsZW1lbnR9IGZyb20gJy4vcG9pbnRlci1mb2N1cy10cmFja2VyJztcbmltcG9ydCB7TUVOVV9BSU0sIFRvZ2dsZXJ9IGZyb20gJy4vbWVudS1haW0nO1xuaW1wb3J0IHtldmVudERpc3BhdGNoZXNOYXRpdmVDbGlja30gZnJvbSAnLi9ldmVudC1kZXRlY3Rpb24nO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB3aGljaCBwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgYW4gZWxlbWVudCB0byBiZSBmb2N1c2VkIGFuZCBuYXZpZ2F0ZWQgdG8gdXNpbmcgdGhlXG4gKiBrZXlib2FyZCB3aGVuIHJlc2lkaW5nIGluIGEgQ2RrTWVudSwgQ2RrTWVudUJhciwgb3IgQ2RrTWVudUdyb3VwLiBJdCBwZXJmb3JtcyB1c2VyIGRlZmluZWRcbiAqIGJlaGF2aW9yIHdoZW4gY2xpY2tlZC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Nka01lbnVJdGVtXScsXG4gIGV4cG9ydEFzOiAnY2RrTWVudUl0ZW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgJ3JvbGUnOiAnbWVudWl0ZW0nLFxuICAgICdjbGFzcyc6ICdjZGstbWVudS1pdGVtJyxcbiAgICAnW3RhYmluZGV4XSc6ICdfdGFiaW5kZXgnLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBudWxsJyxcbiAgICAnKGJsdXIpJzogJ19yZXNldFRhYkluZGV4KCknLFxuICAgICcoZm9jdXMpJzogJ19zZXRUYWJJbmRleCgpJyxcbiAgICAnKGNsaWNrKSc6ICd0cmlnZ2VyKCknLFxuICAgICcoa2V5ZG93biknOiAnX29uS2V5ZG93bigkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ2RrTWVudUl0ZW0gaW1wbGVtZW50cyBGb2N1c2FibGVPcHRpb24sIEZvY3VzYWJsZUVsZW1lbnQsIFRvZ2dsZXIsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfZGlyID0gaW5qZWN0KERpcmVjdGlvbmFsaXR5LCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcm90ZWN0ZWQgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dE1vZGFsaXR5RGV0ZWN0b3IgPSBpbmplY3QoSW5wdXRNb2RhbGl0eURldGVjdG9yKTtcblxuICAvKiogVGhlIG1lbnUgYWltIHNlcnZpY2UgdXNlZCBieSB0aGlzIG1lbnUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbnVBaW0gPSBpbmplY3QoTUVOVV9BSU0sIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gIC8qKiBUaGUgc3RhY2sgb2YgbWVudXMgdGhpcyBtZW51IGJlbG9uZ3MgdG8uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbnVTdGFjayA9IGluamVjdChNRU5VX1NUQUNLKTtcblxuICAvKiogVGhlIHBhcmVudCBtZW51IGluIHdoaWNoIHRoaXMgbWVudWl0ZW0gcmVzaWRlcy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50TWVudSA9IGluamVjdChDREtfTUVOVSwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgQ2RrTWVudUl0ZW1UcmlnZ2VyIGRpcmVjdGl2ZSBpZiBvbmUgaXMgYWRkZWQgdG8gdGhlIHNhbWUgZWxlbWVudCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZW51VHJpZ2dlciA9IGluamVjdChDZGtNZW51VHJpZ2dlciwge29wdGlvbmFsOiB0cnVlLCBzZWxmOiB0cnVlfSk7XG5cbiAgLyoqICBXaGV0aGVyIHRoZSBDZGtNZW51SXRlbSBpcyBkaXNhYmxlZCAtIGRlZmF1bHRzIHRvIGZhbHNlICovXG4gIEBJbnB1dCh7YWxpYXM6ICdjZGtNZW51SXRlbURpc2FibGVkJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHRleHQgdXNlZCB0byBsb2NhdGUgdGhpcyBpdGVtIGR1cmluZyBtZW51IHR5cGVhaGVhZC4gSWYgbm90IHNwZWNpZmllZCxcbiAgICogdGhlIGB0ZXh0Q29udGVudGAgb2YgdGhlIGl0ZW0gd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgQElucHV0KCdjZGtNZW51aXRlbVR5cGVhaGVhZExhYmVsJykgdHlwZWFoZWFkTGFiZWw6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgTWVudUl0ZW0gaXMgYSByZWd1bGFyIE1lbnVJdGVtLCBvdXRwdXRzIHdoZW4gaXQgaXMgdHJpZ2dlcmVkIGJ5IGEga2V5Ym9hcmQgb3IgbW91c2VcbiAgICogZXZlbnQuXG4gICAqL1xuICBAT3V0cHV0KCdjZGtNZW51SXRlbVRyaWdnZXJlZCcpIHJlYWRvbmx5IHRyaWdnZXJlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBtZW51IGl0ZW0gb3BlbnMgYSBtZW51LiAqL1xuICBnZXQgaGFzTWVudSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudVRyaWdnZXI/Lm1lbnVUZW1wbGF0ZVJlZiAhPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJpbmRleCBmb3IgdGhpcyBtZW51IGl0ZW0gbWFuYWdlZCBpbnRlcm5hbGx5IGFuZCB1c2VkIGZvciBpbXBsZW1lbnRpbmcgcm92aW5nIGFcbiAgICogdGFiIGluZGV4LlxuICAgKi9cbiAgX3RhYmluZGV4OiAwIHwgLTEgPSAtMTtcblxuICAvKiogV2hldGhlciB0aGUgaXRlbSBzaG91bGQgY2xvc2UgdGhlIG1lbnUgaWYgdHJpZ2dlcmVkIGJ5IHRoZSBzcGFjZWJhci4gKi9cbiAgcHJvdGVjdGVkIGNsb3NlT25TcGFjZWJhclRyaWdnZXIgPSB0cnVlO1xuXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBtZW51IGl0ZW0gaXMgZGVzdHJveWVkLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9zZXR1cE1vdXNlRW50ZXIoKTtcbiAgICB0aGlzLl9zZXRUeXBlKCk7XG5cbiAgICBpZiAodGhpcy5faXNTdGFuZGFsb25lSXRlbSgpKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogUGxhY2UgZm9jdXMgb24gdGhlIGVsZW1lbnQuICovXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBtZW51IGl0ZW0gaXMgbm90IGRpc2FibGVkIGFuZCB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgbWVudSB0cmlnZ2VyIGF0dGFjaGVkLCBlbWl0XG4gICAqIG9uIHRoZSBjZGtNZW51SXRlbVRyaWdnZXJlZCBlbWl0dGVyIGFuZCBjbG9zZSBhbGwgb3BlbiBtZW51cy5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0aGUgY29uZmlndXJlIGhvdyB0aGUgaXRlbSBpcyB0cmlnZ2VyZWRcbiAgICogICAtIGtlZXBPcGVuOiBzcGVjaWZpZXMgdGhhdCB0aGUgbWVudSBzaG91bGQgYmUga2VwdCBvcGVuIGFmdGVyIHRyaWdnZXJpbmcgdGhlIGl0ZW0uXG4gICAqL1xuICB0cmlnZ2VyKG9wdGlvbnM/OiB7a2VlcE9wZW46IGJvb2xlYW59KSB7XG4gICAgY29uc3Qge2tlZXBPcGVufSA9IHsuLi5vcHRpb25zfTtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuaGFzTWVudSkge1xuICAgICAgdGhpcy50cmlnZ2VyZWQubmV4dCgpO1xuICAgICAgaWYgKCFrZWVwT3Blbikge1xuICAgICAgICB0aGlzLl9tZW51U3RhY2suY2xvc2VBbGwoe2ZvY3VzUGFyZW50VHJpZ2dlcjogdHJ1ZX0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIE1lbnVJdGVtIGhhcyBhbiBhdHRhY2hlZCBtZW51IGFuZCBpdCBpcyBvcGVuLiAqL1xuICBpc01lbnVPcGVuKCkge1xuICAgIHJldHVybiAhIXRoaXMuX21lbnVUcmlnZ2VyPy5pc09wZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHJlbmRlcmVkIE1lbnUgaWYgdGhlIE1lbnUgaXMgb3BlbiBhbmQgaXQgaXMgdmlzaWJsZSBpbiB0aGUgRE9NLlxuICAgKiBAcmV0dXJuIHRoZSBtZW51IGlmIGl0IGlzIG9wZW4sIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqL1xuICBnZXRNZW51KCk6IE1lbnUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tZW51VHJpZ2dlcj8uZ2V0TWVudSgpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgQ2RrTWVudVRyaWdnZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudC4gKi9cbiAgZ2V0TWVudVRyaWdnZXIoKTogQ2RrTWVudVRyaWdnZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudVRyaWdnZXI7XG4gIH1cblxuICAvKiogR2V0IHRoZSBsYWJlbCBmb3IgdGhpcyBlbGVtZW50IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRoZSBGb2N1c2FibGVPcHRpb24gaW50ZXJmYWNlLiAqL1xuICBnZXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnR5cGVhaGVhZExhYmVsIHx8IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudD8udHJpbSgpIHx8ICcnO1xuICB9XG5cbiAgLyoqIFJlc2V0IHRoZSB0YWJpbmRleCB0byAtMS4gKi9cbiAgX3Jlc2V0VGFiSW5kZXgoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1N0YW5kYWxvbmVJdGVtKCkpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdGFiIGluZGV4IHRvIDAgaWYgbm90IGRpc2FibGVkIGFuZCBpdCdzIGEgZm9jdXMgZXZlbnQsIG9yIGEgbW91c2UgZW50ZXIgaWYgdGhpcyBlbGVtZW50XG4gICAqIGlzIG5vdCBpbiBhIG1lbnUgYmFyLlxuICAgKi9cbiAgX3NldFRhYkluZGV4KGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZG9uJ3Qgc2V0IHRoZSB0YWJpbmRleCBpZiB0aGVyZSBhcmUgbm8gb3BlbiBzaWJsaW5nIG9yIHBhcmVudCBtZW51c1xuICAgIGlmICghZXZlbnQgfHwgIXRoaXMuX21lbnVTdGFjay5pc0VtcHR5KCkpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgZm9yIHRoZSBtZW51IGl0ZW0sIHNwZWNpZmljYWxseSBlaXRoZXIgdHJpZ2dlcmluZyB0aGUgdXNlciBkZWZpbmVkXG4gICAqIGNhbGxiYWNrIG9yIG9wZW5pbmcvY2xvc2luZyB0aGUgY3VycmVudCBtZW51IGJhc2VkIG9uIHdoZXRoZXIgdGhlIGxlZnQgb3IgcmlnaHQgYXJyb3cga2V5IHdhc1xuICAgKiBwcmVzc2VkLlxuICAgKiBAcGFyYW0gZXZlbnQgdGhlIGtleWJvYXJkIGV2ZW50IHRvIGhhbmRsZVxuICAgKi9cbiAgX29uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgY2FzZSBTUEFDRTpcbiAgICAgIGNhc2UgRU5URVI6XG4gICAgICAgIC8vIFNraXAgZXZlbnRzIHRoYXQgd2lsbCB0cmlnZ2VyIGNsaWNrcyBzbyB0aGUgaGFuZGxlciBkb2Vzbid0IGdldCB0cmlnZ2VyZWQgdHdpY2UuXG4gICAgICAgIGlmICghaGFzTW9kaWZpZXJLZXkoZXZlbnQpICYmICFldmVudERpc3BhdGNoZXNOYXRpdmVDbGljayh0aGlzLl9lbGVtZW50UmVmLCBldmVudCkpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIoe2tlZXBPcGVuOiBldmVudC5rZXlDb2RlID09PSBTUEFDRSAmJiAhdGhpcy5jbG9zZU9uU3BhY2ViYXJUcmlnZ2VyfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUklHSFRfQVJST1c6XG4gICAgICAgIGlmICghaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3BhcmVudE1lbnUgJiYgdGhpcy5faXNQYXJlbnRWZXJ0aWNhbCgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlyPy52YWx1ZSAhPT0gJ3J0bCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZm9yd2FyZEFycm93UHJlc3NlZChldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9iYWNrQXJyb3dQcmVzc2VkKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTEVGVF9BUlJPVzpcbiAgICAgICAgaWYgKCFoYXNNb2RpZmllcktleShldmVudCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5fcGFyZW50TWVudSAmJiB0aGlzLl9pc1BhcmVudFZlcnRpY2FsKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kaXI/LnZhbHVlICE9PSAncnRsJykge1xuICAgICAgICAgICAgICB0aGlzLl9iYWNrQXJyb3dQcmVzc2VkKGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2ZvcndhcmRBcnJvd1ByZXNzZWQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKiogV2hldGhlciB0aGlzIG1lbnUgaXRlbSBpcyBzdGFuZGFsb25lIG9yIHdpdGhpbiBhIG1lbnUgb3IgbWVudSBiYXIuICovXG4gIHByaXZhdGUgX2lzU3RhbmRhbG9uZUl0ZW0oKSB7XG4gICAgcmV0dXJuICF0aGlzLl9wYXJlbnRNZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHVzZXIgcHJlc3NpbmcgdGhlIGJhY2sgYXJyb3cga2V5LlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGtleWJvYXJkIGV2ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfYmFja0Fycm93UHJlc3NlZChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IHBhcmVudE1lbnUgPSB0aGlzLl9wYXJlbnRNZW51ITtcbiAgICBpZiAodGhpcy5fbWVudVN0YWNrLmhhc0lubGluZU1lbnUoKSB8fCB0aGlzLl9tZW51U3RhY2subGVuZ3RoKCkgPiAxKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fbWVudVN0YWNrLmNsb3NlKHBhcmVudE1lbnUsIHtcbiAgICAgICAgZm9jdXNOZXh0T25FbXB0eTpcbiAgICAgICAgICB0aGlzLl9tZW51U3RhY2suaW5saW5lTWVudU9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgICAgPyBGb2N1c05leHQucHJldmlvdXNJdGVtXG4gICAgICAgICAgICA6IEZvY3VzTmV4dC5jdXJyZW50SXRlbSxcbiAgICAgICAgZm9jdXNQYXJlbnRUcmlnZ2VyOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHVzZXIgcHJlc3NpbmcgdGhlIGZvcndhcmQgYXJyb3cga2V5LlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGtleWJvYXJkIGV2ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9yd2FyZEFycm93UHJlc3NlZChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICghdGhpcy5oYXNNZW51ICYmIHRoaXMuX21lbnVTdGFjay5pbmxpbmVNZW51T3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fbWVudVN0YWNrLmNsb3NlQWxsKHtcbiAgICAgICAgZm9jdXNOZXh0T25FbXB0eTogRm9jdXNOZXh0Lm5leHRJdGVtLFxuICAgICAgICBmb2N1c1BhcmVudFRyaWdnZXI6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBtb3VzZWVudGVyIGV2ZW50cyBhbmQgY2xvc2UgYW55IHNpYmxpbmcgbWVudSBpdGVtcyBpZiB0aGlzIGVsZW1lbnQgaXMgbW91c2VkXG4gICAqIGludG8uXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cE1vdXNlRW50ZXIoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1N0YW5kYWxvbmVJdGVtKCkpIHtcbiAgICAgIGNvbnN0IGNsb3NlT3BlblNpYmxpbmdzID0gKCkgPT5cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLl9tZW51U3RhY2suY2xvc2VTdWJNZW51T2YodGhpcy5fcGFyZW50TWVudSEpKTtcblxuICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWVudGVyJylcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgLy8gU2tpcCBmYWtlIGBtb3VzZWVudGVyYCBldmVudHMgZGlzcGF0Y2hlZCBieSB0b3VjaCBkZXZpY2VzLlxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgIT09ICd0b3VjaCcgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5fbWVudVN0YWNrLmlzRW1wdHkoKSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLmhhc01lbnVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWVudUFpbSkge1xuICAgICAgICAgICAgICB0aGlzLl9tZW51QWltLnRvZ2dsZShjbG9zZU9wZW5TaWJsaW5ncyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjbG9zZU9wZW5TaWJsaW5ncygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIGVuY2xvc2luZyBwYXJlbnQgbWVudSBpcyBjb25maWd1cmVkIGluIGEgaG9yaXpvbnRhbCBvcmllbnRhdGlvbiwgZmFsc2VcbiAgICogb3RoZXJ3aXNlIG9yIGlmIG5vIHBhcmVudC5cbiAgICovXG4gIHByaXZhdGUgX2lzUGFyZW50VmVydGljYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudE1lbnU/Lm9yaWVudGF0aW9uID09PSAndmVydGljYWwnO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIGB0eXBlYCBhdHRyaWJ1dGUgb2YgdGhlIG1lbnUgaXRlbS4gKi9cbiAgcHJpdmF0ZSBfc2V0VHlwZSgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nICYmICFlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpKSB7XG4gICAgICAvLyBQcmV2ZW50IGZvcm0gc3VibWlzc2lvbnMuXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,60 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { NgModule } from '@angular/core';
9
- import { OverlayModule } from '@angular/cdk/overlay';
10
- import { CdkMenu } from './menu';
11
- import { CdkMenuBar } from './menu-bar';
12
- import { CdkMenuItem } from './menu-item';
13
- import { CdkMenuGroup } from './menu-group';
14
- import { CdkMenuItemRadio } from './menu-item-radio';
15
- import { CdkMenuItemCheckbox } from './menu-item-checkbox';
16
- import { CdkMenuTrigger } from './menu-trigger';
17
- import { CdkContextMenuTrigger } from './context-menu-trigger';
18
- import { CdkTargetMenuAim } from './menu-aim';
19
- import * as i0 from "@angular/core";
20
- const MENU_DIRECTIVES = [
21
- CdkMenuBar,
22
- CdkMenu,
23
- CdkMenuItem,
24
- CdkMenuItemRadio,
25
- CdkMenuItemCheckbox,
26
- CdkMenuTrigger,
27
- CdkMenuGroup,
28
- CdkContextMenuTrigger,
29
- CdkTargetMenuAim,
30
- ];
31
- /** Module that declares components and directives for the CDK menu. */
32
- export class CdkMenuModule {
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
34
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkMenuModule, imports: [OverlayModule, CdkMenuBar,
35
- CdkMenu,
36
- CdkMenuItem,
37
- CdkMenuItemRadio,
38
- CdkMenuItemCheckbox,
39
- CdkMenuTrigger,
40
- CdkMenuGroup,
41
- CdkContextMenuTrigger,
42
- CdkTargetMenuAim], exports: [CdkMenuBar,
43
- CdkMenu,
44
- CdkMenuItem,
45
- CdkMenuItemRadio,
46
- CdkMenuItemCheckbox,
47
- CdkMenuTrigger,
48
- CdkMenuGroup,
49
- CdkContextMenuTrigger,
50
- CdkTargetMenuAim] }); }
51
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkMenuModule, imports: [OverlayModule] }); }
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkMenuModule, decorators: [{
54
- type: NgModule,
55
- args: [{
56
- imports: [OverlayModule, ...MENU_DIRECTIVES],
57
- exports: MENU_DIRECTIVES,
58
- }]
59
- }] });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL21lbnUvbWVudS1tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sWUFBWSxDQUFDOztBQUU1QyxNQUFNLGVBQWUsR0FBRztJQUN0QixVQUFVO0lBQ1YsT0FBTztJQUNQLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLGNBQWM7SUFDZCxZQUFZO0lBQ1oscUJBQXFCO0lBQ3JCLGdCQUFnQjtDQUNqQixDQUFDO0FBRUYsdUVBQXVFO0FBS3ZFLE1BQU0sT0FBTyxhQUFhO3FIQUFiLGFBQWE7c0hBQWIsYUFBYSxZQUhkLGFBQWEsRUFidkIsVUFBVTtZQUNWLE9BQU87WUFDUCxXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsWUFBWTtZQUNaLHFCQUFxQjtZQUNyQixnQkFBZ0IsYUFSaEIsVUFBVTtZQUNWLE9BQU87WUFDUCxXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsWUFBWTtZQUNaLHFCQUFxQjtZQUNyQixnQkFBZ0I7c0hBUUwsYUFBYSxZQUhkLGFBQWE7O2tHQUdaLGFBQWE7a0JBSnpCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLEdBQUcsZUFBZSxDQUFDO29CQUM1QyxPQUFPLEVBQUUsZUFBZTtpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge092ZXJsYXlNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7Q2RrTWVudX0gZnJvbSAnLi9tZW51JztcbmltcG9ydCB7Q2RrTWVudUJhcn0gZnJvbSAnLi9tZW51LWJhcic7XG5pbXBvcnQge0Nka01lbnVJdGVtfSBmcm9tICcuL21lbnUtaXRlbSc7XG5pbXBvcnQge0Nka01lbnVHcm91cH0gZnJvbSAnLi9tZW51LWdyb3VwJztcbmltcG9ydCB7Q2RrTWVudUl0ZW1SYWRpb30gZnJvbSAnLi9tZW51LWl0ZW0tcmFkaW8nO1xuaW1wb3J0IHtDZGtNZW51SXRlbUNoZWNrYm94fSBmcm9tICcuL21lbnUtaXRlbS1jaGVja2JveCc7XG5pbXBvcnQge0Nka01lbnVUcmlnZ2VyfSBmcm9tICcuL21lbnUtdHJpZ2dlcic7XG5pbXBvcnQge0Nka0NvbnRleHRNZW51VHJpZ2dlcn0gZnJvbSAnLi9jb250ZXh0LW1lbnUtdHJpZ2dlcic7XG5pbXBvcnQge0Nka1RhcmdldE1lbnVBaW19IGZyb20gJy4vbWVudS1haW0nO1xuXG5jb25zdCBNRU5VX0RJUkVDVElWRVMgPSBbXG4gIENka01lbnVCYXIsXG4gIENka01lbnUsXG4gIENka01lbnVJdGVtLFxuICBDZGtNZW51SXRlbVJhZGlvLFxuICBDZGtNZW51SXRlbUNoZWNrYm94LFxuICBDZGtNZW51VHJpZ2dlcixcbiAgQ2RrTWVudUdyb3VwLFxuICBDZGtDb250ZXh0TWVudVRyaWdnZXIsXG4gIENka1RhcmdldE1lbnVBaW0sXG5dO1xuXG4vKiogTW9kdWxlIHRoYXQgZGVjbGFyZXMgY29tcG9uZW50cyBhbmQgZGlyZWN0aXZlcyBmb3IgdGhlIENESyBtZW51LiAqL1xuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW092ZXJsYXlNb2R1bGUsIC4uLk1FTlVfRElSRUNUSVZFU10sXG4gIGV4cG9ydHM6IE1FTlVfRElSRUNUSVZFUyxcbn0pXG5leHBvcnQgY2xhc3MgQ2RrTWVudU1vZHVsZSB7fVxuIl19
@@ -1,163 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { Inject, Injectable, InjectionToken, Optional, SkipSelf } from '@angular/core';
9
- import { Subject } from 'rxjs';
10
- import { debounceTime, distinctUntilChanged, startWith } from 'rxjs/operators';
11
- import * as i0 from "@angular/core";
12
- /** The relative item in the inline menu to focus after closing all popup menus. */
13
- export var FocusNext;
14
- (function (FocusNext) {
15
- FocusNext[FocusNext["nextItem"] = 0] = "nextItem";
16
- FocusNext[FocusNext["previousItem"] = 1] = "previousItem";
17
- FocusNext[FocusNext["currentItem"] = 2] = "currentItem";
18
- })(FocusNext || (FocusNext = {}));
19
- /** Injection token used for an implementation of MenuStack. */
20
- export const MENU_STACK = new InjectionToken('cdk-menu-stack');
21
- /** Provider that provides the parent menu stack, or a new menu stack if there is no parent one. */
22
- export const PARENT_OR_NEW_MENU_STACK_PROVIDER = {
23
- provide: MENU_STACK,
24
- deps: [[new Optional(), new SkipSelf(), new Inject(MENU_STACK)]],
25
- useFactory: (parentMenuStack) => parentMenuStack || new MenuStack(),
26
- };
27
- /** Provider that provides the parent menu stack, or a new inline menu stack if there is no parent one. */
28
- export const PARENT_OR_NEW_INLINE_MENU_STACK_PROVIDER = (orientation) => ({
29
- provide: MENU_STACK,
30
- deps: [[new Optional(), new SkipSelf(), new Inject(MENU_STACK)]],
31
- useFactory: (parentMenuStack) => parentMenuStack || MenuStack.inline(orientation),
32
- });
33
- /** The next available menu stack ID. */
34
- let nextId = 0;
35
- /**
36
- * MenuStack allows subscribers to listen for close events (when a MenuStackItem is popped off
37
- * of the stack) in order to perform closing actions. Upon the MenuStack being empty it emits
38
- * from the `empty` observable specifying the next focus action which the listener should perform
39
- * as requested by the closer.
40
- */
41
- export class MenuStack {
42
- constructor() {
43
- /** The ID of this menu stack. */
44
- this.id = `${nextId++}`;
45
- /** All MenuStackItems tracked by this MenuStack. */
46
- this._elements = [];
47
- /** Emits the element which was popped off of the stack when requested by a closer. */
48
- this._close = new Subject();
49
- /** Emits once the MenuStack has become empty after popping off elements. */
50
- this._empty = new Subject();
51
- /** Emits whether any menu in the menu stack has focus. */
52
- this._hasFocus = new Subject();
53
- /** Observable which emits the MenuStackItem which has been requested to close. */
54
- this.closed = this._close;
55
- /** Observable which emits whether any menu in the menu stack has focus. */
56
- this.hasFocus = this._hasFocus.pipe(startWith(false), debounceTime(0), distinctUntilChanged());
57
- /**
58
- * Observable which emits when the MenuStack is empty after popping off the last element. It
59
- * emits a FocusNext event which specifies the action the closer has requested the listener
60
- * perform.
61
- */
62
- this.emptied = this._empty;
63
- /**
64
- * Whether the inline menu associated with this menu stack is vertical or horizontal.
65
- * `null` indicates there is no inline menu associated with this menu stack.
66
- */
67
- this._inlineMenuOrientation = null;
68
- }
69
- /** Creates a menu stack that originates from an inline menu. */
70
- static inline(orientation) {
71
- const stack = new MenuStack();
72
- stack._inlineMenuOrientation = orientation;
73
- return stack;
74
- }
75
- /**
76
- * Adds an item to the menu stack.
77
- * @param menu the MenuStackItem to put on the stack.
78
- */
79
- push(menu) {
80
- this._elements.push(menu);
81
- }
82
- /**
83
- * Pop items off of the stack up to and including `lastItem` and emit each on the close
84
- * observable. If the stack is empty or `lastItem` is not on the stack it does nothing.
85
- * @param lastItem the last item to pop off the stack.
86
- * @param options Options that configure behavior on close.
87
- */
88
- close(lastItem, options) {
89
- const { focusNextOnEmpty, focusParentTrigger } = { ...options };
90
- if (this._elements.indexOf(lastItem) >= 0) {
91
- let poppedElement;
92
- do {
93
- poppedElement = this._elements.pop();
94
- this._close.next({ item: poppedElement, focusParentTrigger });
95
- } while (poppedElement !== lastItem);
96
- if (this.isEmpty()) {
97
- this._empty.next(focusNextOnEmpty);
98
- }
99
- }
100
- }
101
- /**
102
- * Pop items off of the stack up to but excluding `lastItem` and emit each on the close
103
- * observable. If the stack is empty or `lastItem` is not on the stack it does nothing.
104
- * @param lastItem the element which should be left on the stack
105
- * @return whether or not an item was removed from the stack
106
- */
107
- closeSubMenuOf(lastItem) {
108
- let removed = false;
109
- if (this._elements.indexOf(lastItem) >= 0) {
110
- removed = this.peek() !== lastItem;
111
- while (this.peek() !== lastItem) {
112
- this._close.next({ item: this._elements.pop() });
113
- }
114
- }
115
- return removed;
116
- }
117
- /**
118
- * Pop off all MenuStackItems and emit each one on the `close` observable one by one.
119
- * @param options Options that configure behavior on close.
120
- */
121
- closeAll(options) {
122
- const { focusNextOnEmpty, focusParentTrigger } = { ...options };
123
- if (!this.isEmpty()) {
124
- while (!this.isEmpty()) {
125
- const menuStackItem = this._elements.pop();
126
- if (menuStackItem) {
127
- this._close.next({ item: menuStackItem, focusParentTrigger });
128
- }
129
- }
130
- this._empty.next(focusNextOnEmpty);
131
- }
132
- }
133
- /** Return true if this stack is empty. */
134
- isEmpty() {
135
- return !this._elements.length;
136
- }
137
- /** Return the length of the stack. */
138
- length() {
139
- return this._elements.length;
140
- }
141
- /** Get the top most element on the stack. */
142
- peek() {
143
- return this._elements[this._elements.length - 1];
144
- }
145
- /** Whether the menu stack is associated with an inline menu. */
146
- hasInlineMenu() {
147
- return this._inlineMenuOrientation != null;
148
- }
149
- /** The orientation of the associated inline menu. */
150
- inlineMenuOrientation() {
151
- return this._inlineMenuOrientation;
152
- }
153
- /** Sets whether the menu stack contains the focused element. */
154
- setHasFocus(hasFocus) {
155
- this._hasFocus.next(hasFocus);
156
- }
157
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MenuStack, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
158
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MenuStack }); }
159
- }
160
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MenuStack, decorators: [{
161
- type: Injectable
162
- }] });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvbWVudS9tZW51LXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFN0UsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDbkIsaURBQVEsQ0FBQTtJQUNSLHlEQUFZLENBQUE7SUFDWix1REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBUUQsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBWSxnQkFBZ0IsQ0FBQyxDQUFDO0FBRTFFLG1HQUFtRztBQUNuRyxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRztJQUMvQyxPQUFPLEVBQUUsVUFBVTtJQUNuQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFVBQVUsRUFBRSxDQUFDLGVBQTJCLEVBQUUsRUFBRSxDQUFDLGVBQWUsSUFBSSxJQUFJLFNBQVMsRUFBRTtDQUNoRixDQUFDO0FBRUYsMEdBQTBHO0FBQzFHLE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLENBQ3RELFdBQXNDLEVBQ3RDLEVBQUUsQ0FBQyxDQUFDO0lBQ0osT0FBTyxFQUFFLFVBQVU7SUFDbkIs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QWE7UUFDWCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxXQUFXLENBQUMsUUFBaUI7UUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztxSEF6SVUsU0FBUzt5SEFBVCxTQUFTOztrR0FBVCxTQUFTO2tCQURyQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwsIFNraXBTZWxmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKiogVGhlIHJlbGF0aXZlIGl0ZW0gaW4gdGhlIGlubGluZSBtZW51IHRvIGZvY3VzIGFmdGVyIGNsb3NpbmcgYWxsIHBvcHVwIG1lbnVzLiAqL1xuZXhwb3J0IGVudW0gRm9jdXNOZXh0IHtcbiAgbmV4dEl0ZW0sXG4gIHByZXZpb3VzSXRlbSxcbiAgY3VycmVudEl0ZW0sXG59XG5cbi8qKiBBIHNpbmdsZSBpdGVtIChtZW51KSBpbiB0aGUgbWVudSBzdGFjay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVudVN0YWNrSXRlbSB7XG4gIC8qKiBBIHJlZmVyZW5jZSB0byB0aGUgbWVudSBzdGFjayB0aGlzIG1lbnUgc3RhY2sgaXRlbSBiZWxvbmdzIHRvLiAqL1xuICBtZW51U3RhY2s/OiBNZW51U3RhY2s7XG59XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdXNlZCBmb3IgYW4gaW1wbGVtZW50YXRpb24gb2YgTWVudVN0YWNrLiAqL1xuZXhwb3J0IGNvbnN0IE1FTlVfU1RBQ0sgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVudVN0YWNrPignY2RrLW1lbnUtc3RhY2snKTtcblxuLyoqIFByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgdGhlIHBhcmVudCBtZW51IHN0YWNrLCBvciBhIG5ldyBtZW51IHN0YWNrIGlmIHRoZXJlIGlzIG5vIHBhcmVudCBvbmUuICovXG5leHBvcnQgY29uc3QgUEFSRU5UX09SX05FV19NRU5VX1NUQUNLX1BST1ZJREVSID0ge1xuICBwcm92aWRlOiBNRU5VX1NUQUNLLFxuICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgbmV3IEluamVjdChNRU5VX1NUQUNLKV1dLFxuICB1c2VGYWN0b3J5OiAocGFyZW50TWVudVN0YWNrPzogTWVudVN0YWNrKSA9PiBwYXJlbnRNZW51U3RhY2sgfHwgbmV3IE1lbnVTdGFjaygpLFxufTtcblxuLyoqIFByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgdGhlIHBhcmVudCBtZW51IHN0YWNrLCBvciBhIG5ldyBpbmxpbmUgbWVudSBzdGFjayBpZiB0aGVyZSBpcyBubyBwYXJlbnQgb25lLiAqL1xuZXhwb3J0IGNvbnN0IFBBUkVOVF9PUl9ORVdfSU5MSU5FX01FTlVfU1RBQ0tfUFJPVklERVIgPSAoXG4gIG9yaWVudGF0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnLFxuKSA9PiAoe1xuICBwcm92aWRlOiBNRU5VX1NUQUNLLFxuICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgbmV3IEluamVjdChNRU5VX1NUQUNLKV1dLFxuICB1c2VGYWN0b3J5OiAocGFyZW50TWVudVN0YWNrPzogTWVudVN0YWNrKSA9PiBwYXJlbnRNZW51U3RhY2sgfHwgTWVudVN0YWNrLmlubGluZShvcmllbnRhdGlvbiksXG59KTtcblxuLyoqIE9wdGlvbnMgdGhhdCBjYW4gYmUgcHJvdmlkZWQgdG8gdGhlIGNsb3NlIG9yIGNsb3NlQWxsIG1ldGhvZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIENsb3NlT3B0aW9ucyB7XG4gIC8qKiBUaGUgZWxlbWVudCB0byBmb2N1cyBuZXh0IGlmIHRoZSBjbG9zZSBvcGVyYXRpb24gY2F1c2VzIHRoZSBtZW51IHN0YWNrIHRvIGJlY29tZSBlbXB0eS4gKi9cbiAgZm9jdXNOZXh0T25FbXB0eT86IEZvY3VzTmV4dDtcbiAgLyoqIFdoZXRoZXIgdG8gZm9jdXMgdGhlIHBhcmVudCB0cmlnZ2VyIGFmdGVyIGNsb3NpbmcgdGhlIG1lbnUuICovXG4gIGZvY3VzUGFyZW50VHJpZ2dlcj86IGJvb2xlYW47XG59XG5cbi8qKiBFdmVudCBkaXNwYXRjaGVkIHdoZW4gYSBtZW51IGlzIGNsb3NlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVudVN0YWNrQ2xvc2VFdmVudCB7XG4gIC8qKiBUaGUgbWVudSBiZWluZyBjbG9zZWQuICovXG4gIGl0ZW06IE1lbnVTdGFja0l0ZW07XG4gIC8qKiBXaGV0aGVyIHRvIGZvY3VzIHRoZSBwYXJlbnQgdHJpZ2dlciBhZnRlciBjbG9zaW5nIHRoZSBtZW51LiAqL1xuICBmb2N1c1BhcmVudFRyaWdnZXI/OiBib29sZWFuO1xufVxuXG4vKiogVGhlIG5leHQgYXZhaWxhYmxlIG1lbnUgc3RhY2sgSUQuICovXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBNZW51U3RhY2sgYWxsb3dzIHN1YnNjcmliZXJzIHRvIGxpc3RlbiBmb3IgY2xvc2UgZXZlbnRzICh3aGVuIGEgTWVudVN0YWNrSXRlbSBpcyBwb3BwZWQgb2ZmXG4gKiBvZiB0aGUgc3RhY2spIGluIG9yZGVyIHRvIHBlcmZvcm0gY2xvc2luZyBhY3Rpb25zLiBVcG9uIHRoZSBNZW51U3RhY2sgYmVpbmcgZW1wdHkgaXQgZW1pdHNcbiAqIGZyb20gdGhlIGBlbXB0eWAgb2JzZXJ2YWJsZSBzcGVjaWZ5aW5nIHRoZSBuZXh0IGZvY3VzIGFjdGlvbiB3aGljaCB0aGUgbGlzdGVuZXIgc2hvdWxkIHBlcmZvcm1cbiAqIGFzIHJlcXVlc3RlZCBieSB0aGUgY2xvc2VyLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWVudVN0YWNrIHtcbiAgLyoqIFRoZSBJRCBvZiB0aGlzIG1lbnUgc3RhY2suICovXG4gIHJlYWRvbmx5IGlkID0gYCR7bmV4dElkKyt9YDtcblxuICAvKiogQWxsIE1lbnVTdGFja0l0ZW1zIHRyYWNrZWQgYnkgdGhpcyBNZW51U3RhY2suICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRzOiBNZW51U3RhY2tJdGVtW10gPSBbXTtcblxuICAvKiogRW1pdHMgdGhlIGVsZW1lbnQgd2hpY2ggd2FzIHBvcHBlZCBvZmYgb2YgdGhlIHN0YWNrIHdoZW4gcmVxdWVzdGVkIGJ5IGEgY2xvc2VyLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9jbG9zZSA9IG5ldyBTdWJqZWN0PE1lbnVTdGFja0Nsb3NlRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXRzIG9uY2UgdGhlIE1lbnVTdGFjayBoYXMgYmVjb21lIGVtcHR5IGFmdGVyIHBvcHBpbmcgb2ZmIGVsZW1lbnRzLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbXB0eSA9IG5ldyBTdWJqZWN0PEZvY3VzTmV4dCB8IHVuZGVmaW5lZD4oKTtcblxuICAvKiogRW1pdHMgd2hldGhlciBhbnkgbWVudSBpbiB0aGUgbWVudSBzdGFjayBoYXMgZm9jdXMuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc0ZvY3VzID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAvKiogT2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB0aGUgTWVudVN0YWNrSXRlbSB3aGljaCBoYXMgYmVlbiByZXF1ZXN0ZWQgdG8gY2xvc2UuICovXG4gIHJlYWRvbmx5IGNsb3NlZDogT2JzZXJ2YWJsZTxNZW51U3RhY2tDbG9zZUV2ZW50PiA9IHRoaXMuX2Nsb3NlO1xuXG4gIC8qKiBPYnNlcnZhYmxlIHdoaWNoIGVtaXRzIHdoZXRoZXIgYW55IG1lbnUgaW4gdGhlIG1lbnUgc3RhY2sgaGFzIGZvY3VzLiAqL1xuICByZWFkb25seSBoYXNGb2N1czogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2hhc0ZvY3VzLnBpcGUoXG4gICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB3aGVuIHRoZSBNZW51U3RhY2sgaXMgZW1wdHkgYWZ0ZXIgcG9wcGluZyBvZmYgdGhlIGxhc3QgZWxlbWVudC4gSXRcbiAgICogZW1pdHMgYSBGb2N1c05leHQgZXZlbnQgd2hpY2ggc3BlY2lmaWVzIHRoZSBhY3Rpb24gdGhlIGNsb3NlciBoYXMgcmVxdWVzdGVkIHRoZSBsaXN0ZW5lclxuICAgKiBwZXJmb3JtLlxuICAgKi9cbiAgcmVhZG9ubHkgZW1wdGllZDogT2JzZXJ2YWJsZTxGb2N1c05leHQgfCB1bmRlZmluZWQ+ID0gdGhpcy5fZW1wdHk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGlubGluZSBtZW51IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lbnUgc3RhY2sgaXMgdmVydGljYWwgb3IgaG9yaXpvbnRhbC5cbiAgICogYG51bGxgIGluZGljYXRlcyB0aGVyZSBpcyBubyBpbmxpbmUgbWVudSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZW51IHN0YWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5saW5lTWVudU9yaWVudGF0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIENyZWF0ZXMgYSBtZW51IHN0YWNrIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGFuIGlubGluZSBtZW51LiAqL1xuICBzdGF0aWMgaW5saW5lKG9yaWVudGF0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgTWVudVN0YWNrKCk7XG4gICAgc3RhY2suX2lubGluZU1lbnVPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGl0ZW0gdG8gdGhlIG1lbnUgc3RhY2suXG4gICAqIEBwYXJhbSBtZW51IHRoZSBNZW51U3RhY2tJdGVtIHRvIHB1dCBvbiB0aGUgc3RhY2suXG4gICAqL1xuICBwdXNoKG1lbnU6IE1lbnVTdGFja0l0ZW0pIHtcbiAgICB0aGlzLl9lbGVtZW50cy5wdXNoKG1lbnUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcCBpdGVtcyBvZmYgb2YgdGhlIHN0YWNrIHVwIHRvIGFuZCBpbmNsdWRpbmcgYGxhc3RJdGVtYCBhbmQgZW1pdCBlYWNoIG9uIHRoZSBjbG9zZVxuICAgKiBvYnNlcnZhYmxlLiBJZiB0aGUgc3RhY2sgaXMgZW1wdHkgb3IgYGxhc3RJdGVtYCBpcyBub3Qgb24gdGhlIHN0YWNrIGl0IGRvZXMgbm90aGluZy5cbiAgICogQHBhcmFtIGxhc3RJdGVtIHRoZSBsYXN0IGl0ZW0gdG8gcG9wIG9mZiB0aGUgc3RhY2suXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdGhhdCBjb25maWd1cmUgYmVoYXZpb3Igb24gY2xvc2UuXG4gICAqL1xuICBjbG9zZShsYXN0SXRlbTogTWVudVN0YWNrSXRlbSwgb3B0aW9ucz86IENsb3NlT3B0aW9ucykge1xuICAgIGNvbnN0IHtmb2N1c05leHRPbkVtcHR5LCBmb2N1c1BhcmVudFRyaWdnZXJ9ID0gey4uLm9wdGlvbnN9O1xuICAgIGlmICh0aGlzLl9lbGVtZW50cy5pbmRleE9mKGxhc3RJdGVtKSA+PSAwKSB7XG4gICAgICBsZXQgcG9wcGVkRWxlbWVudDtcbiAgICAgIGRvIHtcbiAgICAgICAgcG9wcGVkRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRzLnBvcCgpITtcbiAgICAgICAgdGhpcy5fY2xvc2UubmV4dCh7aXRlbTogcG9wcGVkRWxlbWVudCwgZm9jdXNQYXJlbnRUcmlnZ2VyfSk7XG4gICAgICB9IHdoaWxlIChwb3BwZWRFbGVtZW50ICE9PSBsYXN0SXRlbSk7XG5cbiAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICB0aGlzLl9lbXB0eS5uZXh0KGZvY3VzTmV4dE9uRW1wdHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb3AgaXRlbXMgb2ZmIG9mIHRoZSBzdGFjayB1cCB0byBidXQgZXhjbHVkaW5nIGBsYXN0SXRlbWAgYW5kIGVtaXQgZWFjaCBvbiB0aGUgY2xvc2VcbiAgICogb2JzZXJ2YWJsZS4gSWYgdGhlIHN0YWNrIGlzIGVtcHR5IG9yIGBsYXN0SXRlbWAgaXMgbm90IG9uIHRoZSBzdGFjayBpdCBkb2VzIG5vdGhpbmcuXG4gICAqIEBwYXJhbSBsYXN0SXRlbSB0aGUgZWxlbWVudCB3aGljaCBzaG91bGQgYmUgbGVmdCBvbiB0aGUgc3RhY2tcbiAgICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCBhbiBpdGVtIHdhcyByZW1vdmVkIGZyb20gdGhlIHN0YWNrXG4gICAqL1xuICBjbG9zZVN1Yk1lbnVPZihsYXN0SXRlbTogTWVudVN0YWNrSXRlbSkge1xuICAgIGxldCByZW1vdmVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnRzLmluZGV4T2YobGFzdEl0ZW0pID49IDApIHtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBlZWsoKSAhPT0gbGFzdEl0ZW07XG4gICAgICB3aGlsZSAodGhpcy5wZWVrKCkgIT09IGxhc3RJdGVtKSB7XG4gICAgICAgIHRoaXMuX2Nsb3NlLm5leHQoe2l0ZW06IHRoaXMuX2VsZW1lbnRzLnBvcCgpIX0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVtb3ZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3Agb2ZmIGFsbCBNZW51U3RhY2tJdGVtcyBhbmQgZW1pdCBlYWNoIG9uZSBvbiB0aGUgYGNsb3NlYCBvYnNlcnZhYmxlIG9uZSBieSBvbmUuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdGhhdCBjb25maWd1cmUgYmVoYXZpb3Igb24gY2xvc2UuXG4gICAqL1xuICBjbG9zZUFsbChvcHRpb25zPzogQ2xvc2VPcHRpb25zKSB7XG4gICAgY29uc3Qge2ZvY3VzTmV4dE9uRW1wdHksIGZvY3VzUGFyZW50VHJpZ2dlcn0gPSB7Li4ub3B0aW9uc307XG4gICAgaWYgKCF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgd2hpbGUgKCF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICBjb25zdCBtZW51U3RhY2tJdGVtID0gdGhpcy5fZWxlbWVudHMucG9wKCk7XG4gICAgICAgIGlmIChtZW51U3RhY2tJdGVtKSB7XG4gICAgICAgICAgdGhpcy5fY2xvc2UubmV4dCh7aXRlbTogbWVudVN0YWNrSXRlbSwgZm9jdXNQYXJlbnRUcmlnZ2VyfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX2VtcHR5Lm5leHQoZm9jdXNOZXh0T25FbXB0eSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybiB0cnVlIGlmIHRoaXMgc3RhY2sgaXMgZW1wdHkuICovXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuICF0aGlzLl9lbGVtZW50cy5sZW5ndGg7XG4gIH1cblxuICAvKiogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHN0YWNrLiAqL1xuICBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHRvcCBtb3N0IGVsZW1lbnQgb24gdGhlIHN0YWNrLiAqL1xuICBwZWVrKCk6IE1lbnVTdGFja0l0ZW0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50c1t0aGlzLl9lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBtZW51IHN0YWNrIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmxpbmUgbWVudS4gKi9cbiAgaGFzSW5saW5lTWVudSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5saW5lTWVudU9yaWVudGF0aW9uICE9IG51bGw7XG4gIH1cblxuICAvKiogVGhlIG9yaWVudGF0aW9uIG9mIHRoZSBhc3NvY2lhdGVkIGlubGluZSBtZW51LiAqL1xuICBpbmxpbmVNZW51T3JpZW50YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lubGluZU1lbnVPcmllbnRhdGlvbjtcbiAgfVxuXG4gIC8qKiBTZXRzIHdoZXRoZXIgdGhlIG1lbnUgc3RhY2sgY29udGFpbnMgdGhlIGZvY3VzZWQgZWxlbWVudC4gKi9cbiAgc2V0SGFzRm9jdXMoaGFzRm9jdXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oYXNGb2N1cy5uZXh0KGhhc0ZvY3VzKTtcbiAgfVxufVxuIl19