@angular/cdk 19.0.0-next.0 → 19.0.0-next.10

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 (580) hide show
  1. package/a11y/_index.scss +12 -54
  2. package/a11y/index.d.ts +24 -38
  3. package/accordion/index.d.ts +5 -4
  4. package/bidi/index.d.ts +2 -2
  5. package/clipboard/index.d.ts +3 -4
  6. package/dialog/index.d.ts +12 -12
  7. package/drag-drop/index.d.ts +17 -37
  8. package/fesm2022/a11y.mjs +134 -181
  9. package/fesm2022/a11y.mjs.map +1 -1
  10. package/fesm2022/accordion.mjs +20 -27
  11. package/fesm2022/accordion.mjs.map +1 -1
  12. package/fesm2022/bidi.mjs +14 -19
  13. package/fesm2022/bidi.mjs.map +1 -1
  14. package/fesm2022/cdk.mjs +1 -1
  15. package/fesm2022/cdk.mjs.map +1 -1
  16. package/fesm2022/clipboard.mjs +19 -27
  17. package/fesm2022/clipboard.mjs.map +1 -1
  18. package/fesm2022/coercion/private.mjs.map +1 -1
  19. package/fesm2022/coercion.mjs.map +1 -1
  20. package/fesm2022/collections.mjs +3 -3
  21. package/fesm2022/collections.mjs.map +1 -1
  22. package/fesm2022/dialog.mjs +36 -56
  23. package/fesm2022/dialog.mjs.map +1 -1
  24. package/fesm2022/drag-drop.mjs +107 -181
  25. package/fesm2022/drag-drop.mjs.map +1 -1
  26. package/fesm2022/keycodes.mjs.map +1 -1
  27. package/fesm2022/layout.mjs +21 -26
  28. package/fesm2022/layout.mjs.map +1 -1
  29. package/fesm2022/listbox.mjs +17 -13
  30. package/fesm2022/listbox.mjs.map +1 -1
  31. package/fesm2022/menu.mjs +49 -61
  32. package/fesm2022/menu.mjs.map +1 -1
  33. package/fesm2022/observers/private.mjs +3 -3
  34. package/fesm2022/observers/private.mjs.map +1 -1
  35. package/fesm2022/observers.mjs +21 -22
  36. package/fesm2022/observers.mjs.map +1 -1
  37. package/fesm2022/overlay.mjs +120 -149
  38. package/fesm2022/overlay.mjs.map +1 -1
  39. package/fesm2022/platform.mjs +11 -14
  40. package/fesm2022/platform.mjs.map +1 -1
  41. package/fesm2022/portal.mjs +60 -63
  42. package/fesm2022/portal.mjs.map +1 -1
  43. package/fesm2022/private.mjs +65 -0
  44. package/fesm2022/private.mjs.map +1 -0
  45. package/fesm2022/scrolling.mjs +90 -132
  46. package/fesm2022/scrolling.mjs.map +1 -1
  47. package/fesm2022/stepper.mjs +69 -63
  48. package/fesm2022/stepper.mjs.map +1 -1
  49. package/fesm2022/table.mjs +171 -250
  50. package/fesm2022/table.mjs.map +1 -1
  51. package/fesm2022/testing/selenium-webdriver.mjs.map +1 -1
  52. package/fesm2022/testing/testbed.mjs +3 -2
  53. package/fesm2022/testing/testbed.mjs.map +1 -1
  54. package/fesm2022/testing.mjs.map +1 -1
  55. package/fesm2022/text-field.mjs +46 -40
  56. package/fesm2022/text-field.mjs.map +1 -1
  57. package/fesm2022/tree.mjs +90 -80
  58. package/fesm2022/tree.mjs.map +1 -1
  59. package/layout/index.d.ts +5 -7
  60. package/observers/index.d.ts +2 -2
  61. package/overlay/_index.scss +56 -21
  62. package/overlay/index.d.ts +24 -36
  63. package/overlay-prebuilt.css +1 -1
  64. package/package.json +5 -55
  65. package/platform/index.d.ts +2 -1
  66. package/portal/index.d.ts +22 -19
  67. package/private/index.d.ts +30 -0
  68. package/schematics/index.d.ts +1 -1
  69. package/schematics/index.js +2 -2
  70. package/schematics/index.mjs +2 -2
  71. package/schematics/ng-add/index.d.ts +1 -1
  72. package/schematics/ng-add/index.js +3 -3
  73. package/schematics/ng-add/index.mjs +3 -3
  74. package/schematics/ng-add/package-config.d.ts +1 -1
  75. package/schematics/ng-add/package-config.js +2 -2
  76. package/schematics/ng-add/package-config.mjs +2 -2
  77. package/schematics/ng-add/schema.d.ts +1 -1
  78. package/schematics/ng-add/schema.js +2 -2
  79. package/schematics/ng-add/schema.mjs +2 -2
  80. package/schematics/ng-generate/drag-drop/index.d.ts +1 -1
  81. package/schematics/ng-generate/drag-drop/index.js +2 -2
  82. package/schematics/ng-generate/drag-drop/index.mjs +2 -2
  83. package/schematics/ng-generate/drag-drop/schema.d.ts +1 -1
  84. package/schematics/ng-generate/drag-drop/schema.js +2 -2
  85. package/schematics/ng-generate/drag-drop/schema.mjs +2 -2
  86. package/schematics/ng-update/data/attribute-selectors.d.ts +1 -1
  87. package/schematics/ng-update/data/attribute-selectors.js +2 -2
  88. package/schematics/ng-update/data/attribute-selectors.mjs +2 -2
  89. package/schematics/ng-update/data/class-names.d.ts +1 -1
  90. package/schematics/ng-update/data/class-names.js +2 -2
  91. package/schematics/ng-update/data/class-names.mjs +2 -2
  92. package/schematics/ng-update/data/constructor-checks.d.ts +1 -1
  93. package/schematics/ng-update/data/constructor-checks.js +2 -2
  94. package/schematics/ng-update/data/constructor-checks.mjs +2 -2
  95. package/schematics/ng-update/data/css-selectors.d.ts +1 -1
  96. package/schematics/ng-update/data/css-selectors.js +2 -2
  97. package/schematics/ng-update/data/css-selectors.mjs +2 -2
  98. package/schematics/ng-update/data/css-tokens.d.ts +1 -1
  99. package/schematics/ng-update/data/css-tokens.js +2 -2
  100. package/schematics/ng-update/data/css-tokens.mjs +2 -2
  101. package/schematics/ng-update/data/element-selectors.d.ts +1 -1
  102. package/schematics/ng-update/data/element-selectors.js +2 -2
  103. package/schematics/ng-update/data/element-selectors.mjs +2 -2
  104. package/schematics/ng-update/data/index.d.ts +1 -1
  105. package/schematics/ng-update/data/index.js +2 -2
  106. package/schematics/ng-update/data/index.mjs +2 -2
  107. package/schematics/ng-update/data/input-names.d.ts +1 -1
  108. package/schematics/ng-update/data/input-names.js +2 -2
  109. package/schematics/ng-update/data/input-names.mjs +2 -2
  110. package/schematics/ng-update/data/method-call-checks.d.ts +1 -1
  111. package/schematics/ng-update/data/method-call-checks.js +2 -2
  112. package/schematics/ng-update/data/method-call-checks.mjs +2 -2
  113. package/schematics/ng-update/data/output-names.d.ts +1 -1
  114. package/schematics/ng-update/data/output-names.js +2 -2
  115. package/schematics/ng-update/data/output-names.mjs +2 -2
  116. package/schematics/ng-update/data/property-names.d.ts +1 -1
  117. package/schematics/ng-update/data/property-names.js +2 -2
  118. package/schematics/ng-update/data/property-names.mjs +2 -2
  119. package/schematics/ng-update/data/symbol-removal.d.ts +1 -1
  120. package/schematics/ng-update/data/symbol-removal.js +2 -2
  121. package/schematics/ng-update/data/symbol-removal.mjs +2 -2
  122. package/schematics/ng-update/devkit-file-system.d.ts +1 -1
  123. package/schematics/ng-update/devkit-file-system.js +2 -2
  124. package/schematics/ng-update/devkit-file-system.mjs +2 -2
  125. package/schematics/ng-update/devkit-migration-rule.d.ts +1 -1
  126. package/schematics/ng-update/devkit-migration-rule.js +2 -2
  127. package/schematics/ng-update/devkit-migration-rule.mjs +2 -2
  128. package/schematics/ng-update/devkit-migration.d.ts +1 -1
  129. package/schematics/ng-update/devkit-migration.js +2 -2
  130. package/schematics/ng-update/devkit-migration.mjs +2 -2
  131. package/schematics/ng-update/find-stylesheets.d.ts +1 -1
  132. package/schematics/ng-update/find-stylesheets.js +2 -2
  133. package/schematics/ng-update/find-stylesheets.mjs +2 -2
  134. package/schematics/ng-update/html-parsing/angular.d.ts +1 -1
  135. package/schematics/ng-update/html-parsing/angular.js +2 -2
  136. package/schematics/ng-update/html-parsing/angular.mjs +2 -2
  137. package/schematics/ng-update/html-parsing/elements.d.ts +1 -1
  138. package/schematics/ng-update/html-parsing/elements.js +2 -2
  139. package/schematics/ng-update/html-parsing/elements.mjs +2 -2
  140. package/schematics/ng-update/index.d.ts +1 -1
  141. package/schematics/ng-update/index.js +2 -2
  142. package/schematics/ng-update/index.mjs +2 -2
  143. package/schematics/ng-update/migrations/attribute-selectors.d.ts +1 -1
  144. package/schematics/ng-update/migrations/attribute-selectors.js +2 -2
  145. package/schematics/ng-update/migrations/attribute-selectors.mjs +2 -2
  146. package/schematics/ng-update/migrations/class-inheritance.d.ts +1 -1
  147. package/schematics/ng-update/migrations/class-inheritance.js +2 -2
  148. package/schematics/ng-update/migrations/class-inheritance.mjs +2 -2
  149. package/schematics/ng-update/migrations/class-names.d.ts +1 -1
  150. package/schematics/ng-update/migrations/class-names.js +2 -2
  151. package/schematics/ng-update/migrations/class-names.mjs +2 -2
  152. package/schematics/ng-update/migrations/constructor-signature.d.ts +1 -1
  153. package/schematics/ng-update/migrations/constructor-signature.js +2 -2
  154. package/schematics/ng-update/migrations/constructor-signature.mjs +2 -2
  155. package/schematics/ng-update/migrations/css-selectors.d.ts +1 -1
  156. package/schematics/ng-update/migrations/css-selectors.js +2 -2
  157. package/schematics/ng-update/migrations/css-selectors.mjs +2 -2
  158. package/schematics/ng-update/migrations/css-tokens.d.ts +1 -1
  159. package/schematics/ng-update/migrations/css-tokens.js +2 -2
  160. package/schematics/ng-update/migrations/css-tokens.mjs +2 -2
  161. package/schematics/ng-update/migrations/element-selectors.d.ts +1 -1
  162. package/schematics/ng-update/migrations/element-selectors.js +2 -2
  163. package/schematics/ng-update/migrations/element-selectors.mjs +2 -2
  164. package/schematics/ng-update/migrations/input-names.d.ts +1 -1
  165. package/schematics/ng-update/migrations/input-names.js +2 -2
  166. package/schematics/ng-update/migrations/input-names.mjs +2 -2
  167. package/schematics/ng-update/migrations/method-call-arguments.d.ts +1 -1
  168. package/schematics/ng-update/migrations/method-call-arguments.js +2 -2
  169. package/schematics/ng-update/migrations/method-call-arguments.mjs +2 -2
  170. package/schematics/ng-update/migrations/misc-template.d.ts +1 -1
  171. package/schematics/ng-update/migrations/misc-template.js +2 -2
  172. package/schematics/ng-update/migrations/misc-template.mjs +2 -2
  173. package/schematics/ng-update/migrations/output-names.d.ts +1 -1
  174. package/schematics/ng-update/migrations/output-names.js +2 -2
  175. package/schematics/ng-update/migrations/output-names.mjs +2 -2
  176. package/schematics/ng-update/migrations/property-names.d.ts +1 -1
  177. package/schematics/ng-update/migrations/property-names.js +2 -2
  178. package/schematics/ng-update/migrations/property-names.mjs +2 -2
  179. package/schematics/ng-update/migrations/symbol-removal.d.ts +1 -1
  180. package/schematics/ng-update/migrations/symbol-removal.js +2 -2
  181. package/schematics/ng-update/migrations/symbol-removal.mjs +2 -2
  182. package/schematics/ng-update/public-api.d.ts +1 -1
  183. package/schematics/ng-update/public-api.js +2 -2
  184. package/schematics/ng-update/public-api.mjs +2 -2
  185. package/schematics/ng-update/typescript/base-types.d.ts +1 -1
  186. package/schematics/ng-update/typescript/base-types.js +2 -2
  187. package/schematics/ng-update/typescript/base-types.mjs +2 -2
  188. package/schematics/ng-update/typescript/imports.d.ts +1 -1
  189. package/schematics/ng-update/typescript/imports.js +2 -2
  190. package/schematics/ng-update/typescript/imports.mjs +2 -2
  191. package/schematics/ng-update/typescript/literal.d.ts +1 -1
  192. package/schematics/ng-update/typescript/literal.js +2 -2
  193. package/schematics/ng-update/typescript/literal.mjs +2 -2
  194. package/schematics/ng-update/typescript/module-specifiers.d.ts +1 -1
  195. package/schematics/ng-update/typescript/module-specifiers.js +2 -2
  196. package/schematics/ng-update/typescript/module-specifiers.mjs +2 -2
  197. package/schematics/ng-update/upgrade-data.d.ts +1 -1
  198. package/schematics/ng-update/upgrade-data.js +2 -2
  199. package/schematics/ng-update/upgrade-data.mjs +2 -2
  200. package/schematics/paths.d.ts +1 -1
  201. package/schematics/paths.js +2 -2
  202. package/schematics/paths.mjs +2 -2
  203. package/schematics/update-tool/component-resource-collector.d.ts +1 -1
  204. package/schematics/update-tool/component-resource-collector.js +2 -2
  205. package/schematics/update-tool/component-resource-collector.mjs +2 -2
  206. package/schematics/update-tool/file-system.d.ts +1 -1
  207. package/schematics/update-tool/file-system.js +2 -2
  208. package/schematics/update-tool/file-system.mjs +2 -2
  209. package/schematics/update-tool/index.d.ts +1 -1
  210. package/schematics/update-tool/index.js +2 -2
  211. package/schematics/update-tool/index.mjs +2 -2
  212. package/schematics/update-tool/logger.d.ts +1 -1
  213. package/schematics/update-tool/logger.js +2 -2
  214. package/schematics/update-tool/logger.mjs +2 -2
  215. package/schematics/update-tool/migration.d.ts +1 -1
  216. package/schematics/update-tool/migration.js +2 -2
  217. package/schematics/update-tool/migration.mjs +2 -2
  218. package/schematics/update-tool/public-api.d.ts +1 -1
  219. package/schematics/update-tool/public-api.js +2 -2
  220. package/schematics/update-tool/public-api.mjs +2 -2
  221. package/schematics/update-tool/target-version.d.ts +1 -1
  222. package/schematics/update-tool/target-version.js +2 -2
  223. package/schematics/update-tool/target-version.mjs +2 -2
  224. package/schematics/update-tool/update-recorder.d.ts +1 -1
  225. package/schematics/update-tool/update-recorder.js +2 -2
  226. package/schematics/update-tool/update-recorder.mjs +2 -2
  227. package/schematics/update-tool/utils/decorators.d.ts +1 -1
  228. package/schematics/update-tool/utils/decorators.js +2 -2
  229. package/schematics/update-tool/utils/decorators.mjs +2 -2
  230. package/schematics/update-tool/utils/diagnostics.d.ts +1 -1
  231. package/schematics/update-tool/utils/diagnostics.js +2 -2
  232. package/schematics/update-tool/utils/diagnostics.mjs +2 -2
  233. package/schematics/update-tool/utils/functions.d.ts +1 -1
  234. package/schematics/update-tool/utils/functions.js +2 -2
  235. package/schematics/update-tool/utils/functions.mjs +2 -2
  236. package/schematics/update-tool/utils/imports.d.ts +1 -1
  237. package/schematics/update-tool/utils/imports.js +2 -2
  238. package/schematics/update-tool/utils/imports.mjs +2 -2
  239. package/schematics/update-tool/utils/line-mappings.d.ts +1 -1
  240. package/schematics/update-tool/utils/line-mappings.js +2 -2
  241. package/schematics/update-tool/utils/line-mappings.mjs +2 -2
  242. package/schematics/update-tool/utils/parse-tsconfig.d.ts +1 -1
  243. package/schematics/update-tool/utils/parse-tsconfig.js +2 -2
  244. package/schematics/update-tool/utils/parse-tsconfig.mjs +2 -2
  245. package/schematics/update-tool/utils/property-name.d.ts +1 -1
  246. package/schematics/update-tool/utils/property-name.js +2 -2
  247. package/schematics/update-tool/utils/property-name.mjs +2 -2
  248. package/schematics/update-tool/utils/virtual-host.d.ts +1 -1
  249. package/schematics/update-tool/utils/virtual-host.js +2 -2
  250. package/schematics/update-tool/utils/virtual-host.mjs +2 -2
  251. package/schematics/update-tool/version-changes.d.ts +1 -1
  252. package/schematics/update-tool/version-changes.js +2 -2
  253. package/schematics/update-tool/version-changes.mjs +2 -2
  254. package/schematics/utils/ast/ng-module-imports.d.ts +1 -1
  255. package/schematics/utils/ast/ng-module-imports.js +2 -2
  256. package/schematics/utils/ast/ng-module-imports.mjs +2 -2
  257. package/schematics/utils/ast.d.ts +1 -1
  258. package/schematics/utils/ast.js +2 -2
  259. package/schematics/utils/ast.mjs +2 -2
  260. package/schematics/utils/build-component.d.ts +1 -1
  261. package/schematics/utils/build-component.js +2 -2
  262. package/schematics/utils/build-component.mjs +2 -2
  263. package/schematics/utils/get-project.d.ts +1 -1
  264. package/schematics/utils/get-project.js +2 -2
  265. package/schematics/utils/get-project.mjs +2 -2
  266. package/schematics/utils/html-manipulation.d.ts +1 -1
  267. package/schematics/utils/html-manipulation.js +2 -2
  268. package/schematics/utils/html-manipulation.mjs +2 -2
  269. package/schematics/utils/index.d.ts +1 -1
  270. package/schematics/utils/index.js +2 -2
  271. package/schematics/utils/index.mjs +2 -2
  272. package/schematics/utils/parse5-element.d.ts +1 -1
  273. package/schematics/utils/parse5-element.js +2 -2
  274. package/schematics/utils/parse5-element.mjs +2 -2
  275. package/schematics/utils/project-index-file.d.ts +1 -1
  276. package/schematics/utils/project-index-file.js +2 -2
  277. package/schematics/utils/project-index-file.mjs +2 -2
  278. package/schematics/utils/project-main-file.d.ts +1 -1
  279. package/schematics/utils/project-main-file.js +2 -2
  280. package/schematics/utils/project-main-file.mjs +2 -2
  281. package/schematics/utils/project-style-file.d.ts +1 -1
  282. package/schematics/utils/project-style-file.js +2 -2
  283. package/schematics/utils/project-style-file.mjs +2 -2
  284. package/schematics/utils/project-targets.d.ts +1 -1
  285. package/schematics/utils/project-targets.js +4 -3
  286. package/schematics/utils/project-targets.mjs +4 -3
  287. package/schematics/utils/project-tsconfig-paths.d.ts +1 -1
  288. package/schematics/utils/project-tsconfig-paths.js +2 -2
  289. package/schematics/utils/project-tsconfig-paths.mjs +2 -2
  290. package/schematics/utils/schematic-options.d.ts +1 -1
  291. package/schematics/utils/schematic-options.js +2 -2
  292. package/schematics/utils/schematic-options.mjs +2 -2
  293. package/scrolling/index.d.ts +19 -38
  294. package/stepper/index.d.ts +16 -69
  295. package/table/index.d.ts +41 -56
  296. package/text-field/index.d.ts +6 -9
  297. package/tree/index.d.ts +17 -16
  298. package/esm2022/a11y/a11y-module.mjs +0 -31
  299. package/esm2022/a11y/a11y_public_index.mjs +0 -5
  300. package/esm2022/a11y/aria-describer/aria-describer.mjs +0 -232
  301. package/esm2022/a11y/aria-describer/aria-reference.mjs +0 -47
  302. package/esm2022/a11y/fake-event-detection.mjs +0 -29
  303. package/esm2022/a11y/focus-monitor/focus-monitor.mjs +0 -468
  304. package/esm2022/a11y/focus-trap/configurable-focus-trap-config.mjs +0 -9
  305. package/esm2022/a11y/focus-trap/configurable-focus-trap-factory.mjs +0 -54
  306. package/esm2022/a11y/focus-trap/configurable-focus-trap.mjs +0 -51
  307. package/esm2022/a11y/focus-trap/event-listener-inert-strategy.mjs +0 -61
  308. package/esm2022/a11y/focus-trap/focus-trap-inert-strategy.mjs +0 -11
  309. package/esm2022/a11y/focus-trap/focus-trap-manager.mjs +0 -53
  310. package/esm2022/a11y/focus-trap/focus-trap.mjs +0 -396
  311. package/esm2022/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +0 -116
  312. package/esm2022/a11y/index.mjs +0 -9
  313. package/esm2022/a11y/input-modality/input-modality-detector.mjs +0 -176
  314. package/esm2022/a11y/interactivity-checker/interactivity-checker.mjs +0 -238
  315. package/esm2022/a11y/key-manager/activedescendant-key-manager.mjs +0 -20
  316. package/esm2022/a11y/key-manager/focus-key-manager.mjs +0 -29
  317. package/esm2022/a11y/key-manager/list-key-manager.mjs +0 -357
  318. package/esm2022/a11y/key-manager/noop-tree-key-manager.mjs +0 -94
  319. package/esm2022/a11y/key-manager/tree-key-manager-strategy.mjs +0 -9
  320. package/esm2022/a11y/key-manager/tree-key-manager.mjs +0 -345
  321. package/esm2022/a11y/key-manager/typeahead.mjs +0 -91
  322. package/esm2022/a11y/live-announcer/live-announcer-tokens.mjs +0 -19
  323. package/esm2022/a11y/live-announcer/live-announcer.mjs +0 -210
  324. package/esm2022/a11y/public-api.mjs +0 -30
  325. package/esm2022/accordion/accordion-item.mjs +0 -162
  326. package/esm2022/accordion/accordion-module.mjs +0 -24
  327. package/esm2022/accordion/accordion.mjs +0 -65
  328. package/esm2022/accordion/accordion_public_index.mjs +0 -5
  329. package/esm2022/accordion/index.mjs +0 -9
  330. package/esm2022/accordion/public-api.mjs +0 -11
  331. package/esm2022/bidi/bidi-module.mjs +0 -23
  332. package/esm2022/bidi/bidi_public_index.mjs +0 -5
  333. package/esm2022/bidi/dir-document-token.mjs +0 -33
  334. package/esm2022/bidi/dir.mjs +0 -70
  335. package/esm2022/bidi/directionality.mjs +0 -52
  336. package/esm2022/bidi/index.mjs +0 -9
  337. package/esm2022/bidi/public-api.mjs +0 -12
  338. package/esm2022/clipboard/clipboard-module.mjs +0 -23
  339. package/esm2022/clipboard/clipboard.mjs +0 -53
  340. package/esm2022/clipboard/clipboard_public_index.mjs +0 -5
  341. package/esm2022/clipboard/copy-to-clipboard.mjs +0 -100
  342. package/esm2022/clipboard/index.mjs +0 -9
  343. package/esm2022/clipboard/pending-copy.mjs +0 -71
  344. package/esm2022/clipboard/public-api.mjs +0 -12
  345. package/esm2022/coercion/array.mjs +0 -11
  346. package/esm2022/coercion/boolean-property.mjs +0 -12
  347. package/esm2022/coercion/css-pixel-value.mjs +0 -15
  348. package/esm2022/coercion/element.mjs +0 -16
  349. package/esm2022/coercion/index.mjs +0 -9
  350. package/esm2022/coercion/number-property.mjs +0 -24
  351. package/esm2022/coercion/private/index.mjs +0 -9
  352. package/esm2022/coercion/private/observable.mjs +0 -19
  353. package/esm2022/coercion/private/private_public_index.mjs +0 -5
  354. package/esm2022/coercion/public-api.mjs +0 -14
  355. package/esm2022/coercion/string-array.mjs +0 -38
  356. package/esm2022/collections/array-data-source.mjs +0 -21
  357. package/esm2022/collections/collection-viewer.mjs +0 -9
  358. package/esm2022/collections/collections_public_index.mjs +0 -5
  359. package/esm2022/collections/data-source.mjs +0 -19
  360. package/esm2022/collections/dispose-view-repeater-strategy.mjs +0 -48
  361. package/esm2022/collections/index.mjs +0 -9
  362. package/esm2022/collections/public-api.mjs +0 -17
  363. package/esm2022/collections/recycle-view-repeater-strategy.mjs +0 -129
  364. package/esm2022/collections/selection-model.mjs +0 -225
  365. package/esm2022/collections/tree-adapter.mjs +0 -9
  366. package/esm2022/collections/unique-selection-dispatcher.mjs +0 -55
  367. package/esm2022/collections/view-repeater.mjs +0 -26
  368. package/esm2022/dialog/dialog-config.mjs +0 -70
  369. package/esm2022/dialog/dialog-container.mjs +0 -308
  370. package/esm2022/dialog/dialog-injectors.mjs +0 -40
  371. package/esm2022/dialog/dialog-module.mjs +0 -40
  372. package/esm2022/dialog/dialog-ref.mjs +0 -85
  373. package/esm2022/dialog/dialog.mjs +0 -303
  374. package/esm2022/dialog/dialog_public_index.mjs +0 -5
  375. package/esm2022/dialog/index.mjs +0 -9
  376. package/esm2022/dialog/public-api.mjs +0 -14
  377. package/esm2022/drag-drop/directives/assertions.mjs +0 -18
  378. package/esm2022/drag-drop/directives/config.mjs +0 -14
  379. package/esm2022/drag-drop/directives/drag-handle.mjs +0 -68
  380. package/esm2022/drag-drop/directives/drag-placeholder.mjs +0 -43
  381. package/esm2022/drag-drop/directives/drag-preview.mjs +0 -48
  382. package/esm2022/drag-drop/directives/drag.mjs +0 -520
  383. package/esm2022/drag-drop/directives/drop-list-group.mjs +0 -47
  384. package/esm2022/drag-drop/directives/drop-list.mjs +0 -352
  385. package/esm2022/drag-drop/dom/clone-node.mjs +0 -65
  386. package/esm2022/drag-drop/dom/dom-rect.mjs +0 -64
  387. package/esm2022/drag-drop/dom/parent-position-tracker.mjs +0 -76
  388. package/esm2022/drag-drop/dom/root-node.mjs +0 -21
  389. package/esm2022/drag-drop/dom/styling.mjs +0 -89
  390. package/esm2022/drag-drop/dom/transition-duration.mjs +0 -36
  391. package/esm2022/drag-drop/drag-drop-module.mjs +0 -49
  392. package/esm2022/drag-drop/drag-drop-registry.mjs +0 -266
  393. package/esm2022/drag-drop/drag-drop.mjs +0 -57
  394. package/esm2022/drag-drop/drag-drop_public_index.mjs +0 -5
  395. package/esm2022/drag-drop/drag-events.mjs +0 -9
  396. package/esm2022/drag-drop/drag-parent.mjs +0 -16
  397. package/esm2022/drag-drop/drag-ref.mjs +0 -1097
  398. package/esm2022/drag-drop/drag-utils.mjs +0 -60
  399. package/esm2022/drag-drop/drop-list-ref.mjs +0 -672
  400. package/esm2022/drag-drop/index.mjs +0 -9
  401. package/esm2022/drag-drop/preview-ref.mjs +0 -117
  402. package/esm2022/drag-drop/public-api.mjs +0 -23
  403. package/esm2022/drag-drop/sorting/drop-list-sort-strategy.mjs +0 -9
  404. package/esm2022/drag-drop/sorting/mixed-sort-strategy.mjs +0 -246
  405. package/esm2022/drag-drop/sorting/single-axis-sort-strategy.mjs +0 -343
  406. package/esm2022/index.mjs +0 -9
  407. package/esm2022/keycodes/index.mjs +0 -9
  408. package/esm2022/keycodes/keycodes.mjs +0 -127
  409. package/esm2022/keycodes/keycodes_public_index.mjs +0 -5
  410. package/esm2022/keycodes/modifiers.mjs +0 -18
  411. package/esm2022/keycodes/public-api.mjs +0 -10
  412. package/esm2022/layout/breakpoints-observer.mjs +0 -105
  413. package/esm2022/layout/breakpoints.mjs +0 -29
  414. package/esm2022/layout/index.mjs +0 -9
  415. package/esm2022/layout/layout-module.mjs +0 -19
  416. package/esm2022/layout/layout_public_index.mjs +0 -5
  417. package/esm2022/layout/media-matcher.mjs +0 -94
  418. package/esm2022/layout/public-api.mjs +0 -12
  419. package/esm2022/listbox/index.mjs +0 -9
  420. package/esm2022/listbox/listbox-module.mjs +0 -24
  421. package/esm2022/listbox/listbox.mjs +0 -888
  422. package/esm2022/listbox/listbox_public_index.mjs +0 -5
  423. package/esm2022/listbox/public-api.mjs +0 -10
  424. package/esm2022/menu/context-menu-trigger.mjs +0 -221
  425. package/esm2022/menu/event-detection.mjs +0 -28
  426. package/esm2022/menu/index.mjs +0 -9
  427. package/esm2022/menu/menu-aim.mjs +0 -204
  428. package/esm2022/menu/menu-bar.mjs +0 -134
  429. package/esm2022/menu/menu-base.mjs +0 -192
  430. package/esm2022/menu/menu-errors.mjs +0 -22
  431. package/esm2022/menu/menu-group.mjs +0 -31
  432. package/esm2022/menu/menu-interface.mjs +0 -11
  433. package/esm2022/menu/menu-item-checkbox.mjs +0 -50
  434. package/esm2022/menu/menu-item-radio.mjs +0 -72
  435. package/esm2022/menu/menu-item-selectable.mjs +0 -36
  436. package/esm2022/menu/menu-item.mjs +0 -270
  437. package/esm2022/menu/menu-module.mjs +0 -60
  438. package/esm2022/menu/menu-stack.mjs +0 -163
  439. package/esm2022/menu/menu-trigger-base.mjs +0 -119
  440. package/esm2022/menu/menu-trigger.mjs +0 -313
  441. package/esm2022/menu/menu.mjs +0 -135
  442. package/esm2022/menu/menu_public_index.mjs +0 -5
  443. package/esm2022/menu/pointer-focus-tracker.mjs +0 -51
  444. package/esm2022/menu/public-api.mjs +0 -24
  445. package/esm2022/observers/index.mjs +0 -9
  446. package/esm2022/observers/observe-content.mjs +0 -216
  447. package/esm2022/observers/observers_public_index.mjs +0 -5
  448. package/esm2022/observers/private/index.mjs +0 -9
  449. package/esm2022/observers/private/private_public_index.mjs +0 -5
  450. package/esm2022/observers/private/shared-resize-observer.mjs +0 -125
  451. package/esm2022/observers/public-api.mjs +0 -9
  452. package/esm2022/overlay/dispatchers/base-overlay-dispatcher.mjs +0 -52
  453. package/esm2022/overlay/dispatchers/index.mjs +0 -10
  454. package/esm2022/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +0 -81
  455. package/esm2022/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +0 -151
  456. package/esm2022/overlay/fullscreen-overlay-container.mjs +0 -94
  457. package/esm2022/overlay/index.mjs +0 -9
  458. package/esm2022/overlay/overlay-config.mjs +0 -45
  459. package/esm2022/overlay/overlay-container.mjs +0 -81
  460. package/esm2022/overlay/overlay-directives.mjs +0 -432
  461. package/esm2022/overlay/overlay-module.mjs +0 -28
  462. package/esm2022/overlay/overlay-ref.mjs +0 -437
  463. package/esm2022/overlay/overlay.mjs +0 -126
  464. package/esm2022/overlay/overlay_public_index.mjs +0 -5
  465. package/esm2022/overlay/position/connected-position.mjs +0 -88
  466. package/esm2022/overlay/position/flexible-connected-position-strategy.mjs +0 -1002
  467. package/esm2022/overlay/position/global-position-strategy.mjs +0 -237
  468. package/esm2022/overlay/position/overlay-position-builder.mjs +0 -50
  469. package/esm2022/overlay/position/position-strategy.mjs +0 -9
  470. package/esm2022/overlay/position/scroll-clip.mjs +0 -40
  471. package/esm2022/overlay/public-api.mjs +0 -22
  472. package/esm2022/overlay/scroll/block-scroll-strategy.mjs +0 -80
  473. package/esm2022/overlay/scroll/close-scroll-strategy.mjs +0 -65
  474. package/esm2022/overlay/scroll/index.mjs +0 -14
  475. package/esm2022/overlay/scroll/noop-scroll-strategy.mjs +0 -17
  476. package/esm2022/overlay/scroll/reposition-scroll-strategy.mjs +0 -61
  477. package/esm2022/overlay/scroll/scroll-strategy-options.mjs +0 -55
  478. package/esm2022/overlay/scroll/scroll-strategy.mjs +0 -14
  479. package/esm2022/platform/features/input-types.mjs +0 -59
  480. package/esm2022/platform/features/passive-listeners.mjs +0 -36
  481. package/esm2022/platform/features/scrolling.mjs +0 -104
  482. package/esm2022/platform/features/shadow-dom.mjs +0 -54
  483. package/esm2022/platform/features/test-environment.mjs +0 -24
  484. package/esm2022/platform/index.mjs +0 -9
  485. package/esm2022/platform/platform-module.mjs +0 -19
  486. package/esm2022/platform/platform.mjs +0 -85
  487. package/esm2022/platform/platform_public_index.mjs +0 -5
  488. package/esm2022/platform/public-api.mjs +0 -15
  489. package/esm2022/portal/dom-portal-outlet.mjs +0 -158
  490. package/esm2022/portal/index.mjs +0 -9
  491. package/esm2022/portal/portal-directives.mjs +0 -251
  492. package/esm2022/portal/portal-errors.mjs +0 -51
  493. package/esm2022/portal/portal-injector.mjs +0 -28
  494. package/esm2022/portal/portal.mjs +0 -189
  495. package/esm2022/portal/portal_public_index.mjs +0 -5
  496. package/esm2022/portal/public-api.mjs +0 -12
  497. package/esm2022/public-api.mjs +0 -9
  498. package/esm2022/scrolling/fixed-size-virtual-scroll.mjs +0 -218
  499. package/esm2022/scrolling/index.mjs +0 -9
  500. package/esm2022/scrolling/public-api.mjs +0 -20
  501. package/esm2022/scrolling/scroll-dispatcher.mjs +0 -163
  502. package/esm2022/scrolling/scrollable.mjs +0 -177
  503. package/esm2022/scrolling/scrolling-module.mjs +0 -69
  504. package/esm2022/scrolling/scrolling_public_index.mjs +0 -5
  505. package/esm2022/scrolling/viewport-ruler.mjs +0 -146
  506. package/esm2022/scrolling/virtual-for-of.mjs +0 -299
  507. package/esm2022/scrolling/virtual-scroll-repeater.mjs +0 -9
  508. package/esm2022/scrolling/virtual-scroll-strategy.mjs +0 -11
  509. package/esm2022/scrolling/virtual-scroll-viewport.mjs +0 -445
  510. package/esm2022/scrolling/virtual-scrollable-element.mjs +0 -42
  511. package/esm2022/scrolling/virtual-scrollable-window.mjs +0 -41
  512. package/esm2022/scrolling/virtual-scrollable.mjs +0 -40
  513. package/esm2022/stepper/index.mjs +0 -9
  514. package/esm2022/stepper/public-api.mjs +0 -13
  515. package/esm2022/stepper/step-header.mjs +0 -31
  516. package/esm2022/stepper/step-label.mjs +0 -24
  517. package/esm2022/stepper/stepper-button.mjs +0 -58
  518. package/esm2022/stepper/stepper-module.mjs +0 -41
  519. package/esm2022/stepper/stepper.mjs +0 -452
  520. package/esm2022/stepper/stepper_public_index.mjs +0 -5
  521. package/esm2022/table/can-stick.mjs +0 -46
  522. package/esm2022/table/cell.mjs +0 -245
  523. package/esm2022/table/coalesced-style-scheduler.mjs +0 -79
  524. package/esm2022/table/index.mjs +0 -9
  525. package/esm2022/table/public-api.mjs +0 -20
  526. package/esm2022/table/row.mjs +0 -317
  527. package/esm2022/table/sticky-position-listener.mjs +0 -11
  528. package/esm2022/table/sticky-styler.mjs +0 -347
  529. package/esm2022/table/table-errors.mjs +0 -67
  530. package/esm2022/table/table-module.mjs +0 -93
  531. package/esm2022/table/table.mjs +0 -1148
  532. package/esm2022/table/table_public_index.mjs +0 -5
  533. package/esm2022/table/text-column.mjs +0 -154
  534. package/esm2022/table/tokens.mjs +0 -16
  535. package/esm2022/testing/change-detection.mjs +0 -102
  536. package/esm2022/testing/component-harness.mjs +0 -328
  537. package/esm2022/testing/element-dimensions.mjs +0 -9
  538. package/esm2022/testing/harness-environment.mjs +0 -220
  539. package/esm2022/testing/index.mjs +0 -9
  540. package/esm2022/testing/public-api.mjs +0 -15
  541. package/esm2022/testing/selenium-webdriver/index.mjs +0 -9
  542. package/esm2022/testing/selenium-webdriver/public-api.mjs +0 -10
  543. package/esm2022/testing/selenium-webdriver/selenium-web-driver-element.mjs +0 -216
  544. package/esm2022/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +0 -88
  545. package/esm2022/testing/selenium-webdriver/selenium-webdriver-keys.mjs +0 -64
  546. package/esm2022/testing/test-element-errors.mjs +0 -15
  547. package/esm2022/testing/test-element.mjs +0 -49
  548. package/esm2022/testing/testbed/fake-events/dispatch-events.mjs +0 -53
  549. package/esm2022/testing/testbed/fake-events/element-focus.mjs +0 -39
  550. package/esm2022/testing/testbed/fake-events/event-objects.mjs +0 -127
  551. package/esm2022/testing/testbed/fake-events/index.mjs +0 -14
  552. package/esm2022/testing/testbed/fake-events/type-in-element.mjs +0 -97
  553. package/esm2022/testing/testbed/index.mjs +0 -9
  554. package/esm2022/testing/testbed/public-api.mjs +0 -10
  555. package/esm2022/testing/testbed/task-state-zone-interceptor.mjs +0 -82
  556. package/esm2022/testing/testbed/testbed-harness-environment.mjs +0 -165
  557. package/esm2022/testing/testbed/unit-test-element.mjs +0 -258
  558. package/esm2022/testing/text-filtering.mjs +0 -21
  559. package/esm2022/text-field/autofill.mjs +0 -114
  560. package/esm2022/text-field/autosize.mjs +0 -309
  561. package/esm2022/text-field/index.mjs +0 -9
  562. package/esm2022/text-field/public-api.mjs +0 -11
  563. package/esm2022/text-field/text-field-module.mjs +0 -24
  564. package/esm2022/text-field/text-field_public_index.mjs +0 -5
  565. package/esm2022/tree/control/base-tree-control.mjs +0 -62
  566. package/esm2022/tree/control/flat-tree-control.mjs +0 -57
  567. package/esm2022/tree/control/nested-tree-control.mjs +0 -67
  568. package/esm2022/tree/control/tree-control.mjs +0 -2
  569. package/esm2022/tree/index.mjs +0 -9
  570. package/esm2022/tree/nested-node.mjs +0 -103
  571. package/esm2022/tree/node.mjs +0 -36
  572. package/esm2022/tree/outlet.mjs +0 -40
  573. package/esm2022/tree/padding.mjs +0 -129
  574. package/esm2022/tree/public-api.mjs +0 -20
  575. package/esm2022/tree/toggle.mjs +0 -51
  576. package/esm2022/tree/tree-errors.mjs +0 -44
  577. package/esm2022/tree/tree-module.mjs +0 -49
  578. package/esm2022/tree/tree.mjs +0 -1123
  579. package/esm2022/tree/tree_public_index.mjs +0 -5
  580. package/esm2022/version.mjs +0 -11
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveF9wdWJsaWNfaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2xpc3Rib3gvbGlzdGJveF9wdWJsaWNfaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -1,10 +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 * from './listbox';
9
- export * from './listbox-module';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvbGlzdGJveC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saXN0Ym94JztcbmV4cG9ydCAqIGZyb20gJy4vbGlzdGJveC1tb2R1bGUnO1xuIl19
@@ -1,221 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { booleanAttribute, ChangeDetectorRef, Directive, inject, Injectable, Input, } from '@angular/core';
9
- import { Directionality } from '@angular/cdk/bidi';
10
- import { Overlay, OverlayConfig, STANDARD_DROPDOWN_BELOW_POSITIONS, } from '@angular/cdk/overlay';
11
- import { _getEventTarget } from '@angular/cdk/platform';
12
- import { merge, partition } from 'rxjs';
13
- import { skip, takeUntil, skipWhile } from 'rxjs/operators';
14
- import { MENU_STACK, MenuStack } from './menu-stack';
15
- import { CdkMenuTriggerBase, MENU_TRIGGER } from './menu-trigger-base';
16
- import * as i0 from "@angular/core";
17
- /** The preferred menu positions for the context menu. */
18
- const CONTEXT_MENU_POSITIONS = STANDARD_DROPDOWN_BELOW_POSITIONS.map(position => {
19
- // In cases where the first menu item in the context menu is a trigger the submenu opens on a
20
- // hover event. We offset the context menu 2px by default to prevent this from occurring.
21
- const offsetX = position.overlayX === 'start' ? 2 : -2;
22
- const offsetY = position.overlayY === 'top' ? 2 : -2;
23
- return { ...position, offsetX, offsetY };
24
- });
25
- /** Tracks the last open context menu trigger across the entire application. */
26
- export class ContextMenuTracker {
27
- /**
28
- * Close the previous open context menu and set the given one as being open.
29
- * @param trigger The trigger for the currently open Context Menu.
30
- */
31
- update(trigger) {
32
- if (ContextMenuTracker._openContextMenuTrigger !== trigger) {
33
- ContextMenuTracker._openContextMenuTrigger?.close();
34
- ContextMenuTracker._openContextMenuTrigger = trigger;
35
- }
36
- }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: ContextMenuTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: ContextMenuTracker, providedIn: 'root' }); }
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: ContextMenuTracker, decorators: [{
41
- type: Injectable,
42
- args: [{ providedIn: 'root' }]
43
- }] });
44
- /**
45
- * A directive that opens a menu when a user right-clicks within its host element.
46
- * It is aware of nested context menus and will trigger only the lowest level non-disabled context menu.
47
- */
48
- export class CdkContextMenuTrigger extends CdkMenuTriggerBase {
49
- constructor() {
50
- super();
51
- /** The CDK overlay service. */
52
- this._overlay = inject(Overlay);
53
- /** The directionality of the page. */
54
- this._directionality = inject(Directionality, { optional: true });
55
- /** The app's context menu tracking registry */
56
- this._contextMenuTracker = inject(ContextMenuTracker);
57
- this._changeDetectorRef = inject(ChangeDetectorRef);
58
- /** Whether the context menu is disabled. */
59
- this.disabled = false;
60
- this._setMenuStackCloseListener();
61
- }
62
- /**
63
- * Open the attached menu at the specified location.
64
- * @param coordinates where to open the context menu
65
- */
66
- open(coordinates) {
67
- this._open(null, coordinates);
68
- this._changeDetectorRef.markForCheck();
69
- }
70
- /** Close the currently opened context menu. */
71
- close() {
72
- this.menuStack.closeAll();
73
- }
74
- /**
75
- * Open the context menu and closes any previously open menus.
76
- * @param event the mouse event which opens the context menu.
77
- */
78
- _openOnContextMenu(event) {
79
- if (!this.disabled) {
80
- // Prevent the native context menu from opening because we're opening a custom one.
81
- event.preventDefault();
82
- // Stop event propagation to ensure that only the closest enabled context menu opens.
83
- // Otherwise, any context menus attached to containing elements would *also* open,
84
- // resulting in multiple stacked context menus being displayed.
85
- event.stopPropagation();
86
- this._contextMenuTracker.update(this);
87
- this._open(event, { x: event.clientX, y: event.clientY });
88
- // A context menu can be triggered via a mouse right click or a keyboard shortcut.
89
- if (event.button === 2) {
90
- this.childMenu?.focusFirstItem('mouse');
91
- }
92
- else if (event.button === 0) {
93
- this.childMenu?.focusFirstItem('keyboard');
94
- }
95
- else {
96
- this.childMenu?.focusFirstItem('program');
97
- }
98
- }
99
- }
100
- /**
101
- * Get the configuration object used to create the overlay.
102
- * @param coordinates the location to place the opened menu
103
- */
104
- _getOverlayConfig(coordinates) {
105
- return new OverlayConfig({
106
- positionStrategy: this._getOverlayPositionStrategy(coordinates),
107
- scrollStrategy: this.menuScrollStrategy(),
108
- direction: this._directionality || undefined,
109
- });
110
- }
111
- /**
112
- * Get the position strategy for the overlay which specifies where to place the menu.
113
- * @param coordinates the location to place the opened menu
114
- */
115
- _getOverlayPositionStrategy(coordinates) {
116
- return this._overlay
117
- .position()
118
- .flexibleConnectedTo(coordinates)
119
- .withLockedPosition()
120
- .withGrowAfterOpen()
121
- .withPositions(this.menuPosition ?? CONTEXT_MENU_POSITIONS);
122
- }
123
- /** Subscribe to the menu stack close events and close this menu when requested. */
124
- _setMenuStackCloseListener() {
125
- this.menuStack.closed.pipe(takeUntil(this.destroyed)).subscribe(({ item }) => {
126
- if (item === this.childMenu && this.isOpen()) {
127
- this.closed.next();
128
- this.overlayRef.detach();
129
- }
130
- });
131
- }
132
- /**
133
- * Subscribe to the overlays outside pointer events stream and handle closing out the stack if a
134
- * click occurs outside the menus.
135
- * @param userEvent User-generated event that opened the menu.
136
- */
137
- _subscribeToOutsideClicks(userEvent) {
138
- if (this.overlayRef) {
139
- let outsideClicks = this.overlayRef.outsidePointerEvents();
140
- if (userEvent) {
141
- const [auxClicks, nonAuxClicks] = partition(outsideClicks, ({ type }) => type === 'auxclick');
142
- outsideClicks = merge(
143
- // Using a mouse, the `contextmenu` event can fire either when pressing the right button
144
- // or left button + control. Most browsers won't dispatch a `click` event right after
145
- // a `contextmenu` event triggered by left button + control, but Safari will (see #27832).
146
- // This closes the menu immediately. To work around it, we check that both the triggering
147
- // event and the current outside click event both had the control key pressed, and that
148
- // that this is the first outside click event.
149
- nonAuxClicks.pipe(skipWhile((event, index) => userEvent.ctrlKey && index === 0 && event.ctrlKey)),
150
- // If the menu was triggered by the `contextmenu` event, skip the first `auxclick` event
151
- // because it fires when the mouse is released on the same click that opened the menu.
152
- auxClicks.pipe(skip(1)));
153
- }
154
- outsideClicks.pipe(takeUntil(this.stopOutsideClicksListener)).subscribe(event => {
155
- if (!this.isElementInsideMenuStack(_getEventTarget(event))) {
156
- this.menuStack.closeAll();
157
- }
158
- });
159
- }
160
- }
161
- /**
162
- * Open the attached menu at the specified location.
163
- * @param userEvent User-generated event that opened the menu
164
- * @param coordinates where to open the context menu
165
- */
166
- _open(userEvent, coordinates) {
167
- if (this.disabled) {
168
- return;
169
- }
170
- if (this.isOpen()) {
171
- // since we're moving this menu we need to close any submenus first otherwise they end up
172
- // disconnected from this one.
173
- this.menuStack.closeSubMenuOf(this.childMenu);
174
- this.overlayRef.getConfig().positionStrategy.setOrigin(coordinates);
175
- this.overlayRef.updatePosition();
176
- }
177
- else {
178
- this.opened.next();
179
- if (this.overlayRef) {
180
- this.overlayRef.getConfig().positionStrategy.setOrigin(coordinates);
181
- this.overlayRef.updatePosition();
182
- }
183
- else {
184
- this.overlayRef = this._overlay.create(this._getOverlayConfig(coordinates));
185
- }
186
- this.overlayRef.attach(this.getMenuContentPortal());
187
- this._subscribeToOutsideClicks(userEvent);
188
- }
189
- }
190
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkContextMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
191
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.0-next.2", type: CdkContextMenuTrigger, isStandalone: true, selector: "[cdkContextMenuTriggerFor]", inputs: { menuTemplateRef: ["cdkContextMenuTriggerFor", "menuTemplateRef"], menuPosition: ["cdkContextMenuPosition", "menuPosition"], menuData: ["cdkContextMenuTriggerData", "menuData"], disabled: ["cdkContextMenuDisabled", "disabled", booleanAttribute] }, outputs: { opened: "cdkContextMenuOpened", closed: "cdkContextMenuClosed" }, host: { listeners: { "contextmenu": "_openOnContextMenu($event)" }, properties: { "attr.data-cdk-menu-stack-id": "null" } }, providers: [
192
- { provide: MENU_TRIGGER, useExisting: CdkContextMenuTrigger },
193
- { provide: MENU_STACK, useClass: MenuStack },
194
- ], exportAs: ["cdkContextMenuTriggerFor"], usesInheritance: true, ngImport: i0 }); }
195
- }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkContextMenuTrigger, decorators: [{
197
- type: Directive,
198
- args: [{
199
- selector: '[cdkContextMenuTriggerFor]',
200
- exportAs: 'cdkContextMenuTriggerFor',
201
- standalone: true,
202
- host: {
203
- '[attr.data-cdk-menu-stack-id]': 'null',
204
- '(contextmenu)': '_openOnContextMenu($event)',
205
- },
206
- inputs: [
207
- { name: 'menuTemplateRef', alias: 'cdkContextMenuTriggerFor' },
208
- { name: 'menuPosition', alias: 'cdkContextMenuPosition' },
209
- { name: 'menuData', alias: 'cdkContextMenuTriggerData' },
210
- ],
211
- outputs: ['opened: cdkContextMenuOpened', 'closed: cdkContextMenuClosed'],
212
- providers: [
213
- { provide: MENU_TRIGGER, useExisting: CdkContextMenuTrigger },
214
- { provide: MENU_STACK, useClass: MenuStack },
215
- ],
216
- }]
217
- }], ctorParameters: () => [], propDecorators: { disabled: [{
218
- type: Input,
219
- args: [{ alias: 'cdkContextMenuDisabled', transform: booleanAttribute }]
220
- }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LXRyaWdnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL21lbnUvY29udGV4dC1tZW51LXRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBRUwsT0FBTyxFQUNQLGFBQWEsRUFDYixpQ0FBaUMsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDOztBQUVyRSx5REFBeUQ7QUFDekQsTUFBTSxzQkFBc0IsR0FBRyxpQ0FBaUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDOUUsNkZBQTZGO0lBQzdGLHlGQUF5RjtJQUN6RixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxPQUFPLEVBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBRS9FLE1BQU0sT0FBTyxrQkFBa0I7SUFJN0I7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQThCO1FBQ25DLElBQUksa0JBQWtCLENBQUMsdUJBQXVCLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDM0Qsa0JBQWtCLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDcEQsa0JBQWtCLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO3FIQWJVLGtCQUFrQjt5SEFBbEIsa0JBQWtCLGNBRE4sTUFBTTs7a0dBQ2xCLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7O0FBb0JoQzs7O0dBR0c7QUFvQkgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGtCQUFrQjtJQWUzRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBZlYsK0JBQStCO1FBQ2QsYUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1QyxzQ0FBc0M7UUFDckIsb0JBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFFNUUsK0NBQStDO1FBQzlCLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRWpELHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhFLDRDQUE0QztRQUMyQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBSS9GLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLENBQUMsV0FBbUM7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsS0FBSztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLEtBQWlCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsbUZBQW1GO1lBQ25GLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV2QixxRkFBcUY7WUFDckYsa0ZBQWtGO1lBQ2xGLCtEQUErRDtZQUMvRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztZQUV4RCxrRkFBa0Y7WUFDbEYsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGlCQUFpQixDQUFDLFdBQW1DO1FBQzNELE9BQU8sSUFBSSxhQUFhLENBQUM7WUFDdkIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsQ0FBQztZQUMvRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLFNBQVM7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDJCQUEyQixDQUNqQyxXQUFtQztRQUVuQyxPQUFPLElBQUksQ0FBQyxRQUFRO2FBQ2pCLFFBQVEsRUFBRTthQUNWLG1CQUFtQixDQUFDLFdBQVcsQ0FBQzthQUNoQyxrQkFBa0IsRUFBRTthQUNwQixpQkFBaUIsRUFBRTthQUNuQixhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxtRkFBbUY7SUFDM0UsMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFO1lBQ3pFLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxVQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyx5QkFBeUIsQ0FBQyxTQUE0QjtRQUM1RCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFM0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7Z0JBQzVGLGFBQWEsR0FBRyxLQUFLO2dCQUNuQix3RkFBd0Y7Z0JBQ3hGLHFGQUFxRjtnQkFDckYsMEZBQTBGO2dCQUMxRix5RkFBeUY7Z0JBQ3pGLHVGQUF1RjtnQkFDdkYsOENBQThDO2dCQUM5QyxZQUFZLENBQUMsSUFBSSxDQUNmLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQy9FO2dCQUVELHdGQUF3RjtnQkFDeEYsc0ZBQXNGO2dCQUN0RixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4QixDQUFDO1lBQ0osQ0FBQztZQUVELGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzVELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzVCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxTQUE0QixFQUFFLFdBQW1DO1FBQzdFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNsQix5RkFBeUY7WUFDekYsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFVLENBQUMsQ0FBQztZQUc3QyxJQUFJLENBQUMsVUFBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLGdCQUM5QixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsVUFBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVuQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFFbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxnQkFDN0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUVELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO3FIQXhLVSxxQkFBcUI7eUdBQXJCLHFCQUFxQiwwU0Fhb0IsZ0JBQWdCLDBOQWxCekQ7WUFDVCxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFDO1lBQzNELEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDO1NBQzNDOztrR0FFVSxxQkFBcUI7a0JBbkJqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osK0JBQStCLEVBQUUsTUFBTTt3QkFDdkMsZUFBZSxFQUFFLDRCQUE0QjtxQkFDOUM7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLEVBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBQzt3QkFDNUQsRUFBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBQzt3QkFDdkQsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBQztxQkFDdkQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsOEJBQThCLEVBQUUsOEJBQThCLENBQUM7b0JBQ3pFLFNBQVMsRUFBRTt3QkFDVCxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyx1QkFBdUIsRUFBQzt3QkFDM0QsRUFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUM7cUJBQzNDO2lCQUNGO3dEQWN3RSxRQUFRO3NCQUE5RSxLQUFLO3VCQUFDLEVBQUMsS0FBSyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBpbmplY3QsXG4gIEluamVjdGFibGUsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEaXJlY3Rpb25hbGl0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHtcbiAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICBPdmVybGF5LFxuICBPdmVybGF5Q29uZmlnLFxuICBTVEFOREFSRF9EUk9QRE9XTl9CRUxPV19QT1NJVElPTlMsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7X2dldEV2ZW50VGFyZ2V0fSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHttZXJnZSwgcGFydGl0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7c2tpcCwgdGFrZVVudGlsLCBza2lwV2hpbGV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TUVOVV9TVEFDSywgTWVudVN0YWNrfSBmcm9tICcuL21lbnUtc3RhY2snO1xuaW1wb3J0IHtDZGtNZW51VHJpZ2dlckJhc2UsIE1FTlVfVFJJR0dFUn0gZnJvbSAnLi9tZW51LXRyaWdnZXItYmFzZSc7XG5cbi8qKiBUaGUgcHJlZmVycmVkIG1lbnUgcG9zaXRpb25zIGZvciB0aGUgY29udGV4dCBtZW51LiAqL1xuY29uc3QgQ09OVEVYVF9NRU5VX1BPU0lUSU9OUyA9IFNUQU5EQVJEX0RST1BET1dOX0JFTE9XX1BPU0lUSU9OUy5tYXAocG9zaXRpb24gPT4ge1xuICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgZmlyc3QgbWVudSBpdGVtIGluIHRoZSBjb250ZXh0IG1lbnUgaXMgYSB0cmlnZ2VyIHRoZSBzdWJtZW51IG9wZW5zIG9uIGFcbiAgLy8gaG92ZXIgZXZlbnQuIFdlIG9mZnNldCB0aGUgY29udGV4dCBtZW51IDJweCBieSBkZWZhdWx0IHRvIHByZXZlbnQgdGhpcyBmcm9tIG9jY3VycmluZy5cbiAgY29uc3Qgb2Zmc2V0WCA9IHBvc2l0aW9uLm92ZXJsYXlYID09PSAnc3RhcnQnID8gMiA6IC0yO1xuICBjb25zdCBvZmZzZXRZID0gcG9zaXRpb24ub3ZlcmxheVkgPT09ICd0b3AnID8gMiA6IC0yO1xuICByZXR1cm4gey4uLnBvc2l0aW9uLCBvZmZzZXRYLCBvZmZzZXRZfTtcbn0pO1xuXG4vKiogVHJhY2tzIHRoZSBsYXN0IG9wZW4gY29udGV4dCBtZW51IHRyaWdnZXIgYWNyb3NzIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudVRyYWNrZXIge1xuICAvKiogVGhlIGxhc3Qgb3BlbiBjb250ZXh0IG1lbnUgdHJpZ2dlci4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX29wZW5Db250ZXh0TWVudVRyaWdnZXI/OiBDZGtDb250ZXh0TWVudVRyaWdnZXI7XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBwcmV2aW91cyBvcGVuIGNvbnRleHQgbWVudSBhbmQgc2V0IHRoZSBnaXZlbiBvbmUgYXMgYmVpbmcgb3Blbi5cbiAgICogQHBhcmFtIHRyaWdnZXIgVGhlIHRyaWdnZXIgZm9yIHRoZSBjdXJyZW50bHkgb3BlbiBDb250ZXh0IE1lbnUuXG4gICAqL1xuICB1cGRhdGUodHJpZ2dlcjogQ2RrQ29udGV4dE1lbnVUcmlnZ2VyKSB7XG4gICAgaWYgKENvbnRleHRNZW51VHJhY2tlci5fb3BlbkNvbnRleHRNZW51VHJpZ2dlciAhPT0gdHJpZ2dlcikge1xuICAgICAgQ29udGV4dE1lbnVUcmFja2VyLl9vcGVuQ29udGV4dE1lbnVUcmlnZ2VyPy5jbG9zZSgpO1xuICAgICAgQ29udGV4dE1lbnVUcmFja2VyLl9vcGVuQ29udGV4dE1lbnVUcmlnZ2VyID0gdHJpZ2dlcjtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFRoZSBjb29yZGluYXRlcyB3aGVyZSB0aGUgY29udGV4dCBtZW51IHNob3VsZCBvcGVuLiAqL1xuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnVDb29yZGluYXRlcyA9IHt4OiBudW1iZXI7IHk6IG51bWJlcn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCBvcGVucyBhIG1lbnUgd2hlbiBhIHVzZXIgcmlnaHQtY2xpY2tzIHdpdGhpbiBpdHMgaG9zdCBlbGVtZW50LlxuICogSXQgaXMgYXdhcmUgb2YgbmVzdGVkIGNvbnRleHQgbWVudXMgYW5kIHdpbGwgdHJpZ2dlciBvbmx5IHRoZSBsb3dlc3QgbGV2ZWwgbm9uLWRpc2FibGVkIGNvbnRleHQgbWVudS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Nka0NvbnRleHRNZW51VHJpZ2dlckZvcl0nLFxuICBleHBvcnRBczogJ2Nka0NvbnRleHRNZW51VHJpZ2dlckZvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuZGF0YS1jZGstbWVudS1zdGFjay1pZF0nOiAnbnVsbCcsXG4gICAgJyhjb250ZXh0bWVudSknOiAnX29wZW5PbkNvbnRleHRNZW51KCRldmVudCknLFxuICB9LFxuICBpbnB1dHM6IFtcbiAgICB7bmFtZTogJ21lbnVUZW1wbGF0ZVJlZicsIGFsaWFzOiAnY2RrQ29udGV4dE1lbnVUcmlnZ2VyRm9yJ30sXG4gICAge25hbWU6ICdtZW51UG9zaXRpb24nLCBhbGlhczogJ2Nka0NvbnRleHRNZW51UG9zaXRpb24nfSxcbiAgICB7bmFtZTogJ21lbnVEYXRhJywgYWxpYXM6ICdjZGtDb250ZXh0TWVudVRyaWdnZXJEYXRhJ30sXG4gIF0sXG4gIG91dHB1dHM6IFsnb3BlbmVkOiBjZGtDb250ZXh0TWVudU9wZW5lZCcsICdjbG9zZWQ6IGNka0NvbnRleHRNZW51Q2xvc2VkJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBNRU5VX1RSSUdHRVIsIHVzZUV4aXN0aW5nOiBDZGtDb250ZXh0TWVudVRyaWdnZXJ9LFxuICAgIHtwcm92aWRlOiBNRU5VX1NUQUNLLCB1c2VDbGFzczogTWVudVN0YWNrfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2RrQ29udGV4dE1lbnVUcmlnZ2VyIGV4dGVuZHMgQ2RrTWVudVRyaWdnZXJCYXNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqIFRoZSBDREsgb3ZlcmxheSBzZXJ2aWNlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuXG4gIC8qKiBUaGUgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIHBhZ2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpcmVjdGlvbmFsaXR5ID0gaW5qZWN0KERpcmVjdGlvbmFsaXR5LCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAvKiogVGhlIGFwcCdzIGNvbnRleHQgbWVudSB0cmFja2luZyByZWdpc3RyeSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZXh0TWVudVRyYWNrZXIgPSBpbmplY3QoQ29udGV4dE1lbnVUcmFja2VyKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNvbnRleHQgbWVudSBpcyBkaXNhYmxlZC4gKi9cbiAgQElucHV0KHthbGlhczogJ2Nka0NvbnRleHRNZW51RGlzYWJsZWQnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc2V0TWVudVN0YWNrQ2xvc2VMaXN0ZW5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGF0dGFjaGVkIG1lbnUgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cbiAgICogQHBhcmFtIGNvb3JkaW5hdGVzIHdoZXJlIHRvIG9wZW4gdGhlIGNvbnRleHQgbWVudVxuICAgKi9cbiAgb3Blbihjb29yZGluYXRlczogQ29udGV4dE1lbnVDb29yZGluYXRlcykge1xuICAgIHRoaXMuX29wZW4obnVsbCwgY29vcmRpbmF0ZXMpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBjdXJyZW50bHkgb3BlbmVkIGNvbnRleHQgbWVudS4gKi9cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5tZW51U3RhY2suY2xvc2VBbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBjb250ZXh0IG1lbnUgYW5kIGNsb3NlcyBhbnkgcHJldmlvdXNseSBvcGVuIG1lbnVzLlxuICAgKiBAcGFyYW0gZXZlbnQgdGhlIG1vdXNlIGV2ZW50IHdoaWNoIG9wZW5zIHRoZSBjb250ZXh0IG1lbnUuXG4gICAqL1xuICBfb3Blbk9uQ29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIC8vIFByZXZlbnQgdGhlIG5hdGl2ZSBjb250ZXh0IG1lbnUgZnJvbSBvcGVuaW5nIGJlY2F1c2Ugd2UncmUgb3BlbmluZyBhIGN1c3RvbSBvbmUuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvLyBTdG9wIGV2ZW50IHByb3BhZ2F0aW9uIHRvIGVuc3VyZSB0aGF0IG9ubHkgdGhlIGNsb3Nlc3QgZW5hYmxlZCBjb250ZXh0IG1lbnUgb3BlbnMuXG4gICAgICAvLyBPdGhlcndpc2UsIGFueSBjb250ZXh0IG1lbnVzIGF0dGFjaGVkIHRvIGNvbnRhaW5pbmcgZWxlbWVudHMgd291bGQgKmFsc28qIG9wZW4sXG4gICAgICAvLyByZXN1bHRpbmcgaW4gbXVsdGlwbGUgc3RhY2tlZCBjb250ZXh0IG1lbnVzIGJlaW5nIGRpc3BsYXllZC5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICB0aGlzLl9jb250ZXh0TWVudVRyYWNrZXIudXBkYXRlKHRoaXMpO1xuICAgICAgdGhpcy5fb3BlbihldmVudCwge3g6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFl9KTtcblxuICAgICAgLy8gQSBjb250ZXh0IG1lbnUgY2FuIGJlIHRyaWdnZXJlZCB2aWEgYSBtb3VzZSByaWdodCBjbGljayBvciBhIGtleWJvYXJkIHNob3J0Y3V0LlxuICAgICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICB0aGlzLmNoaWxkTWVudT8uZm9jdXNGaXJzdEl0ZW0oJ21vdXNlJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMCkge1xuICAgICAgICB0aGlzLmNoaWxkTWVudT8uZm9jdXNGaXJzdEl0ZW0oJ2tleWJvYXJkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoaWxkTWVudT8uZm9jdXNGaXJzdEl0ZW0oJ3Byb2dyYW0nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB1c2VkIHRvIGNyZWF0ZSB0aGUgb3ZlcmxheS5cbiAgICogQHBhcmFtIGNvb3JkaW5hdGVzIHRoZSBsb2NhdGlvbiB0byBwbGFjZSB0aGUgb3BlbmVkIG1lbnVcbiAgICovXG4gIHByaXZhdGUgX2dldE92ZXJsYXlDb25maWcoY29vcmRpbmF0ZXM6IENvbnRleHRNZW51Q29vcmRpbmF0ZXMpIHtcbiAgICByZXR1cm4gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fZ2V0T3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3koY29vcmRpbmF0ZXMpLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMubWVudVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICBkaXJlY3Rpb246IHRoaXMuX2RpcmVjdGlvbmFsaXR5IHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvc2l0aW9uIHN0cmF0ZWd5IGZvciB0aGUgb3ZlcmxheSB3aGljaCBzcGVjaWZpZXMgd2hlcmUgdG8gcGxhY2UgdGhlIG1lbnUuXG4gICAqIEBwYXJhbSBjb29yZGluYXRlcyB0aGUgbG9jYXRpb24gdG8gcGxhY2UgdGhlIG9wZW5lZCBtZW51XG4gICAqL1xuICBwcml2YXRlIF9nZXRPdmVybGF5UG9zaXRpb25TdHJhdGVneShcbiAgICBjb29yZGluYXRlczogQ29udGV4dE1lbnVDb29yZGluYXRlcyxcbiAgKTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKGNvb3JkaW5hdGVzKVxuICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbigpXG4gICAgICAud2l0aEdyb3dBZnRlck9wZW4oKVxuICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5tZW51UG9zaXRpb24gPz8gQ09OVEVYVF9NRU5VX1BPU0lUSU9OUyk7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIHRoZSBtZW51IHN0YWNrIGNsb3NlIGV2ZW50cyBhbmQgY2xvc2UgdGhpcyBtZW51IHdoZW4gcmVxdWVzdGVkLiAqL1xuICBwcml2YXRlIF9zZXRNZW51U3RhY2tDbG9zZUxpc3RlbmVyKCkge1xuICAgIHRoaXMubWVudVN0YWNrLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpLnN1YnNjcmliZSgoe2l0ZW19KSA9PiB7XG4gICAgICBpZiAoaXRlbSA9PT0gdGhpcy5jaGlsZE1lbnUgJiYgdGhpcy5pc09wZW4oKSkge1xuICAgICAgICB0aGlzLmNsb3NlZC5uZXh0KCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiEuZGV0YWNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBvdmVybGF5cyBvdXRzaWRlIHBvaW50ZXIgZXZlbnRzIHN0cmVhbSBhbmQgaGFuZGxlIGNsb3Npbmcgb3V0IHRoZSBzdGFjayBpZiBhXG4gICAqIGNsaWNrIG9jY3VycyBvdXRzaWRlIHRoZSBtZW51cy5cbiAgICogQHBhcmFtIHVzZXJFdmVudCBVc2VyLWdlbmVyYXRlZCBldmVudCB0aGF0IG9wZW5lZCB0aGUgbWVudS5cbiAgICovXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvT3V0c2lkZUNsaWNrcyh1c2VyRXZlbnQ6IE1vdXNlRXZlbnQgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgbGV0IG91dHNpZGVDbGlja3MgPSB0aGlzLm92ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKTtcblxuICAgICAgaWYgKHVzZXJFdmVudCkge1xuICAgICAgICBjb25zdCBbYXV4Q2xpY2tzLCBub25BdXhDbGlja3NdID0gcGFydGl0aW9uKG91dHNpZGVDbGlja3MsICh7dHlwZX0pID0+IHR5cGUgPT09ICdhdXhjbGljaycpO1xuICAgICAgICBvdXRzaWRlQ2xpY2tzID0gbWVyZ2UoXG4gICAgICAgICAgLy8gVXNpbmcgYSBtb3VzZSwgdGhlIGBjb250ZXh0bWVudWAgZXZlbnQgY2FuIGZpcmUgZWl0aGVyIHdoZW4gcHJlc3NpbmcgdGhlIHJpZ2h0IGJ1dHRvblxuICAgICAgICAgIC8vIG9yIGxlZnQgYnV0dG9uICsgY29udHJvbC4gTW9zdCBicm93c2VycyB3b24ndCBkaXNwYXRjaCBhIGBjbGlja2AgZXZlbnQgcmlnaHQgYWZ0ZXJcbiAgICAgICAgICAvLyBhIGBjb250ZXh0bWVudWAgZXZlbnQgdHJpZ2dlcmVkIGJ5IGxlZnQgYnV0dG9uICsgY29udHJvbCwgYnV0IFNhZmFyaSB3aWxsIChzZWUgIzI3ODMyKS5cbiAgICAgICAgICAvLyBUaGlzIGNsb3NlcyB0aGUgbWVudSBpbW1lZGlhdGVseS4gVG8gd29yayBhcm91bmQgaXQsIHdlIGNoZWNrIHRoYXQgYm90aCB0aGUgdHJpZ2dlcmluZ1xuICAgICAgICAgIC8vIGV2ZW50IGFuZCB0aGUgY3VycmVudCBvdXRzaWRlIGNsaWNrIGV2ZW50IGJvdGggaGFkIHRoZSBjb250cm9sIGtleSBwcmVzc2VkLCBhbmQgdGhhdFxuICAgICAgICAgIC8vIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3Qgb3V0c2lkZSBjbGljayBldmVudC5cbiAgICAgICAgICBub25BdXhDbGlja3MucGlwZShcbiAgICAgICAgICAgIHNraXBXaGlsZSgoZXZlbnQsIGluZGV4KSA9PiB1c2VyRXZlbnQuY3RybEtleSAmJiBpbmRleCA9PT0gMCAmJiBldmVudC5jdHJsS2V5KSxcbiAgICAgICAgICApLFxuXG4gICAgICAgICAgLy8gSWYgdGhlIG1lbnUgd2FzIHRyaWdnZXJlZCBieSB0aGUgYGNvbnRleHRtZW51YCBldmVudCwgc2tpcCB0aGUgZmlyc3QgYGF1eGNsaWNrYCBldmVudFxuICAgICAgICAgIC8vIGJlY2F1c2UgaXQgZmlyZXMgd2hlbiB0aGUgbW91c2UgaXMgcmVsZWFzZWQgb24gdGhlIHNhbWUgY2xpY2sgdGhhdCBvcGVuZWQgdGhlIG1lbnUuXG4gICAgICAgICAgYXV4Q2xpY2tzLnBpcGUoc2tpcCgxKSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG91dHNpZGVDbGlja3MucGlwZSh0YWtlVW50aWwodGhpcy5zdG9wT3V0c2lkZUNsaWNrc0xpc3RlbmVyKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRWxlbWVudEluc2lkZU1lbnVTdGFjayhfZ2V0RXZlbnRUYXJnZXQoZXZlbnQpISkpIHtcbiAgICAgICAgICB0aGlzLm1lbnVTdGFjay5jbG9zZUFsbCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbiB0aGUgYXR0YWNoZWQgbWVudSBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLlxuICAgKiBAcGFyYW0gdXNlckV2ZW50IFVzZXItZ2VuZXJhdGVkIGV2ZW50IHRoYXQgb3BlbmVkIHRoZSBtZW51XG4gICAqIEBwYXJhbSBjb29yZGluYXRlcyB3aGVyZSB0byBvcGVuIHRoZSBjb250ZXh0IG1lbnVcbiAgICovXG4gIHByaXZhdGUgX29wZW4odXNlckV2ZW50OiBNb3VzZUV2ZW50IHwgbnVsbCwgY29vcmRpbmF0ZXM6IENvbnRleHRNZW51Q29vcmRpbmF0ZXMpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgLy8gc2luY2Ugd2UncmUgbW92aW5nIHRoaXMgbWVudSB3ZSBuZWVkIHRvIGNsb3NlIGFueSBzdWJtZW51cyBmaXJzdCBvdGhlcndpc2UgdGhleSBlbmQgdXBcbiAgICAgIC8vIGRpc2Nvbm5lY3RlZCBmcm9tIHRoaXMgb25lLlxuICAgICAgdGhpcy5tZW51U3RhY2suY2xvc2VTdWJNZW51T2YodGhpcy5jaGlsZE1lbnUhKTtcblxuICAgICAgKFxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5XG4gICAgICApLnNldE9yaWdpbihjb29yZGluYXRlcyk7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYhLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbmVkLm5leHQoKTtcblxuICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAoXG4gICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5XG4gICAgICAgICkuc2V0T3JpZ2luKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKGNvb3JkaW5hdGVzKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2godGhpcy5nZXRNZW51Q29udGVudFBvcnRhbCgpKTtcbiAgICAgIHRoaXMuX3N1YnNjcmliZVRvT3V0c2lkZUNsaWNrcyh1c2VyRXZlbnQpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,28 +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 { ENTER, SPACE } from '@angular/cdk/keycodes';
9
- /** Checks whether a keyboard event will trigger a native `click` event on an element. */
10
- export function eventDispatchesNativeClick(elementRef, event) {
11
- // Synthetic events won't trigger clicks.
12
- if (!event.isTrusted) {
13
- return false;
14
- }
15
- const el = elementRef.nativeElement;
16
- const keyCode = event.keyCode;
17
- // Buttons trigger clicks both on space and enter events.
18
- if (el.nodeName === 'BUTTON' && !el.disabled) {
19
- return keyCode === ENTER || keyCode === SPACE;
20
- }
21
- // Links only trigger clicks on enter.
22
- if (el.nodeName === 'A') {
23
- return keyCode === ENTER;
24
- }
25
- // Any other elements won't dispatch clicks from keyboard events.
26
- return false;
27
- }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGV0ZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9tZW51L2V2ZW50LWRldGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFHSCxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELHlGQUF5RjtBQUN6RixNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLFVBQW1DLEVBQ25DLEtBQW9CO0lBRXBCLHlDQUF5QztJQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUU5Qix5REFBeUQ7SUFDekQsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFFLEVBQXdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEUsT0FBTyxPQUFPLEtBQUssS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUM7SUFDaEQsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDeEIsT0FBTyxPQUFPLEtBQUssS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxpRUFBaUU7SUFDakUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RWxlbWVudFJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0VOVEVSLCBTUEFDRX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcblxuLyoqIENoZWNrcyB3aGV0aGVyIGEga2V5Ym9hcmQgZXZlbnQgd2lsbCB0cmlnZ2VyIGEgbmF0aXZlIGBjbGlja2AgZXZlbnQgb24gYW4gZWxlbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudERpc3BhdGNoZXNOYXRpdmVDbGljayhcbiAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuKTogYm9vbGVhbiB7XG4gIC8vIFN5bnRoZXRpYyBldmVudHMgd29uJ3QgdHJpZ2dlciBjbGlja3MuXG4gIGlmICghZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWwgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gIC8vIEJ1dHRvbnMgdHJpZ2dlciBjbGlja3MgYm90aCBvbiBzcGFjZSBhbmQgZW50ZXIgZXZlbnRzLlxuICBpZiAoZWwubm9kZU5hbWUgPT09ICdCVVRUT04nICYmICEoZWwgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmRpc2FibGVkKSB7XG4gICAgcmV0dXJuIGtleUNvZGUgPT09IEVOVEVSIHx8IGtleUNvZGUgPT09IFNQQUNFO1xuICB9XG5cbiAgLy8gTGlua3Mgb25seSB0cmlnZ2VyIGNsaWNrcyBvbiBlbnRlci5cbiAgaWYgKGVsLm5vZGVOYW1lID09PSAnQScpIHtcbiAgICByZXR1cm4ga2V5Q29kZSA9PT0gRU5URVI7XG4gIH1cblxuICAvLyBBbnkgb3RoZXIgZWxlbWVudHMgd29uJ3QgZGlzcGF0Y2ggY2xpY2tzIGZyb20ga2V5Ym9hcmQgZXZlbnRzLlxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=
@@ -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 * from './public-api';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL21lbnUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,204 +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 { Directive, inject, Injectable, InjectionToken, NgZone } from '@angular/core';
9
- import { fromEvent, Subject } from 'rxjs';
10
- import { filter, takeUntil } from 'rxjs/operators';
11
- import { throwMissingMenuReference, throwMissingPointerFocusTracker } from './menu-errors';
12
- import * as i0 from "@angular/core";
13
- /** Injection token used for an implementation of MenuAim. */
14
- export const MENU_AIM = new InjectionToken('cdk-menu-aim');
15
- /** Capture every nth mouse move event. */
16
- const MOUSE_MOVE_SAMPLE_FREQUENCY = 3;
17
- /** The number of mouse move events to track. */
18
- const NUM_POINTS = 5;
19
- /**
20
- * How long to wait before closing a sibling menu if a user stops short of the submenu they were
21
- * predicted to go into.
22
- */
23
- const CLOSE_DELAY = 300;
24
- /** Calculate the slope between point a and b. */
25
- function getSlope(a, b) {
26
- return (b.y - a.y) / (b.x - a.x);
27
- }
28
- /** Calculate the y intercept for the given point and slope. */
29
- function getYIntercept(point, slope) {
30
- return point.y - slope * point.x;
31
- }
32
- /**
33
- * Whether the given mouse trajectory line defined by the slope and y intercept falls within the
34
- * submenu as defined by `submenuPoints`
35
- * @param submenuPoints the submenu DOMRect points.
36
- * @param m the slope of the trajectory line.
37
- * @param b the y intercept of the trajectory line.
38
- * @return true if any point on the line falls within the submenu.
39
- */
40
- function isWithinSubmenu(submenuPoints, m, b) {
41
- const { left, right, top, bottom } = submenuPoints;
42
- // Check for intersection with each edge of the submenu (left, right, top, bottom)
43
- // by fixing one coordinate to that edge's coordinate (either x or y) and checking if the
44
- // other coordinate is within bounds.
45
- return ((m * left + b >= top && m * left + b <= bottom) ||
46
- (m * right + b >= top && m * right + b <= bottom) ||
47
- ((top - b) / m >= left && (top - b) / m <= right) ||
48
- ((bottom - b) / m >= left && (bottom - b) / m <= right));
49
- }
50
- /**
51
- * TargetMenuAim predicts if a user is moving into a submenu. It calculates the
52
- * trajectory of the user's mouse movement in the current menu to determine if the
53
- * mouse is moving towards an open submenu.
54
- *
55
- * The determination is made by calculating the slope of the users last NUM_POINTS moves where each
56
- * pair of points determines if the trajectory line points into the submenu. It uses consensus
57
- * approach by checking if at least NUM_POINTS / 2 pairs determine that the user is moving towards
58
- * to submenu.
59
- */
60
- export class TargetMenuAim {
61
- constructor() {
62
- /** The Angular zone. */
63
- this._ngZone = inject(NgZone);
64
- /** The last NUM_POINTS mouse move events. */
65
- this._points = [];
66
- /** Emits when this service is destroyed. */
67
- this._destroyed = new Subject();
68
- }
69
- ngOnDestroy() {
70
- this._destroyed.next();
71
- this._destroyed.complete();
72
- }
73
- /**
74
- * Set the Menu and its PointerFocusTracker.
75
- * @param menu The menu that this menu aim service controls.
76
- * @param pointerTracker The `PointerFocusTracker` for the given menu.
77
- */
78
- initialize(menu, pointerTracker) {
79
- this._menu = menu;
80
- this._pointerTracker = pointerTracker;
81
- this._subscribeToMouseMoves();
82
- }
83
- /**
84
- * Calls the `doToggle` callback when it is deemed that the user is not moving towards
85
- * the submenu.
86
- * @param doToggle the function called when the user is not moving towards the submenu.
87
- */
88
- toggle(doToggle) {
89
- // If the menu is horizontal the sub-menus open below and there is no risk of premature
90
- // closing of any sub-menus therefore we automatically resolve the callback.
91
- if (this._menu.orientation === 'horizontal') {
92
- doToggle();
93
- }
94
- this._checkConfigured();
95
- const siblingItemIsWaiting = !!this._timeoutId;
96
- const hasPoints = this._points.length > 1;
97
- if (hasPoints && !siblingItemIsWaiting) {
98
- if (this._isMovingToSubmenu()) {
99
- this._startTimeout(doToggle);
100
- }
101
- else {
102
- doToggle();
103
- }
104
- }
105
- else if (!siblingItemIsWaiting) {
106
- doToggle();
107
- }
108
- }
109
- /**
110
- * Start the delayed toggle handler if one isn't running already.
111
- *
112
- * The delayed toggle handler executes the `doToggle` callback after some period of time iff the
113
- * users mouse is on an item in the current menu.
114
- *
115
- * @param doToggle the function called when the user is not moving towards the submenu.
116
- */
117
- _startTimeout(doToggle) {
118
- // If the users mouse is moving towards a submenu we don't want to immediately resolve.
119
- // Wait for some period of time before determining if the previous menu should close in
120
- // cases where the user may have moved towards the submenu but stopped on a sibling menu
121
- // item intentionally.
122
- const timeoutId = setTimeout(() => {
123
- // Resolve if the user is currently moused over some element in the root menu
124
- if (this._pointerTracker.activeElement && timeoutId === this._timeoutId) {
125
- doToggle();
126
- }
127
- this._timeoutId = null;
128
- }, CLOSE_DELAY);
129
- this._timeoutId = timeoutId;
130
- }
131
- /** Whether the user is heading towards the open submenu. */
132
- _isMovingToSubmenu() {
133
- const submenuPoints = this._getSubmenuBounds();
134
- if (!submenuPoints) {
135
- return false;
136
- }
137
- let numMoving = 0;
138
- const currPoint = this._points[this._points.length - 1];
139
- // start from the second last point and calculate the slope between each point and the last
140
- // point.
141
- for (let i = this._points.length - 2; i >= 0; i--) {
142
- const previous = this._points[i];
143
- const slope = getSlope(currPoint, previous);
144
- if (isWithinSubmenu(submenuPoints, slope, getYIntercept(currPoint, slope))) {
145
- numMoving++;
146
- }
147
- }
148
- return numMoving >= Math.floor(NUM_POINTS / 2);
149
- }
150
- /** Get the bounding DOMRect for the open submenu. */
151
- _getSubmenuBounds() {
152
- return this._pointerTracker?.previousElement?.getMenu()?.nativeElement.getBoundingClientRect();
153
- }
154
- /**
155
- * Check if a reference to the PointerFocusTracker and menu element is provided.
156
- * @throws an error if neither reference is provided.
157
- */
158
- _checkConfigured() {
159
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
160
- if (!this._pointerTracker) {
161
- throwMissingPointerFocusTracker();
162
- }
163
- if (!this._menu) {
164
- throwMissingMenuReference();
165
- }
166
- }
167
- }
168
- /** Subscribe to the root menus mouse move events and update the tracked mouse points. */
169
- _subscribeToMouseMoves() {
170
- this._ngZone.runOutsideAngular(() => {
171
- fromEvent(this._menu.nativeElement, 'mousemove')
172
- .pipe(filter((_, index) => index % MOUSE_MOVE_SAMPLE_FREQUENCY === 0), takeUntil(this._destroyed))
173
- .subscribe((event) => {
174
- this._points.push({ x: event.clientX, y: event.clientY });
175
- if (this._points.length > NUM_POINTS) {
176
- this._points.shift();
177
- }
178
- });
179
- });
180
- }
181
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: TargetMenuAim, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
182
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: TargetMenuAim }); }
183
- }
184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: TargetMenuAim, decorators: [{
185
- type: Injectable
186
- }] });
187
- /**
188
- * CdkTargetMenuAim is a provider for the TargetMenuAim service. It can be added to an
189
- * element with either the `cdkMenu` or `cdkMenuBar` directive and child menu items.
190
- */
191
- export class CdkTargetMenuAim {
192
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkTargetMenuAim, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
193
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0-next.2", type: CdkTargetMenuAim, isStandalone: true, selector: "[cdkTargetMenuAim]", providers: [{ provide: MENU_AIM, useClass: TargetMenuAim }], exportAs: ["cdkTargetMenuAim"], ngImport: i0 }); }
194
- }
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: CdkTargetMenuAim, decorators: [{
196
- type: Directive,
197
- args: [{
198
- selector: '[cdkTargetMenuAim]',
199
- exportAs: 'cdkTargetMenuAim',
200
- standalone: true,
201
- providers: [{ provide: MENU_AIM, useClass: TargetMenuAim }],
202
- }]
203
- }] });
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1haW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL21lbnUvbWVudS1haW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqRCxPQUFPLEVBQUMseUJBQXlCLEVBQUUsK0JBQStCLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBdUJ6Riw2REFBNkQ7QUFDN0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxDQUFVLGNBQWMsQ0FBQyxDQUFDO0FBRXBFLDBDQUEwQztBQUMxQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQztBQUV0QyxnREFBZ0Q7QUFDaEQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRXJCOzs7R0FHRztBQUNILE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztBQVF4QixpREFBaUQ7QUFDakQsU0FBUyxRQUFRLENBQUMsQ0FBUSxFQUFFLENBQVE7SUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxTQUFTLGFBQWEsQ0FBQyxLQUFZLEVBQUUsS0FBYTtJQUNoRCxPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUtEOzs7Ozs7O0dBT0c7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Q0FBQztxSEEvSVUsYUFBYTt5SEFBYixhQUFhOztrR0FBYixhQUFhO2tCQUR6QixVQUFVOztBQW1KWDs7O0dBR0c7QUFPSCxNQUFNLE9BQU8sZ0JBQWdCO3FIQUFoQixnQkFBZ0I7eUdBQWhCLGdCQUFnQixpRUFGaEIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBQyxDQUFDOztrR0FFOUMsZ0JBQWdCO2tCQU41QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBQyxDQUFDO2lCQUMxRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgTmdab25lLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtmcm9tRXZlbnQsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtGb2N1c2FibGVFbGVtZW50LCBQb2ludGVyRm9jdXNUcmFja2VyfSBmcm9tICcuL3BvaW50ZXItZm9jdXMtdHJhY2tlcic7XG5pbXBvcnQge01lbnV9IGZyb20gJy4vbWVudS1pbnRlcmZhY2UnO1xuaW1wb3J0IHt0aHJvd01pc3NpbmdNZW51UmVmZXJlbmNlLCB0aHJvd01pc3NpbmdQb2ludGVyRm9jdXNUcmFja2VyfSBmcm9tICcuL21lbnUtZXJyb3JzJztcblxuLyoqXG4gKiBNZW51QWltIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyBpZiBhIHNpYmxpbmcgbWVudWl0ZW0ncyBtZW51IHNob3VsZCBiZSBjbG9zZWQgd2hlbiBhXG4gKiBUb2dnbGVyIGl0ZW0gaXMgaG92ZXJlZCBpbnRvLiBJdCBpcyB1cCB0byB0aGUgaG92ZXJlZCBpbiBpdGVtIHRvIGNhbGwgdGhlIE1lbnVBaW0gc2VydmljZSBpblxuICogb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIGl0IG1heSBwZXJmb3JtIGl0cyBjbG9zZSBhY3Rpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVBaW0ge1xuICAvKipcbiAgICogU2V0IHRoZSBNZW51IGFuZCBpdHMgUG9pbnRlckZvY3VzVHJhY2tlci5cbiAgICogQHBhcmFtIG1lbnUgVGhlIG1lbnUgdGhhdCB0aGlzIG1lbnUgYWltIHNlcnZpY2UgY29udHJvbHMuXG4gICAqIEBwYXJhbSBwb2ludGVyVHJhY2tlciBUaGUgYFBvaW50ZXJGb2N1c1RyYWNrZXJgIGZvciB0aGUgZ2l2ZW4gbWVudS5cbiAgICovXG4gIGluaXRpYWxpemUobWVudTogTWVudSwgcG9pbnRlclRyYWNrZXI6IFBvaW50ZXJGb2N1c1RyYWNrZXI8Rm9jdXNhYmxlRWxlbWVudCAmIFRvZ2dsZXI+KTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbHMgdGhlIGBkb1RvZ2dsZWAgY2FsbGJhY2sgd2hlbiBpdCBpcyBkZWVtZWQgdGhhdCB0aGUgdXNlciBpcyBub3QgbW92aW5nIHRvd2FyZHNcbiAgICogdGhlIHN1Ym1lbnUuXG4gICAqIEBwYXJhbSBkb1RvZ2dsZSB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHVzZXIgaXMgbm90IG1vdmluZyB0b3dhcmRzIHRoZSBzdWJtZW51LlxuICAgKi9cbiAgdG9nZ2xlKGRvVG9nZ2xlOiAoKSA9PiB2b2lkKTogdm9pZDtcbn1cblxuLyoqIEluamVjdGlvbiB0b2tlbiB1c2VkIGZvciBhbiBpbXBsZW1lbnRhdGlvbiBvZiBNZW51QWltLiAqL1xuZXhwb3J0IGNvbnN0IE1FTlVfQUlNID0gbmV3IEluamVjdGlvblRva2VuPE1lbnVBaW0+KCdjZGstbWVudS1haW0nKTtcblxuLyoqIENhcHR1cmUgZXZlcnkgbnRoIG1vdXNlIG1vdmUgZXZlbnQuICovXG5jb25zdCBNT1VTRV9NT1ZFX1NBTVBMRV9GUkVRVUVOQ1kgPSAzO1xuXG4vKiogVGhlIG51bWJlciBvZiBtb3VzZSBtb3ZlIGV2ZW50cyB0byB0cmFjay4gKi9cbmNvbnN0IE5VTV9QT0lOVFMgPSA1O1xuXG4vKipcbiAqIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIGNsb3NpbmcgYSBzaWJsaW5nIG1lbnUgaWYgYSB1c2VyIHN0b3BzIHNob3J0IG9mIHRoZSBzdWJtZW51IHRoZXkgd2VyZVxuICogcHJlZGljdGVkIHRvIGdvIGludG8uXG4gKi9cbmNvbnN0IENMT1NFX0RFTEFZID0gMzAwO1xuXG4vKiogQW4gZWxlbWVudCB3aGljaCB3aGVuIGhvdmVyZWQgb3ZlciBtYXkgb3BlbiBvciBjbG9zZSBhIG1lbnUuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvZ2dsZXIge1xuICAvKiogR2V0cyB0aGUgb3BlbiBtZW51LCBvciB1bmRlZmluZWQgaWYgbm8gbWVudSBpcyBvcGVuLiAqL1xuICBnZXRNZW51KCk6IE1lbnUgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBDYWxjdWxhdGUgdGhlIHNsb3BlIGJldHdlZW4gcG9pbnQgYSBhbmQgYi4gKi9cbmZ1bmN0aW9uIGdldFNsb3BlKGE6IFBvaW50LCBiOiBQb2ludCkge1xuICByZXR1cm4gKGIueSAtIGEueSkgLyAoYi54IC0gYS54KTtcbn1cblxuLyoqIENhbGN1bGF0ZSB0aGUgeSBpbnRlcmNlcHQgZm9yIHRoZSBnaXZlbiBwb2ludCBhbmQgc2xvcGUuICovXG5mdW5jdGlvbiBnZXRZSW50ZXJjZXB0KHBvaW50OiBQb2ludCwgc2xvcGU6IG51bWJlcikge1xuICByZXR1cm4gcG9pbnQueSAtIHNsb3BlICogcG9pbnQueDtcbn1cblxuLyoqIFJlcHJlc2VudHMgYSBjb29yZGluYXRlIG9mIG1vdXNlIHRyYXZlbC4gKi9cbnR5cGUgUG9pbnQgPSB7eDogbnVtYmVyOyB5OiBudW1iZXJ9O1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGdpdmVuIG1vdXNlIHRyYWplY3RvcnkgbGluZSBkZWZpbmVkIGJ5IHRoZSBzbG9wZSBhbmQgeSBpbnRlcmNlcHQgZmFsbHMgd2l0aGluIHRoZVxuICogc3VibWVudSBhcyBkZWZpbmVkIGJ5IGBzdWJtZW51UG9pbnRzYFxuICogQHBhcmFtIHN1Ym1lbnVQb2ludHMgdGhlIHN1Ym1lbnUgRE9NUmVjdCBwb2ludHMuXG4gKiBAcGFyYW0gbSB0aGUgc2xvcGUgb2YgdGhlIHRyYWplY3RvcnkgbGluZS5cbiAqIEBwYXJhbSBiIHRoZSB5IGludGVyY2VwdCBvZiB0aGUgdHJhamVjdG9yeSBsaW5lLlxuICogQHJldHVybiB0cnVlIGlmIGFueSBwb2ludCBvbiB0aGUgbGluZSBmYWxscyB3aXRoaW4gdGhlIHN1Ym1lbnUuXG4gKi9cbmZ1bmN0aW9uIGlzV2l0aGluU3VibWVudShzdWJtZW51UG9pbnRzOiBET01SZWN0LCBtOiBudW1iZXIsIGI6IG51bWJlcikge1xuICBjb25zdCB7bGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tfSA9IHN1Ym1lbnVQb2ludHM7XG5cbiAgLy8gQ2hlY2sgZm9yIGludGVyc2VjdGlvbiB3aXRoIGVhY2ggZWRnZSBvZiB0aGUgc3VibWVudSAobGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tKVxuICAvLyBieSBmaXhpbmcgb25lIGNvb3JkaW5hdGUgdG8gdGhhdCBlZGdlJ3MgY29vcmRpbmF0ZSAoZWl0aGVyIHggb3IgeSkgYW5kIGNoZWNraW5nIGlmIHRoZVxuICAvLyBvdGhlciBjb29yZGluYXRlIGlzIHdpdGhpbiBib3VuZHMuXG4gIHJldHVybiAoXG4gICAgKG0gKiBsZWZ0ICsgYiA+PSB0b3AgJiYgbSAqIGxlZnQgKyBiIDw9IGJvdHRvbSkgfHxcbiAgICAobSAqIHJpZ2h0ICsgYiA+PSB0b3AgJiYgbSAqIHJpZ2h0ICsgYiA8PSBib3R0b20pIHx8XG4gICAgKCh0b3AgLSBiKSAvIG0gPj0gbGVmdCAmJiAodG9wIC0gYikgLyBtIDw9IHJpZ2h0KSB8fFxuICAgICgoYm90dG9tIC0gYikgLyBtID49IGxlZnQgJiYgKGJvdHRvbSAtIGIpIC8gbSA8PSByaWdodClcbiAgKTtcbn1cblxuLyoqXG4gKiBUYXJnZXRNZW51QWltIHByZWRpY3RzIGlmIGEgdXNlciBpcyBtb3ZpbmcgaW50byBhIHN1Ym1lbnUuIEl0IGNhbGN1bGF0ZXMgdGhlXG4gKiB0cmFqZWN0b3J5IG9mIHRoZSB1c2VyJ3MgbW91c2UgbW92ZW1lbnQgaW4gdGhlIGN1cnJlbnQgbWVudSB0byBkZXRlcm1pbmUgaWYgdGhlXG4gKiBtb3VzZSBpcyBtb3ZpbmcgdG93YXJkcyBhbiBvcGVuIHN1Ym1lbnUuXG4gKlxuICogVGhlIGRldGVybWluYXRpb24gaXMgbWFkZSBieSBjYWxjdWxhdGluZyB0aGUgc2xvcGUgb2YgdGhlIHVzZXJzIGxhc3QgTlVNX1BPSU5UUyBtb3ZlcyB3aGVyZSBlYWNoXG4gKiBwYWlyIG9mIHBvaW50cyBkZXRlcm1pbmVzIGlmIHRoZSB0cmFqZWN0b3J5IGxpbmUgcG9pbnRzIGludG8gdGhlIHN1Ym1lbnUuIEl0IHVzZXMgY29uc2Vuc3VzXG4gKiBhcHByb2FjaCBieSBjaGVja2luZyBpZiBhdCBsZWFzdCBOVU1fUE9JTlRTIC8gMiBwYWlycyBkZXRlcm1pbmUgdGhhdCB0aGUgdXNlciBpcyBtb3ZpbmcgdG93YXJkc1xuICogdG8gc3VibWVudS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhcmdldE1lbnVBaW0gaW1wbGVtZW50cyBNZW51QWltLCBPbkRlc3Ryb3kge1xuICAvKiogVGhlIEFuZ3VsYXIgem9uZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgLyoqIFRoZSBsYXN0IE5VTV9QT0lOVFMgbW91c2UgbW92ZSBldmVudHMuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BvaW50czogUG9pbnRbXSA9IFtdO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHJvb3QgbWVudSBpbiB3aGljaCB3ZSBhcmUgdHJhY2tpbmcgbW91c2UgbW92ZXMuICovXG4gIHByaXZhdGUgX21lbnU6IE1lbnU7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgcm9vdCBtZW51J3MgbW91c2UgbWFuYWdlci4gKi9cbiAgcHJpdmF0ZSBfcG9pbnRlclRyYWNrZXI6IFBvaW50ZXJGb2N1c1RyYWNrZXI8VG9nZ2xlciAmIEZvY3VzYWJsZUVsZW1lbnQ+O1xuXG4gIC8qKiBUaGUgaWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVvdXQgY2FsbCB3YWl0aW5nIHRvIHJlc29sdmUuICovXG4gIHByaXZhdGUgX3RpbWVvdXRJZDogbnVtYmVyIHwgbnVsbDtcblxuICAvKiogRW1pdHMgd2hlbiB0aGlzIHNlcnZpY2UgaXMgZGVzdHJveWVkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBNZW51IGFuZCBpdHMgUG9pbnRlckZvY3VzVHJhY2tlci5cbiAgICogQHBhcmFtIG1lbnUgVGhlIG1lbnUgdGhhdCB0aGlzIG1lbnUgYWltIHNlcnZpY2UgY29udHJvbHMuXG4gICAqIEBwYXJhbSBwb2ludGVyVHJhY2tlciBUaGUgYFBvaW50ZXJGb2N1c1RyYWNrZXJgIGZvciB0aGUgZ2l2ZW4gbWVudS5cbiAgICovXG4gIGluaXRpYWxpemUobWVudTogTWVudSwgcG9pbnRlclRyYWNrZXI6IFBvaW50ZXJGb2N1c1RyYWNrZXI8Rm9jdXNhYmxlRWxlbWVudCAmIFRvZ2dsZXI+KSB7XG4gICAgdGhpcy5fbWVudSA9IG1lbnU7XG4gICAgdGhpcy5fcG9pbnRlclRyYWNrZXIgPSBwb2ludGVyVHJhY2tlcjtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb01vdXNlTW92ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgYGRvVG9nZ2xlYCBjYWxsYmFjayB3aGVuIGl0IGlzIGRlZW1lZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBtb3ZpbmcgdG93YXJkc1xuICAgKiB0aGUgc3VibWVudS5cbiAgICogQHBhcmFtIGRvVG9nZ2xlIHRoZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgdXNlciBpcyBub3QgbW92aW5nIHRvd2FyZHMgdGhlIHN1Ym1lbnUuXG4gICAqL1xuICB0b2dnbGUoZG9Ub2dnbGU6ICgpID0+IHZvaWQpIHtcbiAgICAvLyBJZiB0aGUgbWVudSBpcyBob3Jpem9udGFsIHRoZSBzdWItbWVudXMgb3BlbiBiZWxvdyBhbmQgdGhlcmUgaXMgbm8gcmlzayBvZiBwcmVtYXR1cmVcbiAgICAvLyBjbG9zaW5nIG9mIGFueSBzdWItbWVudXMgdGhlcmVmb3JlIHdlIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZSB0aGUgY2FsbGJhY2suXG4gICAgaWYgKHRoaXMuX21lbnUub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgZG9Ub2dnbGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGVja0NvbmZpZ3VyZWQoKTtcblxuICAgIGNvbnN0IHNpYmxpbmdJdGVtSXNXYWl0aW5nID0gISF0aGlzLl90aW1lb3V0SWQ7XG4gICAgY29uc3QgaGFzUG9pbnRzID0gdGhpcy5fcG9pbnRzLmxlbmd0aCA+IDE7XG5cbiAgICBpZiAoaGFzUG9pbnRzICYmICFzaWJsaW5nSXRlbUlzV2FpdGluZykge1xuICAgICAgaWYgKHRoaXMuX2lzTW92aW5nVG9TdWJtZW51KCkpIHtcbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lb3V0KGRvVG9nZ2xlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvVG9nZ2xlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghc2libGluZ0l0ZW1Jc1dhaXRpbmcpIHtcbiAgICAgIGRvVG9nZ2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBkZWxheWVkIHRvZ2dsZSBoYW5kbGVyIGlmIG9uZSBpc24ndCBydW5uaW5nIGFscmVhZHkuXG4gICAqXG4gICAqIFRoZSBkZWxheWVkIHRvZ2dsZSBoYW5kbGVyIGV4ZWN1dGVzIHRoZSBgZG9Ub2dnbGVgIGNhbGxiYWNrIGFmdGVyIHNvbWUgcGVyaW9kIG9mIHRpbWUgaWZmIHRoZVxuICAgKiB1c2VycyBtb3VzZSBpcyBvbiBhbiBpdGVtIGluIHRoZSBjdXJyZW50IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBkb1RvZ2dsZSB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHVzZXIgaXMgbm90IG1vdmluZyB0b3dhcmRzIHRoZSBzdWJtZW51LlxuICAgKi9cbiAgcHJpdmF0ZSBfc3RhcnRUaW1lb3V0KGRvVG9nZ2xlOiAoKSA9PiB2b2lkKSB7XG4gICAgLy8gSWYgdGhlIHVzZXJzIG1vdXNlIGlzIG1vdmluZyB0b3dhcmRzIGEgc3VibWVudSB3ZSBkb24ndCB3YW50IHRvIGltbWVkaWF0ZWx5IHJlc29sdmUuXG4gICAgLy8gV2FpdCBmb3Igc29tZSBwZXJpb2Qgb2YgdGltZSBiZWZvcmUgZGV0ZXJtaW5pbmcgaWYgdGhlIHByZXZpb3VzIG1lbnUgc2hvdWxkIGNsb3NlIGluXG4gICAgLy8gY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWF5IGhhdmUgbW92ZWQgdG93YXJkcyB0aGUgc3VibWVudSBidXQgc3RvcHBlZCBvbiBhIHNpYmxpbmcgbWVudVxuICAgIC8vIGl0ZW0gaW50ZW50aW9uYWxseS5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFJlc29sdmUgaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IG1vdXNlZCBvdmVyIHNvbWUgZWxlbWVudCBpbiB0aGUgcm9vdCBtZW51XG4gICAgICBpZiAodGhpcy5fcG9pbnRlclRyYWNrZXIhLmFjdGl2ZUVsZW1lbnQgJiYgdGltZW91dElkID09PSB0aGlzLl90aW1lb3V0SWQpIHtcbiAgICAgICAgZG9Ub2dnbGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgfSwgQ0xPU0VfREVMQVkpIGFzIGFueSBhcyBudW1iZXI7XG5cbiAgICB0aGlzLl90aW1lb3V0SWQgPSB0aW1lb3V0SWQ7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgdXNlciBpcyBoZWFkaW5nIHRvd2FyZHMgdGhlIG9wZW4gc3VibWVudS4gKi9cbiAgcHJpdmF0ZSBfaXNNb3ZpbmdUb1N1Ym1lbnUoKSB7XG4gICAgY29uc3Qgc3VibWVudVBvaW50cyA9IHRoaXMuX2dldFN1Ym1lbnVCb3VuZHMoKTtcbiAgICBpZiAoIXN1Ym1lbnVQb2ludHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgbnVtTW92aW5nID0gMDtcbiAgICBjb25zdCBjdXJyUG9pbnQgPSB0aGlzLl9wb2ludHNbdGhpcy5fcG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIC8vIHN0YXJ0IGZyb20gdGhlIHNlY29uZCBsYXN0IHBvaW50IGFuZCBjYWxjdWxhdGUgdGhlIHNsb3BlIGJldHdlZW4gZWFjaCBwb2ludCBhbmQgdGhlIGxhc3RcbiAgICAvLyBwb2ludC5cbiAgICBmb3IgKGxldCBpID0gdGhpcy5fcG9pbnRzLmxlbmd0aCAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX3BvaW50c1tpXTtcbiAgICAgIGNvbnN0IHNsb3BlID0gZ2V0U2xvcGUoY3VyclBvaW50LCBwcmV2aW91cyk7XG4gICAgICBpZiAoaXNXaXRoaW5TdWJtZW51KHN1Ym1lbnVQb2ludHMsIHNsb3BlLCBnZXRZSW50ZXJjZXB0KGN1cnJQb2ludCwgc2xvcGUpKSkge1xuICAgICAgICBudW1Nb3ZpbmcrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bU1vdmluZyA+PSBNYXRoLmZsb29yKE5VTV9QT0lOVFMgLyAyKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGJvdW5kaW5nIERPTVJlY3QgZm9yIHRoZSBvcGVuIHN1Ym1lbnUuICovXG4gIHByaXZhdGUgX2dldFN1Ym1lbnVCb3VuZHMoKTogRE9NUmVjdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BvaW50ZXJUcmFja2VyPy5wcmV2aW91c0VsZW1lbnQ/LmdldE1lbnUoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHJlZmVyZW5jZSB0byB0aGUgUG9pbnRlckZvY3VzVHJhY2tlciBhbmQgbWVudSBlbGVtZW50IGlzIHByb3ZpZGVkLlxuICAgKiBAdGhyb3dzIGFuIGVycm9yIGlmIG5laXRoZXIgcmVmZXJlbmNlIGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfY2hlY2tDb25maWd1cmVkKCkge1xuICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgIGlmICghdGhpcy5fcG9pbnRlclRyYWNrZXIpIHtcbiAgICAgICAgdGhyb3dNaXNzaW5nUG9pbnRlckZvY3VzVHJhY2tlcigpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9tZW51KSB7XG4gICAgICAgIHRocm93TWlzc2luZ01lbnVSZWZlcmVuY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIHRoZSByb290IG1lbnVzIG1vdXNlIG1vdmUgZXZlbnRzIGFuZCB1cGRhdGUgdGhlIHRyYWNrZWQgbW91c2UgcG9pbnRzLiAqL1xuICBwcml2YXRlIF9zdWJzY3JpYmVUb01vdXNlTW92ZXMoKSB7XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9tZW51Lm5hdGl2ZUVsZW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF86IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpID0+IGluZGV4ICUgTU9VU0VfTU9WRV9TQU1QTEVfRlJFUVVFTkNZID09PSAwKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BvaW50cy5wdXNoKHt4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZfSk7XG4gICAgICAgICAgaWYgKHRoaXMuX3BvaW50cy5sZW5ndGggPiBOVU1fUE9JTlRTKSB7XG4gICAgICAgICAgICB0aGlzLl9wb2ludHMuc2hpZnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ2RrVGFyZ2V0TWVudUFpbSBpcyBhIHByb3ZpZGVyIGZvciB0aGUgVGFyZ2V0TWVudUFpbSBzZXJ2aWNlLiBJdCBjYW4gYmUgYWRkZWQgdG8gYW5cbiAqIGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGBjZGtNZW51YCBvciBgY2RrTWVudUJhcmAgZGlyZWN0aXZlIGFuZCBjaGlsZCBtZW51IGl0ZW1zLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2RrVGFyZ2V0TWVudUFpbV0nLFxuICBleHBvcnRBczogJ2Nka1RhcmdldE1lbnVBaW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFt7cHJvdmlkZTogTUVOVV9BSU0sIHVzZUNsYXNzOiBUYXJnZXRNZW51QWltfV0sXG59KVxuZXhwb3J0IGNsYXNzIENka1RhcmdldE1lbnVBaW0ge31cbiJdfQ==