@angular/material 16.2.2 → 17.0.0-next.1

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 (810) hide show
  1. package/_index.scss +21 -65
  2. package/autocomplete/index.d.ts +40 -71
  3. package/autocomplete/testing/index.d.ts +5 -23
  4. package/button/_button-base.scss +3 -3
  5. package/button/_button-theme-private.scss +3 -2
  6. package/button/_button-theme.scss +18 -25
  7. package/button/_fab-theme.scss +42 -48
  8. package/button/_icon-button-theme.scss +19 -26
  9. package/button/index.d.ts +22 -31
  10. package/card/_card-theme.scss +82 -51
  11. package/checkbox/_checkbox-theme.scss +72 -54
  12. package/checkbox/index.d.ts +22 -42
  13. package/checkbox/testing/index.d.ts +6 -12
  14. package/core/_core-theme.scss +24 -39
  15. package/core/index.d.ts +17 -28
  16. package/core/mdc-helpers/_mdc-helpers.scss +19 -22
  17. package/core/option/_optgroup-theme.scss +13 -23
  18. package/core/option/_option-theme.scss +23 -37
  19. package/core/ripple/_ripple-theme.scss +6 -10
  20. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +17 -24
  21. package/core/style/_private.scss +3 -3
  22. package/core/style/_sass-utils.scss +7 -0
  23. package/core/style/_validation.scss +43 -0
  24. package/core/theming/_inspection.scss +256 -0
  25. package/core/theming/_m2-inspection.scss +211 -0
  26. package/core/theming/_theming.scss +169 -16
  27. package/core/tokens/m2/mat/_card.scss +15 -21
  28. package/core/tokens/m2/mat/_form-field.scss +48 -19
  29. package/core/tokens/m2/mat/_optgroup.scss +12 -17
  30. package/core/tokens/m2/mat/_option.scss +16 -28
  31. package/core/tokens/m2/mat/_paginator.scss +16 -18
  32. package/core/tokens/m2/mat/_radio.scss +7 -10
  33. package/core/tokens/m2/mat/_slide-toggle.scss +9 -17
  34. package/core/tokens/m2/mat/_slider.scss +43 -0
  35. package/core/tokens/m2/mdc/_checkbox.scss +21 -20
  36. package/core/tokens/m2/mdc/_elevated-card.scss +6 -9
  37. package/core/tokens/m2/mdc/_extended-fab.scss +8 -17
  38. package/core/tokens/m2/mdc/_fab.scss +6 -7
  39. package/core/tokens/m2/mdc/_filled-text-field.scss +17 -23
  40. package/core/tokens/m2/mdc/_icon-button.scss +1 -1
  41. package/core/tokens/m2/mdc/_linear-progress.scss +9 -10
  42. package/core/tokens/m2/mdc/_list.scss +44 -42
  43. package/core/tokens/m2/mdc/_outlined-card.scss +7 -10
  44. package/core/tokens/m2/mdc/_outlined-text-field.scss +15 -21
  45. package/core/tokens/m2/mdc/_radio.scss +11 -11
  46. package/core/tokens/m2/mdc/_slider.scss +147 -0
  47. package/core/tokens/m2/mdc/_switch.scss +16 -19
  48. package/core/typography/_definition.scss +258 -0
  49. package/core/typography/_property-getters.scss +63 -0
  50. package/core/typography/_typography-utils.scss +9 -69
  51. package/core/typography/_typography.scss +10 -343
  52. package/core/typography/_versioning.scss +86 -0
  53. package/dialog/_dialog-theme.scss +10 -0
  54. package/dialog/index.d.ts +44 -86
  55. package/dialog/testing/index.d.ts +6 -18
  56. package/esm2022/autocomplete/autocomplete-origin.mjs +9 -17
  57. package/esm2022/autocomplete/autocomplete-trigger.mjs +32 -41
  58. package/esm2022/autocomplete/autocomplete.mjs +58 -71
  59. package/esm2022/autocomplete/testing/autocomplete-harness.mjs +20 -33
  60. package/esm2022/button/button-base.mjs +32 -27
  61. package/esm2022/button/button.mjs +6 -6
  62. package/esm2022/button/fab.mjs +25 -33
  63. package/esm2022/button/icon-button.mjs +6 -6
  64. package/esm2022/button/testing/button-harness.mjs +3 -3
  65. package/esm2022/card/card.mjs +2 -2
  66. package/esm2022/checkbox/checkbox.mjs +72 -79
  67. package/esm2022/checkbox/testing/checkbox-harness.mjs +41 -36
  68. package/esm2022/core/datetime/native-date-adapter.mjs +14 -11
  69. package/esm2022/core/option/optgroup.mjs +19 -26
  70. package/esm2022/core/option/option.mjs +25 -35
  71. package/esm2022/core/version.mjs +1 -1
  72. package/esm2022/datepicker/calendar.mjs +1 -1
  73. package/esm2022/datepicker/datepicker-base.mjs +2 -2
  74. package/esm2022/datepicker/datepicker-toggle.mjs +1 -1
  75. package/esm2022/dialog/dialog-container.mjs +52 -77
  76. package/esm2022/dialog/dialog-ref.mjs +1 -1
  77. package/esm2022/dialog/dialog.mjs +16 -46
  78. package/esm2022/dialog/public-api.mjs +2 -2
  79. package/esm2022/dialog/testing/dialog-harness.mjs +13 -16
  80. package/esm2022/dialog/testing/dialog-opener.mjs +17 -27
  81. package/esm2022/dialog/testing/index.mjs +2 -2
  82. package/esm2022/form-field/form-field.mjs +3 -3
  83. package/esm2022/form-field/testing/error-harness.mjs +10 -12
  84. package/esm2022/form-field/testing/form-field-harness.mjs +45 -48
  85. package/esm2022/list/action-list.mjs +2 -2
  86. package/esm2022/list/list.mjs +2 -2
  87. package/esm2022/list/nav-list.mjs +2 -2
  88. package/esm2022/list/selection-list.mjs +2 -2
  89. package/esm2022/menu/menu-content.mjs +9 -16
  90. package/esm2022/menu/menu-trigger.mjs +14 -25
  91. package/esm2022/menu/menu.mjs +15 -29
  92. package/esm2022/menu/public-api.mjs +3 -3
  93. package/esm2022/menu/testing/menu-harness.mjs +29 -43
  94. package/esm2022/paginator/paginator.mjs +24 -38
  95. package/esm2022/paginator/testing/paginator-harness.mjs +25 -27
  96. package/esm2022/progress-bar/progress-bar.mjs +2 -2
  97. package/esm2022/progress-spinner/progress-spinner.mjs +2 -2
  98. package/esm2022/radio/radio.mjs +58 -83
  99. package/esm2022/radio/testing/radio-harness.mjs +31 -38
  100. package/esm2022/select/select.mjs +194 -212
  101. package/esm2022/select/testing/select-harness.mjs +18 -23
  102. package/esm2022/slide-toggle/slide-toggle.mjs +43 -53
  103. package/esm2022/slide-toggle/testing/slide-toggle-harness.mjs +33 -40
  104. package/esm2022/slider/slider.mjs +2 -2
  105. package/esm2022/snack-bar/simple-snack-bar.mjs +1 -1
  106. package/esm2022/snack-bar/snack-bar-container.mjs +17 -32
  107. package/esm2022/snack-bar/snack-bar-ref.mjs +1 -1
  108. package/esm2022/snack-bar/snack-bar.mjs +11 -25
  109. package/esm2022/snack-bar/testing/snack-bar-harness.mjs +18 -31
  110. package/esm2022/table/table-data-source.mjs +15 -18
  111. package/esm2022/table/testing/cell-harness.mjs +4 -4
  112. package/esm2022/table/testing/row-harness.mjs +4 -4
  113. package/esm2022/table/testing/table-harness.mjs +22 -24
  114. package/esm2022/tabs/public-api.mjs +7 -8
  115. package/esm2022/tabs/tab-body.mjs +13 -29
  116. package/esm2022/tabs/tab-group.mjs +55 -79
  117. package/esm2022/tabs/tab-header.mjs +13 -34
  118. package/esm2022/tabs/tab-label-wrapper.mjs +6 -18
  119. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +119 -168
  120. package/esm2022/tabs/tab.mjs +25 -37
  121. package/esm2022/tooltip/testing/tooltip-harness.mjs +21 -23
  122. package/esm2022/tooltip/tooltip.mjs +68 -101
  123. package/fesm2022/autocomplete/testing.mjs +20 -33
  124. package/fesm2022/autocomplete/testing.mjs.map +1 -1
  125. package/fesm2022/autocomplete.mjs +96 -126
  126. package/fesm2022/autocomplete.mjs.map +1 -1
  127. package/fesm2022/button/testing.mjs +2 -2
  128. package/fesm2022/button/testing.mjs.map +1 -1
  129. package/fesm2022/button.mjs +61 -63
  130. package/fesm2022/button.mjs.map +1 -1
  131. package/fesm2022/card.mjs +2 -2
  132. package/fesm2022/card.mjs.map +1 -1
  133. package/fesm2022/checkbox/testing.mjs +41 -36
  134. package/fesm2022/checkbox/testing.mjs.map +1 -1
  135. package/fesm2022/checkbox.mjs +72 -79
  136. package/fesm2022/checkbox.mjs.map +1 -1
  137. package/fesm2022/core.mjs +49 -61
  138. package/fesm2022/core.mjs.map +1 -1
  139. package/fesm2022/datepicker.mjs +3 -3
  140. package/fesm2022/datepicker.mjs.map +1 -1
  141. package/fesm2022/dialog/testing.mjs +30 -43
  142. package/fesm2022/dialog/testing.mjs.map +1 -1
  143. package/fesm2022/dialog.mjs +67 -122
  144. package/fesm2022/dialog.mjs.map +1 -1
  145. package/fesm2022/form-field/testing.mjs +54 -59
  146. package/fesm2022/form-field/testing.mjs.map +1 -1
  147. package/fesm2022/form-field.mjs +2 -2
  148. package/fesm2022/form-field.mjs.map +1 -1
  149. package/fesm2022/list.mjs +8 -8
  150. package/fesm2022/list.mjs.map +1 -1
  151. package/fesm2022/menu/testing.mjs +30 -44
  152. package/fesm2022/menu/testing.mjs.map +1 -1
  153. package/fesm2022/menu.mjs +34 -66
  154. package/fesm2022/menu.mjs.map +1 -1
  155. package/fesm2022/paginator/testing.mjs +25 -27
  156. package/fesm2022/paginator/testing.mjs.map +1 -1
  157. package/fesm2022/paginator.mjs +24 -38
  158. package/fesm2022/paginator.mjs.map +1 -1
  159. package/fesm2022/progress-bar.mjs +2 -2
  160. package/fesm2022/progress-bar.mjs.map +1 -1
  161. package/fesm2022/progress-spinner.mjs +2 -2
  162. package/fesm2022/progress-spinner.mjs.map +1 -1
  163. package/fesm2022/radio/testing.mjs +31 -38
  164. package/fesm2022/radio/testing.mjs.map +1 -1
  165. package/fesm2022/radio.mjs +59 -84
  166. package/fesm2022/radio.mjs.map +1 -1
  167. package/fesm2022/select/testing.mjs +18 -23
  168. package/fesm2022/select/testing.mjs.map +1 -1
  169. package/fesm2022/select.mjs +196 -214
  170. package/fesm2022/select.mjs.map +1 -1
  171. package/fesm2022/slide-toggle/testing.mjs +33 -40
  172. package/fesm2022/slide-toggle/testing.mjs.map +1 -1
  173. package/fesm2022/slide-toggle.mjs +43 -53
  174. package/fesm2022/slide-toggle.mjs.map +1 -1
  175. package/fesm2022/slider.mjs +2 -2
  176. package/fesm2022/slider.mjs.map +1 -1
  177. package/fesm2022/snack-bar/testing.mjs +19 -32
  178. package/fesm2022/snack-bar/testing.mjs.map +1 -1
  179. package/fesm2022/snack-bar.mjs +27 -56
  180. package/fesm2022/snack-bar.mjs.map +1 -1
  181. package/fesm2022/table/testing.mjs +28 -30
  182. package/fesm2022/table/testing.mjs.map +1 -1
  183. package/fesm2022/table.mjs +15 -18
  184. package/fesm2022/table.mjs.map +1 -1
  185. package/fesm2022/tabs.mjs +234 -368
  186. package/fesm2022/tabs.mjs.map +1 -1
  187. package/fesm2022/tooltip/testing.mjs +21 -23
  188. package/fesm2022/tooltip/testing.mjs.map +1 -1
  189. package/fesm2022/tooltip.mjs +69 -102
  190. package/fesm2022/tooltip.mjs.map +1 -1
  191. package/form-field/_form-field-density.scss +3 -4
  192. package/form-field/_form-field-focus-overlay.scss +13 -18
  193. package/form-field/_form-field-native-select.scss +30 -67
  194. package/form-field/_form-field-subscript.scss +4 -8
  195. package/form-field/_form-field-theme.scss +33 -76
  196. package/form-field/_mdc-text-field-structure-overrides.scss +20 -0
  197. package/form-field/testing/index.d.ts +14 -44
  198. package/input/_input-theme.scss +11 -23
  199. package/list/_list-theme.scss +34 -40
  200. package/menu/index.d.ts +22 -44
  201. package/menu/testing/index.d.ts +6 -23
  202. package/package.json +7 -286
  203. package/paginator/_paginator-theme.scss +15 -24
  204. package/paginator/index.d.ts +6 -22
  205. package/paginator/testing/index.d.ts +9 -22
  206. package/prebuilt-themes/deeppurple-amber.css +1 -1
  207. package/prebuilt-themes/indigo-pink.css +1 -1
  208. package/prebuilt-themes/pink-bluegrey.css +1 -1
  209. package/prebuilt-themes/purple-green.css +1 -1
  210. package/progress-bar/_progress-bar-theme.scss +25 -23
  211. package/progress-spinner/_progress-spinner-theme.scss +14 -3
  212. package/radio/_radio-theme.scss +23 -38
  213. package/radio/index.d.ts +22 -45
  214. package/radio/testing/index.d.ts +7 -23
  215. package/schematics/migration.json +4 -4
  216. package/schematics/ng-add/index.js +2 -2
  217. package/schematics/ng-add/index.mjs +2 -2
  218. package/schematics/ng-update/index_bundled.js +4 -4
  219. package/schematics/ng-update/index_bundled.js.map +1 -1
  220. package/select/index.d.ts +47 -68
  221. package/select/testing/index.d.ts +9 -22
  222. package/slide-toggle/_slide-toggle-theme.scss +23 -40
  223. package/slide-toggle/index.d.ts +17 -27
  224. package/slide-toggle/testing/index.d.ts +6 -13
  225. package/slider/_slider-theme.scss +65 -82
  226. package/snack-bar/_snack-bar-theme.scss +10 -2
  227. package/snack-bar/index.d.ts +40 -62
  228. package/snack-bar/testing/index.d.ts +5 -20
  229. package/table/index.d.ts +2 -31
  230. package/table/testing/index.d.ts +17 -34
  231. package/tabs/index.d.ts +60 -144
  232. package/tooltip/_tooltip-theme.scss +12 -3
  233. package/tooltip/index.d.ts +26 -49
  234. package/tooltip/testing/index.d.ts +7 -17
  235. package/_theming.scss +0 -43
  236. package/_token-theming.scss +0 -2
  237. package/autocomplete/_autocomplete-theme.import.scss +0 -1
  238. package/badge/_badge-legacy-index.scss +0 -3
  239. package/badge/_badge-theme.import.scss +0 -11
  240. package/bottom-sheet/_bottom-sheet-legacy-index.scss +0 -2
  241. package/bottom-sheet/_bottom-sheet-theme.import.scss +0 -10
  242. package/button/_button-base.import.scss +0 -4
  243. package/button/_button-theme.import.scss +0 -13
  244. package/button-toggle/_button-toggle-legacy-index.scss +0 -2
  245. package/button-toggle/_button-toggle-theme.import.scss +0 -15
  246. package/button-toggle/_button-toggle-variables.import.scss +0 -1
  247. package/button-toggle/_button-toggle-variables.scss +0 -16
  248. package/card/_card-theme.import.scss +0 -3
  249. package/checkbox/_checkbox-theme.import.scss +0 -10
  250. package/chips/_chips-theme.import.scss +0 -4
  251. package/core/_core-legacy-index.scss +0 -16
  252. package/core/_core.import.scss +0 -60
  253. package/core/color/_all-color.import.scss +0 -53
  254. package/core/color/_color-legacy-index.scss +0 -1
  255. package/core/density/private/_all-density.import.scss +0 -15
  256. package/core/density/private/_compatibility.import.scss +0 -4
  257. package/core/density/private/_density-legacy-index.scss +0 -5
  258. package/core/focus-indicators/_focus-indicators-legacy-index.scss +0 -5
  259. package/core/focus-indicators/_focus-indicators.import.scss +0 -23
  260. package/core/mdc-helpers/_mdc-helpers.import.scss +0 -9
  261. package/core/option/_optgroup-theme.import.scss +0 -4
  262. package/core/option/_option-legacy-index.scss +0 -5
  263. package/core/option/_option-theme.import.scss +0 -4
  264. package/core/ripple/_ripple-legacy-index.scss +0 -3
  265. package/core/ripple/_ripple.import.scss +0 -20
  266. package/core/selection/pseudo-checkbox/_pseudo-checkbox-legacy-index.scss +0 -2
  267. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.import.scss +0 -17
  268. package/core/style/_button-common.import.scss +0 -4
  269. package/core/style/_checkbox-common.import.scss +0 -11
  270. package/core/style/_elevation.import.scss +0 -17
  271. package/core/style/_form-common.import.scss +0 -16
  272. package/core/style/_layout-common.import.scss +0 -1
  273. package/core/style/_list-common.import.scss +0 -2
  274. package/core/style/_menu-common.import.scss +0 -18
  275. package/core/style/_private.import.scss +0 -15
  276. package/core/style/_style-legacy-index.scss +0 -24
  277. package/core/style/_variables.import.scss +0 -8
  278. package/core/style/_vendor-prefixes.import.scss +0 -1
  279. package/core/theming/_all-theme.import.scss +0 -86
  280. package/core/theming/_palette.import.scss +0 -12
  281. package/core/theming/_theming-legacy-index.scss +0 -22
  282. package/core/theming/_theming.import.scss +0 -24
  283. package/core/typography/_all-typography.import.scss +0 -76
  284. package/core/typography/_typography-legacy-index.scss +0 -18
  285. package/core/typography/_typography-utils.import.scss +0 -9
  286. package/core/typography/_typography.import.scss +0 -14
  287. package/datepicker/_datepicker-legacy-index.scss +0 -9
  288. package/datepicker/_datepicker-theme.import.scss +0 -17
  289. package/dialog/_dialog-legacy-padding.import.scss +0 -1
  290. package/dialog/_dialog-theme.import.scss +0 -1
  291. package/dialog/_mdc-dialog-structure-overrides.import.scss +0 -1
  292. package/divider/_divider-legacy-index.scss +0 -3
  293. package/divider/_divider-offset.import.scss +0 -1
  294. package/divider/_divider-theme.import.scss +0 -6
  295. package/esm2022/legacy-autocomplete/autocomplete-module.mjs +0 -51
  296. package/esm2022/legacy-autocomplete/autocomplete-origin.mjs +0 -28
  297. package/esm2022/legacy-autocomplete/autocomplete-trigger.mjs +0 -60
  298. package/esm2022/legacy-autocomplete/autocomplete.mjs +0 -40
  299. package/esm2022/legacy-autocomplete/index.mjs +0 -9
  300. package/esm2022/legacy-autocomplete/legacy-autocomplete_public_index.mjs +0 -5
  301. package/esm2022/legacy-autocomplete/public-api.mjs +0 -48
  302. package/esm2022/legacy-autocomplete/testing/autocomplete-harness-filters.mjs +0 -9
  303. package/esm2022/legacy-autocomplete/testing/autocomplete-harness.mjs +0 -39
  304. package/esm2022/legacy-autocomplete/testing/index.mjs +0 -9
  305. package/esm2022/legacy-autocomplete/testing/public-api.mjs +0 -9
  306. package/esm2022/legacy-button/button-module.mjs +0 -29
  307. package/esm2022/legacy-button/button.mjs +0 -177
  308. package/esm2022/legacy-button/index.mjs +0 -9
  309. package/esm2022/legacy-button/legacy-button_public_index.mjs +0 -5
  310. package/esm2022/legacy-button/public-api.mjs +0 -10
  311. package/esm2022/legacy-button/testing/button-harness.mjs +0 -82
  312. package/esm2022/legacy-button/testing/index.mjs +0 -9
  313. package/esm2022/legacy-button/testing/public-api.mjs +0 -9
  314. package/esm2022/legacy-card/card-module.mjs +0 -87
  315. package/esm2022/legacy-card/card.mjs +0 -276
  316. package/esm2022/legacy-card/index.mjs +0 -9
  317. package/esm2022/legacy-card/legacy-card_public_index.mjs +0 -5
  318. package/esm2022/legacy-card/public-api.mjs +0 -10
  319. package/esm2022/legacy-card/testing/card-harness-filters.mjs +0 -9
  320. package/esm2022/legacy-card/testing/card-harness.mjs +0 -47
  321. package/esm2022/legacy-card/testing/index.mjs +0 -9
  322. package/esm2022/legacy-card/testing/public-api.mjs +0 -9
  323. package/esm2022/legacy-checkbox/checkbox-module.mjs +0 -31
  324. package/esm2022/legacy-checkbox/checkbox.mjs +0 -137
  325. package/esm2022/legacy-checkbox/index.mjs +0 -9
  326. package/esm2022/legacy-checkbox/legacy-checkbox_public_index.mjs +0 -5
  327. package/esm2022/legacy-checkbox/public-api.mjs +0 -36
  328. package/esm2022/legacy-checkbox/testing/checkbox-harness.mjs +0 -46
  329. package/esm2022/legacy-checkbox/testing/index.mjs +0 -9
  330. package/esm2022/legacy-checkbox/testing/public-api.mjs +0 -9
  331. package/esm2022/legacy-chips/chip-default-options.mjs +0 -15
  332. package/esm2022/legacy-chips/chip-input.mjs +0 -198
  333. package/esm2022/legacy-chips/chip-list.mjs +0 -718
  334. package/esm2022/legacy-chips/chip-text-control.mjs +0 -9
  335. package/esm2022/legacy-chips/chip.mjs +0 -445
  336. package/esm2022/legacy-chips/chips-module.mjs +0 -68
  337. package/esm2022/legacy-chips/index.mjs +0 -9
  338. package/esm2022/legacy-chips/legacy-chips_public_index.mjs +0 -5
  339. package/esm2022/legacy-chips/public-api.mjs +0 -13
  340. package/esm2022/legacy-chips/testing/chip-avatar-harness.mjs +0 -26
  341. package/esm2022/legacy-chips/testing/chip-harness-filters.mjs +0 -2
  342. package/esm2022/legacy-chips/testing/chip-harness.mjs +0 -95
  343. package/esm2022/legacy-chips/testing/chip-input-harness.mjs +0 -86
  344. package/esm2022/legacy-chips/testing/chip-list-harness.mjs +0 -90
  345. package/esm2022/legacy-chips/testing/chip-listbox-harness.mjs +0 -48
  346. package/esm2022/legacy-chips/testing/chip-option-harness.mjs +0 -49
  347. package/esm2022/legacy-chips/testing/chip-remove-harness.mjs +0 -30
  348. package/esm2022/legacy-chips/testing/index.mjs +0 -9
  349. package/esm2022/legacy-chips/testing/public-api.mjs +0 -14
  350. package/esm2022/legacy-core/index.mjs +0 -9
  351. package/esm2022/legacy-core/legacy-core_public_index.mjs +0 -5
  352. package/esm2022/legacy-core/option/index.mjs +0 -69
  353. package/esm2022/legacy-core/option/optgroup.mjs +0 -30
  354. package/esm2022/legacy-core/option/option.mjs +0 -54
  355. package/esm2022/legacy-core/public-api.mjs +0 -170
  356. package/esm2022/legacy-core/testing/index.mjs +0 -9
  357. package/esm2022/legacy-core/testing/optgroup-harness-filters.mjs +0 -9
  358. package/esm2022/legacy-core/testing/optgroup-harness.mjs +0 -47
  359. package/esm2022/legacy-core/testing/option-harness-filters.mjs +0 -9
  360. package/esm2022/legacy-core/testing/option-harness.mjs +0 -58
  361. package/esm2022/legacy-core/testing/public-api.mjs +0 -12
  362. package/esm2022/legacy-dialog/dialog-animations.mjs +0 -17
  363. package/esm2022/legacy-dialog/dialog-config.mjs +0 -22
  364. package/esm2022/legacy-dialog/dialog-container.mjs +0 -85
  365. package/esm2022/legacy-dialog/dialog-content-directives.mjs +0 -209
  366. package/esm2022/legacy-dialog/dialog-module.mjs +0 -57
  367. package/esm2022/legacy-dialog/dialog-ref.mjs +0 -16
  368. package/esm2022/legacy-dialog/dialog.mjs +0 -106
  369. package/esm2022/legacy-dialog/index.mjs +0 -9
  370. package/esm2022/legacy-dialog/legacy-dialog_public_index.mjs +0 -5
  371. package/esm2022/legacy-dialog/public-api.mjs +0 -40
  372. package/esm2022/legacy-dialog/testing/dialog-harness.mjs +0 -36
  373. package/esm2022/legacy-dialog/testing/dialog-opener.mjs +0 -56
  374. package/esm2022/legacy-dialog/testing/index.mjs +0 -9
  375. package/esm2022/legacy-dialog/testing/public-api.mjs +0 -10
  376. package/esm2022/legacy-form-field/error.mjs +0 -46
  377. package/esm2022/legacy-form-field/form-field-module.mjs +0 -67
  378. package/esm2022/legacy-form-field/form-field.mjs +0 -530
  379. package/esm2022/legacy-form-field/hint.mjs +0 -56
  380. package/esm2022/legacy-form-field/index.mjs +0 -9
  381. package/esm2022/legacy-form-field/label.mjs +0 -25
  382. package/esm2022/legacy-form-field/legacy-form-field_public_index.mjs +0 -5
  383. package/esm2022/legacy-form-field/placeholder.mjs +0 -26
  384. package/esm2022/legacy-form-field/prefix.mjs +0 -27
  385. package/esm2022/legacy-form-field/public-api.mjs +0 -62
  386. package/esm2022/legacy-form-field/suffix.mjs +0 -27
  387. package/esm2022/legacy-form-field/testing/error-harness.mjs +0 -26
  388. package/esm2022/legacy-form-field/testing/form-field-harness.mjs +0 -73
  389. package/esm2022/legacy-form-field/testing/index.mjs +0 -9
  390. package/esm2022/legacy-form-field/testing/public-api.mjs +0 -19
  391. package/esm2022/legacy-input/index.mjs +0 -9
  392. package/esm2022/legacy-input/input-module.mjs +0 -45
  393. package/esm2022/legacy-input/input.mjs +0 -62
  394. package/esm2022/legacy-input/legacy-input_public_index.mjs +0 -5
  395. package/esm2022/legacy-input/public-api.mjs +0 -21
  396. package/esm2022/legacy-input/testing/index.mjs +0 -9
  397. package/esm2022/legacy-input/testing/public-api.mjs +0 -24
  398. package/esm2022/legacy-list/index.mjs +0 -9
  399. package/esm2022/legacy-list/legacy-list_public_index.mjs +0 -5
  400. package/esm2022/legacy-list/list-module.mjs +0 -75
  401. package/esm2022/legacy-list/list.mjs +0 -223
  402. package/esm2022/legacy-list/public-api.mjs +0 -22
  403. package/esm2022/legacy-list/selection-list.mjs +0 -619
  404. package/esm2022/legacy-list/testing/action-list-harness.mjs +0 -67
  405. package/esm2022/legacy-list/testing/index.mjs +0 -9
  406. package/esm2022/legacy-list/testing/list-harness-base.mjs +0 -97
  407. package/esm2022/legacy-list/testing/list-harness-filters.mjs +0 -9
  408. package/esm2022/legacy-list/testing/list-harness.mjs +0 -51
  409. package/esm2022/legacy-list/testing/list-item-harness-base.mjs +0 -74
  410. package/esm2022/legacy-list/testing/nav-list-harness.mjs +0 -71
  411. package/esm2022/legacy-list/testing/public-api.mjs +0 -12
  412. package/esm2022/legacy-list/testing/selection-list-harness.mjs +0 -129
  413. package/esm2022/legacy-menu/index.mjs +0 -9
  414. package/esm2022/legacy-menu/legacy-menu_public_index.mjs +0 -5
  415. package/esm2022/legacy-menu/menu-content.mjs +0 -27
  416. package/esm2022/legacy-menu/menu-item.mjs +0 -41
  417. package/esm2022/legacy-menu/menu-module.mjs +0 -50
  418. package/esm2022/legacy-menu/menu-trigger.mjs +0 -31
  419. package/esm2022/legacy-menu/menu.mjs +0 -40
  420. package/esm2022/legacy-menu/public-api.mjs +0 -49
  421. package/esm2022/legacy-menu/testing/index.mjs +0 -9
  422. package/esm2022/legacy-menu/testing/menu-harness.mjs +0 -56
  423. package/esm2022/legacy-menu/testing/public-api.mjs +0 -9
  424. package/esm2022/legacy-paginator/index.mjs +0 -9
  425. package/esm2022/legacy-paginator/legacy-paginator_public_index.mjs +0 -5
  426. package/esm2022/legacy-paginator/paginator-module.mjs +0 -49
  427. package/esm2022/legacy-paginator/paginator.mjs +0 -53
  428. package/esm2022/legacy-paginator/public-api.mjs +0 -36
  429. package/esm2022/legacy-paginator/testing/index.mjs +0 -9
  430. package/esm2022/legacy-paginator/testing/paginator-harness.mjs +0 -41
  431. package/esm2022/legacy-paginator/testing/public-api.mjs +0 -15
  432. package/esm2022/legacy-progress-bar/index.mjs +0 -9
  433. package/esm2022/legacy-progress-bar/legacy-progress-bar_public_index.mjs +0 -5
  434. package/esm2022/legacy-progress-bar/progress-bar-module.mjs +0 -30
  435. package/esm2022/legacy-progress-bar/progress-bar.mjs +0 -190
  436. package/esm2022/legacy-progress-bar/public-api.mjs +0 -11
  437. package/esm2022/legacy-progress-bar/testing/index.mjs +0 -9
  438. package/esm2022/legacy-progress-bar/testing/progress-bar-harness.mjs +0 -38
  439. package/esm2022/legacy-progress-bar/testing/public-api.mjs +0 -9
  440. package/esm2022/legacy-progress-spinner/index.mjs +0 -9
  441. package/esm2022/legacy-progress-spinner/legacy-progress-spinner_public_index.mjs +0 -5
  442. package/esm2022/legacy-progress-spinner/progress-spinner-module.mjs +0 -30
  443. package/esm2022/legacy-progress-spinner/progress-spinner.mjs +0 -286
  444. package/esm2022/legacy-progress-spinner/public-api.mjs +0 -19
  445. package/esm2022/legacy-progress-spinner/testing/index.mjs +0 -9
  446. package/esm2022/legacy-progress-spinner/testing/progress-spinner-harness.mjs +0 -39
  447. package/esm2022/legacy-progress-spinner/testing/public-api.mjs +0 -9
  448. package/esm2022/legacy-radio/index.mjs +0 -9
  449. package/esm2022/legacy-radio/legacy-radio_public_index.mjs +0 -5
  450. package/esm2022/legacy-radio/public-api.mjs +0 -31
  451. package/esm2022/legacy-radio/radio-module.mjs +0 -29
  452. package/esm2022/legacy-radio/radio.mjs +0 -112
  453. package/esm2022/legacy-radio/testing/index.mjs +0 -9
  454. package/esm2022/legacy-radio/testing/public-api.mjs +0 -9
  455. package/esm2022/legacy-radio/testing/radio-harness.mjs +0 -58
  456. package/esm2022/legacy-select/index.mjs +0 -9
  457. package/esm2022/legacy-select/legacy-select_public_index.mjs +0 -5
  458. package/esm2022/legacy-select/public-api.mjs +0 -37
  459. package/esm2022/legacy-select/select-animations.mjs +0 -56
  460. package/esm2022/legacy-select/select-errors.mjs +0 -39
  461. package/esm2022/legacy-select/select-module.mjs +0 -51
  462. package/esm2022/legacy-select/select.mjs +0 -447
  463. package/esm2022/legacy-select/testing/index.mjs +0 -9
  464. package/esm2022/legacy-select/testing/public-api.mjs +0 -9
  465. package/esm2022/legacy-select/testing/select-harness-filters.mjs +0 -9
  466. package/esm2022/legacy-select/testing/select-harness.mjs +0 -36
  467. package/esm2022/legacy-slide-toggle/index.mjs +0 -9
  468. package/esm2022/legacy-slide-toggle/legacy-slide-toggle_public_index.mjs +0 -5
  469. package/esm2022/legacy-slide-toggle/public-api.mjs +0 -32
  470. package/esm2022/legacy-slide-toggle/slide-toggle-config.mjs +0 -18
  471. package/esm2022/legacy-slide-toggle/slide-toggle-module.mjs +0 -42
  472. package/esm2022/legacy-slide-toggle/slide-toggle.mjs +0 -137
  473. package/esm2022/legacy-slide-toggle/testing/index.mjs +0 -9
  474. package/esm2022/legacy-slide-toggle/testing/public-api.mjs +0 -15
  475. package/esm2022/legacy-slide-toggle/testing/slide-toggle-harness.mjs +0 -50
  476. package/esm2022/legacy-slider/index.mjs +0 -9
  477. package/esm2022/legacy-slider/legacy-slider_public_index.mjs +0 -5
  478. package/esm2022/legacy-slider/public-api.mjs +0 -10
  479. package/esm2022/legacy-slider/slider-module.mjs +0 -30
  480. package/esm2022/legacy-slider/slider.mjs +0 -847
  481. package/esm2022/legacy-slider/testing/index.mjs +0 -9
  482. package/esm2022/legacy-slider/testing/public-api.mjs +0 -9
  483. package/esm2022/legacy-slider/testing/slider-harness-filters.mjs +0 -2
  484. package/esm2022/legacy-slider/testing/slider-harness.mjs +0 -122
  485. package/esm2022/legacy-snack-bar/index.mjs +0 -9
  486. package/esm2022/legacy-snack-bar/legacy-snack-bar_public_index.mjs +0 -5
  487. package/esm2022/legacy-snack-bar/public-api.mjs +0 -53
  488. package/esm2022/legacy-snack-bar/simple-snack-bar.mjs +0 -45
  489. package/esm2022/legacy-snack-bar/snack-bar-container.mjs +0 -39
  490. package/esm2022/legacy-snack-bar/snack-bar-module.mjs +0 -34
  491. package/esm2022/legacy-snack-bar/snack-bar.mjs +0 -47
  492. package/esm2022/legacy-snack-bar/testing/index.mjs +0 -9
  493. package/esm2022/legacy-snack-bar/testing/public-api.mjs +0 -9
  494. package/esm2022/legacy-snack-bar/testing/snack-bar-harness.mjs +0 -46
  495. package/esm2022/legacy-table/cell.mjs +0 -163
  496. package/esm2022/legacy-table/index.mjs +0 -9
  497. package/esm2022/legacy-table/legacy-table_public_index.mjs +0 -5
  498. package/esm2022/legacy-table/public-api.mjs +0 -20
  499. package/esm2022/legacy-table/row.mjs +0 -165
  500. package/esm2022/legacy-table/table-data-source.mjs +0 -27
  501. package/esm2022/legacy-table/table-module.mjs +0 -98
  502. package/esm2022/legacy-table/table.mjs +0 -72
  503. package/esm2022/legacy-table/testing/cell-harness.mjs +0 -62
  504. package/esm2022/legacy-table/testing/index.mjs +0 -9
  505. package/esm2022/legacy-table/testing/public-api.mjs +0 -27
  506. package/esm2022/legacy-table/testing/row-harness.mjs +0 -76
  507. package/esm2022/legacy-table/testing/table-harness.mjs +0 -34
  508. package/esm2022/legacy-table/text-column.mjs +0 -65
  509. package/esm2022/legacy-tabs/index.mjs +0 -9
  510. package/esm2022/legacy-tabs/ink-bar.mjs +0 -73
  511. package/esm2022/legacy-tabs/legacy-tabs_public_index.mjs +0 -5
  512. package/esm2022/legacy-tabs/public-api.mjs +0 -94
  513. package/esm2022/legacy-tabs/tab-body.mjs +0 -64
  514. package/esm2022/legacy-tabs/tab-content.mjs +0 -27
  515. package/esm2022/legacy-tabs/tab-group.mjs +0 -72
  516. package/esm2022/legacy-tabs/tab-header.mjs +0 -75
  517. package/esm2022/legacy-tabs/tab-label-wrapper.mjs +0 -30
  518. package/esm2022/legacy-tabs/tab-label.mjs +0 -27
  519. package/esm2022/legacy-tabs/tab-nav-bar/index.mjs +0 -9
  520. package/esm2022/legacy-tabs/tab-nav-bar/tab-nav-bar.mjs +0 -164
  521. package/esm2022/legacy-tabs/tab.mjs +0 -46
  522. package/esm2022/legacy-tabs/tabs-module.mjs +0 -99
  523. package/esm2022/legacy-tabs/testing/index.mjs +0 -9
  524. package/esm2022/legacy-tabs/testing/public-api.mjs +0 -12
  525. package/esm2022/legacy-tabs/testing/tab-group-harness.mjs +0 -61
  526. package/esm2022/legacy-tabs/testing/tab-harness-filters.mjs +0 -2
  527. package/esm2022/legacy-tabs/testing/tab-harness.mjs +0 -71
  528. package/esm2022/legacy-tabs/testing/tab-link-harness.mjs +0 -45
  529. package/esm2022/legacy-tabs/testing/tab-nav-bar-harness.mjs +0 -70
  530. package/esm2022/legacy-tabs/testing/tab-nav-panel-harness.mjs +0 -31
  531. package/esm2022/legacy-tooltip/index.mjs +0 -9
  532. package/esm2022/legacy-tooltip/legacy-tooltip_public_index.mjs +0 -5
  533. package/esm2022/legacy-tooltip/public-api.mjs +0 -47
  534. package/esm2022/legacy-tooltip/testing/index.mjs +0 -9
  535. package/esm2022/legacy-tooltip/testing/public-api.mjs +0 -9
  536. package/esm2022/legacy-tooltip/testing/tooltip-harness.mjs +0 -35
  537. package/esm2022/legacy-tooltip/tooltip-animations.mjs +0 -28
  538. package/esm2022/legacy-tooltip/tooltip-module.mjs +0 -35
  539. package/esm2022/legacy-tooltip/tooltip.mjs +0 -108
  540. package/expansion/_expansion-legacy-index.scss +0 -2
  541. package/expansion/_expansion-theme.import.scss +0 -12
  542. package/expansion/_expansion-variables.import.scss +0 -1
  543. package/fesm2022/legacy-autocomplete/testing.mjs +0 -35
  544. package/fesm2022/legacy-autocomplete/testing.mjs.map +0 -1
  545. package/fesm2022/legacy-autocomplete.mjs +0 -146
  546. package/fesm2022/legacy-autocomplete.mjs.map +0 -1
  547. package/fesm2022/legacy-button/testing.mjs +0 -78
  548. package/fesm2022/legacy-button/testing.mjs.map +0 -1
  549. package/fesm2022/legacy-button.mjs +0 -194
  550. package/fesm2022/legacy-button.mjs.map +0 -1
  551. package/fesm2022/legacy-card/testing.mjs +0 -43
  552. package/fesm2022/legacy-card/testing.mjs.map +0 -1
  553. package/fesm2022/legacy-card.mjs +0 -353
  554. package/fesm2022/legacy-card.mjs.map +0 -1
  555. package/fesm2022/legacy-checkbox/testing.mjs +0 -42
  556. package/fesm2022/legacy-checkbox/testing.mjs.map +0 -1
  557. package/fesm2022/legacy-checkbox.mjs +0 -157
  558. package/fesm2022/legacy-checkbox.mjs.map +0 -1
  559. package/fesm2022/legacy-chips/testing.mjs +0 -365
  560. package/fesm2022/legacy-chips/testing.mjs.map +0 -1
  561. package/fesm2022/legacy-chips.mjs +0 -1399
  562. package/fesm2022/legacy-chips.mjs.map +0 -1
  563. package/fesm2022/legacy-core/testing.mjs +0 -92
  564. package/fesm2022/legacy-core/testing.mjs.map +0 -1
  565. package/fesm2022/legacy-core.mjs +0 -92
  566. package/fesm2022/legacy-core.mjs.map +0 -1
  567. package/fesm2022/legacy-dialog/testing.mjs +0 -80
  568. package/fesm2022/legacy-dialog/testing.mjs.map +0 -1
  569. package/fesm2022/legacy-dialog.mjs +0 -449
  570. package/fesm2022/legacy-dialog.mjs.map +0 -1
  571. package/fesm2022/legacy-form-field/testing.mjs +0 -87
  572. package/fesm2022/legacy-form-field/testing.mjs.map +0 -1
  573. package/fesm2022/legacy-form-field.mjs +0 -726
  574. package/fesm2022/legacy-form-field.mjs.map +0 -1
  575. package/fesm2022/legacy-input/testing.mjs +0 -2
  576. package/fesm2022/legacy-input/testing.mjs.map +0 -1
  577. package/fesm2022/legacy-input.mjs +0 -97
  578. package/fesm2022/legacy-input.mjs.map +0 -1
  579. package/fesm2022/legacy-list/testing.mjs +0 -436
  580. package/fesm2022/legacy-list/testing.mjs.map +0 -1
  581. package/fesm2022/legacy-list.mjs +0 -891
  582. package/fesm2022/legacy-list.mjs.map +0 -1
  583. package/fesm2022/legacy-menu/testing.mjs +0 -52
  584. package/fesm2022/legacy-menu/testing.mjs.map +0 -1
  585. package/fesm2022/legacy-menu.mjs +0 -145
  586. package/fesm2022/legacy-menu.mjs.map +0 -1
  587. package/fesm2022/legacy-paginator/testing.mjs +0 -38
  588. package/fesm2022/legacy-paginator/testing.mjs.map +0 -1
  589. package/fesm2022/legacy-paginator.mjs +0 -92
  590. package/fesm2022/legacy-paginator.mjs.map +0 -1
  591. package/fesm2022/legacy-progress-bar/testing.mjs +0 -34
  592. package/fesm2022/legacy-progress-bar/testing.mjs.map +0 -1
  593. package/fesm2022/legacy-progress-bar.mjs +0 -210
  594. package/fesm2022/legacy-progress-bar.mjs.map +0 -1
  595. package/fesm2022/legacy-progress-spinner/testing.mjs +0 -35
  596. package/fesm2022/legacy-progress-spinner/testing.mjs.map +0 -1
  597. package/fesm2022/legacy-progress-spinner.mjs +0 -312
  598. package/fesm2022/legacy-progress-spinner.mjs.map +0 -1
  599. package/fesm2022/legacy-radio/testing.mjs +0 -54
  600. package/fesm2022/legacy-radio/testing.mjs.map +0 -1
  601. package/fesm2022/legacy-radio.mjs +0 -130
  602. package/fesm2022/legacy-radio.mjs.map +0 -1
  603. package/fesm2022/legacy-select/testing.mjs +0 -32
  604. package/fesm2022/legacy-select/testing.mjs.map +0 -1
  605. package/fesm2022/legacy-select.mjs +0 -541
  606. package/fesm2022/legacy-select.mjs.map +0 -1
  607. package/fesm2022/legacy-slide-toggle/testing.mjs +0 -47
  608. package/fesm2022/legacy-slide-toggle/testing.mjs.map +0 -1
  609. package/fesm2022/legacy-slide-toggle.mjs +0 -177
  610. package/fesm2022/legacy-slide-toggle.mjs.map +0 -1
  611. package/fesm2022/legacy-slider/testing.mjs +0 -118
  612. package/fesm2022/legacy-slider/testing.mjs.map +0 -1
  613. package/fesm2022/legacy-slider.mjs +0 -863
  614. package/fesm2022/legacy-slider.mjs.map +0 -1
  615. package/fesm2022/legacy-snack-bar/testing.mjs +0 -42
  616. package/fesm2022/legacy-snack-bar/testing.mjs.map +0 -1
  617. package/fesm2022/legacy-snack-bar.mjs +0 -128
  618. package/fesm2022/legacy-snack-bar.mjs.map +0 -1
  619. package/fesm2022/legacy-table/testing.mjs +0 -150
  620. package/fesm2022/legacy-table/testing.mjs.map +0 -1
  621. package/fesm2022/legacy-table.mjs +0 -538
  622. package/fesm2022/legacy-table.mjs.map +0 -1
  623. package/fesm2022/legacy-tabs/testing.mjs +0 -239
  624. package/fesm2022/legacy-tabs/testing.mjs.map +0 -1
  625. package/fesm2022/legacy-tabs.mjs +0 -549
  626. package/fesm2022/legacy-tabs.mjs.map +0 -1
  627. package/fesm2022/legacy-tooltip/testing.mjs +0 -31
  628. package/fesm2022/legacy-tooltip/testing.mjs.map +0 -1
  629. package/fesm2022/legacy-tooltip.mjs +0 -148
  630. package/fesm2022/legacy-tooltip.mjs.map +0 -1
  631. package/form-field/_form-field-theme.import.scss +0 -29
  632. package/form-field/_mdc-text-field-theme-variable-refresh.scss +0 -88
  633. package/grid-list/_grid-list-legacy-index.scss +0 -2
  634. package/grid-list/_grid-list-theme.import.scss +0 -10
  635. package/icon/_icon-legacy-index.scss +0 -2
  636. package/icon/_icon-theme.import.scss +0 -5
  637. package/input/_input-theme.import.scss +0 -1
  638. package/legacy-autocomplete/_autocomplete-legacy-index.scss +0 -2
  639. package/legacy-autocomplete/_autocomplete-theme.import.scss +0 -7
  640. package/legacy-autocomplete/_autocomplete-theme.scss +0 -57
  641. package/legacy-autocomplete/index.d.ts +0 -115
  642. package/legacy-autocomplete/testing/index.d.ts +0 -41
  643. package/legacy-button/_button-base.import.scss +0 -21
  644. package/legacy-button/_button-base.scss +0 -114
  645. package/legacy-button/_button-legacy-index.scss +0 -22
  646. package/legacy-button/_button-theme.import.scss +0 -11
  647. package/legacy-button/_button-theme.scss +0 -223
  648. package/legacy-button/index.d.ts +0 -87
  649. package/legacy-button/testing/index.d.ts +0 -49
  650. package/legacy-card/_card-legacy-index.scss +0 -2
  651. package/legacy-card/_card-theme.import.scss +0 -10
  652. package/legacy-card/_card-theme.scss +0 -78
  653. package/legacy-card/index.d.ts +0 -201
  654. package/legacy-card/testing/index.d.ts +0 -56
  655. package/legacy-checkbox/_checkbox-legacy-index.scss +0 -2
  656. package/legacy-checkbox/_checkbox-theme.import.scss +0 -7
  657. package/legacy-checkbox/_checkbox-theme.scss +0 -138
  658. package/legacy-checkbox/index.d.ts +0 -116
  659. package/legacy-checkbox/testing/index.d.ts +0 -30
  660. package/legacy-chips/_chips-legacy-index.scss +0 -7
  661. package/legacy-chips/_chips-theme.import.scss +0 -14
  662. package/legacy-chips/_chips-theme.scss +0 -133
  663. package/legacy-chips/index.d.ts +0 -705
  664. package/legacy-chips/testing/index.d.ts +0 -316
  665. package/legacy-core/_core-theme.scss +0 -65
  666. package/legacy-core/_core.import.scss +0 -5
  667. package/legacy-core/_core.scss +0 -18
  668. package/legacy-core/color/_all-color.import.scss +0 -4
  669. package/legacy-core/color/_all-color.scss +0 -28
  670. package/legacy-core/density/private/_all-density.import.scss +0 -3
  671. package/legacy-core/density/private/_all-density.scss +0 -46
  672. package/legacy-core/density/private/_compatibility.import.scss +0 -4
  673. package/legacy-core/density/private/_compatibility.scss +0 -74
  674. package/legacy-core/index.d.ts +0 -218
  675. package/legacy-core/option/_optgroup-theme.import.scss +0 -27
  676. package/legacy-core/option/_optgroup-theme.scss +0 -52
  677. package/legacy-core/option/_option-legacy-index.scss +0 -5
  678. package/legacy-core/option/_option-theme.import.scss +0 -27
  679. package/legacy-core/option/_option-theme.scss +0 -86
  680. package/legacy-core/testing/index.d.ts +0 -80
  681. package/legacy-core/theming/_all-theme.import.scss +0 -3
  682. package/legacy-core/theming/_all-theme.scss +0 -89
  683. package/legacy-core/typography/_all-typography.import.scss +0 -4
  684. package/legacy-core/typography/_all-typography.scss +0 -105
  685. package/legacy-dialog/_dialog-legacy-index.scss +0 -2
  686. package/legacy-dialog/_dialog-theme.import.scss +0 -10
  687. package/legacy-dialog/_dialog-theme.scss +0 -53
  688. package/legacy-dialog/index.d.ts +0 -271
  689. package/legacy-dialog/testing/index.d.ts +0 -63
  690. package/legacy-form-field/_form-field-fill-theme.import.scss +0 -13
  691. package/legacy-form-field/_form-field-fill-theme.scss +0 -136
  692. package/legacy-form-field/_form-field-legacy-index.scss +0 -29
  693. package/legacy-form-field/_form-field-legacy-theme.import.scss +0 -14
  694. package/legacy-form-field/_form-field-legacy-theme.scss +0 -204
  695. package/legacy-form-field/_form-field-outline-theme.import.scss +0 -13
  696. package/legacy-form-field/_form-field-outline-theme.scss +0 -167
  697. package/legacy-form-field/_form-field-standard-theme.import.scss +0 -11
  698. package/legacy-form-field/_form-field-standard-theme.scss +0 -55
  699. package/legacy-form-field/_form-field-theme.import.scss +0 -29
  700. package/legacy-form-field/_form-field-theme.scss +0 -278
  701. package/legacy-form-field/index.d.ts +0 -370
  702. package/legacy-form-field/testing/index.d.ts +0 -76
  703. package/legacy-input/_input-legacy-index.scss +0 -2
  704. package/legacy-input/_input-theme.import.scss +0 -11
  705. package/legacy-input/_input-theme.scss +0 -115
  706. package/legacy-input/index.d.ts +0 -41
  707. package/legacy-input/testing/index.d.ts +0 -20
  708. package/legacy-list/_list-legacy-index.scss +0 -2
  709. package/legacy-list/_list-theme.import.scss +0 -10
  710. package/legacy-list/_list-theme.scss +0 -124
  711. package/legacy-list/index.d.ts +0 -396
  712. package/legacy-list/testing/index.d.ts +0 -419
  713. package/legacy-menu/_menu-legacy-index.scss +0 -2
  714. package/legacy-menu/_menu-theme.import.scss +0 -10
  715. package/legacy-menu/_menu-theme.scss +0 -84
  716. package/legacy-menu/index.d.ts +0 -127
  717. package/legacy-menu/testing/index.d.ts +0 -47
  718. package/legacy-paginator/_paginator-legacy-index.scss +0 -2
  719. package/legacy-paginator/_paginator-theme.import.scss +0 -11
  720. package/legacy-paginator/_paginator-theme.scss +0 -92
  721. package/legacy-paginator/_paginator-variables.import.scss +0 -1
  722. package/legacy-paginator/_paginator-variables.scss +0 -13
  723. package/legacy-paginator/index.d.ts +0 -87
  724. package/legacy-paginator/testing/index.d.ts +0 -36
  725. package/legacy-prebuilt-themes/legacy-deeppurple-amber.css +0 -1
  726. package/legacy-prebuilt-themes/legacy-indigo-pink.css +0 -1
  727. package/legacy-prebuilt-themes/legacy-pink-bluegrey.css +0 -1
  728. package/legacy-prebuilt-themes/legacy-purple-green.css +0 -1
  729. package/legacy-progress-bar/_progress-bar-legacy-index.scss +0 -2
  730. package/legacy-progress-bar/_progress-bar-theme.import.scss +0 -6
  731. package/legacy-progress-bar/_progress-bar-theme.scss +0 -93
  732. package/legacy-progress-bar/index.d.ts +0 -131
  733. package/legacy-progress-bar/testing/index.d.ts +0 -28
  734. package/legacy-progress-spinner/_progress-spinner-legacy-index.scss +0 -3
  735. package/legacy-progress-spinner/_progress-spinner-theme.import.scss +0 -7
  736. package/legacy-progress-spinner/_progress-spinner-theme.scss +0 -52
  737. package/legacy-progress-spinner/index.d.ts +0 -129
  738. package/legacy-progress-spinner/testing/index.d.ts +0 -29
  739. package/legacy-radio/_radio-legacy-index.scss +0 -2
  740. package/legacy-radio/_radio-theme.import.scss +0 -8
  741. package/legacy-radio/_radio-theme.scss +0 -104
  742. package/legacy-radio/index.d.ts +0 -75
  743. package/legacy-radio/testing/index.d.ts +0 -50
  744. package/legacy-select/_select-legacy-index.scss +0 -2
  745. package/legacy-select/_select-theme.import.scss +0 -11
  746. package/legacy-select/_select-theme.scss +0 -107
  747. package/legacy-select/index.d.ts +0 -230
  748. package/legacy-select/testing/index.d.ts +0 -38
  749. package/legacy-slide-toggle/_slide-toggle-legacy-index.scss +0 -3
  750. package/legacy-slide-toggle/_slide-toggle-theme.import.scss +0 -11
  751. package/legacy-slide-toggle/_slide-toggle-theme.scss +0 -111
  752. package/legacy-slide-toggle/index.d.ts +0 -113
  753. package/legacy-slide-toggle/testing/index.d.ts +0 -34
  754. package/legacy-slider/_slider-legacy-index.scss +0 -3
  755. package/legacy-slider/_slider-theme.import.scss +0 -8
  756. package/legacy-slider/_slider-theme.scss +0 -210
  757. package/legacy-slider/index.d.ts +0 -303
  758. package/legacy-slider/testing/index.d.ts +0 -68
  759. package/legacy-snack-bar/_snack-bar-legacy-index.scss +0 -2
  760. package/legacy-snack-bar/_snack-bar-theme.import.scss +0 -11
  761. package/legacy-snack-bar/_snack-bar-theme.scss +0 -72
  762. package/legacy-snack-bar/index.d.ts +0 -118
  763. package/legacy-snack-bar/testing/index.d.ts +0 -28
  764. package/legacy-table/_table-legacy-index.scss +0 -3
  765. package/legacy-table/_table-theme.import.scss +0 -8
  766. package/legacy-table/_table-theme.scss +0 -78
  767. package/legacy-table/index.d.ts +0 -298
  768. package/legacy-table/testing/index.d.ts +0 -149
  769. package/legacy-tabs/_tabs-common.import.scss +0 -11
  770. package/legacy-tabs/_tabs-common.scss +0 -173
  771. package/legacy-tabs/_tabs-legacy-index.scss +0 -6
  772. package/legacy-tabs/_tabs-theme.import.scss +0 -9
  773. package/legacy-tabs/_tabs-theme.scss +0 -188
  774. package/legacy-tabs/index.d.ts +0 -338
  775. package/legacy-tabs/testing/index.d.ts +0 -195
  776. package/legacy-tooltip/_tooltip-legacy-index.scss +0 -3
  777. package/legacy-tooltip/_tooltip-theme.import.scss +0 -9
  778. package/legacy-tooltip/_tooltip-theme.scss +0 -67
  779. package/legacy-tooltip/index.d.ts +0 -117
  780. package/legacy-tooltip/testing/index.d.ts +0 -30
  781. package/list/_list-theme.import.scss +0 -1
  782. package/menu/_menu-theme.import.scss +0 -2
  783. package/paginator/_paginator-theme.import.scss +0 -6
  784. package/paginator/_paginator-variables.import.scss +0 -1
  785. package/paginator/_paginator-variables.scss +0 -15
  786. package/progress-bar/_progress-bar-theme.import.scss +0 -3
  787. package/progress-spinner/_progress-spinner-theme.import.scss +0 -3
  788. package/radio/_radio-theme.import.scss +0 -4
  789. package/select/_select-theme.import.scss +0 -7
  790. package/sidenav/_sidenav-legacy-index.scss +0 -2
  791. package/sidenav/_sidenav-theme.import.scss +0 -8
  792. package/slide-toggle/_slide-toggle-theme.import.scss +0 -7
  793. package/slider/_slider-theme.import.scss +0 -2
  794. package/snack-bar/_snack-bar-theme.import.scss +0 -5
  795. package/sort/_sort-legacy-index.scss +0 -2
  796. package/sort/_sort-theme.import.scss +0 -5
  797. package/stepper/_stepper-legacy-index.scss +0 -7
  798. package/stepper/_stepper-theme.import.scss +0 -16
  799. package/stepper/_stepper-variables.import.scss +0 -6
  800. package/table/_table-flex-styles.import.scss +0 -1
  801. package/table/_table-theme.import.scss +0 -8
  802. package/tabs/_tabs-common.import.scss +0 -11
  803. package/tabs/_tabs-theme.import.scss +0 -5
  804. package/toolbar/_toolbar-legacy-index.scss +0 -4
  805. package/toolbar/_toolbar-theme.import.scss +0 -14
  806. package/toolbar/_toolbar-variables.import.scss +0 -1
  807. package/tooltip/_tooltip-theme.import.scss +0 -2
  808. package/tree/_tree-legacy-index.scss +0 -2
  809. package/tree/_tree-theme.import.scss +0 -9
  810. package/tree/_tree-variables.import.scss +0 -1
@@ -1,447 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, Directive, QueryList, ViewEncapsulation, } from '@angular/core';
2
- import { _countGroupLabelsBeforeLegacyOption, _getLegacyOptionScrollPosition, MAT_LEGACY_OPTGROUP, MAT_LEGACY_OPTION_PARENT_COMPONENT, MatLegacyOption, } from '@angular/material/legacy-core';
3
- import { MAT_SELECT_TRIGGER, _MatSelectBase } from '@angular/material/select';
4
- import { MatLegacyFormFieldControl } from '@angular/material/legacy-form-field';
5
- import { take, takeUntil } from 'rxjs/operators';
6
- import { matLegacySelectAnimations } from './select-animations';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/cdk/overlay";
10
- /**
11
- * The following style constants are necessary to save here in order
12
- * to properly calculate the alignment of the selected option over
13
- * the trigger element.
14
- */
15
- /**
16
- * The max height of the select's overlay panel.
17
- * @deprecated Use `SELECT_PANEL_MAX_HEIGHT` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
18
- * @breaking-change 17.0.0
19
- */
20
- export const SELECT_PANEL_MAX_HEIGHT = 256;
21
- /**
22
- * The panel's padding on the x-axis.
23
- * @deprecated Use `SELECT_PANEL_PADDING_X` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
24
- * @breaking-change 17.0.0
25
- */
26
- export const SELECT_PANEL_PADDING_X = 16;
27
- /**
28
- * The panel's x axis padding if it is indented (e.g. there is an option group).
29
- * @deprecated Use `SELECT_PANEL_INDENT_PADDING_X` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
30
- * @breaking-change 17.0.0
31
- */
32
- export const SELECT_PANEL_INDENT_PADDING_X = SELECT_PANEL_PADDING_X * 2;
33
- /**
34
- * The height of the select items in `em` units.
35
- * @deprecated Use `SELECT_ITEM_HEIGHT_EM` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
36
- * @breaking-change 17.0.0
37
- */
38
- export const SELECT_ITEM_HEIGHT_EM = 3;
39
- // TODO(josephperrott): Revert to a constant after 2018 spec updates are fully merged.
40
- /**
41
- * Distance between the panel edge and the option text in
42
- * multi-selection mode.
43
- *
44
- * Calculated as:
45
- * (SELECT_PANEL_PADDING_X * 1.5) + 16 = 40
46
- * The padding is multiplied by 1.5 because the checkbox's margin is half the padding.
47
- * The checkbox width is 16px.
48
- *
49
- * @deprecated Use `SELECT_MULTIPLE_PANEL_PADDING_X` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
50
- * @breaking-change 17.0.0
51
- */
52
- export const SELECT_MULTIPLE_PANEL_PADDING_X = SELECT_PANEL_PADDING_X * 1.5 + 16;
53
- /**
54
- * The select panel will only "fit" inside the viewport if it is positioned at
55
- * this value or more away from the viewport boundary.
56
- * @deprecated Use `SELECT_PANEL_VIEWPORT_PADDING` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
57
- * @breaking-change 17.0.0
58
- */
59
- export const SELECT_PANEL_VIEWPORT_PADDING = 8;
60
- /**
61
- * Change event object that is emitted when the select value has changed.
62
- * @deprecated Use `MatSelectChange` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
63
- * @breaking-change 17.0.0
64
- */
65
- export class MatLegacySelectChange {
66
- constructor(
67
- /** Reference to the select that emitted the change event. */
68
- source,
69
- /** Current value of the select that emitted the event. */
70
- value) {
71
- this.source = source;
72
- this.value = value;
73
- }
74
- }
75
- /**
76
- * Allows the user to customize the trigger that is displayed when the select has a value.
77
- * @deprecated Use `MatSelectTrigger` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
78
- * @breaking-change 17.0.0
79
- */
80
- export class MatLegacySelectTrigger {
81
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacySelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
82
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: MatLegacySelectTrigger, selector: "mat-select-trigger", providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatLegacySelectTrigger }], ngImport: i0 }); }
83
- }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacySelectTrigger, decorators: [{
85
- type: Directive,
86
- args: [{
87
- selector: 'mat-select-trigger',
88
- providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatLegacySelectTrigger }],
89
- }]
90
- }] });
91
- /**
92
- * @deprecated Use `MatSelect` from `@angular/material/select` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
93
- * @breaking-change 17.0.0
94
- */
95
- export class MatLegacySelect extends _MatSelectBase {
96
- constructor() {
97
- super(...arguments);
98
- /** The scroll position of the overlay panel, calculated to center the selected option. */
99
- this._scrollTop = 0;
100
- /** The cached font-size of the trigger element. */
101
- this._triggerFontSize = 0;
102
- /** The value of the select panel's transform-origin property. */
103
- this._transformOrigin = 'top';
104
- /**
105
- * The y-offset of the overlay panel in relation to the trigger's top start corner.
106
- * This must be adjusted to align the selected option text over the trigger text.
107
- * when the panel opens. Will change based on the y-position of the selected option.
108
- */
109
- this._offsetY = 0;
110
- this._positions = [
111
- {
112
- originX: 'start',
113
- originY: 'top',
114
- overlayX: 'start',
115
- overlayY: 'top',
116
- },
117
- {
118
- originX: 'start',
119
- originY: 'bottom',
120
- overlayX: 'start',
121
- overlayY: 'bottom',
122
- },
123
- ];
124
- }
125
- /**
126
- * Calculates the scroll position of the select's overlay panel.
127
- *
128
- * Attempts to center the selected option in the panel. If the option is
129
- * too high or too low in the panel to be scrolled to the center, it clamps the
130
- * scroll position to the min or max scroll positions respectively.
131
- */
132
- _calculateOverlayScroll(selectedIndex, scrollBuffer, maxScroll) {
133
- const itemHeight = this._getItemHeight();
134
- const optionOffsetFromScrollTop = itemHeight * selectedIndex;
135
- const halfOptionHeight = itemHeight / 2;
136
- // Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the
137
- // scroll container, then subtracts the scroll buffer to scroll the option down to
138
- // the center of the overlay panel. Half the option height must be re-added to the
139
- // scrollTop so the option is centered based on its middle, not its top edge.
140
- const optimalScrollPosition = optionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;
141
- return Math.min(Math.max(0, optimalScrollPosition), maxScroll);
142
- }
143
- ngOnInit() {
144
- super.ngOnInit();
145
- this._viewportRuler
146
- .change()
147
- .pipe(takeUntil(this._destroy))
148
- .subscribe(() => {
149
- if (this.panelOpen) {
150
- this._triggerRect = this.trigger.nativeElement.getBoundingClientRect();
151
- this._changeDetectorRef.markForCheck();
152
- }
153
- });
154
- }
155
- open() {
156
- if (super._canOpen()) {
157
- super.open();
158
- this._triggerRect = this.trigger.nativeElement.getBoundingClientRect();
159
- // Note: The computed font-size will be a string pixel value (e.g. "16px").
160
- // `parseInt` ignores the trailing 'px' and converts this to a number.
161
- this._triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement).fontSize || '0');
162
- this._calculateOverlayPosition();
163
- // Set the font size on the panel element once it exists.
164
- this._ngZone.onStable.pipe(take(1)).subscribe(() => {
165
- if (this._triggerFontSize &&
166
- this._overlayDir.overlayRef &&
167
- this._overlayDir.overlayRef.overlayElement) {
168
- this._overlayDir.overlayRef.overlayElement.style.fontSize = `${this._triggerFontSize}px`;
169
- }
170
- });
171
- }
172
- }
173
- /** Scrolls the active option into view. */
174
- _scrollOptionIntoView(index) {
175
- const labelCount = _countGroupLabelsBeforeLegacyOption(index, this.options, this.optionGroups);
176
- const itemHeight = this._getItemHeight();
177
- if (index === 0 && labelCount === 1) {
178
- // If we've got one group label before the option and we're at the top option,
179
- // scroll the list to the top. This is better UX than scrolling the list to the
180
- // top of the option, because it allows the user to read the top group's label.
181
- this.panel.nativeElement.scrollTop = 0;
182
- }
183
- else {
184
- this.panel.nativeElement.scrollTop = _getLegacyOptionScrollPosition((index + labelCount) * itemHeight, itemHeight, this.panel.nativeElement.scrollTop, SELECT_PANEL_MAX_HEIGHT);
185
- }
186
- }
187
- _positioningSettled() {
188
- this._calculateOverlayOffsetX();
189
- this.panel.nativeElement.scrollTop = this._scrollTop;
190
- }
191
- _panelDoneAnimating(isOpen) {
192
- if (this.panelOpen) {
193
- this._scrollTop = 0;
194
- }
195
- else {
196
- this._overlayDir.offsetX = 0;
197
- this._changeDetectorRef.markForCheck();
198
- }
199
- super._panelDoneAnimating(isOpen);
200
- }
201
- _getChangeEvent(value) {
202
- return new MatLegacySelectChange(this, value);
203
- }
204
- _getOverlayMinWidth() {
205
- return this._triggerRect?.width;
206
- }
207
- /**
208
- * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.
209
- * This must be adjusted to align the selected option text over the trigger text when
210
- * the panel opens. Will change based on LTR or RTL text direction. Note that the offset
211
- * can't be calculated until the panel has been attached, because we need to know the
212
- * content width in order to constrain the panel within the viewport.
213
- */
214
- _calculateOverlayOffsetX() {
215
- const overlayRect = this._overlayDir.overlayRef.overlayElement.getBoundingClientRect();
216
- const viewportSize = this._viewportRuler.getViewportSize();
217
- const isRtl = this._isRtl();
218
- const paddingWidth = this.multiple
219
- ? SELECT_MULTIPLE_PANEL_PADDING_X + SELECT_PANEL_PADDING_X
220
- : SELECT_PANEL_PADDING_X * 2;
221
- let offsetX;
222
- // Adjust the offset, depending on the option padding.
223
- if (this.multiple) {
224
- offsetX = SELECT_MULTIPLE_PANEL_PADDING_X;
225
- }
226
- else if (this.disableOptionCentering) {
227
- offsetX = SELECT_PANEL_PADDING_X;
228
- }
229
- else {
230
- let selected = this._selectionModel.selected[0] || this.options.first;
231
- offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;
232
- }
233
- // Invert the offset in LTR.
234
- if (!isRtl) {
235
- offsetX *= -1;
236
- }
237
- // Determine how much the select overflows on each side.
238
- const leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));
239
- const rightOverflow = overlayRect.right + offsetX - viewportSize.width + (isRtl ? 0 : paddingWidth);
240
- // If the element overflows on either side, reduce the offset to allow it to fit.
241
- if (leftOverflow > 0) {
242
- offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;
243
- }
244
- else if (rightOverflow > 0) {
245
- offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;
246
- }
247
- // Set the offset directly in order to avoid having to go through change detection and
248
- // potentially triggering "changed after it was checked" errors. Round the value to avoid
249
- // blurry content in some browsers.
250
- this._overlayDir.offsetX = Math.round(offsetX);
251
- this._overlayDir.overlayRef.updatePosition();
252
- }
253
- /**
254
- * Calculates the y-offset of the select's overlay panel in relation to the
255
- * top start corner of the trigger. It has to be adjusted in order for the
256
- * selected option to be aligned over the trigger when the panel opens.
257
- */
258
- _calculateOverlayOffsetY(selectedIndex, scrollBuffer, maxScroll) {
259
- const itemHeight = this._getItemHeight();
260
- const optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;
261
- const maxOptionsDisplayed = Math.floor(SELECT_PANEL_MAX_HEIGHT / itemHeight);
262
- let optionOffsetFromPanelTop;
263
- // Disable offset if requested by user by returning 0 as value to offset
264
- if (this.disableOptionCentering) {
265
- return 0;
266
- }
267
- if (this._scrollTop === 0) {
268
- optionOffsetFromPanelTop = selectedIndex * itemHeight;
269
- }
270
- else if (this._scrollTop === maxScroll) {
271
- const firstDisplayedIndex = this._getItemCount() - maxOptionsDisplayed;
272
- const selectedDisplayIndex = selectedIndex - firstDisplayedIndex;
273
- // The first item is partially out of the viewport. Therefore we need to calculate what
274
- // portion of it is shown in the viewport and account for it in our offset.
275
- let partialItemHeight = itemHeight - ((this._getItemCount() * itemHeight - SELECT_PANEL_MAX_HEIGHT) % itemHeight);
276
- // Because the panel height is longer than the height of the options alone,
277
- // there is always extra padding at the top or bottom of the panel. When
278
- // scrolled to the very bottom, this padding is at the top of the panel and
279
- // must be added to the offset.
280
- optionOffsetFromPanelTop = selectedDisplayIndex * itemHeight + partialItemHeight;
281
- }
282
- else {
283
- // If the option was scrolled to the middle of the panel using a scroll buffer,
284
- // its offset will be the scroll buffer minus the half height that was added to
285
- // center it.
286
- optionOffsetFromPanelTop = scrollBuffer - itemHeight / 2;
287
- }
288
- // The final offset is the option's offset from the top, adjusted for the height difference,
289
- // multiplied by -1 to ensure that the overlay moves in the correct direction up the page.
290
- // The value is rounded to prevent some browsers from blurring the content.
291
- return Math.round(optionOffsetFromPanelTop * -1 - optionHeightAdjustment);
292
- }
293
- /**
294
- * Checks that the attempted overlay position will fit within the viewport.
295
- * If it will not fit, tries to adjust the scroll position and the associated
296
- * y-offset so the panel can open fully on-screen. If it still won't fit,
297
- * sets the offset back to 0 to allow the fallback position to take over.
298
- */
299
- _checkOverlayWithinViewport(maxScroll) {
300
- const itemHeight = this._getItemHeight();
301
- const viewportSize = this._viewportRuler.getViewportSize();
302
- const topSpaceAvailable = this._triggerRect.top - SELECT_PANEL_VIEWPORT_PADDING;
303
- const bottomSpaceAvailable = viewportSize.height - this._triggerRect.bottom - SELECT_PANEL_VIEWPORT_PADDING;
304
- const panelHeightTop = Math.abs(this._offsetY);
305
- const totalPanelHeight = Math.min(this._getItemCount() * itemHeight, SELECT_PANEL_MAX_HEIGHT);
306
- const panelHeightBottom = totalPanelHeight - panelHeightTop - this._triggerRect.height;
307
- if (panelHeightBottom > bottomSpaceAvailable) {
308
- this._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);
309
- }
310
- else if (panelHeightTop > topSpaceAvailable) {
311
- this._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);
312
- }
313
- else {
314
- this._transformOrigin = this._getOriginBasedOnOption();
315
- }
316
- }
317
- /** Adjusts the overlay panel up to fit in the viewport. */
318
- _adjustPanelUp(panelHeightBottom, bottomSpaceAvailable) {
319
- // Browsers ignore fractional scroll offsets, so we need to round.
320
- const distanceBelowViewport = Math.round(panelHeightBottom - bottomSpaceAvailable);
321
- // Scrolls the panel up by the distance it was extending past the boundary, then
322
- // adjusts the offset by that amount to move the panel up into the viewport.
323
- this._scrollTop -= distanceBelowViewport;
324
- this._offsetY -= distanceBelowViewport;
325
- this._transformOrigin = this._getOriginBasedOnOption();
326
- // If the panel is scrolled to the very top, it won't be able to fit the panel
327
- // by scrolling, so set the offset to 0 to allow the fallback position to take
328
- // effect.
329
- if (this._scrollTop <= 0) {
330
- this._scrollTop = 0;
331
- this._offsetY = 0;
332
- this._transformOrigin = `50% bottom 0px`;
333
- }
334
- }
335
- /** Adjusts the overlay panel down to fit in the viewport. */
336
- _adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll) {
337
- // Browsers ignore fractional scroll offsets, so we need to round.
338
- const distanceAboveViewport = Math.round(panelHeightTop - topSpaceAvailable);
339
- // Scrolls the panel down by the distance it was extending past the boundary, then
340
- // adjusts the offset by that amount to move the panel down into the viewport.
341
- this._scrollTop += distanceAboveViewport;
342
- this._offsetY += distanceAboveViewport;
343
- this._transformOrigin = this._getOriginBasedOnOption();
344
- // If the panel is scrolled to the very bottom, it won't be able to fit the
345
- // panel by scrolling, so set the offset to 0 to allow the fallback position
346
- // to take effect.
347
- if (this._scrollTop >= maxScroll) {
348
- this._scrollTop = maxScroll;
349
- this._offsetY = 0;
350
- this._transformOrigin = `50% top 0px`;
351
- return;
352
- }
353
- }
354
- /** Calculates the scroll position and x- and y-offsets of the overlay panel. */
355
- _calculateOverlayPosition() {
356
- const itemHeight = this._getItemHeight();
357
- const items = this._getItemCount();
358
- const panelHeight = Math.min(items * itemHeight, SELECT_PANEL_MAX_HEIGHT);
359
- const scrollContainerHeight = items * itemHeight;
360
- // The farthest the panel can be scrolled before it hits the bottom
361
- const maxScroll = scrollContainerHeight - panelHeight;
362
- // If no value is selected we open the popup to the first item.
363
- let selectedOptionOffset;
364
- if (this.empty) {
365
- selectedOptionOffset = 0;
366
- }
367
- else {
368
- selectedOptionOffset = Math.max(this.options.toArray().indexOf(this._selectionModel.selected[0]), 0);
369
- }
370
- selectedOptionOffset += _countGroupLabelsBeforeLegacyOption(selectedOptionOffset, this.options, this.optionGroups);
371
- // We must maintain a scroll buffer so the selected option will be scrolled to the
372
- // center of the overlay panel rather than the top.
373
- const scrollBuffer = panelHeight / 2;
374
- this._scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);
375
- this._offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);
376
- this._checkOverlayWithinViewport(maxScroll);
377
- }
378
- /** Sets the transform origin point based on the selected option. */
379
- _getOriginBasedOnOption() {
380
- const itemHeight = this._getItemHeight();
381
- const optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;
382
- const originY = Math.abs(this._offsetY) - optionHeightAdjustment + itemHeight / 2;
383
- return `50% ${originY}px 0px`;
384
- }
385
- /** Calculates the height of the select's options. */
386
- _getItemHeight() {
387
- return this._triggerFontSize * SELECT_ITEM_HEIGHT_EM;
388
- }
389
- /** Calculates the amount of items in the select. This includes options and group labels. */
390
- _getItemCount() {
391
- return this.options.length + this.optionGroups.length;
392
- }
393
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacySelect, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
394
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: MatLegacySelect, selector: "mat-select", inputs: { disabled: "disabled", disableRipple: "disableRipple", tabIndex: "tabIndex" }, host: { attributes: { "role": "combobox", "aria-autocomplete": "none", "aria-haspopup": "true", "ngSkipHydration": "" }, listeners: { "keydown": "_handleKeydown($event)", "focus": "_onFocus()", "blur": "_onBlur()" }, properties: { "attr.id": "id", "attr.tabindex": "tabIndex", "attr.aria-controls": "panelOpen ? id + \"-panel\" : null", "attr.aria-expanded": "panelOpen", "attr.aria-label": "ariaLabel || null", "attr.aria-required": "required.toString()", "attr.aria-disabled": "disabled.toString()", "attr.aria-invalid": "errorState", "attr.aria-activedescendant": "_getAriaActiveDescendant()", "class.mat-select-disabled": "disabled", "class.mat-select-invalid": "errorState", "class.mat-select-required": "required", "class.mat-select-empty": "empty", "class.mat-select-multiple": "multiple" }, classAttribute: "mat-select" }, providers: [
395
- { provide: MatLegacyFormFieldControl, useExisting: MatLegacySelect },
396
- { provide: MAT_LEGACY_OPTION_PARENT_COMPONENT, useExisting: MatLegacySelect },
397
- ], queries: [{ propertyName: "customTrigger", first: true, predicate: MAT_SELECT_TRIGGER, descendants: true }, { propertyName: "options", predicate: MatLegacyOption, descendants: true }, { propertyName: "optionGroups", predicate: MAT_LEGACY_OPTGROUP, descendants: true }], exportAs: ["matSelect"], usesInheritance: true, ngImport: i0, template: "<!--\n Note that the select trigger element specifies `aria-owns` pointing to the listbox overlay.\n While aria-owns is not required for the ARIA 1.2 `role=\"combobox\"` interaction pattern,\n it fixes an issue with VoiceOver when the select appears inside of an `aria-model=\"true\"`\n element (e.g. a dialog). Without this `aria-owns`, the `aria-modal` on a dialog prevents\n VoiceOver from \"seeing\" the select's listbox overlay for aria-activedescendant.\n Using `aria-owns` re-parents the select overlay so that it works again.\n See https://github.com/angular/components/issues/20694\n-->\n<div cdk-overlay-origin\n [attr.aria-owns]=\"panelOpen ? id + '-panel' : null\"\n class=\"mat-select-trigger\"\n (click)=\"toggle()\"\n #origin=\"cdkOverlayOrigin\"\n #trigger>\n <div class=\"mat-select-value\" [ngSwitch]=\"empty\" [attr.id]=\"_valueId\">\n <span class=\"mat-select-placeholder mat-select-min-line\" *ngSwitchCase=\"true\">{{placeholder}}</span>\n <span class=\"mat-select-value-text\" *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\n <span class=\"mat-select-min-line\" *ngSwitchDefault>{{triggerValue}}</span>\n <ng-content select=\"mat-select-trigger\" *ngSwitchCase=\"true\"></ng-content>\n </span>\n </div>\n\n <div class=\"mat-select-arrow-wrapper\"><div class=\"mat-select-arrow\"></div></div>\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPanelClass]=\"_overlayPanelClass\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayMinWidth]=\"_getOverlayMinWidth()\"\n [cdkConnectedOverlayOffsetY]=\"_offsetY\"\n (backdropClick)=\"close()\"\n (attach)=\"_onAttached()\"\n (detach)=\"close()\">\n <div class=\"mat-select-panel-wrap\" [@transformPanelWrap]>\n <div\n #panel\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"mat-select-panel {{ _getPanelTheme() }}\"\n [attr.id]=\"id + '-panel'\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"_getPanelAriaLabelledby()\"\n [ngClass]=\"panelClass\"\n [@transformPanel]=\"multiple ? 'showing-multiple' : 'showing'\"\n (@transformPanel.done)=\"_panelDoneAnimatingStream.next($event.toState)\"\n [style.transformOrigin]=\"_transformOrigin\"\n [style.font-size.px]=\"_triggerFontSize\"\n (keydown)=\"_handleKeydown($event)\">\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: [".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{height:16px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;margin:0 4px}.mat-form-field.mat-focused .mat-select-arrow{transform:translateX(0)}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-select-min-line:empty::before{content:\" \";white-space:pre;width:1px;display:inline-block;visibility:hidden}"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], animations: [
398
- matLegacySelectAnimations.transformPanelWrap,
399
- matLegacySelectAnimations.transformPanel,
400
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
401
- }
402
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacySelect, decorators: [{
403
- type: Component,
404
- args: [{ selector: 'mat-select', exportAs: 'matSelect', inputs: ['disabled', 'disableRipple', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
405
- 'role': 'combobox',
406
- 'aria-autocomplete': 'none',
407
- // TODO(crisbeto): the value for aria-haspopup should be `listbox`, but currently it's difficult
408
- // to sync into Google, because of an outdated automated a11y check which flags it as an invalid
409
- // value. At some point we should try to switch it back to being `listbox`.
410
- 'aria-haspopup': 'true',
411
- 'class': 'mat-select',
412
- '[attr.id]': 'id',
413
- '[attr.tabindex]': 'tabIndex',
414
- '[attr.aria-controls]': 'panelOpen ? id + "-panel" : null',
415
- '[attr.aria-expanded]': 'panelOpen',
416
- '[attr.aria-label]': 'ariaLabel || null',
417
- '[attr.aria-required]': 'required.toString()',
418
- '[attr.aria-disabled]': 'disabled.toString()',
419
- '[attr.aria-invalid]': 'errorState',
420
- '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',
421
- '[class.mat-select-disabled]': 'disabled',
422
- '[class.mat-select-invalid]': 'errorState',
423
- '[class.mat-select-required]': 'required',
424
- '[class.mat-select-empty]': 'empty',
425
- '[class.mat-select-multiple]': 'multiple',
426
- '(keydown)': '_handleKeydown($event)',
427
- '(focus)': '_onFocus()',
428
- '(blur)': '_onBlur()',
429
- 'ngSkipHydration': '',
430
- }, animations: [
431
- matLegacySelectAnimations.transformPanelWrap,
432
- matLegacySelectAnimations.transformPanel,
433
- ], providers: [
434
- { provide: MatLegacyFormFieldControl, useExisting: MatLegacySelect },
435
- { provide: MAT_LEGACY_OPTION_PARENT_COMPONENT, useExisting: MatLegacySelect },
436
- ], template: "<!--\n Note that the select trigger element specifies `aria-owns` pointing to the listbox overlay.\n While aria-owns is not required for the ARIA 1.2 `role=\"combobox\"` interaction pattern,\n it fixes an issue with VoiceOver when the select appears inside of an `aria-model=\"true\"`\n element (e.g. a dialog). Without this `aria-owns`, the `aria-modal` on a dialog prevents\n VoiceOver from \"seeing\" the select's listbox overlay for aria-activedescendant.\n Using `aria-owns` re-parents the select overlay so that it works again.\n See https://github.com/angular/components/issues/20694\n-->\n<div cdk-overlay-origin\n [attr.aria-owns]=\"panelOpen ? id + '-panel' : null\"\n class=\"mat-select-trigger\"\n (click)=\"toggle()\"\n #origin=\"cdkOverlayOrigin\"\n #trigger>\n <div class=\"mat-select-value\" [ngSwitch]=\"empty\" [attr.id]=\"_valueId\">\n <span class=\"mat-select-placeholder mat-select-min-line\" *ngSwitchCase=\"true\">{{placeholder}}</span>\n <span class=\"mat-select-value-text\" *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\n <span class=\"mat-select-min-line\" *ngSwitchDefault>{{triggerValue}}</span>\n <ng-content select=\"mat-select-trigger\" *ngSwitchCase=\"true\"></ng-content>\n </span>\n </div>\n\n <div class=\"mat-select-arrow-wrapper\"><div class=\"mat-select-arrow\"></div></div>\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPanelClass]=\"_overlayPanelClass\"\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayPositions]=\"_positions\"\n [cdkConnectedOverlayMinWidth]=\"_getOverlayMinWidth()\"\n [cdkConnectedOverlayOffsetY]=\"_offsetY\"\n (backdropClick)=\"close()\"\n (attach)=\"_onAttached()\"\n (detach)=\"close()\">\n <div class=\"mat-select-panel-wrap\" [@transformPanelWrap]>\n <div\n #panel\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"mat-select-panel {{ _getPanelTheme() }}\"\n [attr.id]=\"id + '-panel'\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"_getPanelAriaLabelledby()\"\n [ngClass]=\"panelClass\"\n [@transformPanel]=\"multiple ? 'showing-multiple' : 'showing'\"\n (@transformPanel.done)=\"_panelDoneAnimatingStream.next($event.toState)\"\n [style.transformOrigin]=\"_transformOrigin\"\n [style.font-size.px]=\"_triggerFontSize\"\n (keydown)=\"_handleKeydown($event)\">\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: [".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{height:16px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;margin:0 4px}.mat-form-field.mat-focused .mat-select-arrow{transform:translateX(0)}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-select-min-line:empty::before{content:\" \";white-space:pre;width:1px;display:inline-block;visibility:hidden}"] }]
437
- }], propDecorators: { options: [{
438
- type: ContentChildren,
439
- args: [MatLegacyOption, { descendants: true }]
440
- }], optionGroups: [{
441
- type: ContentChildren,
442
- args: [MAT_LEGACY_OPTGROUP, { descendants: true }]
443
- }], customTrigger: [{
444
- type: ContentChild,
445
- args: [MAT_SELECT_TRIGGER]
446
- }] } });
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL2xlZ2FjeS1zZWxlY3Qvc2VsZWN0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL2xlZ2FjeS1zZWxlY3Qvc2VsZWN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBRVQsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUNBQW1DLEVBQ25DLDhCQUE4QixFQUM5QixtQkFBbUIsRUFDbkIsa0NBQWtDLEVBQ2xDLGVBQWUsR0FFaEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQzdGLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFFOUQ7Ozs7R0FJRztBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFFM0M7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUV6Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBRXhFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFFdkMsc0ZBQXNGO0FBQ3RGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFD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NkIsRUFBRSxVQUFVO3dCQUN6QyxXQUFXLEVBQUUsd0JBQXdCO3dCQUNyQyxTQUFTLEVBQUUsWUFBWTt3QkFDdkIsUUFBUSxFQUFFLFdBQVc7d0JBQ3JCLGlCQUFpQixFQUFFLEVBQUU7cUJBQ3RCLGNBQ1c7d0JBQ1YseUJBQXlCLENBQUMsa0JBQWtCO3dCQUM1Qyx5QkFBeUIsQ0FBQyxjQUFjO3FCQUN6QyxhQUNVO3dCQUNULEVBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFdBQVcsaUJBQWlCLEVBQUM7d0JBQ2xFLEVBQUMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLFdBQVcsaUJBQWlCLEVBQUM7cUJBQzVFOzhCQXNCc0QsT0FBTztzQkFBN0QsZUFBZTt1QkFBQyxlQUFlLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUdyRCxZQUFZO3NCQURYLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUd2QixhQUFhO3NCQUE5QyxZQUFZO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0Nvbm5lY3RlZFBvc2l0aW9ufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgX2NvdW50R3JvdXBMYWJlbHNCZWZvcmVMZWdhY3lPcHRpb24sXG4gIF9nZXRMZWdhY3lPcHRpb25TY3JvbGxQb3NpdGlvbixcbiAgTUFUX0xFR0FDWV9PUFRHUk9VUCxcbiAgTUFUX0xFR0FDWV9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCxcbiAgTWF0TGVnYWN5T3B0aW9uLFxuICBNYXRMZWdhY3lPcHRncm91cCxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWNvcmUnO1xuaW1wb3J0IHtNQVRfU0VMRUNUX1RSSUdHRVIsIF9NYXRTZWxlY3RCYXNlLCBNYXRTZWxlY3RDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQge01hdExlZ2FjeUZvcm1GaWVsZENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1mb3JtLWZpZWxkJztcbmltcG9ydCB7dGFrZSwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge21hdExlZ2FjeVNlbGVjdEFuaW1hdGlvbnN9IGZyb20gJy4vc2VsZWN0LWFuaW1hdGlvbnMnO1xuXG4vKipcbiAqIFRoZSBmb2xsb3dpbmcgc3R5bGUgY29uc3RhbnRzIGFyZSBuZWNlc3NhcnkgdG8gc2F2ZSBoZXJlIGluIG9yZGVyXG4gKiB0byBwcm9wZXJseSBjYWxjdWxhdGUgdGhlIGFsaWdubWVudCBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIG92ZXJcbiAqIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXG4gKi9cblxuLyoqXG4gKiBUaGUgbWF4IGhlaWdodCBvZiB0aGUgc2VsZWN0J3Mgb3ZlcmxheSBwYW5lbC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgU0VMRUNUX1BBTkVMX01BWF9IRUlHSFRgIGZyb20gYEBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdGAgaW5zdGVhZC4gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS9tZGMtbWlncmF0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBtaWdyYXRpbmcuXG4gKiBAYnJlYWtpbmctY2hhbmdlIDE3LjAuMFxuICovXG5leHBvcnQgY29uc3QgU0VMRUNUX1BBTkVMX01BWF9IRUlHSFQgPSAyNTY7XG5cbi8qKlxuICogVGhlIHBhbmVsJ3MgcGFkZGluZyBvbiB0aGUgeC1heGlzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBTRUxFQ1RfUEFORUxfUEFERElOR19YYCBmcm9tIGBAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3RgIGluc3RlYWQuIFNlZSBodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vZ3VpZGUvbWRjLW1pZ3JhdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgbWlncmF0aW5nLlxuICogQGJyZWFraW5nLWNoYW5nZSAxNy4wLjBcbiAqL1xuZXhwb3J0IGNvbnN0IFNFTEVDVF9QQU5FTF9QQURESU5HX1ggPSAxNjtcblxuLyoqXG4gKiBUaGUgcGFuZWwncyB4IGF4aXMgcGFkZGluZyBpZiBpdCBpcyBpbmRlbnRlZCAoZS5nLiB0aGVyZSBpcyBhbiBvcHRpb24gZ3JvdXApLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBTRUxFQ1RfUEFORUxfSU5ERU5UX1BBRERJTkdfWGAgZnJvbSBgQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0YCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL21kYy1taWdyYXRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IG1pZ3JhdGluZy5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTcuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBTRUxFQ1RfUEFORUxfSU5ERU5UX1BBRERJTkdfWCA9IFNFTEVDVF9QQU5FTF9QQURESU5HX1ggKiAyO1xuXG4vKipcbiAqIFRoZSBoZWlnaHQgb2YgdGhlIHNlbGVjdCBpdGVtcyBpbiBgZW1gIHVuaXRzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBTRUxFQ1RfSVRFTV9IRUlHSFRfRU1gIGZyb20gYEBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdGAgaW5zdGVhZC4gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS9tZGMtbWlncmF0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBtaWdyYXRpbmcuXG4gKiBAYnJlYWtpbmctY2hhbmdlIDE3LjAuMFxuICovXG5leHBvcnQgY29uc3QgU0VMRUNUX0lURU1fSEVJR0hUX0VNID0gMztcblxuLy8gVE9ETyhqb3NlcGhwZXJyb3R0KTogUmV2ZXJ0IHRvIGEgY29uc3RhbnQgYWZ0ZXIgMjAxOCBzcGVjIHVwZGF0ZXMgYXJlIGZ1bGx5IG1lcmdlZC5cbi8qKlxuICogRGlzdGFuY2UgYmV0d2VlbiB0aGUgcGFuZWwgZWRnZSBhbmQgdGhlIG9wdGlvbiB0ZXh0IGluXG4gKiBtdWx0aS1zZWxlY3Rpb24gbW9kZS5cbiAqXG4gKiBDYWxjdWxhdGVkIGFzOlxuICogKFNFTEVDVF9QQU5FTF9QQURESU5HX1ggKiAxLjUpICsgMTYgPSA0MFxuICogVGhlIHBhZGRpbmcgaXMgbXVsdGlwbGllZCBieSAxLjUgYmVjYXVzZSB0aGUgY2hlY2tib3gncyBtYXJnaW4gaXMgaGFsZiB0aGUgcGFkZGluZy5cbiAqIFRoZSBjaGVja2JveCB3aWR0aCBpcyAxNnB4LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBgU0VMRUNUX01VTFRJUExFX1BBTkVMX1BBRERJTkdfWGAgZnJvbSBgQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0YCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL21kYy1taWdyYXRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IG1pZ3JhdGluZy5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTcuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBTRUxFQ1RfTVVMVElQTEVfUEFORUxfUEFERElOR19YID0gU0VMRUNUX1BBTkVMX1BBRERJTkdfWCAqIDEuNSArIDE2O1xuXG4vKipcbiAqIFRoZSBzZWxlY3QgcGFuZWwgd2lsbCBvbmx5IFwiZml0XCIgaW5zaWRlIHRoZSB2aWV3cG9ydCBpZiBpdCBpcyBwb3NpdGlvbmVkIGF0XG4gKiB0aGlzIHZhbHVlIG9yIG1vcmUgYXdheSBmcm9tIHRoZSB2aWV3cG9ydCBib3VuZGFyeS5cbiAqIEBkZXByZWNhdGVkIFVzZSBgU0VMRUNUX1BBTkVMX1ZJRVdQT1JUX1BBRERJTkdgIGZyb20gYEBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdGAgaW5zdGVhZC4gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS9tZGMtbWlncmF0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBtaWdyYXRpbmcuXG4gKiBAYnJlYWtpbmctY2hhbmdlIDE3LjAuMFxuICovXG5leHBvcnQgY29uc3QgU0VMRUNUX1BBTkVMX1ZJRVdQT1JUX1BBRERJTkcgPSA4O1xuXG4vKipcbiAqIENoYW5nZSBldmVudCBvYmplY3QgdGhhdCBpcyBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdCB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgTWF0U2VsZWN0Q2hhbmdlYCBmcm9tIGBAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3RgIGluc3RlYWQuIFNlZSBodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vZ3VpZGUvbWRjLW1pZ3JhdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgbWlncmF0aW5nLlxuICogQGJyZWFraW5nLWNoYW5nZSAxNy4wLjBcbiAqL1xuZXhwb3J0IGNsYXNzIE1hdExlZ2FjeVNlbGVjdENoYW5nZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdCB0aGF0IGVtaXR0ZWQgdGhlIGNoYW5nZSBldmVudC4gKi9cbiAgICBwdWJsaWMgc291cmNlOiBNYXRMZWdhY3lTZWxlY3QsXG4gICAgLyoqIEN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlbGVjdCB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LiAqL1xuICAgIHB1YmxpYyB2YWx1ZTogYW55LFxuICApIHt9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBNYXRTZWxlY3RDb25maWdgIGZyb20gYEBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdGAgaW5zdGVhZC4gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS9tZGMtbWlncmF0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBtaWdyYXRpbmcuXG4gKiBAYnJlYWtpbmctY2hhbmdlIDE3LjAuMFxuICovXG5leHBvcnQgdHlwZSBNYXRMZWdhY3lTZWxlY3RDb25maWcgPSBPbWl0PE1hdFNlbGVjdENvbmZpZywgJ3BhbmVsV2lkdGgnPjtcblxuLyoqXG4gKiBBbGxvd3MgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSB0cmlnZ2VyIHRoYXQgaXMgZGlzcGxheWVkIHdoZW4gdGhlIHNlbGVjdCBoYXMgYSB2YWx1ZS5cbiAqIEBkZXByZWNhdGVkIFVzZSBgTWF0U2VsZWN0VHJpZ2dlcmAgZnJvbSBgQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0YCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL21kYy1taWdyYXRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IG1pZ3JhdGluZy5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTcuMC4wXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ21hdC1zZWxlY3QtdHJpZ2dlcicsXG4gIHByb3ZpZGVyczogW3twcm92aWRlOiBNQVRfU0VMRUNUX1RSSUdHRVIsIHVzZUV4aXN0aW5nOiBNYXRMZWdhY3lTZWxlY3RUcmlnZ2VyfV0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdExlZ2FjeVNlbGVjdFRyaWdnZXIge31cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYE1hdFNlbGVjdGAgZnJvbSBgQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0YCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL21kYy1taWdyYXRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IG1pZ3JhdGluZy5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTcuMC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1zZWxlY3QnLFxuICBleHBvcnRBczogJ21hdFNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnc2VsZWN0Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc2VsZWN0LmNzcyddLFxuICBpbnB1dHM6IFsnZGlzYWJsZWQnLCAnZGlzYWJsZVJpcHBsZScsICd0YWJJbmRleCddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdyb2xlJzogJ2NvbWJvYm94JyxcbiAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbm9uZScsXG4gICAgLy8gVE9ETyhjcmlzYmV0byk6IHRoZSB2YWx1ZSBmb3IgYXJpYS1oYXNwb3B1cCBzaG91bGQgYmUgYGxpc3Rib3hgLCBidXQgY3VycmVudGx5IGl0J3MgZGlmZmljdWx0XG4gICAgLy8gdG8gc3luYyBpbnRvIEdvb2dsZSwgYmVjYXVzZSBvZiBhbiBvdXRkYXRlZCBhdXRvbWF0ZWQgYTExeSBjaGVjayB3aGljaCBmbGFncyBpdCBhcyBhbiBpbnZhbGlkXG4gICAgLy8gdmFsdWUuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHRyeSB0byBzd2l0Y2ggaXQgYmFjayB0byBiZWluZyBgbGlzdGJveGAuXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAndHJ1ZScsXG4gICAgJ2NsYXNzJzogJ21hdC1zZWxlY3QnLFxuICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICdbYXR0ci50YWJpbmRleF0nOiAndGFiSW5kZXgnLFxuICAgICdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdwYW5lbE9wZW4gPyBpZCArIFwiLXBhbmVsXCIgOiBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAncGFuZWxPcGVuJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAnYXJpYUxhYmVsIHx8IG51bGwnLFxuICAgICdbYXR0ci5hcmlhLXJlcXVpcmVkXSc6ICdyZXF1aXJlZC50b1N0cmluZygpJyxcbiAgICAnW2F0dHIuYXJpYS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQudG9TdHJpbmcoKScsXG4gICAgJ1thdHRyLmFyaWEtaW52YWxpZF0nOiAnZXJyb3JTdGF0ZScsXG4gICAgJ1thdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF0nOiAnX2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCknLFxuICAgICdbY2xhc3MubWF0LXNlbGVjdC1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MubWF0LXNlbGVjdC1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLm1hdC1zZWxlY3QtcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAnW2NsYXNzLm1hdC1zZWxlY3QtZW1wdHldJzogJ2VtcHR5JyxcbiAgICAnW2NsYXNzLm1hdC1zZWxlY3QtbXVsdGlwbGVdJzogJ211bHRpcGxlJyxcbiAgICAnKGtleWRvd24pJzogJ19oYW5kbGVLZXlkb3duKCRldmVudCknLFxuICAgICcoZm9jdXMpJzogJ19vbkZvY3VzKCknLFxuICAgICcoYmx1ciknOiAnX29uQmx1cigpJyxcbiAgICAnbmdTa2lwSHlkcmF0aW9uJzogJycsXG4gIH0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICBtYXRMZWdhY3lTZWxlY3RBbmltYXRpb25zLnRyYW5zZm9ybVBhbmVsV3JhcCxcbiAgICBtYXRMZWdhY3lTZWxlY3RBbmltYXRpb25zLnRyYW5zZm9ybVBhbmVsLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogTWF0TGVnYWN5Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IE1hdExlZ2FjeVNlbGVjdH0sXG4gICAge3Byb3ZpZGU6IE1BVF9MRUdBQ1lfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBNYXRMZWdhY3lTZWxlY3R9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRMZWdhY3lTZWxlY3QgZXh0ZW5kcyBfTWF0U2VsZWN0QmFzZTxNYXRMZWdhY3lTZWxlY3RDaGFuZ2U+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqIFRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIG92ZXJsYXkgcGFuZWwsIGNhbGN1bGF0ZWQgdG8gY2VudGVyIHRoZSBzZWxlY3RlZCBvcHRpb24uICovXG4gIHByaXZhdGUgX3Njcm9sbFRvcCA9IDA7XG5cbiAgLyoqIFRoZSBsYXN0IG1lYXN1cmVkIHZhbHVlIGZvciB0aGUgdHJpZ2dlcidzIGNsaWVudCBib3VuZGluZyByZWN0LiAqL1xuICBwcml2YXRlIF90cmlnZ2VyUmVjdDogQ2xpZW50UmVjdDtcblxuICAvKiogVGhlIGNhY2hlZCBmb250LXNpemUgb2YgdGhlIHRyaWdnZXIgZWxlbWVudC4gKi9cbiAgX3RyaWdnZXJGb250U2l6ZSA9IDA7XG5cbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0IHBhbmVsJ3MgdHJhbnNmb3JtLW9yaWdpbiBwcm9wZXJ0eS4gKi9cbiAgX3RyYW5zZm9ybU9yaWdpbjogc3RyaW5nID0gJ3RvcCc7XG5cbiAgLyoqXG4gICAqIFRoZSB5LW9mZnNldCBvZiB0aGUgb3ZlcmxheSBwYW5lbCBpbiByZWxhdGlvbiB0byB0aGUgdHJpZ2dlcidzIHRvcCBzdGFydCBjb3JuZXIuXG4gICAqIFRoaXMgbXVzdCBiZSBhZGp1c3RlZCB0byBhbGlnbiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRleHQgb3ZlciB0aGUgdHJpZ2dlciB0ZXh0LlxuICAgKiB3aGVuIHRoZSBwYW5lbCBvcGVucy4gV2lsbCBjaGFuZ2UgYmFzZWQgb24gdGhlIHktcG9zaXRpb24gb2YgdGhlIHNlbGVjdGVkIG9wdGlvbi5cbiAgICovXG4gIF9vZmZzZXRZID0gMDtcblxuICBAQ29udGVudENoaWxkcmVuKE1hdExlZ2FjeU9wdGlvbiwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgb3B0aW9uczogUXVlcnlMaXN0PE1hdExlZ2FjeU9wdGlvbj47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNQVRfTEVHQUNZX09QVEdST1VQLCB7ZGVzY2VuZGFudHM6IHRydWV9KVxuICBvcHRpb25Hcm91cHM6IFF1ZXJ5TGlzdDxNYXRMZWdhY3lPcHRncm91cD47XG5cbiAgQENvbnRlbnRDaGlsZChNQVRfU0VMRUNUX1RSSUdHRVIpIGN1c3RvbVRyaWdnZXI6IE1hdExlZ2FjeVNlbGVjdFRyaWdnZXI7XG5cbiAgX3Bvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSA9IFtcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgIH0sXG4gIF07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0J3Mgb3ZlcmxheSBwYW5lbC5cbiAgICpcbiAgICogQXR0ZW1wdHMgdG8gY2VudGVyIHRoZSBzZWxlY3RlZCBvcHRpb24gaW4gdGhlIHBhbmVsLiBJZiB0aGUgb3B0aW9uIGlzXG4gICAqIHRvbyBoaWdoIG9yIHRvbyBsb3cgaW4gdGhlIHBhbmVsIHRvIGJlIHNjcm9sbGVkIHRvIHRoZSBjZW50ZXIsIGl0IGNsYW1wcyB0aGVcbiAgICogc2Nyb2xsIHBvc2l0aW9uIHRvIHRoZSBtaW4gb3IgbWF4IHNjcm9sbCBwb3NpdGlvbnMgcmVzcGVjdGl2ZWx5LlxuICAgKi9cbiAgX2NhbGN1bGF0ZU92ZXJsYXlTY3JvbGwoc2VsZWN0ZWRJbmRleDogbnVtYmVyLCBzY3JvbGxCdWZmZXI6IG51bWJlciwgbWF4U2Nyb2xsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSB0aGlzLl9nZXRJdGVtSGVpZ2h0KCk7XG4gICAgY29uc3Qgb3B0aW9uT2Zmc2V0RnJvbVNjcm9sbFRvcCA9IGl0ZW1IZWlnaHQgKiBzZWxlY3RlZEluZGV4O1xuICAgIGNvbnN0IGhhbGZPcHRpb25IZWlnaHQgPSBpdGVtSGVpZ2h0IC8gMjtcblxuICAgIC8vIFN0YXJ0cyBhdCB0aGUgb3B0aW9uT2Zmc2V0RnJvbVNjcm9sbFRvcCwgd2hpY2ggc2Nyb2xscyB0aGUgb3B0aW9uIHRvIHRoZSB0b3Agb2YgdGhlXG4gICAgLy8gc2Nyb2xsIGNvbnRhaW5lciwgdGhlbiBzdWJ0cmFjdHMgdGhlIHNjcm9sbCBidWZmZXIgdG8gc2Nyb2xsIHRoZSBvcHRpb24gZG93biB0b1xuICAgIC8vIHRoZSBjZW50ZXIgb2YgdGhlIG92ZXJsYXkgcGFuZWwuIEhhbGYgdGhlIG9wdGlvbiBoZWlnaHQgbXVzdCBiZSByZS1hZGRlZCB0byB0aGVcbiAgICAvLyBzY3JvbGxUb3Agc28gdGhlIG9wdGlvbiBpcyBjZW50ZXJlZCBiYXNlZCBvbiBpdHMgbWlkZGxlLCBub3QgaXRzIHRvcCBlZGdlLlxuICAgIGNvbnN0IG9wdGltYWxTY3JvbGxQb3NpdGlvbiA9IG9wdGlvbk9mZnNldEZyb21TY3JvbGxUb3AgLSBzY3JvbGxCdWZmZXIgKyBoYWxmT3B0aW9uSGVpZ2h0O1xuICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLCBvcHRpbWFsU2Nyb2xsUG9zaXRpb24pLCBtYXhTY3JvbGwpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLl92aWV3cG9ydFJ1bGVyXG4gICAgICAuY2hhbmdlKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyUmVjdCA9IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHN1cGVyLl9jYW5PcGVuKCkpIHtcbiAgICAgIHN1cGVyLm9wZW4oKTtcbiAgICAgIHRoaXMuX3RyaWdnZXJSZWN0ID0gdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tcHV0ZWQgZm9udC1zaXplIHdpbGwgYmUgYSBzdHJpbmcgcGl4ZWwgdmFsdWUgKGUuZy4gXCIxNnB4XCIpLlxuICAgICAgLy8gYHBhcnNlSW50YCBpZ25vcmVzIHRoZSB0cmFpbGluZyAncHgnIGFuZCBjb252ZXJ0cyB0aGlzIHRvIGEgbnVtYmVyLlxuICAgICAgdGhpcy5fdHJpZ2dlckZvbnRTaXplID0gcGFyc2VJbnQoXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUodGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQpLmZvbnRTaXplIHx8ICcwJyxcbiAgICAgICk7XG4gICAgICB0aGlzLl9jYWxjdWxhdGVPdmVybGF5UG9zaXRpb24oKTtcblxuICAgICAgLy8gU2V0IHRoZSBmb250IHNpemUgb24gdGhlIHBhbmVsIGVsZW1lbnQgb25jZSBpdCBleGlzdHMuXG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckZvbnRTaXplICYmXG4gICAgICAgICAgdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmICYmXG4gICAgICAgICAgdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX292ZXJsYXlEaXIub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9IGAke3RoaXMuX3RyaWdnZXJGb250U2l6ZX1weGA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTY3JvbGxzIHRoZSBhY3RpdmUgb3B0aW9uIGludG8gdmlldy4gKi9cbiAgcHJvdGVjdGVkIF9zY3JvbGxPcHRpb25JbnRvVmlldyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbGFiZWxDb3VudCA9IF9jb3VudEdyb3VwTGFiZWxzQmVmb3JlTGVnYWN5T3B0aW9uKGluZGV4LCB0aGlzLm9wdGlvbnMsIHRoaXMub3B0aW9uR3JvdXBzKTtcbiAgICBjb25zdCBpdGVtSGVpZ2h0ID0gdGhpcy5fZ2V0SXRlbUhlaWdodCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSAwICYmIGxhYmVsQ291bnQgPT09IDEpIHtcbiAgICAgIC8vIElmIHdlJ3ZlIGdvdCBvbmUgZ3JvdXAgbGFiZWwgYmVmb3JlIHRoZSBvcHRpb24gYW5kIHdlJ3JlIGF0IHRoZSB0b3Agb3B0aW9uLFxuICAgICAgLy8gc2Nyb2xsIHRoZSBsaXN0IHRvIHRoZSB0b3AuIFRoaXMgaXMgYmV0dGVyIFVYIHRoYW4gc2Nyb2xsaW5nIHRoZSBsaXN0IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBvcHRpb24sIGJlY2F1c2UgaXQgYWxsb3dzIHRoZSB1c2VyIHRvIHJlYWQgdGhlIHRvcCBncm91cCdzIGxhYmVsLlxuICAgICAgdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBfZ2V0TGVnYWN5T3B0aW9uU2Nyb2xsUG9zaXRpb24oXG4gICAgICAgIChpbmRleCArIGxhYmVsQ291bnQpICogaXRlbUhlaWdodCxcbiAgICAgICAgaXRlbUhlaWdodCxcbiAgICAgICAgdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgICAgU0VMRUNUX1BBTkVMX01BWF9IRUlHSFQsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfcG9zaXRpb25pbmdTZXR0bGVkKCkge1xuICAgIHRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCk7XG4gICAgdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuX3Njcm9sbFRvcDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfcGFuZWxEb25lQW5pbWF0aW5nKGlzT3BlbjogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5fc2Nyb2xsVG9wID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3ZlcmxheURpci5vZmZzZXRYID0gMDtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHN1cGVyLl9wYW5lbERvbmVBbmltYXRpbmcoaXNPcGVuKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZ2V0Q2hhbmdlRXZlbnQodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgTWF0TGVnYWN5U2VsZWN0Q2hhbmdlKHRoaXMsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZ2V0T3ZlcmxheU1pbldpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJSZWN0Py53aWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB4LW9mZnNldCBvZiB0aGUgb3ZlcmxheSBwYW5lbCBpbiByZWxhdGlvbiB0byB0aGUgdHJpZ2dlcidzIHRvcCBzdGFydCBjb3JuZXIuXG4gICAqIFRoaXMgbXVzdCBiZSBhZGp1c3RlZCB0byBhbGlnbiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRleHQgb3ZlciB0aGUgdHJpZ2dlciB0ZXh0IHdoZW5cbiAgICogdGhlIHBhbmVsIG9wZW5zLiBXaWxsIGNoYW5nZSBiYXNlZCBvbiBMVFIgb3IgUlRMIHRleHQgZGlyZWN0aW9uLiBOb3RlIHRoYXQgdGhlIG9mZnNldFxuICAgKiBjYW4ndCBiZSBjYWxjdWxhdGVkIHVudGlsIHRoZSBwYW5lbCBoYXMgYmVlbiBhdHRhY2hlZCwgYmVjYXVzZSB3ZSBuZWVkIHRvIGtub3cgdGhlXG4gICAqIGNvbnRlbnQgd2lkdGggaW4gb3JkZXIgdG8gY29uc3RyYWluIHRoZSBwYW5lbCB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICAgKi9cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlT3ZlcmxheU9mZnNldFgoKTogdm9pZCB7XG4gICAgY29uc3Qgb3ZlcmxheVJlY3QgPSB0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgdmlld3BvcnRTaXplID0gdGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtcbiAgICBjb25zdCBpc1J0bCA9IHRoaXMuX2lzUnRsKCk7XG4gICAgY29uc3QgcGFkZGluZ1dpZHRoID0gdGhpcy5tdWx0aXBsZVxuICAgICAgPyBTRUxFQ1RfTVVMVElQTEVfUEFORUxfUEFERElOR19YICsgU0VMRUNUX1BBTkVMX1BBRERJTkdfWFxuICAgICAgOiBTRUxFQ1RfUEFORUxfUEFERElOR19YICogMjtcbiAgICBsZXQgb2Zmc2V0WDogbnVtYmVyO1xuXG4gICAgLy8gQWRqdXN0IHRoZSBvZmZzZXQsIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9uIHBhZGRpbmcuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIG9mZnNldFggPSBTRUxFQ1RfTVVMVElQTEVfUEFORUxfUEFERElOR19YO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKSB7XG4gICAgICBvZmZzZXRYID0gU0VMRUNUX1BBTkVMX1BBRERJTkdfWDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHNlbGVjdGVkID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0gfHwgdGhpcy5vcHRpb25zLmZpcnN0O1xuICAgICAgb2Zmc2V0WCA9IHNlbGVjdGVkICYmIHNlbGVjdGVkLmdyb3VwID8gU0VMRUNUX1BBTkVMX0lOREVOVF9QQURESU5HX1ggOiBTRUxFQ1RfUEFORUxfUEFERElOR19YO1xuICAgIH1cblxuICAgIC8vIEludmVydCB0aGUgb2Zmc2V0IGluIExUUi5cbiAgICBpZiAoIWlzUnRsKSB7XG4gICAgICBvZmZzZXRYICo9IC0xO1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSBob3cgbXVjaCB0aGUgc2VsZWN0IG92ZXJmbG93cyBvbiBlYWNoIHNpZGUuXG4gICAgY29uc3QgbGVmdE92ZXJmbG93ID0gMCAtIChvdmVybGF5UmVjdC5sZWZ0ICsgb2Zmc2V0WCAtIChpc1J0bCA/IHBhZGRpbmdXaWR0aCA6IDApKTtcbiAgICBjb25zdCByaWdodE92ZXJmbG93ID1cbiAgICAgIG92ZXJsYXlSZWN0LnJpZ2h0ICsgb2Zmc2V0WCAtIHZpZXdwb3J0U2l6ZS53aWR0aCArIChpc1J0bCA/IDAgOiBwYWRkaW5nV2lkdGgpO1xuXG4gICAgLy8gSWYgdGhlIGVsZW1lbnQgb3ZlcmZsb3dzIG9uIGVpdGhlciBzaWRlLCByZWR1Y2UgdGhlIG9mZnNldCB0byBhbGxvdyBpdCB0byBmaXQuXG4gICAgaWYgKGxlZnRPdmVyZmxvdyA+IDApIHtcbiAgICAgIG9mZnNldFggKz0gbGVmdE92ZXJmbG93ICsgU0VMRUNUX1BBTkVMX1ZJRVdQT1JUX1BBRERJTkc7XG4gICAgfSBlbHNlIGlmIChyaWdodE92ZXJmbG93ID4gMCkge1xuICAgICAgb2Zmc2V0WCAtPSByaWdodE92ZXJmbG93ICsgU0VMRUNUX1BBTkVMX1ZJRVdQT1JUX1BBRERJTkc7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBvZmZzZXQgZGlyZWN0bHkgaW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIHRvIGdvIHRocm91Z2ggY2hhbmdlIGRldGVjdGlvbiBhbmRcbiAgICAvLyBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIFwiY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZFwiIGVycm9ycy4gUm91bmQgdGhlIHZhbHVlIHRvIGF2b2lkXG4gICAgLy8gYmx1cnJ5IGNvbnRlbnQgaW4gc29tZSBicm93c2Vycy5cbiAgICB0aGlzLl9vdmVybGF5RGlyLm9mZnNldFggPSBNYXRoLnJvdW5kKG9mZnNldFgpO1xuICAgIHRoaXMuX292ZXJsYXlEaXIub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHktb2Zmc2V0IG9mIHRoZSBzZWxlY3QncyBvdmVybGF5IHBhbmVsIGluIHJlbGF0aW9uIHRvIHRoZVxuICAgKiB0b3Agc3RhcnQgY29ybmVyIG9mIHRoZSB0cmlnZ2VyLiBJdCBoYXMgdG8gYmUgYWRqdXN0ZWQgaW4gb3JkZXIgZm9yIHRoZVxuICAgKiBzZWxlY3RlZCBvcHRpb24gdG8gYmUgYWxpZ25lZCBvdmVyIHRoZSB0cmlnZ2VyIHdoZW4gdGhlIHBhbmVsIG9wZW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlT3ZlcmxheU9mZnNldFkoXG4gICAgc2VsZWN0ZWRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbEJ1ZmZlcjogbnVtYmVyLFxuICAgIG1heFNjcm9sbDogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSB0aGlzLl9nZXRJdGVtSGVpZ2h0KCk7XG4gICAgY29uc3Qgb3B0aW9uSGVpZ2h0QWRqdXN0bWVudCA9IChpdGVtSGVpZ2h0IC0gdGhpcy5fdHJpZ2dlclJlY3QuaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgbWF4T3B0aW9uc0Rpc3BsYXllZCA9IE1hdGguZmxvb3IoU0VMRUNUX1BBTkVMX01BWF9IRUlHSFQgLyBpdGVtSGVpZ2h0KTtcbiAgICBsZXQgb3B0aW9uT2Zmc2V0RnJvbVBhbmVsVG9wOiBudW1iZXI7XG5cbiAgICAvLyBEaXNhYmxlIG9mZnNldCBpZiByZXF1ZXN0ZWQgYnkgdXNlciBieSByZXR1cm5pbmcgMCBhcyB2YWx1ZSB0byBvZmZzZXRcbiAgICBpZiAodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2Nyb2xsVG9wID09PSAwKSB7XG4gICAgICBvcHRpb25PZmZzZXRGcm9tUGFuZWxUb3AgPSBzZWxlY3RlZEluZGV4ICogaXRlbUhlaWdodDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3Njcm9sbFRvcCA9PT0gbWF4U2Nyb2xsKSB7XG4gICAgICBjb25zdCBmaXJzdERpc3BsYXllZEluZGV4ID0gdGhpcy5fZ2V0SXRlbUNvdW50KCkgLSBtYXhPcHRpb25zRGlzcGxheWVkO1xuICAgICAgY29uc3Qgc2VsZWN0ZWREaXNwbGF5SW5kZXggPSBzZWxlY3RlZEluZGV4IC0gZmlyc3REaXNwbGF5ZWRJbmRleDtcblxuICAgICAgLy8gVGhlIGZpcnN0IGl0ZW0gaXMgcGFydGlhbGx5IG91dCBvZiB0aGUgdmlld3BvcnQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB3aGF0XG4gICAgICAvLyBwb3J0aW9uIG9mIGl0IGlzIHNob3duIGluIHRoZSB2aWV3cG9ydCBhbmQgYWNjb3VudCBmb3IgaXQgaW4gb3VyIG9mZnNldC5cbiAgICAgIGxldCBwYXJ0aWFsSXRlbUhlaWdodCA9XG4gICAgICAgIGl0ZW1IZWlnaHQgLSAoKHRoaXMuX2dldEl0ZW1Db3VudCgpICogaXRlbUhlaWdodCAtIFNFTEVDVF9QQU5FTF9NQVhfSEVJR0hUKSAlIGl0ZW1IZWlnaHQpO1xuXG4gICAgICAvLyBCZWNhdXNlIHRoZSBwYW5lbCBoZWlnaHQgaXMgbG9uZ2VyIHRoYW4gdGhlIGhlaWdodCBvZiB0aGUgb3B0aW9ucyBhbG9uZSxcbiAgICAgIC8vIHRoZXJlIGlzIGFsd2F5cyBleHRyYSBwYWRkaW5nIGF0IHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSBwYW5lbC4gV2hlblxuICAgICAgLy8gc2Nyb2xsZWQgdG8gdGhlIHZlcnkgYm90dG9tLCB0aGlzIHBhZGRpbmcgaXMgYXQgdGhlIHRvcCBvZiB0aGUgcGFuZWwgYW5kXG4gICAgICAvLyBtdXN0IGJlIGFkZGVkIHRvIHRoZSBvZmZzZXQuXG4gICAgICBvcHRpb25PZmZzZXRGcm9tUGFuZWxUb3AgPSBzZWxlY3RlZERpc3BsYXlJbmRleCAqIGl0ZW1IZWlnaHQgKyBwYXJ0aWFsSXRlbUhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIG9wdGlvbiB3YXMgc2Nyb2xsZWQgdG8gdGhlIG1pZGRsZSBvZiB0aGUgcGFuZWwgdXNpbmcgYSBzY3JvbGwgYnVmZmVyLFxuICAgICAgLy8gaXRzIG9mZnNldCB3aWxsIGJlIHRoZSBzY3JvbGwgYnVmZmVyIG1pbnVzIHRoZSBoYWxmIGhlaWdodCB0aGF0IHdhcyBhZGRlZCB0b1xuICAgICAgLy8gY2VudGVyIGl0LlxuICAgICAgb3B0aW9uT2Zmc2V0RnJvbVBhbmVsVG9wID0gc2Nyb2xsQnVmZmVyIC0gaXRlbUhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgLy8gVGhlIGZpbmFsIG9mZnNldCBpcyB0aGUgb3B0aW9uJ3Mgb2Zmc2V0IGZyb20gdGhlIHRvcCwgYWRqdXN0ZWQgZm9yIHRoZSBoZWlnaHQgZGlmZmVyZW5jZSxcbiAgICAvLyBtdWx0aXBsaWVkIGJ5IC0xIHRvIGVuc3VyZSB0aGF0IHRoZSBvdmVybGF5IG1vdmVzIGluIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiB1cCB0aGUgcGFnZS5cbiAgICAvLyBUaGUgdmFsdWUgaXMgcm91bmRlZCB0byBwcmV2ZW50IHNvbWUgYnJvd3NlcnMgZnJvbSBibHVycmluZyB0aGUgY29udGVudC5cbiAgICByZXR1cm4gTWF0aC5yb3VuZChvcHRpb25PZmZzZXRGcm9tUGFuZWxUb3AgKiAtMSAtIG9wdGlvbkhlaWdodEFkanVzdG1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IHRoZSBhdHRlbXB0ZWQgb3ZlcmxheSBwb3NpdGlvbiB3aWxsIGZpdCB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICAgKiBJZiBpdCB3aWxsIG5vdCBmaXQsIHRyaWVzIHRvIGFkanVzdCB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFuZCB0aGUgYXNzb2NpYXRlZFxuICAgKiB5LW9mZnNldCBzbyB0aGUgcGFuZWwgY2FuIG9wZW4gZnVsbHkgb24tc2NyZWVuLiBJZiBpdCBzdGlsbCB3b24ndCBmaXQsXG4gICAqIHNldHMgdGhlIG9mZnNldCBiYWNrIHRvIDAgdG8gYWxsb3cgdGhlIGZhbGxiYWNrIHBvc2l0aW9uIHRvIHRha2Ugb3Zlci5cbiAgICovXG4gIHByaXZhdGUgX2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KG1heFNjcm9sbDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUhlaWdodCA9IHRoaXMuX2dldEl0ZW1IZWlnaHQoKTtcbiAgICBjb25zdCB2aWV3cG9ydFNpemUgPSB0aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO1xuXG4gICAgY29uc3QgdG9wU3BhY2VBdmFpbGFibGUgPSB0aGlzLl90cmlnZ2VyUmVjdC50b3AgLSBTRUxFQ1RfUEFORUxfVklFV1BPUlRfUEFERElORztcbiAgICBjb25zdCBib3R0b21TcGFjZUF2YWlsYWJsZSA9XG4gICAgICB2aWV3cG9ydFNpemUuaGVpZ2h0IC0gdGhpcy5fdHJpZ2dlclJlY3QuYm90dG9tIC0gU0VMRUNUX1BBTkVMX1ZJRVdQT1JUX1BBRERJTkc7XG5cbiAgICBjb25zdCBwYW5lbEhlaWdodFRvcCA9IE1hdGguYWJzKHRoaXMuX29mZnNldFkpO1xuICAgIGNvbnN0IHRvdGFsUGFuZWxIZWlnaHQgPSBNYXRoLm1pbih0aGlzLl9nZXRJdGVtQ291bnQoKSAqIGl0ZW1IZWlnaHQsIFNFTEVDVF9QQU5FTF9NQVhfSEVJR0hUKTtcbiAgICBjb25zdCBwYW5lbEhlaWdodEJvdHRvbSA9IHRvdGFsUGFuZWxIZWlnaHQgLSBwYW5lbEhlaWdodFRvcCAtIHRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodDtcblxuICAgIGlmIChwYW5lbEhlaWdodEJvdHRvbSA+IGJvdHRvbVNwYWNlQXZhaWxhYmxlKSB7XG4gICAgICB0aGlzLl9hZGp1c3RQYW5lbFVwKHBhbmVsSGVpZ2h0Qm90dG9tLCBib3R0b21TcGFjZUF2YWlsYWJsZSk7XG4gICAgfSBlbHNlIGlmIChwYW5lbEhlaWdodFRvcCA+IHRvcFNwYWNlQXZhaWxhYmxlKSB7XG4gICAgICB0aGlzLl9hZGp1c3RQYW5lbERvd24ocGFuZWxIZWlnaHRUb3AsIHRvcFNwYWNlQXZhaWxhYmxlLCBtYXhTY3JvbGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90cmFuc2Zvcm1PcmlnaW4gPSB0aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFkanVzdHMgdGhlIG92ZXJsYXkgcGFuZWwgdXAgdG8gZml0IGluIHRoZSB2aWV3cG9ydC4gKi9cbiAgcHJpdmF0ZSBfYWRqdXN0UGFuZWxVcChwYW5lbEhlaWdodEJvdHRvbTogbnVtYmVyLCBib3R0b21TcGFjZUF2YWlsYWJsZTogbnVtYmVyKSB7XG4gICAgLy8gQnJvd3NlcnMgaWdub3JlIGZyYWN0aW9uYWwgc2Nyb2xsIG9mZnNldHMsIHNvIHdlIG5lZWQgdG8gcm91bmQuXG4gICAgY29uc3QgZGlzdGFuY2VCZWxvd1ZpZXdwb3J0ID0gTWF0aC5yb3VuZChwYW5lbEhlaWdodEJvdHRvbSAtIGJvdHRvbVNwYWNlQXZhaWxhYmxlKTtcblxuICAgIC8vIFNjcm9sbHMgdGhlIHBhbmVsIHVwIGJ5IHRoZSBkaXN0YW5jZSBpdCB3YXMgZXh0ZW5kaW5nIHBhc3QgdGhlIGJvdW5kYXJ5LCB0aGVuXG4gICAgLy8gYWRqdXN0cyB0aGUgb2Zmc2V0IGJ5IHRoYXQgYW1vdW50IHRvIG1vdmUgdGhlIHBhbmVsIHVwIGludG8gdGhlIHZpZXdwb3J0LlxuICAgIHRoaXMuX3Njcm9sbFRvcCAtPSBkaXN0YW5jZUJlbG93Vmlld3BvcnQ7XG4gICAgdGhpcy5fb2Zmc2V0WSAtPSBkaXN0YW5jZUJlbG93Vmlld3BvcnQ7XG4gICAgdGhpcy5fdHJhbnNmb3JtT3JpZ2luID0gdGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpO1xuXG4gICAgLy8gSWYgdGhlIHBhbmVsIGlzIHNjcm9sbGVkIHRvIHRoZSB2ZXJ5IHRvcCwgaXQgd29uJ3QgYmUgYWJsZSB0byBmaXQgdGhlIHBhbmVsXG4gICAgLy8gYnkgc2Nyb2xsaW5nLCBzbyBzZXQgdGhlIG9mZnNldCB0byAwIHRvIGFsbG93IHRoZSBmYWxsYmFjayBwb3NpdGlvbiB0byB0YWtlXG4gICAgLy8gZWZmZWN0LlxuICAgIGlmICh0aGlzLl9zY3JvbGxUb3AgPD0gMCkge1xuICAgICAgdGhpcy5fc2Nyb2xsVG9wID0gMDtcbiAgICAgIHRoaXMuX29mZnNldFkgPSAwO1xuICAgICAgdGhpcy5fdHJhbnNmb3JtT3JpZ2luID0gYDUwJSBib3R0b20gMHB4YDtcbiAgICB9XG4gIH1cblxuICAvKiogQWRqdXN0cyB0aGUgb3ZlcmxheSBwYW5lbCBkb3duIHRvIGZpdCBpbiB0aGUgdmlld3BvcnQuICovXG4gIHByaXZhdGUgX2FkanVzdFBhbmVsRG93bihwYW5lbEhlaWdodFRvcDogbnVtYmVyLCB0b3BTcGFjZUF2YWlsYWJsZTogbnVtYmVyLCBtYXhTY3JvbGw6IG51bWJlcikge1xuICAgIC8vIEJyb3dzZXJzIGlnbm9yZSBmcmFjdGlvbmFsIHNjcm9sbCBvZmZzZXRzLCBzbyB3ZSBuZWVkIHRvIHJvdW5kLlxuICAgIGNvbnN0IGRpc3RhbmNlQWJvdmVWaWV3cG9ydCA9IE1hdGgucm91bmQocGFuZWxIZWlnaHRUb3AgLSB0b3BTcGFjZUF2YWlsYWJsZSk7XG5cbiAgICAvLyBTY3JvbGxzIHRoZSBwYW5lbCBkb3duIGJ5IHRoZSBkaXN0YW5jZSBpdCB3YXMgZXh0ZW5kaW5nIHBhc3QgdGhlIGJvdW5kYXJ5LCB0aGVuXG4gICAgLy8gYWRqdXN0cyB0aGUgb2Zmc2V0IGJ5IHRoYXQgYW1vdW50IHRvIG1vdmUgdGhlIHBhbmVsIGRvd24gaW50byB0aGUgdmlld3BvcnQuXG4gICAgdGhpcy5fc2Nyb2xsVG9wICs9IGRpc3RhbmNlQWJvdmVWaWV3cG9ydDtcbiAgICB0aGlzLl9vZmZzZXRZICs9IGRpc3RhbmNlQWJvdmVWaWV3cG9ydDtcbiAgICB0aGlzLl90cmFuc2Zvcm1PcmlnaW4gPSB0aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCk7XG5cbiAgICAvLyBJZiB0aGUgcGFuZWwgaXMgc2Nyb2xsZWQgdG8gdGhlIHZlcnkgYm90dG9tLCBpdCB3b24ndCBiZSBhYmxlIHRvIGZpdCB0aGVcbiAgICAvLyBwYW5lbCBieSBzY3JvbGxpbmcsIHNvIHNldCB0aGUgb2Zmc2V0IHRvIDAgdG8gYWxsb3cgdGhlIGZhbGxiYWNrIHBvc2l0aW9uXG4gICAgLy8gdG8gdGFrZSBlZmZlY3QuXG4gICAgaWYgKHRoaXMuX3Njcm9sbFRvcCA+PSBtYXhTY3JvbGwpIHtcbiAgICAgIHRoaXMuX3Njcm9sbFRvcCA9IG1heFNjcm9sbDtcbiAgICAgIHRoaXMuX29mZnNldFkgPSAwO1xuICAgICAgdGhpcy5fdHJhbnNmb3JtT3JpZ2luID0gYDUwJSB0b3AgMHB4YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FsY3VsYXRlcyB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFuZCB4LSBhbmQgeS1vZmZzZXRzIG9mIHRoZSBvdmVybGF5IHBhbmVsLiAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVPdmVybGF5UG9zaXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUhlaWdodCA9IHRoaXMuX2dldEl0ZW1IZWlnaHQoKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1Db3VudCgpO1xuICAgIGNvbnN0IHBhbmVsSGVpZ2h0ID0gTWF0aC5taW4oaXRlbXMgKiBpdGVtSGVpZ2h0LCBTRUxFQ1RfUEFORUxfTUFYX0hFSUdIVCk7XG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVySGVpZ2h0ID0gaXRlbXMgKiBpdGVtSGVpZ2h0O1xuXG4gICAgLy8gVGhlIGZhcnRoZXN0IHRoZSBwYW5lbCBjYW4gYmUgc2Nyb2xsZWQgYmVmb3JlIGl0IGhpdHMgdGhlIGJvdHRvbVxuICAgIGNvbnN0IG1heFNjcm9sbCA9IHNjcm9sbENvbnRhaW5lckhlaWdodCAtIHBhbmVsSGVpZ2h0O1xuXG4gICAgLy8gSWYgbm8gdmFsdWUgaXMgc2VsZWN0ZWQgd2Ugb3BlbiB0aGUgcG9wdXAgdG8gdGhlIGZpcnN0IGl0ZW0uXG4gICAgbGV0IHNlbGVjdGVkT3B0aW9uT2Zmc2V0OiBudW1iZXI7XG5cbiAgICBpZiAodGhpcy5lbXB0eSkge1xuICAgICAgc2VsZWN0ZWRPcHRpb25PZmZzZXQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZE9wdGlvbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLm9wdGlvbnMudG9BcnJheSgpLmluZGV4T2YodGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZE9wdGlvbk9mZnNldCArPSBfY291bnRHcm91cExhYmVsc0JlZm9yZUxlZ2FjeU9wdGlvbihcbiAgICAgIHNlbGVjdGVkT3B0aW9uT2Zmc2V0LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25Hcm91cHMsXG4gICAgKTtcblxuICAgIC8vIFdlIG11c3QgbWFpbnRhaW4gYSBzY3JvbGwgYnVmZmVyIHNvIHRoZSBzZWxlY3RlZCBvcHRpb24gd2lsbCBiZSBzY3JvbGxlZCB0byB0aGVcbiAgICAvLyBjZW50ZXIgb2YgdGhlIG92ZXJsYXkgcGFuZWwgcmF0aGVyIHRoYW4gdGhlIHRvcC5cbiAgICBjb25zdCBzY3JvbGxCdWZmZXIgPSBwYW5lbEhlaWdodCAvIDI7XG4gICAgdGhpcy5fc2Nyb2xsVG9wID0gdGhpcy5fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbChzZWxlY3RlZE9wdGlvbk9mZnNldCwgc2Nyb2xsQnVmZmVyLCBtYXhTY3JvbGwpO1xuICAgIHRoaXMuX29mZnNldFkgPSB0aGlzLl9jYWxjdWxhdGVPdmVybGF5T2Zmc2V0WShzZWxlY3RlZE9wdGlvbk9mZnNldCwgc2Nyb2xsQnVmZmVyLCBtYXhTY3JvbGwpO1xuXG4gICAgdGhpcy5fY2hlY2tPdmVybGF5V2l0aGluVmlld3BvcnQobWF4U2Nyb2xsKTtcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSB0cmFuc2Zvcm0gb3JpZ2luIHBvaW50IGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBvcHRpb24uICovXG4gIHByaXZhdGUgX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBpdGVtSGVpZ2h0ID0gdGhpcy5fZ2V0SXRlbUhlaWdodCgpO1xuICAgIGNvbnN0IG9wdGlvbkhlaWdodEFkanVzdG1lbnQgPSAoaXRlbUhlaWdodCAtIHRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkgLyAyO1xuICAgIGNvbnN0IG9yaWdpblkgPSBNYXRoLmFicyh0aGlzLl9vZmZzZXRZKSAtIG9wdGlvbkhlaWdodEFkanVzdG1lbnQgKyBpdGVtSGVpZ2h0IC8gMjtcbiAgICByZXR1cm4gYDUwJSAke29yaWdpbll9cHggMHB4YDtcbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHNlbGVjdCdzIG9wdGlvbnMuICovXG4gIHByaXZhdGUgX2dldEl0ZW1IZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlckZvbnRTaXplICogU0VMRUNUX0lURU1fSEVJR0hUX0VNO1xuICB9XG5cbiAgLyoqIENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBpdGVtcyBpbiB0aGUgc2VsZWN0LiBUaGlzIGluY2x1ZGVzIG9wdGlvbnMgYW5kIGdyb3VwIGxhYmVscy4gKi9cbiAgcHJpdmF0ZSBfZ2V0SXRlbUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGggKyB0aGlzLm9wdGlvbkdyb3Vwcy5sZW5ndGg7XG4gIH1cbn1cbiIsIjwhLS1cbiBOb3RlIHRoYXQgdGhlIHNlbGVjdCB0cmlnZ2VyIGVsZW1lbnQgc3BlY2lmaWVzIGBhcmlhLW93bnNgIHBvaW50aW5nIHRvIHRoZSBsaXN0Ym94IG92ZXJsYXkuXG4gV2hpbGUgYXJpYS1vd25zIGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEFSSUEgMS4yIGByb2xlPVwiY29tYm9ib3hcImAgaW50ZXJhY3Rpb24gcGF0dGVybixcbiBpdCBmaXhlcyBhbiBpc3N1ZSB3aXRoIFZvaWNlT3ZlciB3aGVuIHRoZSBzZWxlY3QgYXBwZWFycyBpbnNpZGUgb2YgYW4gYGFyaWEtbW9kZWw9XCJ0cnVlXCJgXG4gZWxlbWVudCAoZS5nLiBhIGRpYWxvZykuIFdpdGhvdXQgdGhpcyBgYXJpYS1vd25zYCwgdGhlIGBhcmlhLW1vZGFsYCBvbiBhIGRpYWxvZyBwcmV2ZW50c1xuIFZvaWNlT3ZlciBmcm9tIFwic2VlaW5nXCIgdGhlIHNlbGVjdCdzIGxpc3Rib3ggb3ZlcmxheSBmb3IgYXJpYS1hY3RpdmVkZXNjZW5kYW50LlxuIFVzaW5nIGBhcmlhLW93bnNgIHJlLXBhcmVudHMgdGhlIHNlbGVjdCBvdmVybGF5IHNvIHRoYXQgaXQgd29ya3MgYWdhaW4uXG4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzIwNjk0XG4tLT5cbjxkaXYgY2RrLW92ZXJsYXktb3JpZ2luXG4gICAgIFthdHRyLmFyaWEtb3duc109XCJwYW5lbE9wZW4gPyBpZCArICctcGFuZWwnIDogbnVsbFwiXG4gICAgIGNsYXNzPVwibWF0LXNlbGVjdC10cmlnZ2VyXCJcbiAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAgI29yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgICAjdHJpZ2dlcj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1zZWxlY3QtdmFsdWVcIiBbbmdTd2l0Y2hdPVwiZW1wdHlcIiBbYXR0ci5pZF09XCJfdmFsdWVJZFwiPlxuICAgIDxzcGFuIGNsYXNzPVwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lXCIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj57e3BsYWNlaG9sZGVyfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJtYXQtc2VsZWN0LXZhbHVlLXRleHRcIiAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIiBbbmdTd2l0Y2hdPVwiISFjdXN0b21UcmlnZ2VyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdC1zZWxlY3QtbWluLWxpbmVcIiAqbmdTd2l0Y2hEZWZhdWx0Pnt7dHJpZ2dlclZhbHVlfX08L3NwYW4+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtc2VsZWN0LXRyaWdnZXJcIiAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiPjwvbmctY29udGVudD5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtYXQtc2VsZWN0LWFycm93LXdyYXBwZXJcIj48ZGl2IGNsYXNzPVwibWF0LXNlbGVjdC1hcnJvd1wiPjwvZGl2PjwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICBjZGstY29ubmVjdGVkLW92ZXJsYXlcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvblxuICBjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3M9XCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzc109XCJfb3ZlcmxheVBhbmVsQ2xhc3NcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5XT1cIl9zY3JvbGxTdHJhdGVneVwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm9yaWdpblwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJwYW5lbE9wZW5cIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJfcG9zaXRpb25zXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aF09XCJfZ2V0T3ZlcmxheU1pbldpZHRoKClcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFldPVwiX29mZnNldFlcIlxuICAoYmFja2Ryb3BDbGljayk9XCJjbG9zZSgpXCJcbiAgKGF0dGFjaCk9XCJfb25BdHRhY2hlZCgpXCJcbiAgKGRldGFjaCk9XCJjbG9zZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJtYXQtc2VsZWN0LXBhbmVsLXdyYXBcIiBbQHRyYW5zZm9ybVBhbmVsV3JhcF0+XG4gICAgPGRpdlxuICAgICAgI3BhbmVsXG4gICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIGNsYXNzPVwibWF0LXNlbGVjdC1wYW5lbCB7eyBfZ2V0UGFuZWxUaGVtZSgpIH19XCJcbiAgICAgIFthdHRyLmlkXT1cImlkICsgJy1wYW5lbCdcIlxuICAgICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwibXVsdGlwbGVcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoKVwiXG4gICAgICBbbmdDbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgIFtAdHJhbnNmb3JtUGFuZWxdPVwibXVsdGlwbGUgPyAnc2hvd2luZy1tdWx0aXBsZScgOiAnc2hvd2luZydcIlxuICAgICAgKEB0cmFuc2Zvcm1QYW5lbC5kb25lKT1cIl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ubmV4dCgkZXZlbnQudG9TdGF0ZSlcIlxuICAgICAgW3N0eWxlLnRyYW5zZm9ybU9yaWdpbl09XCJfdHJhbnNmb3JtT3JpZ2luXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemUucHhdPVwiX3RyaWdnZXJGb250U2l6ZVwiXG4gICAgICAoa2V5ZG93bik9XCJfaGFuZGxlS2V5ZG93bigkZXZlbnQpXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,9 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- export * from './public-api';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvbGVnYWN5LXNlbGVjdC90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,9 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- export { MatLegacySelectHarness } from './select-harness';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9sZWdhY3ktc2VsZWN0L3Rlc3RpbmcvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge01hdExlZ2FjeVNlbGVjdEhhcm5lc3N9IGZyb20gJy4vc2VsZWN0LWhhcm5lc3MnO1xuZXhwb3J0IHtMZWdhY3lTZWxlY3RIYXJuZXNzRmlsdGVyc30gZnJvbSAnLi9zZWxlY3QtaGFybmVzcy1maWx0ZXJzJztcbiJdfQ==
@@ -1,9 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWhhcm5lc3MtZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9sZWdhY3ktc2VsZWN0L3Rlc3Rpbmcvc2VsZWN0LWhhcm5lc3MtZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtCYXNlSGFybmVzc0ZpbHRlcnN9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcblxuLyoqXG4gKiBBIHNldCBvZiBjcml0ZXJpYSB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBhIGxpc3Qgb2YgYE1hdFNlbGVjdEhhcm5lc3NgIGluc3RhbmNlcy5cbiAqIEBkZXByZWNhdGVkIFVzZSBgU2VsZWN0SGFybmVzc0ZpbHRlcnNgIGZyb20gYEBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdC90ZXN0aW5nYCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL21kYy1taWdyYXRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IG1pZ3JhdGluZy5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTcuMC4wXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5U2VsZWN0SGFybmVzc0ZpbHRlcnMgZXh0ZW5kcyBCYXNlSGFybmVzc0ZpbHRlcnMge1xuICAvKiogT25seSBmaW5kIGluc3RhbmNlcyB3aGljaCBtYXRjaCB0aGUgZ2l2ZW4gZGlzYWJsZWQgc3RhdGUuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cbiJdfQ==