@angular/material 19.0.0-next.1 → 19.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/_index.scss +3 -4
  2. package/button/_button-base.scss +2 -2
  3. package/button/index.d.ts +2 -10
  4. package/checkbox/index.d.ts +0 -7
  5. package/chips/index.d.ts +1 -10
  6. package/core/_core.scss +1 -7
  7. package/core/focus-indicators/_private.scss +20 -81
  8. package/core/index.d.ts +8 -10
  9. package/core/style/_elevation.scss +1 -1
  10. package/core/theming/_palettes.scss +132 -45
  11. package/core/tokens/_m3-system.scss +93 -20
  12. package/core/tokens/m3/mat/_sidenav.scss +0 -1
  13. package/fesm2022/button.mjs +16 -27
  14. package/fesm2022/button.mjs.map +1 -1
  15. package/fesm2022/checkbox.mjs +2 -5
  16. package/fesm2022/checkbox.mjs.map +1 -1
  17. package/fesm2022/chips.mjs +8 -19
  18. package/fesm2022/chips.mjs.map +1 -1
  19. package/fesm2022/core.mjs +62 -38
  20. package/fesm2022/core.mjs.map +1 -1
  21. package/fesm2022/form-field.mjs +2 -2
  22. package/fesm2022/form-field.mjs.map +1 -1
  23. package/fesm2022/list.mjs +14 -14
  24. package/fesm2022/list.mjs.map +1 -1
  25. package/fesm2022/menu.mjs +2 -2
  26. package/fesm2022/menu.mjs.map +1 -1
  27. package/fesm2022/radio.mjs +2 -2
  28. package/fesm2022/radio.mjs.map +1 -1
  29. package/fesm2022/sidenav.mjs +4 -4
  30. package/fesm2022/sidenav.mjs.map +1 -1
  31. package/fesm2022/slide-toggle.mjs +2 -2
  32. package/fesm2022/slide-toggle.mjs.map +1 -1
  33. package/fesm2022/slider.mjs +4 -4
  34. package/fesm2022/slider.mjs.map +1 -1
  35. package/fesm2022/table.mjs +2 -2
  36. package/fesm2022/table.mjs.map +1 -1
  37. package/fesm2022/tabs.mjs +6 -6
  38. package/fesm2022/tabs.mjs.map +1 -1
  39. package/fesm2022/tooltip.mjs +16 -4
  40. package/fesm2022/tooltip.mjs.map +1 -1
  41. package/package.json +2 -146
  42. package/prebuilt-themes/azure-blue.css +1 -1
  43. package/prebuilt-themes/cyan-orange.css +1 -1
  44. package/prebuilt-themes/deeppurple-amber.css +1 -1
  45. package/prebuilt-themes/indigo-pink.css +1 -1
  46. package/prebuilt-themes/magenta-violet.css +1 -1
  47. package/prebuilt-themes/pink-bluegrey.css +1 -1
  48. package/prebuilt-themes/purple-green.css +1 -1
  49. package/prebuilt-themes/rose-red.css +1 -1
  50. package/schematics/ng-add/index.js +1 -1
  51. package/schematics/ng-add/index.mjs +1 -1
  52. package/schematics/ng-generate/m3-theme/index_bundled.js +2 -2
  53. package/schematics/ng-update/index_bundled.js +27 -27
  54. package/tabs/_tabs-common.scss +1 -1
  55. package/core/focus-indicators/_focus-indicators-theme.scss +0 -11
  56. package/core/focus-indicators/_focus-indicators.scss +0 -6
  57. package/esm2022/autocomplete/animations.mjs +0 -24
  58. package/esm2022/autocomplete/autocomplete-origin.mjs +0 -31
  59. package/esm2022/autocomplete/autocomplete-trigger.mjs +0 -902
  60. package/esm2022/autocomplete/autocomplete.mjs +0 -238
  61. package/esm2022/autocomplete/autocomplete_public_index.mjs +0 -5
  62. package/esm2022/autocomplete/index.mjs +0 -9
  63. package/esm2022/autocomplete/module.mjs +0 -61
  64. package/esm2022/autocomplete/public-api.mjs +0 -14
  65. package/esm2022/autocomplete/testing/autocomplete-harness-filters.mjs +0 -9
  66. package/esm2022/autocomplete/testing/autocomplete-harness.mjs +0 -105
  67. package/esm2022/autocomplete/testing/index.mjs +0 -9
  68. package/esm2022/autocomplete/testing/public-api.mjs +0 -10
  69. package/esm2022/badge/badge-module.mjs +0 -27
  70. package/esm2022/badge/badge.mjs +0 -288
  71. package/esm2022/badge/badge_public_index.mjs +0 -5
  72. package/esm2022/badge/index.mjs +0 -9
  73. package/esm2022/badge/public-api.mjs +0 -10
  74. package/esm2022/badge/testing/badge-harness-filters.mjs +0 -9
  75. package/esm2022/badge/testing/badge-harness.mjs +0 -71
  76. package/esm2022/badge/testing/index.mjs +0 -9
  77. package/esm2022/badge/testing/public-api.mjs +0 -10
  78. package/esm2022/bottom-sheet/bottom-sheet-animations.mjs +0 -26
  79. package/esm2022/bottom-sheet/bottom-sheet-config.mjs +0 -48
  80. package/esm2022/bottom-sheet/bottom-sheet-container.mjs +0 -85
  81. package/esm2022/bottom-sheet/bottom-sheet-module.mjs +0 -28
  82. package/esm2022/bottom-sheet/bottom-sheet-ref.mjs +0 -104
  83. package/esm2022/bottom-sheet/bottom-sheet.mjs +0 -115
  84. package/esm2022/bottom-sheet/bottom-sheet_public_index.mjs +0 -5
  85. package/esm2022/bottom-sheet/index.mjs +0 -9
  86. package/esm2022/bottom-sheet/public-api.mjs +0 -14
  87. package/esm2022/bottom-sheet/testing/bottom-sheet-harness-filters.mjs +0 -9
  88. package/esm2022/bottom-sheet/testing/bottom-sheet-harness.mjs +0 -35
  89. package/esm2022/bottom-sheet/testing/index.mjs +0 -9
  90. package/esm2022/bottom-sheet/testing/public-api.mjs +0 -10
  91. package/esm2022/button/button-base.mjs +0 -230
  92. package/esm2022/button/button.mjs +0 -67
  93. package/esm2022/button/button_public_index.mjs +0 -5
  94. package/esm2022/button/fab.mjs +0 -166
  95. package/esm2022/button/icon-button.mjs +0 -56
  96. package/esm2022/button/index.mjs +0 -9
  97. package/esm2022/button/module.mjs +0 -65
  98. package/esm2022/button/public-api.mjs +0 -13
  99. package/esm2022/button/testing/button-harness-filters.mjs +0 -9
  100. package/esm2022/button/testing/button-harness.mjs +0 -80
  101. package/esm2022/button/testing/index.mjs +0 -9
  102. package/esm2022/button/testing/public-api.mjs +0 -10
  103. package/esm2022/button-toggle/button-toggle-module.mjs +0 -24
  104. package/esm2022/button-toggle/button-toggle.mjs +0 -651
  105. package/esm2022/button-toggle/button-toggle_public_index.mjs +0 -5
  106. package/esm2022/button-toggle/index.mjs +0 -9
  107. package/esm2022/button-toggle/public-api.mjs +0 -10
  108. package/esm2022/button-toggle/testing/button-toggle-group-harness-filters.mjs +0 -9
  109. package/esm2022/button-toggle/testing/button-toggle-group-harness.mjs +0 -47
  110. package/esm2022/button-toggle/testing/button-toggle-harness-filters.mjs +0 -9
  111. package/esm2022/button-toggle/testing/button-toggle-harness.mjs +0 -105
  112. package/esm2022/button-toggle/testing/index.mjs +0 -9
  113. package/esm2022/button-toggle/testing/public-api.mjs +0 -12
  114. package/esm2022/card/card.mjs +0 -273
  115. package/esm2022/card/card_public_index.mjs +0 -5
  116. package/esm2022/card/index.mjs +0 -9
  117. package/esm2022/card/module.mjs +0 -67
  118. package/esm2022/card/public-api.mjs +0 -10
  119. package/esm2022/card/testing/card-harness-filters.mjs +0 -9
  120. package/esm2022/card/testing/card-harness.mjs +0 -50
  121. package/esm2022/card/testing/index.mjs +0 -9
  122. package/esm2022/card/testing/public-api.mjs +0 -10
  123. package/esm2022/checkbox/checkbox-config.mjs +0 -22
  124. package/esm2022/checkbox/checkbox-required-validator.mjs +0 -41
  125. package/esm2022/checkbox/checkbox.mjs +0 -443
  126. package/esm2022/checkbox/checkbox_public_index.mjs +0 -5
  127. package/esm2022/checkbox/index.mjs +0 -9
  128. package/esm2022/checkbox/module.mjs +0 -41
  129. package/esm2022/checkbox/public-api.mjs +0 -12
  130. package/esm2022/checkbox/testing/checkbox-harness-filters.mjs +0 -9
  131. package/esm2022/checkbox/testing/checkbox-harness.mjs +0 -138
  132. package/esm2022/checkbox/testing/index.mjs +0 -9
  133. package/esm2022/checkbox/testing/public-api.mjs +0 -9
  134. package/esm2022/chips/chip-action.mjs +0 -113
  135. package/esm2022/chips/chip-edit-input.mjs +0 -61
  136. package/esm2022/chips/chip-grid.mjs +0 -420
  137. package/esm2022/chips/chip-icons.mjs +0 -107
  138. package/esm2022/chips/chip-input.mjs +0 -192
  139. package/esm2022/chips/chip-listbox.mjs +0 -369
  140. package/esm2022/chips/chip-option.mjs +0 -190
  141. package/esm2022/chips/chip-row.mjs +0 -173
  142. package/esm2022/chips/chip-set.mjs +0 -283
  143. package/esm2022/chips/chip-text-control.mjs +0 -9
  144. package/esm2022/chips/chip.mjs +0 -322
  145. package/esm2022/chips/chips_public_index.mjs +0 -5
  146. package/esm2022/chips/index.mjs +0 -9
  147. package/esm2022/chips/module.mjs +0 -85
  148. package/esm2022/chips/public-api.mjs +0 -20
  149. package/esm2022/chips/testing/chip-avatar-harness.mjs +0 -22
  150. package/esm2022/chips/testing/chip-edit-input-harness.mjs +0 -33
  151. package/esm2022/chips/testing/chip-grid-harness.mjs +0 -45
  152. package/esm2022/chips/testing/chip-harness-filters.mjs +0 -9
  153. package/esm2022/chips/testing/chip-harness.mjs +0 -62
  154. package/esm2022/chips/testing/chip-input-harness.mjs +0 -85
  155. package/esm2022/chips/testing/chip-listbox-harness.mjs +0 -61
  156. package/esm2022/chips/testing/chip-option-harness.mjs +0 -45
  157. package/esm2022/chips/testing/chip-remove-harness.mjs +0 -26
  158. package/esm2022/chips/testing/chip-row-harness.mjs +0 -40
  159. package/esm2022/chips/testing/chip-set-harness.mjs +0 -26
  160. package/esm2022/chips/testing/index.mjs +0 -9
  161. package/esm2022/chips/testing/public-api.mjs +0 -19
  162. package/esm2022/chips/tokens.mjs +0 -39
  163. package/esm2022/core/animation/animation.mjs +0 -21
  164. package/esm2022/core/common-behaviors/color.mjs +0 -33
  165. package/esm2022/core/common-behaviors/common-module.mjs +0 -127
  166. package/esm2022/core/common-behaviors/constructor.mjs +0 -9
  167. package/esm2022/core/common-behaviors/disable-ripple.mjs +0 -24
  168. package/esm2022/core/common-behaviors/disabled.mjs +0 -23
  169. package/esm2022/core/common-behaviors/error-state.mjs +0 -66
  170. package/esm2022/core/common-behaviors/index.mjs +0 -15
  171. package/esm2022/core/common-behaviors/initialized.mjs +0 -62
  172. package/esm2022/core/common-behaviors/tabindex.mjs +0 -25
  173. package/esm2022/core/core_public_index.mjs +0 -5
  174. package/esm2022/core/datetime/date-adapter.mjs +0 -109
  175. package/esm2022/core/datetime/date-formats.mjs +0 -10
  176. package/esm2022/core/datetime/index.mjs +0 -46
  177. package/esm2022/core/datetime/native-date-adapter.mjs +0 -221
  178. package/esm2022/core/datetime/native-date-formats.mjs +0 -19
  179. package/esm2022/core/error/error-options.mjs +0 -33
  180. package/esm2022/core/index.mjs +0 -9
  181. package/esm2022/core/internal-form-field/internal-form-field.mjs +0 -29
  182. package/esm2022/core/line/line.mjs +0 -64
  183. package/esm2022/core/option/index.mjs +0 -30
  184. package/esm2022/core/option/optgroup.mjs +0 -71
  185. package/esm2022/core/option/option-parent.mjs +0 -13
  186. package/esm2022/core/option/option.mjs +0 -283
  187. package/esm2022/core/private/index.mjs +0 -9
  188. package/esm2022/core/private/ripple-loader.mjs +0 -160
  189. package/esm2022/core/public-api.mjs +0 -19
  190. package/esm2022/core/ripple/index.mjs +0 -27
  191. package/esm2022/core/ripple/ripple-event-manager.mjs +0 -69
  192. package/esm2022/core/ripple/ripple-ref.mjs +0 -39
  193. package/esm2022/core/ripple/ripple-renderer.mjs +0 -354
  194. package/esm2022/core/ripple/ripple.mjs +0 -156
  195. package/esm2022/core/selection/index.mjs +0 -10
  196. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox-module.mjs +0 -24
  197. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +0 -62
  198. package/esm2022/core/testing/index.mjs +0 -9
  199. package/esm2022/core/testing/optgroup-harness-filters.mjs +0 -9
  200. package/esm2022/core/testing/optgroup-harness.mjs +0 -43
  201. package/esm2022/core/testing/option-harness-filters.mjs +0 -9
  202. package/esm2022/core/testing/option-harness.mjs +0 -53
  203. package/esm2022/core/testing/public-api.mjs +0 -12
  204. package/esm2022/core/version.mjs +0 -11
  205. package/esm2022/datepicker/aria-accessible-name.mjs +0 -159
  206. package/esm2022/datepicker/calendar-body.mjs +0 -509
  207. package/esm2022/datepicker/calendar.mjs +0 -426
  208. package/esm2022/datepicker/date-range-input-parts.mjs +0 -372
  209. package/esm2022/datepicker/date-range-input.mjs +0 -369
  210. package/esm2022/datepicker/date-range-picker.mjs +0 -51
  211. package/esm2022/datepicker/date-range-selection-strategy.mjs +0 -97
  212. package/esm2022/datepicker/date-selection-model.mjs +0 -188
  213. package/esm2022/datepicker/datepicker-actions.mjs +0 -91
  214. package/esm2022/datepicker/datepicker-animations.mjs +0 -35
  215. package/esm2022/datepicker/datepicker-base.mjs +0 -609
  216. package/esm2022/datepicker/datepicker-errors.mjs +0 -14
  217. package/esm2022/datepicker/datepicker-input-base.mjs +0 -311
  218. package/esm2022/datepicker/datepicker-input.mjs +0 -200
  219. package/esm2022/datepicker/datepicker-intl.mjs +0 -69
  220. package/esm2022/datepicker/datepicker-module.mjs +0 -138
  221. package/esm2022/datepicker/datepicker-toggle.mjs +0 -113
  222. package/esm2022/datepicker/datepicker.mjs +0 -38
  223. package/esm2022/datepicker/datepicker_public_index.mjs +0 -5
  224. package/esm2022/datepicker/index.mjs +0 -9
  225. package/esm2022/datepicker/month-view.mjs +0 -460
  226. package/esm2022/datepicker/multi-year-view.mjs +0 -330
  227. package/esm2022/datepicker/public-api.mjs +0 -27
  228. package/esm2022/datepicker/testing/calendar-cell-harness.mjs +0 -138
  229. package/esm2022/datepicker/testing/calendar-harness.mjs +0 -83
  230. package/esm2022/datepicker/testing/date-range-input-harness.mjs +0 -98
  231. package/esm2022/datepicker/testing/datepicker-harness-filters.mjs +0 -9
  232. package/esm2022/datepicker/testing/datepicker-input-harness-base.mjs +0 -81
  233. package/esm2022/datepicker/testing/datepicker-input-harness.mjs +0 -58
  234. package/esm2022/datepicker/testing/datepicker-toggle-harness.mjs +0 -41
  235. package/esm2022/datepicker/testing/datepicker-trigger-harness-base.mjs +0 -65
  236. package/esm2022/datepicker/testing/index.mjs +0 -9
  237. package/esm2022/datepicker/testing/public-api.mjs +0 -14
  238. package/esm2022/datepicker/year-view.mjs +0 -324
  239. package/esm2022/dialog/dialog-animations.mjs +0 -38
  240. package/esm2022/dialog/dialog-config.mjs +0 -59
  241. package/esm2022/dialog/dialog-container.mjs +0 -253
  242. package/esm2022/dialog/dialog-content-directives.mjs +0 -212
  243. package/esm2022/dialog/dialog-ref.mjs +0 -177
  244. package/esm2022/dialog/dialog.mjs +0 -212
  245. package/esm2022/dialog/dialog_public_index.mjs +0 -5
  246. package/esm2022/dialog/index.mjs +0 -9
  247. package/esm2022/dialog/module.mjs +0 -45
  248. package/esm2022/dialog/public-api.mjs +0 -15
  249. package/esm2022/dialog/testing/dialog-harness-filters.mjs +0 -9
  250. package/esm2022/dialog/testing/dialog-harness.mjs +0 -84
  251. package/esm2022/dialog/testing/dialog-opener.mjs +0 -58
  252. package/esm2022/dialog/testing/index.mjs +0 -10
  253. package/esm2022/dialog/testing/public-api.mjs +0 -10
  254. package/esm2022/divider/divider-module.mjs +0 -24
  255. package/esm2022/divider/divider.mjs +0 -48
  256. package/esm2022/divider/divider_public_index.mjs +0 -5
  257. package/esm2022/divider/index.mjs +0 -9
  258. package/esm2022/divider/public-api.mjs +0 -10
  259. package/esm2022/divider/testing/divider-harness-filters.mjs +0 -9
  260. package/esm2022/divider/testing/divider-harness.mjs +0 -22
  261. package/esm2022/divider/testing/index.mjs +0 -9
  262. package/esm2022/divider/testing/public-api.mjs +0 -10
  263. package/esm2022/expansion/accordion-base.mjs +0 -14
  264. package/esm2022/expansion/accordion.mjs +0 -96
  265. package/esm2022/expansion/expansion-animations.mjs +0 -51
  266. package/esm2022/expansion/expansion-module.mjs +0 -65
  267. package/esm2022/expansion/expansion-panel-base.mjs +0 -14
  268. package/esm2022/expansion/expansion-panel-content.mjs +0 -35
  269. package/esm2022/expansion/expansion-panel-header.mjs +0 -218
  270. package/esm2022/expansion/expansion-panel.mjs +0 -211
  271. package/esm2022/expansion/expansion_public_index.mjs +0 -5
  272. package/esm2022/expansion/index.mjs +0 -9
  273. package/esm2022/expansion/public-api.mjs +0 -16
  274. package/esm2022/expansion/testing/accordion-harness.mjs +0 -31
  275. package/esm2022/expansion/testing/expansion-harness-filters.mjs +0 -9
  276. package/esm2022/expansion/testing/expansion-harness.mjs +0 -128
  277. package/esm2022/expansion/testing/index.mjs +0 -9
  278. package/esm2022/expansion/testing/public-api.mjs +0 -11
  279. package/esm2022/form-field/directives/error.mjs +0 -48
  280. package/esm2022/form-field/directives/floating-label.mjs +0 -135
  281. package/esm2022/form-field/directives/hint.mjs +0 -40
  282. package/esm2022/form-field/directives/label.mjs +0 -22
  283. package/esm2022/form-field/directives/line-ripple.mjs +0 -60
  284. package/esm2022/form-field/directives/notched-outline.mjs +0 -66
  285. package/esm2022/form-field/directives/prefix.mjs +0 -38
  286. package/esm2022/form-field/directives/suffix.mjs +0 -38
  287. package/esm2022/form-field/form-field-animations.mjs +0 -24
  288. package/esm2022/form-field/form-field-control.mjs +0 -11
  289. package/esm2022/form-field/form-field-errors.mjs +0 -20
  290. package/esm2022/form-field/form-field.mjs +0 -620
  291. package/esm2022/form-field/form-field_public_index.mjs +0 -5
  292. package/esm2022/form-field/index.mjs +0 -9
  293. package/esm2022/form-field/module.mjs +0 -51
  294. package/esm2022/form-field/public-api.mjs +0 -18
  295. package/esm2022/form-field/testing/control/form-field-control-harness.mjs +0 -15
  296. package/esm2022/form-field/testing/control/index.mjs +0 -9
  297. package/esm2022/form-field/testing/error-harness.mjs +0 -29
  298. package/esm2022/form-field/testing/form-field-harness-filters.mjs +0 -9
  299. package/esm2022/form-field/testing/form-field-harness.mjs +0 -179
  300. package/esm2022/form-field/testing/index.mjs +0 -9
  301. package/esm2022/form-field/testing/public-api.mjs +0 -15
  302. package/esm2022/grid-list/grid-list-base.mjs +0 -14
  303. package/esm2022/grid-list/grid-list-module.mjs +0 -59
  304. package/esm2022/grid-list/grid-list.mjs +0 -146
  305. package/esm2022/grid-list/grid-list_public_index.mjs +0 -5
  306. package/esm2022/grid-list/grid-tile.mjs +0 -128
  307. package/esm2022/grid-list/index.mjs +0 -9
  308. package/esm2022/grid-list/public-api.mjs +0 -14
  309. package/esm2022/grid-list/testing/grid-list-harness-filters.mjs +0 -9
  310. package/esm2022/grid-list/testing/grid-list-harness.mjs +0 -76
  311. package/esm2022/grid-list/testing/grid-tile-harness.mjs +0 -71
  312. package/esm2022/grid-list/testing/index.mjs +0 -9
  313. package/esm2022/grid-list/testing/public-api.mjs +0 -11
  314. package/esm2022/grid-list/tile-coordinator.mjs +0 -145
  315. package/esm2022/grid-list/tile-styler.mjs +0 -231
  316. package/esm2022/icon/fake-svgs.mjs +0 -62
  317. package/esm2022/icon/icon-module.mjs +0 -24
  318. package/esm2022/icon/icon-registry.mjs +0 -592
  319. package/esm2022/icon/icon.mjs +0 -379
  320. package/esm2022/icon/icon_public_index.mjs +0 -5
  321. package/esm2022/icon/index.mjs +0 -9
  322. package/esm2022/icon/public-api.mjs +0 -11
  323. package/esm2022/icon/testing/fake-icon-registry.mjs +0 -92
  324. package/esm2022/icon/testing/icon-harness-filters.mjs +0 -14
  325. package/esm2022/icon/testing/icon-harness.mjs +0 -60
  326. package/esm2022/icon/testing/index.mjs +0 -9
  327. package/esm2022/icon/testing/public-api.mjs +0 -11
  328. package/esm2022/icon/testing/testing_public_index.mjs +0 -5
  329. package/esm2022/icon/trusted-types.mjs +0 -43
  330. package/esm2022/index.mjs +0 -14
  331. package/esm2022/input/index.mjs +0 -9
  332. package/esm2022/input/input-errors.mjs +0 -12
  333. package/esm2022/input/input-value-accessor.mjs +0 -16
  334. package/esm2022/input/input.mjs +0 -524
  335. package/esm2022/input/input_public_index.mjs +0 -5
  336. package/esm2022/input/module.mjs +0 -26
  337. package/esm2022/input/public-api.mjs +0 -14
  338. package/esm2022/input/testing/index.mjs +0 -9
  339. package/esm2022/input/testing/input-harness-filters.mjs +0 -9
  340. package/esm2022/input/testing/input-harness.mjs +0 -119
  341. package/esm2022/input/testing/native-option-harness.mjs +0 -42
  342. package/esm2022/input/testing/native-select-harness-filters.mjs +0 -9
  343. package/esm2022/input/testing/native-select-harness.mjs +0 -79
  344. package/esm2022/input/testing/public-api.mjs +0 -13
  345. package/esm2022/list/action-list.mjs +0 -31
  346. package/esm2022/list/index.mjs +0 -9
  347. package/esm2022/list/list-base.mjs +0 -284
  348. package/esm2022/list/list-item-sections.mjs +0 -144
  349. package/esm2022/list/list-module.mjs +0 -97
  350. package/esm2022/list/list-option-types.mjs +0 -16
  351. package/esm2022/list/list-option.mjs +0 -295
  352. package/esm2022/list/list.mjs +0 -103
  353. package/esm2022/list/list_public_index.mjs +0 -5
  354. package/esm2022/list/nav-list.mjs +0 -37
  355. package/esm2022/list/public-api.mjs +0 -18
  356. package/esm2022/list/selection-list.mjs +0 -391
  357. package/esm2022/list/subheader.mjs +0 -28
  358. package/esm2022/list/testing/action-list-harness.mjs +0 -59
  359. package/esm2022/list/testing/index.mjs +0 -9
  360. package/esm2022/list/testing/list-harness-base.mjs +0 -95
  361. package/esm2022/list/testing/list-harness-filters.mjs +0 -9
  362. package/esm2022/list/testing/list-harness.mjs +0 -41
  363. package/esm2022/list/testing/list-item-harness-base.mjs +0 -162
  364. package/esm2022/list/testing/nav-list-harness.mjs +0 -69
  365. package/esm2022/list/testing/public-api.mjs +0 -14
  366. package/esm2022/list/testing/selection-list-harness.mjs +0 -122
  367. package/esm2022/list/tokens.mjs +0 -11
  368. package/esm2022/menu/index.mjs +0 -9
  369. package/esm2022/menu/menu-animations.mjs +0 -61
  370. package/esm2022/menu/menu-content.mjs +0 -87
  371. package/esm2022/menu/menu-errors.mjs +0 -35
  372. package/esm2022/menu/menu-item.mjs +0 -148
  373. package/esm2022/menu/menu-panel.mjs +0 -14
  374. package/esm2022/menu/menu-positions.mjs +0 -9
  375. package/esm2022/menu/menu-trigger.mjs +0 -542
  376. package/esm2022/menu/menu.mjs +0 -405
  377. package/esm2022/menu/menu_public_index.mjs +0 -5
  378. package/esm2022/menu/module.mjs +0 -63
  379. package/esm2022/menu/public-api.mjs +0 -16
  380. package/esm2022/menu/testing/index.mjs +0 -9
  381. package/esm2022/menu/testing/menu-harness-filters.mjs +0 -9
  382. package/esm2022/menu/testing/menu-harness.mjs +0 -166
  383. package/esm2022/menu/testing/public-api.mjs +0 -10
  384. package/esm2022/paginator/index.mjs +0 -9
  385. package/esm2022/paginator/module.mjs +0 -28
  386. package/esm2022/paginator/paginator-intl.mjs +0 -62
  387. package/esm2022/paginator/paginator.mjs +0 -266
  388. package/esm2022/paginator/paginator_public_index.mjs +0 -5
  389. package/esm2022/paginator/public-api.mjs +0 -11
  390. package/esm2022/paginator/testing/index.mjs +0 -9
  391. package/esm2022/paginator/testing/paginator-harness-filters.mjs +0 -9
  392. package/esm2022/paginator/testing/paginator-harness.mjs +0 -98
  393. package/esm2022/paginator/testing/public-api.mjs +0 -10
  394. package/esm2022/progress-bar/index.mjs +0 -9
  395. package/esm2022/progress-bar/module.mjs +0 -24
  396. package/esm2022/progress-bar/progress-bar.mjs +0 -181
  397. package/esm2022/progress-bar/progress-bar_public_index.mjs +0 -5
  398. package/esm2022/progress-bar/public-api.mjs +0 -10
  399. package/esm2022/progress-bar/testing/index.mjs +0 -9
  400. package/esm2022/progress-bar/testing/progress-bar-harness-filters.mjs +0 -9
  401. package/esm2022/progress-bar/testing/progress-bar-harness.mjs +0 -33
  402. package/esm2022/progress-bar/testing/public-api.mjs +0 -10
  403. package/esm2022/progress-bar/testing/testing_public_index.mjs +0 -5
  404. package/esm2022/progress-spinner/index.mjs +0 -9
  405. package/esm2022/progress-spinner/module.mjs +0 -25
  406. package/esm2022/progress-spinner/progress-spinner.mjs +0 -166
  407. package/esm2022/progress-spinner/progress-spinner_public_index.mjs +0 -5
  408. package/esm2022/progress-spinner/public-api.mjs +0 -10
  409. package/esm2022/progress-spinner/testing/index.mjs +0 -9
  410. package/esm2022/progress-spinner/testing/progress-spinner-harness-filters.mjs +0 -9
  411. package/esm2022/progress-spinner/testing/progress-spinner-harness.mjs +0 -35
  412. package/esm2022/progress-spinner/testing/public-api.mjs +0 -10
  413. package/esm2022/progress-spinner/testing/testing_public_index.mjs +0 -5
  414. package/esm2022/radio/index.mjs +0 -9
  415. package/esm2022/radio/module.mjs +0 -25
  416. package/esm2022/radio/public-api.mjs +0 -10
  417. package/esm2022/radio/radio.mjs +0 -680
  418. package/esm2022/radio/radio_public_index.mjs +0 -5
  419. package/esm2022/radio/testing/index.mjs +0 -9
  420. package/esm2022/radio/testing/public-api.mjs +0 -10
  421. package/esm2022/radio/testing/radio-harness-filters.mjs +0 -9
  422. package/esm2022/radio/testing/radio-harness.mjs +0 -228
  423. package/esm2022/select/index.mjs +0 -9
  424. package/esm2022/select/module.mjs +0 -59
  425. package/esm2022/select/public-api.mjs +0 -15
  426. package/esm2022/select/select-animations.mjs +0 -38
  427. package/esm2022/select/select-errors.mjs +0 -35
  428. package/esm2022/select/select.mjs +0 -1160
  429. package/esm2022/select/select_public_index.mjs +0 -5
  430. package/esm2022/select/testing/index.mjs +0 -9
  431. package/esm2022/select/testing/public-api.mjs +0 -10
  432. package/esm2022/select/testing/select-harness-filters.mjs +0 -9
  433. package/esm2022/select/testing/select-harness.mjs +0 -129
  434. package/esm2022/sidenav/drawer-animations.mjs +0 -33
  435. package/esm2022/sidenav/drawer.mjs +0 -863
  436. package/esm2022/sidenav/index.mjs +0 -9
  437. package/esm2022/sidenav/public-api.mjs +0 -12
  438. package/esm2022/sidenav/sidenav-module.mjs +0 -60
  439. package/esm2022/sidenav/sidenav.mjs +0 -148
  440. package/esm2022/sidenav/sidenav_public_index.mjs +0 -5
  441. package/esm2022/sidenav/testing/drawer-container-harness.mjs +0 -36
  442. package/esm2022/sidenav/testing/drawer-content-harness.mjs +0 -23
  443. package/esm2022/sidenav/testing/drawer-harness-filters.mjs +0 -9
  444. package/esm2022/sidenav/testing/drawer-harness.mjs +0 -49
  445. package/esm2022/sidenav/testing/index.mjs +0 -9
  446. package/esm2022/sidenav/testing/public-api.mjs +0 -15
  447. package/esm2022/sidenav/testing/sidenav-container-harness.mjs +0 -36
  448. package/esm2022/sidenav/testing/sidenav-content-harness.mjs +0 -23
  449. package/esm2022/sidenav/testing/sidenav-harness.mjs +0 -28
  450. package/esm2022/slide-toggle/index.mjs +0 -9
  451. package/esm2022/slide-toggle/module.mjs +0 -41
  452. package/esm2022/slide-toggle/public-api.mjs +0 -12
  453. package/esm2022/slide-toggle/slide-toggle-config.mjs +0 -14
  454. package/esm2022/slide-toggle/slide-toggle-required-validator.mjs +0 -44
  455. package/esm2022/slide-toggle/slide-toggle.mjs +0 -273
  456. package/esm2022/slide-toggle/slide-toggle_public_index.mjs +0 -5
  457. package/esm2022/slide-toggle/testing/index.mjs +0 -9
  458. package/esm2022/slide-toggle/testing/public-api.mjs +0 -10
  459. package/esm2022/slide-toggle/testing/slide-toggle-harness-filters.mjs +0 -9
  460. package/esm2022/slide-toggle/testing/slide-toggle-harness.mjs +0 -110
  461. package/esm2022/slider/index.mjs +0 -9
  462. package/esm2022/slider/module.mjs +0 -39
  463. package/esm2022/slider/public-api.mjs +0 -13
  464. package/esm2022/slider/slider-input.mjs +0 -701
  465. package/esm2022/slider/slider-interface.mjs +0 -56
  466. package/esm2022/slider/slider-thumb.mjs +0 -231
  467. package/esm2022/slider/slider.mjs +0 -746
  468. package/esm2022/slider/slider_public_index.mjs +0 -5
  469. package/esm2022/slider/testing/index.mjs +0 -9
  470. package/esm2022/slider/testing/public-api.mjs +0 -11
  471. package/esm2022/slider/testing/slider-harness-filters.mjs +0 -7
  472. package/esm2022/slider/testing/slider-harness.mjs +0 -67
  473. package/esm2022/slider/testing/slider-thumb-harness.mjs +0 -95
  474. package/esm2022/snack-bar/index.mjs +0 -9
  475. package/esm2022/snack-bar/module.mjs +0 -47
  476. package/esm2022/snack-bar/public-api.mjs +0 -16
  477. package/esm2022/snack-bar/simple-snack-bar.mjs +0 -40
  478. package/esm2022/snack-bar/snack-bar-animations.mjs +0 -30
  479. package/esm2022/snack-bar/snack-bar-config.mjs +0 -33
  480. package/esm2022/snack-bar/snack-bar-container.mjs +0 -277
  481. package/esm2022/snack-bar/snack-bar-content.mjs +0 -55
  482. package/esm2022/snack-bar/snack-bar-ref.mjs +0 -89
  483. package/esm2022/snack-bar/snack-bar.mjs +0 -267
  484. package/esm2022/snack-bar/snack-bar_public_index.mjs +0 -5
  485. package/esm2022/snack-bar/testing/index.mjs +0 -9
  486. package/esm2022/snack-bar/testing/public-api.mjs +0 -10
  487. package/esm2022/snack-bar/testing/snack-bar-harness-filters.mjs +0 -9
  488. package/esm2022/snack-bar/testing/snack-bar-harness.mjs +0 -101
  489. package/esm2022/sort/index.mjs +0 -9
  490. package/esm2022/sort/public-api.mjs +0 -14
  491. package/esm2022/sort/sort-animations.mjs +0 -69
  492. package/esm2022/sort/sort-direction.mjs +0 -9
  493. package/esm2022/sort/sort-errors.mjs +0 -24
  494. package/esm2022/sort/sort-header-intl.mjs +0 -41
  495. package/esm2022/sort/sort-header.mjs +0 -317
  496. package/esm2022/sort/sort-module.mjs +0 -27
  497. package/esm2022/sort/sort.mjs +0 -155
  498. package/esm2022/sort/sort_public_index.mjs +0 -5
  499. package/esm2022/sort/testing/index.mjs +0 -9
  500. package/esm2022/sort/testing/public-api.mjs +0 -11
  501. package/esm2022/sort/testing/sort-harness-filters.mjs +0 -2
  502. package/esm2022/sort/testing/sort-harness.mjs +0 -36
  503. package/esm2022/sort/testing/sort-header-harness.mjs +0 -56
  504. package/esm2022/stepper/index.mjs +0 -9
  505. package/esm2022/stepper/public-api.mjs +0 -17
  506. package/esm2022/stepper/step-content.mjs +0 -27
  507. package/esm2022/stepper/step-header.mjs +0 -105
  508. package/esm2022/stepper/step-label.mjs +0 -22
  509. package/esm2022/stepper/stepper-animations.mjs +0 -47
  510. package/esm2022/stepper/stepper-button.mjs +0 -43
  511. package/esm2022/stepper/stepper-icon.mjs +0 -30
  512. package/esm2022/stepper/stepper-intl.mjs +0 -43
  513. package/esm2022/stepper/stepper-module.mjs +0 -88
  514. package/esm2022/stepper/stepper.mjs +0 -205
  515. package/esm2022/stepper/stepper_public_index.mjs +0 -5
  516. package/esm2022/stepper/testing/index.mjs +0 -9
  517. package/esm2022/stepper/testing/public-api.mjs +0 -12
  518. package/esm2022/stepper/testing/step-harness-filters.mjs +0 -7
  519. package/esm2022/stepper/testing/step-harness.mjs +0 -90
  520. package/esm2022/stepper/testing/stepper-button-harnesses.mjs +0 -48
  521. package/esm2022/stepper/testing/stepper-harness.mjs +0 -51
  522. package/esm2022/table/cell.mjs +0 -147
  523. package/esm2022/table/index.mjs +0 -9
  524. package/esm2022/table/module.mjs +0 -93
  525. package/esm2022/table/public-api.mjs +0 -14
  526. package/esm2022/table/row.mjs +0 -163
  527. package/esm2022/table/table-data-source.mjs +0 -317
  528. package/esm2022/table/table.mjs +0 -122
  529. package/esm2022/table/table_public_index.mjs +0 -5
  530. package/esm2022/table/testing/cell-harness.mjs +0 -77
  531. package/esm2022/table/testing/index.mjs +0 -9
  532. package/esm2022/table/testing/public-api.mjs +0 -12
  533. package/esm2022/table/testing/row-harness.mjs +0 -84
  534. package/esm2022/table/testing/table-harness-filters.mjs +0 -2
  535. package/esm2022/table/testing/table-harness.mjs +0 -86
  536. package/esm2022/table/text-column.mjs +0 -60
  537. package/esm2022/tabs/index.mjs +0 -9
  538. package/esm2022/tabs/ink-bar.mjs +0 -149
  539. package/esm2022/tabs/module.mjs +0 -60
  540. package/esm2022/tabs/paginated-tab-header.mjs +0 -539
  541. package/esm2022/tabs/public-api.mjs +0 -21
  542. package/esm2022/tabs/tab-body.mjs +0 -199
  543. package/esm2022/tabs/tab-config.mjs +0 -11
  544. package/esm2022/tabs/tab-content.mjs +0 -32
  545. package/esm2022/tabs/tab-group.mjs +0 -469
  546. package/esm2022/tabs/tab-header.mjs +0 -86
  547. package/esm2022/tabs/tab-label-wrapper.mjs +0 -49
  548. package/esm2022/tabs/tab-label.mjs +0 -44
  549. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +0 -388
  550. package/esm2022/tabs/tab.mjs +0 -128
  551. package/esm2022/tabs/tabs-animations.mjs +0 -45
  552. package/esm2022/tabs/tabs_public_index.mjs +0 -5
  553. package/esm2022/tabs/testing/index.mjs +0 -9
  554. package/esm2022/tabs/testing/public-api.mjs +0 -13
  555. package/esm2022/tabs/testing/tab-group-harness.mjs +0 -56
  556. package/esm2022/tabs/testing/tab-harness-filters.mjs +0 -2
  557. package/esm2022/tabs/testing/tab-harness.mjs +0 -66
  558. package/esm2022/tabs/testing/tab-link-harness.mjs +0 -40
  559. package/esm2022/tabs/testing/tab-nav-bar-harness.mjs +0 -66
  560. package/esm2022/tabs/testing/tab-nav-panel-harness.mjs +0 -27
  561. package/esm2022/toolbar/index.mjs +0 -9
  562. package/esm2022/toolbar/public-api.mjs +0 -10
  563. package/esm2022/toolbar/testing/index.mjs +0 -9
  564. package/esm2022/toolbar/testing/public-api.mjs +0 -10
  565. package/esm2022/toolbar/testing/toolbar-harness-filters.mjs +0 -9
  566. package/esm2022/toolbar/testing/toolbar-harness.mjs +0 -44
  567. package/esm2022/toolbar/toolbar-module.mjs +0 -24
  568. package/esm2022/toolbar/toolbar.mjs +0 -84
  569. package/esm2022/toolbar/toolbar_public_index.mjs +0 -5
  570. package/esm2022/tooltip/index.mjs +0 -9
  571. package/esm2022/tooltip/module.mjs +0 -29
  572. package/esm2022/tooltip/public-api.mjs +0 -11
  573. package/esm2022/tooltip/testing/index.mjs +0 -9
  574. package/esm2022/tooltip/testing/public-api.mjs +0 -10
  575. package/esm2022/tooltip/testing/tooltip-harness-filters.mjs +0 -9
  576. package/esm2022/tooltip/testing/tooltip-harness.mjs +0 -66
  577. package/esm2022/tooltip/tooltip-animations.mjs +0 -24
  578. package/esm2022/tooltip/tooltip.mjs +0 -920
  579. package/esm2022/tooltip/tooltip_public_index.mjs +0 -5
  580. package/esm2022/tree/data-source/flat-data-source.mjs +0 -156
  581. package/esm2022/tree/data-source/nested-data-source.mjs +0 -38
  582. package/esm2022/tree/index.mjs +0 -9
  583. package/esm2022/tree/node.mjs +0 -220
  584. package/esm2022/tree/outlet.mjs +0 -46
  585. package/esm2022/tree/padding.mjs +0 -46
  586. package/esm2022/tree/public-api.mjs +0 -16
  587. package/esm2022/tree/testing/index.mjs +0 -9
  588. package/esm2022/tree/testing/node-harness.mjs +0 -73
  589. package/esm2022/tree/testing/public-api.mjs +0 -11
  590. package/esm2022/tree/testing/tree-harness-filters.mjs +0 -9
  591. package/esm2022/tree/testing/tree-harness.mjs +0 -123
  592. package/esm2022/tree/toggle.mjs +0 -27
  593. package/esm2022/tree/tree-module.mjs +0 -50
  594. package/esm2022/tree/tree.mjs +0 -34
  595. package/esm2022/tree/tree_public_index.mjs +0 -5
@@ -1,524 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
9
- import { getSupportedInputTypes, Platform } from '@angular/cdk/platform';
10
- import { AutofillMonitor } from '@angular/cdk/text-field';
11
- import { booleanAttribute, Directive, ElementRef, inject, Inject, InjectionToken, Input, NgZone, Optional, Self, } from '@angular/core';
12
- import { FormGroupDirective, NgControl, NgForm, Validators } from '@angular/forms';
13
- import { ErrorStateMatcher, _ErrorStateTracker } from '@angular/material/core';
14
- import { MatFormFieldControl, MatFormField, MAT_FORM_FIELD } from '@angular/material/form-field';
15
- import { Subject } from 'rxjs';
16
- import { getMatInputUnsupportedTypeError } from './input-errors';
17
- import { MAT_INPUT_VALUE_ACCESSOR } from './input-value-accessor';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "@angular/cdk/platform";
20
- import * as i2 from "@angular/forms";
21
- import * as i3 from "@angular/material/core";
22
- import * as i4 from "@angular/cdk/text-field";
23
- import * as i5 from "@angular/material/form-field";
24
- // Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.
25
- const MAT_INPUT_INVALID_TYPES = [
26
- 'button',
27
- 'checkbox',
28
- 'file',
29
- 'hidden',
30
- 'image',
31
- 'radio',
32
- 'range',
33
- 'reset',
34
- 'submit',
35
- ];
36
- let nextUniqueId = 0;
37
- /** Injection token that can be used to provide the default options for the input. */
38
- export const MAT_INPUT_CONFIG = new InjectionToken('MAT_INPUT_CONFIG');
39
- export class MatInput {
40
- /**
41
- * Implemented as part of MatFormFieldControl.
42
- * @docs-private
43
- */
44
- get disabled() {
45
- return this._disabled;
46
- }
47
- set disabled(value) {
48
- this._disabled = coerceBooleanProperty(value);
49
- // Browsers may not fire the blur event if the input is disabled too quickly.
50
- // Reset from here to ensure that the element doesn't become stuck.
51
- if (this.focused) {
52
- this.focused = false;
53
- this.stateChanges.next();
54
- }
55
- }
56
- /**
57
- * Implemented as part of MatFormFieldControl.
58
- * @docs-private
59
- */
60
- get id() {
61
- return this._id;
62
- }
63
- set id(value) {
64
- this._id = value || this._uid;
65
- }
66
- /**
67
- * Implemented as part of MatFormFieldControl.
68
- * @docs-private
69
- */
70
- get required() {
71
- return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;
72
- }
73
- set required(value) {
74
- this._required = coerceBooleanProperty(value);
75
- }
76
- /** Input type of the element. */
77
- get type() {
78
- return this._type;
79
- }
80
- set type(value) {
81
- this._type = value || 'text';
82
- this._validateType();
83
- // When using Angular inputs, developers are no longer able to set the properties on the native
84
- // input element. To ensure that bindings for `type` work, we need to sync the setter
85
- // with the native property. Textarea elements don't support the type property or attribute.
86
- if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {
87
- this._elementRef.nativeElement.type = this._type;
88
- }
89
- this._ensureWheelDefaultBehavior();
90
- }
91
- /** An object used to control when error messages are shown. */
92
- get errorStateMatcher() {
93
- return this._errorStateTracker.matcher;
94
- }
95
- set errorStateMatcher(value) {
96
- this._errorStateTracker.matcher = value;
97
- }
98
- /**
99
- * Implemented as part of MatFormFieldControl.
100
- * @docs-private
101
- */
102
- get value() {
103
- return this._inputValueAccessor.value;
104
- }
105
- set value(value) {
106
- if (value !== this.value) {
107
- this._inputValueAccessor.value = value;
108
- this.stateChanges.next();
109
- }
110
- }
111
- /** Whether the element is readonly. */
112
- get readonly() {
113
- return this._readonly;
114
- }
115
- set readonly(value) {
116
- this._readonly = coerceBooleanProperty(value);
117
- }
118
- /** Whether the input is in an error state. */
119
- get errorState() {
120
- return this._errorStateTracker.errorState;
121
- }
122
- set errorState(value) {
123
- this._errorStateTracker.errorState = value;
124
- }
125
- constructor(_elementRef, _platform, ngControl, parentForm, parentFormGroup, defaultErrorStateMatcher, inputValueAccessor, _autofillMonitor, _ngZone,
126
- // TODO: Remove this once the legacy appearance has been removed. We only need
127
- // to inject the form field for determining whether the placeholder has been promoted.
128
- _formField) {
129
- this._elementRef = _elementRef;
130
- this._platform = _platform;
131
- this.ngControl = ngControl;
132
- this._autofillMonitor = _autofillMonitor;
133
- this._ngZone = _ngZone;
134
- this._formField = _formField;
135
- this._uid = `mat-input-${nextUniqueId++}`;
136
- this._webkitBlinkWheelListenerAttached = false;
137
- this._config = inject(MAT_INPUT_CONFIG, { optional: true });
138
- /**
139
- * Implemented as part of MatFormFieldControl.
140
- * @docs-private
141
- */
142
- this.focused = false;
143
- /**
144
- * Implemented as part of MatFormFieldControl.
145
- * @docs-private
146
- */
147
- this.stateChanges = new Subject();
148
- /**
149
- * Implemented as part of MatFormFieldControl.
150
- * @docs-private
151
- */
152
- this.controlType = 'mat-input';
153
- /**
154
- * Implemented as part of MatFormFieldControl.
155
- * @docs-private
156
- */
157
- this.autofilled = false;
158
- this._disabled = false;
159
- this._type = 'text';
160
- this._readonly = false;
161
- this._neverEmptyInputTypes = [
162
- 'date',
163
- 'datetime',
164
- 'datetime-local',
165
- 'month',
166
- 'time',
167
- 'week',
168
- ].filter(t => getSupportedInputTypes().has(t));
169
- this._iOSKeyupListener = (event) => {
170
- const el = event.target;
171
- // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two
172
- // indicate different things. If the value is 0, it means that the caret is at the start
173
- // of the input, whereas a value of `null` means that the input doesn't support
174
- // manipulating the selection range. Inputs that don't support setting the selection range
175
- // will throw an error so we want to avoid calling `setSelectionRange` on them. See:
176
- // https://html.spec.whatwg.org/multipage/input.html#do-not-apply
177
- if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {
178
- // Note: Just setting `0, 0` doesn't fix the issue. Setting
179
- // `1, 1` fixes it for the first time that you type text and
180
- // then hold delete. Toggling to `1, 1` and then back to
181
- // `0, 0` seems to completely fix it.
182
- el.setSelectionRange(1, 1);
183
- el.setSelectionRange(0, 0);
184
- }
185
- };
186
- this._webkitBlinkWheelListener = () => {
187
- // This is a noop function and is used to enable mouse wheel input
188
- // on number inputs
189
- // on blink and webkit browsers.
190
- };
191
- const element = this._elementRef.nativeElement;
192
- const nodeName = element.nodeName.toLowerCase();
193
- // If no input value accessor was explicitly specified, use the element as the input value
194
- // accessor.
195
- this._inputValueAccessor = inputValueAccessor || element;
196
- this._previousNativeValue = this.value;
197
- // Force setter to be called in case id was not specified.
198
- this.id = this.id;
199
- // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete
200
- // key. In order to get around this we need to "jiggle" the caret loose. Since this bug only
201
- // exists on iOS, we only bother to install the listener on iOS.
202
- if (_platform.IOS) {
203
- _ngZone.runOutsideAngular(() => {
204
- _elementRef.nativeElement.addEventListener('keyup', this._iOSKeyupListener);
205
- });
206
- }
207
- this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, ngControl, parentFormGroup, parentForm, this.stateChanges);
208
- this._isServer = !this._platform.isBrowser;
209
- this._isNativeSelect = nodeName === 'select';
210
- this._isTextarea = nodeName === 'textarea';
211
- this._isInFormField = !!_formField;
212
- this.disabledInteractive = this._config?.disabledInteractive || false;
213
- if (this._isNativeSelect) {
214
- this.controlType = element.multiple
215
- ? 'mat-native-select-multiple'
216
- : 'mat-native-select';
217
- }
218
- }
219
- ngAfterViewInit() {
220
- if (this._platform.isBrowser) {
221
- this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {
222
- this.autofilled = event.isAutofilled;
223
- this.stateChanges.next();
224
- });
225
- }
226
- }
227
- ngOnChanges() {
228
- this.stateChanges.next();
229
- }
230
- ngOnDestroy() {
231
- this.stateChanges.complete();
232
- if (this._platform.isBrowser) {
233
- this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);
234
- }
235
- if (this._platform.IOS) {
236
- this._elementRef.nativeElement.removeEventListener('keyup', this._iOSKeyupListener);
237
- }
238
- if (this._webkitBlinkWheelListenerAttached) {
239
- this._elementRef.nativeElement.removeEventListener('wheel', this._webkitBlinkWheelListener);
240
- }
241
- }
242
- ngDoCheck() {
243
- if (this.ngControl) {
244
- // We need to re-evaluate this on every change detection cycle, because there are some
245
- // error triggers that we can't subscribe to (e.g. parent form submissions). This means
246
- // that whatever logic is in here has to be super lean or we risk destroying the performance.
247
- this.updateErrorState();
248
- // Since the input isn't a `ControlValueAccessor`, we don't have a good way of knowing when
249
- // the disabled state has changed. We can't use the `ngControl.statusChanges`, because it
250
- // won't fire if the input is disabled with `emitEvents = false`, despite the input becoming
251
- // disabled.
252
- if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {
253
- this.disabled = this.ngControl.disabled;
254
- this.stateChanges.next();
255
- }
256
- }
257
- // We need to dirty-check the native element's value, because there are some cases where
258
- // we won't be notified when it changes (e.g. the consumer isn't using forms or they're
259
- // updating the value using `emitEvent: false`).
260
- this._dirtyCheckNativeValue();
261
- // We need to dirty-check and set the placeholder attribute ourselves, because whether it's
262
- // present or not depends on a query which is prone to "changed after checked" errors.
263
- this._dirtyCheckPlaceholder();
264
- }
265
- /** Focuses the input. */
266
- focus(options) {
267
- this._elementRef.nativeElement.focus(options);
268
- }
269
- /** Refreshes the error state of the input. */
270
- updateErrorState() {
271
- this._errorStateTracker.updateErrorState();
272
- }
273
- /** Callback for the cases where the focused state of the input changes. */
274
- _focusChanged(isFocused) {
275
- if (isFocused === this.focused) {
276
- return;
277
- }
278
- if (!this._isNativeSelect && isFocused && this.disabled && this.disabledInteractive) {
279
- const element = this._elementRef.nativeElement;
280
- // Focusing an input that has text will cause all the text to be selected. Clear it since
281
- // the user won't be able to change it. This is based on the internal implementation.
282
- if (element.type === 'number') {
283
- // setSelectionRange doesn't work on number inputs so it needs to be set briefly to text.
284
- element.type = 'text';
285
- element.setSelectionRange(0, 0);
286
- element.type = 'number';
287
- }
288
- else {
289
- element.setSelectionRange(0, 0);
290
- }
291
- }
292
- this.focused = isFocused;
293
- this.stateChanges.next();
294
- }
295
- _onInput() {
296
- // This is a noop function and is used to let Angular know whenever the value changes.
297
- // Angular will run a new change detection each time the `input` event has been dispatched.
298
- // It's necessary that Angular recognizes the value change, because when floatingLabel
299
- // is set to false and Angular forms aren't used, the placeholder won't recognize the
300
- // value changes and will not disappear.
301
- // Listening to the input event wouldn't be necessary when the input is using the
302
- // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.
303
- }
304
- /** Does some manual dirty checking on the native input `value` property. */
305
- _dirtyCheckNativeValue() {
306
- const newValue = this._elementRef.nativeElement.value;
307
- if (this._previousNativeValue !== newValue) {
308
- this._previousNativeValue = newValue;
309
- this.stateChanges.next();
310
- }
311
- }
312
- /** Does some manual dirty checking on the native input `placeholder` attribute. */
313
- _dirtyCheckPlaceholder() {
314
- const placeholder = this._getPlaceholder();
315
- if (placeholder !== this._previousPlaceholder) {
316
- const element = this._elementRef.nativeElement;
317
- this._previousPlaceholder = placeholder;
318
- placeholder
319
- ? element.setAttribute('placeholder', placeholder)
320
- : element.removeAttribute('placeholder');
321
- }
322
- }
323
- /** Gets the current placeholder of the form field. */
324
- _getPlaceholder() {
325
- return this.placeholder || null;
326
- }
327
- /** Make sure the input is a supported type. */
328
- _validateType() {
329
- if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 &&
330
- (typeof ngDevMode === 'undefined' || ngDevMode)) {
331
- throw getMatInputUnsupportedTypeError(this._type);
332
- }
333
- }
334
- /** Checks whether the input type is one of the types that are never empty. */
335
- _isNeverEmpty() {
336
- return this._neverEmptyInputTypes.indexOf(this._type) > -1;
337
- }
338
- /** Checks whether the input is invalid based on the native validation. */
339
- _isBadInput() {
340
- // The `validity` property won't be present on platform-server.
341
- let validity = this._elementRef.nativeElement.validity;
342
- return validity && validity.badInput;
343
- }
344
- /**
345
- * Implemented as part of MatFormFieldControl.
346
- * @docs-private
347
- */
348
- get empty() {
349
- return (!this._isNeverEmpty() &&
350
- !this._elementRef.nativeElement.value &&
351
- !this._isBadInput() &&
352
- !this.autofilled);
353
- }
354
- /**
355
- * Implemented as part of MatFormFieldControl.
356
- * @docs-private
357
- */
358
- get shouldLabelFloat() {
359
- if (this._isNativeSelect) {
360
- // For a single-selection `<select>`, the label should float when the selected option has
361
- // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid
362
- // overlapping the label with the options.
363
- const selectElement = this._elementRef.nativeElement;
364
- const firstOption = selectElement.options[0];
365
- // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be
366
- // -1 if the `value` is set to something, that isn't in the list of options, at a later point.
367
- return (this.focused ||
368
- selectElement.multiple ||
369
- !this.empty ||
370
- !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label));
371
- }
372
- else {
373
- return (this.focused && !this.disabled) || !this.empty;
374
- }
375
- }
376
- /**
377
- * Implemented as part of MatFormFieldControl.
378
- * @docs-private
379
- */
380
- setDescribedByIds(ids) {
381
- if (ids.length) {
382
- this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));
383
- }
384
- else {
385
- this._elementRef.nativeElement.removeAttribute('aria-describedby');
386
- }
387
- }
388
- /**
389
- * Implemented as part of MatFormFieldControl.
390
- * @docs-private
391
- */
392
- onContainerClick() {
393
- // Do not re-focus the input element if the element is already focused. Otherwise it can happen
394
- // that someone clicks on a time input and the cursor resets to the "hours" field while the
395
- // "minutes" field was actually clicked. See: https://github.com/angular/components/issues/12849
396
- if (!this.focused) {
397
- this.focus();
398
- }
399
- }
400
- /** Whether the form control is a native select that is displayed inline. */
401
- _isInlineSelect() {
402
- const element = this._elementRef.nativeElement;
403
- return this._isNativeSelect && (element.multiple || element.size > 1);
404
- }
405
- /**
406
- * In blink and webkit browsers a focused number input does not increment or decrement its value
407
- * on mouse wheel interaction unless a wheel event listener is attached to it or one of its ancestors or a passive wheel listener is attached somewhere in the DOM.
408
- * For example: Hitting a tooltip once enables the mouse wheel input for all number inputs as long as it exists.
409
- * In order to get reliable and intuitive behavior we apply a wheel event on our own
410
- * thus making sure increment and decrement by mouse wheel works every time.
411
- * @docs-private
412
- */
413
- _ensureWheelDefaultBehavior() {
414
- if (!this._webkitBlinkWheelListenerAttached &&
415
- this._type === 'number' &&
416
- (this._platform.BLINK || this._platform.WEBKIT)) {
417
- this._ngZone.runOutsideAngular(() => {
418
- this._elementRef.nativeElement.addEventListener('wheel', this._webkitBlinkWheelListener);
419
- });
420
- this._webkitBlinkWheelListenerAttached = true;
421
- }
422
- if (this._webkitBlinkWheelListenerAttached && this._type !== 'number') {
423
- this._elementRef.nativeElement.removeEventListener('wheel', this._webkitBlinkWheelListener);
424
- this._webkitBlinkWheelListenerAttached = true;
425
- }
426
- }
427
- /** Gets the value to set on the `readonly` attribute. */
428
- _getReadonlyAttribute() {
429
- if (this._isNativeSelect) {
430
- return null;
431
- }
432
- if (this.readonly || (this.disabled && this.disabledInteractive)) {
433
- return 'true';
434
- }
435
- return null;
436
- }
437
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MatInput, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: i2.NgControl, optional: true, self: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i3.ErrorStateMatcher }, { token: MAT_INPUT_VALUE_ACCESSOR, optional: true, self: true }, { token: i4.AutofillMonitor }, { token: i0.NgZone }, { token: MAT_FORM_FIELD, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
438
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.0-next.2", type: MatInput, isStandalone: true, selector: "input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]", inputs: { disabled: "disabled", id: "id", placeholder: "placeholder", name: "name", required: "required", type: "type", errorStateMatcher: "errorStateMatcher", userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], value: "value", readonly: "readonly", disabledInteractive: ["disabledInteractive", "disabledInteractive", booleanAttribute] }, host: { listeners: { "focus": "_focusChanged(true)", "blur": "_focusChanged(false)", "input": "_onInput()" }, properties: { "class.mat-input-server": "_isServer", "class.mat-mdc-form-field-textarea-control": "_isInFormField && _isTextarea", "class.mat-mdc-form-field-input-control": "_isInFormField", "class.mat-mdc-input-disabled-interactive": "disabledInteractive", "class.mdc-text-field__input": "_isInFormField", "class.mat-mdc-native-select-inline": "_isInlineSelect()", "id": "id", "disabled": "disabled && !disabledInteractive", "required": "required", "attr.name": "name || null", "attr.readonly": "_getReadonlyAttribute()", "attr.aria-disabled": "disabled && disabledInteractive ? \"true\" : null", "attr.aria-invalid": "(empty && required) ? null : errorState", "attr.aria-required": "required", "attr.id": "id" }, classAttribute: "mat-mdc-input-element" }, providers: [{ provide: MatFormFieldControl, useExisting: MatInput }], exportAs: ["matInput"], usesOnChanges: true, ngImport: i0 }); }
439
- }
440
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MatInput, decorators: [{
441
- type: Directive,
442
- args: [{
443
- selector: `input[matInput], textarea[matInput], select[matNativeControl],
444
- input[matNativeControl], textarea[matNativeControl]`,
445
- exportAs: 'matInput',
446
- host: {
447
- 'class': 'mat-mdc-input-element',
448
- // The BaseMatInput parent class adds `mat-input-element`, `mat-form-field-control` and
449
- // `mat-form-field-autofill-control` to the CSS class list, but this should not be added for
450
- // this MDC equivalent input.
451
- '[class.mat-input-server]': '_isServer',
452
- '[class.mat-mdc-form-field-textarea-control]': '_isInFormField && _isTextarea',
453
- '[class.mat-mdc-form-field-input-control]': '_isInFormField',
454
- '[class.mat-mdc-input-disabled-interactive]': 'disabledInteractive',
455
- '[class.mdc-text-field__input]': '_isInFormField',
456
- '[class.mat-mdc-native-select-inline]': '_isInlineSelect()',
457
- // Native input properties that are overwritten by Angular inputs need to be synced with
458
- // the native input element. Otherwise property bindings for those don't work.
459
- '[id]': 'id',
460
- '[disabled]': 'disabled && !disabledInteractive',
461
- '[required]': 'required',
462
- '[attr.name]': 'name || null',
463
- '[attr.readonly]': '_getReadonlyAttribute()',
464
- '[attr.aria-disabled]': 'disabled && disabledInteractive ? "true" : null',
465
- // Only mark the input as invalid for assistive technology if it has a value since the
466
- // state usually overlaps with `aria-required` when the input is empty and can be redundant.
467
- '[attr.aria-invalid]': '(empty && required) ? null : errorState',
468
- '[attr.aria-required]': 'required',
469
- // Native input properties that are overwritten by Angular inputs need to be synced with
470
- // the native input element. Otherwise property bindings for those don't work.
471
- '[attr.id]': 'id',
472
- '(focus)': '_focusChanged(true)',
473
- '(blur)': '_focusChanged(false)',
474
- '(input)': '_onInput()',
475
- },
476
- providers: [{ provide: MatFormFieldControl, useExisting: MatInput }],
477
- standalone: true,
478
- }]
479
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.Platform }, { type: i2.NgControl, decorators: [{
480
- type: Optional
481
- }, {
482
- type: Self
483
- }] }, { type: i2.NgForm, decorators: [{
484
- type: Optional
485
- }] }, { type: i2.FormGroupDirective, decorators: [{
486
- type: Optional
487
- }] }, { type: i3.ErrorStateMatcher }, { type: undefined, decorators: [{
488
- type: Optional
489
- }, {
490
- type: Self
491
- }, {
492
- type: Inject,
493
- args: [MAT_INPUT_VALUE_ACCESSOR]
494
- }] }, { type: i4.AutofillMonitor }, { type: i0.NgZone }, { type: i5.MatFormField, decorators: [{
495
- type: Optional
496
- }, {
497
- type: Inject,
498
- args: [MAT_FORM_FIELD]
499
- }] }], propDecorators: { disabled: [{
500
- type: Input
501
- }], id: [{
502
- type: Input
503
- }], placeholder: [{
504
- type: Input
505
- }], name: [{
506
- type: Input
507
- }], required: [{
508
- type: Input
509
- }], type: [{
510
- type: Input
511
- }], errorStateMatcher: [{
512
- type: Input
513
- }], userAriaDescribedBy: [{
514
- type: Input,
515
- args: ['aria-describedby']
516
- }], value: [{
517
- type: Input
518
- }], readonly: [{
519
- type: Input
520
- }], disabledInteractive: [{
521
- type: Input,
522
- args: [{ transform: booleanAttribute }]
523
- }] } });
524
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvaW5wdXQvaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFlLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFDLHNCQUFzQixFQUFFLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLE1BQU0sRUFHTixRQUFRLEVBQ1IsSUFBSSxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzdFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0YsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQUVoRSxxRkFBcUY7QUFDckYsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixRQUFRO0lBQ1IsVUFBVTtJQUNWLE1BQU07SUFDTixRQUFRO0lBQ1IsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLFFBQVE7Q0FDVCxDQUFDO0FBRUYsSUFB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O3dCQUNoQyxRQUFRLEVBQUUsc0JBQXNCO3dCQUNoQyxTQUFTLEVBQUUsWUFBWTtxQkFDeEI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxVQUFVLEVBQUMsQ0FBQztvQkFDbEUsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkE4TEksUUFBUTs7MEJBQUksSUFBSTs7MEJBQ2hCLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUVSLFFBQVE7OzBCQUFJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsd0JBQXdCOzswQkFLbkQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjO3lDQWxKaEMsUUFBUTtzQkFEWCxLQUFLO2dCQXFCRixFQUFFO3NCQURMLEtBQUs7Z0JBYUcsV0FBVztzQkFBbkIsS0FBSztnQkFNRyxJQUFJO3NCQUFaLEtBQUs7Z0JBT0YsUUFBUTtzQkFEWCxLQUFLO2dCQVdGLElBQUk7c0JBRFAsS0FBSztnQkFxQkYsaUJBQWlCO3NCQURwQixLQUFLO2dCQVlxQixtQkFBbUI7c0JBQTdDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQU9yQixLQUFLO3NCQURSLEtBQUs7Z0JBYUYsUUFBUTtzQkFEWCxLQUFLO2dCQVdOLG1CQUFtQjtzQkFEbEIsS0FBSzt1QkFBQyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtnZXRTdXBwb3J0ZWRJbnB1dFR5cGVzLCBQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7QXV0b2ZpbGxNb25pdG9yfSBmcm9tICdAYW5ndWxhci9jZGsvdGV4dC1maWVsZCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBEaXJlY3RpdmUsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBTZWxmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0NvbnRyb2wsIE5nRm9ybSwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtFcnJvclN0YXRlTWF0Y2hlciwgX0Vycm9yU3RhdGVUcmFja2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkQ29udHJvbCwgTWF0Rm9ybUZpZWxkLCBNQVRfRk9STV9GSUVMRH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtnZXRNYXRJbnB1dFVuc3VwcG9ydGVkVHlwZUVycm9yfSBmcm9tICcuL2lucHV0LWVycm9ycyc7XG5pbXBvcnQge01BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnLi9pbnB1dC12YWx1ZS1hY2Nlc3Nvcic7XG5cbi8vIEludmFsaWQgaW5wdXQgdHlwZS4gVXNpbmcgb25lIG9mIHRoZXNlIHdpbGwgdGhyb3cgYW4gTWF0SW5wdXRVbnN1cHBvcnRlZFR5cGVFcnJvci5cbmNvbnN0IE1BVF9JTlBVVF9JTlZBTElEX1RZUEVTID0gW1xuICAnYnV0dG9uJyxcbiAgJ2NoZWNrYm94JyxcbiAgJ2ZpbGUnLFxuICAnaGlkZGVuJyxcbiAgJ2ltYWdlJyxcbiAgJ3JhZGlvJyxcbiAgJ3JhbmdlJyxcbiAgJ3Jlc2V0JyxcbiAgJ3N1Ym1pdCcsXG5dO1xuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuLyoqIE9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBvcHRpb25zIGZvciB0aGUgaW5wdXQuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdElucHV0Q29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgZGlzYWJsZWQgaW5wdXRzIHNob3VsZCBiZSBpbnRlcmFjdGl2ZS4gKi9cbiAgZGlzYWJsZWRJbnRlcmFjdGl2ZT86IGJvb2xlYW47XG59XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBpbnB1dC4gKi9cbmV4cG9ydCBjb25zdCBNQVRfSU5QVVRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE1hdElucHV0Q29uZmlnPignTUFUX0lOUFVUX0NPTkZJRycpO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IGBpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLFxuICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdYCxcbiAgZXhwb3J0QXM6ICdtYXRJbnB1dCcsXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbWF0LW1kYy1pbnB1dC1lbGVtZW50JyxcbiAgICAvLyBUaGUgQmFzZU1hdElucHV0IHBhcmVudCBjbGFzcyBhZGRzIGBtYXQtaW5wdXQtZWxlbWVudGAsIGBtYXQtZm9ybS1maWVsZC1jb250cm9sYCBhbmRcbiAgICAvLyBgbWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbGAgdG8gdGhlIENTUyBjbGFzcyBsaXN0LCBidXQgdGhpcyBzaG91bGQgbm90IGJlIGFkZGVkIGZvclxuICAgIC8vIHRoaXMgTURDIGVxdWl2YWxlbnQgaW5wdXQuXG4gICAgJ1tjbGFzcy5tYXQtaW5wdXQtc2VydmVyXSc6ICdfaXNTZXJ2ZXInLFxuICAgICdbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLXRleHRhcmVhLWNvbnRyb2xdJzogJ19pc0luRm9ybUZpZWxkICYmIF9pc1RleHRhcmVhJyxcbiAgICAnW2NsYXNzLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sXSc6ICdfaXNJbkZvcm1GaWVsZCcsXG4gICAgJ1tjbGFzcy5tYXQtbWRjLWlucHV0LWRpc2FibGVkLWludGVyYWN0aXZlXSc6ICdkaXNhYmxlZEludGVyYWN0aXZlJyxcbiAgICAnW2NsYXNzLm1kYy10ZXh0LWZpZWxkX19pbnB1dF0nOiAnX2lzSW5Gb3JtRmllbGQnLFxuICAgICdbY2xhc3MubWF0LW1kYy1uYXRpdmUtc2VsZWN0LWlubGluZV0nOiAnX2lzSW5saW5lU2VsZWN0KCknLFxuICAgIC8vIE5hdGl2ZSBpbnB1dCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG92ZXJ3cml0dGVuIGJ5IEFuZ3VsYXIgaW5wdXRzIG5lZWQgdG8gYmUgc3luY2VkIHdpdGhcbiAgICAvLyB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQuIE90aGVyd2lzZSBwcm9wZXJ0eSBiaW5kaW5ncyBmb3IgdGhvc2UgZG9uJ3Qgd29yay5cbiAgICAnW2lkXSc6ICdpZCcsXG4gICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQgJiYgIWRpc2FibGVkSW50ZXJhY3RpdmUnLFxuICAgICdbcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAnW2F0dHIubmFtZV0nOiAnbmFtZSB8fCBudWxsJyxcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ19nZXRSZWFkb25seUF0dHJpYnV0ZSgpJyxcbiAgICAnW2F0dHIuYXJpYS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQgJiYgZGlzYWJsZWRJbnRlcmFjdGl2ZSA/IFwidHJ1ZVwiIDogbnVsbCcsXG4gICAgLy8gT25seSBtYXJrIHRoZSBpbnB1dCBhcyBpbnZhbGlkIGZvciBhc3Npc3RpdmUgdGVjaG5vbG9neSBpZiBpdCBoYXMgYSB2YWx1ZSBzaW5jZSB0aGVcbiAgICAvLyBzdGF0ZSB1c3VhbGx5IG92ZXJsYXBzIHdpdGggYGFyaWEtcmVxdWlyZWRgIHdoZW4gdGhlIGlucHV0IGlzIGVtcHR5IGFuZCBjYW4gYmUgcmVkdW5kYW50LlxuICAgICdbYXR0ci5hcmlhLWludmFsaWRdJzogJyhlbXB0eSAmJiByZXF1aXJlZCkgPyBudWxsIDogZXJyb3JTdGF0ZScsXG4gICAgJ1thdHRyLmFyaWEtcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAvLyBOYXRpdmUgaW5wdXQgcHJvcGVydGllcyB0aGF0IGFyZSBvdmVyd3JpdHRlbiBieSBBbmd1bGFyIGlucHV0cyBuZWVkIHRvIGJlIHN5bmNlZCB3aXRoXG4gICAgLy8gdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50LiBPdGhlcndpc2UgcHJvcGVydHkgYmluZGluZ3MgZm9yIHRob3NlIGRvbid0IHdvcmsuXG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgJyhmb2N1cyknOiAnX2ZvY3VzQ2hhbmdlZCh0cnVlKScsXG4gICAgJyhibHVyKSc6ICdfZm9jdXNDaGFuZ2VkKGZhbHNlKScsXG4gICAgJyhpbnB1dCknOiAnX29uSW5wdXQoKScsXG4gIH0sXG4gIHByb3ZpZGVyczogW3twcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogTWF0SW5wdXR9XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0SW5wdXRcbiAgaW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPGFueT4sIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBEb0NoZWNrXG57XG4gIHByb3RlY3RlZCBfdWlkID0gYG1hdC1pbnB1dC0ke25leHRVbmlxdWVJZCsrfWA7XG4gIHByb3RlY3RlZCBfcHJldmlvdXNOYXRpdmVWYWx1ZTogYW55O1xuICBwcml2YXRlIF9pbnB1dFZhbHVlQWNjZXNzb3I6IHt2YWx1ZTogYW55fTtcbiAgcHJpdmF0ZSBfcHJldmlvdXNQbGFjZWhvbGRlcjogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSBfZXJyb3JTdGF0ZVRyYWNrZXI6IF9FcnJvclN0YXRlVHJhY2tlcjtcbiAgcHJpdmF0ZSBfd2Via2l0QmxpbmtXaGVlbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29uZmlnID0gaW5qZWN0KE1BVF9JTlBVVF9DT05GSUcsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgcmVuZGVyZWQgb24gdGhlIHNlcnZlci4gKi9cbiAgcmVhZG9ubHkgX2lzU2VydmVyOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYSBuYXRpdmUgaHRtbCBzZWxlY3QuICovXG4gIHJlYWRvbmx5IF9pc05hdGl2ZVNlbGVjdDogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGEgdGV4dGFyZWEuICovXG4gIHJlYWRvbmx5IF9pc1RleHRhcmVhOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBpbnNpZGUgb2YgYSBmb3JtIGZpZWxkLiAqL1xuICByZWFkb25seSBfaXNJbkZvcm1GaWVsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBjb250cm9sVHlwZTogc3RyaW5nID0gJ21hdC1pbnB1dCc7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgYXV0b2ZpbGxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIE1hdEZvcm1GaWVsZENvbnRyb2wuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAvLyBCcm93c2VycyBtYXkgbm90IGZpcmUgdGhlIGJsdXIgZXZlbnQgaWYgdGhlIGlucHV0IGlzIGRpc2FibGVkIHRvbyBxdWlja2x5LlxuICAgIC8vIFJlc2V0IGZyb20gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgZWxlbWVudCBkb2Vzbid0IGJlY29tZSBzdHVjay5cbiAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIE1hdEZvcm1GaWVsZENvbnRyb2wuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsdWUgfHwgdGhpcy5fdWlkO1xuICB9XG4gIHByb3RlY3RlZCBfaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBpbnB1dC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIE1hdEZvcm1GaWVsZENvbnRyb2wuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQgPz8gdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSA/PyBmYWxzZTtcbiAgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgX3JlcXVpcmVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBJbnB1dCB0eXBlIG9mIHRoZSBlbGVtZW50LiAqL1xuICBASW5wdXQoKVxuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG4gIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdmFsdWUgfHwgJ3RleHQnO1xuICAgIHRoaXMuX3ZhbGlkYXRlVHlwZSgpO1xuXG4gICAgLy8gV2hlbiB1c2luZyBBbmd1bGFyIGlucHV0cywgZGV2ZWxvcGVycyBhcmUgbm8gbG9uZ2VyIGFibGUgdG8gc2V0IHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSBuYXRpdmVcbiAgICAvLyBpbnB1dCBlbGVtZW50LiBUbyBlbnN1cmUgdGhhdCBiaW5kaW5ncyBmb3IgYHR5cGVgIHdvcmssIHdlIG5lZWQgdG8gc3luYyB0aGUgc2V0dGVyXG4gICAgLy8gd2l0aCB0aGUgbmF0aXZlIHByb3BlcnR5LiBUZXh0YXJlYSBlbGVtZW50cyBkb24ndCBzdXBwb3J0IHRoZSB0eXBlIHByb3BlcnR5IG9yIGF0dHJpYnV0ZS5cbiAgICBpZiAoIXRoaXMuX2lzVGV4dGFyZWEgJiYgZ2V0U3VwcG9ydGVkSW5wdXRUeXBlcygpLmhhcyh0aGlzLl90eXBlKSkge1xuICAgICAgKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlID0gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICB0aGlzLl9lbnN1cmVXaGVlbERlZmF1bHRCZWhhdmlvcigpO1xuICB9XG4gIHByb3RlY3RlZCBfdHlwZSA9ICd0ZXh0JztcblxuICAvKiogQW4gb2JqZWN0IHVzZWQgdG8gY29udHJvbCB3aGVuIGVycm9yIG1lc3NhZ2VzIGFyZSBzaG93bi4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGVycm9yU3RhdGVNYXRjaGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9lcnJvclN0YXRlVHJhY2tlci5tYXRjaGVyO1xuICB9XG4gIHNldCBlcnJvclN0YXRlTWF0Y2hlcih2YWx1ZTogRXJyb3JTdGF0ZU1hdGNoZXIpIHtcbiAgICB0aGlzLl9lcnJvclN0YXRlVHJhY2tlci5tYXRjaGVyID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBASW5wdXQoJ2FyaWEtZGVzY3JpYmVkYnknKSB1c2VyQXJpYURlc2NyaWJlZEJ5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgcmVhZG9ubHkuICovXG4gIEBJbnB1dCgpXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cbiAgc2V0IHJlYWRvbmx5KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfcmVhZG9ubHkgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgaW5wdXQgc2hvdWxkIHJlbWFpbiBpbnRlcmFjdGl2ZSB3aGVuIGl0IGlzIGRpc2FibGVkLiAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXG4gIGRpc2FibGVkSW50ZXJhY3RpdmU6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGlzIGluIGFuIGVycm9yIHN0YXRlLiAqL1xuICBnZXQgZXJyb3JTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JTdGF0ZVRyYWNrZXIuZXJyb3JTdGF0ZTtcbiAgfVxuICBzZXQgZXJyb3JTdGF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Vycm9yU3RhdGVUcmFja2VyLmVycm9yU3RhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbmV2ZXJFbXB0eUlucHV0VHlwZXMgPSBbXG4gICAgJ2RhdGUnLFxuICAgICdkYXRldGltZScsXG4gICAgJ2RhdGV0aW1lLWxvY2FsJyxcbiAgICAnbW9udGgnLFxuICAgICd0aW1lJyxcbiAgICAnd2VlaycsXG4gIF0uZmlsdGVyKHQgPT4gZ2V0U3VwcG9ydGVkSW5wdXRUeXBlcygpLmhhcyh0KSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+LFxuICAgIHByb3RlY3RlZCBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgIEBPcHRpb25hbCgpIHBhcmVudEZvcm06IE5nRm9ybSxcbiAgICBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgQEluamVjdChNQVRfSU5QVVRfVkFMVUVfQUNDRVNTT1IpIGlucHV0VmFsdWVBY2Nlc3NvcjogYW55LFxuICAgIHByaXZhdGUgX2F1dG9maWxsTW9uaXRvcjogQXV0b2ZpbGxNb25pdG9yLFxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIG9uY2UgdGhlIGxlZ2FjeSBhcHBlYXJhbmNlIGhhcyBiZWVuIHJlbW92ZWQuIFdlIG9ubHkgbmVlZFxuICAgIC8vIHRvIGluamVjdCB0aGUgZm9ybSBmaWVsZCBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgcGxhY2Vob2xkZXIgaGFzIGJlZW4gcHJvbW90ZWQuXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRk9STV9GSUVMRCkgcHJvdGVjdGVkIF9mb3JtRmllbGQ/OiBNYXRGb3JtRmllbGQsXG4gICkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBJZiBubyBpbnB1dCB2YWx1ZSBhY2Nlc3NvciB3YXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIHVzZSB0aGUgZWxlbWVudCBhcyB0aGUgaW5wdXQgdmFsdWVcbiAgICAvLyBhY2Nlc3Nvci5cbiAgICB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IgPSBpbnB1dFZhbHVlQWNjZXNzb3IgfHwgZWxlbWVudDtcblxuICAgIHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgLy8gRm9yY2Ugc2V0dGVyIHRvIGJlIGNhbGxlZCBpbiBjYXNlIGlkIHdhcyBub3Qgc3BlY2lmaWVkLlxuICAgIHRoaXMuaWQgPSB0aGlzLmlkO1xuXG4gICAgLy8gT24gc29tZSB2ZXJzaW9ucyBvZiBpT1MgdGhlIGNhcmV0IGdldHMgc3R1Y2sgaW4gdGhlIHdyb25nIHBsYWNlIHdoZW4gaG9sZGluZyBkb3duIHRoZSBkZWxldGVcbiAgICAvLyBrZXkuIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcyB3ZSBuZWVkIHRvIFwiamlnZ2xlXCIgdGhlIGNhcmV0IGxvb3NlLiBTaW5jZSB0aGlzIGJ1ZyBvbmx5XG4gICAgLy8gZXhpc3RzIG9uIGlPUywgd2Ugb25seSBib3RoZXIgdG8gaW5zdGFsbCB0aGUgbGlzdGVuZXIgb24gaU9TLlxuICAgIGlmIChfcGxhdGZvcm0uSU9TKSB7XG4gICAgICBfbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX2lPU0tleXVwTGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZXJyb3JTdGF0ZVRyYWNrZXIgPSBuZXcgX0Vycm9yU3RhdGVUcmFja2VyKFxuICAgICAgZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLFxuICAgICAgbmdDb250cm9sLFxuICAgICAgcGFyZW50Rm9ybUdyb3VwLFxuICAgICAgcGFyZW50Rm9ybSxcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLFxuICAgICk7XG4gICAgdGhpcy5faXNTZXJ2ZXIgPSAhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyO1xuICAgIHRoaXMuX2lzTmF0aXZlU2VsZWN0ID0gbm9kZU5hbWUgPT09ICdzZWxlY3QnO1xuICAgIHRoaXMuX2lzVGV4dGFyZWEgPSBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJztcbiAgICB0aGlzLl9pc0luRm9ybUZpZWxkID0gISFfZm9ybUZpZWxkO1xuICAgIHRoaXMuZGlzYWJsZWRJbnRlcmFjdGl2ZSA9IHRoaXMuX2NvbmZpZz8uZGlzYWJsZWRJbnRlcmFjdGl2ZSB8fCBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9pc05hdGl2ZVNlbGVjdCkge1xuICAgICAgdGhpcy5jb250cm9sVHlwZSA9IChlbGVtZW50IGFzIEhUTUxTZWxlY3RFbGVtZW50KS5tdWx0aXBsZVxuICAgICAgICA/ICdtYXQtbmF0aXZlLXNlbGVjdC1tdWx0aXBsZSdcbiAgICAgICAgOiAnbWF0LW5hdGl2ZS1zZWxlY3QnO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICB0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2ZpbGxlZCA9IGV2ZW50LmlzQXV0b2ZpbGxlZDtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcblxuICAgIGlmICh0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgIHRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF0Zm9ybS5JT1MpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX2lPU0tleXVwTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl93ZWJraXRCbGlua1doZWVsTGlzdGVuZXJBdHRhY2hlZCkge1xuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgdGhpcy5fd2Via2l0QmxpbmtXaGVlbExpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoaXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSwgYmVjYXVzZSB0aGVyZSBhcmUgc29tZVxuICAgICAgLy8gZXJyb3IgdHJpZ2dlcnMgdGhhdCB3ZSBjYW4ndCBzdWJzY3JpYmUgdG8gKGUuZy4gcGFyZW50IGZvcm0gc3VibWlzc2lvbnMpLiBUaGlzIG1lYW5zXG4gICAgICAvLyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzIGluIGhlcmUgaGFzIHRvIGJlIHN1cGVyIGxlYW4gb3Igd2UgcmlzayBkZXN0cm95aW5nIHRoZSBwZXJmb3JtYW5jZS5cbiAgICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuXG4gICAgICAvLyBTaW5jZSB0aGUgaW5wdXQgaXNuJ3QgYSBgQ29udHJvbFZhbHVlQWNjZXNzb3JgLCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgb2Yga25vd2luZyB3aGVuXG4gICAgICAvLyB0aGUgZGlzYWJsZWQgc3RhdGUgaGFzIGNoYW5nZWQuIFdlIGNhbid0IHVzZSB0aGUgYG5nQ29udHJvbC5zdGF0dXNDaGFuZ2VzYCwgYmVjYXVzZSBpdFxuICAgICAgLy8gd29uJ3QgZmlyZSBpZiB0aGUgaW5wdXQgaXMgZGlzYWJsZWQgd2l0aCBgZW1pdEV2ZW50cyA9IGZhbHNlYCwgZGVzcGl0ZSB0aGUgaW5wdXQgYmVjb21pbmdcbiAgICAgIC8vIGRpc2FibGVkLlxuICAgICAgaWYgKHRoaXMubmdDb250cm9sLmRpc2FibGVkICE9PSBudWxsICYmIHRoaXMubmdDb250cm9sLmRpc2FibGVkICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZDtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gZGlydHktY2hlY2sgdGhlIG5hdGl2ZSBlbGVtZW50J3MgdmFsdWUsIGJlY2F1c2UgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmVcbiAgICAvLyB3ZSB3b24ndCBiZSBub3RpZmllZCB3aGVuIGl0IGNoYW5nZXMgKGUuZy4gdGhlIGNvbnN1bWVyIGlzbid0IHVzaW5nIGZvcm1zIG9yIHRoZXkncmVcbiAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgdXNpbmcgYGVtaXRFdmVudDogZmFsc2VgKS5cbiAgICB0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gZGlydHktY2hlY2sgYW5kIHNldCB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlIG91cnNlbHZlcywgYmVjYXVzZSB3aGV0aGVyIGl0J3NcbiAgICAvLyBwcmVzZW50IG9yIG5vdCBkZXBlbmRzIG9uIGEgcXVlcnkgd2hpY2ggaXMgcHJvbmUgdG8gXCJjaGFuZ2VkIGFmdGVyIGNoZWNrZWRcIiBlcnJvcnMuXG4gICAgdGhpcy5fZGlydHlDaGVja1BsYWNlaG9sZGVyKCk7XG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgaW5wdXQuICovXG4gIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMob3B0aW9ucyk7XG4gIH1cblxuICAvKiogUmVmcmVzaGVzIHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgaW5wdXQuICovXG4gIHVwZGF0ZUVycm9yU3RhdGUoKSB7XG4gICAgdGhpcy5fZXJyb3JTdGF0ZVRyYWNrZXIudXBkYXRlRXJyb3JTdGF0ZSgpO1xuICB9XG5cbiAgLyoqIENhbGxiYWNrIGZvciB0aGUgY2FzZXMgd2hlcmUgdGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIGlucHV0IGNoYW5nZXMuICovXG4gIF9mb2N1c0NoYW5nZWQoaXNGb2N1c2VkOiBib29sZWFuKSB7XG4gICAgaWYgKGlzRm9jdXNlZCA9PT0gdGhpcy5mb2N1c2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc05hdGl2ZVNlbGVjdCAmJiBpc0ZvY3VzZWQgJiYgdGhpcy5kaXNhYmxlZCAmJiB0aGlzLmRpc2FibGVkSW50ZXJhY3RpdmUpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgICAgLy8gRm9jdXNpbmcgYW4gaW5wdXQgdGhhdCBoYXMgdGV4dCB3aWxsIGNhdXNlIGFsbCB0aGUgdGV4dCB0byBiZSBzZWxlY3RlZC4gQ2xlYXIgaXQgc2luY2VcbiAgICAgIC8vIHRoZSB1c2VyIHdvbid0IGJlIGFibGUgdG8gY2hhbmdlIGl0LiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIC8vIHNldFNlbGVjdGlvblJhbmdlIGRvZXNuJ3Qgd29yayBvbiBudW1iZXIgaW5wdXRzIHNvIGl0IG5lZWRzIHRvIGJlIHNldCBicmllZmx5IHRvIHRleHQuXG4gICAgICAgIGVsZW1lbnQudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCAwKTtcbiAgICAgICAgZWxlbWVudC50eXBlID0gJ251bWJlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBfb25JbnB1dCgpIHtcbiAgICAvLyBUaGlzIGlzIGEgbm9vcCBmdW5jdGlvbiBhbmQgaXMgdXNlZCB0byBsZXQgQW5ndWxhciBrbm93IHdoZW5ldmVyIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuICAgIC8vIEFuZ3VsYXIgd2lsbCBydW4gYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBlYWNoIHRpbWUgdGhlIGBpbnB1dGAgZXZlbnQgaGFzIGJlZW4gZGlzcGF0Y2hlZC5cbiAgICAvLyBJdCdzIG5lY2Vzc2FyeSB0aGF0IEFuZ3VsYXIgcmVjb2duaXplcyB0aGUgdmFsdWUgY2hhbmdlLCBiZWNhdXNlIHdoZW4gZmxvYXRpbmdMYWJlbFxuICAgIC8vIGlzIHNldCB0byBmYWxzZSBhbmQgQW5ndWxhciBmb3JtcyBhcmVuJ3QgdXNlZCwgdGhlIHBsYWNlaG9sZGVyIHdvbid0IHJlY29nbml6ZSB0aGVcbiAgICAvLyB2YWx1ZSBjaGFuZ2VzIGFuZCB3aWxsIG5vdCBkaXNhcHBlYXIuXG4gICAgLy8gTGlzdGVuaW5nIHRvIHRoZSBpbnB1dCBldmVudCB3b3VsZG4ndCBiZSBuZWNlc3Nhcnkgd2hlbiB0aGUgaW5wdXQgaXMgdXNpbmcgdGhlXG4gICAgLy8gRm9ybXNNb2R1bGUgb3IgUmVhY3RpdmVGb3Jtc01vZHVsZSwgYmVjYXVzZSBBbmd1bGFyIGZvcm1zIGFsc28gbGlzdGVucyB0byBpbnB1dCBldmVudHMuXG4gIH1cblxuICAvKiogRG9lcyBzb21lIG1hbnVhbCBkaXJ0eSBjaGVja2luZyBvbiB0aGUgbmF0aXZlIGlucHV0IGB2YWx1ZWAgcHJvcGVydHkuICovXG4gIHByb3RlY3RlZCBfZGlydHlDaGVja05hdGl2ZVZhbHVlKCkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERvZXMgc29tZSBtYW51YWwgZGlydHkgY2hlY2tpbmcgb24gdGhlIG5hdGl2ZSBpbnB1dCBgcGxhY2Vob2xkZXJgIGF0dHJpYnV0ZS4gKi9cbiAgcHJpdmF0ZSBfZGlydHlDaGVja1BsYWNlaG9sZGVyKCkge1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5fZ2V0UGxhY2Vob2xkZXIoKTtcbiAgICBpZiAocGxhY2Vob2xkZXIgIT09IHRoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXIpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICB0aGlzLl9wcmV2aW91c1BsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICBwbGFjZWhvbGRlclxuICAgICAgICA/IGVsZW1lbnQuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyKVxuICAgICAgICA6IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdwbGFjZWhvbGRlcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBjdXJyZW50IHBsYWNlaG9sZGVyIG9mIHRoZSBmb3JtIGZpZWxkLiAqL1xuICBwcm90ZWN0ZWQgX2dldFBsYWNlaG9sZGVyKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyIHx8IG51bGw7XG4gIH1cblxuICAvKiogTWFrZSBzdXJlIHRoZSBpbnB1dCBpcyBhIHN1cHBvcnRlZCB0eXBlLiAqL1xuICBwcm90ZWN0ZWQgX3ZhbGlkYXRlVHlwZSgpIHtcbiAgICBpZiAoXG4gICAgICBNQVRfSU5QVVRfSU5WQUxJRF9UWVBFUy5pbmRleE9mKHRoaXMuX3R5cGUpID4gLTEgJiZcbiAgICAgICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBnZXRNYXRJbnB1dFVuc3VwcG9ydGVkVHlwZUVycm9yKHRoaXMuX3R5cGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgaW5wdXQgdHlwZSBpcyBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgYXJlIG5ldmVyIGVtcHR5LiAqL1xuICBwcm90ZWN0ZWQgX2lzTmV2ZXJFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmV2ZXJFbXB0eUlucHV0VHlwZXMuaW5kZXhPZih0aGlzLl90eXBlKSA+IC0xO1xuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBpbnB1dCBpcyBpbnZhbGlkIGJhc2VkIG9uIHRoZSBuYXRpdmUgdmFsaWRhdGlvbi4gKi9cbiAgcHJvdGVjdGVkIF9pc0JhZElucHV0KCkge1xuICAgIC8vIFRoZSBgdmFsaWRpdHlgIHByb3BlcnR5IHdvbid0IGJlIHByZXNlbnQgb24gcGxhdGZvcm0tc2VydmVyLlxuICAgIGxldCB2YWxpZGl0eSA9ICh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsaWRpdHk7XG4gICAgcmV0dXJuIHZhbGlkaXR5ICYmIHZhbGlkaXR5LmJhZElucHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5faXNOZXZlckVtcHR5KCkgJiZcbiAgICAgICF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgJiZcbiAgICAgICF0aGlzLl9pc0JhZElucHV0KCkgJiZcbiAgICAgICF0aGlzLmF1dG9maWxsZWRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2lzTmF0aXZlU2VsZWN0KSB7XG4gICAgICAvLyBGb3IgYSBzaW5nbGUtc2VsZWN0aW9uIGA8c2VsZWN0PmAsIHRoZSBsYWJlbCBzaG91bGQgZmxvYXQgd2hlbiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGhhc1xuICAgICAgLy8gYSBub24tZW1wdHkgZGlzcGxheSB2YWx1ZS4gRm9yIGEgYDxzZWxlY3QgbXVsdGlwbGU+YCwgdGhlIGxhYmVsICphbHdheXMqIGZsb2F0cyB0byBhdm9pZFxuICAgICAgLy8gb3ZlcmxhcHBpbmcgdGhlIGxhYmVsIHdpdGggdGhlIG9wdGlvbnMuXG4gICAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgY29uc3QgZmlyc3RPcHRpb246IEhUTUxPcHRpb25FbGVtZW50IHwgdW5kZWZpbmVkID0gc2VsZWN0RWxlbWVudC5vcHRpb25zWzBdO1xuXG4gICAgICAvLyBPbiBtb3N0IGJyb3dzZXJzIHRoZSBgc2VsZWN0ZWRJbmRleGAgd2lsbCBhbHdheXMgYmUgMCwgaG93ZXZlciBvbiBJRSBhbmQgRWRnZSBpdCdsbCBiZVxuICAgICAgLy8gLTEgaWYgdGhlIGB2YWx1ZWAgaXMgc2V0IHRvIHNvbWV0aGluZywgdGhhdCBpc24ndCBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLCBhdCBhIGxhdGVyIHBvaW50LlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5mb2N1c2VkIHx8XG4gICAgICAgIHNlbGVjdEVsZW1lbnQubXVsdGlwbGUgfHxcbiAgICAgICAgIXRoaXMuZW1wdHkgfHxcbiAgICAgICAgISEoc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID4gLTEgJiYgZmlyc3RPcHRpb24gJiYgZmlyc3RPcHRpb24ubGFiZWwpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKHRoaXMuZm9jdXNlZCAmJiAhdGhpcy5kaXNhYmxlZCkgfHwgIXRoaXMuZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgIGlmIChpZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgaWRzLmpvaW4oJyAnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBvbkNvbnRhaW5lckNsaWNrKCkge1xuICAgIC8vIERvIG5vdCByZS1mb2N1cyB0aGUgaW5wdXQgZWxlbWVudCBpZiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGZvY3VzZWQuIE90aGVyd2lzZSBpdCBjYW4gaGFwcGVuXG4gICAgLy8gdGhhdCBzb21lb25lIGNsaWNrcyBvbiBhIHRpbWUgaW5wdXQgYW5kIHRoZSBjdXJzb3IgcmVzZXRzIHRvIHRoZSBcImhvdXJzXCIgZmllbGQgd2hpbGUgdGhlXG4gICAgLy8gXCJtaW51dGVzXCIgZmllbGQgd2FzIGFjdHVhbGx5IGNsaWNrZWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTI4NDlcbiAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBmb3JtIGNvbnRyb2wgaXMgYSBuYXRpdmUgc2VsZWN0IHRoYXQgaXMgZGlzcGxheWVkIGlubGluZS4gKi9cbiAgX2lzSW5saW5lU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgcmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0ICYmIChlbGVtZW50Lm11bHRpcGxlIHx8IGVsZW1lbnQuc2l6ZSA+IDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaU9TS2V5dXBMaXN0ZW5lciA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgLy8gTm90ZTogV2Ugc3BlY2lmaWNhbGx5IGNoZWNrIGZvciAwLCByYXRoZXIgdGhhbiBgIWVsLnNlbGVjdGlvblN0YXJ0YCwgYmVjYXVzZSB0aGUgdHdvXG4gICAgLy8gaW5kaWNhdGUgZGlmZmVyZW50IHRoaW5ncy4gSWYgdGhlIHZhbHVlIGlzIDAsIGl0IG1lYW5zIHRoYXQgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydFxuICAgIC8vIG9mIHRoZSBpbnB1dCwgd2hlcmVhcyBhIHZhbHVlIG9mIGBudWxsYCBtZWFucyB0aGF0IHRoZSBpbnB1dCBkb2Vzbid0IHN1cHBvcnRcbiAgICAvLyBtYW5pcHVsYXRpbmcgdGhlIHNlbGVjdGlvbiByYW5nZS4gSW5wdXRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gcmFuZ2VcbiAgICAvLyB3aWxsIHRocm93IGFuIGVycm9yIHNvIHdlIHdhbnQgdG8gYXZvaWQgY2FsbGluZyBgc2V0U2VsZWN0aW9uUmFuZ2VgIG9uIHRoZW0uIFNlZTpcbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbnB1dC5odG1sI2RvLW5vdC1hcHBseVxuICAgIGlmICghZWwudmFsdWUgJiYgZWwuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiYgZWwuc2VsZWN0aW9uRW5kID09PSAwKSB7XG4gICAgICAvLyBOb3RlOiBKdXN0IHNldHRpbmcgYDAsIDBgIGRvZXNuJ3QgZml4IHRoZSBpc3N1ZS4gU2V0dGluZ1xuICAgICAgLy8gYDEsIDFgIGZpeGVzIGl0IGZvciB0aGUgZmlyc3QgdGltZSB0aGF0IHlvdSB0eXBlIHRleHQgYW5kXG4gICAgICAvLyB0aGVuIGhvbGQgZGVsZXRlLiBUb2dnbGluZyB0byBgMSwgMWAgYW5kIHRoZW4gYmFjayB0b1xuICAgICAgLy8gYDAsIDBgIHNlZW1zIHRvIGNvbXBsZXRlbHkgZml4IGl0LlxuICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UoMSwgMSk7XG4gICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZSgwLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfd2Via2l0QmxpbmtXaGVlbExpc3RlbmVyID0gKCk6IHZvaWQgPT4ge1xuICAgIC8vIFRoaXMgaXMgYSBub29wIGZ1bmN0aW9uIGFuZCBpcyB1c2VkIHRvIGVuYWJsZSBtb3VzZSB3aGVlbCBpbnB1dFxuICAgIC8vIG9uIG51bWJlciBpbnB1dHNcbiAgICAvLyBvbiBibGluayBhbmQgd2Via2l0IGJyb3dzZXJzLlxuICB9O1xuXG4gIC8qKlxuICAgKiBJbiBibGluayBhbmQgd2Via2l0IGJyb3dzZXJzIGEgZm9jdXNlZCBudW1iZXIgaW5wdXQgZG9lcyBub3QgaW5jcmVtZW50IG9yIGRlY3JlbWVudCBpdHMgdmFsdWVcbiAgICogb24gbW91c2Ugd2hlZWwgaW50ZXJhY3Rpb24gdW5sZXNzIGEgd2hlZWwgZXZlbnQgbGlzdGVuZXIgaXMgYXR0YWNoZWQgdG8gaXQgb3Igb25lIG9mIGl0cyBhbmNlc3RvcnMgb3IgYSBwYXNzaXZlIHdoZWVsIGxpc3RlbmVyIGlzIGF0dGFjaGVkIHNvbWV3aGVyZSBpbiB0aGUgRE9NLlxuICAgKiBGb3IgZXhhbXBsZTogSGl0dGluZyBhIHRvb2x0aXAgb25jZSBlbmFibGVzIHRoZSBtb3VzZSB3aGVlbCBpbnB1dCBmb3IgYWxsIG51bWJlciBpbnB1dHMgYXMgbG9uZyBhcyBpdCBleGlzdHMuXG4gICAqIEluIG9yZGVyIHRvIGdldCByZWxpYWJsZSBhbmQgaW50dWl0aXZlIGJlaGF2aW9yIHdlIGFwcGx5IGEgd2hlZWwgZXZlbnQgb24gb3VyIG93blxuICAgKiB0aHVzIG1ha2luZyBzdXJlIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ5IG1vdXNlIHdoZWVsIHdvcmtzIGV2ZXJ5IHRpbWUuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2Vuc3VyZVdoZWVsRGVmYXVsdEJlaGF2aW9yKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl93ZWJraXRCbGlua1doZWVsTGlzdGVuZXJBdHRhY2hlZCAmJlxuICAgICAgdGhpcy5fdHlwZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICh0aGlzLl9wbGF0Zm9ybS5CTElOSyB8fCB0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpXG4gICAgKSB7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLl93ZWJraXRCbGlua1doZWVsTGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl93ZWJraXRCbGlua1doZWVsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3dlYmtpdEJsaW5rV2hlZWxMaXN0ZW5lckF0dGFjaGVkICYmIHRoaXMuX3R5cGUgIT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLl93ZWJraXRCbGlua1doZWVsTGlzdGVuZXIpO1xuICAgICAgdGhpcy5fd2Via2l0QmxpbmtXaGVlbExpc3RlbmVyQXR0YWNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIGByZWFkb25seWAgYXR0cmlidXRlLiAqL1xuICBwcm90ZWN0ZWQgX2dldFJlYWRvbmx5QXR0cmlidXRlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLl9pc05hdGl2ZVNlbGVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgKHRoaXMuZGlzYWJsZWQgJiYgdGhpcy5kaXNhYmxlZEludGVyYWN0aXZlKSkge1xuICAgICAgcmV0dXJuICd0cnVlJztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRfcHVibGljX2luZGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL2lucHV0L2lucHV0X3B1YmxpY19pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==