@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,345 +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 { InjectionToken, QueryList } from '@angular/core';
9
- import { coerceObservable } from '@angular/cdk/coercion/private';
10
- import { Subject, Subscription, isObservable, of as observableOf } from 'rxjs';
11
- import { take } from 'rxjs/operators';
12
- import { Typeahead } from './typeahead';
13
- /**
14
- * This class manages keyboard events for trees. If you pass it a QueryList or other list of tree
15
- * items, it will set the active item, focus, handle expansion and typeahead correctly when
16
- * keyboard events occur.
17
- */
18
- export class TreeKeyManager {
19
- _initialFocus() {
20
- if (this._hasInitialFocused) {
21
- return;
22
- }
23
- if (!this._items.length) {
24
- return;
25
- }
26
- let focusIndex = 0;
27
- for (let i = 0; i < this._items.length; i++) {
28
- if (!this._skipPredicateFn(this._items[i]) && !this._isItemDisabled(this._items[i])) {
29
- focusIndex = i;
30
- break;
31
- }
32
- }
33
- this.focusItem(focusIndex);
34
- this._hasInitialFocused = true;
35
- }
36
- /**
37
- *
38
- * @param items List of TreeKeyManager options. Can be synchronous or asynchronous.
39
- * @param config Optional configuration options. By default, use 'ltr' horizontal orientation. By
40
- * default, do not skip any nodes. By default, key manager only calls `focus` method when items
41
- * are focused and does not call `activate`. If `typeaheadDefaultInterval` is `true`, use a
42
- * default interval of 200ms.
43
- */
44
- constructor(items, config) {
45
- /** The index of the currently active (focused) item. */
46
- this._activeItemIndex = -1;
47
- /** The currently active (focused) item. */
48
- this._activeItem = null;
49
- /** Whether or not we activate the item when it's focused. */
50
- this._shouldActivationFollowFocus = false;
51
- /**
52
- * The orientation that the tree is laid out in. In `rtl` mode, the behavior of Left and
53
- * Right arrow are switched.
54
- */
55
- this._horizontalOrientation = 'ltr';
56
- /**
57
- * Predicate function that can be used to check whether an item should be skipped
58
- * by the key manager.
59
- *
60
- * The default value for this doesn't skip any elements in order to keep tree items focusable
61
- * when disabled. This aligns with ARIA guidelines:
62
- * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#focusabilityofdisabledcontrols.
63
- */
64
- this._skipPredicateFn = (_item) => false;
65
- /** Function to determine equivalent items. */
66
- this._trackByFn = (item) => item;
67
- /** Synchronous cache of the items to manage. */
68
- this._items = [];
69
- this._typeaheadSubscription = Subscription.EMPTY;
70
- this._hasInitialFocused = false;
71
- /** Stream that emits any time the focused item changes. */
72
- this.change = new Subject();
73
- // We allow for the items to be an array or Observable because, in some cases, the consumer may
74
- // not have access to a QueryList of the items they want to manage (e.g. when the
75
- // items aren't being collected via `ViewChildren` or `ContentChildren`).
76
- if (items instanceof QueryList) {
77
- this._items = items.toArray();
78
- items.changes.subscribe((newItems) => {
79
- this._items = newItems.toArray();
80
- this._typeahead?.setItems(this._items);
81
- this._updateActiveItemIndex(this._items);
82
- this._initialFocus();
83
- });
84
- }
85
- else if (isObservable(items)) {
86
- items.subscribe(newItems => {
87
- this._items = newItems;
88
- this._typeahead?.setItems(newItems);
89
- this._updateActiveItemIndex(newItems);
90
- this._initialFocus();
91
- });
92
- }
93
- else {
94
- this._items = items;
95
- this._initialFocus();
96
- }
97
- if (typeof config.shouldActivationFollowFocus === 'boolean') {
98
- this._shouldActivationFollowFocus = config.shouldActivationFollowFocus;
99
- }
100
- if (config.horizontalOrientation) {
101
- this._horizontalOrientation = config.horizontalOrientation;
102
- }
103
- if (config.skipPredicate) {
104
- this._skipPredicateFn = config.skipPredicate;
105
- }
106
- if (config.trackBy) {
107
- this._trackByFn = config.trackBy;
108
- }
109
- if (typeof config.typeAheadDebounceInterval !== 'undefined') {
110
- this._setTypeAhead(config.typeAheadDebounceInterval);
111
- }
112
- }
113
- /** Cleans up the key manager. */
114
- destroy() {
115
- this._typeaheadSubscription.unsubscribe();
116
- this._typeahead?.destroy();
117
- this.change.complete();
118
- }
119
- /**
120
- * Handles a keyboard event on the tree.
121
- * @param event Keyboard event that represents the user interaction with the tree.
122
- */
123
- onKeydown(event) {
124
- const key = event.key;
125
- switch (key) {
126
- case 'Tab':
127
- // Return early here, in order to allow Tab to actually tab out of the tree
128
- return;
129
- case 'ArrowDown':
130
- this._focusNextItem();
131
- break;
132
- case 'ArrowUp':
133
- this._focusPreviousItem();
134
- break;
135
- case 'ArrowRight':
136
- this._horizontalOrientation === 'rtl'
137
- ? this._collapseCurrentItem()
138
- : this._expandCurrentItem();
139
- break;
140
- case 'ArrowLeft':
141
- this._horizontalOrientation === 'rtl'
142
- ? this._expandCurrentItem()
143
- : this._collapseCurrentItem();
144
- break;
145
- case 'Home':
146
- this._focusFirstItem();
147
- break;
148
- case 'End':
149
- this._focusLastItem();
150
- break;
151
- case 'Enter':
152
- case ' ':
153
- this._activateCurrentItem();
154
- break;
155
- default:
156
- if (event.key === '*') {
157
- this._expandAllItemsAtCurrentItemLevel();
158
- break;
159
- }
160
- this._typeahead?.handleKey(event);
161
- // Return here, in order to avoid preventing the default action of non-navigational
162
- // keys or resetting the buffer of pressed letters.
163
- return;
164
- }
165
- // Reset the typeahead since the user has used a navigational key.
166
- this._typeahead?.reset();
167
- event.preventDefault();
168
- }
169
- /** Index of the currently active item. */
170
- getActiveItemIndex() {
171
- return this._activeItemIndex;
172
- }
173
- /** The currently active item. */
174
- getActiveItem() {
175
- return this._activeItem;
176
- }
177
- /** Focus the first available item. */
178
- _focusFirstItem() {
179
- this.focusItem(this._findNextAvailableItemIndex(-1));
180
- }
181
- /** Focus the last available item. */
182
- _focusLastItem() {
183
- this.focusItem(this._findPreviousAvailableItemIndex(this._items.length));
184
- }
185
- /** Focus the next available item. */
186
- _focusNextItem() {
187
- this.focusItem(this._findNextAvailableItemIndex(this._activeItemIndex));
188
- }
189
- /** Focus the previous available item. */
190
- _focusPreviousItem() {
191
- this.focusItem(this._findPreviousAvailableItemIndex(this._activeItemIndex));
192
- }
193
- focusItem(itemOrIndex, options = {}) {
194
- // Set default options
195
- options.emitChangeEvent ??= true;
196
- let index = typeof itemOrIndex === 'number'
197
- ? itemOrIndex
198
- : this._items.findIndex(item => this._trackByFn(item) === this._trackByFn(itemOrIndex));
199
- if (index < 0 || index >= this._items.length) {
200
- return;
201
- }
202
- const activeItem = this._items[index];
203
- // If we're just setting the same item, don't re-call activate or focus
204
- if (this._activeItem !== null &&
205
- this._trackByFn(activeItem) === this._trackByFn(this._activeItem)) {
206
- return;
207
- }
208
- const previousActiveItem = this._activeItem;
209
- this._activeItem = activeItem ?? null;
210
- this._activeItemIndex = index;
211
- this._typeahead?.setCurrentSelectedItemIndex(index);
212
- this._activeItem?.focus();
213
- previousActiveItem?.unfocus();
214
- if (options.emitChangeEvent) {
215
- this.change.next(this._activeItem);
216
- }
217
- if (this._shouldActivationFollowFocus) {
218
- this._activateCurrentItem();
219
- }
220
- }
221
- _updateActiveItemIndex(newItems) {
222
- const activeItem = this._activeItem;
223
- if (!activeItem) {
224
- return;
225
- }
226
- const newIndex = newItems.findIndex(item => this._trackByFn(item) === this._trackByFn(activeItem));
227
- if (newIndex > -1 && newIndex !== this._activeItemIndex) {
228
- this._activeItemIndex = newIndex;
229
- this._typeahead?.setCurrentSelectedItemIndex(newIndex);
230
- }
231
- }
232
- _setTypeAhead(debounceInterval) {
233
- this._typeahead = new Typeahead(this._items, {
234
- debounceInterval: typeof debounceInterval === 'number' ? debounceInterval : undefined,
235
- skipPredicate: item => this._skipPredicateFn(item),
236
- });
237
- this._typeaheadSubscription = this._typeahead.selectedItem.subscribe(item => {
238
- this.focusItem(item);
239
- });
240
- }
241
- _findNextAvailableItemIndex(startingIndex) {
242
- for (let i = startingIndex + 1; i < this._items.length; i++) {
243
- if (!this._skipPredicateFn(this._items[i])) {
244
- return i;
245
- }
246
- }
247
- return startingIndex;
248
- }
249
- _findPreviousAvailableItemIndex(startingIndex) {
250
- for (let i = startingIndex - 1; i >= 0; i--) {
251
- if (!this._skipPredicateFn(this._items[i])) {
252
- return i;
253
- }
254
- }
255
- return startingIndex;
256
- }
257
- /**
258
- * If the item is already expanded, we collapse the item. Otherwise, we will focus the parent.
259
- */
260
- _collapseCurrentItem() {
261
- if (!this._activeItem) {
262
- return;
263
- }
264
- if (this._isCurrentItemExpanded()) {
265
- this._activeItem.collapse();
266
- }
267
- else {
268
- const parent = this._activeItem.getParent();
269
- if (!parent || this._skipPredicateFn(parent)) {
270
- return;
271
- }
272
- this.focusItem(parent);
273
- }
274
- }
275
- /**
276
- * If the item is already collapsed, we expand the item. Otherwise, we will focus the first child.
277
- */
278
- _expandCurrentItem() {
279
- if (!this._activeItem) {
280
- return;
281
- }
282
- if (!this._isCurrentItemExpanded()) {
283
- this._activeItem.expand();
284
- }
285
- else {
286
- coerceObservable(this._activeItem.getChildren())
287
- .pipe(take(1))
288
- .subscribe(children => {
289
- const firstChild = children.find(child => !this._skipPredicateFn(child));
290
- if (!firstChild) {
291
- return;
292
- }
293
- this.focusItem(firstChild);
294
- });
295
- }
296
- }
297
- _isCurrentItemExpanded() {
298
- if (!this._activeItem) {
299
- return false;
300
- }
301
- return typeof this._activeItem.isExpanded === 'boolean'
302
- ? this._activeItem.isExpanded
303
- : this._activeItem.isExpanded();
304
- }
305
- _isItemDisabled(item) {
306
- return typeof item.isDisabled === 'boolean' ? item.isDisabled : item.isDisabled?.();
307
- }
308
- /** For all items that are the same level as the current item, we expand those items. */
309
- _expandAllItemsAtCurrentItemLevel() {
310
- if (!this._activeItem) {
311
- return;
312
- }
313
- const parent = this._activeItem.getParent();
314
- let itemsToExpand;
315
- if (!parent) {
316
- itemsToExpand = observableOf(this._items.filter(item => item.getParent() === null));
317
- }
318
- else {
319
- itemsToExpand = coerceObservable(parent.getChildren());
320
- }
321
- itemsToExpand.pipe(take(1)).subscribe(items => {
322
- for (const item of items) {
323
- item.expand();
324
- }
325
- });
326
- }
327
- _activateCurrentItem() {
328
- this._activeItem?.activate();
329
- }
330
- }
331
- /** @docs-private */
332
- export function TREE_KEY_MANAGER_FACTORY() {
333
- return (items, options) => new TreeKeyManager(items, options);
334
- }
335
- /** Injection token that determines the key manager to use. */
336
- export const TREE_KEY_MANAGER = new InjectionToken('tree-key-manager', {
337
- providedIn: 'root',
338
- factory: TREE_KEY_MANAGER_FACTORY,
339
- });
340
- /** @docs-private */
341
- export const TREE_KEY_MANAGER_FACTORY_PROVIDER = {
342
- provide: TREE_KEY_MANAGER,
343
- useFactory: TREE_KEY_MANAGER_FACTORY,
344
- };
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1rZXktbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvYTExeS9rZXktbWFuYWdlci90cmVlLWtleS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxjQUFjLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBYSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFLElBQUksWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQU9wQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQWtDakIsYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRixVQUFVLEdB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QUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVELG9CQUFvQjtBQUNwQixNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBNkIsa0JBQWtCLEVBQUU7SUFDakcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLHdCQUF3QjtDQUNsQyxDQUFDLENBQUM7QUFFSCxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUc7SUFDL0MsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixVQUFVLEVBQUUsd0JBQXdCO0NBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbiwgUXVlcnlMaXN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Y29lcmNlT2JzZXJ2YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uL3ByaXZhdGUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGlzT2JzZXJ2YWJsZSwgb2YgYXMgb2JzZXJ2YWJsZU9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgVHJlZUtleU1hbmFnZXJGYWN0b3J5LFxuICBUcmVlS2V5TWFuYWdlckl0ZW0sXG4gIFRyZWVLZXlNYW5hZ2VyT3B0aW9ucyxcbiAgVHJlZUtleU1hbmFnZXJTdHJhdGVneSxcbn0gZnJvbSAnLi90cmVlLWtleS1tYW5hZ2VyLXN0cmF0ZWd5JztcbmltcG9ydCB7VHlwZWFoZWFkfSBmcm9tICcuL3R5cGVhaGVhZCc7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBtYW5hZ2VzIGtleWJvYXJkIGV2ZW50cyBmb3IgdHJlZXMuIElmIHlvdSBwYXNzIGl0IGEgUXVlcnlMaXN0IG9yIG90aGVyIGxpc3Qgb2YgdHJlZVxuICogaXRlbXMsIGl0IHdpbGwgc2V0IHRoZSBhY3RpdmUgaXRlbSwgZm9jdXMsIGhhbmRsZSBleHBhbnNpb24gYW5kIHR5cGVhaGVhZCBjb3JyZWN0bHkgd2hlblxuICoga2V5Ym9hcmQgZXZlbnRzIG9jY3VyLlxuICovXG5leHBvcnQgY2xhc3MgVHJlZUtleU1hbmFnZXI8VCBleHRlbmRzIFRyZWVLZXlNYW5hZ2VySXRlbT4gaW1wbGVtZW50cyBUcmVlS2V5TWFuYWdlclN0cmF0ZWd5PFQ+IHtcbiAgLyoqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSAoZm9jdXNlZCkgaXRlbS4gKi9cbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIC8qKiBUaGUgY3VycmVudGx5IGFjdGl2ZSAoZm9jdXNlZCkgaXRlbS4gKi9cbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbTogVCB8IG51bGwgPSBudWxsO1xuICAvKiogV2hldGhlciBvciBub3Qgd2UgYWN0aXZhdGUgdGhlIGl0ZW0gd2hlbiBpdCdzIGZvY3VzZWQuICovXG4gIHByaXZhdGUgX3Nob3VsZEFjdGl2YXRpb25Gb2xsb3dGb2N1cyA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIG9yaWVudGF0aW9uIHRoYXQgdGhlIHRyZWUgaXMgbGFpZCBvdXQgaW4uIEluIGBydGxgIG1vZGUsIHRoZSBiZWhhdmlvciBvZiBMZWZ0IGFuZFxuICAgKiBSaWdodCBhcnJvdyBhcmUgc3dpdGNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9ob3Jpem9udGFsT3JpZW50YXRpb246ICdsdHInIHwgJ3J0bCcgPSAnbHRyJztcblxuICAvKipcbiAgICogUHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBhbiBpdGVtIHNob3VsZCBiZSBza2lwcGVkXG4gICAqIGJ5IHRoZSBrZXkgbWFuYWdlci5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgZG9lc24ndCBza2lwIGFueSBlbGVtZW50cyBpbiBvcmRlciB0byBrZWVwIHRyZWUgaXRlbXMgZm9jdXNhYmxlXG4gICAqIHdoZW4gZGlzYWJsZWQuIFRoaXMgYWxpZ25zIHdpdGggQVJJQSBndWlkZWxpbmVzOlxuICAgKiBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3ByYWN0aWNlcy9rZXlib2FyZC1pbnRlcmZhY2UvI2ZvY3VzYWJpbGl0eW9mZGlzYWJsZWRjb250cm9scy5cbiAgICovXG4gIHByaXZhdGUgX3NraXBQcmVkaWNhdGVGbiA9IChfaXRlbTogVCkgPT4gZmFsc2U7XG5cbiAgLyoqIEZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50IGl0ZW1zLiAqL1xuICBwcml2YXRlIF90cmFja0J5Rm46IChpdGVtOiBUKSA9PiB1bmtub3duID0gKGl0ZW06IFQpID0+IGl0ZW07XG5cbiAgLyoqIFN5bmNocm9ub3VzIGNhY2hlIG9mIHRoZSBpdGVtcyB0byBtYW5hZ2UuICovXG4gIHByaXZhdGUgX2l0ZW1zOiBUW10gPSBbXTtcblxuICBwcml2YXRlIF90eXBlYWhlYWQ/OiBUeXBlYWhlYWQ8VD47XG4gIHByaXZhdGUgX3R5cGVhaGVhZFN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICBwcml2YXRlIF9oYXNJbml0aWFsRm9jdXNlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2luaXRpYWxGb2N1cygpIHtcbiAgICBpZiAodGhpcy5faGFzSW5pdGlhbEZvY3VzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2l0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmb2N1c0luZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuX3NraXBQcmVkaWNhdGVGbih0aGlzLl9pdGVtc1tpXSkgJiYgIXRoaXMuX2lzSXRlbURpc2FibGVkKHRoaXMuX2l0ZW1zW2ldKSkge1xuICAgICAgICBmb2N1c0luZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c0l0ZW0oZm9jdXNJbmRleCk7XG4gICAgdGhpcy5faGFzSW5pdGlhbEZvY3VzZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyBMaXN0IG9mIFRyZWVLZXlNYW5hZ2VyIG9wdGlvbnMuIENhbiBiZSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMuXG4gICAqIEBwYXJhbSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBCeSBkZWZhdWx0LCB1c2UgJ2x0cicgaG9yaXpvbnRhbCBvcmllbnRhdGlvbi4gQnlcbiAgICogZGVmYXVsdCwgZG8gbm90IHNraXAgYW55IG5vZGVzLiBCeSBkZWZhdWx0LCBrZXkgbWFuYWdlciBvbmx5IGNhbGxzIGBmb2N1c2AgbWV0aG9kIHdoZW4gaXRlbXNcbiAgICogYXJlIGZvY3VzZWQgYW5kIGRvZXMgbm90IGNhbGwgYGFjdGl2YXRlYC4gSWYgYHR5cGVhaGVhZERlZmF1bHRJbnRlcnZhbGAgaXMgYHRydWVgLCB1c2UgYVxuICAgKiBkZWZhdWx0IGludGVydmFsIG9mIDIwMG1zLlxuICAgKi9cbiAgY29uc3RydWN0b3IoaXRlbXM6IE9ic2VydmFibGU8VFtdPiB8IFF1ZXJ5TGlzdDxUPiB8IFRbXSwgY29uZmlnOiBUcmVlS2V5TWFuYWdlck9wdGlvbnM8VD4pIHtcbiAgICAvLyBXZSBhbGxvdyBmb3IgdGhlIGl0ZW1zIHRvIGJlIGFuIGFycmF5IG9yIE9ic2VydmFibGUgYmVjYXVzZSwgaW4gc29tZSBjYXNlcywgdGhlIGNvbnN1bWVyIG1heVxuICAgIC8vIG5vdCBoYXZlIGFjY2VzcyB0byBhIFF1ZXJ5TGlzdCBvZiB0aGUgaXRlbXMgdGhleSB3YW50IHRvIG1hbmFnZSAoZS5nLiB3aGVuIHRoZVxuICAgIC8vIGl0ZW1zIGFyZW4ndCBiZWluZyBjb2xsZWN0ZWQgdmlhIGBWaWV3Q2hpbGRyZW5gIG9yIGBDb250ZW50Q2hpbGRyZW5gKS5cbiAgICBpZiAoaXRlbXMgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICAgIHRoaXMuX2l0ZW1zID0gaXRlbXMudG9BcnJheSgpO1xuICAgICAgaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKG5ld0l0ZW1zOiBRdWVyeUxpc3Q8VD4pID0+IHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSBuZXdJdGVtcy50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuX3R5cGVhaGVhZD8uc2V0SXRlbXModGhpcy5faXRlbXMpO1xuICAgICAgICB0aGlzLl91cGRhdGVBY3RpdmVJdGVtSW5kZXgodGhpcy5faXRlbXMpO1xuICAgICAgICB0aGlzLl9pbml0aWFsRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGl0ZW1zKSkge1xuICAgICAgaXRlbXMuc3Vic2NyaWJlKG5ld0l0ZW1zID0+IHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSBuZXdJdGVtcztcbiAgICAgICAgdGhpcy5fdHlwZWFoZWFkPy5zZXRJdGVtcyhuZXdJdGVtcyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUFjdGl2ZUl0ZW1JbmRleChuZXdJdGVtcyk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxGb2N1cygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgICB0aGlzLl9pbml0aWFsRm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5zaG91bGRBY3RpdmF0aW9uRm9sbG93Rm9jdXMgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fc2hvdWxkQWN0aXZhdGlvbkZvbGxvd0ZvY3VzID0gY29uZmlnLnNob3VsZEFjdGl2YXRpb25Gb2xsb3dGb2N1cztcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5ob3Jpem9udGFsT3JpZW50YXRpb24pIHtcbiAgICAgIHRoaXMuX2hvcml6b250YWxPcmllbnRhdGlvbiA9IGNvbmZpZy5ob3Jpem9udGFsT3JpZW50YXRpb247XG4gICAgfVxuICAgIGlmIChjb25maWcuc2tpcFByZWRpY2F0ZSkge1xuICAgICAgdGhpcy5fc2tpcFByZWRpY2F0ZUZuID0gY29uZmlnLnNraXBQcmVkaWNhdGU7XG4gICAgfVxuICAgIGlmIChjb25maWcudHJhY2tCeSkge1xuICAgICAgdGhpcy5fdHJhY2tCeUZuID0gY29uZmlnLnRyYWNrQnk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLnR5cGVBaGVhZERlYm91bmNlSW50ZXJ2YWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9zZXRUeXBlQWhlYWQoY29uZmlnLnR5cGVBaGVhZERlYm91bmNlSW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyBhbnkgdGltZSB0aGUgZm9jdXNlZCBpdGVtIGNoYW5nZXMuICovXG4gIHJlYWRvbmx5IGNoYW5nZSA9IG5ldyBTdWJqZWN0PFQgfCBudWxsPigpO1xuXG4gIC8qKiBDbGVhbnMgdXAgdGhlIGtleSBtYW5hZ2VyLiAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3R5cGVhaGVhZD8uZGVzdHJveSgpO1xuICAgIHRoaXMuY2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIGtleWJvYXJkIGV2ZW50IG9uIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmQgZXZlbnQgdGhhdCByZXByZXNlbnRzIHRoZSB1c2VyIGludGVyYWN0aW9uIHdpdGggdGhlIHRyZWUuXG4gICAqL1xuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgLy8gUmV0dXJuIGVhcmx5IGhlcmUsIGluIG9yZGVyIHRvIGFsbG93IFRhYiB0byBhY3R1YWxseSB0YWIgb3V0IG9mIHRoZSB0cmVlXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5fZm9jdXNOZXh0SXRlbSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMuX2ZvY3VzUHJldmlvdXNJdGVtKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5faG9yaXpvbnRhbE9yaWVudGF0aW9uID09PSAncnRsJ1xuICAgICAgICAgID8gdGhpcy5fY29sbGFwc2VDdXJyZW50SXRlbSgpXG4gICAgICAgICAgOiB0aGlzLl9leHBhbmRDdXJyZW50SXRlbSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgdGhpcy5faG9yaXpvbnRhbE9yaWVudGF0aW9uID09PSAncnRsJ1xuICAgICAgICAgID8gdGhpcy5fZXhwYW5kQ3VycmVudEl0ZW0oKVxuICAgICAgICAgIDogdGhpcy5fY29sbGFwc2VDdXJyZW50SXRlbSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIHRoaXMuX2ZvY3VzRmlyc3RJdGVtKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgICB0aGlzLl9mb2N1c0xhc3RJdGVtKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVDdXJyZW50SXRlbSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhpcy5fZXhwYW5kQWxsSXRlbXNBdEN1cnJlbnRJdGVtTGV2ZWwoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3R5cGVhaGVhZD8uaGFuZGxlS2V5KGV2ZW50KTtcbiAgICAgICAgLy8gUmV0dXJuIGhlcmUsIGluIG9yZGVyIHRvIGF2b2lkIHByZXZlbnRpbmcgdGhlIGRlZmF1bHQgYWN0aW9uIG9mIG5vbi1uYXZpZ2F0aW9uYWxcbiAgICAgICAgLy8ga2V5cyBvciByZXNldHRpbmcgdGhlIGJ1ZmZlciBvZiBwcmVzc2VkIGxldHRlcnMuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZXNldCB0aGUgdHlwZWFoZWFkIHNpbmNlIHRoZSB1c2VyIGhhcyB1c2VkIGEgbmF2aWdhdGlvbmFsIGtleS5cbiAgICB0aGlzLl90eXBlYWhlYWQ/LnJlc2V0KCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKiBJbmRleCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBpdGVtLiAqL1xuICBnZXRBY3RpdmVJdGVtSW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleDtcbiAgfVxuXG4gIC8qKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBpdGVtLiAqL1xuICBnZXRBY3RpdmVJdGVtKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlSXRlbTtcbiAgfVxuXG4gIC8qKiBGb2N1cyB0aGUgZmlyc3QgYXZhaWxhYmxlIGl0ZW0uICovXG4gIHByaXZhdGUgX2ZvY3VzRmlyc3RJdGVtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuX2ZpbmROZXh0QXZhaWxhYmxlSXRlbUluZGV4KC0xKSk7XG4gIH1cblxuICAvKiogRm9jdXMgdGhlIGxhc3QgYXZhaWxhYmxlIGl0ZW0uICovXG4gIHByaXZhdGUgX2ZvY3VzTGFzdEl0ZW0oKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c0l0ZW0odGhpcy5fZmluZFByZXZpb3VzQXZhaWxhYmxlSXRlbUluZGV4KHRoaXMuX2l0ZW1zLmxlbmd0aCkpO1xuICB9XG5cbiAgLyoqIEZvY3VzIHRoZSBuZXh0IGF2YWlsYWJsZSBpdGVtLiAqL1xuICBwcml2YXRlIF9mb2N1c05leHRJdGVtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuX2ZpbmROZXh0QXZhaWxhYmxlSXRlbUluZGV4KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCkpO1xuICB9XG5cbiAgLyoqIEZvY3VzIHRoZSBwcmV2aW91cyBhdmFpbGFibGUgaXRlbS4gKi9cbiAgcHJpdmF0ZSBfZm9jdXNQcmV2aW91c0l0ZW0oKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c0l0ZW0odGhpcy5fZmluZFByZXZpb3VzQXZhaWxhYmxlSXRlbUluZGV4KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBwcm92aWRlZCBpdGVtIGJ5IGluZGV4LlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGZvY3VzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIGZvY3VzaW5nIG9wdGlvbnMuXG4gICAqL1xuICBmb2N1c0l0ZW0oaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0Q2hhbmdlRXZlbnQ/OiBib29sZWFufSk6IHZvaWQ7XG4gIGZvY3VzSXRlbShpdGVtOiBULCBvcHRpb25zPzoge2VtaXRDaGFuZ2VFdmVudD86IGJvb2xlYW59KTogdm9pZDtcbiAgZm9jdXNJdGVtKGl0ZW1PckluZGV4OiBudW1iZXIgfCBULCBvcHRpb25zPzoge2VtaXRDaGFuZ2VFdmVudD86IGJvb2xlYW59KTogdm9pZDtcbiAgZm9jdXNJdGVtKGl0ZW1PckluZGV4OiBudW1iZXIgfCBULCBvcHRpb25zOiB7ZW1pdENoYW5nZUV2ZW50PzogYm9vbGVhbn0gPSB7fSkge1xuICAgIC8vIFNldCBkZWZhdWx0IG9wdGlvbnNcbiAgICBvcHRpb25zLmVtaXRDaGFuZ2VFdmVudCA/Pz0gdHJ1ZTtcblxuICAgIGxldCBpbmRleCA9XG4gICAgICB0eXBlb2YgaXRlbU9ySW5kZXggPT09ICdudW1iZXInXG4gICAgICAgID8gaXRlbU9ySW5kZXhcbiAgICAgICAgOiB0aGlzLl9pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiB0aGlzLl90cmFja0J5Rm4oaXRlbSkgPT09IHRoaXMuX3RyYWNrQnlGbihpdGVtT3JJbmRleCkpO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5faXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9pdGVtc1tpbmRleF07XG5cbiAgICAvLyBJZiB3ZSdyZSBqdXN0IHNldHRpbmcgdGhlIHNhbWUgaXRlbSwgZG9uJ3QgcmUtY2FsbCBhY3RpdmF0ZSBvciBmb2N1c1xuICAgIGlmIChcbiAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gIT09IG51bGwgJiZcbiAgICAgIHRoaXMuX3RyYWNrQnlGbihhY3RpdmVJdGVtKSA9PT0gdGhpcy5fdHJhY2tCeUZuKHRoaXMuX2FjdGl2ZUl0ZW0pXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNBY3RpdmVJdGVtID0gdGhpcy5fYWN0aXZlSXRlbTtcbiAgICB0aGlzLl9hY3RpdmVJdGVtID0gYWN0aXZlSXRlbSA/PyBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgIHRoaXMuX3R5cGVhaGVhZD8uc2V0Q3VycmVudFNlbGVjdGVkSXRlbUluZGV4KGluZGV4KTtcblxuICAgIHRoaXMuX2FjdGl2ZUl0ZW0/LmZvY3VzKCk7XG4gICAgcHJldmlvdXNBY3RpdmVJdGVtPy51bmZvY3VzKCk7XG5cbiAgICBpZiAob3B0aW9ucy5lbWl0Q2hhbmdlRXZlbnQpIHtcbiAgICAgIHRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Nob3VsZEFjdGl2YXRpb25Gb2xsb3dGb2N1cykge1xuICAgICAgdGhpcy5fYWN0aXZhdGVDdXJyZW50SXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUFjdGl2ZUl0ZW1JbmRleChuZXdJdGVtczogVFtdKSB7XG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2FjdGl2ZUl0ZW07XG4gICAgaWYgKCFhY3RpdmVJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3SW5kZXggPSBuZXdJdGVtcy5maW5kSW5kZXgoXG4gICAgICBpdGVtID0+IHRoaXMuX3RyYWNrQnlGbihpdGVtKSA9PT0gdGhpcy5fdHJhY2tCeUZuKGFjdGl2ZUl0ZW0pLFxuICAgICk7XG5cbiAgICBpZiAobmV3SW5kZXggPiAtMSAmJiBuZXdJbmRleCAhPT0gdGhpcy5fYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICB0aGlzLl9hY3RpdmVJdGVtSW5kZXggPSBuZXdJbmRleDtcbiAgICAgIHRoaXMuX3R5cGVhaGVhZD8uc2V0Q3VycmVudFNlbGVjdGVkSXRlbUluZGV4KG5ld0luZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRUeXBlQWhlYWQoZGVib3VuY2VJbnRlcnZhbDogbnVtYmVyIHwgYm9vbGVhbikge1xuICAgIHRoaXMuX3R5cGVhaGVhZCA9IG5ldyBUeXBlYWhlYWQodGhpcy5faXRlbXMsIHtcbiAgICAgIGRlYm91bmNlSW50ZXJ2YWw6IHR5cGVvZiBkZWJvdW5jZUludGVydmFsID09PSAnbnVtYmVyJyA/IGRlYm91bmNlSW50ZXJ2YWwgOiB1bmRlZmluZWQsXG4gICAgICBza2lwUHJlZGljYXRlOiBpdGVtID0+IHRoaXMuX3NraXBQcmVkaWNhdGVGbihpdGVtKSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbiA9IHRoaXMuX3R5cGVhaGVhZC5zZWxlY3RlZEl0ZW0uc3Vic2NyaWJlKGl0ZW0gPT4ge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kTmV4dEF2YWlsYWJsZUl0ZW1JbmRleChzdGFydGluZ0luZGV4OiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRpbmdJbmRleCArIDE7IGkgPCB0aGlzLl9pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLl9za2lwUHJlZGljYXRlRm4odGhpcy5faXRlbXNbaV0pKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhcnRpbmdJbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRQcmV2aW91c0F2YWlsYWJsZUl0ZW1JbmRleChzdGFydGluZ0luZGV4OiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRpbmdJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoIXRoaXMuX3NraXBQcmVkaWNhdGVGbih0aGlzLl9pdGVtc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGFydGluZ0luZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBpdGVtIGlzIGFscmVhZHkgZXhwYW5kZWQsIHdlIGNvbGxhcHNlIHRoZSBpdGVtLiBPdGhlcndpc2UsIHdlIHdpbGwgZm9jdXMgdGhlIHBhcmVudC5cbiAgICovXG4gIHByaXZhdGUgX2NvbGxhcHNlQ3VycmVudEl0ZW0oKSB7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmVJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzQ3VycmVudEl0ZW1FeHBhbmRlZCgpKSB7XG4gICAgICB0aGlzLl9hY3RpdmVJdGVtLmNvbGxhcHNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2FjdGl2ZUl0ZW0uZ2V0UGFyZW50KCk7XG4gICAgICBpZiAoIXBhcmVudCB8fCB0aGlzLl9za2lwUHJlZGljYXRlRm4ocGFyZW50IGFzIFQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9jdXNJdGVtKHBhcmVudCBhcyBUKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGl0ZW0gaXMgYWxyZWFkeSBjb2xsYXBzZWQsIHdlIGV4cGFuZCB0aGUgaXRlbS4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGZvY3VzIHRoZSBmaXJzdCBjaGlsZC5cbiAgICovXG4gIHByaXZhdGUgX2V4cGFuZEN1cnJlbnRJdGVtKCkge1xuICAgIGlmICghdGhpcy5fYWN0aXZlSXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faXNDdXJyZW50SXRlbUV4cGFuZGVkKCkpIHtcbiAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0uZXhwYW5kKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZXJjZU9ic2VydmFibGUodGhpcy5fYWN0aXZlSXRlbS5nZXRDaGlsZHJlbigpKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKGNoaWxkcmVuID0+IHtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gY2hpbGRyZW4uZmluZChjaGlsZCA9PiAhdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGNoaWxkIGFzIFQpKTtcbiAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oZmlyc3RDaGlsZCBhcyBUKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNDdXJyZW50SXRlbUV4cGFuZGVkKCkge1xuICAgIGlmICghdGhpcy5fYWN0aXZlSXRlbSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX2FjdGl2ZUl0ZW0uaXNFeHBhbmRlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICA/IHRoaXMuX2FjdGl2ZUl0ZW0uaXNFeHBhbmRlZFxuICAgICAgOiB0aGlzLl9hY3RpdmVJdGVtLmlzRXhwYW5kZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzSXRlbURpc2FibGVkKGl0ZW06IFRyZWVLZXlNYW5hZ2VySXRlbSkge1xuICAgIHJldHVybiB0eXBlb2YgaXRlbS5pc0Rpc2FibGVkID09PSAnYm9vbGVhbicgPyBpdGVtLmlzRGlzYWJsZWQgOiBpdGVtLmlzRGlzYWJsZWQ/LigpO1xuICB9XG5cbiAgLyoqIEZvciBhbGwgaXRlbXMgdGhhdCBhcmUgdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIGN1cnJlbnQgaXRlbSwgd2UgZXhwYW5kIHRob3NlIGl0ZW1zLiAqL1xuICBwcml2YXRlIF9leHBhbmRBbGxJdGVtc0F0Q3VycmVudEl0ZW1MZXZlbCgpIHtcbiAgICBpZiAoIXRoaXMuX2FjdGl2ZUl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9hY3RpdmVJdGVtLmdldFBhcmVudCgpO1xuICAgIGxldCBpdGVtc1RvRXhwYW5kO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICBpdGVtc1RvRXhwYW5kID0gb2JzZXJ2YWJsZU9mKHRoaXMuX2l0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uZ2V0UGFyZW50KCkgPT09IG51bGwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNUb0V4cGFuZCA9IGNvZXJjZU9ic2VydmFibGUocGFyZW50LmdldENoaWxkcmVuKCkpO1xuICAgIH1cblxuICAgIGl0ZW1zVG9FeHBhbmQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGl0ZW0uZXhwYW5kKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmF0ZUN1cnJlbnRJdGVtKCkge1xuICAgIHRoaXMuX2FjdGl2ZUl0ZW0/LmFjdGl2YXRlKCk7XG4gIH1cbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBUUkVFX0tFWV9NQU5BR0VSX0ZBQ1RPUlk8VCBleHRlbmRzIFRyZWVLZXlNYW5hZ2VySXRlbT4oKTogVHJlZUtleU1hbmFnZXJGYWN0b3J5PFQ+IHtcbiAgcmV0dXJuIChpdGVtcywgb3B0aW9ucykgPT4gbmV3IFRyZWVLZXlNYW5hZ2VyKGl0ZW1zLCBvcHRpb25zKTtcbn1cblxuLyoqIEluamVjdGlvbiB0b2tlbiB0aGF0IGRldGVybWluZXMgdGhlIGtleSBtYW5hZ2VyIHRvIHVzZS4gKi9cbmV4cG9ydCBjb25zdCBUUkVFX0tFWV9NQU5BR0VSID0gbmV3IEluamVjdGlvblRva2VuPFRyZWVLZXlNYW5hZ2VyRmFjdG9yeTxhbnk+PigndHJlZS1rZXktbWFuYWdlcicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiBUUkVFX0tFWV9NQU5BR0VSX0ZBQ1RPUlksXG59KTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBUUkVFX0tFWV9NQU5BR0VSX0ZBQ1RPUllfUFJPVklERVIgPSB7XG4gIHByb3ZpZGU6IFRSRUVfS0VZX01BTkFHRVIsXG4gIHVzZUZhY3Rvcnk6IFRSRUVfS0VZX01BTkFHRVJfRkFDVE9SWSxcbn07XG4iXX0=
@@ -1,91 +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 { A, NINE, Z, ZERO } from '@angular/cdk/keycodes';
9
- import { Subject } from 'rxjs';
10
- import { debounceTime, filter, map, tap } from 'rxjs/operators';
11
- const DEFAULT_TYPEAHEAD_DEBOUNCE_INTERVAL_MS = 200;
12
- /**
13
- * Selects items based on keyboard inputs. Implements the typeahead functionality of
14
- * `role="listbox"` or `role="tree"` and other related roles.
15
- */
16
- export class Typeahead {
17
- constructor(initialItems, config) {
18
- this._letterKeyStream = new Subject();
19
- this._items = [];
20
- this._selectedItemIndex = -1;
21
- /** Buffer for the letters that the user has pressed */
22
- this._pressedLetters = [];
23
- this._selectedItem = new Subject();
24
- this.selectedItem = this._selectedItem;
25
- const typeAheadInterval = typeof config?.debounceInterval === 'number'
26
- ? config.debounceInterval
27
- : DEFAULT_TYPEAHEAD_DEBOUNCE_INTERVAL_MS;
28
- if (config?.skipPredicate) {
29
- this._skipPredicateFn = config.skipPredicate;
30
- }
31
- if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
32
- initialItems.length &&
33
- initialItems.some(item => typeof item.getLabel !== 'function')) {
34
- throw new Error('KeyManager items in typeahead mode must implement the `getLabel` method.');
35
- }
36
- this.setItems(initialItems);
37
- this._setupKeyHandler(typeAheadInterval);
38
- }
39
- destroy() {
40
- this._pressedLetters = [];
41
- this._letterKeyStream.complete();
42
- this._selectedItem.complete();
43
- }
44
- setCurrentSelectedItemIndex(index) {
45
- this._selectedItemIndex = index;
46
- }
47
- setItems(items) {
48
- this._items = items;
49
- }
50
- handleKey(event) {
51
- const keyCode = event.keyCode;
52
- // Attempt to use the `event.key` which also maps it to the user's keyboard language,
53
- // otherwise fall back to resolving alphanumeric characters via the keyCode.
54
- if (event.key && event.key.length === 1) {
55
- this._letterKeyStream.next(event.key.toLocaleUpperCase());
56
- }
57
- else if ((keyCode >= A && keyCode <= Z) || (keyCode >= ZERO && keyCode <= NINE)) {
58
- this._letterKeyStream.next(String.fromCharCode(keyCode));
59
- }
60
- }
61
- /** Gets whether the user is currently typing into the manager using the typeahead feature. */
62
- isTyping() {
63
- return this._pressedLetters.length > 0;
64
- }
65
- /** Resets the currently stored sequence of typed letters. */
66
- reset() {
67
- this._pressedLetters = [];
68
- }
69
- _setupKeyHandler(typeAheadInterval) {
70
- // Debounce the presses of non-navigational keys, collect the ones that correspond to letters
71
- // and convert those letters back into a string. Afterwards find the first item that starts
72
- // with that string and select it.
73
- this._letterKeyStream
74
- .pipe(tap(letter => this._pressedLetters.push(letter)), debounceTime(typeAheadInterval), filter(() => this._pressedLetters.length > 0), map(() => this._pressedLetters.join('').toLocaleUpperCase()))
75
- .subscribe(inputString => {
76
- // Start at 1 because we want to start searching at the item immediately
77
- // following the current active item.
78
- for (let i = 1; i < this._items.length + 1; i++) {
79
- const index = (this._selectedItemIndex + i) % this._items.length;
80
- const item = this._items[index];
81
- if (!this._skipPredicateFn?.(item) &&
82
- item.getLabel?.().toLocaleUpperCase().trim().indexOf(inputString) === 0) {
83
- this._selectedItem.next(item);
84
- break;
85
- }
86
- }
87
- this._pressedLetters = [];
88
- });
89
- }
90
- }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9hMTF5L2tleS1tYW5hZ2VyL3R5cGVhaGVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFDLE9BQU8sRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsTUFBTSxzQ0FBc0MsR0FBRyxHQUFHLENBQUM7QUFXbkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFhcEIsWUFBWSxZQUEwQixFQUFFLE1BQTJCO1FBWmxELHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDbEQsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFDMUIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFaEMsdURBQXVEO1FBQy9DLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBSXRCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUssQ0FBQztRQUN6QyxpQkFBWSxHQUFrQixJQUFJLENBQUMsYUFBYSxDQUFDO1FBR3hELE1BQU0saUJBQWlCLEdBQ3JCLE9BQU8sTUFBTSxFQUFFLGdCQUFnQixLQUFLLFFBQVE7WUFDMUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekIsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDO1FBRTdDLElBQUksTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQy9DLENBQUM7UUFFRCxJQUNFLENBQUMsT0FBTyxTQUFTLEtBQUssV0FB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LE1BQU0sQ0FBQztnQkFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFaEMsSUFDRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUN2RSxDQUFDO29CQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBLCBOSU5FLCBaLCBaRVJPfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtTdWJqZWN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IERFRkFVTFRfVFlQRUFIRUFEX0RFQk9VTkNFX0lOVEVSVkFMX01TID0gMjAwO1xuXG5pbnRlcmZhY2UgVHlwZWFoZWFkSXRlbSB7XG4gIGdldExhYmVsPygpOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUeXBlYWhlYWRDb25maWc8VD4ge1xuICBkZWJvdW5jZUludGVydmFsPzogbnVtYmVyO1xuICBza2lwUHJlZGljYXRlPzogKGl0ZW06IFQpID0+IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2VsZWN0cyBpdGVtcyBiYXNlZCBvbiBrZXlib2FyZCBpbnB1dHMuIEltcGxlbWVudHMgdGhlIHR5cGVhaGVhZCBmdW5jdGlvbmFsaXR5IG9mXG4gKiBgcm9sZT1cImxpc3Rib3hcImAgb3IgYHJvbGU9XCJ0cmVlXCJgIGFuZCBvdGhlciByZWxhdGVkIHJvbGVzLlxuICovXG5leHBvcnQgY2xhc3MgVHlwZWFoZWFkPFQgZXh0ZW5kcyBUeXBlYWhlYWRJdGVtPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xldHRlcktleVN0cmVhbSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfaXRlbXM6IHJlYWRvbmx5IFRbXSA9IFtdO1xuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1JbmRleCA9IC0xO1xuXG4gIC8qKiBCdWZmZXIgZm9yIHRoZSBsZXR0ZXJzIHRoYXQgdGhlIHVzZXIgaGFzIHByZXNzZWQgKi9cbiAgcHJpdmF0ZSBfcHJlc3NlZExldHRlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBfc2tpcFByZWRpY2F0ZUZuPzogKGl0ZW06IFQpID0+IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRJdGVtID0gbmV3IFN1YmplY3Q8VD4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtOiBPYnNlcnZhYmxlPFQ+ID0gdGhpcy5fc2VsZWN0ZWRJdGVtO1xuXG4gIGNvbnN0cnVjdG9yKGluaXRpYWxJdGVtczogcmVhZG9ubHkgVFtdLCBjb25maWc/OiBUeXBlYWhlYWRDb25maWc8VD4pIHtcbiAgICBjb25zdCB0eXBlQWhlYWRJbnRlcnZhbCA9XG4gICAgICB0eXBlb2YgY29uZmlnPy5kZWJvdW5jZUludGVydmFsID09PSAnbnVtYmVyJ1xuICAgICAgICA/IGNvbmZpZy5kZWJvdW5jZUludGVydmFsXG4gICAgICAgIDogREVGQVVMVF9UWVBFQUhFQURfREVCT1VOQ0VfSU5URVJWQUxfTVM7XG5cbiAgICBpZiAoY29uZmlnPy5za2lwUHJlZGljYXRlKSB7XG4gICAgICB0aGlzLl9za2lwUHJlZGljYXRlRm4gPSBjb25maWcuc2tpcFByZWRpY2F0ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJlxuICAgICAgaW5pdGlhbEl0ZW1zLmxlbmd0aCAmJlxuICAgICAgaW5pdGlhbEl0ZW1zLnNvbWUoaXRlbSA9PiB0eXBlb2YgaXRlbS5nZXRMYWJlbCAhPT0gJ2Z1bmN0aW9uJylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignS2V5TWFuYWdlciBpdGVtcyBpbiB0eXBlYWhlYWQgbW9kZSBtdXN0IGltcGxlbWVudCB0aGUgYGdldExhYmVsYCBtZXRob2QuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJdGVtcyhpbml0aWFsSXRlbXMpO1xuICAgIHRoaXMuX3NldHVwS2V5SGFuZGxlcih0eXBlQWhlYWRJbnRlcnZhbCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3ByZXNzZWRMZXR0ZXJzID0gW107XG4gICAgdGhpcy5fbGV0dGVyS2V5U3RyZWFtLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2VsZWN0ZWRJdGVtLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzZXRDdXJyZW50U2VsZWN0ZWRJdGVtSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3NlbGVjdGVkSXRlbUluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBzZXRJdGVtcyhpdGVtczogcmVhZG9ubHkgVFtdKSB7XG4gICAgdGhpcy5faXRlbXMgPSBpdGVtcztcbiAgfVxuXG4gIGhhbmRsZUtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgLy8gQXR0ZW1wdCB0byB1c2UgdGhlIGBldmVudC5rZXlgIHdoaWNoIGFsc28gbWFwcyBpdCB0byB0aGUgdXNlcidzIGtleWJvYXJkIGxhbmd1YWdlLFxuICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gcmVzb2x2aW5nIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHZpYSB0aGUga2V5Q29kZS5cbiAgICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuX2xldHRlcktleVN0cmVhbS5uZXh0KGV2ZW50LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTtcbiAgICB9IGVsc2UgaWYgKChrZXlDb2RlID49IEEgJiYga2V5Q29kZSA8PSBaKSB8fCAoa2V5Q29kZSA+PSBaRVJPICYmIGtleUNvZGUgPD0gTklORSkpIHtcbiAgICAgIHRoaXMuX2xldHRlcktleVN0cmVhbS5uZXh0KFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5Q29kZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXRzIHdoZXRoZXIgdGhlIHVzZXIgaXMgY3VycmVudGx5IHR5cGluZyBpbnRvIHRoZSBtYW5hZ2VyIHVzaW5nIHRoZSB0eXBlYWhlYWQgZmVhdHVyZS4gKi9cbiAgaXNUeXBpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogUmVzZXRzIHRoZSBjdXJyZW50bHkgc3RvcmVkIHNlcXVlbmNlIG9mIHR5cGVkIGxldHRlcnMuICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ByZXNzZWRMZXR0ZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEtleUhhbmRsZXIodHlwZUFoZWFkSW50ZXJ2YWw6IG51bWJlcikge1xuICAgIC8vIERlYm91bmNlIHRoZSBwcmVzc2VzIG9mIG5vbi1uYXZpZ2F0aW9uYWwga2V5cywgY29sbGVjdCB0aGUgb25lcyB0aGF0IGNvcnJlc3BvbmQgdG8gbGV0dGVyc1xuICAgIC8vIGFuZCBjb252ZXJ0IHRob3NlIGxldHRlcnMgYmFjayBpbnRvIGEgc3RyaW5nLiBBZnRlcndhcmRzIGZpbmQgdGhlIGZpcnN0IGl0ZW0gdGhhdCBzdGFydHNcbiAgICAvLyB3aXRoIHRoYXQgc3RyaW5nIGFuZCBzZWxlY3QgaXQuXG4gICAgdGhpcy5fbGV0dGVyS2V5U3RyZWFtXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKGxldHRlciA9PiB0aGlzLl9wcmVzc2VkTGV0dGVycy5wdXNoKGxldHRlcikpLFxuICAgICAgICBkZWJvdW5jZVRpbWUodHlwZUFoZWFkSW50ZXJ2YWwpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5fcHJlc3NlZExldHRlcnMubGVuZ3RoID4gMCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLl9wcmVzc2VkTGV0dGVycy5qb2luKCcnKS50b0xvY2FsZVVwcGVyQ2FzZSgpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoaW5wdXRTdHJpbmcgPT4ge1xuICAgICAgICAvLyBTdGFydCBhdCAxIGJlY2F1c2Ugd2Ugd2FudCB0byBzdGFydCBzZWFyY2hpbmcgYXQgdGhlIGl0ZW0gaW1tZWRpYXRlbHlcbiAgICAgICAgLy8gZm9sbG93aW5nIHRoZSBjdXJyZW50IGFjdGl2ZSBpdGVtLlxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuX2l0ZW1zLmxlbmd0aCArIDE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gKHRoaXMuX3NlbGVjdGVkSXRlbUluZGV4ICsgaSkgJSB0aGlzLl9pdGVtcy5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2l0ZW1zW2luZGV4XTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLl9za2lwUHJlZGljYXRlRm4/LihpdGVtKSAmJlxuICAgICAgICAgICAgaXRlbS5nZXRMYWJlbD8uKCkudG9Mb2NhbGVVcHBlckNhc2UoKS50cmltKCkuaW5kZXhPZihpbnB1dFN0cmluZykgPT09IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbS5uZXh0KGl0ZW0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJlc3NlZExldHRlcnMgPSBbXTtcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,19 +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 { InjectionToken } from '@angular/core';
9
- export const LIVE_ANNOUNCER_ELEMENT_TOKEN = new InjectionToken('liveAnnouncerElement', {
10
- providedIn: 'root',
11
- factory: LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY,
12
- });
13
- /** @docs-private */
14
- export function LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY() {
15
- return null;
16
- }
17
- /** Injection token that can be used to configure the default options for the LiveAnnouncer. */
18
- export const LIVE_ANNOUNCER_DEFAULT_OPTIONS = new InjectionToken('LIVE_ANNOUNCER_DEFAULT_OPTIONS');
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1hbm5vdW5jZXItdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9hMTF5L2xpdmUtYW5ub3VuY2VyL2xpdmUtYW5ub3VuY2VyLXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBUTdDLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLElBQUksY0FBYyxDQUM1RCxzQkFBc0IsRUFDdEI7SUFDRSxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsb0NBQW9DO0NBQzlDLENBQ0YsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixNQUFNLFVBQVUsb0NBQW9DO0lBQ2xELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQVdELCtGQUErRjtBQUMvRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLGNBQWMsQ0FDOUQsZ0NBQWdDLENBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIFRoZSB0b2tlbnMgZm9yIHRoZSBsaXZlIGFubm91bmNlciBhcmUgZGVmaW5lZCBpbiBhIHNlcGFyYXRlIGZpbGUgZnJvbSBMaXZlQW5ub3VuY2VyXG4vLyBhcyBhIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzIyNTU5XG5cbi8qKiBQb3NzaWJsZSBwb2xpdGVuZXNzIGxldmVscy4gKi9cbmV4cG9ydCB0eXBlIEFyaWFMaXZlUG9saXRlbmVzcyA9ICdvZmYnIHwgJ3BvbGl0ZScgfCAnYXNzZXJ0aXZlJztcblxuZXhwb3J0IGNvbnN0IExJVkVfQU5OT1VOQ0VSX0VMRU1FTlRfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48SFRNTEVsZW1lbnQgfCBudWxsPihcbiAgJ2xpdmVBbm5vdW5jZXJFbGVtZW50JyxcbiAge1xuICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICBmYWN0b3J5OiBMSVZFX0FOTk9VTkNFUl9FTEVNRU5UX1RPS0VOX0ZBQ1RPUlksXG4gIH0sXG4pO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIExJVkVfQU5OT1VOQ0VSX0VMRU1FTlRfVE9LRU5fRkFDVE9SWSgpOiBudWxsIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBPYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIExpdmVBbm5vdW5jZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIExpdmVBbm5vdW5jZXJEZWZhdWx0T3B0aW9ucyB7XG4gIC8qKiBEZWZhdWx0IHBvbGl0ZW5lc3MgZm9yIHRoZSBhbm5vdW5jZW1lbnRzLiAqL1xuICBwb2xpdGVuZXNzPzogQXJpYUxpdmVQb2xpdGVuZXNzO1xuXG4gIC8qKiBEZWZhdWx0IGR1cmF0aW9uIGZvciB0aGUgYW5ub3VuY2VtZW50IG1lc3NhZ2VzLiAqL1xuICBkdXJhdGlvbj86IG51bWJlcjtcbn1cblxuLyoqIEluamVjdGlvbiB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBvcHRpb25zIGZvciB0aGUgTGl2ZUFubm91bmNlci4gKi9cbmV4cG9ydCBjb25zdCBMSVZFX0FOTk9VTkNFUl9ERUZBVUxUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TGl2ZUFubm91bmNlckRlZmF1bHRPcHRpb25zPihcbiAgJ0xJVkVfQU5OT1VOQ0VSX0RFRkFVTFRfT1BUSU9OUycsXG4pO1xuIl19