@angular/cdk 19.0.0-next.1 → 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 (582) 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 +16 -33
  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 +93 -157
  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 +7 -7
  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 +26 -11
  44. package/fesm2022/private.mjs.map +1 -1
  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.map +1 -1
  53. package/fesm2022/testing.mjs.map +1 -1
  54. package/fesm2022/text-field.mjs +46 -40
  55. package/fesm2022/text-field.mjs.map +1 -1
  56. package/fesm2022/tree.mjs +90 -80
  57. package/fesm2022/tree.mjs.map +1 -1
  58. package/layout/index.d.ts +5 -7
  59. package/observers/index.d.ts +2 -2
  60. package/overlay/_index.scss +56 -21
  61. package/overlay/index.d.ts +24 -36
  62. package/overlay-prebuilt.css +1 -1
  63. package/package.json +1 -57
  64. package/portal/index.d.ts +22 -19
  65. package/private/index.d.ts +10 -0
  66. package/schematics/index.d.ts +1 -1
  67. package/schematics/index.js +2 -2
  68. package/schematics/index.mjs +2 -2
  69. package/schematics/ng-add/index.d.ts +1 -1
  70. package/schematics/ng-add/index.js +3 -3
  71. package/schematics/ng-add/index.mjs +3 -3
  72. package/schematics/ng-add/package-config.d.ts +1 -1
  73. package/schematics/ng-add/package-config.js +2 -2
  74. package/schematics/ng-add/package-config.mjs +2 -2
  75. package/schematics/ng-add/schema.d.ts +1 -1
  76. package/schematics/ng-add/schema.js +2 -2
  77. package/schematics/ng-add/schema.mjs +2 -2
  78. package/schematics/ng-generate/drag-drop/index.d.ts +1 -1
  79. package/schematics/ng-generate/drag-drop/index.js +2 -2
  80. package/schematics/ng-generate/drag-drop/index.mjs +2 -2
  81. package/schematics/ng-generate/drag-drop/schema.d.ts +1 -1
  82. package/schematics/ng-generate/drag-drop/schema.js +2 -2
  83. package/schematics/ng-generate/drag-drop/schema.mjs +2 -2
  84. package/schematics/ng-update/data/attribute-selectors.d.ts +1 -1
  85. package/schematics/ng-update/data/attribute-selectors.js +2 -2
  86. package/schematics/ng-update/data/attribute-selectors.mjs +2 -2
  87. package/schematics/ng-update/data/class-names.d.ts +1 -1
  88. package/schematics/ng-update/data/class-names.js +2 -2
  89. package/schematics/ng-update/data/class-names.mjs +2 -2
  90. package/schematics/ng-update/data/constructor-checks.d.ts +1 -1
  91. package/schematics/ng-update/data/constructor-checks.js +2 -2
  92. package/schematics/ng-update/data/constructor-checks.mjs +2 -2
  93. package/schematics/ng-update/data/css-selectors.d.ts +1 -1
  94. package/schematics/ng-update/data/css-selectors.js +2 -2
  95. package/schematics/ng-update/data/css-selectors.mjs +2 -2
  96. package/schematics/ng-update/data/css-tokens.d.ts +1 -1
  97. package/schematics/ng-update/data/css-tokens.js +2 -2
  98. package/schematics/ng-update/data/css-tokens.mjs +2 -2
  99. package/schematics/ng-update/data/element-selectors.d.ts +1 -1
  100. package/schematics/ng-update/data/element-selectors.js +2 -2
  101. package/schematics/ng-update/data/element-selectors.mjs +2 -2
  102. package/schematics/ng-update/data/index.d.ts +1 -1
  103. package/schematics/ng-update/data/index.js +2 -2
  104. package/schematics/ng-update/data/index.mjs +2 -2
  105. package/schematics/ng-update/data/input-names.d.ts +1 -1
  106. package/schematics/ng-update/data/input-names.js +2 -2
  107. package/schematics/ng-update/data/input-names.mjs +2 -2
  108. package/schematics/ng-update/data/method-call-checks.d.ts +1 -1
  109. package/schematics/ng-update/data/method-call-checks.js +2 -2
  110. package/schematics/ng-update/data/method-call-checks.mjs +2 -2
  111. package/schematics/ng-update/data/output-names.d.ts +1 -1
  112. package/schematics/ng-update/data/output-names.js +2 -2
  113. package/schematics/ng-update/data/output-names.mjs +2 -2
  114. package/schematics/ng-update/data/property-names.d.ts +1 -1
  115. package/schematics/ng-update/data/property-names.js +2 -2
  116. package/schematics/ng-update/data/property-names.mjs +2 -2
  117. package/schematics/ng-update/data/symbol-removal.d.ts +1 -1
  118. package/schematics/ng-update/data/symbol-removal.js +2 -2
  119. package/schematics/ng-update/data/symbol-removal.mjs +2 -2
  120. package/schematics/ng-update/devkit-file-system.d.ts +1 -1
  121. package/schematics/ng-update/devkit-file-system.js +2 -2
  122. package/schematics/ng-update/devkit-file-system.mjs +2 -2
  123. package/schematics/ng-update/devkit-migration-rule.d.ts +1 -1
  124. package/schematics/ng-update/devkit-migration-rule.js +2 -2
  125. package/schematics/ng-update/devkit-migration-rule.mjs +2 -2
  126. package/schematics/ng-update/devkit-migration.d.ts +1 -1
  127. package/schematics/ng-update/devkit-migration.js +2 -2
  128. package/schematics/ng-update/devkit-migration.mjs +2 -2
  129. package/schematics/ng-update/find-stylesheets.d.ts +1 -1
  130. package/schematics/ng-update/find-stylesheets.js +2 -2
  131. package/schematics/ng-update/find-stylesheets.mjs +2 -2
  132. package/schematics/ng-update/html-parsing/angular.d.ts +1 -1
  133. package/schematics/ng-update/html-parsing/angular.js +2 -2
  134. package/schematics/ng-update/html-parsing/angular.mjs +2 -2
  135. package/schematics/ng-update/html-parsing/elements.d.ts +1 -1
  136. package/schematics/ng-update/html-parsing/elements.js +2 -2
  137. package/schematics/ng-update/html-parsing/elements.mjs +2 -2
  138. package/schematics/ng-update/index.d.ts +1 -1
  139. package/schematics/ng-update/index.js +2 -2
  140. package/schematics/ng-update/index.mjs +2 -2
  141. package/schematics/ng-update/migrations/attribute-selectors.d.ts +1 -1
  142. package/schematics/ng-update/migrations/attribute-selectors.js +2 -2
  143. package/schematics/ng-update/migrations/attribute-selectors.mjs +2 -2
  144. package/schematics/ng-update/migrations/class-inheritance.d.ts +1 -1
  145. package/schematics/ng-update/migrations/class-inheritance.js +2 -2
  146. package/schematics/ng-update/migrations/class-inheritance.mjs +2 -2
  147. package/schematics/ng-update/migrations/class-names.d.ts +1 -1
  148. package/schematics/ng-update/migrations/class-names.js +2 -2
  149. package/schematics/ng-update/migrations/class-names.mjs +2 -2
  150. package/schematics/ng-update/migrations/constructor-signature.d.ts +1 -1
  151. package/schematics/ng-update/migrations/constructor-signature.js +2 -2
  152. package/schematics/ng-update/migrations/constructor-signature.mjs +2 -2
  153. package/schematics/ng-update/migrations/css-selectors.d.ts +1 -1
  154. package/schematics/ng-update/migrations/css-selectors.js +2 -2
  155. package/schematics/ng-update/migrations/css-selectors.mjs +2 -2
  156. package/schematics/ng-update/migrations/css-tokens.d.ts +1 -1
  157. package/schematics/ng-update/migrations/css-tokens.js +2 -2
  158. package/schematics/ng-update/migrations/css-tokens.mjs +2 -2
  159. package/schematics/ng-update/migrations/element-selectors.d.ts +1 -1
  160. package/schematics/ng-update/migrations/element-selectors.js +2 -2
  161. package/schematics/ng-update/migrations/element-selectors.mjs +2 -2
  162. package/schematics/ng-update/migrations/input-names.d.ts +1 -1
  163. package/schematics/ng-update/migrations/input-names.js +2 -2
  164. package/schematics/ng-update/migrations/input-names.mjs +2 -2
  165. package/schematics/ng-update/migrations/method-call-arguments.d.ts +1 -1
  166. package/schematics/ng-update/migrations/method-call-arguments.js +2 -2
  167. package/schematics/ng-update/migrations/method-call-arguments.mjs +2 -2
  168. package/schematics/ng-update/migrations/misc-template.d.ts +1 -1
  169. package/schematics/ng-update/migrations/misc-template.js +2 -2
  170. package/schematics/ng-update/migrations/misc-template.mjs +2 -2
  171. package/schematics/ng-update/migrations/output-names.d.ts +1 -1
  172. package/schematics/ng-update/migrations/output-names.js +2 -2
  173. package/schematics/ng-update/migrations/output-names.mjs +2 -2
  174. package/schematics/ng-update/migrations/property-names.d.ts +1 -1
  175. package/schematics/ng-update/migrations/property-names.js +2 -2
  176. package/schematics/ng-update/migrations/property-names.mjs +2 -2
  177. package/schematics/ng-update/migrations/symbol-removal.d.ts +1 -1
  178. package/schematics/ng-update/migrations/symbol-removal.js +2 -2
  179. package/schematics/ng-update/migrations/symbol-removal.mjs +2 -2
  180. package/schematics/ng-update/public-api.d.ts +1 -1
  181. package/schematics/ng-update/public-api.js +2 -2
  182. package/schematics/ng-update/public-api.mjs +2 -2
  183. package/schematics/ng-update/typescript/base-types.d.ts +1 -1
  184. package/schematics/ng-update/typescript/base-types.js +2 -2
  185. package/schematics/ng-update/typescript/base-types.mjs +2 -2
  186. package/schematics/ng-update/typescript/imports.d.ts +1 -1
  187. package/schematics/ng-update/typescript/imports.js +2 -2
  188. package/schematics/ng-update/typescript/imports.mjs +2 -2
  189. package/schematics/ng-update/typescript/literal.d.ts +1 -1
  190. package/schematics/ng-update/typescript/literal.js +2 -2
  191. package/schematics/ng-update/typescript/literal.mjs +2 -2
  192. package/schematics/ng-update/typescript/module-specifiers.d.ts +1 -1
  193. package/schematics/ng-update/typescript/module-specifiers.js +2 -2
  194. package/schematics/ng-update/typescript/module-specifiers.mjs +2 -2
  195. package/schematics/ng-update/upgrade-data.d.ts +1 -1
  196. package/schematics/ng-update/upgrade-data.js +2 -2
  197. package/schematics/ng-update/upgrade-data.mjs +2 -2
  198. package/schematics/paths.d.ts +1 -1
  199. package/schematics/paths.js +2 -2
  200. package/schematics/paths.mjs +2 -2
  201. package/schematics/update-tool/component-resource-collector.d.ts +1 -1
  202. package/schematics/update-tool/component-resource-collector.js +2 -2
  203. package/schematics/update-tool/component-resource-collector.mjs +2 -2
  204. package/schematics/update-tool/file-system.d.ts +1 -1
  205. package/schematics/update-tool/file-system.js +2 -2
  206. package/schematics/update-tool/file-system.mjs +2 -2
  207. package/schematics/update-tool/index.d.ts +1 -1
  208. package/schematics/update-tool/index.js +2 -2
  209. package/schematics/update-tool/index.mjs +2 -2
  210. package/schematics/update-tool/logger.d.ts +1 -1
  211. package/schematics/update-tool/logger.js +2 -2
  212. package/schematics/update-tool/logger.mjs +2 -2
  213. package/schematics/update-tool/migration.d.ts +1 -1
  214. package/schematics/update-tool/migration.js +2 -2
  215. package/schematics/update-tool/migration.mjs +2 -2
  216. package/schematics/update-tool/public-api.d.ts +1 -1
  217. package/schematics/update-tool/public-api.js +2 -2
  218. package/schematics/update-tool/public-api.mjs +2 -2
  219. package/schematics/update-tool/target-version.d.ts +1 -1
  220. package/schematics/update-tool/target-version.js +2 -2
  221. package/schematics/update-tool/target-version.mjs +2 -2
  222. package/schematics/update-tool/update-recorder.d.ts +1 -1
  223. package/schematics/update-tool/update-recorder.js +2 -2
  224. package/schematics/update-tool/update-recorder.mjs +2 -2
  225. package/schematics/update-tool/utils/decorators.d.ts +1 -1
  226. package/schematics/update-tool/utils/decorators.js +2 -2
  227. package/schematics/update-tool/utils/decorators.mjs +2 -2
  228. package/schematics/update-tool/utils/diagnostics.d.ts +1 -1
  229. package/schematics/update-tool/utils/diagnostics.js +2 -2
  230. package/schematics/update-tool/utils/diagnostics.mjs +2 -2
  231. package/schematics/update-tool/utils/functions.d.ts +1 -1
  232. package/schematics/update-tool/utils/functions.js +2 -2
  233. package/schematics/update-tool/utils/functions.mjs +2 -2
  234. package/schematics/update-tool/utils/imports.d.ts +1 -1
  235. package/schematics/update-tool/utils/imports.js +2 -2
  236. package/schematics/update-tool/utils/imports.mjs +2 -2
  237. package/schematics/update-tool/utils/line-mappings.d.ts +1 -1
  238. package/schematics/update-tool/utils/line-mappings.js +2 -2
  239. package/schematics/update-tool/utils/line-mappings.mjs +2 -2
  240. package/schematics/update-tool/utils/parse-tsconfig.d.ts +1 -1
  241. package/schematics/update-tool/utils/parse-tsconfig.js +2 -2
  242. package/schematics/update-tool/utils/parse-tsconfig.mjs +2 -2
  243. package/schematics/update-tool/utils/property-name.d.ts +1 -1
  244. package/schematics/update-tool/utils/property-name.js +2 -2
  245. package/schematics/update-tool/utils/property-name.mjs +2 -2
  246. package/schematics/update-tool/utils/virtual-host.d.ts +1 -1
  247. package/schematics/update-tool/utils/virtual-host.js +2 -2
  248. package/schematics/update-tool/utils/virtual-host.mjs +2 -2
  249. package/schematics/update-tool/version-changes.d.ts +1 -1
  250. package/schematics/update-tool/version-changes.js +2 -2
  251. package/schematics/update-tool/version-changes.mjs +2 -2
  252. package/schematics/utils/ast/ng-module-imports.d.ts +1 -1
  253. package/schematics/utils/ast/ng-module-imports.js +2 -2
  254. package/schematics/utils/ast/ng-module-imports.mjs +2 -2
  255. package/schematics/utils/ast.d.ts +1 -1
  256. package/schematics/utils/ast.js +2 -2
  257. package/schematics/utils/ast.mjs +2 -2
  258. package/schematics/utils/build-component.d.ts +1 -1
  259. package/schematics/utils/build-component.js +2 -2
  260. package/schematics/utils/build-component.mjs +2 -2
  261. package/schematics/utils/get-project.d.ts +1 -1
  262. package/schematics/utils/get-project.js +2 -2
  263. package/schematics/utils/get-project.mjs +2 -2
  264. package/schematics/utils/html-manipulation.d.ts +1 -1
  265. package/schematics/utils/html-manipulation.js +2 -2
  266. package/schematics/utils/html-manipulation.mjs +2 -2
  267. package/schematics/utils/index.d.ts +1 -1
  268. package/schematics/utils/index.js +2 -2
  269. package/schematics/utils/index.mjs +2 -2
  270. package/schematics/utils/parse5-element.d.ts +1 -1
  271. package/schematics/utils/parse5-element.js +2 -2
  272. package/schematics/utils/parse5-element.mjs +2 -2
  273. package/schematics/utils/project-index-file.d.ts +1 -1
  274. package/schematics/utils/project-index-file.js +2 -2
  275. package/schematics/utils/project-index-file.mjs +2 -2
  276. package/schematics/utils/project-main-file.d.ts +1 -1
  277. package/schematics/utils/project-main-file.js +2 -2
  278. package/schematics/utils/project-main-file.mjs +2 -2
  279. package/schematics/utils/project-style-file.d.ts +1 -1
  280. package/schematics/utils/project-style-file.js +2 -2
  281. package/schematics/utils/project-style-file.mjs +2 -2
  282. package/schematics/utils/project-targets.d.ts +1 -1
  283. package/schematics/utils/project-targets.js +4 -3
  284. package/schematics/utils/project-targets.mjs +4 -3
  285. package/schematics/utils/project-tsconfig-paths.d.ts +1 -1
  286. package/schematics/utils/project-tsconfig-paths.js +2 -2
  287. package/schematics/utils/project-tsconfig-paths.mjs +2 -2
  288. package/schematics/utils/schematic-options.d.ts +1 -1
  289. package/schematics/utils/schematic-options.js +2 -2
  290. package/schematics/utils/schematic-options.mjs +2 -2
  291. package/scrolling/index.d.ts +19 -38
  292. package/stepper/index.d.ts +16 -69
  293. package/table/index.d.ts +41 -56
  294. package/text-field/index.d.ts +6 -9
  295. package/tree/index.d.ts +17 -16
  296. package/esm2022/a11y/a11y-module.mjs +0 -31
  297. package/esm2022/a11y/a11y_public_index.mjs +0 -5
  298. package/esm2022/a11y/aria-describer/aria-describer.mjs +0 -232
  299. package/esm2022/a11y/aria-describer/aria-reference.mjs +0 -47
  300. package/esm2022/a11y/fake-event-detection.mjs +0 -29
  301. package/esm2022/a11y/focus-monitor/focus-monitor.mjs +0 -468
  302. package/esm2022/a11y/focus-trap/configurable-focus-trap-config.mjs +0 -9
  303. package/esm2022/a11y/focus-trap/configurable-focus-trap-factory.mjs +0 -54
  304. package/esm2022/a11y/focus-trap/configurable-focus-trap.mjs +0 -51
  305. package/esm2022/a11y/focus-trap/event-listener-inert-strategy.mjs +0 -61
  306. package/esm2022/a11y/focus-trap/focus-trap-inert-strategy.mjs +0 -11
  307. package/esm2022/a11y/focus-trap/focus-trap-manager.mjs +0 -53
  308. package/esm2022/a11y/focus-trap/focus-trap.mjs +0 -396
  309. package/esm2022/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +0 -116
  310. package/esm2022/a11y/index.mjs +0 -9
  311. package/esm2022/a11y/input-modality/input-modality-detector.mjs +0 -176
  312. package/esm2022/a11y/interactivity-checker/interactivity-checker.mjs +0 -238
  313. package/esm2022/a11y/key-manager/activedescendant-key-manager.mjs +0 -20
  314. package/esm2022/a11y/key-manager/focus-key-manager.mjs +0 -29
  315. package/esm2022/a11y/key-manager/list-key-manager.mjs +0 -357
  316. package/esm2022/a11y/key-manager/noop-tree-key-manager.mjs +0 -94
  317. package/esm2022/a11y/key-manager/tree-key-manager-strategy.mjs +0 -9
  318. package/esm2022/a11y/key-manager/tree-key-manager.mjs +0 -345
  319. package/esm2022/a11y/key-manager/typeahead.mjs +0 -91
  320. package/esm2022/a11y/live-announcer/live-announcer-tokens.mjs +0 -19
  321. package/esm2022/a11y/live-announcer/live-announcer.mjs +0 -210
  322. package/esm2022/a11y/public-api.mjs +0 -30
  323. package/esm2022/accordion/accordion-item.mjs +0 -162
  324. package/esm2022/accordion/accordion-module.mjs +0 -24
  325. package/esm2022/accordion/accordion.mjs +0 -65
  326. package/esm2022/accordion/accordion_public_index.mjs +0 -5
  327. package/esm2022/accordion/index.mjs +0 -9
  328. package/esm2022/accordion/public-api.mjs +0 -11
  329. package/esm2022/bidi/bidi-module.mjs +0 -23
  330. package/esm2022/bidi/bidi_public_index.mjs +0 -5
  331. package/esm2022/bidi/dir-document-token.mjs +0 -33
  332. package/esm2022/bidi/dir.mjs +0 -70
  333. package/esm2022/bidi/directionality.mjs +0 -52
  334. package/esm2022/bidi/index.mjs +0 -9
  335. package/esm2022/bidi/public-api.mjs +0 -12
  336. package/esm2022/clipboard/clipboard-module.mjs +0 -23
  337. package/esm2022/clipboard/clipboard.mjs +0 -53
  338. package/esm2022/clipboard/clipboard_public_index.mjs +0 -5
  339. package/esm2022/clipboard/copy-to-clipboard.mjs +0 -100
  340. package/esm2022/clipboard/index.mjs +0 -9
  341. package/esm2022/clipboard/pending-copy.mjs +0 -71
  342. package/esm2022/clipboard/public-api.mjs +0 -12
  343. package/esm2022/coercion/array.mjs +0 -11
  344. package/esm2022/coercion/boolean-property.mjs +0 -12
  345. package/esm2022/coercion/css-pixel-value.mjs +0 -15
  346. package/esm2022/coercion/element.mjs +0 -16
  347. package/esm2022/coercion/index.mjs +0 -9
  348. package/esm2022/coercion/number-property.mjs +0 -24
  349. package/esm2022/coercion/private/index.mjs +0 -9
  350. package/esm2022/coercion/private/observable.mjs +0 -19
  351. package/esm2022/coercion/private/private_public_index.mjs +0 -5
  352. package/esm2022/coercion/public-api.mjs +0 -14
  353. package/esm2022/coercion/string-array.mjs +0 -38
  354. package/esm2022/collections/array-data-source.mjs +0 -21
  355. package/esm2022/collections/collection-viewer.mjs +0 -9
  356. package/esm2022/collections/collections_public_index.mjs +0 -5
  357. package/esm2022/collections/data-source.mjs +0 -19
  358. package/esm2022/collections/dispose-view-repeater-strategy.mjs +0 -48
  359. package/esm2022/collections/index.mjs +0 -9
  360. package/esm2022/collections/public-api.mjs +0 -17
  361. package/esm2022/collections/recycle-view-repeater-strategy.mjs +0 -129
  362. package/esm2022/collections/selection-model.mjs +0 -225
  363. package/esm2022/collections/tree-adapter.mjs +0 -9
  364. package/esm2022/collections/unique-selection-dispatcher.mjs +0 -55
  365. package/esm2022/collections/view-repeater.mjs +0 -26
  366. package/esm2022/dialog/dialog-config.mjs +0 -70
  367. package/esm2022/dialog/dialog-container.mjs +0 -308
  368. package/esm2022/dialog/dialog-injectors.mjs +0 -40
  369. package/esm2022/dialog/dialog-module.mjs +0 -40
  370. package/esm2022/dialog/dialog-ref.mjs +0 -85
  371. package/esm2022/dialog/dialog.mjs +0 -303
  372. package/esm2022/dialog/dialog_public_index.mjs +0 -5
  373. package/esm2022/dialog/index.mjs +0 -9
  374. package/esm2022/dialog/public-api.mjs +0 -14
  375. package/esm2022/drag-drop/directives/assertions.mjs +0 -18
  376. package/esm2022/drag-drop/directives/config.mjs +0 -14
  377. package/esm2022/drag-drop/directives/drag-handle.mjs +0 -68
  378. package/esm2022/drag-drop/directives/drag-placeholder.mjs +0 -43
  379. package/esm2022/drag-drop/directives/drag-preview.mjs +0 -48
  380. package/esm2022/drag-drop/directives/drag.mjs +0 -520
  381. package/esm2022/drag-drop/directives/drop-list-group.mjs +0 -47
  382. package/esm2022/drag-drop/directives/drop-list.mjs +0 -352
  383. package/esm2022/drag-drop/dom/clone-node.mjs +0 -65
  384. package/esm2022/drag-drop/dom/dom-rect.mjs +0 -64
  385. package/esm2022/drag-drop/dom/parent-position-tracker.mjs +0 -76
  386. package/esm2022/drag-drop/dom/root-node.mjs +0 -21
  387. package/esm2022/drag-drop/dom/styling.mjs +0 -89
  388. package/esm2022/drag-drop/dom/transition-duration.mjs +0 -36
  389. package/esm2022/drag-drop/drag-drop-module.mjs +0 -49
  390. package/esm2022/drag-drop/drag-drop-registry.mjs +0 -248
  391. package/esm2022/drag-drop/drag-drop.mjs +0 -57
  392. package/esm2022/drag-drop/drag-drop_public_index.mjs +0 -5
  393. package/esm2022/drag-drop/drag-events.mjs +0 -9
  394. package/esm2022/drag-drop/drag-parent.mjs +0 -16
  395. package/esm2022/drag-drop/drag-ref.mjs +0 -1097
  396. package/esm2022/drag-drop/drag-utils.mjs +0 -60
  397. package/esm2022/drag-drop/drop-list-ref.mjs +0 -672
  398. package/esm2022/drag-drop/index.mjs +0 -9
  399. package/esm2022/drag-drop/preview-ref.mjs +0 -125
  400. package/esm2022/drag-drop/public-api.mjs +0 -23
  401. package/esm2022/drag-drop/sorting/drop-list-sort-strategy.mjs +0 -9
  402. package/esm2022/drag-drop/sorting/mixed-sort-strategy.mjs +0 -246
  403. package/esm2022/drag-drop/sorting/single-axis-sort-strategy.mjs +0 -343
  404. package/esm2022/index.mjs +0 -9
  405. package/esm2022/keycodes/index.mjs +0 -9
  406. package/esm2022/keycodes/keycodes.mjs +0 -127
  407. package/esm2022/keycodes/keycodes_public_index.mjs +0 -5
  408. package/esm2022/keycodes/modifiers.mjs +0 -18
  409. package/esm2022/keycodes/public-api.mjs +0 -10
  410. package/esm2022/layout/breakpoints-observer.mjs +0 -105
  411. package/esm2022/layout/breakpoints.mjs +0 -29
  412. package/esm2022/layout/index.mjs +0 -9
  413. package/esm2022/layout/layout-module.mjs +0 -19
  414. package/esm2022/layout/layout_public_index.mjs +0 -5
  415. package/esm2022/layout/media-matcher.mjs +0 -94
  416. package/esm2022/layout/public-api.mjs +0 -12
  417. package/esm2022/listbox/index.mjs +0 -9
  418. package/esm2022/listbox/listbox-module.mjs +0 -24
  419. package/esm2022/listbox/listbox.mjs +0 -888
  420. package/esm2022/listbox/listbox_public_index.mjs +0 -5
  421. package/esm2022/listbox/public-api.mjs +0 -10
  422. package/esm2022/menu/context-menu-trigger.mjs +0 -221
  423. package/esm2022/menu/event-detection.mjs +0 -28
  424. package/esm2022/menu/index.mjs +0 -9
  425. package/esm2022/menu/menu-aim.mjs +0 -204
  426. package/esm2022/menu/menu-bar.mjs +0 -134
  427. package/esm2022/menu/menu-base.mjs +0 -192
  428. package/esm2022/menu/menu-errors.mjs +0 -22
  429. package/esm2022/menu/menu-group.mjs +0 -31
  430. package/esm2022/menu/menu-interface.mjs +0 -11
  431. package/esm2022/menu/menu-item-checkbox.mjs +0 -50
  432. package/esm2022/menu/menu-item-radio.mjs +0 -72
  433. package/esm2022/menu/menu-item-selectable.mjs +0 -36
  434. package/esm2022/menu/menu-item.mjs +0 -270
  435. package/esm2022/menu/menu-module.mjs +0 -60
  436. package/esm2022/menu/menu-stack.mjs +0 -163
  437. package/esm2022/menu/menu-trigger-base.mjs +0 -119
  438. package/esm2022/menu/menu-trigger.mjs +0 -313
  439. package/esm2022/menu/menu.mjs +0 -135
  440. package/esm2022/menu/menu_public_index.mjs +0 -5
  441. package/esm2022/menu/pointer-focus-tracker.mjs +0 -51
  442. package/esm2022/menu/public-api.mjs +0 -24
  443. package/esm2022/observers/index.mjs +0 -9
  444. package/esm2022/observers/observe-content.mjs +0 -216
  445. package/esm2022/observers/observers_public_index.mjs +0 -5
  446. package/esm2022/observers/private/index.mjs +0 -9
  447. package/esm2022/observers/private/private_public_index.mjs +0 -5
  448. package/esm2022/observers/private/shared-resize-observer.mjs +0 -125
  449. package/esm2022/observers/public-api.mjs +0 -9
  450. package/esm2022/overlay/dispatchers/base-overlay-dispatcher.mjs +0 -52
  451. package/esm2022/overlay/dispatchers/index.mjs +0 -10
  452. package/esm2022/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +0 -81
  453. package/esm2022/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +0 -151
  454. package/esm2022/overlay/fullscreen-overlay-container.mjs +0 -94
  455. package/esm2022/overlay/index.mjs +0 -9
  456. package/esm2022/overlay/overlay-config.mjs +0 -45
  457. package/esm2022/overlay/overlay-container.mjs +0 -81
  458. package/esm2022/overlay/overlay-directives.mjs +0 -432
  459. package/esm2022/overlay/overlay-module.mjs +0 -28
  460. package/esm2022/overlay/overlay-ref.mjs +0 -437
  461. package/esm2022/overlay/overlay.mjs +0 -126
  462. package/esm2022/overlay/overlay_public_index.mjs +0 -5
  463. package/esm2022/overlay/position/connected-position.mjs +0 -88
  464. package/esm2022/overlay/position/flexible-connected-position-strategy.mjs +0 -1002
  465. package/esm2022/overlay/position/global-position-strategy.mjs +0 -237
  466. package/esm2022/overlay/position/overlay-position-builder.mjs +0 -50
  467. package/esm2022/overlay/position/position-strategy.mjs +0 -9
  468. package/esm2022/overlay/position/scroll-clip.mjs +0 -40
  469. package/esm2022/overlay/public-api.mjs +0 -22
  470. package/esm2022/overlay/scroll/block-scroll-strategy.mjs +0 -80
  471. package/esm2022/overlay/scroll/close-scroll-strategy.mjs +0 -65
  472. package/esm2022/overlay/scroll/index.mjs +0 -14
  473. package/esm2022/overlay/scroll/noop-scroll-strategy.mjs +0 -17
  474. package/esm2022/overlay/scroll/reposition-scroll-strategy.mjs +0 -61
  475. package/esm2022/overlay/scroll/scroll-strategy-options.mjs +0 -55
  476. package/esm2022/overlay/scroll/scroll-strategy.mjs +0 -14
  477. package/esm2022/platform/features/input-types.mjs +0 -59
  478. package/esm2022/platform/features/passive-listeners.mjs +0 -36
  479. package/esm2022/platform/features/scrolling.mjs +0 -104
  480. package/esm2022/platform/features/shadow-dom.mjs +0 -54
  481. package/esm2022/platform/features/test-environment.mjs +0 -24
  482. package/esm2022/platform/index.mjs +0 -9
  483. package/esm2022/platform/platform-module.mjs +0 -19
  484. package/esm2022/platform/platform.mjs +0 -82
  485. package/esm2022/platform/platform_public_index.mjs +0 -5
  486. package/esm2022/platform/public-api.mjs +0 -15
  487. package/esm2022/portal/dom-portal-outlet.mjs +0 -158
  488. package/esm2022/portal/index.mjs +0 -9
  489. package/esm2022/portal/portal-directives.mjs +0 -251
  490. package/esm2022/portal/portal-errors.mjs +0 -51
  491. package/esm2022/portal/portal-injector.mjs +0 -28
  492. package/esm2022/portal/portal.mjs +0 -189
  493. package/esm2022/portal/portal_public_index.mjs +0 -5
  494. package/esm2022/portal/public-api.mjs +0 -12
  495. package/esm2022/private/index.mjs +0 -9
  496. package/esm2022/private/private_public_index.mjs +0 -5
  497. package/esm2022/private/public-api.mjs +0 -9
  498. package/esm2022/private/style-loader.mjs +0 -50
  499. package/esm2022/public-api.mjs +0 -9
  500. package/esm2022/scrolling/fixed-size-virtual-scroll.mjs +0 -218
  501. package/esm2022/scrolling/index.mjs +0 -9
  502. package/esm2022/scrolling/public-api.mjs +0 -20
  503. package/esm2022/scrolling/scroll-dispatcher.mjs +0 -163
  504. package/esm2022/scrolling/scrollable.mjs +0 -177
  505. package/esm2022/scrolling/scrolling-module.mjs +0 -69
  506. package/esm2022/scrolling/scrolling_public_index.mjs +0 -5
  507. package/esm2022/scrolling/viewport-ruler.mjs +0 -146
  508. package/esm2022/scrolling/virtual-for-of.mjs +0 -299
  509. package/esm2022/scrolling/virtual-scroll-repeater.mjs +0 -9
  510. package/esm2022/scrolling/virtual-scroll-strategy.mjs +0 -11
  511. package/esm2022/scrolling/virtual-scroll-viewport.mjs +0 -445
  512. package/esm2022/scrolling/virtual-scrollable-element.mjs +0 -42
  513. package/esm2022/scrolling/virtual-scrollable-window.mjs +0 -41
  514. package/esm2022/scrolling/virtual-scrollable.mjs +0 -40
  515. package/esm2022/stepper/index.mjs +0 -9
  516. package/esm2022/stepper/public-api.mjs +0 -13
  517. package/esm2022/stepper/step-header.mjs +0 -31
  518. package/esm2022/stepper/step-label.mjs +0 -24
  519. package/esm2022/stepper/stepper-button.mjs +0 -58
  520. package/esm2022/stepper/stepper-module.mjs +0 -41
  521. package/esm2022/stepper/stepper.mjs +0 -452
  522. package/esm2022/stepper/stepper_public_index.mjs +0 -5
  523. package/esm2022/table/can-stick.mjs +0 -46
  524. package/esm2022/table/cell.mjs +0 -245
  525. package/esm2022/table/coalesced-style-scheduler.mjs +0 -79
  526. package/esm2022/table/index.mjs +0 -9
  527. package/esm2022/table/public-api.mjs +0 -20
  528. package/esm2022/table/row.mjs +0 -317
  529. package/esm2022/table/sticky-position-listener.mjs +0 -11
  530. package/esm2022/table/sticky-styler.mjs +0 -347
  531. package/esm2022/table/table-errors.mjs +0 -67
  532. package/esm2022/table/table-module.mjs +0 -93
  533. package/esm2022/table/table.mjs +0 -1148
  534. package/esm2022/table/table_public_index.mjs +0 -5
  535. package/esm2022/table/text-column.mjs +0 -154
  536. package/esm2022/table/tokens.mjs +0 -16
  537. package/esm2022/testing/change-detection.mjs +0 -102
  538. package/esm2022/testing/component-harness.mjs +0 -328
  539. package/esm2022/testing/element-dimensions.mjs +0 -9
  540. package/esm2022/testing/harness-environment.mjs +0 -220
  541. package/esm2022/testing/index.mjs +0 -9
  542. package/esm2022/testing/public-api.mjs +0 -15
  543. package/esm2022/testing/selenium-webdriver/index.mjs +0 -9
  544. package/esm2022/testing/selenium-webdriver/public-api.mjs +0 -10
  545. package/esm2022/testing/selenium-webdriver/selenium-web-driver-element.mjs +0 -216
  546. package/esm2022/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +0 -88
  547. package/esm2022/testing/selenium-webdriver/selenium-webdriver-keys.mjs +0 -64
  548. package/esm2022/testing/test-element-errors.mjs +0 -15
  549. package/esm2022/testing/test-element.mjs +0 -49
  550. package/esm2022/testing/testbed/fake-events/dispatch-events.mjs +0 -53
  551. package/esm2022/testing/testbed/fake-events/element-focus.mjs +0 -39
  552. package/esm2022/testing/testbed/fake-events/event-objects.mjs +0 -127
  553. package/esm2022/testing/testbed/fake-events/index.mjs +0 -14
  554. package/esm2022/testing/testbed/fake-events/type-in-element.mjs +0 -97
  555. package/esm2022/testing/testbed/index.mjs +0 -9
  556. package/esm2022/testing/testbed/public-api.mjs +0 -10
  557. package/esm2022/testing/testbed/task-state-zone-interceptor.mjs +0 -83
  558. package/esm2022/testing/testbed/testbed-harness-environment.mjs +0 -165
  559. package/esm2022/testing/testbed/unit-test-element.mjs +0 -258
  560. package/esm2022/testing/text-filtering.mjs +0 -21
  561. package/esm2022/text-field/autofill.mjs +0 -114
  562. package/esm2022/text-field/autosize.mjs +0 -309
  563. package/esm2022/text-field/index.mjs +0 -9
  564. package/esm2022/text-field/public-api.mjs +0 -11
  565. package/esm2022/text-field/text-field-module.mjs +0 -24
  566. package/esm2022/text-field/text-field_public_index.mjs +0 -5
  567. package/esm2022/tree/control/base-tree-control.mjs +0 -62
  568. package/esm2022/tree/control/flat-tree-control.mjs +0 -57
  569. package/esm2022/tree/control/nested-tree-control.mjs +0 -67
  570. package/esm2022/tree/control/tree-control.mjs +0 -2
  571. package/esm2022/tree/index.mjs +0 -9
  572. package/esm2022/tree/nested-node.mjs +0 -103
  573. package/esm2022/tree/node.mjs +0 -36
  574. package/esm2022/tree/outlet.mjs +0 -40
  575. package/esm2022/tree/padding.mjs +0 -129
  576. package/esm2022/tree/public-api.mjs +0 -20
  577. package/esm2022/tree/toggle.mjs +0 -51
  578. package/esm2022/tree/tree-errors.mjs +0 -44
  579. package/esm2022/tree/tree-module.mjs +0 -49
  580. package/esm2022/tree/tree.mjs +0 -1123
  581. package/esm2022/tree/tree_public_index.mjs +0 -5
  582. package/esm2022/version.mjs +0 -11
package/tree/index.d.ts CHANGED
@@ -2,10 +2,8 @@ import { AfterContentChecked } from '@angular/core';
2
2
  import { AfterContentInit } from '@angular/core';
3
3
  import { AfterViewInit } from '@angular/core';
4
4
  import { BehaviorSubject } from 'rxjs';
5
- import { ChangeDetectorRef } from '@angular/core';
6
5
  import { CollectionViewer } from '@angular/cdk/collections';
7
6
  import { DataSource } from '@angular/cdk/collections';
8
- import { Directionality } from '@angular/cdk/bidi';
9
7
  import { ElementRef } from '@angular/core';
10
8
  import { EventEmitter } from '@angular/core';
11
9
  import * as i0 from '@angular/core';
@@ -95,7 +93,7 @@ export declare class CdkNestedTreeNode<T, K = T> extends CdkTreeNode<T, K> imple
95
93
  protected _children: T[];
96
94
  /** The children node placeholder. */
97
95
  nodeOutlet: QueryList<CdkTreeNodeOutlet>;
98
- constructor(elementRef: ElementRef<HTMLElement>, tree: CdkTree<T, K>, _differs: IterableDiffers);
96
+ constructor(...args: unknown[]);
99
97
  ngAfterContentInit(): void;
100
98
  ngOnInit(): void;
101
99
  ngOnDestroy(): void;
@@ -116,6 +114,7 @@ export declare class CdkNestedTreeNode<T, K = T> extends CdkTreeNode<T, K> imple
116
114
  export declare class CdkTree<T, K = T> implements AfterContentChecked, AfterContentInit, AfterViewInit, CollectionViewer, OnDestroy, OnInit {
117
115
  private _differs;
118
116
  private _changeDetectorRef;
117
+ private _elementRef;
119
118
  private _dir;
120
119
  /** Subject that emits when the component has been destroyed. */
121
120
  private readonly _onDestroy;
@@ -212,7 +211,7 @@ export declare class CdkTree<T, K = T> implements AfterContentChecked, AfterCont
212
211
  /** The key manager for this tree. Handles focus and activation based on user keyboard input. */
213
212
  _keyManager: TreeKeyManagerStrategy<CdkTreeNode<T, K>>;
214
213
  private _viewInit;
215
- constructor(_differs: IterableDiffers, _changeDetectorRef: ChangeDetectorRef, _dir: Directionality);
214
+ constructor(...args: unknown[]);
216
215
  ngAfterContentInit(): void;
217
216
  ngAfterContentChecked(): void;
218
217
  ngOnDestroy(): void;
@@ -282,7 +281,7 @@ export declare class CdkTree<T, K = T> implements AfterContentChecked, AfterCont
282
281
  /** Level accessor, used for compatibility between the old Tree and new Tree */
283
282
  _getLevelAccessor(): ((dataNode: T) => number) | undefined;
284
283
  /** Children accessor, used for compatibility between the old Tree and new Tree */
285
- _getChildrenAccessor(): ((dataNode: T) => Observable<T[]> | T[] | undefined | null) | undefined;
284
+ _getChildrenAccessor(): ((dataNode: T) => T[] | Observable<T[]> | null | undefined) | undefined;
286
285
  /**
287
286
  * Gets the direct children of a node; used for compatibility between the old tree and the
288
287
  * new tree.
@@ -327,7 +326,7 @@ export declare class CdkTree<T, K = T> implements AfterContentChecked, AfterCont
327
326
  /** Given a CdkTreeNode, gets the nodes that renders that node's child data. */
328
327
  _getNodeChildren(node: CdkTreeNode<T, K>): Observable<CdkTreeNode<T, K>[]>;
329
328
  /** `keydown` event handler; this just passes the event to the `TreeKeyManager`. */
330
- _sendKeydownToKeyManager(event: KeyboardEvent): void;
329
+ protected _sendKeydownToKeyManager(event: KeyboardEvent): void;
331
330
  /** Gets all nested descendants of a given node. */
332
331
  private _getDescendants;
333
332
  /**
@@ -378,7 +377,7 @@ export declare class CdkTreeModule {
378
377
  * Tree node for CdkTree. It contains the data in the tree node.
379
378
  */
380
379
  export declare class CdkTreeNode<T, K = T> implements OnDestroy, OnInit, TreeKeyManagerItem {
381
- protected _elementRef: ElementRef<HTMLElement>;
380
+ _elementRef: ElementRef<HTMLElement>;
382
381
  protected _tree: CdkTree<T, K>;
383
382
  protected _tabindex: number | null;
384
383
  /**
@@ -461,7 +460,7 @@ export declare class CdkTreeNode<T, K = T> implements OnDestroy, OnInit, TreeKey
461
460
  */
462
461
  _getPositionInSet(): number;
463
462
  private _changeDetectorRef;
464
- constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T, K>);
463
+ constructor(...args: unknown[]);
465
464
  ngOnInit(): void;
466
465
  ngOnDestroy(): void;
467
466
  getParent(): CdkTreeNode<T, K> | null;
@@ -476,6 +475,8 @@ export declare class CdkTreeNode<T, K = T> implements OnDestroy, OnInit, TreeKey
476
475
  collapse(): void;
477
476
  /** Expands this data node. Implemented for TreeKeyManagerItem. */
478
477
  expand(): void;
478
+ /** Makes the node focusable. Implemented for TreeKeyManagerItem. */
479
+ makeFocusable(): void;
479
480
  _focusItem(): void;
480
481
  _setActiveItem(): void;
481
482
  _emitExpansionState(expanded: boolean): void;
@@ -490,6 +491,7 @@ export declare class CdkTreeNode<T, K = T> implements OnDestroy, OnInit, TreeKey
490
491
  * Captures the node's template and a when predicate that describes when this node should be used.
491
492
  */
492
493
  export declare class CdkTreeNodeDef<T> {
494
+ /** @docs-private */
493
495
  template: TemplateRef<any>;
494
496
  /**
495
497
  * Function that should return true if this node template should be used for the provided node
@@ -499,8 +501,7 @@ export declare class CdkTreeNodeDef<T> {
499
501
  * default.
500
502
  */
501
503
  when: (index: number, nodeData: T) => boolean;
502
- /** @docs-private */
503
- constructor(template: TemplateRef<any>);
504
+ constructor(...args: unknown[]);
504
505
  static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodeDef<any>, never>;
505
506
  static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeDef<any>, "[cdkTreeNodeDef]", never, { "when": { "alias": "cdkTreeNodeDefWhen"; "required": false; }; }, {}, never, never, true, never>;
506
507
  }
@@ -511,9 +512,9 @@ export declare class CdkTreeNodeDef<T> {
511
512
  */
512
513
  export declare class CdkTreeNodeOutlet {
513
514
  viewContainer: ViewContainerRef;
514
- _node?: any | undefined;
515
- constructor(viewContainer: ViewContainerRef, _node?: any | undefined);
516
- static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodeOutlet, [null, { optional: true; }]>;
515
+ _node?: {} | null | undefined;
516
+ constructor(...args: unknown[]);
517
+ static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodeOutlet, never>;
517
518
  static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeOutlet, "[cdkTreeNodeOutlet]", never, {}, {}, never, never, true, never>;
518
519
  }
519
520
 
@@ -556,7 +557,7 @@ export declare class CdkTreeNodePadding<T, K = T> implements OnDestroy {
556
557
  get indent(): number | string;
557
558
  set indent(indent: number | string);
558
559
  _indent: number;
559
- constructor(_treeNode: CdkTreeNode<T, K>, _tree: CdkTree<T, K>, _element: ElementRef<HTMLElement>, _dir: Directionality);
560
+ constructor(...args: unknown[]);
560
561
  ngOnDestroy(): void;
561
562
  /** The padding indent value for the tree node. Returns a string with px numbers if not null. */
562
563
  _paddingIndent(): string | null;
@@ -575,7 +576,7 @@ export declare class CdkTreeNodePadding<T, K = T> implements OnDestroy {
575
576
  * @docs-private
576
577
  */
577
578
  protected _setIndentInput(indent: number | string): void;
578
- static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodePadding<any, any>, [null, null, null, { optional: true; }]>;
579
+ static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodePadding<any, any>, never>;
579
580
  static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodePadding<any, any>, "[cdkTreeNodePadding]", never, { "level": { "alias": "cdkTreeNodePadding"; "required": false; }; "indent": { "alias": "cdkTreeNodePaddingIndent"; "required": false; }; }, {}, never, never, true, never>;
580
581
  static ngAcceptInputType_level: unknown;
581
582
  }
@@ -588,7 +589,7 @@ export declare class CdkTreeNodeToggle<T, K = T> {
588
589
  protected _treeNode: CdkTreeNode<T, K>;
589
590
  /** Whether expand/collapse the node recursively. */
590
591
  recursive: boolean;
591
- constructor(_tree: CdkTree<T, K>, _treeNode: CdkTreeNode<T, K>);
592
+ constructor(...args: unknown[]);
592
593
  _toggle(): void;
593
594
  static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodeToggle<any, any>, never>;
594
595
  static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeToggle<any, any>, "[cdkTreeNodeToggle]", never, { "recursive": { "alias": "cdkTreeNodeToggleRecursive"; "required": false; }; }, {}, never, never, true, never>;
@@ -1,31 +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 { ObserversModule } from '@angular/cdk/observers';
9
- import { NgModule } from '@angular/core';
10
- import { CdkMonitorFocus } from './focus-monitor/focus-monitor';
11
- import { CdkTrapFocus } from './focus-trap/focus-trap';
12
- import { HighContrastModeDetector } from './high-contrast-mode/high-contrast-mode-detector';
13
- import { CdkAriaLive } from './live-announcer/live-announcer';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "./high-contrast-mode/high-contrast-mode-detector";
16
- export class A11yModule {
17
- constructor(highContrastModeDetector) {
18
- highContrastModeDetector._applyBodyHighContrastModeCssClasses();
19
- }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: A11yModule, deps: [{ token: i1.HighContrastModeDetector }], target: i0.ɵɵFactoryTarget.NgModule }); }
21
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0-next.2", ngImport: i0, type: A11yModule, imports: [ObserversModule, CdkAriaLive, CdkTrapFocus, CdkMonitorFocus], exports: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus] }); }
22
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: A11yModule, imports: [ObserversModule] }); }
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: A11yModule, decorators: [{
25
- type: NgModule,
26
- args: [{
27
- imports: [ObserversModule, CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],
28
- exports: [CdkAriaLive, CdkTrapFocus, CdkMonitorFocus],
29
- }]
30
- }], ctorParameters: () => [{ type: i1.HighContrastModeDetector }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYTExeS1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2ExMXkvYTExeS1tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUMxRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUNBQWlDLENBQUM7OztBQU01RCxNQUFNLE9BQU8sVUFBVTtJQUNyQixZQUFZLHdCQUFrRDtRQUM1RCx3QkFBd0IsQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO0lBQ2xFLENBQUM7cUhBSFUsVUFBVTtzSEFBVixVQUFVLFlBSFgsZUFBZSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsZUFBZSxhQUMzRCxXQUFXLEVBQUUsWUFBWSxFQUFFLGVBQWU7c0hBRXpDLFVBQVUsWUFIWCxlQUFlOztrR0FHZCxVQUFVO2tCQUp0QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQztvQkFDdEUsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUM7aUJBQ3REIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7T2JzZXJ2ZXJzTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jZGsvb2JzZXJ2ZXJzJztcbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDZGtNb25pdG9yRm9jdXN9IGZyb20gJy4vZm9jdXMtbW9uaXRvci9mb2N1cy1tb25pdG9yJztcbmltcG9ydCB7Q2RrVHJhcEZvY3VzfSBmcm9tICcuL2ZvY3VzLXRyYXAvZm9jdXMtdHJhcCc7XG5pbXBvcnQge0hpZ2hDb250cmFzdE1vZGVEZXRlY3Rvcn0gZnJvbSAnLi9oaWdoLWNvbnRyYXN0LW1vZGUvaGlnaC1jb250cmFzdC1tb2RlLWRldGVjdG9yJztcbmltcG9ydCB7Q2RrQXJpYUxpdmV9IGZyb20gJy4vbGl2ZS1hbm5vdW5jZXIvbGl2ZS1hbm5vdW5jZXInO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbT2JzZXJ2ZXJzTW9kdWxlLCBDZGtBcmlhTGl2ZSwgQ2RrVHJhcEZvY3VzLCBDZGtNb25pdG9yRm9jdXNdLFxuICBleHBvcnRzOiBbQ2RrQXJpYUxpdmUsIENka1RyYXBGb2N1cywgQ2RrTW9uaXRvckZvY3VzXSxcbn0pXG5leHBvcnQgY2xhc3MgQTExeU1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKGhpZ2hDb250cmFzdE1vZGVEZXRlY3RvcjogSGlnaENvbnRyYXN0TW9kZURldGVjdG9yKSB7XG4gICAgaGlnaENvbnRyYXN0TW9kZURldGVjdG9yLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpO1xuICB9XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYTExeV9wdWJsaWNfaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2ExMXkvYTExeV9wdWJsaWNfaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -1,232 +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 { DOCUMENT } from '@angular/common';
9
- import { Inject, Injectable, APP_ID, inject } from '@angular/core';
10
- import { Platform } from '@angular/cdk/platform';
11
- import { addAriaReferencedId, getAriaReferenceIds, removeAriaReferencedId } from './aria-reference';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/cdk/platform";
14
- /**
15
- * ID used for the body container where all messages are appended.
16
- * @deprecated No longer being used. To be removed.
17
- * @breaking-change 14.0.0
18
- */
19
- export const MESSAGES_CONTAINER_ID = 'cdk-describedby-message-container';
20
- /**
21
- * ID prefix used for each created message element.
22
- * @deprecated To be turned into a private variable.
23
- * @breaking-change 14.0.0
24
- */
25
- export const CDK_DESCRIBEDBY_ID_PREFIX = 'cdk-describedby-message';
26
- /**
27
- * Attribute given to each host element that is described by a message element.
28
- * @deprecated To be turned into a private variable.
29
- * @breaking-change 14.0.0
30
- */
31
- export const CDK_DESCRIBEDBY_HOST_ATTRIBUTE = 'cdk-describedby-host';
32
- /** Global incremental identifier for each registered message element. */
33
- let nextId = 0;
34
- /**
35
- * Utility that creates visually hidden elements with a message content. Useful for elements that
36
- * want to use aria-describedby to further describe themselves without adding additional visual
37
- * content.
38
- */
39
- export class AriaDescriber {
40
- constructor(_document,
41
- /**
42
- * @deprecated To be turned into a required parameter.
43
- * @breaking-change 14.0.0
44
- */
45
- _platform) {
46
- this._platform = _platform;
47
- /** Map of all registered message elements that have been placed into the document. */
48
- this._messageRegistry = new Map();
49
- /** Container for all registered messages. */
50
- this._messagesContainer = null;
51
- /** Unique ID for the service. */
52
- this._id = `${nextId++}`;
53
- this._document = _document;
54
- this._id = inject(APP_ID) + '-' + nextId++;
55
- }
56
- describe(hostElement, message, role) {
57
- if (!this._canBeDescribed(hostElement, message)) {
58
- return;
59
- }
60
- const key = getKey(message, role);
61
- if (typeof message !== 'string') {
62
- // We need to ensure that the element has an ID.
63
- setMessageId(message, this._id);
64
- this._messageRegistry.set(key, { messageElement: message, referenceCount: 0 });
65
- }
66
- else if (!this._messageRegistry.has(key)) {
67
- this._createMessageElement(message, role);
68
- }
69
- if (!this._isElementDescribedByMessage(hostElement, key)) {
70
- this._addMessageReference(hostElement, key);
71
- }
72
- }
73
- removeDescription(hostElement, message, role) {
74
- if (!message || !this._isElementNode(hostElement)) {
75
- return;
76
- }
77
- const key = getKey(message, role);
78
- if (this._isElementDescribedByMessage(hostElement, key)) {
79
- this._removeMessageReference(hostElement, key);
80
- }
81
- // If the message is a string, it means that it's one that we created for the
82
- // consumer so we can remove it safely, otherwise we should leave it in place.
83
- if (typeof message === 'string') {
84
- const registeredMessage = this._messageRegistry.get(key);
85
- if (registeredMessage && registeredMessage.referenceCount === 0) {
86
- this._deleteMessageElement(key);
87
- }
88
- }
89
- if (this._messagesContainer?.childNodes.length === 0) {
90
- this._messagesContainer.remove();
91
- this._messagesContainer = null;
92
- }
93
- }
94
- /** Unregisters all created message elements and removes the message container. */
95
- ngOnDestroy() {
96
- const describedElements = this._document.querySelectorAll(`[${CDK_DESCRIBEDBY_HOST_ATTRIBUTE}="${this._id}"]`);
97
- for (let i = 0; i < describedElements.length; i++) {
98
- this._removeCdkDescribedByReferenceIds(describedElements[i]);
99
- describedElements[i].removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE);
100
- }
101
- this._messagesContainer?.remove();
102
- this._messagesContainer = null;
103
- this._messageRegistry.clear();
104
- }
105
- /**
106
- * Creates a new element in the visually hidden message container element with the message
107
- * as its content and adds it to the message registry.
108
- */
109
- _createMessageElement(message, role) {
110
- const messageElement = this._document.createElement('div');
111
- setMessageId(messageElement, this._id);
112
- messageElement.textContent = message;
113
- if (role) {
114
- messageElement.setAttribute('role', role);
115
- }
116
- this._createMessagesContainer();
117
- this._messagesContainer.appendChild(messageElement);
118
- this._messageRegistry.set(getKey(message, role), { messageElement, referenceCount: 0 });
119
- }
120
- /** Deletes the message element from the global messages container. */
121
- _deleteMessageElement(key) {
122
- this._messageRegistry.get(key)?.messageElement?.remove();
123
- this._messageRegistry.delete(key);
124
- }
125
- /** Creates the global container for all aria-describedby messages. */
126
- _createMessagesContainer() {
127
- if (this._messagesContainer) {
128
- return;
129
- }
130
- const containerClassName = 'cdk-describedby-message-container';
131
- const serverContainers = this._document.querySelectorAll(`.${containerClassName}[platform="server"]`);
132
- for (let i = 0; i < serverContainers.length; i++) {
133
- // When going from the server to the client, we may end up in a situation where there's
134
- // already a container on the page, but we don't have a reference to it. Clear the
135
- // old container so we don't get duplicates. Doing this, instead of emptying the previous
136
- // container, should be slightly faster.
137
- serverContainers[i].remove();
138
- }
139
- const messagesContainer = this._document.createElement('div');
140
- // We add `visibility: hidden` in order to prevent text in this container from
141
- // being searchable by the browser's Ctrl + F functionality.
142
- // Screen-readers will still read the description for elements with aria-describedby even
143
- // when the description element is not visible.
144
- messagesContainer.style.visibility = 'hidden';
145
- // Even though we use `visibility: hidden`, we still apply `cdk-visually-hidden` so that
146
- // the description element doesn't impact page layout.
147
- messagesContainer.classList.add(containerClassName);
148
- messagesContainer.classList.add('cdk-visually-hidden');
149
- // @breaking-change 14.0.0 Remove null check for `_platform`.
150
- if (this._platform && !this._platform.isBrowser) {
151
- messagesContainer.setAttribute('platform', 'server');
152
- }
153
- this._document.body.appendChild(messagesContainer);
154
- this._messagesContainer = messagesContainer;
155
- }
156
- /** Removes all cdk-describedby messages that are hosted through the element. */
157
- _removeCdkDescribedByReferenceIds(element) {
158
- // Remove all aria-describedby reference IDs that are prefixed by CDK_DESCRIBEDBY_ID_PREFIX
159
- const originalReferenceIds = getAriaReferenceIds(element, 'aria-describedby').filter(id => id.indexOf(CDK_DESCRIBEDBY_ID_PREFIX) != 0);
160
- element.setAttribute('aria-describedby', originalReferenceIds.join(' '));
161
- }
162
- /**
163
- * Adds a message reference to the element using aria-describedby and increments the registered
164
- * message's reference count.
165
- */
166
- _addMessageReference(element, key) {
167
- const registeredMessage = this._messageRegistry.get(key);
168
- // Add the aria-describedby reference and set the
169
- // describedby_host attribute to mark the element.
170
- addAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id);
171
- element.setAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE, this._id);
172
- registeredMessage.referenceCount++;
173
- }
174
- /**
175
- * Removes a message reference from the element using aria-describedby
176
- * and decrements the registered message's reference count.
177
- */
178
- _removeMessageReference(element, key) {
179
- const registeredMessage = this._messageRegistry.get(key);
180
- registeredMessage.referenceCount--;
181
- removeAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id);
182
- element.removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE);
183
- }
184
- /** Returns true if the element has been described by the provided message ID. */
185
- _isElementDescribedByMessage(element, key) {
186
- const referenceIds = getAriaReferenceIds(element, 'aria-describedby');
187
- const registeredMessage = this._messageRegistry.get(key);
188
- const messageId = registeredMessage && registeredMessage.messageElement.id;
189
- return !!messageId && referenceIds.indexOf(messageId) != -1;
190
- }
191
- /** Determines whether a message can be described on a particular element. */
192
- _canBeDescribed(element, message) {
193
- if (!this._isElementNode(element)) {
194
- return false;
195
- }
196
- if (message && typeof message === 'object') {
197
- // We'd have to make some assumptions about the description element's text, if the consumer
198
- // passed in an element. Assume that if an element is passed in, the consumer has verified
199
- // that it can be used as a description.
200
- return true;
201
- }
202
- const trimmedMessage = message == null ? '' : `${message}`.trim();
203
- const ariaLabel = element.getAttribute('aria-label');
204
- // We shouldn't set descriptions if they're exactly the same as the `aria-label` of the
205
- // element, because screen readers will end up reading out the same text twice in a row.
206
- return trimmedMessage ? !ariaLabel || ariaLabel.trim() !== trimmedMessage : false;
207
- }
208
- /** Checks whether a node is an Element node. */
209
- _isElementNode(element) {
210
- return element.nodeType === this._document.ELEMENT_NODE;
211
- }
212
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: AriaDescriber, deps: [{ token: DOCUMENT }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Injectable }); }
213
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: AriaDescriber, providedIn: 'root' }); }
214
- }
215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: AriaDescriber, decorators: [{
216
- type: Injectable,
217
- args: [{ providedIn: 'root' }]
218
- }], ctorParameters: () => [{ type: undefined, decorators: [{
219
- type: Inject,
220
- args: [DOCUMENT]
221
- }] }, { type: i1.Platform }] });
222
- /** Gets a key that can be used to look messages up in the registry. */
223
- function getKey(message, role) {
224
- return typeof message === 'string' ? `${role || ''}/${message}` : message;
225
- }
226
- /** Assigns a unique ID to an element, if it doesn't have one already. */
227
- function setMessageId(element, serviceId) {
228
- if (!element.id) {
229
- element.id = `${CDK_DESCRIBEDBY_ID_PREFIX}-${serviceId}-${nextId++}`;
230
- }
231
- }
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpYS1kZXNjcmliZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2ExMXkvYXJpYS1kZXNjcmliZXIvYXJpYS1kZXNjcmliZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7QUFjbEc7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1DQUFtQyxDQUFDO0FBRXpFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyx5QkFBeUIsQ0FBQztBQUVuRTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsc0JBQXNCLENBQUM7QUFFckUseUVBQXlFO0FBQ3pFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVmOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQVl4QixZQUNvQixTQUFjO0lBQ2hDOzs7T0FHRztJQUNLLFNBQW9CO1FBQXBCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFmOUIsc0ZBQXNGO1FBQzlFLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUF1QyxDQUFDO1FBRTFFLDZDQUE2QztRQUNyQyx1QkFBa0IsR0FBdUIsSUFBSSxDQUFDO1FBRXRELGlDQUFpQztRQUNoQixRQUFHLEdBQUcsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBVW5DLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxD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QUNwRixDQUFDO0lBRUQsZ0RBQWdEO0lBQ3hDLGNBQWMsQ0FBQyxPQUFhO1FBQ2xDLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztJQUMxRCxDQUFDO3FIQTVPVSxhQUFhLGtCQWFkLFFBQVE7eUhBYlAsYUFBYSxjQURELE1BQU07O2tHQUNsQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBYzNCLE1BQU07MkJBQUMsUUFBUTs7QUFrT3BCLHVFQUF1RTtBQUN2RSxTQUFTLE1BQU0sQ0FBQyxPQUF5QixFQUFFLElBQWE7SUFDdEQsT0FBTyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzVFLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBUyxZQUFZLENBQUMsT0FBb0IsRUFBRSxTQUFpQjtJQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsR0FBRyx5QkFBeUIsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgQVBQX0lELCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7YWRkQXJpYVJlZmVyZW5jZWRJZCwgZ2V0QXJpYVJlZmVyZW5jZUlkcywgcmVtb3ZlQXJpYVJlZmVyZW5jZWRJZH0gZnJvbSAnLi9hcmlhLXJlZmVyZW5jZSc7XG5cbi8qKlxuICogSW50ZXJmYWNlIHVzZWQgdG8gcmVnaXN0ZXIgbWVzc2FnZSBlbGVtZW50cyBhbmQga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHJlZ2lzdHJhdGlvbnMgaGF2ZVxuICogdGhlIHNhbWUgbWVzc2FnZSBhbmQgdGhlIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBlbGVtZW50IHVzZWQgZm9yIHRoZSBgYXJpYS1kZXNjcmliZWRieWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJlZE1lc3NhZ2Uge1xuICAvKiogVGhlIGVsZW1lbnQgY29udGFpbmluZyB0aGUgbWVzc2FnZS4gKi9cbiAgbWVzc2FnZUVsZW1lbnQ6IEVsZW1lbnQ7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCByZWZlcmVuY2UgdGhpcyBtZXNzYWdlIGVsZW1lbnQgdmlhIGBhcmlhLWRlc2NyaWJlZGJ5YC4gKi9cbiAgcmVmZXJlbmNlQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJRCB1c2VkIGZvciB0aGUgYm9keSBjb250YWluZXIgd2hlcmUgYWxsIG1lc3NhZ2VzIGFyZSBhcHBlbmRlZC5cbiAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciBiZWluZyB1c2VkLiBUbyBiZSByZW1vdmVkLlxuICogQGJyZWFraW5nLWNoYW5nZSAxNC4wLjBcbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VTX0NPTlRBSU5FUl9JRCA9ICdjZGstZGVzY3JpYmVkYnktbWVzc2FnZS1jb250YWluZXInO1xuXG4vKipcbiAqIElEIHByZWZpeCB1c2VkIGZvciBlYWNoIGNyZWF0ZWQgbWVzc2FnZSBlbGVtZW50LlxuICogQGRlcHJlY2F0ZWQgVG8gYmUgdHVybmVkIGludG8gYSBwcml2YXRlIHZhcmlhYmxlLlxuICogQGJyZWFraW5nLWNoYW5nZSAxNC4wLjBcbiAqL1xuZXhwb3J0IGNvbnN0IENES19ERVNDUklCRURCWV9JRF9QUkVGSVggPSAnY2RrLWRlc2NyaWJlZGJ5LW1lc3NhZ2UnO1xuXG4vKipcbiAqIEF0dHJpYnV0ZSBnaXZlbiB0byBlYWNoIGhvc3QgZWxlbWVudCB0aGF0IGlzIGRlc2NyaWJlZCBieSBhIG1lc3NhZ2UgZWxlbWVudC5cbiAqIEBkZXByZWNhdGVkIFRvIGJlIHR1cm5lZCBpbnRvIGEgcHJpdmF0ZSB2YXJpYWJsZS5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBDREtfREVTQ1JJQkVEQllfSE9TVF9BVFRSSUJVVEUgPSAnY2RrLWRlc2NyaWJlZGJ5LWhvc3QnO1xuXG4vKiogR2xvYmFsIGluY3JlbWVudGFsIGlkZW50aWZpZXIgZm9yIGVhY2ggcmVnaXN0ZXJlZCBtZXNzYWdlIGVsZW1lbnQuICovXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBVdGlsaXR5IHRoYXQgY3JlYXRlcyB2aXN1YWxseSBoaWRkZW4gZWxlbWVudHMgd2l0aCBhIG1lc3NhZ2UgY29udGVudC4gVXNlZnVsIGZvciBlbGVtZW50cyB0aGF0XG4gKiB3YW50IHRvIHVzZSBhcmlhLWRlc2NyaWJlZGJ5IHRvIGZ1cnRoZXIgZGVzY3JpYmUgdGhlbXNlbHZlcyB3aXRob3V0IGFkZGluZyBhZGRpdGlvbmFsIHZpc3VhbFxuICogY29udGVudC5cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQXJpYURlc2NyaWJlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudDtcblxuICAvKiogTWFwIG9mIGFsbCByZWdpc3RlcmVkIG1lc3NhZ2UgZWxlbWVudHMgdGhhdCBoYXZlIGJlZW4gcGxhY2VkIGludG8gdGhlIGRvY3VtZW50LiAqL1xuICBwcml2YXRlIF9tZXNzYWdlUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZyB8IEVsZW1lbnQsIFJlZ2lzdGVyZWRNZXNzYWdlPigpO1xuXG4gIC8qKiBDb250YWluZXIgZm9yIGFsbCByZWdpc3RlcmVkIG1lc3NhZ2VzLiAqL1xuICBwcml2YXRlIF9tZXNzYWdlc0NvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogVW5pcXVlIElEIGZvciB0aGUgc2VydmljZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaWQgPSBgJHtuZXh0SWQrK31gO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIF9kb2N1bWVudDogYW55LFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFRvIGJlIHR1cm5lZCBpbnRvIGEgcmVxdWlyZWQgcGFyYW1ldGVyLlxuICAgICAqIEBicmVha2luZy1jaGFuZ2UgMTQuMC4wXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcGxhdGZvcm0/OiBQbGF0Zm9ybSxcbiAgKSB7XG4gICAgdGhpcy5fZG9jdW1lbnQgPSBfZG9jdW1lbnQ7XG4gICAgdGhpcy5faWQgPSBpbmplY3QoQVBQX0lEKSArICctJyArIG5leHRJZCsrO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdG8gdGhlIGhvc3QgZWxlbWVudCBhbiBhcmlhLWRlc2NyaWJlZGJ5IHJlZmVyZW5jZSB0byBhIGhpZGRlbiBlbGVtZW50IHRoYXQgY29udGFpbnNcbiAgICogdGhlIG1lc3NhZ2UuIElmIHRoZSBzYW1lIG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLCB0aGVuIGl0IHdpbGwgcmV1c2UgdGhlIGNyZWF0ZWRcbiAgICogbWVzc2FnZSBlbGVtZW50LlxuICAgKi9cbiAgZGVzY3JpYmUoaG9zdEVsZW1lbnQ6IEVsZW1lbnQsIG1lc3NhZ2U6IHN0cmluZywgcm9sZT86IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgdG8gdGhlIGhvc3QgZWxlbWVudCBhbiBhcmlhLWRlc2NyaWJlZGJ5IHJlZmVyZW5jZSB0byBhbiBhbHJlYWR5LWV4aXN0aW5nIG1lc3NhZ2UgZWxlbWVudC5cbiAgICovXG4gIGRlc2NyaWJlKGhvc3RFbGVtZW50OiBFbGVtZW50LCBtZXNzYWdlOiBIVE1MRWxlbWVudCk6IHZvaWQ7XG5cbiAgZGVzY3JpYmUoaG9zdEVsZW1lbnQ6IEVsZW1lbnQsIG1lc3NhZ2U6IHN0cmluZyB8IEhUTUxFbGVtZW50LCByb2xlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jYW5CZURlc2NyaWJlZChob3N0RWxlbWVudCwgbWVzc2FnZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBnZXRLZXkobWVzc2FnZSwgcm9sZSk7XG5cbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBlbGVtZW50IGhhcyBhbiBJRC5cbiAgICAgIHNldE1lc3NhZ2VJZChtZXNzYWdlLCB0aGlzLl9pZCk7XG4gICAgICB0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KGtleSwge21lc3NhZ2VFbGVtZW50OiBtZXNzYWdlLCByZWZlcmVuY2VDb3VudDogMH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5fY3JlYXRlTWVzc2FnZUVsZW1lbnQobWVzc2FnZSwgcm9sZSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoaG9zdEVsZW1lbnQsIGtleSkpIHtcbiAgICAgIHRoaXMuX2FkZE1lc3NhZ2VSZWZlcmVuY2UoaG9zdEVsZW1lbnQsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlbW92ZXMgdGhlIGhvc3QgZWxlbWVudCdzIGFyaWEtZGVzY3JpYmVkYnkgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLiAqL1xuICByZW1vdmVEZXNjcmlwdGlvbihob3N0RWxlbWVudDogRWxlbWVudCwgbWVzc2FnZTogc3RyaW5nLCByb2xlPzogc3RyaW5nKTogdm9pZDtcblxuICAvKiogUmVtb3ZlcyB0aGUgaG9zdCBlbGVtZW50J3MgYXJpYS1kZXNjcmliZWRieSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgZWxlbWVudC4gKi9cbiAgcmVtb3ZlRGVzY3JpcHRpb24oaG9zdEVsZW1lbnQ6IEVsZW1lbnQsIG1lc3NhZ2U6IEhUTUxFbGVtZW50KTogdm9pZDtcblxuICByZW1vdmVEZXNjcmlwdGlvbihob3N0RWxlbWVudDogRWxlbWVudCwgbWVzc2FnZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQsIHJvbGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIXRoaXMuX2lzRWxlbWVudE5vZGUoaG9zdEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZ2V0S2V5KG1lc3NhZ2UsIHJvbGUpO1xuXG4gICAgaWYgKHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShob3N0RWxlbWVudCwga2V5KSkge1xuICAgICAgdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShob3N0RWxlbWVudCwga2V5KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBhIHN0cmluZywgaXQgbWVhbnMgdGhhdCBpdCdzIG9uZSB0aGF0IHdlIGNyZWF0ZWQgZm9yIHRoZVxuICAgIC8vIGNvbnN1bWVyIHNvIHdlIGNhbiByZW1vdmUgaXQgc2FmZWx5LCBvdGhlcndpc2Ugd2Ugc2hvdWxkIGxlYXZlIGl0IGluIHBsYWNlLlxuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyZWRNZXNzYWdlID0gdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChrZXkpO1xuICAgICAgaWYgKHJlZ2lzdGVyZWRNZXNzYWdlICYmIHJlZ2lzdGVyZWRNZXNzYWdlLnJlZmVyZW5jZUNvdW50ID09PSAwKSB7XG4gICAgICAgIHRoaXMuX2RlbGV0ZU1lc3NhZ2VFbGVtZW50KGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fbWVzc2FnZXNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9tZXNzYWdlc0NvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIFVucmVnaXN0ZXJzIGFsbCBjcmVhdGVkIG1lc3NhZ2UgZWxlbWVudHMgYW5kIHJlbW92ZXMgdGhlIG1lc3NhZ2UgY29udGFpbmVyLiAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjb25zdCBkZXNjcmliZWRFbGVtZW50cyA9IHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgWyR7Q0RLX0RFU0NSSUJFREJZX0hPU1RfQVRUUklCVVRFfT1cIiR7dGhpcy5faWR9XCJdYCxcbiAgICApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXNjcmliZWRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZGVzY3JpYmVkRWxlbWVudHNbaV0pO1xuICAgICAgZGVzY3JpYmVkRWxlbWVudHNbaV0ucmVtb3ZlQXR0cmlidXRlKENES19ERVNDUklCRURCWV9IT1NUX0FUVFJJQlVURSk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWVzc2FnZXNDb250YWluZXI/LnJlbW92ZSgpO1xuICAgIHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyID0gbnVsbDtcbiAgICB0aGlzLl9tZXNzYWdlUmVnaXN0cnkuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgaW4gdGhlIHZpc3VhbGx5IGhpZGRlbiBtZXNzYWdlIGNvbnRhaW5lciBlbGVtZW50IHdpdGggdGhlIG1lc3NhZ2VcbiAgICogYXMgaXRzIGNvbnRlbnQgYW5kIGFkZHMgaXQgdG8gdGhlIG1lc3NhZ2UgcmVnaXN0cnkuXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVNZXNzYWdlRWxlbWVudChtZXNzYWdlOiBzdHJpbmcsIHJvbGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXNzYWdlRWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHNldE1lc3NhZ2VJZChtZXNzYWdlRWxlbWVudCwgdGhpcy5faWQpO1xuICAgIG1lc3NhZ2VFbGVtZW50LnRleHRDb250ZW50ID0gbWVzc2FnZTtcblxuICAgIGlmIChyb2xlKSB7XG4gICAgICBtZXNzYWdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCByb2xlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVNZXNzYWdlc0NvbnRhaW5lcigpO1xuICAgIHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyIS5hcHBlbmRDaGlsZChtZXNzYWdlRWxlbWVudCk7XG4gICAgdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LnNldChnZXRLZXkobWVzc2FnZSwgcm9sZSksIHttZXNzYWdlRWxlbWVudCwgcmVmZXJlbmNlQ291bnQ6IDB9KTtcbiAgfVxuXG4gIC8qKiBEZWxldGVzIHRoZSBtZXNzYWdlIGVsZW1lbnQgZnJvbSB0aGUgZ2xvYmFsIG1lc3NhZ2VzIGNvbnRhaW5lci4gKi9cbiAgcHJpdmF0ZSBfZGVsZXRlTWVzc2FnZUVsZW1lbnQoa2V5OiBzdHJpbmcgfCBFbGVtZW50KSB7XG4gICAgdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChrZXkpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGdsb2JhbCBjb250YWluZXIgZm9yIGFsbCBhcmlhLWRlc2NyaWJlZGJ5IG1lc3NhZ2VzLiAqL1xuICBwcml2YXRlIF9jcmVhdGVNZXNzYWdlc0NvbnRhaW5lcigpIHtcbiAgICBpZiAodGhpcy5fbWVzc2FnZXNDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXJDbGFzc05hbWUgPSAnY2RrLWRlc2NyaWJlZGJ5LW1lc3NhZ2UtY29udGFpbmVyJztcbiAgICBjb25zdCBzZXJ2ZXJDb250YWluZXJzID0gdGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtjb250YWluZXJDbGFzc05hbWV9W3BsYXRmb3JtPVwic2VydmVyXCJdYCxcbiAgICApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXJ2ZXJDb250YWluZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBXaGVuIGdvaW5nIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50LCB3ZSBtYXkgZW5kIHVwIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZXJlJ3NcbiAgICAgIC8vIGFscmVhZHkgYSBjb250YWluZXIgb24gdGhlIHBhZ2UsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0LiBDbGVhciB0aGVcbiAgICAgIC8vIG9sZCBjb250YWluZXIgc28gd2UgZG9uJ3QgZ2V0IGR1cGxpY2F0ZXMuIERvaW5nIHRoaXMsIGluc3RlYWQgb2YgZW1wdHlpbmcgdGhlIHByZXZpb3VzXG4gICAgICAvLyBjb250YWluZXIsIHNob3VsZCBiZSBzbGlnaHRseSBmYXN0ZXIuXG4gICAgICBzZXJ2ZXJDb250YWluZXJzW2ldLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2VzQ29udGFpbmVyID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAvLyBXZSBhZGQgYHZpc2liaWxpdHk6IGhpZGRlbmAgaW4gb3JkZXIgdG8gcHJldmVudCB0ZXh0IGluIHRoaXMgY29udGFpbmVyIGZyb21cbiAgICAvLyBiZWluZyBzZWFyY2hhYmxlIGJ5IHRoZSBicm93c2VyJ3MgQ3RybCArIEYgZnVuY3Rpb25hbGl0eS5cbiAgICAvLyBTY3JlZW4tcmVhZGVycyB3aWxsIHN0aWxsIHJlYWQgdGhlIGRlc2NyaXB0aW9uIGZvciBlbGVtZW50cyB3aXRoIGFyaWEtZGVzY3JpYmVkYnkgZXZlblxuICAgIC8vIHdoZW4gdGhlIGRlc2NyaXB0aW9uIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG4gICAgbWVzc2FnZXNDb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIC8vIEV2ZW4gdGhvdWdoIHdlIHVzZSBgdmlzaWJpbGl0eTogaGlkZGVuYCwgd2Ugc3RpbGwgYXBwbHkgYGNkay12aXN1YWxseS1oaWRkZW5gIHNvIHRoYXRcbiAgICAvLyB0aGUgZGVzY3JpcHRpb24gZWxlbWVudCBkb2Vzbid0IGltcGFjdCBwYWdlIGxheW91dC5cbiAgICBtZXNzYWdlc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGNvbnRhaW5lckNsYXNzTmFtZSk7XG4gICAgbWVzc2FnZXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnY2RrLXZpc3VhbGx5LWhpZGRlbicpO1xuXG4gICAgLy8gQGJyZWFraW5nLWNoYW5nZSAxNC4wLjAgUmVtb3ZlIG51bGwgY2hlY2sgZm9yIGBfcGxhdGZvcm1gLlxuICAgIGlmICh0aGlzLl9wbGF0Zm9ybSAmJiAhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICBtZXNzYWdlc0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3BsYXRmb3JtJywgJ3NlcnZlcicpO1xuICAgIH1cblxuICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWVzc2FnZXNDb250YWluZXIpO1xuICAgIHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyID0gbWVzc2FnZXNDb250YWluZXI7XG4gIH1cblxuICAvKiogUmVtb3ZlcyBhbGwgY2RrLWRlc2NyaWJlZGJ5IG1lc3NhZ2VzIHRoYXQgYXJlIGhvc3RlZCB0aHJvdWdoIHRoZSBlbGVtZW50LiAqL1xuICBwcml2YXRlIF9yZW1vdmVDZGtEZXNjcmliZWRCeVJlZmVyZW5jZUlkcyhlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgLy8gUmVtb3ZlIGFsbCBhcmlhLWRlc2NyaWJlZGJ5IHJlZmVyZW5jZSBJRHMgdGhhdCBhcmUgcHJlZml4ZWQgYnkgQ0RLX0RFU0NSSUJFREJZX0lEX1BSRUZJWFxuICAgIGNvbnN0IG9yaWdpbmFsUmVmZXJlbmNlSWRzID0gZ2V0QXJpYVJlZmVyZW5jZUlkcyhlbGVtZW50LCAnYXJpYS1kZXNjcmliZWRieScpLmZpbHRlcihcbiAgICAgIGlkID0+IGlkLmluZGV4T2YoQ0RLX0RFU0NSSUJFREJZX0lEX1BSRUZJWCkgIT0gMCxcbiAgICApO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jywgb3JpZ2luYWxSZWZlcmVuY2VJZHMuam9pbignICcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbWVzc2FnZSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgdXNpbmcgYXJpYS1kZXNjcmliZWRieSBhbmQgaW5jcmVtZW50cyB0aGUgcmVnaXN0ZXJlZFxuICAgKiBtZXNzYWdlJ3MgcmVmZXJlbmNlIGNvdW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkTWVzc2FnZVJlZmVyZW5jZShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyB8IEVsZW1lbnQpIHtcbiAgICBjb25zdCByZWdpc3RlcmVkTWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoa2V5KSE7XG5cbiAgICAvLyBBZGQgdGhlIGFyaWEtZGVzY3JpYmVkYnkgcmVmZXJlbmNlIGFuZCBzZXQgdGhlXG4gICAgLy8gZGVzY3JpYmVkYnlfaG9zdCBhdHRyaWJ1dGUgdG8gbWFyayB0aGUgZWxlbWVudC5cbiAgICBhZGRBcmlhUmVmZXJlbmNlZElkKGVsZW1lbnQsICdhcmlhLWRlc2NyaWJlZGJ5JywgcmVnaXN0ZXJlZE1lc3NhZ2UubWVzc2FnZUVsZW1lbnQuaWQpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKENES19ERVNDUklCRURCWV9IT1NUX0FUVFJJQlVURSwgdGhpcy5faWQpO1xuICAgIHJlZ2lzdGVyZWRNZXNzYWdlLnJlZmVyZW5jZUNvdW50Kys7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIG1lc3NhZ2UgcmVmZXJlbmNlIGZyb20gdGhlIGVsZW1lbnQgdXNpbmcgYXJpYS1kZXNjcmliZWRieVxuICAgKiBhbmQgZGVjcmVtZW50cyB0aGUgcmVnaXN0ZXJlZCBtZXNzYWdlJ3MgcmVmZXJlbmNlIGNvdW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyB8IEVsZW1lbnQpIHtcbiAgICBjb25zdCByZWdpc3RlcmVkTWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoa2V5KSE7XG4gICAgcmVnaXN0ZXJlZE1lc3NhZ2UucmVmZXJlbmNlQ291bnQtLTtcblxuICAgIHJlbW92ZUFyaWFSZWZlcmVuY2VkSWQoZWxlbWVudCwgJ2FyaWEtZGVzY3JpYmVkYnknLCByZWdpc3RlcmVkTWVzc2FnZS5tZXNzYWdlRWxlbWVudC5pZCk7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQ0RLX0RFU0NSSUJFREJZX0hPU1RfQVRUUklCVVRFKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgaGFzIGJlZW4gZGVzY3JpYmVkIGJ5IHRoZSBwcm92aWRlZCBtZXNzYWdlIElELiAqL1xuICBwcml2YXRlIF9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcgfCBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVmZXJlbmNlSWRzID0gZ2V0QXJpYVJlZmVyZW5jZUlkcyhlbGVtZW50LCAnYXJpYS1kZXNjcmliZWRieScpO1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRNZXNzYWdlID0gdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChrZXkpO1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHJlZ2lzdGVyZWRNZXNzYWdlICYmIHJlZ2lzdGVyZWRNZXNzYWdlLm1lc3NhZ2VFbGVtZW50LmlkO1xuXG4gICAgcmV0dXJuICEhbWVzc2FnZUlkICYmIHJlZmVyZW5jZUlkcy5pbmRleE9mKG1lc3NhZ2VJZCkgIT0gLTE7XG4gIH1cblxuICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbWVzc2FnZSBjYW4gYmUgZGVzY3JpYmVkIG9uIGEgcGFydGljdWxhciBlbGVtZW50LiAqL1xuICBwcml2YXRlIF9jYW5CZURlc2NyaWJlZChlbGVtZW50OiBFbGVtZW50LCBtZXNzYWdlOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IHZvaWQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX2lzRWxlbWVudE5vZGUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIFdlJ2QgaGF2ZSB0byBtYWtlIHNvbWUgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGRlc2NyaXB0aW9uIGVsZW1lbnQncyB0ZXh0LCBpZiB0aGUgY29uc3VtZXJcbiAgICAgIC8vIHBhc3NlZCBpbiBhbiBlbGVtZW50LiBBc3N1bWUgdGhhdCBpZiBhbiBlbGVtZW50IGlzIHBhc3NlZCBpbiwgdGhlIGNvbnN1bWVyIGhhcyB2ZXJpZmllZFxuICAgICAgLy8gdGhhdCBpdCBjYW4gYmUgdXNlZCBhcyBhIGRlc2NyaXB0aW9uLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpbW1lZE1lc3NhZ2UgPSBtZXNzYWdlID09IG51bGwgPyAnJyA6IGAke21lc3NhZ2V9YC50cmltKCk7XG4gICAgY29uc3QgYXJpYUxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcblxuICAgIC8vIFdlIHNob3VsZG4ndCBzZXQgZGVzY3JpcHRpb25zIGlmIHRoZXkncmUgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgYGFyaWEtbGFiZWxgIG9mIHRoZVxuICAgIC8vIGVsZW1lbnQsIGJlY2F1c2Ugc2NyZWVuIHJlYWRlcnMgd2lsbCBlbmQgdXAgcmVhZGluZyBvdXQgdGhlIHNhbWUgdGV4dCB0d2ljZSBpbiBhIHJvdy5cbiAgICByZXR1cm4gdHJpbW1lZE1lc3NhZ2UgPyAhYXJpYUxhYmVsIHx8IGFyaWFMYWJlbC50cmltKCkgIT09IHRyaW1tZWRNZXNzYWdlIDogZmFsc2U7XG4gIH1cblxuICAvKiogQ2hlY2tzIHdoZXRoZXIgYSBub2RlIGlzIGFuIEVsZW1lbnQgbm9kZS4gKi9cbiAgcHJpdmF0ZSBfaXNFbGVtZW50Tm9kZShlbGVtZW50OiBOb2RlKTogZWxlbWVudCBpcyBFbGVtZW50IHtcbiAgICByZXR1cm4gZWxlbWVudC5ub2RlVHlwZSA9PT0gdGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFO1xuICB9XG59XG5cbi8qKiBHZXRzIGEga2V5IHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9vayBtZXNzYWdlcyB1cCBpbiB0aGUgcmVnaXN0cnkuICovXG5mdW5jdGlvbiBnZXRLZXkobWVzc2FnZTogc3RyaW5nIHwgRWxlbWVudCwgcm9sZT86IHN0cmluZyk6IHN0cmluZyB8IEVsZW1lbnQge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnID8gYCR7cm9sZSB8fCAnJ30vJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG4vKiogQXNzaWducyBhIHVuaXF1ZSBJRCB0byBhbiBlbGVtZW50LCBpZiBpdCBkb2Vzbid0IGhhdmUgb25lIGFscmVhZHkuICovXG5mdW5jdGlvbiBzZXRNZXNzYWdlSWQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHNlcnZpY2VJZDogc3RyaW5nKSB7XG4gIGlmICghZWxlbWVudC5pZCkge1xuICAgIGVsZW1lbnQuaWQgPSBgJHtDREtfREVTQ1JJQkVEQllfSURfUFJFRklYfS0ke3NlcnZpY2VJZH0tJHtuZXh0SWQrK31gO1xuICB9XG59XG4iXX0=
@@ -1,47 +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
- /** IDs are delimited by an empty space, as per the spec. */
9
- const ID_DELIMITER = ' ';
10
- /**
11
- * Adds the given ID to the specified ARIA attribute on an element.
12
- * Used for attributes such as aria-labelledby, aria-owns, etc.
13
- */
14
- export function addAriaReferencedId(el, attr, id) {
15
- const ids = getAriaReferenceIds(el, attr);
16
- id = id.trim();
17
- if (ids.some(existingId => existingId.trim() === id)) {
18
- return;
19
- }
20
- ids.push(id);
21
- el.setAttribute(attr, ids.join(ID_DELIMITER));
22
- }
23
- /**
24
- * Removes the given ID from the specified ARIA attribute on an element.
25
- * Used for attributes such as aria-labelledby, aria-owns, etc.
26
- */
27
- export function removeAriaReferencedId(el, attr, id) {
28
- const ids = getAriaReferenceIds(el, attr);
29
- id = id.trim();
30
- const filteredIds = ids.filter(val => val !== id);
31
- if (filteredIds.length) {
32
- el.setAttribute(attr, filteredIds.join(ID_DELIMITER));
33
- }
34
- else {
35
- el.removeAttribute(attr);
36
- }
37
- }
38
- /**
39
- * Gets the list of IDs referenced by the given ARIA attribute on an element.
40
- * Used for attributes such as aria-labelledby, aria-owns, etc.
41
- */
42
- export function getAriaReferenceIds(el, attr) {
43
- // Get string array of all individual ids (whitespace delimited) in the attribute value
44
- const attrValue = el.getAttribute(attr);
45
- return attrValue?.match(/\S+/g) ?? [];
46
- }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpYS1yZWZlcmVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2ExMXkvYXJpYS1kZXNjcmliZXIvYXJpYS1yZWZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsNERBQTREO0FBQzVELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUV6Qjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsRUFBVyxFQUFFLElBQXNCLEVBQUUsRUFBVTtJQUNqRixNQUFNLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JELE9BQU87SUFDVCxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUViLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEVBQVcsRUFBRSxJQUFzQixFQUFFLEVBQVU7SUFDcEYsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRWxELElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO1NBQU0sQ0FBQztRQUNOLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsRUFBVyxFQUFFLElBQVk7SUFDM0QsdUZBQXVGO0lBQ3ZGLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsT0FBTyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKiBJRHMgYXJlIGRlbGltaXRlZCBieSBhbiBlbXB0eSBzcGFjZSwgYXMgcGVyIHRoZSBzcGVjLiAqL1xuY29uc3QgSURfREVMSU1JVEVSID0gJyAnO1xuXG4vKipcbiAqIEFkZHMgdGhlIGdpdmVuIElEIHRvIHRoZSBzcGVjaWZpZWQgQVJJQSBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudC5cbiAqIFVzZWQgZm9yIGF0dHJpYnV0ZXMgc3VjaCBhcyBhcmlhLWxhYmVsbGVkYnksIGFyaWEtb3ducywgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQXJpYVJlZmVyZW5jZWRJZChlbDogRWxlbWVudCwgYXR0cjogYGFyaWEtJHtzdHJpbmd9YCwgaWQ6IHN0cmluZykge1xuICBjb25zdCBpZHMgPSBnZXRBcmlhUmVmZXJlbmNlSWRzKGVsLCBhdHRyKTtcbiAgaWQgPSBpZC50cmltKCk7XG4gIGlmIChpZHMuc29tZShleGlzdGluZ0lkID0+IGV4aXN0aW5nSWQudHJpbSgpID09PSBpZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWRzLnB1c2goaWQpO1xuXG4gIGVsLnNldEF0dHJpYnV0ZShhdHRyLCBpZHMuam9pbihJRF9ERUxJTUlURVIpKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBnaXZlbiBJRCBmcm9tIHRoZSBzcGVjaWZpZWQgQVJJQSBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudC5cbiAqIFVzZWQgZm9yIGF0dHJpYnV0ZXMgc3VjaCBhcyBhcmlhLWxhYmVsbGVkYnksIGFyaWEtb3ducywgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQXJpYVJlZmVyZW5jZWRJZChlbDogRWxlbWVudCwgYXR0cjogYGFyaWEtJHtzdHJpbmd9YCwgaWQ6IHN0cmluZykge1xuICBjb25zdCBpZHMgPSBnZXRBcmlhUmVmZXJlbmNlSWRzKGVsLCBhdHRyKTtcbiAgaWQgPSBpZC50cmltKCk7XG4gIGNvbnN0IGZpbHRlcmVkSWRzID0gaWRzLmZpbHRlcih2YWwgPT4gdmFsICE9PSBpZCk7XG5cbiAgaWYgKGZpbHRlcmVkSWRzLmxlbmd0aCkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyLCBmaWx0ZXJlZElkcy5qb2luKElEX0RFTElNSVRFUikpO1xuICB9IGVsc2Uge1xuICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGxpc3Qgb2YgSURzIHJlZmVyZW5jZWQgYnkgdGhlIGdpdmVuIEFSSUEgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQuXG4gKiBVc2VkIGZvciBhdHRyaWJ1dGVzIHN1Y2ggYXMgYXJpYS1sYWJlbGxlZGJ5LCBhcmlhLW93bnMsIGV0Yy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFyaWFSZWZlcmVuY2VJZHMoZWw6IEVsZW1lbnQsIGF0dHI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgLy8gR2V0IHN0cmluZyBhcnJheSBvZiBhbGwgaW5kaXZpZHVhbCBpZHMgKHdoaXRlc3BhY2UgZGVsaW1pdGVkKSBpbiB0aGUgYXR0cmlidXRlIHZhbHVlXG4gIGNvbnN0IGF0dHJWYWx1ZSA9IGVsLmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgcmV0dXJuIGF0dHJWYWx1ZT8ubWF0Y2goL1xcUysvZykgPz8gW107XG59XG4iXX0=
@@ -1,29 +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
- /** Gets whether an event could be a faked `mousedown` event dispatched by a screen reader. */
9
- export function isFakeMousedownFromScreenReader(event) {
10
- // Some screen readers will dispatch a fake `mousedown` event when pressing enter or space on
11
- // a clickable element. We can distinguish these events when `event.buttons` is zero, or
12
- // `event.detail` is zero depending on the browser:
13
- // - `event.buttons` works on Firefox, but fails on Chrome.
14
- // - `detail` works on Chrome, but fails on Firefox.
15
- return event.buttons === 0 || event.detail === 0;
16
- }
17
- /** Gets whether an event could be a faked `touchstart` event dispatched by a screen reader. */
18
- export function isFakeTouchstartFromScreenReader(event) {
19
- const touch = (event.touches && event.touches[0]) || (event.changedTouches && event.changedTouches[0]);
20
- // A fake `touchstart` can be distinguished from a real one by looking at the `identifier`
21
- // which is typically >= 0 on a real device versus -1 from a screen reader. Just to be safe,
22
- // we can also look at `radiusX` and `radiusY`. This behavior was observed against a Windows 10
23
- // device with a touch screen running NVDA v2020.4 and Firefox 85 or Chrome 88.
24
- return (!!touch &&
25
- touch.identifier === -1 &&
26
- (touch.radiusX == null || touch.radiusX === 1) &&
27
- (touch.radiusY == null || touch.radiusY === 1));
28
- }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZS1ldmVudC1kZXRlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2ExMXkvZmFrZS1ldmVudC1kZXRlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsOEZBQThGO0FBQzlGLE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxLQUFpQjtJQUMvRCw2RkFBNkY7SUFDN0Ysd0ZBQXdGO0lBQ3hGLG1EQUFtRDtJQUNuRCwyREFBMkQ7SUFDM0Qsb0RBQW9EO0lBQ3BELE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELCtGQUErRjtBQUMvRixNQUFNLFVBQVUsZ0NBQWdDLENBQUMsS0FBaUI7SUFDaEUsTUFBTSxLQUFLLEdBQ1QsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNGLDBGQUEwRjtJQUMxRiw0RkFBNEY7SUFDNUYsK0ZBQStGO0lBQy9GLCtFQUErRTtJQUMvRSxPQUFPLENBQ0wsQ0FBQyxDQUFDLEtBQUs7UUFDUCxLQUFLLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FDL0MsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqIEdldHMgd2hldGhlciBhbiBldmVudCBjb3VsZCBiZSBhIGZha2VkIGBtb3VzZWRvd25gIGV2ZW50IGRpc3BhdGNoZWQgYnkgYSBzY3JlZW4gcmVhZGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmFrZU1vdXNlZG93bkZyb21TY3JlZW5SZWFkZXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgLy8gU29tZSBzY3JlZW4gcmVhZGVycyB3aWxsIGRpc3BhdGNoIGEgZmFrZSBgbW91c2Vkb3duYCBldmVudCB3aGVuIHByZXNzaW5nIGVudGVyIG9yIHNwYWNlIG9uXG4gIC8vIGEgY2xpY2thYmxlIGVsZW1lbnQuIFdlIGNhbiBkaXN0aW5ndWlzaCB0aGVzZSBldmVudHMgd2hlbiBgZXZlbnQuYnV0dG9uc2AgaXMgemVybywgb3JcbiAgLy8gYGV2ZW50LmRldGFpbGAgaXMgemVybyBkZXBlbmRpbmcgb24gdGhlIGJyb3dzZXI6XG4gIC8vIC0gYGV2ZW50LmJ1dHRvbnNgIHdvcmtzIG9uIEZpcmVmb3gsIGJ1dCBmYWlscyBvbiBDaHJvbWUuXG4gIC8vIC0gYGRldGFpbGAgd29ya3Mgb24gQ2hyb21lLCBidXQgZmFpbHMgb24gRmlyZWZveC5cbiAgcmV0dXJuIGV2ZW50LmJ1dHRvbnMgPT09IDAgfHwgZXZlbnQuZGV0YWlsID09PSAwO1xufVxuXG4vKiogR2V0cyB3aGV0aGVyIGFuIGV2ZW50IGNvdWxkIGJlIGEgZmFrZWQgYHRvdWNoc3RhcnRgIGV2ZW50IGRpc3BhdGNoZWQgYnkgYSBzY3JlZW4gcmVhZGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmFrZVRvdWNoc3RhcnRGcm9tU2NyZWVuUmVhZGVyKGV2ZW50OiBUb3VjaEV2ZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHRvdWNoOiBUb3VjaCB8IHVuZGVmaW5lZCA9XG4gICAgKGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlc1swXSkgfHwgKGV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdKTtcblxuICAvLyBBIGZha2UgYHRvdWNoc3RhcnRgIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYSByZWFsIG9uZSBieSBsb29raW5nIGF0IHRoZSBgaWRlbnRpZmllcmBcbiAgLy8gd2hpY2ggaXMgdHlwaWNhbGx5ID49IDAgb24gYSByZWFsIGRldmljZSB2ZXJzdXMgLTEgZnJvbSBhIHNjcmVlbiByZWFkZXIuIEp1c3QgdG8gYmUgc2FmZSxcbiAgLy8gd2UgY2FuIGFsc28gbG9vayBhdCBgcmFkaXVzWGAgYW5kIGByYWRpdXNZYC4gVGhpcyBiZWhhdmlvciB3YXMgb2JzZXJ2ZWQgYWdhaW5zdCBhIFdpbmRvd3MgMTBcbiAgLy8gZGV2aWNlIHdpdGggYSB0b3VjaCBzY3JlZW4gcnVubmluZyBOVkRBIHYyMDIwLjQgYW5kIEZpcmVmb3ggODUgb3IgQ2hyb21lIDg4LlxuICByZXR1cm4gKFxuICAgICEhdG91Y2ggJiZcbiAgICB0b3VjaC5pZGVudGlmaWVyID09PSAtMSAmJlxuICAgICh0b3VjaC5yYWRpdXNYID09IG51bGwgfHwgdG91Y2gucmFkaXVzWCA9PT0gMSkgJiZcbiAgICAodG91Y2gucmFkaXVzWSA9PSBudWxsIHx8IHRvdWNoLnJhZGl1c1kgPT09IDEpXG4gICk7XG59XG4iXX0=