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

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 (330) hide show
  1. package/a11y/_index.scss +12 -54
  2. package/a11y/index.d.ts +5 -1
  3. package/fesm2022/a11y.mjs +61 -51
  4. package/fesm2022/a11y.mjs.map +1 -1
  5. package/fesm2022/accordion.mjs +10 -10
  6. package/fesm2022/bidi.mjs +10 -10
  7. package/fesm2022/cdk.mjs +1 -1
  8. package/fesm2022/cdk.mjs.map +1 -1
  9. package/fesm2022/clipboard.mjs +10 -10
  10. package/fesm2022/collections.mjs +3 -3
  11. package/fesm2022/dialog.mjs +10 -10
  12. package/fesm2022/drag-drop.mjs +33 -32
  13. package/fesm2022/drag-drop.mjs.map +1 -1
  14. package/fesm2022/layout.mjs +10 -10
  15. package/fesm2022/listbox.mjs +10 -10
  16. package/fesm2022/menu.mjs +49 -49
  17. package/fesm2022/observers/private.mjs +3 -3
  18. package/fesm2022/observers.mjs +13 -13
  19. package/fesm2022/overlay.mjs +54 -35
  20. package/fesm2022/overlay.mjs.map +1 -1
  21. package/fesm2022/platform.mjs +7 -7
  22. package/fesm2022/portal.mjs +16 -16
  23. package/fesm2022/private.mjs +12 -10
  24. package/fesm2022/private.mjs.map +1 -1
  25. package/fesm2022/scrolling.mjs +38 -35
  26. package/fesm2022/scrolling.mjs.map +1 -1
  27. package/fesm2022/stepper.mjs +22 -22
  28. package/fesm2022/table.mjs +76 -76
  29. package/fesm2022/text-field.mjs +30 -15
  30. package/fesm2022/text-field.mjs.map +1 -1
  31. package/fesm2022/tree.mjs +36 -30
  32. package/fesm2022/tree.mjs.map +1 -1
  33. package/overlay/_index.scss +15 -13
  34. package/overlay/index.d.ts +6 -1
  35. package/overlay-prebuilt.css +1 -1
  36. package/package.json +1 -57
  37. package/private/index.d.ts +1 -0
  38. package/schematics/ng-add/index.js +1 -1
  39. package/schematics/ng-add/index.mjs +1 -1
  40. package/scrolling/index.d.ts +1 -0
  41. package/table/index.d.ts +8 -8
  42. package/text-field/index.d.ts +1 -0
  43. package/tree/index.d.ts +6 -4
  44. package/esm2022/a11y/a11y-module.mjs +0 -31
  45. package/esm2022/a11y/a11y_public_index.mjs +0 -5
  46. package/esm2022/a11y/aria-describer/aria-describer.mjs +0 -232
  47. package/esm2022/a11y/aria-describer/aria-reference.mjs +0 -47
  48. package/esm2022/a11y/fake-event-detection.mjs +0 -29
  49. package/esm2022/a11y/focus-monitor/focus-monitor.mjs +0 -468
  50. package/esm2022/a11y/focus-trap/configurable-focus-trap-config.mjs +0 -9
  51. package/esm2022/a11y/focus-trap/configurable-focus-trap-factory.mjs +0 -54
  52. package/esm2022/a11y/focus-trap/configurable-focus-trap.mjs +0 -51
  53. package/esm2022/a11y/focus-trap/event-listener-inert-strategy.mjs +0 -61
  54. package/esm2022/a11y/focus-trap/focus-trap-inert-strategy.mjs +0 -11
  55. package/esm2022/a11y/focus-trap/focus-trap-manager.mjs +0 -53
  56. package/esm2022/a11y/focus-trap/focus-trap.mjs +0 -396
  57. package/esm2022/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +0 -116
  58. package/esm2022/a11y/index.mjs +0 -9
  59. package/esm2022/a11y/input-modality/input-modality-detector.mjs +0 -176
  60. package/esm2022/a11y/interactivity-checker/interactivity-checker.mjs +0 -238
  61. package/esm2022/a11y/key-manager/activedescendant-key-manager.mjs +0 -20
  62. package/esm2022/a11y/key-manager/focus-key-manager.mjs +0 -29
  63. package/esm2022/a11y/key-manager/list-key-manager.mjs +0 -357
  64. package/esm2022/a11y/key-manager/noop-tree-key-manager.mjs +0 -94
  65. package/esm2022/a11y/key-manager/tree-key-manager-strategy.mjs +0 -9
  66. package/esm2022/a11y/key-manager/tree-key-manager.mjs +0 -345
  67. package/esm2022/a11y/key-manager/typeahead.mjs +0 -91
  68. package/esm2022/a11y/live-announcer/live-announcer-tokens.mjs +0 -19
  69. package/esm2022/a11y/live-announcer/live-announcer.mjs +0 -210
  70. package/esm2022/a11y/public-api.mjs +0 -30
  71. package/esm2022/accordion/accordion-item.mjs +0 -162
  72. package/esm2022/accordion/accordion-module.mjs +0 -24
  73. package/esm2022/accordion/accordion.mjs +0 -65
  74. package/esm2022/accordion/accordion_public_index.mjs +0 -5
  75. package/esm2022/accordion/index.mjs +0 -9
  76. package/esm2022/accordion/public-api.mjs +0 -11
  77. package/esm2022/bidi/bidi-module.mjs +0 -23
  78. package/esm2022/bidi/bidi_public_index.mjs +0 -5
  79. package/esm2022/bidi/dir-document-token.mjs +0 -33
  80. package/esm2022/bidi/dir.mjs +0 -70
  81. package/esm2022/bidi/directionality.mjs +0 -52
  82. package/esm2022/bidi/index.mjs +0 -9
  83. package/esm2022/bidi/public-api.mjs +0 -12
  84. package/esm2022/clipboard/clipboard-module.mjs +0 -23
  85. package/esm2022/clipboard/clipboard.mjs +0 -53
  86. package/esm2022/clipboard/clipboard_public_index.mjs +0 -5
  87. package/esm2022/clipboard/copy-to-clipboard.mjs +0 -100
  88. package/esm2022/clipboard/index.mjs +0 -9
  89. package/esm2022/clipboard/pending-copy.mjs +0 -71
  90. package/esm2022/clipboard/public-api.mjs +0 -12
  91. package/esm2022/coercion/array.mjs +0 -11
  92. package/esm2022/coercion/boolean-property.mjs +0 -12
  93. package/esm2022/coercion/css-pixel-value.mjs +0 -15
  94. package/esm2022/coercion/element.mjs +0 -16
  95. package/esm2022/coercion/index.mjs +0 -9
  96. package/esm2022/coercion/number-property.mjs +0 -24
  97. package/esm2022/coercion/private/index.mjs +0 -9
  98. package/esm2022/coercion/private/observable.mjs +0 -19
  99. package/esm2022/coercion/private/private_public_index.mjs +0 -5
  100. package/esm2022/coercion/public-api.mjs +0 -14
  101. package/esm2022/coercion/string-array.mjs +0 -38
  102. package/esm2022/collections/array-data-source.mjs +0 -21
  103. package/esm2022/collections/collection-viewer.mjs +0 -9
  104. package/esm2022/collections/collections_public_index.mjs +0 -5
  105. package/esm2022/collections/data-source.mjs +0 -19
  106. package/esm2022/collections/dispose-view-repeater-strategy.mjs +0 -48
  107. package/esm2022/collections/index.mjs +0 -9
  108. package/esm2022/collections/public-api.mjs +0 -17
  109. package/esm2022/collections/recycle-view-repeater-strategy.mjs +0 -129
  110. package/esm2022/collections/selection-model.mjs +0 -225
  111. package/esm2022/collections/tree-adapter.mjs +0 -9
  112. package/esm2022/collections/unique-selection-dispatcher.mjs +0 -55
  113. package/esm2022/collections/view-repeater.mjs +0 -26
  114. package/esm2022/dialog/dialog-config.mjs +0 -70
  115. package/esm2022/dialog/dialog-container.mjs +0 -308
  116. package/esm2022/dialog/dialog-injectors.mjs +0 -40
  117. package/esm2022/dialog/dialog-module.mjs +0 -40
  118. package/esm2022/dialog/dialog-ref.mjs +0 -85
  119. package/esm2022/dialog/dialog.mjs +0 -303
  120. package/esm2022/dialog/dialog_public_index.mjs +0 -5
  121. package/esm2022/dialog/index.mjs +0 -9
  122. package/esm2022/dialog/public-api.mjs +0 -14
  123. package/esm2022/drag-drop/directives/assertions.mjs +0 -18
  124. package/esm2022/drag-drop/directives/config.mjs +0 -14
  125. package/esm2022/drag-drop/directives/drag-handle.mjs +0 -68
  126. package/esm2022/drag-drop/directives/drag-placeholder.mjs +0 -43
  127. package/esm2022/drag-drop/directives/drag-preview.mjs +0 -48
  128. package/esm2022/drag-drop/directives/drag.mjs +0 -520
  129. package/esm2022/drag-drop/directives/drop-list-group.mjs +0 -47
  130. package/esm2022/drag-drop/directives/drop-list.mjs +0 -352
  131. package/esm2022/drag-drop/dom/clone-node.mjs +0 -65
  132. package/esm2022/drag-drop/dom/dom-rect.mjs +0 -64
  133. package/esm2022/drag-drop/dom/parent-position-tracker.mjs +0 -76
  134. package/esm2022/drag-drop/dom/root-node.mjs +0 -21
  135. package/esm2022/drag-drop/dom/styling.mjs +0 -89
  136. package/esm2022/drag-drop/dom/transition-duration.mjs +0 -36
  137. package/esm2022/drag-drop/drag-drop-module.mjs +0 -49
  138. package/esm2022/drag-drop/drag-drop-registry.mjs +0 -248
  139. package/esm2022/drag-drop/drag-drop.mjs +0 -57
  140. package/esm2022/drag-drop/drag-drop_public_index.mjs +0 -5
  141. package/esm2022/drag-drop/drag-events.mjs +0 -9
  142. package/esm2022/drag-drop/drag-parent.mjs +0 -16
  143. package/esm2022/drag-drop/drag-ref.mjs +0 -1097
  144. package/esm2022/drag-drop/drag-utils.mjs +0 -60
  145. package/esm2022/drag-drop/drop-list-ref.mjs +0 -672
  146. package/esm2022/drag-drop/index.mjs +0 -9
  147. package/esm2022/drag-drop/preview-ref.mjs +0 -125
  148. package/esm2022/drag-drop/public-api.mjs +0 -23
  149. package/esm2022/drag-drop/sorting/drop-list-sort-strategy.mjs +0 -9
  150. package/esm2022/drag-drop/sorting/mixed-sort-strategy.mjs +0 -246
  151. package/esm2022/drag-drop/sorting/single-axis-sort-strategy.mjs +0 -343
  152. package/esm2022/index.mjs +0 -9
  153. package/esm2022/keycodes/index.mjs +0 -9
  154. package/esm2022/keycodes/keycodes.mjs +0 -127
  155. package/esm2022/keycodes/keycodes_public_index.mjs +0 -5
  156. package/esm2022/keycodes/modifiers.mjs +0 -18
  157. package/esm2022/keycodes/public-api.mjs +0 -10
  158. package/esm2022/layout/breakpoints-observer.mjs +0 -105
  159. package/esm2022/layout/breakpoints.mjs +0 -29
  160. package/esm2022/layout/index.mjs +0 -9
  161. package/esm2022/layout/layout-module.mjs +0 -19
  162. package/esm2022/layout/layout_public_index.mjs +0 -5
  163. package/esm2022/layout/media-matcher.mjs +0 -94
  164. package/esm2022/layout/public-api.mjs +0 -12
  165. package/esm2022/listbox/index.mjs +0 -9
  166. package/esm2022/listbox/listbox-module.mjs +0 -24
  167. package/esm2022/listbox/listbox.mjs +0 -888
  168. package/esm2022/listbox/listbox_public_index.mjs +0 -5
  169. package/esm2022/listbox/public-api.mjs +0 -10
  170. package/esm2022/menu/context-menu-trigger.mjs +0 -221
  171. package/esm2022/menu/event-detection.mjs +0 -28
  172. package/esm2022/menu/index.mjs +0 -9
  173. package/esm2022/menu/menu-aim.mjs +0 -204
  174. package/esm2022/menu/menu-bar.mjs +0 -134
  175. package/esm2022/menu/menu-base.mjs +0 -192
  176. package/esm2022/menu/menu-errors.mjs +0 -22
  177. package/esm2022/menu/menu-group.mjs +0 -31
  178. package/esm2022/menu/menu-interface.mjs +0 -11
  179. package/esm2022/menu/menu-item-checkbox.mjs +0 -50
  180. package/esm2022/menu/menu-item-radio.mjs +0 -72
  181. package/esm2022/menu/menu-item-selectable.mjs +0 -36
  182. package/esm2022/menu/menu-item.mjs +0 -270
  183. package/esm2022/menu/menu-module.mjs +0 -60
  184. package/esm2022/menu/menu-stack.mjs +0 -163
  185. package/esm2022/menu/menu-trigger-base.mjs +0 -119
  186. package/esm2022/menu/menu-trigger.mjs +0 -313
  187. package/esm2022/menu/menu.mjs +0 -135
  188. package/esm2022/menu/menu_public_index.mjs +0 -5
  189. package/esm2022/menu/pointer-focus-tracker.mjs +0 -51
  190. package/esm2022/menu/public-api.mjs +0 -24
  191. package/esm2022/observers/index.mjs +0 -9
  192. package/esm2022/observers/observe-content.mjs +0 -216
  193. package/esm2022/observers/observers_public_index.mjs +0 -5
  194. package/esm2022/observers/private/index.mjs +0 -9
  195. package/esm2022/observers/private/private_public_index.mjs +0 -5
  196. package/esm2022/observers/private/shared-resize-observer.mjs +0 -125
  197. package/esm2022/observers/public-api.mjs +0 -9
  198. package/esm2022/overlay/dispatchers/base-overlay-dispatcher.mjs +0 -52
  199. package/esm2022/overlay/dispatchers/index.mjs +0 -10
  200. package/esm2022/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +0 -81
  201. package/esm2022/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +0 -151
  202. package/esm2022/overlay/fullscreen-overlay-container.mjs +0 -94
  203. package/esm2022/overlay/index.mjs +0 -9
  204. package/esm2022/overlay/overlay-config.mjs +0 -45
  205. package/esm2022/overlay/overlay-container.mjs +0 -81
  206. package/esm2022/overlay/overlay-directives.mjs +0 -432
  207. package/esm2022/overlay/overlay-module.mjs +0 -28
  208. package/esm2022/overlay/overlay-ref.mjs +0 -437
  209. package/esm2022/overlay/overlay.mjs +0 -126
  210. package/esm2022/overlay/overlay_public_index.mjs +0 -5
  211. package/esm2022/overlay/position/connected-position.mjs +0 -88
  212. package/esm2022/overlay/position/flexible-connected-position-strategy.mjs +0 -1002
  213. package/esm2022/overlay/position/global-position-strategy.mjs +0 -237
  214. package/esm2022/overlay/position/overlay-position-builder.mjs +0 -50
  215. package/esm2022/overlay/position/position-strategy.mjs +0 -9
  216. package/esm2022/overlay/position/scroll-clip.mjs +0 -40
  217. package/esm2022/overlay/public-api.mjs +0 -22
  218. package/esm2022/overlay/scroll/block-scroll-strategy.mjs +0 -80
  219. package/esm2022/overlay/scroll/close-scroll-strategy.mjs +0 -65
  220. package/esm2022/overlay/scroll/index.mjs +0 -14
  221. package/esm2022/overlay/scroll/noop-scroll-strategy.mjs +0 -17
  222. package/esm2022/overlay/scroll/reposition-scroll-strategy.mjs +0 -61
  223. package/esm2022/overlay/scroll/scroll-strategy-options.mjs +0 -55
  224. package/esm2022/overlay/scroll/scroll-strategy.mjs +0 -14
  225. package/esm2022/platform/features/input-types.mjs +0 -59
  226. package/esm2022/platform/features/passive-listeners.mjs +0 -36
  227. package/esm2022/platform/features/scrolling.mjs +0 -104
  228. package/esm2022/platform/features/shadow-dom.mjs +0 -54
  229. package/esm2022/platform/features/test-environment.mjs +0 -24
  230. package/esm2022/platform/index.mjs +0 -9
  231. package/esm2022/platform/platform-module.mjs +0 -19
  232. package/esm2022/platform/platform.mjs +0 -82
  233. package/esm2022/platform/platform_public_index.mjs +0 -5
  234. package/esm2022/platform/public-api.mjs +0 -15
  235. package/esm2022/portal/dom-portal-outlet.mjs +0 -158
  236. package/esm2022/portal/index.mjs +0 -9
  237. package/esm2022/portal/portal-directives.mjs +0 -251
  238. package/esm2022/portal/portal-errors.mjs +0 -51
  239. package/esm2022/portal/portal-injector.mjs +0 -28
  240. package/esm2022/portal/portal.mjs +0 -189
  241. package/esm2022/portal/portal_public_index.mjs +0 -5
  242. package/esm2022/portal/public-api.mjs +0 -12
  243. package/esm2022/private/index.mjs +0 -9
  244. package/esm2022/private/private_public_index.mjs +0 -5
  245. package/esm2022/private/public-api.mjs +0 -9
  246. package/esm2022/private/style-loader.mjs +0 -50
  247. package/esm2022/public-api.mjs +0 -9
  248. package/esm2022/scrolling/fixed-size-virtual-scroll.mjs +0 -218
  249. package/esm2022/scrolling/index.mjs +0 -9
  250. package/esm2022/scrolling/public-api.mjs +0 -20
  251. package/esm2022/scrolling/scroll-dispatcher.mjs +0 -163
  252. package/esm2022/scrolling/scrollable.mjs +0 -177
  253. package/esm2022/scrolling/scrolling-module.mjs +0 -69
  254. package/esm2022/scrolling/scrolling_public_index.mjs +0 -5
  255. package/esm2022/scrolling/viewport-ruler.mjs +0 -146
  256. package/esm2022/scrolling/virtual-for-of.mjs +0 -299
  257. package/esm2022/scrolling/virtual-scroll-repeater.mjs +0 -9
  258. package/esm2022/scrolling/virtual-scroll-strategy.mjs +0 -11
  259. package/esm2022/scrolling/virtual-scroll-viewport.mjs +0 -445
  260. package/esm2022/scrolling/virtual-scrollable-element.mjs +0 -42
  261. package/esm2022/scrolling/virtual-scrollable-window.mjs +0 -41
  262. package/esm2022/scrolling/virtual-scrollable.mjs +0 -40
  263. package/esm2022/stepper/index.mjs +0 -9
  264. package/esm2022/stepper/public-api.mjs +0 -13
  265. package/esm2022/stepper/step-header.mjs +0 -31
  266. package/esm2022/stepper/step-label.mjs +0 -24
  267. package/esm2022/stepper/stepper-button.mjs +0 -58
  268. package/esm2022/stepper/stepper-module.mjs +0 -41
  269. package/esm2022/stepper/stepper.mjs +0 -452
  270. package/esm2022/stepper/stepper_public_index.mjs +0 -5
  271. package/esm2022/table/can-stick.mjs +0 -46
  272. package/esm2022/table/cell.mjs +0 -245
  273. package/esm2022/table/coalesced-style-scheduler.mjs +0 -79
  274. package/esm2022/table/index.mjs +0 -9
  275. package/esm2022/table/public-api.mjs +0 -20
  276. package/esm2022/table/row.mjs +0 -317
  277. package/esm2022/table/sticky-position-listener.mjs +0 -11
  278. package/esm2022/table/sticky-styler.mjs +0 -347
  279. package/esm2022/table/table-errors.mjs +0 -67
  280. package/esm2022/table/table-module.mjs +0 -93
  281. package/esm2022/table/table.mjs +0 -1148
  282. package/esm2022/table/table_public_index.mjs +0 -5
  283. package/esm2022/table/text-column.mjs +0 -154
  284. package/esm2022/table/tokens.mjs +0 -16
  285. package/esm2022/testing/change-detection.mjs +0 -102
  286. package/esm2022/testing/component-harness.mjs +0 -328
  287. package/esm2022/testing/element-dimensions.mjs +0 -9
  288. package/esm2022/testing/harness-environment.mjs +0 -220
  289. package/esm2022/testing/index.mjs +0 -9
  290. package/esm2022/testing/public-api.mjs +0 -15
  291. package/esm2022/testing/selenium-webdriver/index.mjs +0 -9
  292. package/esm2022/testing/selenium-webdriver/public-api.mjs +0 -10
  293. package/esm2022/testing/selenium-webdriver/selenium-web-driver-element.mjs +0 -216
  294. package/esm2022/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +0 -88
  295. package/esm2022/testing/selenium-webdriver/selenium-webdriver-keys.mjs +0 -64
  296. package/esm2022/testing/test-element-errors.mjs +0 -15
  297. package/esm2022/testing/test-element.mjs +0 -49
  298. package/esm2022/testing/testbed/fake-events/dispatch-events.mjs +0 -53
  299. package/esm2022/testing/testbed/fake-events/element-focus.mjs +0 -39
  300. package/esm2022/testing/testbed/fake-events/event-objects.mjs +0 -127
  301. package/esm2022/testing/testbed/fake-events/index.mjs +0 -14
  302. package/esm2022/testing/testbed/fake-events/type-in-element.mjs +0 -97
  303. package/esm2022/testing/testbed/index.mjs +0 -9
  304. package/esm2022/testing/testbed/public-api.mjs +0 -10
  305. package/esm2022/testing/testbed/task-state-zone-interceptor.mjs +0 -83
  306. package/esm2022/testing/testbed/testbed-harness-environment.mjs +0 -165
  307. package/esm2022/testing/testbed/unit-test-element.mjs +0 -258
  308. package/esm2022/testing/text-filtering.mjs +0 -21
  309. package/esm2022/text-field/autofill.mjs +0 -114
  310. package/esm2022/text-field/autosize.mjs +0 -309
  311. package/esm2022/text-field/index.mjs +0 -9
  312. package/esm2022/text-field/public-api.mjs +0 -11
  313. package/esm2022/text-field/text-field-module.mjs +0 -24
  314. package/esm2022/text-field/text-field_public_index.mjs +0 -5
  315. package/esm2022/tree/control/base-tree-control.mjs +0 -62
  316. package/esm2022/tree/control/flat-tree-control.mjs +0 -57
  317. package/esm2022/tree/control/nested-tree-control.mjs +0 -67
  318. package/esm2022/tree/control/tree-control.mjs +0 -2
  319. package/esm2022/tree/index.mjs +0 -9
  320. package/esm2022/tree/nested-node.mjs +0 -103
  321. package/esm2022/tree/node.mjs +0 -36
  322. package/esm2022/tree/outlet.mjs +0 -40
  323. package/esm2022/tree/padding.mjs +0 -129
  324. package/esm2022/tree/public-api.mjs +0 -20
  325. package/esm2022/tree/toggle.mjs +0 -51
  326. package/esm2022/tree/tree-errors.mjs +0 -44
  327. package/esm2022/tree/tree-module.mjs +0 -49
  328. package/esm2022/tree/tree.mjs +0 -1123
  329. package/esm2022/tree/tree_public_index.mjs +0 -5
  330. package/esm2022/version.mjs +0 -11
@@ -1,357 +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 { QueryList, effect, isSignal } from '@angular/core';
9
- import { Subject, Subscription } from 'rxjs';
10
- import { UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, TAB, hasModifierKey, HOME, END, PAGE_UP, PAGE_DOWN, } from '@angular/cdk/keycodes';
11
- import { Typeahead } from './typeahead';
12
- /**
13
- * This class manages keyboard events for selectable lists. If you pass it a query list
14
- * of items, it will set the active item correctly when arrow events occur.
15
- */
16
- export class ListKeyManager {
17
- constructor(_items, injector) {
18
- this._items = _items;
19
- this._activeItemIndex = -1;
20
- this._activeItem = null;
21
- this._wrap = false;
22
- this._typeaheadSubscription = Subscription.EMPTY;
23
- this._vertical = true;
24
- this._allowedModifierKeys = [];
25
- this._homeAndEnd = false;
26
- this._pageUpAndDown = { enabled: false, delta: 10 };
27
- /**
28
- * Predicate function that can be used to check whether an item should be skipped
29
- * by the key manager. By default, disabled items are skipped.
30
- */
31
- this._skipPredicateFn = (item) => item.disabled;
32
- /**
33
- * Stream that emits any time the TAB key is pressed, so components can react
34
- * when focus is shifted off of the list.
35
- */
36
- this.tabOut = new Subject();
37
- /** Stream that emits whenever the active item of the list manager changes. */
38
- this.change = new Subject();
39
- // We allow for the items to be an array because, in some cases, the consumer may
40
- // not have access to a QueryList of the items they want to manage (e.g. when the
41
- // items aren't being collected via `ViewChildren` or `ContentChildren`).
42
- if (_items instanceof QueryList) {
43
- this._itemChangesSubscription = _items.changes.subscribe((newItems) => this._itemsChanged(newItems.toArray()));
44
- }
45
- else if (isSignal(_items)) {
46
- if (!injector && (typeof ngDevMode === 'undefined' || ngDevMode)) {
47
- throw new Error('ListKeyManager constructed with a signal must receive an injector');
48
- }
49
- this._effectRef = effect(() => this._itemsChanged(_items()), { injector });
50
- }
51
- }
52
- /**
53
- * Sets the predicate function that determines which items should be skipped by the
54
- * list key manager.
55
- * @param predicate Function that determines whether the given item should be skipped.
56
- */
57
- skipPredicate(predicate) {
58
- this._skipPredicateFn = predicate;
59
- return this;
60
- }
61
- /**
62
- * Configures wrapping mode, which determines whether the active item will wrap to
63
- * the other end of list when there are no more items in the given direction.
64
- * @param shouldWrap Whether the list should wrap when reaching the end.
65
- */
66
- withWrap(shouldWrap = true) {
67
- this._wrap = shouldWrap;
68
- return this;
69
- }
70
- /**
71
- * Configures whether the key manager should be able to move the selection vertically.
72
- * @param enabled Whether vertical selection should be enabled.
73
- */
74
- withVerticalOrientation(enabled = true) {
75
- this._vertical = enabled;
76
- return this;
77
- }
78
- /**
79
- * Configures the key manager to move the selection horizontally.
80
- * Passing in `null` will disable horizontal movement.
81
- * @param direction Direction in which the selection can be moved.
82
- */
83
- withHorizontalOrientation(direction) {
84
- this._horizontal = direction;
85
- return this;
86
- }
87
- /**
88
- * Modifier keys which are allowed to be held down and whose default actions will be prevented
89
- * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys.
90
- */
91
- withAllowedModifierKeys(keys) {
92
- this._allowedModifierKeys = keys;
93
- return this;
94
- }
95
- /**
96
- * Turns on typeahead mode which allows users to set the active item by typing.
97
- * @param debounceInterval Time to wait after the last keystroke before setting the active item.
98
- */
99
- withTypeAhead(debounceInterval = 200) {
100
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
101
- const items = this._getItemsArray();
102
- if (items.length > 0 && items.some(item => typeof item.getLabel !== 'function')) {
103
- throw Error('ListKeyManager items in typeahead mode must implement the `getLabel` method.');
104
- }
105
- }
106
- this._typeaheadSubscription.unsubscribe();
107
- const items = this._getItemsArray();
108
- this._typeahead = new Typeahead(items, {
109
- debounceInterval: typeof debounceInterval === 'number' ? debounceInterval : undefined,
110
- skipPredicate: item => this._skipPredicateFn(item),
111
- });
112
- this._typeaheadSubscription = this._typeahead.selectedItem.subscribe(item => {
113
- this.setActiveItem(item);
114
- });
115
- return this;
116
- }
117
- /** Cancels the current typeahead sequence. */
118
- cancelTypeahead() {
119
- this._typeahead?.reset();
120
- return this;
121
- }
122
- /**
123
- * Configures the key manager to activate the first and last items
124
- * respectively when the Home or End key is pressed.
125
- * @param enabled Whether pressing the Home or End key activates the first/last item.
126
- */
127
- withHomeAndEnd(enabled = true) {
128
- this._homeAndEnd = enabled;
129
- return this;
130
- }
131
- /**
132
- * Configures the key manager to activate every 10th, configured or first/last element in up/down direction
133
- * respectively when the Page-Up or Page-Down key is pressed.
134
- * @param enabled Whether pressing the Page-Up or Page-Down key activates the first/last item.
135
- * @param delta Whether pressing the Home or End key activates the first/last item.
136
- */
137
- withPageUpDown(enabled = true, delta = 10) {
138
- this._pageUpAndDown = { enabled, delta };
139
- return this;
140
- }
141
- setActiveItem(item) {
142
- const previousActiveItem = this._activeItem;
143
- this.updateActiveItem(item);
144
- if (this._activeItem !== previousActiveItem) {
145
- this.change.next(this._activeItemIndex);
146
- }
147
- }
148
- /**
149
- * Sets the active item depending on the key event passed in.
150
- * @param event Keyboard event to be used for determining which element should be active.
151
- */
152
- onKeydown(event) {
153
- const keyCode = event.keyCode;
154
- const modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];
155
- const isModifierAllowed = modifiers.every(modifier => {
156
- return !event[modifier] || this._allowedModifierKeys.indexOf(modifier) > -1;
157
- });
158
- switch (keyCode) {
159
- case TAB:
160
- this.tabOut.next();
161
- return;
162
- case DOWN_ARROW:
163
- if (this._vertical && isModifierAllowed) {
164
- this.setNextItemActive();
165
- break;
166
- }
167
- else {
168
- return;
169
- }
170
- case UP_ARROW:
171
- if (this._vertical && isModifierAllowed) {
172
- this.setPreviousItemActive();
173
- break;
174
- }
175
- else {
176
- return;
177
- }
178
- case RIGHT_ARROW:
179
- if (this._horizontal && isModifierAllowed) {
180
- this._horizontal === 'rtl' ? this.setPreviousItemActive() : this.setNextItemActive();
181
- break;
182
- }
183
- else {
184
- return;
185
- }
186
- case LEFT_ARROW:
187
- if (this._horizontal && isModifierAllowed) {
188
- this._horizontal === 'rtl' ? this.setNextItemActive() : this.setPreviousItemActive();
189
- break;
190
- }
191
- else {
192
- return;
193
- }
194
- case HOME:
195
- if (this._homeAndEnd && isModifierAllowed) {
196
- this.setFirstItemActive();
197
- break;
198
- }
199
- else {
200
- return;
201
- }
202
- case END:
203
- if (this._homeAndEnd && isModifierAllowed) {
204
- this.setLastItemActive();
205
- break;
206
- }
207
- else {
208
- return;
209
- }
210
- case PAGE_UP:
211
- if (this._pageUpAndDown.enabled && isModifierAllowed) {
212
- const targetIndex = this._activeItemIndex - this._pageUpAndDown.delta;
213
- this._setActiveItemByIndex(targetIndex > 0 ? targetIndex : 0, 1);
214
- break;
215
- }
216
- else {
217
- return;
218
- }
219
- case PAGE_DOWN:
220
- if (this._pageUpAndDown.enabled && isModifierAllowed) {
221
- const targetIndex = this._activeItemIndex + this._pageUpAndDown.delta;
222
- const itemsLength = this._getItemsArray().length;
223
- this._setActiveItemByIndex(targetIndex < itemsLength ? targetIndex : itemsLength - 1, -1);
224
- break;
225
- }
226
- else {
227
- return;
228
- }
229
- default:
230
- if (isModifierAllowed || hasModifierKey(event, 'shiftKey')) {
231
- this._typeahead?.handleKey(event);
232
- }
233
- // Note that we return here, in order to avoid preventing
234
- // the default action of non-navigational keys.
235
- return;
236
- }
237
- this._typeahead?.reset();
238
- event.preventDefault();
239
- }
240
- /** Index of the currently active item. */
241
- get activeItemIndex() {
242
- return this._activeItemIndex;
243
- }
244
- /** The active item. */
245
- get activeItem() {
246
- return this._activeItem;
247
- }
248
- /** Gets whether the user is currently typing into the manager using the typeahead feature. */
249
- isTyping() {
250
- return !!this._typeahead && this._typeahead.isTyping();
251
- }
252
- /** Sets the active item to the first enabled item in the list. */
253
- setFirstItemActive() {
254
- this._setActiveItemByIndex(0, 1);
255
- }
256
- /** Sets the active item to the last enabled item in the list. */
257
- setLastItemActive() {
258
- this._setActiveItemByIndex(this._getItemsArray().length - 1, -1);
259
- }
260
- /** Sets the active item to the next enabled item in the list. */
261
- setNextItemActive() {
262
- this._activeItemIndex < 0 ? this.setFirstItemActive() : this._setActiveItemByDelta(1);
263
- }
264
- /** Sets the active item to a previous enabled item in the list. */
265
- setPreviousItemActive() {
266
- this._activeItemIndex < 0 && this._wrap
267
- ? this.setLastItemActive()
268
- : this._setActiveItemByDelta(-1);
269
- }
270
- updateActiveItem(item) {
271
- const itemArray = this._getItemsArray();
272
- const index = typeof item === 'number' ? item : itemArray.indexOf(item);
273
- const activeItem = itemArray[index];
274
- // Explicitly check for `null` and `undefined` because other falsy values are valid.
275
- this._activeItem = activeItem == null ? null : activeItem;
276
- this._activeItemIndex = index;
277
- this._typeahead?.setCurrentSelectedItemIndex(index);
278
- }
279
- /** Cleans up the key manager. */
280
- destroy() {
281
- this._typeaheadSubscription.unsubscribe();
282
- this._itemChangesSubscription?.unsubscribe();
283
- this._effectRef?.destroy();
284
- this._typeahead?.destroy();
285
- this.tabOut.complete();
286
- this.change.complete();
287
- }
288
- /**
289
- * This method sets the active item, given a list of items and the delta between the
290
- * currently active item and the new active item. It will calculate differently
291
- * depending on whether wrap mode is turned on.
292
- */
293
- _setActiveItemByDelta(delta) {
294
- this._wrap ? this._setActiveInWrapMode(delta) : this._setActiveInDefaultMode(delta);
295
- }
296
- /**
297
- * Sets the active item properly given "wrap" mode. In other words, it will continue to move
298
- * down the list until it finds an item that is not disabled, and it will wrap if it
299
- * encounters either end of the list.
300
- */
301
- _setActiveInWrapMode(delta) {
302
- const items = this._getItemsArray();
303
- for (let i = 1; i <= items.length; i++) {
304
- const index = (this._activeItemIndex + delta * i + items.length) % items.length;
305
- const item = items[index];
306
- if (!this._skipPredicateFn(item)) {
307
- this.setActiveItem(index);
308
- return;
309
- }
310
- }
311
- }
312
- /**
313
- * Sets the active item properly given the default mode. In other words, it will
314
- * continue to move down the list until it finds an item that is not disabled. If
315
- * it encounters either end of the list, it will stop and not wrap.
316
- */
317
- _setActiveInDefaultMode(delta) {
318
- this._setActiveItemByIndex(this._activeItemIndex + delta, delta);
319
- }
320
- /**
321
- * Sets the active item to the first enabled item starting at the index specified. If the
322
- * item is disabled, it will move in the fallbackDelta direction until it either
323
- * finds an enabled item or encounters the end of the list.
324
- */
325
- _setActiveItemByIndex(index, fallbackDelta) {
326
- const items = this._getItemsArray();
327
- if (!items[index]) {
328
- return;
329
- }
330
- while (this._skipPredicateFn(items[index])) {
331
- index += fallbackDelta;
332
- if (!items[index]) {
333
- return;
334
- }
335
- }
336
- this.setActiveItem(index);
337
- }
338
- /** Returns the items as an array. */
339
- _getItemsArray() {
340
- if (isSignal(this._items)) {
341
- return this._items();
342
- }
343
- return this._items instanceof QueryList ? this._items.toArray() : this._items;
344
- }
345
- /** Callback for when the items have changed. */
346
- _itemsChanged(newItems) {
347
- this._typeahead?.setItems(newItems);
348
- if (this._activeItem) {
349
- const newIndex = newItems.indexOf(this._activeItem);
350
- if (newIndex > -1 && newIndex !== this._activeItemIndex) {
351
- this._activeItemIndex = newIndex;
352
- this._typeahead?.setCurrentSelectedItemIndex(newIndex);
353
- }
354
- }
355
- }
356
- }
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1rZXktbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvYTExeS9rZXktbWFuYWdlci9saXN0LWtleS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBc0IsU0FBUyxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxHQUFHLEVBQ0gsY0FBYyxFQUNkLElBQUksRUFDSixHQUFHLEVBQ0gsT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFjdEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFzQnpCLFlBQ1UsTUFBOEUsRUFDdEYsUUFBbUI7UUFEWCxXQUFNLEdBQU4sTUFBTSxDQUF3RTtRQXRCaEYscUJBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEIsZ0JBQVcsR0FBYSxJQUFJLENBQUM7UUFDN0IsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLDJCQUFzQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFNUMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQix5QkFBb0IsR0FBZ0MsRUFBRSxDQUFDO1FBQ3ZELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLG1CQUFjLEdBQUcsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUlyRDs7O1dBR0c7UUFDSyxxQkFBZ0IsR0FBRyxDQUFDLElBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztR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QyxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFVBQVUsRUFBRSwyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0VmZmVjdFJlZiwgSW5qZWN0b3IsIFF1ZXJ5TGlzdCwgU2lnbmFsLCBlZmZlY3QsIGlzU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFVQX0FSUk9XLFxuICBET1dOX0FSUk9XLFxuICBMRUZUX0FSUk9XLFxuICBSSUdIVF9BUlJPVyxcbiAgVEFCLFxuICBoYXNNb2RpZmllcktleSxcbiAgSE9NRSxcbiAgRU5ELFxuICBQQUdFX1VQLFxuICBQQUdFX0RPV04sXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1R5cGVhaGVhZH0gZnJvbSAnLi90eXBlYWhlYWQnO1xuXG4vKiogVGhpcyBpbnRlcmZhY2UgaXMgZm9yIGl0ZW1zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhIExpc3RLZXlNYW5hZ2VyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0S2V5TWFuYWdlck9wdGlvbiB7XG4gIC8qKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgZGlzYWJsZWQuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcblxuICAvKiogR2V0cyB0aGUgbGFiZWwgZm9yIHRoaXMgb3B0aW9uLiAqL1xuICBnZXRMYWJlbD8oKTogc3RyaW5nO1xufVxuXG4vKiogTW9kaWZpZXIga2V5cyBoYW5kbGVkIGJ5IHRoZSBMaXN0S2V5TWFuYWdlci4gKi9cbmV4cG9ydCB0eXBlIExpc3RLZXlNYW5hZ2VyTW9kaWZpZXJLZXkgPSAnYWx0S2V5JyB8ICdjdHJsS2V5JyB8ICdtZXRhS2V5JyB8ICdzaGlmdEtleSc7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBtYW5hZ2VzIGtleWJvYXJkIGV2ZW50cyBmb3Igc2VsZWN0YWJsZSBsaXN0cy4gSWYgeW91IHBhc3MgaXQgYSBxdWVyeSBsaXN0XG4gKiBvZiBpdGVtcywgaXQgd2lsbCBzZXQgdGhlIGFjdGl2ZSBpdGVtIGNvcnJlY3RseSB3aGVuIGFycm93IGV2ZW50cyBvY2N1ci5cbiAqL1xuZXhwb3J0IGNsYXNzIExpc3RLZXlNYW5hZ2VyPFQgZXh0ZW5kcyBMaXN0S2V5TWFuYWdlck9wdGlvbj4ge1xuICBwcml2YXRlIF9hY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbTogVCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF93cmFwID0gZmFsc2U7XG4gIHByaXZhdGUgX3R5cGVhaGVhZFN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJpdmF0ZSBfaXRlbUNoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX3ZlcnRpY2FsID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfaG9yaXpvbnRhbDogJ2x0cicgfCAncnRsJyB8IG51bGw7XG4gIHByaXZhdGUgX2FsbG93ZWRNb2RpZmllcktleXM6IExpc3RLZXlNYW5hZ2VyTW9kaWZpZXJLZXlbXSA9IFtdO1xuICBwcml2YXRlIF9ob21lQW5kRW5kID0gZmFsc2U7XG4gIHByaXZhdGUgX3BhZ2VVcEFuZERvd24gPSB7ZW5hYmxlZDogZmFsc2UsIGRlbHRhOiAxMH07XG4gIHByaXZhdGUgX2VmZmVjdFJlZjogRWZmZWN0UmVmIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF90eXBlYWhlYWQ/OiBUeXBlYWhlYWQ8VD47XG5cbiAgLyoqXG4gICAqIFByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYW4gaXRlbSBzaG91bGQgYmUgc2tpcHBlZFxuICAgKiBieSB0aGUga2V5IG1hbmFnZXIuIEJ5IGRlZmF1bHQsIGRpc2FibGVkIGl0ZW1zIGFyZSBza2lwcGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2tpcFByZWRpY2F0ZUZuID0gKGl0ZW06IFQpID0+IGl0ZW0uZGlzYWJsZWQ7XG5cbiAgY29uc3RydWN0b3IoaXRlbXM6IFF1ZXJ5TGlzdDxUPiB8IFRbXSB8IHJlYWRvbmx5IFRbXSk7XG4gIGNvbnN0cnVjdG9yKGl0ZW1zOiBTaWduYWw8VFtdPiB8IFNpZ25hbDxyZWFkb25seSBUW10+LCBpbmplY3RvcjogSW5qZWN0b3IpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9pdGVtczogUXVlcnlMaXN0PFQ+IHwgVFtdIHwgcmVhZG9ubHkgVFtdIHwgU2lnbmFsPFRbXT4gfCBTaWduYWw8cmVhZG9ubHkgVFtdPixcbiAgICBpbmplY3Rvcj86IEluamVjdG9yLFxuICApIHtcbiAgICAvLyBXZSBhbGxvdyBmb3IgdGhlIGl0ZW1zIHRvIGJlIGFuIGFycmF5IGJlY2F1c2UsIGluIHNvbWUgY2FzZXMsIHRoZSBjb25zdW1lciBtYXlcbiAgICAvLyBub3QgaGF2ZSBhY2Nlc3MgdG8gYSBRdWVyeUxpc3Qgb2YgdGhlIGl0ZW1zIHRoZXkgd2FudCB0byBtYW5hZ2UgKGUuZy4gd2hlbiB0aGVcbiAgICAvLyBpdGVtcyBhcmVuJ3QgYmVpbmcgY29sbGVjdGVkIHZpYSBgVmlld0NoaWxkcmVuYCBvciBgQ29udGVudENoaWxkcmVuYCkuXG4gICAgaWYgKF9pdGVtcyBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgICAgdGhpcy5faXRlbUNoYW5nZXNTdWJzY3JpcHRpb24gPSBfaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKG5ld0l0ZW1zOiBRdWVyeUxpc3Q8VD4pID0+XG4gICAgICAgIHRoaXMuX2l0ZW1zQ2hhbmdlZChuZXdJdGVtcy50b0FycmF5KCkpLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzU2lnbmFsKF9pdGVtcykpIHtcbiAgICAgIGlmICghaW5qZWN0b3IgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaXN0S2V5TWFuYWdlciBjb25zdHJ1Y3RlZCB3aXRoIGEgc2lnbmFsIG11c3QgcmVjZWl2ZSBhbiBpbmplY3RvcicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4gdGhpcy5faXRlbXNDaGFuZ2VkKF9pdGVtcygpKSwge2luamVjdG9yfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbSB0aGF0IGVtaXRzIGFueSB0aW1lIHRoZSBUQUIga2V5IGlzIHByZXNzZWQsIHNvIGNvbXBvbmVudHMgY2FuIHJlYWN0XG4gICAqIHdoZW4gZm9jdXMgaXMgc2hpZnRlZCBvZmYgb2YgdGhlIGxpc3QuXG4gICAqL1xuICByZWFkb25seSB0YWJPdXQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciB0aGUgYWN0aXZlIGl0ZW0gb2YgdGhlIGxpc3QgbWFuYWdlciBjaGFuZ2VzLiAqL1xuICByZWFkb25seSBjaGFuZ2UgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hpY2ggaXRlbXMgc2hvdWxkIGJlIHNraXBwZWQgYnkgdGhlXG4gICAqIGxpc3Qga2V5IG1hbmFnZXIuXG4gICAqIEBwYXJhbSBwcmVkaWNhdGUgRnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIGl0ZW0gc2hvdWxkIGJlIHNraXBwZWQuXG4gICAqL1xuICBza2lwUHJlZGljYXRlKHByZWRpY2F0ZTogKGl0ZW06IFQpID0+IGJvb2xlYW4pOiB0aGlzIHtcbiAgICB0aGlzLl9za2lwUHJlZGljYXRlRm4gPSBwcmVkaWNhdGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyB3cmFwcGluZyBtb2RlLCB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGl2ZSBpdGVtIHdpbGwgd3JhcCB0b1xuICAgKiB0aGUgb3RoZXIgZW5kIG9mIGxpc3Qgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICAgKiBAcGFyYW0gc2hvdWxkV3JhcCBXaGV0aGVyIHRoZSBsaXN0IHNob3VsZCB3cmFwIHdoZW4gcmVhY2hpbmcgdGhlIGVuZC5cbiAgICovXG4gIHdpdGhXcmFwKHNob3VsZFdyYXAgPSB0cnVlKTogdGhpcyB7XG4gICAgdGhpcy5fd3JhcCA9IHNob3VsZFdyYXA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyB3aGV0aGVyIHRoZSBrZXkgbWFuYWdlciBzaG91bGQgYmUgYWJsZSB0byBtb3ZlIHRoZSBzZWxlY3Rpb24gdmVydGljYWxseS5cbiAgICogQHBhcmFtIGVuYWJsZWQgV2hldGhlciB2ZXJ0aWNhbCBzZWxlY3Rpb24gc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAqL1xuICB3aXRoVmVydGljYWxPcmllbnRhdGlvbihlbmFibGVkOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xuICAgIHRoaXMuX3ZlcnRpY2FsID0gZW5hYmxlZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBrZXkgbWFuYWdlciB0byBtb3ZlIHRoZSBzZWxlY3Rpb24gaG9yaXpvbnRhbGx5LlxuICAgKiBQYXNzaW5nIGluIGBudWxsYCB3aWxsIGRpc2FibGUgaG9yaXpvbnRhbCBtb3ZlbWVudC5cbiAgICogQHBhcmFtIGRpcmVjdGlvbiBEaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHNlbGVjdGlvbiBjYW4gYmUgbW92ZWQuXG4gICAqL1xuICB3aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKGRpcmVjdGlvbjogJ2x0cicgfCAncnRsJyB8IG51bGwpOiB0aGlzIHtcbiAgICB0aGlzLl9ob3Jpem9udGFsID0gZGlyZWN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIGtleXMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gYmUgaGVsZCBkb3duIGFuZCB3aG9zZSBkZWZhdWx0IGFjdGlvbnMgd2lsbCBiZSBwcmV2ZW50ZWRcbiAgICogYXMgdGhlIHVzZXIgaXMgcHJlc3NpbmcgdGhlIGFycm93IGtleXMuIERlZmF1bHRzIHRvIG5vdCBhbGxvd2luZyBhbnkgbW9kaWZpZXIga2V5cy5cbiAgICovXG4gIHdpdGhBbGxvd2VkTW9kaWZpZXJLZXlzKGtleXM6IExpc3RLZXlNYW5hZ2VyTW9kaWZpZXJLZXlbXSk6IHRoaXMge1xuICAgIHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXMgPSBrZXlzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFR1cm5zIG9uIHR5cGVhaGVhZCBtb2RlIHdoaWNoIGFsbG93cyB1c2VycyB0byBzZXQgdGhlIGFjdGl2ZSBpdGVtIGJ5IHR5cGluZy5cbiAgICogQHBhcmFtIGRlYm91bmNlSW50ZXJ2YWwgVGltZSB0byB3YWl0IGFmdGVyIHRoZSBsYXN0IGtleXN0cm9rZSBiZWZvcmUgc2V0dGluZyB0aGUgYWN0aXZlIGl0ZW0uXG4gICAqL1xuICB3aXRoVHlwZUFoZWFkKGRlYm91bmNlSW50ZXJ2YWw6IG51bWJlciA9IDIwMCk6IHRoaXMge1xuICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZ2V0SXRlbXNBcnJheSgpO1xuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDAgJiYgaXRlbXMuc29tZShpdGVtID0+IHR5cGVvZiBpdGVtLmdldExhYmVsICE9PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICB0aHJvdyBFcnJvcignTGlzdEtleU1hbmFnZXIgaXRlbXMgaW4gdHlwZWFoZWFkIG1vZGUgbXVzdCBpbXBsZW1lbnQgdGhlIGBnZXRMYWJlbGAgbWV0aG9kLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9nZXRJdGVtc0FycmF5KCk7XG4gICAgdGhpcy5fdHlwZWFoZWFkID0gbmV3IFR5cGVhaGVhZChpdGVtcywge1xuICAgICAgZGVib3VuY2VJbnRlcnZhbDogdHlwZW9mIGRlYm91bmNlSW50ZXJ2YWwgPT09ICdudW1iZXInID8gZGVib3VuY2VJbnRlcnZhbCA6IHVuZGVmaW5lZCxcbiAgICAgIHNraXBQcmVkaWNhdGU6IGl0ZW0gPT4gdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGl0ZW0pLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uID0gdGhpcy5fdHlwZWFoZWFkLnNlbGVjdGVkSXRlbS5zdWJzY3JpYmUoaXRlbSA9PiB7XG4gICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0oaXRlbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBDYW5jZWxzIHRoZSBjdXJyZW50IHR5cGVhaGVhZCBzZXF1ZW5jZS4gKi9cbiAgY2FuY2VsVHlwZWFoZWFkKCk6IHRoaXMge1xuICAgIHRoaXMuX3R5cGVhaGVhZD8ucmVzZXQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBrZXkgbWFuYWdlciB0byBhY3RpdmF0ZSB0aGUgZmlyc3QgYW5kIGxhc3QgaXRlbXNcbiAgICogcmVzcGVjdGl2ZWx5IHdoZW4gdGhlIEhvbWUgb3IgRW5kIGtleSBpcyBwcmVzc2VkLlxuICAgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHByZXNzaW5nIHRoZSBIb21lIG9yIEVuZCBrZXkgYWN0aXZhdGVzIHRoZSBmaXJzdC9sYXN0IGl0ZW0uXG4gICAqL1xuICB3aXRoSG9tZUFuZEVuZChlbmFibGVkOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xuICAgIHRoaXMuX2hvbWVBbmRFbmQgPSBlbmFibGVkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgdGhlIGtleSBtYW5hZ2VyIHRvIGFjdGl2YXRlIGV2ZXJ5IDEwdGgsIGNvbmZpZ3VyZWQgb3IgZmlyc3QvbGFzdCBlbGVtZW50IGluIHVwL2Rvd24gZGlyZWN0aW9uXG4gICAqIHJlc3BlY3RpdmVseSB3aGVuIHRoZSBQYWdlLVVwIG9yIFBhZ2UtRG93biBrZXkgaXMgcHJlc3NlZC5cbiAgICogQHBhcmFtIGVuYWJsZWQgV2hldGhlciBwcmVzc2luZyB0aGUgUGFnZS1VcCBvciBQYWdlLURvd24ga2V5IGFjdGl2YXRlcyB0aGUgZmlyc3QvbGFzdCBpdGVtLlxuICAgKiBAcGFyYW0gZGVsdGEgV2hldGhlciBwcmVzc2luZyB0aGUgSG9tZSBvciBFbmQga2V5IGFjdGl2YXRlcyB0aGUgZmlyc3QvbGFzdCBpdGVtLlxuICAgKi9cbiAgd2l0aFBhZ2VVcERvd24oZW5hYmxlZDogYm9vbGVhbiA9IHRydWUsIGRlbHRhOiBudW1iZXIgPSAxMCk6IHRoaXMge1xuICAgIHRoaXMuX3BhZ2VVcEFuZERvd24gPSB7ZW5hYmxlZCwgZGVsdGF9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjdGl2ZSBpdGVtIHRvIHRoZSBpdGVtIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gYmUgc2V0IGFzIGFjdGl2ZS5cbiAgICovXG4gIHNldEFjdGl2ZUl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjdGl2ZSBpdGVtIHRvIHRoZSBzcGVjaWZpZWQgaXRlbS5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gdG8gYmUgc2V0IGFzIGFjdGl2ZS5cbiAgICovXG4gIHNldEFjdGl2ZUl0ZW0oaXRlbTogVCk6IHZvaWQ7XG5cbiAgc2V0QWN0aXZlSXRlbShpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91c0FjdGl2ZUl0ZW0gPSB0aGlzLl9hY3RpdmVJdGVtO1xuXG4gICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKGl0ZW0pO1xuXG4gICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0gIT09IHByZXZpb3VzQWN0aXZlSXRlbSkge1xuICAgICAgdGhpcy5jaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgaXRlbSBkZXBlbmRpbmcgb24gdGhlIGtleSBldmVudCBwYXNzZWQgaW4uXG4gICAqIEBwYXJhbSBldmVudCBLZXlib2FyZCBldmVudCB0byBiZSB1c2VkIGZvciBkZXRlcm1pbmluZyB3aGljaCBlbGVtZW50IHNob3VsZCBiZSBhY3RpdmUuXG4gICAqL1xuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCBtb2RpZmllcnM6IExpc3RLZXlNYW5hZ2VyTW9kaWZpZXJLZXlbXSA9IFsnYWx0S2V5JywgJ2N0cmxLZXknLCAnbWV0YUtleScsICdzaGlmdEtleSddO1xuICAgIGNvbnN0IGlzTW9kaWZpZXJBbGxvd2VkID0gbW9kaWZpZXJzLmV2ZXJ5KG1vZGlmaWVyID0+IHtcbiAgICAgIHJldHVybiAhZXZlbnRbbW9kaWZpZXJdIHx8IHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXMuaW5kZXhPZihtb2RpZmllcikgPiAtMTtcbiAgICB9KTtcblxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgY2FzZSBUQUI6XG4gICAgICAgIHRoaXMudGFiT3V0Lm5leHQoKTtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlIERPV05fQVJST1c6XG4gICAgICAgIGlmICh0aGlzLl92ZXJ0aWNhbCAmJiBpc01vZGlmaWVyQWxsb3dlZCkge1xuICAgICAgICAgIHRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgaWYgKHRoaXMuX3ZlcnRpY2FsICYmIGlzTW9kaWZpZXJBbGxvd2VkKSB7XG4gICAgICAgICAgdGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSSUdIVF9BUlJPVzpcbiAgICAgICAgaWYgKHRoaXMuX2hvcml6b250YWwgJiYgaXNNb2RpZmllckFsbG93ZWQpIHtcbiAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsID09PSAncnRsJyA/IHRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCkgOiB0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgTEVGVF9BUlJPVzpcbiAgICAgICAgaWYgKHRoaXMuX2hvcml6b250YWwgJiYgaXNNb2RpZmllckFsbG93ZWQpIHtcbiAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsID09PSAncnRsJyA/IHRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKSA6IHRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSE9NRTpcbiAgICAgICAgaWYgKHRoaXMuX2hvbWVBbmRFbmQgJiYgaXNNb2RpZmllckFsbG93ZWQpIHtcbiAgICAgICAgICB0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEVORDpcbiAgICAgICAgaWYgKHRoaXMuX2hvbWVBbmRFbmQgJiYgaXNNb2RpZmllckFsbG93ZWQpIHtcbiAgICAgICAgICB0aGlzLnNldExhc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUEFHRV9VUDpcbiAgICAgICAgaWYgKHRoaXMuX3BhZ2VVcEFuZERvd24uZW5hYmxlZCAmJiBpc01vZGlmaWVyQWxsb3dlZCkge1xuICAgICAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4IC0gdGhpcy5fcGFnZVVwQW5kRG93bi5kZWx0YTtcbiAgICAgICAgICB0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0YXJnZXRJbmRleCA+IDAgPyB0YXJnZXRJbmRleCA6IDAsIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBBR0VfRE9XTjpcbiAgICAgICAgaWYgKHRoaXMuX3BhZ2VVcEFuZERvd24uZW5hYmxlZCAmJiBpc01vZGlmaWVyQWxsb3dlZCkge1xuICAgICAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgdGhpcy5fcGFnZVVwQW5kRG93bi5kZWx0YTtcbiAgICAgICAgICBjb25zdCBpdGVtc0xlbmd0aCA9IHRoaXMuX2dldEl0ZW1zQXJyYXkoKS5sZW5ndGg7XG4gICAgICAgICAgdGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGFyZ2V0SW5kZXggPCBpdGVtc0xlbmd0aCA/IHRhcmdldEluZGV4IDogaXRlbXNMZW5ndGggLSAxLCAtMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChpc01vZGlmaWVyQWxsb3dlZCB8fCBoYXNNb2RpZmllcktleShldmVudCwgJ3NoaWZ0S2V5JykpIHtcbiAgICAgICAgICB0aGlzLl90eXBlYWhlYWQ/LmhhbmRsZUtleShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RlIHRoYXQgd2UgcmV0dXJuIGhlcmUsIGluIG9yZGVyIHRvIGF2b2lkIHByZXZlbnRpbmdcbiAgICAgICAgLy8gdGhlIGRlZmF1bHQgYWN0aW9uIG9mIG5vbi1uYXZpZ2F0aW9uYWwga2V5cy5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3R5cGVhaGVhZD8ucmVzZXQoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqIEluZGV4IG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGl0ZW0uICovXG4gIGdldCBhY3RpdmVJdGVtSW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleDtcbiAgfVxuXG4gIC8qKiBUaGUgYWN0aXZlIGl0ZW0uICovXG4gIGdldCBhY3RpdmVJdGVtKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlSXRlbTtcbiAgfVxuXG4gIC8qKiBHZXRzIHdoZXRoZXIgdGhlIHVzZXIgaXMgY3VycmVudGx5IHR5cGluZyBpbnRvIHRoZSBtYW5hZ2VyIHVzaW5nIHRoZSB0eXBlYWhlYWQgZmVhdHVyZS4gKi9cbiAgaXNUeXBpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fdHlwZWFoZWFkICYmIHRoaXMuX3R5cGVhaGVhZC5pc1R5cGluZygpO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIGFjdGl2ZSBpdGVtIHRvIHRoZSBmaXJzdCBlbmFibGVkIGl0ZW0gaW4gdGhlIGxpc3QuICovXG4gIHNldEZpcnN0SXRlbUFjdGl2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCgwLCAxKTtcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBhY3RpdmUgaXRlbSB0byB0aGUgbGFzdCBlbmFibGVkIGl0ZW0gaW4gdGhlIGxpc3QuICovXG4gIHNldExhc3RJdGVtQWN0aXZlKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2dldEl0ZW1zQXJyYXkoKS5sZW5ndGggLSAxLCAtMSk7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgYWN0aXZlIGl0ZW0gdG8gdGhlIG5leHQgZW5hYmxlZCBpdGVtIGluIHRoZSBsaXN0LiAqL1xuICBzZXROZXh0SXRlbUFjdGl2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPCAwID8gdGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKSA6IHRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIGFjdGl2ZSBpdGVtIHRvIGEgcHJldmlvdXMgZW5hYmxlZCBpdGVtIGluIHRoZSBsaXN0LiAqL1xuICBzZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4IDwgMCAmJiB0aGlzLl93cmFwXG4gICAgICA/IHRoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKVxuICAgICAgOiB0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIHNldHRpbmcgdGhlIGFjdGl2ZSB3aXRob3V0IGFueSBvdGhlciBlZmZlY3RzLlxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIGl0ZW0gdG8gYmUgc2V0IGFzIGFjdGl2ZS5cbiAgICovXG4gIHVwZGF0ZUFjdGl2ZUl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBzZXR0aW5nIHRoZSBhY3RpdmUgaXRlbSB3aXRob3V0IGFueSBvdGhlciBlZmZlY3RzLlxuICAgKiBAcGFyYW0gaXRlbSBJdGVtIHRvIGJlIHNldCBhcyBhY3RpdmUuXG4gICAqL1xuICB1cGRhdGVBY3RpdmVJdGVtKGl0ZW06IFQpOiB2b2lkO1xuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW0oaXRlbTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUFycmF5ID0gdGhpcy5fZ2V0SXRlbXNBcnJheSgpO1xuICAgIGNvbnN0IGluZGV4ID0gdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gaXRlbSA6IGl0ZW1BcnJheS5pbmRleE9mKGl0ZW0pO1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSBpdGVtQXJyYXlbaW5kZXhdO1xuXG4gICAgLy8gRXhwbGljaXRseSBjaGVjayBmb3IgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCBiZWNhdXNlIG90aGVyIGZhbHN5IHZhbHVlcyBhcmUgdmFsaWQuXG4gICAgdGhpcy5fYWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW0gPT0gbnVsbCA/IG51bGwgOiBhY3RpdmVJdGVtO1xuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgIHRoaXMuX3R5cGVhaGVhZD8uc2V0Q3VycmVudFNlbGVjdGVkSXRlbUluZGV4KGluZGV4KTtcbiAgfVxuXG4gIC8qKiBDbGVhbnMgdXAgdGhlIGtleSBtYW5hZ2VyLiAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2l0ZW1DaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2VmZmVjdFJlZj8uZGVzdHJveSgpO1xuICAgIHRoaXMuX3R5cGVhaGVhZD8uZGVzdHJveSgpO1xuICAgIHRoaXMudGFiT3V0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5jaGFuZ2UuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBhY3RpdmUgaXRlbSwgZ2l2ZW4gYSBsaXN0IG9mIGl0ZW1zIGFuZCB0aGUgZGVsdGEgYmV0d2VlbiB0aGVcbiAgICogY3VycmVudGx5IGFjdGl2ZSBpdGVtIGFuZCB0aGUgbmV3IGFjdGl2ZSBpdGVtLiBJdCB3aWxsIGNhbGN1bGF0ZSBkaWZmZXJlbnRseVxuICAgKiBkZXBlbmRpbmcgb24gd2hldGhlciB3cmFwIG1vZGUgaXMgdHVybmVkIG9uLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0QWN0aXZlSXRlbUJ5RGVsdGEoZGVsdGE6IC0xIHwgMSk6IHZvaWQge1xuICAgIHRoaXMuX3dyYXAgPyB0aGlzLl9zZXRBY3RpdmVJbldyYXBNb2RlKGRlbHRhKSA6IHRoaXMuX3NldEFjdGl2ZUluRGVmYXVsdE1vZGUoZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjdGl2ZSBpdGVtIHByb3Blcmx5IGdpdmVuIFwid3JhcFwiIG1vZGUuIEluIG90aGVyIHdvcmRzLCBpdCB3aWxsIGNvbnRpbnVlIHRvIG1vdmVcbiAgICogZG93biB0aGUgbGlzdCB1bnRpbCBpdCBmaW5kcyBhbiBpdGVtIHRoYXQgaXMgbm90IGRpc2FibGVkLCBhbmQgaXQgd2lsbCB3cmFwIGlmIGl0XG4gICAqIGVuY291bnRlcnMgZWl0aGVyIGVuZCBvZiB0aGUgbGlzdC5cbiAgICovXG4gIHByaXZhdGUgX3NldEFjdGl2ZUluV3JhcE1vZGUoZGVsdGE6IC0xIHwgMSk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZ2V0SXRlbXNBcnJheSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCArIGRlbHRhICogaSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGg7XG4gICAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuXG4gICAgICBpZiAoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihpdGVtKSkge1xuICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjdGl2ZSBpdGVtIHByb3Blcmx5IGdpdmVuIHRoZSBkZWZhdWx0IG1vZGUuIEluIG90aGVyIHdvcmRzLCBpdCB3aWxsXG4gICAqIGNvbnRpbnVlIHRvIG1vdmUgZG93biB0aGUgbGlzdCB1bnRpbCBpdCBmaW5kcyBhbiBpdGVtIHRoYXQgaXMgbm90IGRpc2FibGVkLiBJZlxuICAgKiBpdCBlbmNvdW50ZXJzIGVpdGhlciBlbmQgb2YgdGhlIGxpc3QsIGl0IHdpbGwgc3RvcCBhbmQgbm90IHdyYXAuXG4gICAqL1xuICBwcml2YXRlIF9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKGRlbHRhOiAtMSB8IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9hY3RpdmVJdGVtSW5kZXggKyBkZWx0YSwgZGVsdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjdGl2ZSBpdGVtIHRvIHRoZSBmaXJzdCBlbmFibGVkIGl0ZW0gc3RhcnRpbmcgYXQgdGhlIGluZGV4IHNwZWNpZmllZC4gSWYgdGhlXG4gICAqIGl0ZW0gaXMgZGlzYWJsZWQsIGl0IHdpbGwgbW92ZSBpbiB0aGUgZmFsbGJhY2tEZWx0YSBkaXJlY3Rpb24gdW50aWwgaXQgZWl0aGVyXG4gICAqIGZpbmRzIGFuIGVuYWJsZWQgaXRlbSBvciBlbmNvdW50ZXJzIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAqL1xuICBwcml2YXRlIF9zZXRBY3RpdmVJdGVtQnlJbmRleChpbmRleDogbnVtYmVyLCBmYWxsYmFja0RlbHRhOiAtMSB8IDEpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zQXJyYXkoKTtcblxuICAgIGlmICghaXRlbXNbaW5kZXhdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKHRoaXMuX3NraXBQcmVkaWNhdGVGbihpdGVtc1tpbmRleF0pKSB7XG4gICAgICBpbmRleCArPSBmYWxsYmFja0RlbHRhO1xuXG4gICAgICBpZiAoIWl0ZW1zW2luZGV4XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRBY3RpdmVJdGVtKGluZGV4KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBpdGVtcyBhcyBhbiBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZ2V0SXRlbXNBcnJheSgpOiBUW10gfCByZWFkb25seSBUW10ge1xuICAgIGlmIChpc1NpZ25hbCh0aGlzLl9pdGVtcykpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pdGVtcygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCA/IHRoaXMuX2l0ZW1zLnRvQXJyYXkoKSA6IHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgLyoqIENhbGxiYWNrIGZvciB3aGVuIHRoZSBpdGVtcyBoYXZlIGNoYW5nZWQuICovXG4gIHByaXZhdGUgX2l0ZW1zQ2hhbmdlZChuZXdJdGVtczogVFtdIHwgcmVhZG9ubHkgVFtdKSB7XG4gICAgdGhpcy5fdHlwZWFoZWFkPy5zZXRJdGVtcyhuZXdJdGVtcyk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0pIHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gbmV3SXRlbXMuaW5kZXhPZih0aGlzLl9hY3RpdmVJdGVtKTtcblxuICAgICAgaWYgKG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggIT09IHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCkge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXdJbmRleDtcbiAgICAgICAgdGhpcy5fdHlwZWFoZWFkPy5zZXRDdXJyZW50U2VsZWN0ZWRJdGVtSW5kZXgobmV3SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1,94 +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 { Subject } from 'rxjs';
9
- import { TREE_KEY_MANAGER } from './tree-key-manager';
10
- // NoopTreeKeyManager is a "noop" implementation of TreeKeyMangerStrategy. Methods are noops. Does
11
- // not emit to streams.
12
- //
13
- // Used for applications built before TreeKeyManager to opt-out of TreeKeyManager and revert to
14
- // legacy behavior.
15
- /**
16
- * @docs-private
17
- *
18
- * Opt-out of Tree of key manager behavior.
19
- *
20
- * When provided, Tree has same focus management behavior as before TreeKeyManager was introduced.
21
- * - Tree does not respond to keyboard interaction
22
- * - Tree node allows tabindex to be set by Input binding
23
- * - Tree node allows tabindex to be set by attribute binding
24
- *
25
- * @deprecated NoopTreeKeyManager deprecated. Use TreeKeyManager or inject a
26
- * TreeKeyManagerStrategy instead. To be removed in a future version.
27
- *
28
- * @breaking-change 21.0.0
29
- */
30
- export class NoopTreeKeyManager {
31
- constructor() {
32
- this._isNoopTreeKeyManager = true;
33
- // Provide change as required by TreeKeyManagerStrategy. NoopTreeKeyManager is a "noop"
34
- // implementation that does not emit to streams.
35
- this.change = new Subject();
36
- }
37
- destroy() {
38
- this.change.complete();
39
- }
40
- onKeydown() {
41
- // noop
42
- }
43
- getActiveItemIndex() {
44
- // Always return null. NoopTreeKeyManager is a "noop" implementation that does not maintain
45
- // the active item.
46
- return null;
47
- }
48
- getActiveItem() {
49
- // Always return null. NoopTreeKeyManager is a "noop" implementation that does not maintain
50
- // the active item.
51
- return null;
52
- }
53
- focusItem() {
54
- // noop
55
- }
56
- }
57
- /**
58
- * @docs-private
59
- *
60
- * Opt-out of Tree of key manager behavior.
61
- *
62
- * When provided, Tree has same focus management behavior as before TreeKeyManager was introduced.
63
- * - Tree does not respond to keyboard interaction
64
- * - Tree node allows tabindex to be set by Input binding
65
- * - Tree node allows tabindex to be set by attribute binding
66
- *
67
- * @deprecated NoopTreeKeyManager deprecated. Use TreeKeyManager or inject a
68
- * TreeKeyManagerStrategy instead. To be removed in a future version.
69
- *
70
- * @breaking-change 21.0.0
71
- */
72
- export function NOOP_TREE_KEY_MANAGER_FACTORY() {
73
- return () => new NoopTreeKeyManager();
74
- }
75
- /**
76
- * @docs-private
77
- *
78
- * Opt-out of Tree of key manager behavior.
79
- *
80
- * When provided, Tree has same focus management behavior as before TreeKeyManager was introduced.
81
- * - Tree does not respond to keyboard interaction
82
- * - Tree node allows tabindex to be set by Input binding
83
- * - Tree node allows tabindex to be set by attribute binding
84
- *
85
- * @deprecated NoopTreeKeyManager deprecated. Use TreeKeyManager or inject a
86
- * TreeKeyManagerStrategy instead. To be removed in a future version.
87
- *
88
- * @breaking-change 21.0.0
89
- */
90
- export const NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER = {
91
- provide: TREE_KEY_MANAGER,
92
- useFactory: NOOP_TREE_KEY_MANAGER_FACTORY,
93
- };
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcC10cmVlLWtleS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9hMTF5L2tleS1tYW5hZ2VyL25vb3AtdHJlZS1rZXktbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBT3BELGtHQUFrRztBQUNsRyx1QkFBdUI7QUFDdkIsRUFBRTtBQUNGLCtGQUErRjtBQUMvRixtQkFBbUI7QUFDbkI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQS9CO1FBQ1csMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBRXRDLHVGQUF1RjtRQUN2RixnREFBZ0Q7UUFDdkMsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUF5QjVDLENBQUM7SUF2QkMsT0FBTztRQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPO0lBQ1QsQ0FBQztJQUVELGtCQUFrQjtRQUNoQiwyRkFBMkY7UUFDM0YsbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGFBQWE7UUFDWCwyRkFBMkY7UUFDM0YsbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPO0lBQ1QsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCO0lBRzNDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxrQkFBa0IsRUFBSyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHO0lBQ3BELE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsVUFBVSxFQUFFLDZCQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1RSRUVfS0VZX01BTkFHRVJ9IGZyb20gJy4vdHJlZS1rZXktbWFuYWdlcic7XG5pbXBvcnQge1xuICBUcmVlS2V5TWFuYWdlckZhY3RvcnksXG4gIFRyZWVLZXlNYW5hZ2VySXRlbSxcbiAgVHJlZUtleU1hbmFnZXJTdHJhdGVneSxcbn0gZnJvbSAnLi90cmVlLWtleS1tYW5hZ2VyLXN0cmF0ZWd5JztcblxuLy8gTm9vcFRyZWVLZXlNYW5hZ2VyIGlzIGEgXCJub29wXCIgaW1wbGVtZW50YXRpb24gb2YgVHJlZUtleU1hbmdlclN0cmF0ZWd5LiBNZXRob2RzIGFyZSBub29wcy4gRG9lc1xuLy8gbm90IGVtaXQgdG8gc3RyZWFtcy5cbi8vXG4vLyBVc2VkIGZvciBhcHBsaWNhdGlvbnMgYnVpbHQgYmVmb3JlIFRyZWVLZXlNYW5hZ2VyIHRvIG9wdC1vdXQgb2YgVHJlZUtleU1hbmFnZXIgYW5kIHJldmVydCB0b1xuLy8gbGVnYWN5IGJlaGF2aW9yLlxuLyoqXG4gKiBAZG9jcy1wcml2YXRlXG4gKlxuICogT3B0LW91dCBvZiBUcmVlIG9mIGtleSBtYW5hZ2VyIGJlaGF2aW9yLlxuICpcbiAqIFdoZW4gcHJvdmlkZWQsIFRyZWUgaGFzIHNhbWUgZm9jdXMgbWFuYWdlbWVudCBiZWhhdmlvciBhcyBiZWZvcmUgVHJlZUtleU1hbmFnZXIgd2FzIGludHJvZHVjZWQuXG4gKiAgLSBUcmVlIGRvZXMgbm90IHJlc3BvbmQgdG8ga2V5Ym9hcmQgaW50ZXJhY3Rpb25cbiAqICAtIFRyZWUgbm9kZSBhbGxvd3MgdGFiaW5kZXggdG8gYmUgc2V0IGJ5IElucHV0IGJpbmRpbmdcbiAqICAtIFRyZWUgbm9kZSBhbGxvd3MgdGFiaW5kZXggdG8gYmUgc2V0IGJ5IGF0dHJpYnV0ZSBiaW5kaW5nXG4gKlxuICogQGRlcHJlY2F0ZWQgTm9vcFRyZWVLZXlNYW5hZ2VyIGRlcHJlY2F0ZWQuIFVzZSBUcmVlS2V5TWFuYWdlciBvciBpbmplY3QgYVxuICogVHJlZUtleU1hbmFnZXJTdHJhdGVneSBpbnN0ZWFkLiBUbyBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gKlxuICogQGJyZWFraW5nLWNoYW5nZSAyMS4wLjBcbiAqL1xuZXhwb3J0IGNsYXNzIE5vb3BUcmVlS2V5TWFuYWdlcjxUIGV4dGVuZHMgVHJlZUtleU1hbmFnZXJJdGVtPiBpbXBsZW1lbnRzIFRyZWVLZXlNYW5hZ2VyU3RyYXRlZ3k8VD4ge1xuICByZWFkb25seSBfaXNOb29wVHJlZUtleU1hbmFnZXIgPSB0cnVlO1xuXG4gIC8vIFByb3ZpZGUgY2hhbmdlIGFzIHJlcXVpcmVkIGJ5IFRyZWVLZXlNYW5hZ2VyU3RyYXRlZ3kuIE5vb3BUcmVlS2V5TWFuYWdlciBpcyBhIFwibm9vcFwiXG4gIC8vIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBub3QgZW1pdCB0byBzdHJlYW1zLlxuICByZWFkb25seSBjaGFuZ2UgPSBuZXcgU3ViamVjdDxUIHwgbnVsbD4oKTtcblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuY2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbktleWRvd24oKSB7XG4gICAgLy8gbm9vcFxuICB9XG5cbiAgZ2V0QWN0aXZlSXRlbUluZGV4KCkge1xuICAgIC8vIEFsd2F5cyByZXR1cm4gbnVsbC4gTm9vcFRyZWVLZXlNYW5hZ2VyIGlzIGEgXCJub29wXCIgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBtYWludGFpblxuICAgIC8vIHRoZSBhY3RpdmUgaXRlbS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldEFjdGl2ZUl0ZW0oKSB7XG4gICAgLy8gQWx3YXlzIHJldHVybiBudWxsLiBOb29wVHJlZUtleU1hbmFnZXIgaXMgYSBcIm5vb3BcIiBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IG1haW50YWluXG4gICAgLy8gdGhlIGFjdGl2ZSBpdGVtLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9jdXNJdGVtKCkge1xuICAgIC8vIG5vb3BcbiAgfVxufVxuXG4vKipcbiAqIEBkb2NzLXByaXZhdGVcbiAqXG4gKiBPcHQtb3V0IG9mIFRyZWUgb2Yga2V5IG1hbmFnZXIgYmVoYXZpb3IuXG4gKlxuICogV2hlbiBwcm92aWRlZCwgVHJlZSBoYXMgc2FtZSBmb2N1cyBtYW5hZ2VtZW50IGJlaGF2aW9yIGFzIGJlZm9yZSBUcmVlS2V5TWFuYWdlciB3YXMgaW50cm9kdWNlZC5cbiAqICAtIFRyZWUgZG9lcyBub3QgcmVzcG9uZCB0byBrZXlib2FyZCBpbnRlcmFjdGlvblxuICogIC0gVHJlZSBub2RlIGFsbG93cyB0YWJpbmRleCB0byBiZSBzZXQgYnkgSW5wdXQgYmluZGluZ1xuICogIC0gVHJlZSBub2RlIGFsbG93cyB0YWJpbmRleCB0byBiZSBzZXQgYnkgYXR0cmlidXRlIGJpbmRpbmdcbiAqXG4gKiBAZGVwcmVjYXRlZCBOb29wVHJlZUtleU1hbmFnZXIgZGVwcmVjYXRlZC4gVXNlIFRyZWVLZXlNYW5hZ2VyIG9yIGluamVjdCBhXG4gKiBUcmVlS2V5TWFuYWdlclN0cmF0ZWd5IGluc3RlYWQuIFRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAqXG4gKiBAYnJlYWtpbmctY2hhbmdlIDIxLjAuMFxuICovXG5leHBvcnQgZnVuY3Rpb24gTk9PUF9UUkVFX0tFWV9NQU5BR0VSX0ZBQ1RPUlk8XG4gIFQgZXh0ZW5kcyBUcmVlS2V5TWFuYWdlckl0ZW0sXG4+KCk6IFRyZWVLZXlNYW5hZ2VyRmFjdG9yeTxUPiB7XG4gIHJldHVybiAoKSA9PiBuZXcgTm9vcFRyZWVLZXlNYW5hZ2VyPFQ+KCk7XG59XG5cbi8qKlxuICogQGRvY3MtcHJpdmF0ZVxuICpcbiAqIE9wdC1vdXQgb2YgVHJlZSBvZiBrZXkgbWFuYWdlciBiZWhhdmlvci5cbiAqXG4gKiBXaGVuIHByb3ZpZGVkLCBUcmVlIGhhcyBzYW1lIGZvY3VzIG1hbmFnZW1lbnQgYmVoYXZpb3IgYXMgYmVmb3JlIFRyZWVLZXlNYW5hZ2VyIHdhcyBpbnRyb2R1Y2VkLlxuICogIC0gVHJlZSBkb2VzIG5vdCByZXNwb25kIHRvIGtleWJvYXJkIGludGVyYWN0aW9uXG4gKiAgLSBUcmVlIG5vZGUgYWxsb3dzIHRhYmluZGV4IHRvIGJlIHNldCBieSBJbnB1dCBiaW5kaW5nXG4gKiAgLSBUcmVlIG5vZGUgYWxsb3dzIHRhYmluZGV4IHRvIGJlIHNldCBieSBhdHRyaWJ1dGUgYmluZGluZ1xuICpcbiAqIEBkZXByZWNhdGVkIE5vb3BUcmVlS2V5TWFuYWdlciBkZXByZWNhdGVkLiBVc2UgVHJlZUtleU1hbmFnZXIgb3IgaW5qZWN0IGFcbiAqIFRyZWVLZXlNYW5hZ2VyU3RyYXRlZ3kgaW5zdGVhZC4gVG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICpcbiAqIEBicmVha2luZy1jaGFuZ2UgMjEuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBOT09QX1RSRUVfS0VZX01BTkFHRVJfRkFDVE9SWV9QUk9WSURFUiA9IHtcbiAgcHJvdmlkZTogVFJFRV9LRVlfTUFOQUdFUixcbiAgdXNlRmFjdG9yeTogTk9PUF9UUkVFX0tFWV9NQU5BR0VSX0ZBQ1RPUlksXG59O1xuIl19
@@ -1,9 +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
- export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1rZXktbWFuYWdlci1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvYTExeS9rZXktbWFuYWdlci90cmVlLWtleS1tYW5hZ2VyLXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1F1ZXJ5TGlzdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG4vKiogUmVwcmVzZW50cyBhbiBpdGVtIHdpdGhpbiBhIHRyZWUgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGEgVHJlZUtleU1hbmFnZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVLZXlNYW5hZ2VySXRlbSB7XG4gIC8qKiBXaGV0aGVyIHRoZSBpdGVtIGlzIGRpc2FibGVkLiAqL1xuICBpc0Rpc2FibGVkPzogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcblxuICAvKiogVGhlIHVzZXItZmFjaW5nIGxhYmVsIGZvciB0aGlzIGl0ZW0uICovXG4gIGdldExhYmVsPygpOiBzdHJpbmc7XG5cbiAgLyoqIFBlcmZvcm0gdGhlIG1haW4gYWN0aW9uIChpLmUuIHNlbGVjdGlvbikgZm9yIHRoaXMgaXRlbS4gKi9cbiAgYWN0aXZhdGUoKTogdm9pZDtcblxuICAvKiogUmV0cmlldmVzIHRoZSBwYXJlbnQgZm9yIHRoaXMgaXRlbS4gVGhpcyBpcyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gcGFyZW50LiAqL1xuICBnZXRQYXJlbnQoKTogVHJlZUtleU1hbmFnZXJJdGVtIHwgbnVsbDtcblxuICAvKiogUmV0cmlldmVzIHRoZSBjaGlsZHJlbiBmb3IgdGhpcyBpdGVtLiAqL1xuICBnZXRDaGlsZHJlbigpOiBUcmVlS2V5TWFuYWdlckl0ZW1bXSB8IE9ic2VydmFibGU8VHJlZUtleU1hbmFnZXJJdGVtW10+O1xuXG4gIC8qKiBEZXRlcm1pbmVzIGlmIHRoZSBpdGVtIGlzIGN1cnJlbnRseSBleHBhbmRlZC4gKi9cbiAgaXNFeHBhbmRlZDogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcblxuICAvKiogQ29sbGFwc2VzIHRoZSBpdGVtLCBoaWRpbmcgaXRzIGNoaWxkcmVuLiAqL1xuICBjb2xsYXBzZSgpOiB2b2lkO1xuXG4gIC8qKiBFeHBhbmRzIHRoZSBpdGVtLCBzaG93aW5nIGl0cyBjaGlsZHJlbi4gKi9cbiAgZXhwYW5kKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIGl0ZW0uIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSBpbmRpY2F0aW9uIHRvIHRoZSB1c2VyIHRoYXQgdGhpcyBpdGVtIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1cygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBVbmZvY3VzIHRoZSBpdGVtLiBUaGlzIHNob3VsZCByZW1vdmUgdGhlIGZvY3VzIHN0YXRlLlxuICAgKi9cbiAgdW5mb2N1cygpOiB2b2lkO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBUcmVlS2V5TWFuYWdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmVlS2V5TWFuYWdlck9wdGlvbnM8VCBleHRlbmRzIFRyZWVLZXlNYW5hZ2VySXRlbT4ge1xuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlbiB0aGUga2V5IG1hbmFnZXIgd2lsbCBjYWxsIGBhY3RpdmF0ZWAgaW4gYWRkaXRpb24gdG8gY2FsbGluZyBgZm9jdXNgIHdoZW4gYVxuICAgKiBwYXJ0aWN1bGFyIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICovXG4gIHNob3VsZEFjdGl2YXRpb25Gb2xsb3dGb2N1cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHRyZWUgaXRlbXMgYXJlIGxhaWQgb3V0IGhvcml6b250YWxseS4gVGhpcyBpbmZsdWVuY2VzIHdoaWNoIGtleVxuICAgKiB3aWxsIGJlIGludGVycHJldGVkIGFzIGV4cGFuZCBvciBjb2xsYXBzZS5cbiAgICovXG4gIGhvcml6b250YWxPcmllbnRhdGlvbj86ICdydGwnIHwgJ2x0cic7XG5cbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBuYXZpZ2F0aW9uIFwic2tpcHNcIiBvdmVyIGl0ZW1zIHRoYXQgcGFzcyB0aGUgZ2l2ZW4gcHJlZGljYXRlLlxuICAgKlxuICAgKiBJZiB0aGUgaXRlbSBpcyB0byBiZSBza2lwcGVkLCBwcmVkaWNhdGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBmYWxzZS5cbiAgICovXG4gIHNraXBQcmVkaWNhdGU/OiAoaXRlbTogVCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIGRldGVybWluZXMgaG93IHRoZSBrZXkgbWFuYWdlciBkZXRlcm1pbmVzIGlmIHR3byBpdGVtcyBhcmUgZXF1aXZhbGVudC5cbiAgICpcbiAgICogSXQgc2hvdWxkIHByb3ZpZGUgYSB1bmlxdWUga2V5IGZvciBlYWNoIHVuaXF1ZSB0cmVlIGl0ZW0uIElmIHR3byB0cmVlIGl0ZW1zIGFyZSBlcXVpdmFsZW50LFxuICAgKiB0aGVuIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbiAgICovXG4gIHRyYWNrQnk/OiAodHJlZUl0ZW06IFQpID0+IHVua25vd247XG5cbiAgLyoqXG4gICAqIElmIGEgdmFsdWUgaXMgcHJvdmlkZWQsIGVuYWJsZXMgdHlwZWFoZWFkIG1vZGUsIHdoaWNoIGFsbG93cyB1c2VycyB0byBzZXQgdGhlIGFjdGl2ZSBpdGVtXG4gICAqIGJ5IHR5cGluZyB0aGUgdmlzaWJsZSBsYWJlbCBvZiB0aGUgaXRlbS5cbiAgICpcbiAgICogSWYgYSBudW1iZXIgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCBiZSB0aGUgdGltZSB0byB3YWl0IGFmdGVyIHRoZSBsYXN0IGtleXN0cm9rZSBiZWZvcmVcbiAgICogc2V0dGluZyB0aGUgYWN0aXZlIGl0ZW0uIElmIGB0cnVlYCBpcyBwcm92aWRlZCwgdGhlIGRlZmF1bHQgaW50ZXJ2YWwgb2YgMjAwbXMgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgdHlwZUFoZWFkRGVib3VuY2VJbnRlcnZhbD86IHRydWUgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZUtleU1hbmFnZXJTdHJhdGVneTxUIGV4dGVuZHMgVHJlZUtleU1hbmFnZXJJdGVtPiB7XG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyBhbnkgdGltZSB0aGUgZm9jdXNlZCBpdGVtIGNoYW5nZXMuICovXG4gIHJlYWRvbmx5IGNoYW5nZTogU3ViamVjdDxUIHwgbnVsbD47XG5cbiAgLyoqXG4gICAqIENsZWFucyB1cCB0aGUga2V5IG1hbmFnZXIuXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgYSBrZXlib2FyZCBldmVudCBvbiB0aGUgdHJlZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IEtleWJvYXJkIGV2ZW50IHRoYXQgcmVwcmVzZW50cyB0aGUgdXNlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0cmVlLlxuICAgKi9cbiAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZDtcblxuICAvKiogSW5kZXggb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgaXRlbS4gKi9cbiAgZ2V0QWN0aXZlSXRlbUluZGV4KCk6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGl0ZW0uICovXG4gIGdldEFjdGl2ZUl0ZW0oKTogVCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBwcm92aWRlZCBpdGVtIGJ5IGluZGV4LlxuICAgKlxuICAgKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBpdGVtLiBFbWl0cyB0byBgY2hhbmdlYCBzdHJlYW0gaWYgYWN0aXZlIGl0ZW1cbiAgICogQ2hhbmdlcy5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBmb2N1cy5cbiAgICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBmb2N1c2luZyBvcHRpb25zLlxuICAgKi9cbiAgZm9jdXNJdGVtKGluZGV4OiBudW1iZXIsIG9wdGlvbnM/OiB7ZW1pdENoYW5nZUV2ZW50PzogYm9vbGVhbn0pOiB2b2lkO1xuICAvKipcbiAgICogRm9jdXMgdGhlIHByb3ZpZGVkIGl0ZW0uXG4gICAqXG4gICAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGl0ZW0uIEVtaXRzIHRvIGBjaGFuZ2VgIHN0cmVhbSBpZiBhY3RpdmUgaXRlbVxuICAgKiBDaGFuZ2VzLlxuICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byBmb2N1cy4gRXF1YWxpdHkgaXMgZGV0ZXJtaW5lZCB2aWEgdGhlIHRyYWNrQnkgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBvcHRpb25zIEFkZGl0aW9uYWwgZm9jdXNpbmcgb3B0aW9ucy5cbiAgICovXG4gIGZvY3VzSXRlbShpdGVtOiBULCBvcHRpb25zPzoge2VtaXRDaGFuZ2VFdmVudD86IGJvb2xlYW59KTogdm9pZDtcbiAgZm9jdXNJdGVtKGl0ZW1PckluZGV4OiBudW1iZXIgfCBULCBvcHRpb25zPzoge2VtaXRDaGFuZ2VFdmVudD86IGJvb2xlYW59KTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgVHJlZUtleU1hbmFnZXJGYWN0b3J5PFQgZXh0ZW5kcyBUcmVlS2V5TWFuYWdlckl0ZW0+ID0gKFxuICBpdGVtczogT2JzZXJ2YWJsZTxUW10+IHwgUXVlcnlMaXN0PFQ+IHwgVFtdLFxuICBvcHRpb25zOiBUcmVlS2V5TWFuYWdlck9wdGlvbnM8VD4sXG4pID0+IFRyZWVLZXlNYW5hZ2VyU3RyYXRlZ3k8VD47XG4iXX0=