@angular/material 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 (831) hide show
  1. package/_index.scss +6 -6
  2. package/autocomplete/_autocomplete-theme.scss +37 -24
  3. package/autocomplete/index.d.ts +5 -15
  4. package/badge/_badge-theme.scss +38 -24
  5. package/badge/index.d.ts +3 -7
  6. package/bottom-sheet/_bottom-sheet-theme.scss +32 -20
  7. package/bottom-sheet/index.d.ts +5 -15
  8. package/button/_button-base.scss +2 -2
  9. package/button/_button-theme.scss +229 -105
  10. package/button/_fab-theme.scss +95 -44
  11. package/button/_icon-button-theme.scss +38 -25
  12. package/button/index.d.ts +24 -36
  13. package/button-toggle/_button-toggle-theme.scss +62 -37
  14. package/button-toggle/index.d.ts +5 -8
  15. package/card/_card-theme.scss +79 -38
  16. package/card/index.d.ts +2 -2
  17. package/checkbox/_checkbox-common.scss +4 -4
  18. package/checkbox/_checkbox-theme.scss +16 -10
  19. package/checkbox/index.d.ts +16 -14
  20. package/chips/_chips-theme.scss +64 -30
  21. package/chips/index.d.ts +19 -35
  22. package/core/_core-theme.scss +59 -55
  23. package/core/_core.scss +17 -14
  24. package/core/focus-indicators/_private.scss +21 -82
  25. package/core/index.d.ts +116 -200
  26. package/core/option/_optgroup-theme.scss +29 -18
  27. package/core/option/_option-theme.scss +34 -21
  28. package/core/ripple/_ripple-theme.scss +33 -21
  29. package/core/ripple/_ripple.scss +1 -1
  30. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +49 -23
  31. package/core/style/_elevation.scss +1 -1
  32. package/core/style/_menu-common.scss +1 -1
  33. package/core/style/_sass-utils.scss +4 -0
  34. package/core/theming/_all-theme.scss +3 -0
  35. package/core/theming/_config-validation.scss +4 -4
  36. package/core/theming/_definition.scss +12 -2
  37. package/core/theming/_palettes.scss +132 -45
  38. package/core/tokens/_density.scss +1 -0
  39. package/core/tokens/_m3-system.scss +162 -36
  40. package/core/tokens/_token-utils.scss +91 -34
  41. package/core/tokens/m2/_index.scss +2 -0
  42. package/core/tokens/m2/mat/_badge.scss +12 -3
  43. package/core/tokens/m2/mat/_timepicker.scss +44 -0
  44. package/core/tokens/m2/mdc/_radio.scss +1 -1
  45. package/core/tokens/m3/_index.scss +2 -0
  46. package/core/tokens/m3/definitions/_md-comp-elevated-card.scss +1 -1
  47. package/core/tokens/m3/definitions/_md-sys-color.scss +6 -6
  48. package/core/tokens/m3/mat/_badge.scss +3 -0
  49. package/core/tokens/m3/mat/_sidenav.scss +0 -1
  50. package/core/tokens/m3/mat/_timepicker.scss +22 -0
  51. package/core/typography/_all-typography.scss +2 -0
  52. package/datepicker/_datepicker-theme.scss +53 -32
  53. package/datepicker/index.d.ts +45 -71
  54. package/dialog/_dialog-theme.scss +46 -23
  55. package/dialog/index.d.ts +16 -37
  56. package/dialog/testing/index.d.ts +1 -1
  57. package/divider/_divider-theme.scss +28 -17
  58. package/expansion/_expansion-theme.scss +36 -24
  59. package/expansion/index.d.ts +9 -13
  60. package/fesm2022/autocomplete/testing.mjs.map +1 -1
  61. package/fesm2022/autocomplete.mjs +43 -75
  62. package/fesm2022/autocomplete.mjs.map +1 -1
  63. package/fesm2022/badge/testing.mjs.map +1 -1
  64. package/fesm2022/badge.mjs +24 -31
  65. package/fesm2022/badge.mjs.map +1 -1
  66. package/fesm2022/bottom-sheet/testing.mjs.map +1 -1
  67. package/fesm2022/bottom-sheet.mjs +26 -41
  68. package/fesm2022/bottom-sheet.mjs.map +1 -1
  69. package/fesm2022/button/testing.mjs.map +1 -1
  70. package/fesm2022/button-toggle/testing.mjs.map +1 -1
  71. package/fesm2022/button-toggle.mjs +30 -45
  72. package/fesm2022/button-toggle.mjs.map +1 -1
  73. package/fesm2022/button.mjs +79 -157
  74. package/fesm2022/button.mjs.map +1 -1
  75. package/fesm2022/card/testing.mjs.map +1 -1
  76. package/fesm2022/card.mjs +53 -68
  77. package/fesm2022/card.mjs.map +1 -1
  78. package/fesm2022/checkbox/testing.mjs.map +1 -1
  79. package/fesm2022/checkbox.mjs +41 -44
  80. package/fesm2022/checkbox.mjs.map +1 -1
  81. package/fesm2022/chips/testing.mjs.map +1 -1
  82. package/fesm2022/chips.mjs +131 -184
  83. package/fesm2022/chips.mjs.map +1 -1
  84. package/fesm2022/core/testing.mjs.map +1 -1
  85. package/fesm2022/core.mjs +370 -411
  86. package/fesm2022/core.mjs.map +1 -1
  87. package/fesm2022/datepicker/testing.mjs.map +1 -1
  88. package/fesm2022/datepicker.mjs +208 -349
  89. package/fesm2022/datepicker.mjs.map +1 -1
  90. package/fesm2022/dialog/testing.mjs +3 -4
  91. package/fesm2022/dialog/testing.mjs.map +1 -1
  92. package/fesm2022/dialog.mjs +50 -113
  93. package/fesm2022/dialog.mjs.map +1 -1
  94. package/fesm2022/divider/testing.mjs.map +1 -1
  95. package/fesm2022/divider.mjs +8 -8
  96. package/fesm2022/divider.mjs.map +1 -1
  97. package/fesm2022/expansion/testing.mjs.map +1 -1
  98. package/fesm2022/expansion.mjs +60 -98
  99. package/fesm2022/expansion.mjs.map +1 -1
  100. package/fesm2022/form-field/testing/control.mjs.map +1 -1
  101. package/fesm2022/form-field/testing.mjs.map +1 -1
  102. package/fesm2022/form-field.mjs +91 -102
  103. package/fesm2022/form-field.mjs.map +1 -1
  104. package/fesm2022/grid-list/testing.mjs.map +1 -1
  105. package/fesm2022/grid-list.mjs +39 -49
  106. package/fesm2022/grid-list.mjs.map +1 -1
  107. package/fesm2022/icon/testing.mjs +7 -7
  108. package/fesm2022/icon/testing.mjs.map +1 -1
  109. package/fesm2022/icon.mjs +22 -31
  110. package/fesm2022/icon.mjs.map +1 -1
  111. package/fesm2022/input/testing.mjs.map +1 -1
  112. package/fesm2022/input.mjs +58 -59
  113. package/fesm2022/input.mjs.map +1 -1
  114. package/fesm2022/list/testing.mjs.map +1 -1
  115. package/fesm2022/list.mjs +112 -158
  116. package/fesm2022/list.mjs.map +1 -1
  117. package/fesm2022/material.mjs.map +1 -1
  118. package/fesm2022/menu/testing.mjs.map +1 -1
  119. package/fesm2022/menu.mjs +69 -118
  120. package/fesm2022/menu.mjs.map +1 -1
  121. package/fesm2022/paginator/testing.mjs +2 -2
  122. package/fesm2022/paginator/testing.mjs.map +1 -1
  123. package/fesm2022/paginator.mjs +11 -11
  124. package/fesm2022/paginator.mjs.map +1 -1
  125. package/fesm2022/progress-bar/testing.mjs.map +1 -1
  126. package/fesm2022/progress-bar.mjs +19 -26
  127. package/fesm2022/progress-bar.mjs.map +1 -1
  128. package/fesm2022/progress-spinner/testing.mjs.map +1 -1
  129. package/fesm2022/progress-spinner.mjs +15 -21
  130. package/fesm2022/progress-spinner.mjs.map +1 -1
  131. package/fesm2022/radio/testing.mjs.map +1 -1
  132. package/fesm2022/radio.mjs +33 -45
  133. package/fesm2022/radio.mjs.map +1 -1
  134. package/fesm2022/select/testing.mjs.map +1 -1
  135. package/fesm2022/select.mjs +36 -69
  136. package/fesm2022/select.mjs.map +1 -1
  137. package/fesm2022/sidenav/testing.mjs.map +1 -1
  138. package/fesm2022/sidenav.mjs +72 -94
  139. package/fesm2022/sidenav.mjs.map +1 -1
  140. package/fesm2022/slide-toggle/testing.mjs.map +1 -1
  141. package/fesm2022/slide-toggle.mjs +31 -38
  142. package/fesm2022/slide-toggle.mjs.map +1 -1
  143. package/fesm2022/slider/testing.mjs.map +1 -1
  144. package/fesm2022/slider.mjs +66 -74
  145. package/fesm2022/slider.mjs.map +1 -1
  146. package/fesm2022/snack-bar/testing.mjs.map +1 -1
  147. package/fesm2022/snack-bar.mjs +52 -68
  148. package/fesm2022/snack-bar.mjs.map +1 -1
  149. package/fesm2022/sort/testing.mjs.map +1 -1
  150. package/fesm2022/sort.mjs +34 -52
  151. package/fesm2022/sort.mjs.map +1 -1
  152. package/fesm2022/stepper/testing.mjs.map +1 -1
  153. package/fesm2022/stepper.mjs +63 -77
  154. package/fesm2022/stepper.mjs.map +1 -1
  155. package/fesm2022/table/testing.mjs.map +1 -1
  156. package/fesm2022/table.mjs +59 -75
  157. package/fesm2022/table.mjs.map +1 -1
  158. package/fesm2022/tabs/testing.mjs.map +1 -1
  159. package/fesm2022/tabs.mjs +140 -199
  160. package/fesm2022/tabs.mjs.map +1 -1
  161. package/fesm2022/timepicker/testing.mjs +196 -0
  162. package/fesm2022/timepicker/testing.mjs.map +1 -0
  163. package/fesm2022/timepicker.mjs +842 -0
  164. package/fesm2022/timepicker.mjs.map +1 -0
  165. package/fesm2022/toolbar/testing.mjs.map +1 -1
  166. package/fesm2022/toolbar.mjs +18 -23
  167. package/fesm2022/toolbar.mjs.map +1 -1
  168. package/fesm2022/tooltip/testing.mjs.map +1 -1
  169. package/fesm2022/tooltip.mjs +69 -75
  170. package/fesm2022/tooltip.mjs.map +1 -1
  171. package/fesm2022/tree/testing.mjs.map +1 -1
  172. package/fesm2022/tree.mjs +36 -69
  173. package/fesm2022/tree.mjs.map +1 -1
  174. package/form-field/_form-field-high-contrast.scss +4 -4
  175. package/form-field/_form-field-theme.scss +114 -61
  176. package/form-field/_mdc-text-field-structure.scss +51 -49
  177. package/form-field/index.d.ts +13 -25
  178. package/grid-list/_grid-list-theme.scss +25 -15
  179. package/grid-list/index.d.ts +6 -8
  180. package/icon/_icon-theme.scss +22 -14
  181. package/icon/index.d.ts +3 -3
  182. package/input/_input-theme.scss +18 -11
  183. package/input/index.d.ts +6 -8
  184. package/list/_list-inherited-structure.scss +1 -13
  185. package/list/_list-item-hcm-indicator.scss +1 -1
  186. package/list/_list-theme.scss +89 -47
  187. package/list/index.d.ts +10 -14
  188. package/menu/_menu-theme.scss +33 -21
  189. package/menu/index.d.ts +15 -50
  190. package/package.json +10 -146
  191. package/paginator/_paginator-theme.scss +39 -23
  192. package/prebuilt-themes/azure-blue.css +1 -1
  193. package/prebuilt-themes/cyan-orange.css +1 -1
  194. package/prebuilt-themes/deeppurple-amber.css +1 -1
  195. package/prebuilt-themes/indigo-pink.css +1 -1
  196. package/prebuilt-themes/magenta-violet.css +1 -1
  197. package/prebuilt-themes/pink-bluegrey.css +1 -1
  198. package/prebuilt-themes/purple-green.css +1 -1
  199. package/prebuilt-themes/rose-red.css +1 -1
  200. package/progress-bar/_progress-bar-theme.scss +20 -16
  201. package/progress-bar/index.d.ts +3 -5
  202. package/progress-spinner/_progress-spinner-theme.scss +41 -25
  203. package/progress-spinner/index.d.ts +2 -2
  204. package/radio/_radio-theme.scss +60 -32
  205. package/radio/index.d.ts +5 -8
  206. package/schematics/collection.json +3 -3
  207. package/schematics/ng-add/fonts/material-fonts.d.ts +1 -1
  208. package/schematics/ng-add/fonts/material-fonts.js +2 -2
  209. package/schematics/ng-add/fonts/material-fonts.mjs +2 -2
  210. package/schematics/ng-add/index.d.ts +1 -1
  211. package/schematics/ng-add/index.js +3 -3
  212. package/schematics/ng-add/index.mjs +3 -3
  213. package/schematics/ng-add/package-config.d.ts +1 -1
  214. package/schematics/ng-add/package-config.js +2 -2
  215. package/schematics/ng-add/package-config.mjs +2 -2
  216. package/schematics/ng-add/schema.d.ts +1 -1
  217. package/schematics/ng-add/schema.js +2 -2
  218. package/schematics/ng-add/schema.mjs +2 -2
  219. package/schematics/ng-add/setup-project.d.ts +1 -1
  220. package/schematics/ng-add/setup-project.js +3 -3
  221. package/schematics/ng-add/setup-project.mjs +3 -3
  222. package/schematics/ng-add/theming/create-custom-theme.d.ts +1 -1
  223. package/schematics/ng-add/theming/create-custom-theme.js +2 -7
  224. package/schematics/ng-add/theming/create-custom-theme.mjs +2 -7
  225. package/schematics/ng-add/theming/theming.d.ts +1 -1
  226. package/schematics/ng-add/theming/theming.js +2 -2
  227. package/schematics/ng-add/theming/theming.mjs +2 -2
  228. package/schematics/ng-generate/address-form/index.d.ts +1 -1
  229. package/schematics/ng-generate/address-form/index.js +2 -2
  230. package/schematics/ng-generate/address-form/index.mjs +2 -2
  231. package/schematics/ng-generate/address-form/schema.d.ts +1 -1
  232. package/schematics/ng-generate/address-form/schema.js +2 -2
  233. package/schematics/ng-generate/address-form/schema.mjs +2 -2
  234. package/schematics/ng-generate/dashboard/index.d.ts +1 -1
  235. package/schematics/ng-generate/dashboard/index.js +2 -2
  236. package/schematics/ng-generate/dashboard/index.mjs +2 -2
  237. package/schematics/ng-generate/dashboard/schema.d.ts +1 -1
  238. package/schematics/ng-generate/dashboard/schema.js +2 -2
  239. package/schematics/ng-generate/dashboard/schema.mjs +2 -2
  240. package/schematics/ng-generate/navigation/index.d.ts +1 -1
  241. package/schematics/ng-generate/navigation/index.js +2 -2
  242. package/schematics/ng-generate/navigation/index.mjs +2 -2
  243. package/schematics/ng-generate/navigation/schema.d.ts +1 -1
  244. package/schematics/ng-generate/navigation/schema.js +2 -2
  245. package/schematics/ng-generate/navigation/schema.mjs +2 -2
  246. package/schematics/ng-generate/table/index.d.ts +1 -1
  247. package/schematics/ng-generate/table/index.js +2 -2
  248. package/schematics/ng-generate/table/index.mjs +2 -2
  249. package/schematics/ng-generate/table/schema.d.ts +1 -1
  250. package/schematics/ng-generate/table/schema.js +2 -2
  251. package/schematics/ng-generate/table/schema.mjs +2 -2
  252. package/schematics/ng-generate/{m3-theme → theme-color}/index_bundled.js +481 -289
  253. package/schematics/ng-generate/theme-color/index_bundled.js.map +7 -0
  254. package/schematics/ng-generate/{m3-theme → theme-color}/schema.json +7 -13
  255. package/schematics/ng-generate/tree/index.d.ts +1 -1
  256. package/schematics/ng-generate/tree/index.js +2 -2
  257. package/schematics/ng-generate/tree/index.mjs +2 -2
  258. package/schematics/ng-generate/tree/schema.d.ts +1 -1
  259. package/schematics/ng-generate/tree/schema.js +2 -2
  260. package/schematics/ng-generate/tree/schema.mjs +2 -2
  261. package/schematics/ng-update/index_bundled.js +6518 -2
  262. package/schematics/ng-update/index_bundled.js.map +4 -4
  263. package/select/_select-theme.scss +38 -25
  264. package/select/index.d.ts +4 -14
  265. package/sidenav/_sidenav-theme.scss +28 -17
  266. package/sidenav/index.d.ts +7 -17
  267. package/slide-toggle/_slide-toggle-theme.scss +52 -28
  268. package/slide-toggle/index.d.ts +2 -2
  269. package/slider/_slider-theme.scss +62 -38
  270. package/slider/index.d.ts +8 -8
  271. package/snack-bar/_snack-bar-theme.scss +29 -17
  272. package/snack-bar/index.d.ts +6 -22
  273. package/sort/_sort-theme.scss +33 -21
  274. package/sort/index.d.ts +4 -20
  275. package/stepper/_stepper-theme.scss +40 -27
  276. package/stepper/index.d.ts +6 -13
  277. package/table/_table-theme.scss +36 -23
  278. package/tabs/_tabs-common.scss +2 -2
  279. package/tabs/_tabs-theme.scss +97 -50
  280. package/tabs/index.d.ts +28 -35
  281. package/timepicker/_timepicker-theme.scss +124 -0
  282. package/timepicker/index.d.ts +297 -0
  283. package/timepicker/testing/index.d.ts +113 -0
  284. package/toolbar/_toolbar-theme.scss +35 -22
  285. package/toolbar/index.d.ts +3 -4
  286. package/tooltip/_tooltip-theme.scss +18 -15
  287. package/tooltip/index.d.ts +5 -12
  288. package/tree/_tree-theme.scss +33 -21
  289. package/tree/index.d.ts +5 -18
  290. package/core/focus-indicators/_focus-indicators-theme.scss +0 -11
  291. package/core/focus-indicators/_focus-indicators.scss +0 -6
  292. package/esm2022/autocomplete/animations.mjs +0 -24
  293. package/esm2022/autocomplete/autocomplete-origin.mjs +0 -31
  294. package/esm2022/autocomplete/autocomplete-trigger.mjs +0 -902
  295. package/esm2022/autocomplete/autocomplete.mjs +0 -238
  296. package/esm2022/autocomplete/autocomplete_public_index.mjs +0 -5
  297. package/esm2022/autocomplete/index.mjs +0 -9
  298. package/esm2022/autocomplete/module.mjs +0 -61
  299. package/esm2022/autocomplete/public-api.mjs +0 -14
  300. package/esm2022/autocomplete/testing/autocomplete-harness-filters.mjs +0 -9
  301. package/esm2022/autocomplete/testing/autocomplete-harness.mjs +0 -105
  302. package/esm2022/autocomplete/testing/index.mjs +0 -9
  303. package/esm2022/autocomplete/testing/public-api.mjs +0 -10
  304. package/esm2022/badge/badge-module.mjs +0 -27
  305. package/esm2022/badge/badge.mjs +0 -288
  306. package/esm2022/badge/badge_public_index.mjs +0 -5
  307. package/esm2022/badge/index.mjs +0 -9
  308. package/esm2022/badge/public-api.mjs +0 -10
  309. package/esm2022/badge/testing/badge-harness-filters.mjs +0 -9
  310. package/esm2022/badge/testing/badge-harness.mjs +0 -71
  311. package/esm2022/badge/testing/index.mjs +0 -9
  312. package/esm2022/badge/testing/public-api.mjs +0 -10
  313. package/esm2022/bottom-sheet/bottom-sheet-animations.mjs +0 -26
  314. package/esm2022/bottom-sheet/bottom-sheet-config.mjs +0 -48
  315. package/esm2022/bottom-sheet/bottom-sheet-container.mjs +0 -85
  316. package/esm2022/bottom-sheet/bottom-sheet-module.mjs +0 -28
  317. package/esm2022/bottom-sheet/bottom-sheet-ref.mjs +0 -104
  318. package/esm2022/bottom-sheet/bottom-sheet.mjs +0 -115
  319. package/esm2022/bottom-sheet/bottom-sheet_public_index.mjs +0 -5
  320. package/esm2022/bottom-sheet/index.mjs +0 -9
  321. package/esm2022/bottom-sheet/public-api.mjs +0 -14
  322. package/esm2022/bottom-sheet/testing/bottom-sheet-harness-filters.mjs +0 -9
  323. package/esm2022/bottom-sheet/testing/bottom-sheet-harness.mjs +0 -35
  324. package/esm2022/bottom-sheet/testing/index.mjs +0 -9
  325. package/esm2022/bottom-sheet/testing/public-api.mjs +0 -10
  326. package/esm2022/button/button-base.mjs +0 -230
  327. package/esm2022/button/button.mjs +0 -67
  328. package/esm2022/button/button_public_index.mjs +0 -5
  329. package/esm2022/button/fab.mjs +0 -166
  330. package/esm2022/button/icon-button.mjs +0 -56
  331. package/esm2022/button/index.mjs +0 -9
  332. package/esm2022/button/module.mjs +0 -65
  333. package/esm2022/button/public-api.mjs +0 -13
  334. package/esm2022/button/testing/button-harness-filters.mjs +0 -9
  335. package/esm2022/button/testing/button-harness.mjs +0 -80
  336. package/esm2022/button/testing/index.mjs +0 -9
  337. package/esm2022/button/testing/public-api.mjs +0 -10
  338. package/esm2022/button-toggle/button-toggle-module.mjs +0 -24
  339. package/esm2022/button-toggle/button-toggle.mjs +0 -651
  340. package/esm2022/button-toggle/button-toggle_public_index.mjs +0 -5
  341. package/esm2022/button-toggle/index.mjs +0 -9
  342. package/esm2022/button-toggle/public-api.mjs +0 -10
  343. package/esm2022/button-toggle/testing/button-toggle-group-harness-filters.mjs +0 -9
  344. package/esm2022/button-toggle/testing/button-toggle-group-harness.mjs +0 -47
  345. package/esm2022/button-toggle/testing/button-toggle-harness-filters.mjs +0 -9
  346. package/esm2022/button-toggle/testing/button-toggle-harness.mjs +0 -105
  347. package/esm2022/button-toggle/testing/index.mjs +0 -9
  348. package/esm2022/button-toggle/testing/public-api.mjs +0 -12
  349. package/esm2022/card/card.mjs +0 -273
  350. package/esm2022/card/card_public_index.mjs +0 -5
  351. package/esm2022/card/index.mjs +0 -9
  352. package/esm2022/card/module.mjs +0 -67
  353. package/esm2022/card/public-api.mjs +0 -10
  354. package/esm2022/card/testing/card-harness-filters.mjs +0 -9
  355. package/esm2022/card/testing/card-harness.mjs +0 -50
  356. package/esm2022/card/testing/index.mjs +0 -9
  357. package/esm2022/card/testing/public-api.mjs +0 -10
  358. package/esm2022/checkbox/checkbox-config.mjs +0 -22
  359. package/esm2022/checkbox/checkbox-required-validator.mjs +0 -41
  360. package/esm2022/checkbox/checkbox.mjs +0 -443
  361. package/esm2022/checkbox/checkbox_public_index.mjs +0 -5
  362. package/esm2022/checkbox/index.mjs +0 -9
  363. package/esm2022/checkbox/module.mjs +0 -41
  364. package/esm2022/checkbox/public-api.mjs +0 -12
  365. package/esm2022/checkbox/testing/checkbox-harness-filters.mjs +0 -9
  366. package/esm2022/checkbox/testing/checkbox-harness.mjs +0 -138
  367. package/esm2022/checkbox/testing/index.mjs +0 -9
  368. package/esm2022/checkbox/testing/public-api.mjs +0 -9
  369. package/esm2022/chips/chip-action.mjs +0 -113
  370. package/esm2022/chips/chip-edit-input.mjs +0 -61
  371. package/esm2022/chips/chip-grid.mjs +0 -420
  372. package/esm2022/chips/chip-icons.mjs +0 -107
  373. package/esm2022/chips/chip-input.mjs +0 -192
  374. package/esm2022/chips/chip-listbox.mjs +0 -369
  375. package/esm2022/chips/chip-option.mjs +0 -190
  376. package/esm2022/chips/chip-row.mjs +0 -173
  377. package/esm2022/chips/chip-set.mjs +0 -283
  378. package/esm2022/chips/chip-text-control.mjs +0 -9
  379. package/esm2022/chips/chip.mjs +0 -322
  380. package/esm2022/chips/chips_public_index.mjs +0 -5
  381. package/esm2022/chips/index.mjs +0 -9
  382. package/esm2022/chips/module.mjs +0 -85
  383. package/esm2022/chips/public-api.mjs +0 -20
  384. package/esm2022/chips/testing/chip-avatar-harness.mjs +0 -22
  385. package/esm2022/chips/testing/chip-edit-input-harness.mjs +0 -33
  386. package/esm2022/chips/testing/chip-grid-harness.mjs +0 -45
  387. package/esm2022/chips/testing/chip-harness-filters.mjs +0 -9
  388. package/esm2022/chips/testing/chip-harness.mjs +0 -62
  389. package/esm2022/chips/testing/chip-input-harness.mjs +0 -85
  390. package/esm2022/chips/testing/chip-listbox-harness.mjs +0 -61
  391. package/esm2022/chips/testing/chip-option-harness.mjs +0 -45
  392. package/esm2022/chips/testing/chip-remove-harness.mjs +0 -26
  393. package/esm2022/chips/testing/chip-row-harness.mjs +0 -40
  394. package/esm2022/chips/testing/chip-set-harness.mjs +0 -26
  395. package/esm2022/chips/testing/index.mjs +0 -9
  396. package/esm2022/chips/testing/public-api.mjs +0 -19
  397. package/esm2022/chips/tokens.mjs +0 -39
  398. package/esm2022/core/animation/animation.mjs +0 -21
  399. package/esm2022/core/common-behaviors/color.mjs +0 -33
  400. package/esm2022/core/common-behaviors/common-module.mjs +0 -127
  401. package/esm2022/core/common-behaviors/constructor.mjs +0 -9
  402. package/esm2022/core/common-behaviors/disable-ripple.mjs +0 -24
  403. package/esm2022/core/common-behaviors/disabled.mjs +0 -23
  404. package/esm2022/core/common-behaviors/error-state.mjs +0 -66
  405. package/esm2022/core/common-behaviors/index.mjs +0 -15
  406. package/esm2022/core/common-behaviors/initialized.mjs +0 -62
  407. package/esm2022/core/common-behaviors/tabindex.mjs +0 -25
  408. package/esm2022/core/core_public_index.mjs +0 -5
  409. package/esm2022/core/datetime/date-adapter.mjs +0 -109
  410. package/esm2022/core/datetime/date-formats.mjs +0 -10
  411. package/esm2022/core/datetime/index.mjs +0 -46
  412. package/esm2022/core/datetime/native-date-adapter.mjs +0 -221
  413. package/esm2022/core/datetime/native-date-formats.mjs +0 -19
  414. package/esm2022/core/error/error-options.mjs +0 -33
  415. package/esm2022/core/index.mjs +0 -9
  416. package/esm2022/core/internal-form-field/internal-form-field.mjs +0 -29
  417. package/esm2022/core/line/line.mjs +0 -64
  418. package/esm2022/core/option/index.mjs +0 -30
  419. package/esm2022/core/option/optgroup.mjs +0 -71
  420. package/esm2022/core/option/option-parent.mjs +0 -13
  421. package/esm2022/core/option/option.mjs +0 -283
  422. package/esm2022/core/private/index.mjs +0 -9
  423. package/esm2022/core/private/ripple-loader.mjs +0 -160
  424. package/esm2022/core/public-api.mjs +0 -19
  425. package/esm2022/core/ripple/index.mjs +0 -27
  426. package/esm2022/core/ripple/ripple-event-manager.mjs +0 -69
  427. package/esm2022/core/ripple/ripple-ref.mjs +0 -39
  428. package/esm2022/core/ripple/ripple-renderer.mjs +0 -354
  429. package/esm2022/core/ripple/ripple.mjs +0 -156
  430. package/esm2022/core/selection/index.mjs +0 -10
  431. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox-module.mjs +0 -24
  432. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +0 -62
  433. package/esm2022/core/testing/index.mjs +0 -9
  434. package/esm2022/core/testing/optgroup-harness-filters.mjs +0 -9
  435. package/esm2022/core/testing/optgroup-harness.mjs +0 -43
  436. package/esm2022/core/testing/option-harness-filters.mjs +0 -9
  437. package/esm2022/core/testing/option-harness.mjs +0 -53
  438. package/esm2022/core/testing/public-api.mjs +0 -12
  439. package/esm2022/core/version.mjs +0 -11
  440. package/esm2022/datepicker/aria-accessible-name.mjs +0 -159
  441. package/esm2022/datepicker/calendar-body.mjs +0 -509
  442. package/esm2022/datepicker/calendar.mjs +0 -426
  443. package/esm2022/datepicker/date-range-input-parts.mjs +0 -372
  444. package/esm2022/datepicker/date-range-input.mjs +0 -369
  445. package/esm2022/datepicker/date-range-picker.mjs +0 -51
  446. package/esm2022/datepicker/date-range-selection-strategy.mjs +0 -97
  447. package/esm2022/datepicker/date-selection-model.mjs +0 -188
  448. package/esm2022/datepicker/datepicker-actions.mjs +0 -91
  449. package/esm2022/datepicker/datepicker-animations.mjs +0 -35
  450. package/esm2022/datepicker/datepicker-base.mjs +0 -609
  451. package/esm2022/datepicker/datepicker-errors.mjs +0 -14
  452. package/esm2022/datepicker/datepicker-input-base.mjs +0 -311
  453. package/esm2022/datepicker/datepicker-input.mjs +0 -200
  454. package/esm2022/datepicker/datepicker-intl.mjs +0 -69
  455. package/esm2022/datepicker/datepicker-module.mjs +0 -138
  456. package/esm2022/datepicker/datepicker-toggle.mjs +0 -113
  457. package/esm2022/datepicker/datepicker.mjs +0 -38
  458. package/esm2022/datepicker/datepicker_public_index.mjs +0 -5
  459. package/esm2022/datepicker/index.mjs +0 -9
  460. package/esm2022/datepicker/month-view.mjs +0 -460
  461. package/esm2022/datepicker/multi-year-view.mjs +0 -330
  462. package/esm2022/datepicker/public-api.mjs +0 -27
  463. package/esm2022/datepicker/testing/calendar-cell-harness.mjs +0 -138
  464. package/esm2022/datepicker/testing/calendar-harness.mjs +0 -83
  465. package/esm2022/datepicker/testing/date-range-input-harness.mjs +0 -98
  466. package/esm2022/datepicker/testing/datepicker-harness-filters.mjs +0 -9
  467. package/esm2022/datepicker/testing/datepicker-input-harness-base.mjs +0 -81
  468. package/esm2022/datepicker/testing/datepicker-input-harness.mjs +0 -58
  469. package/esm2022/datepicker/testing/datepicker-toggle-harness.mjs +0 -41
  470. package/esm2022/datepicker/testing/datepicker-trigger-harness-base.mjs +0 -65
  471. package/esm2022/datepicker/testing/index.mjs +0 -9
  472. package/esm2022/datepicker/testing/public-api.mjs +0 -14
  473. package/esm2022/datepicker/year-view.mjs +0 -324
  474. package/esm2022/dialog/dialog-animations.mjs +0 -38
  475. package/esm2022/dialog/dialog-config.mjs +0 -59
  476. package/esm2022/dialog/dialog-container.mjs +0 -253
  477. package/esm2022/dialog/dialog-content-directives.mjs +0 -212
  478. package/esm2022/dialog/dialog-ref.mjs +0 -177
  479. package/esm2022/dialog/dialog.mjs +0 -212
  480. package/esm2022/dialog/dialog_public_index.mjs +0 -5
  481. package/esm2022/dialog/index.mjs +0 -9
  482. package/esm2022/dialog/module.mjs +0 -45
  483. package/esm2022/dialog/public-api.mjs +0 -15
  484. package/esm2022/dialog/testing/dialog-harness-filters.mjs +0 -9
  485. package/esm2022/dialog/testing/dialog-harness.mjs +0 -84
  486. package/esm2022/dialog/testing/dialog-opener.mjs +0 -58
  487. package/esm2022/dialog/testing/index.mjs +0 -10
  488. package/esm2022/dialog/testing/public-api.mjs +0 -10
  489. package/esm2022/divider/divider-module.mjs +0 -24
  490. package/esm2022/divider/divider.mjs +0 -48
  491. package/esm2022/divider/divider_public_index.mjs +0 -5
  492. package/esm2022/divider/index.mjs +0 -9
  493. package/esm2022/divider/public-api.mjs +0 -10
  494. package/esm2022/divider/testing/divider-harness-filters.mjs +0 -9
  495. package/esm2022/divider/testing/divider-harness.mjs +0 -22
  496. package/esm2022/divider/testing/index.mjs +0 -9
  497. package/esm2022/divider/testing/public-api.mjs +0 -10
  498. package/esm2022/expansion/accordion-base.mjs +0 -14
  499. package/esm2022/expansion/accordion.mjs +0 -96
  500. package/esm2022/expansion/expansion-animations.mjs +0 -51
  501. package/esm2022/expansion/expansion-module.mjs +0 -65
  502. package/esm2022/expansion/expansion-panel-base.mjs +0 -14
  503. package/esm2022/expansion/expansion-panel-content.mjs +0 -35
  504. package/esm2022/expansion/expansion-panel-header.mjs +0 -218
  505. package/esm2022/expansion/expansion-panel.mjs +0 -211
  506. package/esm2022/expansion/expansion_public_index.mjs +0 -5
  507. package/esm2022/expansion/index.mjs +0 -9
  508. package/esm2022/expansion/public-api.mjs +0 -16
  509. package/esm2022/expansion/testing/accordion-harness.mjs +0 -31
  510. package/esm2022/expansion/testing/expansion-harness-filters.mjs +0 -9
  511. package/esm2022/expansion/testing/expansion-harness.mjs +0 -128
  512. package/esm2022/expansion/testing/index.mjs +0 -9
  513. package/esm2022/expansion/testing/public-api.mjs +0 -11
  514. package/esm2022/form-field/directives/error.mjs +0 -48
  515. package/esm2022/form-field/directives/floating-label.mjs +0 -135
  516. package/esm2022/form-field/directives/hint.mjs +0 -40
  517. package/esm2022/form-field/directives/label.mjs +0 -22
  518. package/esm2022/form-field/directives/line-ripple.mjs +0 -60
  519. package/esm2022/form-field/directives/notched-outline.mjs +0 -66
  520. package/esm2022/form-field/directives/prefix.mjs +0 -38
  521. package/esm2022/form-field/directives/suffix.mjs +0 -38
  522. package/esm2022/form-field/form-field-animations.mjs +0 -24
  523. package/esm2022/form-field/form-field-control.mjs +0 -11
  524. package/esm2022/form-field/form-field-errors.mjs +0 -20
  525. package/esm2022/form-field/form-field.mjs +0 -620
  526. package/esm2022/form-field/form-field_public_index.mjs +0 -5
  527. package/esm2022/form-field/index.mjs +0 -9
  528. package/esm2022/form-field/module.mjs +0 -51
  529. package/esm2022/form-field/public-api.mjs +0 -18
  530. package/esm2022/form-field/testing/control/form-field-control-harness.mjs +0 -15
  531. package/esm2022/form-field/testing/control/index.mjs +0 -9
  532. package/esm2022/form-field/testing/error-harness.mjs +0 -29
  533. package/esm2022/form-field/testing/form-field-harness-filters.mjs +0 -9
  534. package/esm2022/form-field/testing/form-field-harness.mjs +0 -179
  535. package/esm2022/form-field/testing/index.mjs +0 -9
  536. package/esm2022/form-field/testing/public-api.mjs +0 -15
  537. package/esm2022/grid-list/grid-list-base.mjs +0 -14
  538. package/esm2022/grid-list/grid-list-module.mjs +0 -59
  539. package/esm2022/grid-list/grid-list.mjs +0 -146
  540. package/esm2022/grid-list/grid-list_public_index.mjs +0 -5
  541. package/esm2022/grid-list/grid-tile.mjs +0 -128
  542. package/esm2022/grid-list/index.mjs +0 -9
  543. package/esm2022/grid-list/public-api.mjs +0 -14
  544. package/esm2022/grid-list/testing/grid-list-harness-filters.mjs +0 -9
  545. package/esm2022/grid-list/testing/grid-list-harness.mjs +0 -76
  546. package/esm2022/grid-list/testing/grid-tile-harness.mjs +0 -71
  547. package/esm2022/grid-list/testing/index.mjs +0 -9
  548. package/esm2022/grid-list/testing/public-api.mjs +0 -11
  549. package/esm2022/grid-list/tile-coordinator.mjs +0 -145
  550. package/esm2022/grid-list/tile-styler.mjs +0 -231
  551. package/esm2022/icon/fake-svgs.mjs +0 -62
  552. package/esm2022/icon/icon-module.mjs +0 -24
  553. package/esm2022/icon/icon-registry.mjs +0 -592
  554. package/esm2022/icon/icon.mjs +0 -379
  555. package/esm2022/icon/icon_public_index.mjs +0 -5
  556. package/esm2022/icon/index.mjs +0 -9
  557. package/esm2022/icon/public-api.mjs +0 -11
  558. package/esm2022/icon/testing/fake-icon-registry.mjs +0 -92
  559. package/esm2022/icon/testing/icon-harness-filters.mjs +0 -14
  560. package/esm2022/icon/testing/icon-harness.mjs +0 -60
  561. package/esm2022/icon/testing/index.mjs +0 -9
  562. package/esm2022/icon/testing/public-api.mjs +0 -11
  563. package/esm2022/icon/testing/testing_public_index.mjs +0 -5
  564. package/esm2022/icon/trusted-types.mjs +0 -43
  565. package/esm2022/index.mjs +0 -14
  566. package/esm2022/input/index.mjs +0 -9
  567. package/esm2022/input/input-errors.mjs +0 -12
  568. package/esm2022/input/input-value-accessor.mjs +0 -16
  569. package/esm2022/input/input.mjs +0 -524
  570. package/esm2022/input/input_public_index.mjs +0 -5
  571. package/esm2022/input/module.mjs +0 -26
  572. package/esm2022/input/public-api.mjs +0 -14
  573. package/esm2022/input/testing/index.mjs +0 -9
  574. package/esm2022/input/testing/input-harness-filters.mjs +0 -9
  575. package/esm2022/input/testing/input-harness.mjs +0 -119
  576. package/esm2022/input/testing/native-option-harness.mjs +0 -42
  577. package/esm2022/input/testing/native-select-harness-filters.mjs +0 -9
  578. package/esm2022/input/testing/native-select-harness.mjs +0 -79
  579. package/esm2022/input/testing/public-api.mjs +0 -13
  580. package/esm2022/list/action-list.mjs +0 -31
  581. package/esm2022/list/index.mjs +0 -9
  582. package/esm2022/list/list-base.mjs +0 -284
  583. package/esm2022/list/list-item-sections.mjs +0 -144
  584. package/esm2022/list/list-module.mjs +0 -97
  585. package/esm2022/list/list-option-types.mjs +0 -16
  586. package/esm2022/list/list-option.mjs +0 -295
  587. package/esm2022/list/list.mjs +0 -103
  588. package/esm2022/list/list_public_index.mjs +0 -5
  589. package/esm2022/list/nav-list.mjs +0 -37
  590. package/esm2022/list/public-api.mjs +0 -18
  591. package/esm2022/list/selection-list.mjs +0 -391
  592. package/esm2022/list/subheader.mjs +0 -28
  593. package/esm2022/list/testing/action-list-harness.mjs +0 -59
  594. package/esm2022/list/testing/index.mjs +0 -9
  595. package/esm2022/list/testing/list-harness-base.mjs +0 -95
  596. package/esm2022/list/testing/list-harness-filters.mjs +0 -9
  597. package/esm2022/list/testing/list-harness.mjs +0 -41
  598. package/esm2022/list/testing/list-item-harness-base.mjs +0 -162
  599. package/esm2022/list/testing/nav-list-harness.mjs +0 -69
  600. package/esm2022/list/testing/public-api.mjs +0 -14
  601. package/esm2022/list/testing/selection-list-harness.mjs +0 -122
  602. package/esm2022/list/tokens.mjs +0 -11
  603. package/esm2022/menu/index.mjs +0 -9
  604. package/esm2022/menu/menu-animations.mjs +0 -61
  605. package/esm2022/menu/menu-content.mjs +0 -87
  606. package/esm2022/menu/menu-errors.mjs +0 -35
  607. package/esm2022/menu/menu-item.mjs +0 -148
  608. package/esm2022/menu/menu-panel.mjs +0 -14
  609. package/esm2022/menu/menu-positions.mjs +0 -9
  610. package/esm2022/menu/menu-trigger.mjs +0 -542
  611. package/esm2022/menu/menu.mjs +0 -405
  612. package/esm2022/menu/menu_public_index.mjs +0 -5
  613. package/esm2022/menu/module.mjs +0 -63
  614. package/esm2022/menu/public-api.mjs +0 -16
  615. package/esm2022/menu/testing/index.mjs +0 -9
  616. package/esm2022/menu/testing/menu-harness-filters.mjs +0 -9
  617. package/esm2022/menu/testing/menu-harness.mjs +0 -166
  618. package/esm2022/menu/testing/public-api.mjs +0 -10
  619. package/esm2022/paginator/index.mjs +0 -9
  620. package/esm2022/paginator/module.mjs +0 -28
  621. package/esm2022/paginator/paginator-intl.mjs +0 -62
  622. package/esm2022/paginator/paginator.mjs +0 -266
  623. package/esm2022/paginator/paginator_public_index.mjs +0 -5
  624. package/esm2022/paginator/public-api.mjs +0 -11
  625. package/esm2022/paginator/testing/index.mjs +0 -9
  626. package/esm2022/paginator/testing/paginator-harness-filters.mjs +0 -9
  627. package/esm2022/paginator/testing/paginator-harness.mjs +0 -98
  628. package/esm2022/paginator/testing/public-api.mjs +0 -10
  629. package/esm2022/progress-bar/index.mjs +0 -9
  630. package/esm2022/progress-bar/module.mjs +0 -24
  631. package/esm2022/progress-bar/progress-bar.mjs +0 -181
  632. package/esm2022/progress-bar/progress-bar_public_index.mjs +0 -5
  633. package/esm2022/progress-bar/public-api.mjs +0 -10
  634. package/esm2022/progress-bar/testing/index.mjs +0 -9
  635. package/esm2022/progress-bar/testing/progress-bar-harness-filters.mjs +0 -9
  636. package/esm2022/progress-bar/testing/progress-bar-harness.mjs +0 -33
  637. package/esm2022/progress-bar/testing/public-api.mjs +0 -10
  638. package/esm2022/progress-bar/testing/testing_public_index.mjs +0 -5
  639. package/esm2022/progress-spinner/index.mjs +0 -9
  640. package/esm2022/progress-spinner/module.mjs +0 -25
  641. package/esm2022/progress-spinner/progress-spinner.mjs +0 -166
  642. package/esm2022/progress-spinner/progress-spinner_public_index.mjs +0 -5
  643. package/esm2022/progress-spinner/public-api.mjs +0 -10
  644. package/esm2022/progress-spinner/testing/index.mjs +0 -9
  645. package/esm2022/progress-spinner/testing/progress-spinner-harness-filters.mjs +0 -9
  646. package/esm2022/progress-spinner/testing/progress-spinner-harness.mjs +0 -35
  647. package/esm2022/progress-spinner/testing/public-api.mjs +0 -10
  648. package/esm2022/progress-spinner/testing/testing_public_index.mjs +0 -5
  649. package/esm2022/radio/index.mjs +0 -9
  650. package/esm2022/radio/module.mjs +0 -25
  651. package/esm2022/radio/public-api.mjs +0 -10
  652. package/esm2022/radio/radio.mjs +0 -680
  653. package/esm2022/radio/radio_public_index.mjs +0 -5
  654. package/esm2022/radio/testing/index.mjs +0 -9
  655. package/esm2022/radio/testing/public-api.mjs +0 -10
  656. package/esm2022/radio/testing/radio-harness-filters.mjs +0 -9
  657. package/esm2022/radio/testing/radio-harness.mjs +0 -228
  658. package/esm2022/select/index.mjs +0 -9
  659. package/esm2022/select/module.mjs +0 -59
  660. package/esm2022/select/public-api.mjs +0 -15
  661. package/esm2022/select/select-animations.mjs +0 -38
  662. package/esm2022/select/select-errors.mjs +0 -35
  663. package/esm2022/select/select.mjs +0 -1160
  664. package/esm2022/select/select_public_index.mjs +0 -5
  665. package/esm2022/select/testing/index.mjs +0 -9
  666. package/esm2022/select/testing/public-api.mjs +0 -10
  667. package/esm2022/select/testing/select-harness-filters.mjs +0 -9
  668. package/esm2022/select/testing/select-harness.mjs +0 -129
  669. package/esm2022/sidenav/drawer-animations.mjs +0 -33
  670. package/esm2022/sidenav/drawer.mjs +0 -863
  671. package/esm2022/sidenav/index.mjs +0 -9
  672. package/esm2022/sidenav/public-api.mjs +0 -12
  673. package/esm2022/sidenav/sidenav-module.mjs +0 -60
  674. package/esm2022/sidenav/sidenav.mjs +0 -148
  675. package/esm2022/sidenav/sidenav_public_index.mjs +0 -5
  676. package/esm2022/sidenav/testing/drawer-container-harness.mjs +0 -36
  677. package/esm2022/sidenav/testing/drawer-content-harness.mjs +0 -23
  678. package/esm2022/sidenav/testing/drawer-harness-filters.mjs +0 -9
  679. package/esm2022/sidenav/testing/drawer-harness.mjs +0 -49
  680. package/esm2022/sidenav/testing/index.mjs +0 -9
  681. package/esm2022/sidenav/testing/public-api.mjs +0 -15
  682. package/esm2022/sidenav/testing/sidenav-container-harness.mjs +0 -36
  683. package/esm2022/sidenav/testing/sidenav-content-harness.mjs +0 -23
  684. package/esm2022/sidenav/testing/sidenav-harness.mjs +0 -28
  685. package/esm2022/slide-toggle/index.mjs +0 -9
  686. package/esm2022/slide-toggle/module.mjs +0 -41
  687. package/esm2022/slide-toggle/public-api.mjs +0 -12
  688. package/esm2022/slide-toggle/slide-toggle-config.mjs +0 -14
  689. package/esm2022/slide-toggle/slide-toggle-required-validator.mjs +0 -44
  690. package/esm2022/slide-toggle/slide-toggle.mjs +0 -273
  691. package/esm2022/slide-toggle/slide-toggle_public_index.mjs +0 -5
  692. package/esm2022/slide-toggle/testing/index.mjs +0 -9
  693. package/esm2022/slide-toggle/testing/public-api.mjs +0 -10
  694. package/esm2022/slide-toggle/testing/slide-toggle-harness-filters.mjs +0 -9
  695. package/esm2022/slide-toggle/testing/slide-toggle-harness.mjs +0 -110
  696. package/esm2022/slider/index.mjs +0 -9
  697. package/esm2022/slider/module.mjs +0 -39
  698. package/esm2022/slider/public-api.mjs +0 -13
  699. package/esm2022/slider/slider-input.mjs +0 -701
  700. package/esm2022/slider/slider-interface.mjs +0 -56
  701. package/esm2022/slider/slider-thumb.mjs +0 -231
  702. package/esm2022/slider/slider.mjs +0 -746
  703. package/esm2022/slider/slider_public_index.mjs +0 -5
  704. package/esm2022/slider/testing/index.mjs +0 -9
  705. package/esm2022/slider/testing/public-api.mjs +0 -11
  706. package/esm2022/slider/testing/slider-harness-filters.mjs +0 -7
  707. package/esm2022/slider/testing/slider-harness.mjs +0 -67
  708. package/esm2022/slider/testing/slider-thumb-harness.mjs +0 -95
  709. package/esm2022/snack-bar/index.mjs +0 -9
  710. package/esm2022/snack-bar/module.mjs +0 -47
  711. package/esm2022/snack-bar/public-api.mjs +0 -16
  712. package/esm2022/snack-bar/simple-snack-bar.mjs +0 -40
  713. package/esm2022/snack-bar/snack-bar-animations.mjs +0 -30
  714. package/esm2022/snack-bar/snack-bar-config.mjs +0 -33
  715. package/esm2022/snack-bar/snack-bar-container.mjs +0 -277
  716. package/esm2022/snack-bar/snack-bar-content.mjs +0 -55
  717. package/esm2022/snack-bar/snack-bar-ref.mjs +0 -89
  718. package/esm2022/snack-bar/snack-bar.mjs +0 -267
  719. package/esm2022/snack-bar/snack-bar_public_index.mjs +0 -5
  720. package/esm2022/snack-bar/testing/index.mjs +0 -9
  721. package/esm2022/snack-bar/testing/public-api.mjs +0 -10
  722. package/esm2022/snack-bar/testing/snack-bar-harness-filters.mjs +0 -9
  723. package/esm2022/snack-bar/testing/snack-bar-harness.mjs +0 -101
  724. package/esm2022/sort/index.mjs +0 -9
  725. package/esm2022/sort/public-api.mjs +0 -14
  726. package/esm2022/sort/sort-animations.mjs +0 -69
  727. package/esm2022/sort/sort-direction.mjs +0 -9
  728. package/esm2022/sort/sort-errors.mjs +0 -24
  729. package/esm2022/sort/sort-header-intl.mjs +0 -41
  730. package/esm2022/sort/sort-header.mjs +0 -317
  731. package/esm2022/sort/sort-module.mjs +0 -27
  732. package/esm2022/sort/sort.mjs +0 -155
  733. package/esm2022/sort/sort_public_index.mjs +0 -5
  734. package/esm2022/sort/testing/index.mjs +0 -9
  735. package/esm2022/sort/testing/public-api.mjs +0 -11
  736. package/esm2022/sort/testing/sort-harness-filters.mjs +0 -2
  737. package/esm2022/sort/testing/sort-harness.mjs +0 -36
  738. package/esm2022/sort/testing/sort-header-harness.mjs +0 -56
  739. package/esm2022/stepper/index.mjs +0 -9
  740. package/esm2022/stepper/public-api.mjs +0 -17
  741. package/esm2022/stepper/step-content.mjs +0 -27
  742. package/esm2022/stepper/step-header.mjs +0 -105
  743. package/esm2022/stepper/step-label.mjs +0 -22
  744. package/esm2022/stepper/stepper-animations.mjs +0 -47
  745. package/esm2022/stepper/stepper-button.mjs +0 -43
  746. package/esm2022/stepper/stepper-icon.mjs +0 -30
  747. package/esm2022/stepper/stepper-intl.mjs +0 -43
  748. package/esm2022/stepper/stepper-module.mjs +0 -88
  749. package/esm2022/stepper/stepper.mjs +0 -205
  750. package/esm2022/stepper/stepper_public_index.mjs +0 -5
  751. package/esm2022/stepper/testing/index.mjs +0 -9
  752. package/esm2022/stepper/testing/public-api.mjs +0 -12
  753. package/esm2022/stepper/testing/step-harness-filters.mjs +0 -7
  754. package/esm2022/stepper/testing/step-harness.mjs +0 -90
  755. package/esm2022/stepper/testing/stepper-button-harnesses.mjs +0 -48
  756. package/esm2022/stepper/testing/stepper-harness.mjs +0 -51
  757. package/esm2022/table/cell.mjs +0 -147
  758. package/esm2022/table/index.mjs +0 -9
  759. package/esm2022/table/module.mjs +0 -93
  760. package/esm2022/table/public-api.mjs +0 -14
  761. package/esm2022/table/row.mjs +0 -163
  762. package/esm2022/table/table-data-source.mjs +0 -317
  763. package/esm2022/table/table.mjs +0 -122
  764. package/esm2022/table/table_public_index.mjs +0 -5
  765. package/esm2022/table/testing/cell-harness.mjs +0 -77
  766. package/esm2022/table/testing/index.mjs +0 -9
  767. package/esm2022/table/testing/public-api.mjs +0 -12
  768. package/esm2022/table/testing/row-harness.mjs +0 -84
  769. package/esm2022/table/testing/table-harness-filters.mjs +0 -2
  770. package/esm2022/table/testing/table-harness.mjs +0 -86
  771. package/esm2022/table/text-column.mjs +0 -60
  772. package/esm2022/tabs/index.mjs +0 -9
  773. package/esm2022/tabs/ink-bar.mjs +0 -149
  774. package/esm2022/tabs/module.mjs +0 -60
  775. package/esm2022/tabs/paginated-tab-header.mjs +0 -539
  776. package/esm2022/tabs/public-api.mjs +0 -21
  777. package/esm2022/tabs/tab-body.mjs +0 -199
  778. package/esm2022/tabs/tab-config.mjs +0 -11
  779. package/esm2022/tabs/tab-content.mjs +0 -32
  780. package/esm2022/tabs/tab-group.mjs +0 -469
  781. package/esm2022/tabs/tab-header.mjs +0 -86
  782. package/esm2022/tabs/tab-label-wrapper.mjs +0 -49
  783. package/esm2022/tabs/tab-label.mjs +0 -44
  784. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +0 -388
  785. package/esm2022/tabs/tab.mjs +0 -128
  786. package/esm2022/tabs/tabs-animations.mjs +0 -45
  787. package/esm2022/tabs/tabs_public_index.mjs +0 -5
  788. package/esm2022/tabs/testing/index.mjs +0 -9
  789. package/esm2022/tabs/testing/public-api.mjs +0 -13
  790. package/esm2022/tabs/testing/tab-group-harness.mjs +0 -56
  791. package/esm2022/tabs/testing/tab-harness-filters.mjs +0 -2
  792. package/esm2022/tabs/testing/tab-harness.mjs +0 -66
  793. package/esm2022/tabs/testing/tab-link-harness.mjs +0 -40
  794. package/esm2022/tabs/testing/tab-nav-bar-harness.mjs +0 -66
  795. package/esm2022/tabs/testing/tab-nav-panel-harness.mjs +0 -27
  796. package/esm2022/toolbar/index.mjs +0 -9
  797. package/esm2022/toolbar/public-api.mjs +0 -10
  798. package/esm2022/toolbar/testing/index.mjs +0 -9
  799. package/esm2022/toolbar/testing/public-api.mjs +0 -10
  800. package/esm2022/toolbar/testing/toolbar-harness-filters.mjs +0 -9
  801. package/esm2022/toolbar/testing/toolbar-harness.mjs +0 -44
  802. package/esm2022/toolbar/toolbar-module.mjs +0 -24
  803. package/esm2022/toolbar/toolbar.mjs +0 -84
  804. package/esm2022/toolbar/toolbar_public_index.mjs +0 -5
  805. package/esm2022/tooltip/index.mjs +0 -9
  806. package/esm2022/tooltip/module.mjs +0 -29
  807. package/esm2022/tooltip/public-api.mjs +0 -11
  808. package/esm2022/tooltip/testing/index.mjs +0 -9
  809. package/esm2022/tooltip/testing/public-api.mjs +0 -10
  810. package/esm2022/tooltip/testing/tooltip-harness-filters.mjs +0 -9
  811. package/esm2022/tooltip/testing/tooltip-harness.mjs +0 -66
  812. package/esm2022/tooltip/tooltip-animations.mjs +0 -24
  813. package/esm2022/tooltip/tooltip.mjs +0 -920
  814. package/esm2022/tooltip/tooltip_public_index.mjs +0 -5
  815. package/esm2022/tree/data-source/flat-data-source.mjs +0 -156
  816. package/esm2022/tree/data-source/nested-data-source.mjs +0 -38
  817. package/esm2022/tree/index.mjs +0 -9
  818. package/esm2022/tree/node.mjs +0 -220
  819. package/esm2022/tree/outlet.mjs +0 -46
  820. package/esm2022/tree/padding.mjs +0 -46
  821. package/esm2022/tree/public-api.mjs +0 -16
  822. package/esm2022/tree/testing/index.mjs +0 -9
  823. package/esm2022/tree/testing/node-harness.mjs +0 -73
  824. package/esm2022/tree/testing/public-api.mjs +0 -11
  825. package/esm2022/tree/testing/tree-harness-filters.mjs +0 -9
  826. package/esm2022/tree/testing/tree-harness.mjs +0 -123
  827. package/esm2022/tree/toggle.mjs +0 -27
  828. package/esm2022/tree/tree-module.mjs +0 -50
  829. package/esm2022/tree/tree.mjs +0 -34
  830. package/esm2022/tree/tree_public_index.mjs +0 -5
  831. package/schematics/ng-generate/m3-theme/index_bundled.js.map +0 -7
@@ -1,542 +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 { isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader, } from '@angular/cdk/a11y';
9
- import { Directionality } from '@angular/cdk/bidi';
10
- import { ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';
11
- import { Overlay, OverlayConfig, } from '@angular/cdk/overlay';
12
- import { TemplatePortal } from '@angular/cdk/portal';
13
- import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, inject, Inject, InjectionToken, Input, NgZone, Optional, Output, Self, ViewContainerRef, } from '@angular/core';
14
- import { normalizePassiveListenerOptions } from '@angular/cdk/platform';
15
- import { asapScheduler, merge, of as observableOf, Subscription } from 'rxjs';
16
- import { delay, filter, take, takeUntil } from 'rxjs/operators';
17
- import { MatMenu } from './menu';
18
- import { throwMatMenuRecursiveError } from './menu-errors';
19
- import { MatMenuItem } from './menu-item';
20
- import { MAT_MENU_PANEL } from './menu-panel';
21
- import * as i0 from "@angular/core";
22
- import * as i1 from "@angular/cdk/overlay";
23
- import * as i2 from "./menu-item";
24
- import * as i3 from "@angular/cdk/bidi";
25
- import * as i4 from "@angular/cdk/a11y";
26
- /** Injection token that determines the scroll handling while the menu is open. */
27
- export const MAT_MENU_SCROLL_STRATEGY = new InjectionToken('mat-menu-scroll-strategy', {
28
- providedIn: 'root',
29
- factory: () => {
30
- const overlay = inject(Overlay);
31
- return () => overlay.scrollStrategies.reposition();
32
- },
33
- });
34
- /** @docs-private */
35
- export function MAT_MENU_SCROLL_STRATEGY_FACTORY(overlay) {
36
- return () => overlay.scrollStrategies.reposition();
37
- }
38
- /** @docs-private */
39
- export const MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER = {
40
- provide: MAT_MENU_SCROLL_STRATEGY,
41
- deps: [Overlay],
42
- useFactory: MAT_MENU_SCROLL_STRATEGY_FACTORY,
43
- };
44
- /** Options for binding a passive event listener. */
45
- const passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });
46
- /**
47
- * Default top padding of the menu panel.
48
- * @deprecated No longer being used. Will be removed.
49
- * @breaking-change 15.0.0
50
- */
51
- export const MENU_PANEL_TOP_PADDING = 8;
52
- /** Directive applied to an element that should trigger a `mat-menu`. */
53
- export class MatMenuTrigger {
54
- /**
55
- * @deprecated
56
- * @breaking-change 8.0.0
57
- */
58
- get _deprecatedMatMenuTriggerFor() {
59
- return this.menu;
60
- }
61
- set _deprecatedMatMenuTriggerFor(v) {
62
- this.menu = v;
63
- }
64
- /** References the menu instance that the trigger is associated with. */
65
- get menu() {
66
- return this._menu;
67
- }
68
- set menu(menu) {
69
- if (menu === this._menu) {
70
- return;
71
- }
72
- this._menu = menu;
73
- this._menuCloseSubscription.unsubscribe();
74
- if (menu) {
75
- if (menu === this._parentMaterialMenu && (typeof ngDevMode === 'undefined' || ngDevMode)) {
76
- throwMatMenuRecursiveError();
77
- }
78
- this._menuCloseSubscription = menu.close.subscribe((reason) => {
79
- this._destroyMenu(reason);
80
- // If a click closed the menu, we should close the entire chain of nested menus.
81
- if ((reason === 'click' || reason === 'tab') && this._parentMaterialMenu) {
82
- this._parentMaterialMenu.closed.emit(reason);
83
- }
84
- });
85
- }
86
- this._menuItemInstance?._setTriggersSubmenu(this.triggersSubmenu());
87
- }
88
- constructor(_overlay, _element, _viewContainerRef, scrollStrategy, parentMenu,
89
- // `MatMenuTrigger` is commonly used in combination with a `MatMenuItem`.
90
- // tslint:disable-next-line: lightweight-tokens
91
- _menuItemInstance, _dir, _focusMonitor, _ngZone) {
92
- this._overlay = _overlay;
93
- this._element = _element;
94
- this._viewContainerRef = _viewContainerRef;
95
- this._menuItemInstance = _menuItemInstance;
96
- this._dir = _dir;
97
- this._focusMonitor = _focusMonitor;
98
- this._ngZone = _ngZone;
99
- this._overlayRef = null;
100
- this._menuOpen = false;
101
- this._closingActionsSubscription = Subscription.EMPTY;
102
- this._hoverSubscription = Subscription.EMPTY;
103
- this._menuCloseSubscription = Subscription.EMPTY;
104
- this._changeDetectorRef = inject(ChangeDetectorRef);
105
- /**
106
- * Handles touch start events on the trigger.
107
- * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.
108
- */
109
- this._handleTouchStart = (event) => {
110
- if (!isFakeTouchstartFromScreenReader(event)) {
111
- this._openedBy = 'touch';
112
- }
113
- };
114
- // Tracking input type is necessary so it's possible to only auto-focus
115
- // the first item of the list when the menu is opened via the keyboard
116
- this._openedBy = undefined;
117
- /**
118
- * Whether focus should be restored when the menu is closed.
119
- * Note that disabling this option can have accessibility implications
120
- * and it's up to you to manage focus, if you decide to turn it off.
121
- */
122
- this.restoreFocus = true;
123
- /** Event emitted when the associated menu is opened. */
124
- this.menuOpened = new EventEmitter();
125
- /**
126
- * Event emitted when the associated menu is opened.
127
- * @deprecated Switch to `menuOpened` instead
128
- * @breaking-change 8.0.0
129
- */
130
- // tslint:disable-next-line:no-output-on-prefix
131
- this.onMenuOpen = this.menuOpened;
132
- /** Event emitted when the associated menu is closed. */
133
- this.menuClosed = new EventEmitter();
134
- /**
135
- * Event emitted when the associated menu is closed.
136
- * @deprecated Switch to `menuClosed` instead
137
- * @breaking-change 8.0.0
138
- */
139
- // tslint:disable-next-line:no-output-on-prefix
140
- this.onMenuClose = this.menuClosed;
141
- this._scrollStrategy = scrollStrategy;
142
- this._parentMaterialMenu = parentMenu instanceof MatMenu ? parentMenu : undefined;
143
- _element.nativeElement.addEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);
144
- }
145
- ngAfterContentInit() {
146
- this._handleHover();
147
- }
148
- ngOnDestroy() {
149
- if (this._overlayRef) {
150
- this._overlayRef.dispose();
151
- this._overlayRef = null;
152
- }
153
- this._element.nativeElement.removeEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);
154
- this._menuCloseSubscription.unsubscribe();
155
- this._closingActionsSubscription.unsubscribe();
156
- this._hoverSubscription.unsubscribe();
157
- }
158
- /** Whether the menu is open. */
159
- get menuOpen() {
160
- return this._menuOpen;
161
- }
162
- /** The text direction of the containing app. */
163
- get dir() {
164
- return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';
165
- }
166
- /** Whether the menu triggers a sub-menu or a top-level one. */
167
- triggersSubmenu() {
168
- return !!(this._menuItemInstance && this._parentMaterialMenu && this.menu);
169
- }
170
- /** Toggles the menu between the open and closed states. */
171
- toggleMenu() {
172
- return this._menuOpen ? this.closeMenu() : this.openMenu();
173
- }
174
- /** Opens the menu. */
175
- openMenu() {
176
- const menu = this.menu;
177
- if (this._menuOpen || !menu) {
178
- return;
179
- }
180
- const overlayRef = this._createOverlay(menu);
181
- const overlayConfig = overlayRef.getConfig();
182
- const positionStrategy = overlayConfig.positionStrategy;
183
- this._setPosition(menu, positionStrategy);
184
- overlayConfig.hasBackdrop =
185
- menu.hasBackdrop == null ? !this.triggersSubmenu() : menu.hasBackdrop;
186
- overlayRef.attach(this._getPortal(menu));
187
- if (menu.lazyContent) {
188
- menu.lazyContent.attach(this.menuData);
189
- }
190
- this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu());
191
- this._initMenu(menu);
192
- if (menu instanceof MatMenu) {
193
- menu._startAnimation();
194
- menu._directDescendantItems.changes.pipe(takeUntil(menu.close)).subscribe(() => {
195
- // Re-adjust the position without locking when the amount of items
196
- // changes so that the overlay is allowed to pick a new optimal position.
197
- positionStrategy.withLockedPosition(false).reapplyLastPosition();
198
- positionStrategy.withLockedPosition(true);
199
- });
200
- }
201
- }
202
- /** Closes the menu. */
203
- closeMenu() {
204
- this.menu?.close.emit();
205
- }
206
- /**
207
- * Focuses the menu trigger.
208
- * @param origin Source of the menu trigger's focus.
209
- */
210
- focus(origin, options) {
211
- if (this._focusMonitor && origin) {
212
- this._focusMonitor.focusVia(this._element, origin, options);
213
- }
214
- else {
215
- this._element.nativeElement.focus(options);
216
- }
217
- }
218
- /**
219
- * Updates the position of the menu to ensure that it fits all options within the viewport.
220
- */
221
- updatePosition() {
222
- this._overlayRef?.updatePosition();
223
- }
224
- /** Closes the menu and does the necessary cleanup. */
225
- _destroyMenu(reason) {
226
- if (!this._overlayRef || !this.menuOpen) {
227
- return;
228
- }
229
- const menu = this.menu;
230
- this._closingActionsSubscription.unsubscribe();
231
- this._overlayRef.detach();
232
- // Always restore focus if the user is navigating using the keyboard or the menu was opened
233
- // programmatically. We don't restore for non-root triggers, because it can prevent focus
234
- // from making it back to the root trigger when closing a long chain of menus by clicking
235
- // on the backdrop.
236
- if (this.restoreFocus && (reason === 'keydown' || !this._openedBy || !this.triggersSubmenu())) {
237
- this.focus(this._openedBy);
238
- }
239
- this._openedBy = undefined;
240
- if (menu instanceof MatMenu) {
241
- menu._resetAnimation();
242
- if (menu.lazyContent) {
243
- // Wait for the exit animation to finish before detaching the content.
244
- menu._animationDone
245
- .pipe(filter(event => event.toState === 'void'), take(1),
246
- // Interrupt if the content got re-attached.
247
- takeUntil(menu.lazyContent._attached))
248
- .subscribe({
249
- next: () => menu.lazyContent.detach(),
250
- // No matter whether the content got re-attached, reset the menu.
251
- complete: () => this._setIsMenuOpen(false),
252
- });
253
- }
254
- else {
255
- this._setIsMenuOpen(false);
256
- }
257
- }
258
- else {
259
- this._setIsMenuOpen(false);
260
- menu?.lazyContent?.detach();
261
- }
262
- }
263
- /**
264
- * This method sets the menu state to open and focuses the first item if
265
- * the menu was opened via the keyboard.
266
- */
267
- _initMenu(menu) {
268
- menu.parentMenu = this.triggersSubmenu() ? this._parentMaterialMenu : undefined;
269
- menu.direction = this.dir;
270
- this._setMenuElevation(menu);
271
- menu.focusFirstItem(this._openedBy || 'program');
272
- this._setIsMenuOpen(true);
273
- }
274
- /** Updates the menu elevation based on the amount of parent menus that it has. */
275
- _setMenuElevation(menu) {
276
- if (menu.setElevation) {
277
- let depth = 0;
278
- let parentMenu = menu.parentMenu;
279
- while (parentMenu) {
280
- depth++;
281
- parentMenu = parentMenu.parentMenu;
282
- }
283
- menu.setElevation(depth);
284
- }
285
- }
286
- // set state rather than toggle to support triggers sharing a menu
287
- _setIsMenuOpen(isOpen) {
288
- if (isOpen !== this._menuOpen) {
289
- this._menuOpen = isOpen;
290
- this._menuOpen ? this.menuOpened.emit() : this.menuClosed.emit();
291
- if (this.triggersSubmenu()) {
292
- this._menuItemInstance._setHighlighted(isOpen);
293
- }
294
- this._changeDetectorRef.markForCheck();
295
- }
296
- }
297
- /**
298
- * This method creates the overlay from the provided menu's template and saves its
299
- * OverlayRef so that it can be attached to the DOM when openMenu is called.
300
- */
301
- _createOverlay(menu) {
302
- if (!this._overlayRef) {
303
- const config = this._getOverlayConfig(menu);
304
- this._subscribeToPositions(menu, config.positionStrategy);
305
- this._overlayRef = this._overlay.create(config);
306
- // Consume the `keydownEvents` in order to prevent them from going to another overlay.
307
- // Ideally we'd also have our keyboard event logic in here, however doing so will
308
- // break anybody that may have implemented the `MatMenuPanel` themselves.
309
- this._overlayRef.keydownEvents().subscribe();
310
- }
311
- return this._overlayRef;
312
- }
313
- /**
314
- * This method builds the configuration object needed to create the overlay, the OverlayState.
315
- * @returns OverlayConfig
316
- */
317
- _getOverlayConfig(menu) {
318
- return new OverlayConfig({
319
- positionStrategy: this._overlay
320
- .position()
321
- .flexibleConnectedTo(this._element)
322
- .withLockedPosition()
323
- .withGrowAfterOpen()
324
- .withTransformOriginOn('.mat-menu-panel, .mat-mdc-menu-panel'),
325
- backdropClass: menu.backdropClass || 'cdk-overlay-transparent-backdrop',
326
- panelClass: menu.overlayPanelClass,
327
- scrollStrategy: this._scrollStrategy(),
328
- direction: this._dir,
329
- });
330
- }
331
- /**
332
- * Listens to changes in the position of the overlay and sets the correct classes
333
- * on the menu based on the new position. This ensures the animation origin is always
334
- * correct, even if a fallback position is used for the overlay.
335
- */
336
- _subscribeToPositions(menu, position) {
337
- if (menu.setPositionClasses) {
338
- position.positionChanges.subscribe(change => {
339
- const posX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';
340
- const posY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';
341
- // @breaking-change 15.0.0 Remove null check for `ngZone`.
342
- // `positionChanges` fires outside of the `ngZone` and `setPositionClasses` might be
343
- // updating something in the view so we need to bring it back in.
344
- if (this._ngZone) {
345
- this._ngZone.run(() => menu.setPositionClasses(posX, posY));
346
- }
347
- else {
348
- menu.setPositionClasses(posX, posY);
349
- }
350
- });
351
- }
352
- }
353
- /**
354
- * Sets the appropriate positions on a position strategy
355
- * so the overlay connects with the trigger correctly.
356
- * @param positionStrategy Strategy whose position to update.
357
- */
358
- _setPosition(menu, positionStrategy) {
359
- let [originX, originFallbackX] = menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];
360
- let [overlayY, overlayFallbackY] = menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];
361
- let [originY, originFallbackY] = [overlayY, overlayFallbackY];
362
- let [overlayX, overlayFallbackX] = [originX, originFallbackX];
363
- let offsetY = 0;
364
- if (this.triggersSubmenu()) {
365
- // When the menu is a sub-menu, it should always align itself
366
- // to the edges of the trigger, instead of overlapping it.
367
- overlayFallbackX = originX = menu.xPosition === 'before' ? 'start' : 'end';
368
- originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';
369
- if (this._parentMaterialMenu) {
370
- if (this._parentInnerPadding == null) {
371
- const firstItem = this._parentMaterialMenu.items.first;
372
- this._parentInnerPadding = firstItem ? firstItem._getHostElement().offsetTop : 0;
373
- }
374
- offsetY = overlayY === 'bottom' ? this._parentInnerPadding : -this._parentInnerPadding;
375
- }
376
- }
377
- else if (!menu.overlapTrigger) {
378
- originY = overlayY === 'top' ? 'bottom' : 'top';
379
- originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';
380
- }
381
- positionStrategy.withPositions([
382
- { originX, originY, overlayX, overlayY, offsetY },
383
- { originX: originFallbackX, originY, overlayX: overlayFallbackX, overlayY, offsetY },
384
- {
385
- originX,
386
- originY: originFallbackY,
387
- overlayX,
388
- overlayY: overlayFallbackY,
389
- offsetY: -offsetY,
390
- },
391
- {
392
- originX: originFallbackX,
393
- originY: originFallbackY,
394
- overlayX: overlayFallbackX,
395
- overlayY: overlayFallbackY,
396
- offsetY: -offsetY,
397
- },
398
- ]);
399
- }
400
- /** Returns a stream that emits whenever an action that should close the menu occurs. */
401
- _menuClosingActions() {
402
- const backdrop = this._overlayRef.backdropClick();
403
- const detachments = this._overlayRef.detachments();
404
- const parentClose = this._parentMaterialMenu ? this._parentMaterialMenu.closed : observableOf();
405
- const hover = this._parentMaterialMenu
406
- ? this._parentMaterialMenu._hovered().pipe(filter(active => active !== this._menuItemInstance), filter(() => this._menuOpen))
407
- : observableOf();
408
- return merge(backdrop, parentClose, hover, detachments);
409
- }
410
- /** Handles mouse presses on the trigger. */
411
- _handleMousedown(event) {
412
- if (!isFakeMousedownFromScreenReader(event)) {
413
- // Since right or middle button clicks won't trigger the `click` event,
414
- // we shouldn't consider the menu as opened by mouse in those cases.
415
- this._openedBy = event.button === 0 ? 'mouse' : undefined;
416
- // Since clicking on the trigger won't close the menu if it opens a sub-menu,
417
- // we should prevent focus from moving onto it via click to avoid the
418
- // highlight from lingering on the menu item.
419
- if (this.triggersSubmenu()) {
420
- event.preventDefault();
421
- }
422
- }
423
- }
424
- /** Handles key presses on the trigger. */
425
- _handleKeydown(event) {
426
- const keyCode = event.keyCode;
427
- // Pressing enter on the trigger will trigger the click handler later.
428
- if (keyCode === ENTER || keyCode === SPACE) {
429
- this._openedBy = 'keyboard';
430
- }
431
- if (this.triggersSubmenu() &&
432
- ((keyCode === RIGHT_ARROW && this.dir === 'ltr') ||
433
- (keyCode === LEFT_ARROW && this.dir === 'rtl'))) {
434
- this._openedBy = 'keyboard';
435
- this.openMenu();
436
- }
437
- }
438
- /** Handles click events on the trigger. */
439
- _handleClick(event) {
440
- if (this.triggersSubmenu()) {
441
- // Stop event propagation to avoid closing the parent menu.
442
- event.stopPropagation();
443
- this.openMenu();
444
- }
445
- else {
446
- this.toggleMenu();
447
- }
448
- }
449
- /** Handles the cases where the user hovers over the trigger. */
450
- _handleHover() {
451
- // Subscribe to changes in the hovered item in order to toggle the panel.
452
- if (!this.triggersSubmenu() || !this._parentMaterialMenu) {
453
- return;
454
- }
455
- this._hoverSubscription = this._parentMaterialMenu
456
- ._hovered()
457
- // Since we might have multiple competing triggers for the same menu (e.g. a sub-menu
458
- // with different data and triggers), we have to delay it by a tick to ensure that
459
- // it won't be closed immediately after it is opened.
460
- .pipe(filter(active => active === this._menuItemInstance && !active.disabled), delay(0, asapScheduler))
461
- .subscribe(() => {
462
- this._openedBy = 'mouse';
463
- // If the same menu is used between multiple triggers, it might still be animating
464
- // while the new trigger tries to re-open it. Wait for the animation to finish
465
- // before doing so. Also interrupt if the user moves to another item.
466
- if (this.menu instanceof MatMenu && this.menu._isAnimating) {
467
- // We need the `delay(0)` here in order to avoid
468
- // 'changed after checked' errors in some cases. See #12194.
469
- this.menu._animationDone
470
- .pipe(take(1), delay(0, asapScheduler), takeUntil(this._parentMaterialMenu._hovered()))
471
- .subscribe(() => this.openMenu());
472
- }
473
- else {
474
- this.openMenu();
475
- }
476
- });
477
- }
478
- /** Gets the portal that should be attached to the overlay. */
479
- _getPortal(menu) {
480
- // Note that we can avoid this check by keeping the portal on the menu panel.
481
- // While it would be cleaner, we'd have to introduce another required method on
482
- // `MatMenuPanel`, making it harder to consume.
483
- if (!this._portal || this._portal.templateRef !== menu.templateRef) {
484
- this._portal = new TemplatePortal(menu.templateRef, this._viewContainerRef);
485
- }
486
- return this._portal;
487
- }
488
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MatMenuTrigger, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: MAT_MENU_SCROLL_STRATEGY }, { token: MAT_MENU_PANEL, optional: true }, { token: i2.MatMenuItem, optional: true, self: true }, { token: i3.Directionality, optional: true }, { token: i4.FocusMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
489
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0-next.2", type: MatMenuTrigger, isStandalone: true, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: { _deprecatedMatMenuTriggerFor: ["mat-menu-trigger-for", "_deprecatedMatMenuTriggerFor"], menu: ["matMenuTriggerFor", "menu"], menuData: ["matMenuTriggerData", "menuData"], restoreFocus: ["matMenuTriggerRestoreFocus", "restoreFocus"] }, outputs: { menuOpened: "menuOpened", onMenuOpen: "onMenuOpen", menuClosed: "menuClosed", onMenuClose: "onMenuClose" }, host: { listeners: { "click": "_handleClick($event)", "mousedown": "_handleMousedown($event)", "keydown": "_handleKeydown($event)" }, properties: { "attr.aria-haspopup": "menu ? \"menu\" : null", "attr.aria-expanded": "menuOpen", "attr.aria-controls": "menuOpen ? menu.panelId : null" }, classAttribute: "mat-mdc-menu-trigger" }, exportAs: ["matMenuTrigger"], ngImport: i0 }); }
490
- }
491
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MatMenuTrigger, decorators: [{
492
- type: Directive,
493
- args: [{
494
- selector: `[mat-menu-trigger-for], [matMenuTriggerFor]`,
495
- host: {
496
- 'class': 'mat-mdc-menu-trigger',
497
- '[attr.aria-haspopup]': 'menu ? "menu" : null',
498
- '[attr.aria-expanded]': 'menuOpen',
499
- '[attr.aria-controls]': 'menuOpen ? menu.panelId : null',
500
- '(click)': '_handleClick($event)',
501
- '(mousedown)': '_handleMousedown($event)',
502
- '(keydown)': '_handleKeydown($event)',
503
- },
504
- exportAs: 'matMenuTrigger',
505
- standalone: true,
506
- }]
507
- }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
508
- type: Inject,
509
- args: [MAT_MENU_SCROLL_STRATEGY]
510
- }] }, { type: undefined, decorators: [{
511
- type: Inject,
512
- args: [MAT_MENU_PANEL]
513
- }, {
514
- type: Optional
515
- }] }, { type: i2.MatMenuItem, decorators: [{
516
- type: Optional
517
- }, {
518
- type: Self
519
- }] }, { type: i3.Directionality, decorators: [{
520
- type: Optional
521
- }] }, { type: i4.FocusMonitor }, { type: i0.NgZone }], propDecorators: { _deprecatedMatMenuTriggerFor: [{
522
- type: Input,
523
- args: ['mat-menu-trigger-for']
524
- }], menu: [{
525
- type: Input,
526
- args: ['matMenuTriggerFor']
527
- }], menuData: [{
528
- type: Input,
529
- args: ['matMenuTriggerData']
530
- }], restoreFocus: [{
531
- type: Input,
532
- args: ['matMenuTriggerRestoreFocus']
533
- }], menuOpened: [{
534
- type: Output
535
- }], onMenuOpen: [{
536
- type: Output
537
- }], menuClosed: [{
538
- type: Output
539
- }], onMenuClose: [{
540
- type: Output
541
- }] } });
542
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10cmlnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL21lbnUvbWVudS10cmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFHTCwrQkFBK0IsRUFDL0IsZ0NBQWdDLEdBQ2pDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFZLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBR0wsT0FBTyxFQUNQLGFBQWEsR0FJZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFDTCxNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFjLEVBQUUsSUFBSSxZQUFZLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsT0FBTyxFQUFrQixNQUFNLFFBQVEsQ0FBQztBQUNoRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFDLFdBQVcs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TSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBGb2N1c01vbml0b3IsXG4gIEZvY3VzT3JpZ2luLFxuICBpc0Zha2VNb3VzZWRvd25Gcm9tU2NyZWVuUmVhZGVyLFxuICBpc0Zha2VUb3VjaHN0YXJ0RnJvbVNjcmVlblJlYWRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtEaXJlY3Rpb24sIERpcmVjdGlvbmFsaXR5fSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge0VOVEVSLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgU1BBQ0V9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXG4gIEhvcml6b250YWxDb25uZWN0aW9uUG9zLFxuICBPdmVybGF5LFxuICBPdmVybGF5Q29uZmlnLFxuICBPdmVybGF5UmVmLFxuICBTY3JvbGxTdHJhdGVneSxcbiAgVmVydGljYWxDb25uZWN0aW9uUG9zLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1RlbXBsYXRlUG9ydGFsfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHthc2FwU2NoZWR1bGVyLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YgYXMgb2JzZXJ2YWJsZU9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWxheSwgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TWF0TWVudSwgTWVudUNsb3NlUmVhc29ufSBmcm9tICcuL21lbnUnO1xuaW1wb3J0IHt0aHJvd01hdE1lbnVSZWN1cnNpdmVFcnJvcn0gZnJvbSAnLi9tZW51LWVycm9ycyc7XG5pbXBvcnQge01hdE1lbnVJdGVtfSBmcm9tICcuL21lbnUtaXRlbSc7XG5pbXBvcnQge01BVF9NRU5VX1BBTkVMLCBNYXRNZW51UGFuZWx9IGZyb20gJy4vbWVudS1wYW5lbCc7XG5pbXBvcnQge01lbnVQb3NpdGlvblgsIE1lbnVQb3NpdGlvbll9IGZyb20gJy4vbWVudS1wb3NpdGlvbnMnO1xuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2Nyb2xsIGhhbmRsaW5nIHdoaWxlIHRoZSBtZW51IGlzIG9wZW4uICovXG5leHBvcnQgY29uc3QgTUFUX01FTlVfU0NST0xMX1NUUkFURUdZID0gbmV3IEluamVjdGlvblRva2VuPCgpID0+IFNjcm9sbFN0cmF0ZWd5PihcbiAgJ21hdC1tZW51LXNjcm9sbC1zdHJhdGVneScsXG4gIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeTogKCkgPT4ge1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgICAgIHJldHVybiAoKSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgIH0sXG4gIH0sXG4pO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIE1BVF9NRU5VX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZKG92ZXJsYXk6IE92ZXJsYXkpOiAoKSA9PiBTY3JvbGxTdHJhdGVneSB7XG4gIHJldHVybiAoKSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IE1BVF9NRU5VX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSID0ge1xuICBwcm92aWRlOiBNQVRfTUVOVV9TQ1JPTExfU1RSQVRFR1ksXG4gIGRlcHM6IFtPdmVybGF5XSxcbiAgdXNlRmFjdG9yeTogTUFUX01FTlVfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUlksXG59O1xuXG4vKiogT3B0aW9ucyBmb3IgYmluZGluZyBhIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXIuICovXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHtwYXNzaXZlOiB0cnVlfSk7XG5cbi8qKlxuICogRGVmYXVsdCB0b3AgcGFkZGluZyBvZiB0aGUgbWVudSBwYW5lbC5cbiAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciBiZWluZyB1c2VkLiBXaWxsIGJlIHJlbW92ZWQuXG4gKiBAYnJlYWtpbmctY2hhbmdlIDE1LjAuMFxuICovXG5leHBvcnQgY29uc3QgTUVOVV9QQU5FTF9UT1BfUEFERElORyA9IDg7XG5cbi8qKiBEaXJlY3RpdmUgYXBwbGllZCB0byBhbiBlbGVtZW50IHRoYXQgc2hvdWxkIHRyaWdnZXIgYSBgbWF0LW1lbnVgLiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBgW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXWAsXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbWF0LW1kYy1tZW51LXRyaWdnZXInLFxuICAgICdbYXR0ci5hcmlhLWhhc3BvcHVwXSc6ICdtZW51ID8gXCJtZW51XCIgOiBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAnbWVudU9wZW4nLFxuICAgICdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdtZW51T3BlbiA/IG1lbnUucGFuZWxJZCA6IG51bGwnLFxuICAgICcoY2xpY2spJzogJ19oYW5kbGVDbGljaygkZXZlbnQpJyxcbiAgICAnKG1vdXNlZG93biknOiAnX2hhbmRsZU1vdXNlZG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24pJzogJ19oYW5kbGVLZXlkb3duKCRldmVudCknLFxuICB9LFxuICBleHBvcnRBczogJ21hdE1lbnVUcmlnZ2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0TWVudVRyaWdnZXIgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9wb3J0YWw6IFRlbXBsYXRlUG9ydGFsO1xuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX21lbnVPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICBwcml2YXRlIF9ob3ZlclN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJpdmF0ZSBfbWVudUNsb3NlU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICBwcml2YXRlIF9zY3JvbGxTdHJhdGVneTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3k7XG4gIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogV2UncmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGEgYE1hdE1lbnVgIGhlcmUgc2luY2UgdGhlIGdlbmVyaWMgYE1hdE1lbnVQYW5lbGBcbiAgICogaW50ZXJmYWNlIGxhY2tzIHNvbWUgZnVuY3Rpb25hbGl0eSBhcm91bmQgbmVzdGVkIG1lbnVzIGFuZCBhbmltYXRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGFyZW50TWF0ZXJpYWxNZW51OiBNYXRNZW51IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDYWNoZWQgdmFsdWUgb2YgdGhlIHBhZGRpbmcgb2YgdGhlIHBhcmVudCBtZW51IHBhbmVsLlxuICAgKiBVc2VkIHRvIG9mZnNldCBzdWItbWVudXMgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHBhZGRpbmcuXG4gICAqL1xuICBwcml2YXRlIF9wYXJlbnRJbm5lclBhZGRpbmc6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSGFuZGxlcyB0b3VjaCBzdGFydCBldmVudHMgb24gdGhlIHRyaWdnZXIuXG4gICAqIE5lZWRzIHRvIGJlIGFuIGFycm93IGZ1bmN0aW9uIHNvIHdlIGNhbiBlYXNpbHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgYW5kIHJlbW92ZUV2ZW50TGlzdGVuZXIuXG4gICAqL1xuICBwcml2YXRlIF9oYW5kbGVUb3VjaFN0YXJ0ID0gKGV2ZW50OiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgaWYgKCFpc0Zha2VUb3VjaHN0YXJ0RnJvbVNjcmVlblJlYWRlcihldmVudCkpIHtcbiAgICAgIHRoaXMuX29wZW5lZEJ5ID0gJ3RvdWNoJztcbiAgICB9XG4gIH07XG5cbiAgLy8gVHJhY2tpbmcgaW5wdXQgdHlwZSBpcyBuZWNlc3Nhcnkgc28gaXQncyBwb3NzaWJsZSB0byBvbmx5IGF1dG8tZm9jdXNcbiAgLy8gdGhlIGZpcnN0IGl0ZW0gb2YgdGhlIGxpc3Qgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZFxuICBfb3BlbmVkQnk6IEV4Y2x1ZGU8Rm9jdXNPcmlnaW4sICdwcm9ncmFtJyB8IG51bGw+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4gICAqL1xuICBASW5wdXQoJ21hdC1tZW51LXRyaWdnZXItZm9yJylcbiAgZ2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoKTogTWF0TWVudVBhbmVsIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubWVudTtcbiAgfVxuICBzZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcih2OiBNYXRNZW51UGFuZWwgfCBudWxsKSB7XG4gICAgdGhpcy5tZW51ID0gdjtcbiAgfVxuXG4gIC8qKiBSZWZlcmVuY2VzIHRoZSBtZW51IGluc3RhbmNlIHRoYXQgdGhlIHRyaWdnZXIgaXMgYXNzb2NpYXRlZCB3aXRoLiAqL1xuICBASW5wdXQoJ21hdE1lbnVUcmlnZ2VyRm9yJylcbiAgZ2V0IG1lbnUoKTogTWF0TWVudVBhbmVsIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnU7XG4gIH1cbiAgc2V0IG1lbnUobWVudTogTWF0TWVudVBhbmVsIHwgbnVsbCkge1xuICAgIGlmIChtZW51ID09PSB0aGlzLl9tZW51KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWVudSA9IG1lbnU7XG4gICAgdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAobWVudSkge1xuICAgICAgaWYgKG1lbnUgPT09IHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkge1xuICAgICAgICB0aHJvd01hdE1lbnVSZWN1cnNpdmVFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24gPSBtZW51LmNsb3NlLnN1YnNjcmliZSgocmVhc29uOiBNZW51Q2xvc2VSZWFzb24pID0+IHtcbiAgICAgICAgdGhpcy5fZGVzdHJveU1lbnUocmVhc29uKTtcblxuICAgICAgICAvLyBJZiBhIGNsaWNrIGNsb3NlZCB0aGUgbWVudSwgd2Ugc2hvdWxkIGNsb3NlIHRoZSBlbnRpcmUgY2hhaW4gb2YgbmVzdGVkIG1lbnVzLlxuICAgICAgICBpZiAoKHJlYXNvbiA9PT0gJ2NsaWNrJyB8fCByZWFzb24gPT09ICd0YWInKSAmJiB0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpIHtcbiAgICAgICAgICB0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkLmVtaXQocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWVudUl0ZW1JbnN0YW5jZT8uX3NldFRyaWdnZXJzU3VibWVudSh0aGlzLnRyaWdnZXJzU3VibWVudSgpKTtcbiAgfVxuICBwcml2YXRlIF9tZW51OiBNYXRNZW51UGFuZWwgfCBudWxsO1xuXG4gIC8qKiBEYXRhIHRvIGJlIHBhc3NlZCBhbG9uZyB0byBhbnkgbGF6aWx5LXJlbmRlcmVkIGNvbnRlbnQuICovXG4gIEBJbnB1dCgnbWF0TWVudVRyaWdnZXJEYXRhJykgbWVudURhdGE6IGFueTtcblxuICAvKipcbiAgICogV2hldGhlciBmb2N1cyBzaG91bGQgYmUgcmVzdG9yZWQgd2hlbiB0aGUgbWVudSBpcyBjbG9zZWQuXG4gICAqIE5vdGUgdGhhdCBkaXNhYmxpbmcgdGhpcyBvcHRpb24gY2FuIGhhdmUgYWNjZXNzaWJpbGl0eSBpbXBsaWNhdGlvbnNcbiAgICogYW5kIGl0J3MgdXAgdG8geW91IHRvIG1hbmFnZSBmb2N1cywgaWYgeW91IGRlY2lkZSB0byB0dXJuIGl0IG9mZi5cbiAgICovXG4gIEBJbnB1dCgnbWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXMnKSByZXN0b3JlRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGFzc29jaWF0ZWQgbWVudSBpcyBvcGVuZWQuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBtZW51T3BlbmVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBtZW51IGlzIG9wZW5lZC5cbiAgICogQGRlcHJlY2F0ZWQgU3dpdGNoIHRvIGBtZW51T3BlbmVkYCBpbnN0ZWFkXG4gICAqIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1vdXRwdXQtb24tcHJlZml4XG4gIEBPdXRwdXQoKSByZWFkb25seSBvbk1lbnVPcGVuOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSB0aGlzLm1lbnVPcGVuZWQ7XG5cbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBtZW51IGlzIGNsb3NlZC4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG1lbnVDbG9zZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBhc3NvY2lhdGVkIG1lbnUgaXMgY2xvc2VkLlxuICAgKiBAZGVwcmVjYXRlZCBTd2l0Y2ggdG8gYG1lbnVDbG9zZWRgIGluc3RlYWRcbiAgICogQGJyZWFraW5nLWNoYW5nZSA4LjAuMFxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW91dHB1dC1vbi1wcmVmaXhcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG9uTWVudUNsb3NlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSB0aGlzLm1lbnVDbG9zZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHNjcm9sbFN0cmF0ZWd5OiBhbnksXG4gICAgcGFyZW50TWVudTogTWF0TWVudVBhbmVsLFxuICAgIG1lbnVJdGVtSW5zdGFuY2U6IE1hdE1lbnVJdGVtLFxuICAgIGRpcjogRGlyZWN0aW9uYWxpdHksXG4gICAgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgbmdab25lOiBOZ1pvbmUsXG4gICk7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIGBmb2N1c01vbml0b3JgIHdpbGwgYmVjb21lIGEgcmVxdWlyZWQgcGFyYW1ldGVyLlxuICAgKiBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvdmVybGF5OiBPdmVybGF5LFxuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgc2Nyb2xsU3RyYXRlZ3k6IGFueSxcbiAgICBwYXJlbnRNZW51OiBNYXRNZW51UGFuZWwsXG4gICAgbWVudUl0ZW1JbnN0YW5jZTogTWF0TWVudUl0ZW0sXG4gICAgZGlyOiBEaXJlY3Rpb25hbGl0eSxcbiAgICBmb2N1c01vbml0b3I/OiBGb2N1c01vbml0b3IgfCBudWxsLFxuICApO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBgbmdab25lYCB3aWxsIGJlY29tZSBhIHJlcXVpcmVkIHBhcmFtZXRlci5cbiAgICogQGJyZWFraW5nLWNoYW5nZSAxNS4wLjBcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBzY3JvbGxTdHJhdGVneTogYW55LFxuICAgIHBhcmVudE1lbnU6IE1hdE1lbnVQYW5lbCxcbiAgICBtZW51SXRlbUluc3RhbmNlOiBNYXRNZW51SXRlbSxcbiAgICBkaXI6IERpcmVjdGlvbmFsaXR5LFxuICAgIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBASW5qZWN0KE1BVF9NRU5VX1NDUk9MTF9TVFJBVEVHWSkgc2Nyb2xsU3RyYXRlZ3k6IGFueSxcbiAgICBASW5qZWN0KE1BVF9NRU5VX1BBTkVMKSBAT3B0aW9uYWwoKSBwYXJlbnRNZW51OiBNYXRNZW51UGFuZWwsXG4gICAgLy8gYE1hdE1lbnVUcmlnZ2VyYCBpcyBjb21tb25seSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBgTWF0TWVudUl0ZW1gLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbGlnaHR3ZWlnaHQtdG9rZW5zXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwcml2YXRlIF9tZW51SXRlbUluc3RhbmNlOiBNYXRNZW51SXRlbSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kaXI6IERpcmVjdGlvbmFsaXR5LFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yIHwgbnVsbCxcbiAgICBwcml2YXRlIF9uZ1pvbmU/OiBOZ1pvbmUsXG4gICkge1xuICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5ID0gc2Nyb2xsU3RyYXRlZ3k7XG4gICAgdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51ID0gcGFyZW50TWVudSBpbnN0YW5jZW9mIE1hdE1lbnUgPyBwYXJlbnRNZW51IDogdW5kZWZpbmVkO1xuXG4gICAgX2VsZW1lbnQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNoc3RhcnQnLFxuICAgICAgdGhpcy5faGFuZGxlVG91Y2hTdGFydCxcbiAgICAgIHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2hhbmRsZUhvdmVyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICd0b3VjaHN0YXJ0JyxcbiAgICAgIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICAgKTtcblxuICAgIHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5faG92ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBtZW51IGlzIG9wZW4uICovXG4gIGdldCBtZW51T3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudU9wZW47XG4gIH1cblxuICAvKiogVGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGFwcC4gKi9cbiAgZ2V0IGRpcigpOiBEaXJlY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9kaXIgJiYgdGhpcy5fZGlyLnZhbHVlID09PSAncnRsJyA/ICdydGwnIDogJ2x0cic7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbWVudSB0cmlnZ2VycyBhIHN1Yi1tZW51IG9yIGEgdG9wLWxldmVsIG9uZS4gKi9cbiAgdHJpZ2dlcnNTdWJtZW51KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLl9tZW51SXRlbUluc3RhbmNlICYmIHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSAmJiB0aGlzLm1lbnUpO1xuICB9XG5cbiAgLyoqIFRvZ2dsZXMgdGhlIG1lbnUgYmV0d2VlbiB0aGUgb3BlbiBhbmQgY2xvc2VkIHN0YXRlcy4gKi9cbiAgdG9nZ2xlTWVudSgpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudU9wZW4gPyB0aGlzLmNsb3NlTWVudSgpIDogdGhpcy5vcGVuTWVudSgpO1xuICB9XG5cbiAgLyoqIE9wZW5zIHRoZSBtZW51LiAqL1xuICBvcGVuTWVudSgpOiB2b2lkIHtcbiAgICBjb25zdCBtZW51ID0gdGhpcy5tZW51O1xuXG4gICAgaWYgKHRoaXMuX21lbnVPcGVuIHx8ICFtZW51KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMuX2NyZWF0ZU92ZXJsYXkobWVudSk7XG4gICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IG92ZXJsYXlSZWYuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IG92ZXJsYXlDb25maWcucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XG5cbiAgICB0aGlzLl9zZXRQb3NpdGlvbihtZW51LCBwb3NpdGlvblN0cmF0ZWd5KTtcbiAgICBvdmVybGF5Q29uZmlnLmhhc0JhY2tkcm9wID1cbiAgICAgIG1lbnUuaGFzQmFja2Ryb3AgPT0gbnVsbCA/ICF0aGlzLnRyaWdnZXJzU3VibWVudSgpIDogbWVudS5oYXNCYWNrZHJvcDtcbiAgICBvdmVybGF5UmVmLmF0dGFjaCh0aGlzLl9nZXRQb3J0YWwobWVudSkpO1xuXG4gICAgaWYgKG1lbnUubGF6eUNvbnRlbnQpIHtcbiAgICAgIG1lbnUubGF6eUNvbnRlbnQuYXR0YWNoKHRoaXMubWVudURhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VNZW51KCkpO1xuICAgIHRoaXMuX2luaXRNZW51KG1lbnUpO1xuXG4gICAgaWYgKG1lbnUgaW5zdGFuY2VvZiBNYXRNZW51KSB7XG4gICAgICBtZW51Ll9zdGFydEFuaW1hdGlvbigpO1xuICAgICAgbWVudS5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMucGlwZSh0YWtlVW50aWwobWVudS5jbG9zZSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIFJlLWFkanVzdCB0aGUgcG9zaXRpb24gd2l0aG91dCBsb2NraW5nIHdoZW4gdGhlIGFtb3VudCBvZiBpdGVtc1xuICAgICAgICAvLyBjaGFuZ2VzIHNvIHRoYXQgdGhlIG92ZXJsYXkgaXMgYWxsb3dlZCB0byBwaWNrIGEgbmV3IG9wdGltYWwgcG9zaXRpb24uXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3kud2l0aExvY2tlZFBvc2l0aW9uKGZhbHNlKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCk7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3kud2l0aExvY2tlZFBvc2l0aW9uKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgbWVudS4gKi9cbiAgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgIHRoaXMubWVudT8uY2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIG1lbnUgdHJpZ2dlci5cbiAgICogQHBhcmFtIG9yaWdpbiBTb3VyY2Ugb2YgdGhlIG1lbnUgdHJpZ2dlcidzIGZvY3VzLlxuICAgKi9cbiAgZm9jdXMob3JpZ2luPzogRm9jdXNPcmlnaW4sIG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5fZm9jdXNNb25pdG9yICYmIG9yaWdpbikge1xuICAgICAgdGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2VsZW1lbnQsIG9yaWdpbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIG1lbnUgdG8gZW5zdXJlIHRoYXQgaXQgZml0cyBhbGwgb3B0aW9ucyB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICAgKi9cbiAgdXBkYXRlUG9zaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIG1lbnUgYW5kIGRvZXMgdGhlIG5lY2Vzc2FyeSBjbGVhbnVwLiAqL1xuICBwcml2YXRlIF9kZXN0cm95TWVudShyZWFzb246IE1lbnVDbG9zZVJlYXNvbikge1xuICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZiB8fCAhdGhpcy5tZW51T3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbnUgPSB0aGlzLm1lbnU7XG4gICAgdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuXG4gICAgLy8gQWx3YXlzIHJlc3RvcmUgZm9jdXMgaWYgdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB1c2luZyB0aGUga2V5Ym9hcmQgb3IgdGhlIG1lbnUgd2FzIG9wZW5lZFxuICAgIC8vIHByb2dyYW1tYXRpY2FsbHkuIFdlIGRvbid0IHJlc3RvcmUgZm9yIG5vbi1yb290IHRyaWdnZXJzLCBiZWNhdXNlIGl0IGNhbiBwcmV2ZW50IGZvY3VzXG4gICAgLy8gZnJvbSBtYWtpbmcgaXQgYmFjayB0byB0aGUgcm9vdCB0cmlnZ2VyIHdoZW4gY2xvc2luZyBhIGxvbmcgY2hhaW4gb2YgbWVudXMgYnkgY2xpY2tpbmdcbiAgICAvLyBvbiB0aGUgYmFja2Ryb3AuXG4gICAgaWYgKHRoaXMucmVzdG9yZUZvY3VzICYmIChyZWFzb24gPT09ICdrZXlkb3duJyB8fCAhdGhpcy5fb3BlbmVkQnkgfHwgIXRoaXMudHJpZ2dlcnNTdWJtZW51KCkpKSB7XG4gICAgICB0aGlzLmZvY3VzKHRoaXMuX29wZW5lZEJ5KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vcGVuZWRCeSA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChtZW51IGluc3RhbmNlb2YgTWF0TWVudSkge1xuICAgICAgbWVudS5fcmVzZXRBbmltYXRpb24oKTtcblxuICAgICAgaWYgKG1lbnUubGF6eUNvbnRlbnQpIHtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGV4aXQgYW5pbWF0aW9uIHRvIGZpbmlzaCBiZWZvcmUgZGV0YWNoaW5nIHRoZSBjb250ZW50LlxuICAgICAgICBtZW51Ll9hbmltYXRpb25Eb25lXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnKSxcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAvLyBJbnRlcnJ1cHQgaWYgdGhlIGNvbnRlbnQgZ290IHJlLWF0dGFjaGVkLlxuICAgICAgICAgICAgdGFrZVVudGlsKG1lbnUubGF6eUNvbnRlbnQuX2F0dGFjaGVkKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoKSA9PiBtZW51LmxhenlDb250ZW50IS5kZXRhY2goKSxcbiAgICAgICAgICAgIC8vIE5vIG1hdHRlciB3aGV0aGVyIHRoZSBjb250ZW50IGdvdCByZS1hdHRhY2hlZCwgcmVzZXQgdGhlIG1lbnUuXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5fc2V0SXNNZW51T3BlbihmYWxzZSksXG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXRJc01lbnVPcGVuKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0SXNNZW51T3BlbihmYWxzZSk7XG4gICAgICBtZW51Py5sYXp5Q29udGVudD8uZGV0YWNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1lbnUgc3RhdGUgdG8gb3BlbiBhbmQgZm9jdXNlcyB0aGUgZmlyc3QgaXRlbSBpZlxuICAgKiB0aGUgbWVudSB3YXMgb3BlbmVkIHZpYSB0aGUga2V5Ym9hcmQuXG4gICAqL1xuICBwcml2YXRlIF9pbml0TWVudShtZW51OiBNYXRNZW51UGFuZWwpOiB2b2lkIHtcbiAgICBtZW51LnBhcmVudE1lbnUgPSB0aGlzLnRyaWdnZXJzU3VibWVudSgpID8gdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51IDogdW5kZWZpbmVkO1xuICAgIG1lbnUuZGlyZWN0aW9uID0gdGhpcy5kaXI7XG4gICAgdGhpcy5fc2V0TWVudUVsZXZhdGlvbihtZW51KTtcbiAgICBtZW51LmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5IHx8ICdwcm9ncmFtJyk7XG4gICAgdGhpcy5fc2V0SXNNZW51T3Blbih0cnVlKTtcbiAgfVxuXG4gIC8qKiBVcGRhdGVzIHRoZSBtZW51IGVsZXZhdGlvbiBiYXNlZCBvbiB0aGUgYW1vdW50IG9mIHBhcmVudCBtZW51cyB0aGF0IGl0IGhhcy4gKi9cbiAgcHJpdmF0ZSBfc2V0TWVudUVsZXZhdGlvbihtZW51OiBNYXRNZW51UGFuZWwpOiB2b2lkIHtcbiAgICBpZiAobWVudS5zZXRFbGV2YXRpb24pIHtcbiAgICAgIGxldCBkZXB0aCA9IDA7XG4gICAgICBsZXQgcGFyZW50TWVudSA9IG1lbnUucGFyZW50TWVudTtcblxuICAgICAgd2hpbGUgKHBhcmVudE1lbnUpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgICAgcGFyZW50TWVudSA9IHBhcmVudE1lbnUucGFyZW50TWVudTtcbiAgICAgIH1cblxuICAgICAgbWVudS5zZXRFbGV2YXRpb24oZGVwdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBzdGF0ZSByYXRoZXIgdGhhbiB0b2dnbGUgdG8gc3VwcG9ydCB0cmlnZ2VycyBzaGFyaW5nIGEgbWVudVxuICBwcml2YXRlIF9zZXRJc01lbnVPcGVuKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpc09wZW4gIT09IHRoaXMuX21lbnVPcGVuKSB7XG4gICAgICB0aGlzLl9tZW51T3BlbiA9IGlzT3BlbjtcbiAgICAgIHRoaXMuX21lbnVPcGVuID8gdGhpcy5tZW51T3BlbmVkLmVtaXQoKSA6IHRoaXMubWVudUNsb3NlZC5lbWl0KCk7XG5cbiAgICAgIGlmICh0aGlzLnRyaWdnZXJzU3VibWVudSgpKSB7XG4gICAgICAgIHRoaXMuX21lbnVJdGVtSW5zdGFuY2UuX3NldEhpZ2hsaWdodGVkKGlzT3Blbik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBvdmVybGF5IGZyb20gdGhlIHByb3ZpZGVkIG1lbnUncyB0ZW1wbGF0ZSBhbmQgc2F2ZXMgaXRzXG4gICAqIE92ZXJsYXlSZWYgc28gdGhhdCBpdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIERPTSB3aGVuIG9wZW5NZW51IGlzIGNhbGxlZC5cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZU92ZXJsYXkobWVudTogTWF0TWVudVBhbmVsKTogT3ZlcmxheVJlZiB7XG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9nZXRPdmVybGF5Q29uZmlnKG1lbnUpO1xuICAgICAgdGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnMoXG4gICAgICAgIG1lbnUsXG4gICAgICAgIGNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcbiAgICAgICk7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcblxuICAgICAgLy8gQ29uc3VtZSB0aGUgYGtleWRvd25FdmVudHNgIGluIG9yZGVyIHRvIHByZXZlbnQgdGhlbSBmcm9tIGdvaW5nIHRvIGFub3RoZXIgb3ZlcmxheS5cbiAgICAgIC8vIElkZWFsbHkgd2UnZCBhbHNvIGhhdmUgb3VyIGtleWJvYXJkIGV2ZW50IGxvZ2ljIGluIGhlcmUsIGhvd2V2ZXIgZG9pbmcgc28gd2lsbFxuICAgICAgLy8gYnJlYWsgYW55Ym9keSB0aGF0IG1heSBoYXZlIGltcGxlbWVudGVkIHRoZSBgTWF0TWVudVBhbmVsYCB0aGVtc2VsdmVzLlxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlSZWY7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgYnVpbGRzIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBuZWVkZWQgdG8gY3JlYXRlIHRoZSBvdmVybGF5LCB0aGUgT3ZlcmxheVN0YXRlLlxuICAgKiBAcmV0dXJucyBPdmVybGF5Q29uZmlnXG4gICAqL1xuICBwcml2YXRlIF9nZXRPdmVybGF5Q29uZmlnKG1lbnU6IE1hdE1lbnVQYW5lbCk6IE92ZXJsYXlDb25maWcge1xuICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLl9vdmVybGF5XG4gICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2VsZW1lbnQpXG4gICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKVxuICAgICAgICAud2l0aEdyb3dBZnRlck9wZW4oKVxuICAgICAgICAud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCcubWF0LW1lbnUtcGFuZWwsIC5tYXQtbWRjLW1lbnUtcGFuZWwnKSxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6IG1lbnUuYmFja2Ryb3BDbGFzcyB8fCAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgICAgcGFuZWxDbGFzczogbWVudS5vdmVybGF5UGFuZWxDbGFzcyxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLl9zY3JvbGxTdHJhdGVneSgpLFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLl9kaXIsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyB0byBjaGFuZ2VzIGluIHRoZSBwb3NpdGlvbiBvZiB0aGUgb3ZlcmxheSBhbmQgc2V0cyB0aGUgY29ycmVjdCBjbGFzc2VzXG4gICAqIG9uIHRoZSBtZW51IGJhc2VkIG9uIHRoZSBuZXcgcG9zaXRpb24uIFRoaXMgZW5zdXJlcyB0aGUgYW5pbWF0aW9uIG9yaWdpbiBpcyBhbHdheXNcbiAgICogY29ycmVjdCwgZXZlbiBpZiBhIGZhbGxiYWNrIHBvc2l0aW9uIGlzIHVzZWQgZm9yIHRoZSBvdmVybGF5LlxuICAgKi9cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9Qb3NpdGlvbnMobWVudTogTWF0TWVudVBhbmVsLCBwb3NpdGlvbjogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5KSB7XG4gICAgaWYgKG1lbnUuc2V0UG9zaXRpb25DbGFzc2VzKSB7XG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc1g6IE1lbnVQb3NpdGlvblggPSBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3ZlcmxheVggPT09ICdzdGFydCcgPyAnYWZ0ZXInIDogJ2JlZm9yZSc7XG4gICAgICAgIGNvbnN0IHBvc1k6IE1lbnVQb3NpdGlvblkgPSBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3ZlcmxheVkgPT09ICd0b3AnID8gJ2JlbG93JyA6ICdhYm92ZSc7XG5cbiAgICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSAxNS4wLjAgUmVtb3ZlIG51bGwgY2hlY2sgZm9yIGBuZ1pvbmVgLlxuICAgICAgICAvLyBgcG9zaXRpb25DaGFuZ2VzYCBmaXJlcyBvdXRzaWRlIG9mIHRoZSBgbmdab25lYCBhbmQgYHNldFBvc2l0aW9uQ2xhc3Nlc2AgbWlnaHQgYmVcbiAgICAgICAgLy8gdXBkYXRpbmcgc29tZXRoaW5nIGluIHRoZSB2aWV3IHNvIHdlIG5lZWQgdG8gYnJpbmcgaXQgYmFjayBpbi5cbiAgICAgICAgaWYgKHRoaXMuX25nWm9uZSkge1xuICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gbWVudS5zZXRQb3NpdGlvbkNsYXNzZXMhKHBvc1gsIHBvc1kpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZW51LnNldFBvc2l0aW9uQ2xhc3NlcyEocG9zWCwgcG9zWSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhcHByb3ByaWF0ZSBwb3NpdGlvbnMgb24gYSBwb3NpdGlvbiBzdHJhdGVneVxuICAgKiBzbyB0aGUgb3ZlcmxheSBjb25uZWN0cyB3aXRoIHRoZSB0cmlnZ2VyIGNvcnJlY3RseS5cbiAgICogQHBhcmFtIHBvc2l0aW9uU3RyYXRlZ3kgU3RyYXRlZ3kgd2hvc2UgcG9zaXRpb24gdG8gdXBkYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0UG9zaXRpb24obWVudTogTWF0TWVudVBhbmVsLCBwb3NpdGlvblN0cmF0ZWd5OiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kpIHtcbiAgICBsZXQgW29yaWdpblgsIG9yaWdpbkZhbGxiYWNrWF06IEhvcml6b250YWxDb25uZWN0aW9uUG9zW10gPVxuICAgICAgbWVudS54UG9zaXRpb24gPT09ICdiZWZvcmUnID8gWydlbmQnLCAnc3RhcnQnXSA6IFsnc3RhcnQnLCAnZW5kJ107XG5cbiAgICBsZXQgW292ZXJsYXlZLCBvdmVybGF5RmFsbGJhY2tZXTogVmVydGljYWxDb25uZWN0aW9uUG9zW10gPVxuICAgICAgbWVudS55UG9zaXRpb24gPT09ICdhYm92ZScgPyBbJ2JvdHRvbScsICd0b3AnXSA6IFsndG9wJywgJ2JvdHRvbSddO1xuXG4gICAgbGV0IFtvcmlnaW5ZLCBvcmlnaW5GYWxsYmFja1ldID0gW292ZXJsYXlZLCBvdmVybGF5RmFsbGJhY2tZXTtcbiAgICBsZXQgW292ZXJsYXlYLCBvdmVybGF5RmFsbGJhY2tYXSA9IFtvcmlnaW5YLCBvcmlnaW5GYWxsYmFja1hdO1xuICAgIGxldCBvZmZzZXRZID0gMDtcblxuICAgIGlmICh0aGlzLnRyaWdnZXJzU3VibWVudSgpKSB7XG4gICAgICAvLyBXaGVuIHRoZSBtZW51IGlzIGEgc3ViLW1lbnUsIGl0IHNob3VsZCBhbHdheXMgYWxpZ24gaXRzZWxmXG4gICAgICAvLyB0byB0aGUgZWRnZXMgb2YgdGhlIHRyaWdnZXIsIGluc3RlYWQgb2Ygb3ZlcmxhcHBpbmcgaXQuXG4gICAgICBvdmVybGF5RmFsbGJhY2tYID0gb3JpZ2luWCA9IG1lbnUueFBvc2l0aW9uID09PSAnYmVmb3JlJyA/ICdzdGFydCcgOiAnZW5kJztcbiAgICAgIG9yaWdpbkZhbGxiYWNrWCA9IG92ZXJsYXlYID0gb3JpZ2luWCA9PT0gJ2VuZCcgPyAnc3RhcnQnIDogJ2VuZCc7XG5cbiAgICAgIGlmICh0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudElubmVyUGFkZGluZyA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RJdGVtID0gdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Lml0ZW1zLmZpcnN0O1xuICAgICAgICAgIHRoaXMuX3BhcmVudElubmVyUGFkZGluZyA9IGZpcnN0SXRlbSA/IGZpcnN0SXRlbS5fZ2V0SG9zdEVsZW1lbnQoKS5vZmZzZXRUb3AgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0WSA9IG92ZXJsYXlZID09PSAnYm90dG9tJyA/IHRoaXMuX3BhcmVudElubmVyUGFkZGluZyA6IC10aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghbWVudS5vdmVybGFwVHJpZ2dlcikge1xuICAgICAgb3JpZ2luWSA9IG92ZXJsYXlZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICBvcmlnaW5GYWxsYmFja1kgPSBvdmVybGF5RmFsbGJhY2tZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgfVxuXG4gICAgcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgIHtvcmlnaW5YLCBvcmlnaW5ZLCBvdmVybGF5WCwgb3ZlcmxheVksIG9mZnNldFl9LFxuICAgICAge29yaWdpblg6IG9yaWdpbkZhbGxiYWNrWCwgb3JpZ2luWSwgb3ZlcmxheVg6IG92ZXJsYXlGYWxsYmFja1gsIG92ZXJsYXlZLCBvZmZzZXRZfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWCxcbiAgICAgICAgb3JpZ2luWTogb3JpZ2luRmFsbGJhY2tZLFxuICAgICAgICBvdmVybGF5WCxcbiAgICAgICAgb3ZlcmxheVk6IG92ZXJsYXlGYWxsYmFja1ksXG4gICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogb3JpZ2luRmFsbGJhY2tYLFxuICAgICAgICBvcmlnaW5ZOiBvcmlnaW5GYWxsYmFja1ksXG4gICAgICAgIG92ZXJsYXlYOiBvdmVybGF5RmFsbGJhY2tYLFxuICAgICAgICBvdmVybGF5WTogb3ZlcmxheUZhbGxiYWNrWSxcbiAgICAgICAgb2Zmc2V0WTogLW9mZnNldFksXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBzdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciBhbiBhY3Rpb24gdGhhdCBzaG91bGQgY2xvc2UgdGhlIG1lbnUgb2NjdXJzLiAqL1xuICBwcml2YXRlIF9tZW51Q2xvc2luZ0FjdGlvbnMoKSB7XG4gICAgY29uc3QgYmFja2Ryb3AgPSB0aGlzLl9vdmVybGF5UmVmIS5iYWNrZHJvcENsaWNrKCk7XG4gICAgY29uc3QgZGV0YWNobWVudHMgPSB0aGlzLl9vdmVybGF5UmVmIS5kZXRhY2htZW50cygpO1xuICAgIGNvbnN0IHBhcmVudENsb3NlID0gdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51ID8gdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZCA6IG9ic2VydmFibGVPZigpO1xuICAgIGNvbnN0IGhvdmVyID0gdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51XG4gICAgICA/IHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGFjdGl2ZSA9PiBhY3RpdmUgIT09IHRoaXMuX21lbnVJdGVtSW5zdGFuY2UpLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9tZW51T3BlbiksXG4gICAgICAgIClcbiAgICAgIDogb2JzZXJ2YWJsZU9mKCk7XG5cbiAgICByZXR1cm4gbWVyZ2UoYmFja2Ryb3AsIHBhcmVudENsb3NlIGFzIE9ic2VydmFibGU8TWVudUNsb3NlUmVhc29uPiwgaG92ZXIsIGRldGFjaG1lbnRzKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIG1vdXNlIHByZXNzZXMgb24gdGhlIHRyaWdnZXIuICovXG4gIF9oYW5kbGVNb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWlzRmFrZU1vdXNlZG93bkZyb21TY3JlZW5SZWFkZXIoZXZlbnQpKSB7XG4gICAgICAvLyBTaW5jZSByaWdodCBvciBtaWRkbGUgYnV0dG9uIGNsaWNrcyB3b24ndCB0cmlnZ2VyIHRoZSBgY2xpY2tgIGV2ZW50LFxuICAgICAgLy8gd2Ugc2hvdWxkbid0IGNvbnNpZGVyIHRoZSBtZW51IGFzIG9wZW5lZCBieSBtb3VzZSBpbiB0aG9zZSBjYXNlcy5cbiAgICAgIHRoaXMuX29wZW5lZEJ5ID0gZXZlbnQuYnV0dG9uID09PSAwID8gJ21vdXNlJyA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gU2luY2UgY2xpY2tpbmcgb24gdGhlIHRyaWdnZXIgd29uJ3QgY2xvc2UgdGhlIG1lbnUgaWYgaXQgb3BlbnMgYSBzdWItbWVudSxcbiAgICAgIC8vIHdlIHNob3VsZCBwcmV2ZW50IGZvY3VzIGZyb20gbW92aW5nIG9udG8gaXQgdmlhIGNsaWNrIHRvIGF2b2lkIHRoZVxuICAgICAgLy8gaGlnaGxpZ2h0IGZyb20gbGluZ2VyaW5nIG9uIHRoZSBtZW51IGl0ZW0uXG4gICAgICBpZiAodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGtleSBwcmVzc2VzIG9uIHRoZSB0cmlnZ2VyLiAqL1xuICBfaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgLy8gUHJlc3NpbmcgZW50ZXIgb24gdGhlIHRyaWdnZXIgd2lsbCB0cmlnZ2VyIHRoZSBjbGljayBoYW5kbGVyIGxhdGVyLlxuICAgIGlmIChrZXlDb2RlID09PSBFTlRFUiB8fCBrZXlDb2RlID09PSBTUEFDRSkge1xuICAgICAgdGhpcy5fb3BlbmVkQnkgPSAna2V5Ym9hcmQnO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMudHJpZ2dlcnNTdWJtZW51KCkgJiZcbiAgICAgICgoa2V5Q29kZSA9PT0gUklHSFRfQVJST1cgJiYgdGhpcy5kaXIgPT09ICdsdHInKSB8fFxuICAgICAgICAoa2V5Q29kZSA9PT0gTEVGVF9BUlJPVyAmJiB0aGlzLmRpciA9PT0gJ3J0bCcpKVxuICAgICkge1xuICAgICAgdGhpcy5fb3BlbmVkQnkgPSAna2V5Ym9hcmQnO1xuICAgICAgdGhpcy5vcGVuTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgdHJpZ2dlci4gKi9cbiAgX2hhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpIHtcbiAgICAgIC8vIFN0b3AgZXZlbnQgcHJvcGFnYXRpb24gdG8gYXZvaWQgY2xvc2luZyB0aGUgcGFyZW50IG1lbnUuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMub3Blbk1lbnUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2dnbGVNZW51KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZXMgdGhlIGNhc2VzIHdoZXJlIHRoZSB1c2VyIGhvdmVycyBvdmVyIHRoZSB0cmlnZ2VyLiAqL1xuICBwcml2YXRlIF9oYW5kbGVIb3ZlcigpIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgaG92ZXJlZCBpdGVtIGluIG9yZGVyIHRvIHRvZ2dsZSB0aGUgcGFuZWwuXG4gICAgaWYgKCF0aGlzLnRyaWdnZXJzU3VibWVudSgpIHx8ICF0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbiA9IHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudVxuICAgICAgLl9ob3ZlcmVkKClcbiAgICAgIC8vIFNpbmNlIHdlIG1pZ2h0IGhhdmUgbXVsdGlwbGUgY29tcGV0aW5nIHRyaWdnZXJzIGZvciB0aGUgc2FtZSBtZW51IChlLmcuIGEgc3ViLW1lbnVcbiAgICAgIC8vIHdpdGggZGlmZmVyZW50IGRhdGEgYW5kIHRyaWdnZXJzKSwgd2UgaGF2ZSB0byBkZWxheSBpdCBieSBhIHRpY2sgdG8gZW5zdXJlIHRoYXRcbiAgICAgIC8vIGl0IHdvbid0IGJlIGNsb3NlZCBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyBvcGVuZWQuXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGFjdGl2ZSA9PiBhY3RpdmUgPT09IHRoaXMuX21lbnVJdGVtSW5zdGFuY2UgJiYgIWFjdGl2ZS5kaXNhYmxlZCksXG4gICAgICAgIGRlbGF5KDAsIGFzYXBTY2hlZHVsZXIpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX29wZW5lZEJ5ID0gJ21vdXNlJztcblxuICAgICAgICAvLyBJZiB0aGUgc2FtZSBtZW51IGlzIHVzZWQgYmV0d2VlbiBtdWx0aXBsZSB0cmlnZ2VycywgaXQgbWlnaHQgc3RpbGwgYmUgYW5pbWF0aW5nXG4gICAgICAgIC8vIHdoaWxlIHRoZSBuZXcgdHJpZ2dlciB0cmllcyB0byByZS1vcGVuIGl0LiBXYWl0IGZvciB0aGUgYW5pbWF0aW9uIHRvIGZpbmlzaFxuICAgICAgICAvLyBiZWZvcmUgZG9pbmcgc28uIEFsc28gaW50ZXJydXB0IGlmIHRoZSB1c2VyIG1vdmVzIHRvIGFub3RoZXIgaXRlbS5cbiAgICAgICAgaWYgKHRoaXMubWVudSBpbnN0YW5jZW9mIE1hdE1lbnUgJiYgdGhpcy5tZW51Ll9pc0FuaW1hdGluZykge1xuICAgICAgICAgIC8vIFdlIG5lZWQgdGhlIGBkZWxheSgwKWAgaGVyZSBpbiBvcmRlciB0byBhdm9pZFxuICAgICAgICAgIC8vICdjaGFuZ2VkIGFmdGVyIGNoZWNrZWQnIGVycm9ycyBpbiBzb21lIGNhc2VzLiBTZWUgIzEyMTk0LlxuICAgICAgICAgIHRoaXMubWVudS5fYW5pbWF0aW9uRG9uZVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSwgZGVsYXkoMCwgYXNhcFNjaGVkdWxlciksIHRha2VVbnRpbCh0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUhLl9ob3ZlcmVkKCkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW5NZW51KCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3Blbk1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgcG9ydGFsIHRoYXQgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIHRoZSBvdmVybGF5LiAqL1xuICBwcml2YXRlIF9nZXRQb3J0YWwobWVudTogTWF0TWVudVBhbmVsKTogVGVtcGxhdGVQb3J0YWwge1xuICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gYXZvaWQgdGhpcyBjaGVjayBieSBrZWVwaW5nIHRoZSBwb3J0YWwgb24gdGhlIG1lbnUgcGFuZWwuXG4gICAgLy8gV2hpbGUgaXQgd291bGQgYmUgY2xlYW5lciwgd2UnZCBoYXZlIHRvIGludHJvZHVjZSBhbm90aGVyIHJlcXVpcmVkIG1ldGhvZCBvblxuICAgIC8vIGBNYXRNZW51UGFuZWxgLCBtYWtpbmcgaXQgaGFyZGVyIHRvIGNvbnN1bWUuXG4gICAgaWYgKCF0aGlzLl9wb3J0YWwgfHwgdGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmICE9PSBtZW51LnRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLl9wb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwobWVudS50ZW1wbGF0ZVJlZiwgdGhpcy5fdmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BvcnRhbDtcbiAgfVxufVxuIl19