@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,14 +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
- /** @docs-private */
9
- export function createMissingDateImplError(provider) {
10
- return Error(`MatDatepicker: No provider found for ${provider}. You must add one of the following ` +
11
- `to your app config: provideNativeDateAdapter, provideDateFnsAdapter, ` +
12
- `provideLuxonDateAdapter, provideMomentDateAdapter, or provide a custom implementation.`);
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvZGF0ZXBpY2tlci9kYXRlcGlja2VyLWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxvQkFBb0I7QUFDcEIsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFFBQWdCO0lBQ3pELE9BQU8sS0FBSyxDQUNWLHdDQUF3QyxRQUFRLHNDQUFzQztRQUNwRix1RUFBdUU7UUFDdkUsd0ZBQXdGLENBQzNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IocHJvdmlkZXI6IHN0cmluZykge1xuICByZXR1cm4gRXJyb3IoXG4gICAgYE1hdERhdGVwaWNrZXI6IE5vIHByb3ZpZGVyIGZvdW5kIGZvciAke3Byb3ZpZGVyfS4gWW91IG11c3QgYWRkIG9uZSBvZiB0aGUgZm9sbG93aW5nIGAgK1xuICAgICAgYHRvIHlvdXIgYXBwIGNvbmZpZzogcHJvdmlkZU5hdGl2ZURhdGVBZGFwdGVyLCBwcm92aWRlRGF0ZUZuc0FkYXB0ZXIsIGAgK1xuICAgICAgYHByb3ZpZGVMdXhvbkRhdGVBZGFwdGVyLCBwcm92aWRlTW9tZW50RGF0ZUFkYXB0ZXIsIG9yIHByb3ZpZGUgYSBjdXN0b20gaW1wbGVtZW50YXRpb24uYCxcbiAgKTtcbn1cbiJdfQ==
@@ -1,311 +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 { DOWN_ARROW, hasModifierKey } from '@angular/cdk/keycodes';
9
- import { Directive, ElementRef, EventEmitter, Inject, Input, Optional, Output, booleanAttribute, } from '@angular/core';
10
- import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
11
- import { Subscription, Subject } from 'rxjs';
12
- import { createMissingDateImplError } from './datepicker-errors';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/material/core";
15
- /**
16
- * An event used for datepicker input and change events. We don't always have access to a native
17
- * input or change event because the event may have been triggered by the user clicking on the
18
- * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.
19
- */
20
- export class MatDatepickerInputEvent {
21
- constructor(
22
- /** Reference to the datepicker input component that emitted the event. */
23
- target,
24
- /** Reference to the native input element associated with the datepicker input. */
25
- targetElement) {
26
- this.target = target;
27
- this.targetElement = targetElement;
28
- this.value = this.target.value;
29
- }
30
- }
31
- /** Base class for datepicker inputs. */
32
- export class MatDatepickerInputBase {
33
- /** The value of the input. */
34
- get value() {
35
- return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;
36
- }
37
- set value(value) {
38
- this._assignValueProgrammatically(value);
39
- }
40
- /** Whether the datepicker-input is disabled. */
41
- get disabled() {
42
- return !!this._disabled || this._parentDisabled();
43
- }
44
- set disabled(value) {
45
- const newValue = value;
46
- const element = this._elementRef.nativeElement;
47
- if (this._disabled !== newValue) {
48
- this._disabled = newValue;
49
- this.stateChanges.next(undefined);
50
- }
51
- // We need to null check the `blur` method, because it's undefined during SSR.
52
- // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.
53
- // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the
54
- // element has been inserted.
55
- if (newValue && this._isInitialized && element.blur) {
56
- // Normally, native input elements automatically blur if they turn disabled. This behavior
57
- // is problematic, because it would mean that it triggers another change detection cycle,
58
- // which then causes a changed after checked error if the input element was focused before.
59
- element.blur();
60
- }
61
- }
62
- /** Gets the base validator functions. */
63
- _getValidators() {
64
- return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];
65
- }
66
- /** Registers a date selection model with the input. */
67
- _registerModel(model) {
68
- this._model = model;
69
- this._valueChangesSubscription.unsubscribe();
70
- if (this._pendingValue) {
71
- this._assignValue(this._pendingValue);
72
- }
73
- this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {
74
- if (this._shouldHandleChangeEvent(event)) {
75
- const value = this._getValueFromModel(event.selection);
76
- this._lastValueValid = this._isValidValue(value);
77
- this._cvaOnChange(value);
78
- this._onTouched();
79
- this._formatValue(value);
80
- this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
81
- this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
82
- }
83
- });
84
- }
85
- constructor(_elementRef, _dateAdapter, _dateFormats) {
86
- this._elementRef = _elementRef;
87
- this._dateAdapter = _dateAdapter;
88
- this._dateFormats = _dateFormats;
89
- /** Emits when a `change` event is fired on this `<input>`. */
90
- this.dateChange = new EventEmitter();
91
- /** Emits when an `input` event is fired on this `<input>`. */
92
- this.dateInput = new EventEmitter();
93
- /** Emits when the internal state has changed */
94
- this.stateChanges = new Subject();
95
- this._onTouched = () => { };
96
- this._validatorOnChange = () => { };
97
- this._cvaOnChange = () => { };
98
- this._valueChangesSubscription = Subscription.EMPTY;
99
- this._localeSubscription = Subscription.EMPTY;
100
- /** The form control validator for whether the input parses. */
101
- this._parseValidator = () => {
102
- return this._lastValueValid
103
- ? null
104
- : { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };
105
- };
106
- /** The form control validator for the date filter. */
107
- this._filterValidator = (control) => {
108
- const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
109
- return !controlValue || this._matchesFilter(controlValue)
110
- ? null
111
- : { 'matDatepickerFilter': true };
112
- };
113
- /** The form control validator for the min date. */
114
- this._minValidator = (control) => {
115
- const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
116
- const min = this._getMinDate();
117
- return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0
118
- ? null
119
- : { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };
120
- };
121
- /** The form control validator for the max date. */
122
- this._maxValidator = (control) => {
123
- const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
124
- const max = this._getMaxDate();
125
- return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0
126
- ? null
127
- : { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };
128
- };
129
- /** Whether the last value set on the input was valid. */
130
- this._lastValueValid = false;
131
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
132
- if (!this._dateAdapter) {
133
- throw createMissingDateImplError('DateAdapter');
134
- }
135
- if (!this._dateFormats) {
136
- throw createMissingDateImplError('MAT_DATE_FORMATS');
137
- }
138
- }
139
- // Update the displayed date when the locale changes.
140
- this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {
141
- this._assignValueProgrammatically(this.value);
142
- });
143
- }
144
- ngAfterViewInit() {
145
- this._isInitialized = true;
146
- }
147
- ngOnChanges(changes) {
148
- if (dateInputsHaveChanged(changes, this._dateAdapter)) {
149
- this.stateChanges.next(undefined);
150
- }
151
- }
152
- ngOnDestroy() {
153
- this._valueChangesSubscription.unsubscribe();
154
- this._localeSubscription.unsubscribe();
155
- this.stateChanges.complete();
156
- }
157
- /** @docs-private */
158
- registerOnValidatorChange(fn) {
159
- this._validatorOnChange = fn;
160
- }
161
- /** @docs-private */
162
- validate(c) {
163
- return this._validator ? this._validator(c) : null;
164
- }
165
- // Implemented as part of ControlValueAccessor.
166
- writeValue(value) {
167
- this._assignValueProgrammatically(value);
168
- }
169
- // Implemented as part of ControlValueAccessor.
170
- registerOnChange(fn) {
171
- this._cvaOnChange = fn;
172
- }
173
- // Implemented as part of ControlValueAccessor.
174
- registerOnTouched(fn) {
175
- this._onTouched = fn;
176
- }
177
- // Implemented as part of ControlValueAccessor.
178
- setDisabledState(isDisabled) {
179
- this.disabled = isDisabled;
180
- }
181
- _onKeydown(event) {
182
- const ctrlShiftMetaModifiers = ['ctrlKey', 'shiftKey', 'metaKey'];
183
- const isAltDownArrow = hasModifierKey(event, 'altKey') &&
184
- event.keyCode === DOWN_ARROW &&
185
- ctrlShiftMetaModifiers.every((modifier) => !hasModifierKey(event, modifier));
186
- if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {
187
- this._openPopup();
188
- event.preventDefault();
189
- }
190
- }
191
- _onInput(value) {
192
- const lastValueWasValid = this._lastValueValid;
193
- let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);
194
- this._lastValueValid = this._isValidValue(date);
195
- date = this._dateAdapter.getValidDateOrNull(date);
196
- const hasChanged = !this._dateAdapter.sameDate(date, this.value);
197
- // We need to fire the CVA change event for all
198
- // nulls, otherwise the validators won't run.
199
- if (!date || hasChanged) {
200
- this._cvaOnChange(date);
201
- }
202
- else {
203
- // Call the CVA change handler for invalid values
204
- // since this is what marks the control as dirty.
205
- if (value && !this.value) {
206
- this._cvaOnChange(date);
207
- }
208
- if (lastValueWasValid !== this._lastValueValid) {
209
- this._validatorOnChange();
210
- }
211
- }
212
- if (hasChanged) {
213
- this._assignValue(date);
214
- this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
215
- }
216
- }
217
- _onChange() {
218
- this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
219
- }
220
- /** Handles blur events on the input. */
221
- _onBlur() {
222
- // Reformat the input only if we have a valid value.
223
- if (this.value) {
224
- this._formatValue(this.value);
225
- }
226
- this._onTouched();
227
- }
228
- /** Formats a value and sets it on the input element. */
229
- _formatValue(value) {
230
- this._elementRef.nativeElement.value =
231
- value != null ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';
232
- }
233
- /** Assigns a value to the model. */
234
- _assignValue(value) {
235
- // We may get some incoming values before the model was
236
- // assigned. Save the value so that we can assign it later.
237
- if (this._model) {
238
- this._assignValueToModel(value);
239
- this._pendingValue = null;
240
- }
241
- else {
242
- this._pendingValue = value;
243
- }
244
- }
245
- /** Whether a value is considered valid. */
246
- _isValidValue(value) {
247
- return !value || this._dateAdapter.isValid(value);
248
- }
249
- /**
250
- * Checks whether a parent control is disabled. This is in place so that it can be overridden
251
- * by inputs extending this one which can be placed inside of a group that can be disabled.
252
- */
253
- _parentDisabled() {
254
- return false;
255
- }
256
- /** Programmatically assigns a value to the input. */
257
- _assignValueProgrammatically(value) {
258
- value = this._dateAdapter.deserialize(value);
259
- this._lastValueValid = this._isValidValue(value);
260
- value = this._dateAdapter.getValidDateOrNull(value);
261
- this._assignValue(value);
262
- this._formatValue(value);
263
- }
264
- /** Gets whether a value matches the current date filter. */
265
- _matchesFilter(value) {
266
- const filter = this._getDateFilter();
267
- return !filter || filter(value);
268
- }
269
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MatDatepickerInputBase, deps: [{ token: i0.ElementRef }, { token: i1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
270
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.0-next.2", type: MatDatepickerInputBase, isStandalone: true, inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { dateChange: "dateChange", dateInput: "dateInput" }, usesOnChanges: true, ngImport: i0 }); }
271
- }
272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MatDatepickerInputBase, decorators: [{
273
- type: Directive,
274
- args: [{ standalone: true }]
275
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DateAdapter, decorators: [{
276
- type: Optional
277
- }] }, { type: undefined, decorators: [{
278
- type: Optional
279
- }, {
280
- type: Inject,
281
- args: [MAT_DATE_FORMATS]
282
- }] }], propDecorators: { value: [{
283
- type: Input
284
- }], disabled: [{
285
- type: Input,
286
- args: [{ transform: booleanAttribute }]
287
- }], dateChange: [{
288
- type: Output
289
- }], dateInput: [{
290
- type: Output
291
- }] } });
292
- /**
293
- * Checks whether the `SimpleChanges` object from an `ngOnChanges`
294
- * callback has any changes, accounting for date objects.
295
- */
296
- export function dateInputsHaveChanged(changes, adapter) {
297
- const keys = Object.keys(changes);
298
- for (let key of keys) {
299
- const { previousValue, currentValue } = changes[key];
300
- if (adapter.isDateInstance(previousValue) && adapter.isDateInstance(currentValue)) {
301
- if (!adapter.sameDate(previousValue, currentValue)) {
302
- return true;
303
- }
304
- }
305
- else {
306
- return true;
307
- }
308
- }
309
- return false;
310
- }
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFJTixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBK0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRyxPQUFPLEVBQUMsWUFBWSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBTy9EOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDO0lBQ0UsMEVBQTBFO0lBQ25FLE1BQW9DO0lBQzNDLGtGQUFrRjtJQUMzRSxhQUEwQjtRQUYxQixXQUFNLEdBQU4sTUFBTSxDQUE4QjtRQUVwQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYTtRQUVqQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQXVCRCx3Q0FBd0M7QUFFeEMsTUFBTSxPQUFnQixzQkFBc0I7SUFNMUMsOEJBQThCO0lBQzlCLElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FB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YUFBYSxFQUFFLFlBQVksRUFBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtET1dOX0FSUk9XLCBoYXNNb2RpZmllcktleSwgTW9kaWZpZXJLZXl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBBZnRlclZpZXdJbml0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxuICBWYWxpZGF0b3JGbixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTWF0RGF0ZUZvcm1hdHMsIFRoZW1lUGFsZXR0ZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbiwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NyZWF0ZU1pc3NpbmdEYXRlSW1wbEVycm9yfSBmcm9tICcuL2RhdGVwaWNrZXItZXJyb3JzJztcbmltcG9ydCB7XG4gIEV4dHJhY3REYXRlVHlwZUZyb21TZWxlY3Rpb24sXG4gIE1hdERhdGVTZWxlY3Rpb25Nb2RlbCxcbiAgRGF0ZVNlbGVjdGlvbk1vZGVsQ2hhbmdlLFxufSBmcm9tICcuL2RhdGUtc2VsZWN0aW9uLW1vZGVsJztcblxuLyoqXG4gKiBBbiBldmVudCB1c2VkIGZvciBkYXRlcGlja2VyIGlucHV0IGFuZCBjaGFuZ2UgZXZlbnRzLiBXZSBkb24ndCBhbHdheXMgaGF2ZSBhY2Nlc3MgdG8gYSBuYXRpdmVcbiAqIGlucHV0IG9yIGNoYW5nZSBldmVudCBiZWNhdXNlIHRoZSBldmVudCBtYXkgaGF2ZSBiZWVuIHRyaWdnZXJlZCBieSB0aGUgdXNlciBjbGlja2luZyBvbiB0aGVcbiAqIGNhbGVuZGFyIHBvcHVwLiBGb3IgY29uc2lzdGVuY3ksIHdlIGFsd2F5cyB1c2UgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PEQsIFMgPSB1bmtub3duPiB7XG4gIC8qKiBUaGUgbmV3IHZhbHVlIGZvciB0aGUgdGFyZ2V0IGRhdGVwaWNrZXIgaW5wdXQuICovXG4gIHZhbHVlOiBEIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvKiogUmVmZXJlbmNlIHRvIHRoZSBkYXRlcGlja2VyIGlucHV0IGNvbXBvbmVudCB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LiAqL1xuICAgIHB1YmxpYyB0YXJnZXQ6IE1hdERhdGVwaWNrZXJJbnB1dEJhc2U8UywgRD4sXG4gICAgLyoqIFJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlcGlja2VyIGlucHV0LiAqL1xuICAgIHB1YmxpYyB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMudGFyZ2V0LnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgb3V0IGRhdGVzIGZyb20gYSBjYWxlbmRhci5cbiAqIERhdGVwaWNrZXIgY2FuIHNvbWV0aW1lcyByZWNlaXZlIGEgbnVsbCB2YWx1ZSBhcyBpbnB1dCBmb3IgdGhlIGRhdGUgYXJndW1lbnQuXG4gKiBUaGlzIGRvZXNuJ3QgcmVwcmVzZW50IGEgXCJudWxsIGRhdGVcIiBidXQgcmF0aGVyIHNpZ25pZmllcyB0aGF0IG5vIGRhdGUgaGFzIGJlZW4gc2VsZWN0ZWQgeWV0IGluIHRoZSBjYWxlbmRhci5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0ZUZpbHRlckZuPEQ+ID0gKGRhdGU6IEQgfCBudWxsKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFBhcnRpYWwgcmVwcmVzZW50YXRpb24gb2YgYE1hdEZvcm1GaWVsZGAgdGhhdCBpcyB1c2VkIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eVxuICogYmV0d2VlbiB0aGUgbGVnYWN5IGFuZCBub24tbGVnYWN5IHZhcmlhbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9NYXRGb3JtRmllbGRQYXJ0aWFsIHtcbiAgZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOiBFbGVtZW50UmVmO1xuICBnZXRMYWJlbElkKCk6IHN0cmluZyB8IG51bGw7XG4gIGNvbG9yOiBUaGVtZVBhbGV0dGU7XG4gIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBfc2hvdWxkTGFiZWxGbG9hdCgpOiBib29sZWFuO1xuICBfaGFzRmxvYXRpbmdMYWJlbCgpOiBib29sZWFuO1xuICBfbGFiZWxJZDogc3RyaW5nO1xufVxuXG4vKiogQmFzZSBjbGFzcyBmb3IgZGF0ZXBpY2tlciBpbnB1dHMuICovXG5ARGlyZWN0aXZlKHtzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNYXREYXRlcGlja2VySW5wdXRCYXNlPFMsIEQgPSBFeHRyYWN0RGF0ZVR5cGVGcm9tU2VsZWN0aW9uPFM+PlxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgVmFsaWRhdG9yXG57XG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICovXG4gIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG5cbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQuICovXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBEIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsID8gdGhpcy5fZ2V0VmFsdWVGcm9tTW9kZWwodGhpcy5fbW9kZWwuc2VsZWN0aW9uKSA6IHRoaXMuX3BlbmRpbmdWYWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX2Fzc2lnblZhbHVlUHJvZ3JhbW1hdGljYWxseSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIF9tb2RlbDogTWF0RGF0ZVNlbGVjdGlvbk1vZGVsPFMsIEQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBkYXRlcGlja2VyLWlucHV0IGlzIGRpc2FibGVkLiAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9kaXNhYmxlZCB8fCB0aGlzLl9wYXJlbnREaXNhYmxlZCgpO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWU7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9kaXNhYmxlZCAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byBudWxsIGNoZWNrIHRoZSBgYmx1cmAgbWV0aG9kLCBiZWNhdXNlIGl0J3MgdW5kZWZpbmVkIGR1cmluZyBTU1IuXG4gICAgLy8gSW4gSXZ5IHN0YXRpYyBiaW5kaW5ncyBhcmUgaW52b2tlZCBlYXJsaWVyLCBiZWZvcmUgdGhlIGVsZW1lbnQgaXMgYXR0YWNoZWQgdG8gdGhlIERPTS5cbiAgICAvLyBUaGlzIGNhbiBjYXVzZSBhbiBlcnJvciB0byBiZSB0aHJvd24gaW4gc29tZSBicm93c2VycyAoSUUvRWRnZSkgd2hpY2ggYXNzZXJ0IHRoYXQgdGhlXG4gICAgLy8gZWxlbWVudCBoYXMgYmVlbiBpbnNlcnRlZC5cbiAgICBpZiAobmV3VmFsdWUgJiYgdGhpcy5faXNJbml0aWFsaXplZCAmJiBlbGVtZW50LmJsdXIpIHtcbiAgICAgIC8vIE5vcm1hbGx5LCBuYXRpdmUgaW5wdXQgZWxlbWVudHMgYXV0b21hdGljYWxseSBibHVyIGlmIHRoZXkgdHVybiBkaXNhYmxlZC4gVGhpcyBiZWhhdmlvclxuICAgICAgLy8gaXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgaXQgd291bGQgbWVhbiB0aGF0IGl0IHRyaWdnZXJzIGFub3RoZXIgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSxcbiAgICAgIC8vIHdoaWNoIHRoZW4gY2F1c2VzIGEgY2hhbmdlZCBhZnRlciBjaGVja2VkIGVycm9yIGlmIHRoZSBpbnB1dCBlbGVtZW50IHdhcyBmb2N1c2VkIGJlZm9yZS5cbiAgICAgIGVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKiogRW1pdHMgd2hlbiBhIGBjaGFuZ2VgIGV2ZW50IGlzIGZpcmVkIG9uIHRoaXMgYDxpbnB1dD5gLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PEQsIFM+PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RCwgUz5cbiAgPigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIGFuIGBpbnB1dGAgZXZlbnQgaXMgZmlyZWQgb24gdGhpcyBgPGlucHV0PmAuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBkYXRlSW5wdXQ6IEV2ZW50RW1pdHRlcjxNYXREYXRlcGlja2VySW5wdXRFdmVudDxELCBTPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PEQsIFM+XG4gID4oKTtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgaW50ZXJuYWwgc3RhdGUgaGFzIGNoYW5nZWQgKi9cbiAgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBfb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIF92YWxpZGF0b3JPbkNoYW5nZSA9ICgpID0+IHt9O1xuXG4gIHByaXZhdGUgX2N2YU9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIF92YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2xvY2FsZVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAvKipcbiAgICogU2luY2UgdGhlIHZhbHVlIGlzIGtlcHQgb24gdGhlIG1vZGVsIHdoaWNoIGlzIGFzc2lnbmVkIGluIGFuIElucHV0LFxuICAgKiB3ZSBtaWdodCBnZXQgYSB2YWx1ZSBiZWZvcmUgd2UgaGF2ZSBhIG1vZGVsLiBUaGlzIHByb3BlcnR5IGtlZXBzIHRyYWNrXG4gICAqIG9mIHRoZSB2YWx1ZSB1bnRpbCB3ZSBoYXZlIHNvbWV3aGVyZSB0byBhc3NpZ24gaXQuXG4gICAqL1xuICBwcml2YXRlIF9wZW5kaW5nVmFsdWU6IEQgfCBudWxsO1xuXG4gIC8qKiBUaGUgZm9ybSBjb250cm9sIHZhbGlkYXRvciBmb3Igd2hldGhlciB0aGUgaW5wdXQgcGFyc2VzLiAqL1xuICBwcml2YXRlIF9wYXJzZVZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIHJldHVybiB0aGlzLl9sYXN0VmFsdWVWYWxpZFxuICAgICAgPyBudWxsXG4gICAgICA6IHsnbWF0RGF0ZXBpY2tlclBhcnNlJzogeyd0ZXh0JzogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfX07XG4gIH07XG5cbiAgLyoqIFRoZSBmb3JtIGNvbnRyb2wgdmFsaWRhdG9yIGZvciB0aGUgZGF0ZSBmaWx0ZXIuICovXG4gIHByaXZhdGUgX2ZpbHRlclZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGNvbnRyb2wudmFsdWUpLFxuICAgICk7XG4gICAgcmV0dXJuICFjb250cm9sVmFsdWUgfHwgdGhpcy5fbWF0Y2hlc0ZpbHRlcihjb250cm9sVmFsdWUpXG4gICAgICA/IG51bGxcbiAgICAgIDogeydtYXREYXRlcGlja2VyRmlsdGVyJzogdHJ1ZX07XG4gIH07XG5cbiAgLyoqIFRoZSBmb3JtIGNvbnRyb2wgdmFsaWRhdG9yIGZvciB0aGUgbWluIGRhdGUuICovXG4gIHByaXZhdGUgX21pblZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGNvbnRyb2wudmFsdWUpLFxuICAgICk7XG4gICAgY29uc3QgbWluID0gdGhpcy5fZ2V0TWluRGF0ZSgpO1xuICAgIHJldHVybiAhbWluIHx8ICFjb250cm9sVmFsdWUgfHwgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUobWluLCBjb250cm9sVmFsdWUpIDw9IDBcbiAgICAgID8gbnVsbFxuICAgICAgOiB7J21hdERhdGVwaWNrZXJNaW4nOiB7J21pbic6IG1pbiwgJ2FjdHVhbCc6IGNvbnRyb2xWYWx1ZX19O1xuICB9O1xuXG4gIC8qKiBUaGUgZm9ybSBjb250cm9sIHZhbGlkYXRvciBmb3IgdGhlIG1heCBkYXRlLiAqL1xuICBwcml2YXRlIF9tYXhWYWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShjb250cm9sLnZhbHVlKSxcbiAgICApO1xuICAgIGNvbnN0IG1heCA9IHRoaXMuX2dldE1heERhdGUoKTtcbiAgICByZXR1cm4gIW1heCB8fCAhY29udHJvbFZhbHVlIHx8IHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKG1heCwgY29udHJvbFZhbHVlKSA+PSAwXG4gICAgICA/IG51bGxcbiAgICAgIDogeydtYXREYXRlcGlja2VyTWF4JzogeydtYXgnOiBtYXgsICdhY3R1YWwnOiBjb250cm9sVmFsdWV9fTtcbiAgfTtcblxuICAvKiogR2V0cyB0aGUgYmFzZSB2YWxpZGF0b3IgZnVuY3Rpb25zLiAqL1xuICBwcm90ZWN0ZWQgX2dldFZhbGlkYXRvcnMoKTogVmFsaWRhdG9yRm5bXSB7XG4gICAgcmV0dXJuIFt0aGlzLl9wYXJzZVZhbGlkYXRvciwgdGhpcy5fbWluVmFsaWRhdG9yLCB0aGlzLl9tYXhWYWxpZGF0b3IsIHRoaXMuX2ZpbHRlclZhbGlkYXRvcl07XG4gIH1cblxuICAvKiogR2V0cyB0aGUgbWluaW11bSBkYXRlIGZvciB0aGUgaW5wdXQuIFVzZWQgZm9yIHZhbGlkYXRpb24uICovXG4gIGFic3RyYWN0IF9nZXRNaW5EYXRlKCk6IEQgfCBudWxsO1xuXG4gIC8qKiBHZXRzIHRoZSBtYXhpbXVtIGRhdGUgZm9yIHRoZSBpbnB1dC4gVXNlZCBmb3IgdmFsaWRhdGlvbi4gKi9cbiAgYWJzdHJhY3QgX2dldE1heERhdGUoKTogRCB8IG51bGw7XG5cbiAgLyoqIEdldHMgdGhlIGRhdGUgZmlsdGVyIGZ1bmN0aW9uLiBVc2VkIGZvciB2YWxpZGF0aW9uLiAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2dldERhdGVGaWx0ZXIoKTogRGF0ZUZpbHRlckZuPEQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBSZWdpc3RlcnMgYSBkYXRlIHNlbGVjdGlvbiBtb2RlbCB3aXRoIHRoZSBpbnB1dC4gKi9cbiAgX3JlZ2lzdGVyTW9kZWwobW9kZWw6IE1hdERhdGVTZWxlY3Rpb25Nb2RlbDxTLCBEPik6IHZvaWQge1xuICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5fdmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy5fcGVuZGluZ1ZhbHVlKSB7XG4gICAgICB0aGlzLl9hc3NpZ25WYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuX21vZGVsLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLl9zaG91bGRIYW5kbGVDaGFuZ2VFdmVudChldmVudCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21Nb2RlbChldmVudC5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLl9sYXN0VmFsdWVWYWxpZCA9IHRoaXMuX2lzVmFsaWRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2N2YU9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuX2Zvcm1hdFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXQuZW1pdChuZXcgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQodGhpcywgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSk7XG4gICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG5ldyBNYXREYXRlcGlja2VySW5wdXRFdmVudCh0aGlzLCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBPcGVucyB0aGUgcG9wdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dC4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IF9vcGVuUG9wdXAoKTogdm9pZDtcblxuICAvKiogQXNzaWducyBhIHZhbHVlIHRvIHRoZSBpbnB1dCdzIG1vZGVsLiAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2Fzc2lnblZhbHVlVG9Nb2RlbChtb2RlbDogRCB8IG51bGwpOiB2b2lkO1xuXG4gIC8qKiBDb252ZXJ0cyBhIHZhbHVlIGZyb20gdGhlIG1vZGVsIGludG8gYSBuYXRpdmUgdmFsdWUgZm9yIHRoZSBpbnB1dC4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IF9nZXRWYWx1ZUZyb21Nb2RlbChtb2RlbFZhbHVlOiBTKTogRCB8IG51bGw7XG5cbiAgLyoqIENvbWJpbmVkIGZvcm0gY29udHJvbCB2YWxpZGF0b3IgZm9yIHRoaXMgaW5wdXQuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfdmFsaWRhdG9yOiBWYWxpZGF0b3JGbiB8IG51bGw7XG5cbiAgLyoqIFByZWRpY2F0ZSB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgaW5wdXQgc2hvdWxkIGhhbmRsZSBhIHBhcnRpY3VsYXIgY2hhbmdlIGV2ZW50LiAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX3Nob3VsZEhhbmRsZUNoYW5nZUV2ZW50KGV2ZW50OiBEYXRlU2VsZWN0aW9uTW9kZWxDaGFuZ2U8Uz4pOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBsYXN0IHZhbHVlIHNldCBvbiB0aGUgaW5wdXQgd2FzIHZhbGlkLiAqL1xuICBwcm90ZWN0ZWQgX2xhc3RWYWx1ZVZhbGlkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPEQ+LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RBVEVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZUZvcm1hdHM6IE1hdERhdGVGb3JtYXRzLFxuICApIHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGVBZGFwdGVyKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbEVycm9yKCdEYXRlQWRhcHRlcicpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9kYXRlRm9ybWF0cykge1xuICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxFcnJvcignTUFUX0RBVEVfRk9STUFUUycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZGlzcGxheWVkIGRhdGUgd2hlbiB0aGUgbG9jYWxlIGNoYW5nZXMuXG4gICAgdGhpcy5fbG9jYWxlU3Vic2NyaXB0aW9uID0gX2RhdGVBZGFwdGVyLmxvY2FsZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX2Fzc2lnblZhbHVlUHJvZ3JhbW1hdGljYWxseSh0aGlzLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoZGF0ZUlucHV0c0hhdmVDaGFuZ2VkKGNoYW5nZXMsIHRoaXMuX2RhdGVBZGFwdGVyKSkge1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2xvY2FsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsaWRhdG9yT25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKiBAZG9jcy1wcml2YXRlICovXG4gIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yID8gdGhpcy5fdmFsaWRhdG9yKGMpIDogbnVsbDtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHdyaXRlVmFsdWUodmFsdWU6IEQpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NpZ25WYWx1ZVByb2dyYW1tYXRpY2FsbHkodmFsdWUpO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9jdmFPbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgX29uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGN0cmxTaGlmdE1ldGFNb2RpZmllcnM6IE1vZGlmaWVyS2V5W10gPSBbJ2N0cmxLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddO1xuICAgIGNvbnN0IGlzQWx0RG93bkFycm93ID1cbiAgICAgIGhhc01vZGlmaWVyS2V5KGV2ZW50LCAnYWx0S2V5JykgJiZcbiAgICAgIGV2ZW50LmtleUNvZGUgPT09IERPV05fQVJST1cgJiZcbiAgICAgIGN0cmxTaGlmdE1ldGFNb2RpZmllcnMuZXZlcnkoKG1vZGlmaWVyOiBNb2RpZmllcktleSkgPT4gIWhhc01vZGlmaWVyS2V5KGV2ZW50LCBtb2RpZmllcikpO1xuXG4gICAgaWYgKGlzQWx0RG93bkFycm93ICYmICF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVhZE9ubHkpIHtcbiAgICAgIHRoaXMuX29wZW5Qb3B1cCgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBfb25JbnB1dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbGFzdFZhbHVlV2FzVmFsaWQgPSB0aGlzLl9sYXN0VmFsdWVWYWxpZDtcbiAgICBsZXQgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnBhcnNlKHZhbHVlLCB0aGlzLl9kYXRlRm9ybWF0cy5wYXJzZS5kYXRlSW5wdXQpO1xuICAgIHRoaXMuX2xhc3RWYWx1ZVZhbGlkID0gdGhpcy5faXNWYWxpZFZhbHVlKGRhdGUpO1xuICAgIGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwoZGF0ZSk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9ICF0aGlzLl9kYXRlQWRhcHRlci5zYW1lRGF0ZShkYXRlLCB0aGlzLnZhbHVlKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gZmlyZSB0aGUgQ1ZBIGNoYW5nZSBldmVudCBmb3IgYWxsXG4gICAgLy8gbnVsbHMsIG90aGVyd2lzZSB0aGUgdmFsaWRhdG9ycyB3b24ndCBydW4uXG4gICAgaWYgKCFkYXRlIHx8IGhhc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuX2N2YU9uQ2hhbmdlKGRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYWxsIHRoZSBDVkEgY2hhbmdlIGhhbmRsZXIgZm9yIGludmFsaWQgdmFsdWVzXG4gICAgICAvLyBzaW5jZSB0aGlzIGlzIHdoYXQgbWFya3MgdGhlIGNvbnRyb2wgYXMgZGlydHkuXG4gICAgICBpZiAodmFsdWUgJiYgIXRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5fY3ZhT25DaGFuZ2UoZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0VmFsdWVXYXNWYWxpZCAhPT0gdGhpcy5fbGFzdFZhbHVlVmFsaWQpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yT25DaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5fYXNzaWduVmFsdWUoZGF0ZSk7XG4gICAgICB0aGlzLmRhdGVJbnB1dC5lbWl0KG5ldyBNYXREYXRlcGlja2VySW5wdXRFdmVudCh0aGlzLCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKTtcbiAgICB9XG4gIH1cblxuICBfb25DaGFuZ2UoKSB7XG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQobmV3IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50KHRoaXMsIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgYmx1ciBldmVudHMgb24gdGhlIGlucHV0LiAqL1xuICBfb25CbHVyKCkge1xuICAgIC8vIFJlZm9ybWF0IHRoZSBpbnB1dCBvbmx5IGlmIHdlIGhhdmUgYSB2YWxpZCB2YWx1ZS5cbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5fZm9ybWF0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gIH1cblxuICAvKiogRm9ybWF0cyBhIHZhbHVlIGFuZCBzZXRzIGl0IG9uIHRoZSBpbnB1dCBlbGVtZW50LiAqL1xuICBwcm90ZWN0ZWQgX2Zvcm1hdFZhbHVlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9XG4gICAgICB2YWx1ZSAhPSBudWxsID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZm9ybWF0KHZhbHVlLCB0aGlzLl9kYXRlRm9ybWF0cy5kaXNwbGF5LmRhdGVJbnB1dCkgOiAnJztcbiAgfVxuXG4gIC8qKiBBc3NpZ25zIGEgdmFsdWUgdG8gdGhlIG1vZGVsLiAqL1xuICBwcml2YXRlIF9hc3NpZ25WYWx1ZSh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICAvLyBXZSBtYXkgZ2V0IHNvbWUgaW5jb21pbmcgdmFsdWVzIGJlZm9yZSB0aGUgbW9kZWwgd2FzXG4gICAgLy8gYXNzaWduZWQuIFNhdmUgdGhlIHZhbHVlIHNvIHRoYXQgd2UgY2FuIGFzc2lnbiBpdCBsYXRlci5cbiAgICBpZiAodGhpcy5fbW9kZWwpIHtcbiAgICAgIHRoaXMuX2Fzc2lnblZhbHVlVG9Nb2RlbCh2YWx1ZSk7XG4gICAgICB0aGlzLl9wZW5kaW5nVmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wZW5kaW5nVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hldGhlciBhIHZhbHVlIGlzIGNvbnNpZGVyZWQgdmFsaWQuICovXG4gIHByaXZhdGUgX2lzVmFsaWRWYWx1ZSh2YWx1ZTogRCB8IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXZhbHVlIHx8IHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgcGFyZW50IGNvbnRyb2wgaXMgZGlzYWJsZWQuIFRoaXMgaXMgaW4gcGxhY2Ugc28gdGhhdCBpdCBjYW4gYmUgb3ZlcnJpZGRlblxuICAgKiBieSBpbnB1dHMgZXh0ZW5kaW5nIHRoaXMgb25lIHdoaWNoIGNhbiBiZSBwbGFjZWQgaW5zaWRlIG9mIGEgZ3JvdXAgdGhhdCBjYW4gYmUgZGlzYWJsZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3BhcmVudERpc2FibGVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBQcm9ncmFtbWF0aWNhbGx5IGFzc2lnbnMgYSB2YWx1ZSB0byB0aGUgaW5wdXQuICovXG4gIHByb3RlY3RlZCBfYXNzaWduVmFsdWVQcm9ncmFtbWF0aWNhbGx5KHZhbHVlOiBEIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIHRoaXMuX2xhc3RWYWx1ZVZhbGlkID0gdGhpcy5faXNWYWxpZFZhbHVlKHZhbHVlKTtcbiAgICB2YWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh2YWx1ZSk7XG4gICAgdGhpcy5fYXNzaWduVmFsdWUodmFsdWUpO1xuICAgIHRoaXMuX2Zvcm1hdFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHdoZXRoZXIgYSB2YWx1ZSBtYXRjaGVzIHRoZSBjdXJyZW50IGRhdGUgZmlsdGVyLiAqL1xuICBfbWF0Y2hlc0ZpbHRlcih2YWx1ZTogRCB8IG51bGwpOiBib29sZWFuIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLl9nZXREYXRlRmlsdGVyKCk7XG4gICAgcmV0dXJuICFmaWx0ZXIgfHwgZmlsdGVyKHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBgU2ltcGxlQ2hhbmdlc2Agb2JqZWN0IGZyb20gYW4gYG5nT25DaGFuZ2VzYFxuICogY2FsbGJhY2sgaGFzIGFueSBjaGFuZ2VzLCBhY2NvdW50aW5nIGZvciBkYXRlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRlSW5wdXRzSGF2ZUNoYW5nZWQoXG4gIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMsXG4gIGFkYXB0ZXI6IERhdGVBZGFwdGVyPHVua25vd24+LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjaGFuZ2VzKTtcblxuICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IHtwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWV9ID0gY2hhbmdlc1trZXldO1xuXG4gICAgaWYgKGFkYXB0ZXIuaXNEYXRlSW5zdGFuY2UocHJldmlvdXNWYWx1ZSkgJiYgYWRhcHRlci5pc0RhdGVJbnN0YW5jZShjdXJyZW50VmFsdWUpKSB7XG4gICAgICBpZiAoIWFkYXB0ZXIuc2FtZURhdGUocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
@@ -1,200 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { Directive, ElementRef, forwardRef, Inject, Input, Optional, signal, } from '@angular/core';
9
- import { NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
10
- import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
11
- import { MAT_FORM_FIELD } from '@angular/material/form-field';
12
- import { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';
13
- import { Subscription } from 'rxjs';
14
- import { MatDatepickerInputBase } from './datepicker-input-base';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/material/core";
17
- /** @docs-private */
18
- export const MAT_DATEPICKER_VALUE_ACCESSOR = {
19
- provide: NG_VALUE_ACCESSOR,
20
- useExisting: forwardRef(() => MatDatepickerInput),
21
- multi: true,
22
- };
23
- /** @docs-private */
24
- export const MAT_DATEPICKER_VALIDATORS = {
25
- provide: NG_VALIDATORS,
26
- useExisting: forwardRef(() => MatDatepickerInput),
27
- multi: true,
28
- };
29
- /** Directive used to connect an input to a MatDatepicker. */
30
- export class MatDatepickerInput extends MatDatepickerInputBase {
31
- /** The datepicker that this input is associated with. */
32
- set matDatepicker(datepicker) {
33
- if (datepicker) {
34
- this._datepicker = datepicker;
35
- this._ariaOwns.set(datepicker.opened ? datepicker.id : null);
36
- this._closedSubscription = datepicker.closedStream.subscribe(() => {
37
- this._onTouched();
38
- this._ariaOwns.set(null);
39
- });
40
- this._openedSubscription = datepicker.openedStream.subscribe(() => {
41
- this._ariaOwns.set(datepicker.id);
42
- });
43
- this._registerModel(datepicker.registerInput(this));
44
- }
45
- }
46
- /** The minimum valid date. */
47
- get min() {
48
- return this._min;
49
- }
50
- set min(value) {
51
- const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
52
- if (!this._dateAdapter.sameDate(validValue, this._min)) {
53
- this._min = validValue;
54
- this._validatorOnChange();
55
- }
56
- }
57
- /** The maximum valid date. */
58
- get max() {
59
- return this._max;
60
- }
61
- set max(value) {
62
- const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
63
- if (!this._dateAdapter.sameDate(validValue, this._max)) {
64
- this._max = validValue;
65
- this._validatorOnChange();
66
- }
67
- }
68
- /** Function that can be used to filter out dates within the datepicker. */
69
- get dateFilter() {
70
- return this._dateFilter;
71
- }
72
- set dateFilter(value) {
73
- const wasMatchingValue = this._matchesFilter(this.value);
74
- this._dateFilter = value;
75
- if (this._matchesFilter(this.value) !== wasMatchingValue) {
76
- this._validatorOnChange();
77
- }
78
- }
79
- constructor(elementRef, dateAdapter, dateFormats, _formField) {
80
- super(elementRef, dateAdapter, dateFormats);
81
- this._formField = _formField;
82
- this._closedSubscription = Subscription.EMPTY;
83
- this._openedSubscription = Subscription.EMPTY;
84
- /** The id of the panel owned by this input. */
85
- this._ariaOwns = signal(null);
86
- this._validator = Validators.compose(super._getValidators());
87
- }
88
- /**
89
- * Gets the element that the datepicker popup should be connected to.
90
- * @return The element to connect the popup to.
91
- */
92
- getConnectedOverlayOrigin() {
93
- return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;
94
- }
95
- /** Gets the ID of an element that should be used a description for the calendar overlay. */
96
- getOverlayLabelId() {
97
- if (this._formField) {
98
- return this._formField.getLabelId();
99
- }
100
- return this._elementRef.nativeElement.getAttribute('aria-labelledby');
101
- }
102
- /** Returns the palette used by the input's form field, if any. */
103
- getThemePalette() {
104
- return this._formField ? this._formField.color : undefined;
105
- }
106
- /** Gets the value at which the calendar should start. */
107
- getStartValue() {
108
- return this.value;
109
- }
110
- ngOnDestroy() {
111
- super.ngOnDestroy();
112
- this._closedSubscription.unsubscribe();
113
- this._openedSubscription.unsubscribe();
114
- }
115
- /** Opens the associated datepicker. */
116
- _openPopup() {
117
- if (this._datepicker) {
118
- this._datepicker.open();
119
- }
120
- }
121
- _getValueFromModel(modelValue) {
122
- return modelValue;
123
- }
124
- _assignValueToModel(value) {
125
- if (this._model) {
126
- this._model.updateSelection(value, this);
127
- }
128
- }
129
- /** Gets the input's minimum date. */
130
- _getMinDate() {
131
- return this._min;
132
- }
133
- /** Gets the input's maximum date. */
134
- _getMaxDate() {
135
- return this._max;
136
- }
137
- /** Gets the input's date filtering function. */
138
- _getDateFilter() {
139
- return this._dateFilter;
140
- }
141
- _shouldHandleChangeEvent(event) {
142
- return event.source !== this;
143
- }
144
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MatDatepickerInput, deps: [{ token: i0.ElementRef }, { token: i1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }, { token: MAT_FORM_FIELD, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
145
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0-next.2", type: MatDatepickerInput, isStandalone: true, selector: "input[matDatepicker]", inputs: { matDatepicker: "matDatepicker", min: "min", max: "max", dateFilter: ["matDatepickerFilter", "dateFilter"] }, host: { listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "blur": "_onBlur()", "keydown": "_onKeydown($event)" }, properties: { "attr.aria-haspopup": "_datepicker ? \"dialog\" : null", "attr.aria-owns": "_ariaOwns()", "attr.min": "min ? _dateAdapter.toIso8601(min) : null", "attr.max": "max ? _dateAdapter.toIso8601(max) : null", "attr.data-mat-calendar": "_datepicker ? _datepicker.id : null", "disabled": "disabled" }, classAttribute: "mat-datepicker-input" }, providers: [
146
- MAT_DATEPICKER_VALUE_ACCESSOR,
147
- MAT_DATEPICKER_VALIDATORS,
148
- { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },
149
- ], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 }); }
150
- }
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.2", ngImport: i0, type: MatDatepickerInput, decorators: [{
152
- type: Directive,
153
- args: [{
154
- selector: 'input[matDatepicker]',
155
- providers: [
156
- MAT_DATEPICKER_VALUE_ACCESSOR,
157
- MAT_DATEPICKER_VALIDATORS,
158
- { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },
159
- ],
160
- host: {
161
- 'class': 'mat-datepicker-input',
162
- '[attr.aria-haspopup]': '_datepicker ? "dialog" : null',
163
- '[attr.aria-owns]': '_ariaOwns()',
164
- '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',
165
- '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',
166
- // Used by the test harness to tie this input to its calendar. We can't depend on
167
- // `aria-owns` for this, because it's only defined while the calendar is open.
168
- '[attr.data-mat-calendar]': '_datepicker ? _datepicker.id : null',
169
- '[disabled]': 'disabled',
170
- '(input)': '_onInput($event.target.value)',
171
- '(change)': '_onChange()',
172
- '(blur)': '_onBlur()',
173
- '(keydown)': '_onKeydown($event)',
174
- },
175
- exportAs: 'matDatepickerInput',
176
- standalone: true,
177
- }]
178
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DateAdapter, decorators: [{
179
- type: Optional
180
- }] }, { type: undefined, decorators: [{
181
- type: Optional
182
- }, {
183
- type: Inject,
184
- args: [MAT_DATE_FORMATS]
185
- }] }, { type: undefined, decorators: [{
186
- type: Optional
187
- }, {
188
- type: Inject,
189
- args: [MAT_FORM_FIELD]
190
- }] }], propDecorators: { matDatepicker: [{
191
- type: Input
192
- }], min: [{
193
- type: Input
194
- }], max: [{
195
- type: Input
196
- }], dateFilter: [{
197
- type: Input,
198
- args: ['matDatepickerFilter']
199
- }] } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9kYXRlcGlja2VyL2RhdGVwaWNrZXItaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFlLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQStCLE1BQU0sd0JBQXdCLENBQUM7QUFDbkcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHbEMsT0FBTyxFQUFxQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDOzs7QUFFbkcsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFRO0lBQ2hELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztJQUNqRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQVE7SUFDNUMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztJQUNqRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRiw2REFBNkQ7QUEwQjdELE1BQU0sT0FB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b0JBQW9CLEVBQUM7cUJBQ3JFO29CQUNELElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsc0JBQXNCO3dCQUMvQixzQkFBc0IsRUFBRSwrQkFBK0I7d0JBQ3ZELGtCQUFrQixFQUFFLGFBQWE7d0JBQ2pDLFlBQVksRUFBRSwwQ0FBMEM7d0JBQ3hELFlBQVksRUFBRSwwQ0FBMEM7d0JBQ3hELGlGQUFpRjt3QkFDakYsOEVBQThFO3dCQUM5RSwwQkFBMEIsRUFBRSxxQ0FBcUM7d0JBQ2pFLFlBQVksRUFBRSxVQUFVO3dCQUN4QixTQUFTLEVBQUUsK0JBQStCO3dCQUMxQyxVQUFVLEVBQUUsYUFBYTt3QkFDekIsUUFBUSxFQUFFLFdBQVc7d0JBQ3JCLFdBQVcsRUFBRSxvQkFBb0I7cUJBQ2xDO29CQUNELFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBK0VJLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDbkMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjO3lDQXZFaEMsYUFBYTtzQkFEaEIsS0FBSztnQkFzQkYsR0FBRztzQkFETixLQUFLO2dCQWdCRixHQUFHO3NCQUROLEtBQUs7Z0JBZ0JGLFVBQVU7c0JBRGIsS0FBSzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RGF0ZUFkYXB0ZXIsIE1BVF9EQVRFX0ZPUk1BVFMsIE1hdERhdGVGb3JtYXRzLCBUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtNQVRfRk9STV9GSUVMRH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge01BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEYXRlU2VsZWN0aW9uTW9kZWxDaGFuZ2V9IGZyb20gJy4vZGF0ZS1zZWxlY3Rpb24tbW9kZWwnO1xuaW1wb3J0IHtNYXREYXRlcGlja2VyQ29udHJvbCwgTWF0RGF0ZXBpY2tlclBhbmVsfSBmcm9tICcuL2RhdGVwaWNrZXItYmFzZSc7XG5pbXBvcnQge19NYXRGb3JtRmllbGRQYXJ0aWFsLCBEYXRlRmlsdGVyRm4sIE1hdERhdGVwaWNrZXJJbnB1dEJhc2V9IGZyb20gJy4vZGF0ZXBpY2tlci1pbnB1dC1iYXNlJztcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBNQVRfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RGF0ZXBpY2tlcklucHV0KSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IE1BVF9EQVRFUElDS0VSX1ZBTElEQVRPUlM6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RGF0ZXBpY2tlcklucHV0KSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG4vKiogRGlyZWN0aXZlIHVzZWQgdG8gY29ubmVjdCBhbiBpbnB1dCB0byBhIE1hdERhdGVwaWNrZXIuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbnB1dFttYXREYXRlcGlja2VyXScsXG4gIHByb3ZpZGVyczogW1xuICAgIE1BVF9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SLFxuICAgIE1BVF9EQVRFUElDS0VSX1ZBTElEQVRPUlMsXG4gICAge3Byb3ZpZGU6IE1BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IE1hdERhdGVwaWNrZXJJbnB1dH0sXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbWF0LWRhdGVwaWNrZXItaW5wdXQnLFxuICAgICdbYXR0ci5hcmlhLWhhc3BvcHVwXSc6ICdfZGF0ZXBpY2tlciA/IFwiZGlhbG9nXCIgOiBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1vd25zXSc6ICdfYXJpYU93bnMoKScsXG4gICAgJ1thdHRyLm1pbl0nOiAnbWluID8gX2RhdGVBZGFwdGVyLnRvSXNvODYwMShtaW4pIDogbnVsbCcsXG4gICAgJ1thdHRyLm1heF0nOiAnbWF4ID8gX2RhdGVBZGFwdGVyLnRvSXNvODYwMShtYXgpIDogbnVsbCcsXG4gICAgLy8gVXNlZCBieSB0aGUgdGVzdCBoYXJuZXNzIHRvIHRpZSB0aGlzIGlucHV0IHRvIGl0cyBjYWxlbmRhci4gV2UgY2FuJ3QgZGVwZW5kIG9uXG4gICAgLy8gYGFyaWEtb3duc2AgZm9yIHRoaXMsIGJlY2F1c2UgaXQncyBvbmx5IGRlZmluZWQgd2hpbGUgdGhlIGNhbGVuZGFyIGlzIG9wZW4uXG4gICAgJ1thdHRyLmRhdGEtbWF0LWNhbGVuZGFyXSc6ICdfZGF0ZXBpY2tlciA/IF9kYXRlcGlja2VyLmlkIDogbnVsbCcsXG4gICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICcoaW5wdXQpJzogJ19vbklucHV0KCRldmVudC50YXJnZXQudmFsdWUpJyxcbiAgICAnKGNoYW5nZSknOiAnX29uQ2hhbmdlKCknLFxuICAgICcoYmx1ciknOiAnX29uQmx1cigpJyxcbiAgICAnKGtleWRvd24pJzogJ19vbktleWRvd24oJGV2ZW50KScsXG4gIH0sXG4gIGV4cG9ydEFzOiAnbWF0RGF0ZXBpY2tlcklucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0RGF0ZXBpY2tlcklucHV0PEQ+XG4gIGV4dGVuZHMgTWF0RGF0ZXBpY2tlcklucHV0QmFzZTxEIHwgbnVsbCwgRD5cbiAgaW1wbGVtZW50cyBNYXREYXRlcGlja2VyQ29udHJvbDxEIHwgbnVsbD4sIE9uRGVzdHJveVxue1xuICBwcml2YXRlIF9jbG9zZWRTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX29wZW5lZFN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAvKiogVGhlIGRhdGVwaWNrZXIgdGhhdCB0aGlzIGlucHV0IGlzIGFzc29jaWF0ZWQgd2l0aC4gKi9cbiAgQElucHV0KClcbiAgc2V0IG1hdERhdGVwaWNrZXIoZGF0ZXBpY2tlcjogTWF0RGF0ZXBpY2tlclBhbmVsPE1hdERhdGVwaWNrZXJDb250cm9sPEQ+LCBEIHwgbnVsbCwgRD4pIHtcbiAgICBpZiAoZGF0ZXBpY2tlcikge1xuICAgICAgdGhpcy5fZGF0ZXBpY2tlciA9IGRhdGVwaWNrZXI7XG4gICAgICB0aGlzLl9hcmlhT3ducy5zZXQoZGF0ZXBpY2tlci5vcGVuZWQgPyBkYXRlcGlja2VyLmlkIDogbnVsbCk7XG4gICAgICB0aGlzLl9jbG9zZWRTdWJzY3JpcHRpb24gPSBkYXRlcGlja2VyLmNsb3NlZFN0cmVhbS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fYXJpYU93bnMuc2V0KG51bGwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24gPSBkYXRlcGlja2VyLm9wZW5lZFN0cmVhbS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9hcmlhT3ducy5zZXQoZGF0ZXBpY2tlci5pZCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyTW9kZWwoZGF0ZXBpY2tlci5yZWdpc3RlcklucHV0KHRoaXMpKTtcbiAgICB9XG4gIH1cbiAgX2RhdGVwaWNrZXI6IE1hdERhdGVwaWNrZXJQYW5lbDxNYXREYXRlcGlja2VyQ29udHJvbDxEPiwgRCB8IG51bGwsIEQ+O1xuXG4gIC8qKiBUaGUgaWQgb2YgdGhlIHBhbmVsIG93bmVkIGJ5IHRoaXMgaW5wdXQuICovXG4gIHByb3RlY3RlZCBfYXJpYU93bnMgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuICovXG4gIEBJbnB1dCgpXG4gIGdldCBtaW4oKTogRCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cbiAgc2V0IG1pbih2YWx1ZTogRCB8IG51bGwpIHtcbiAgICBjb25zdCB2YWxpZFZhbHVlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG5cbiAgICBpZiAoIXRoaXMuX2RhdGVBZGFwdGVyLnNhbWVEYXRlKHZhbGlkVmFsdWUsIHRoaXMuX21pbikpIHtcbiAgICAgIHRoaXMuX21pbiA9IHZhbGlkVmFsdWU7XG4gICAgICB0aGlzLl92YWxpZGF0b3JPbkNoYW5nZSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9taW46IEQgfCBudWxsO1xuXG4gIC8qKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLiAqL1xuICBASW5wdXQoKVxuICBnZXQgbWF4KCk6IEQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG4gIHNldCBtYXgodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuXG4gICAgaWYgKCF0aGlzLl9kYXRlQWRhcHRlci5zYW1lRGF0ZSh2YWxpZFZhbHVlLCB0aGlzLl9tYXgpKSB7XG4gICAgICB0aGlzLl9tYXggPSB2YWxpZFZhbHVlO1xuICAgICAgdGhpcy5fdmFsaWRhdG9yT25DaGFuZ2UoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWF4OiBEIHwgbnVsbDtcblxuICAvKiogRnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgb3V0IGRhdGVzIHdpdGhpbiB0aGUgZGF0ZXBpY2tlci4gKi9cbiAgQElucHV0KCdtYXREYXRlcGlja2VyRmlsdGVyJylcbiAgZ2V0IGRhdGVGaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVGaWx0ZXI7XG4gIH1cbiAgc2V0IGRhdGVGaWx0ZXIodmFsdWU6IERhdGVGaWx0ZXJGbjxEIHwgbnVsbD4pIHtcbiAgICBjb25zdCB3YXNNYXRjaGluZ1ZhbHVlID0gdGhpcy5fbWF0Y2hlc0ZpbHRlcih0aGlzLnZhbHVlKTtcbiAgICB0aGlzLl9kYXRlRmlsdGVyID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy5fbWF0Y2hlc0ZpbHRlcih0aGlzLnZhbHVlKSAhPT0gd2FzTWF0Y2hpbmdWYWx1ZSkge1xuICAgICAgdGhpcy5fdmFsaWRhdG9yT25DaGFuZ2UoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZGF0ZUZpbHRlcjogRGF0ZUZpbHRlckZuPEQgfCBudWxsPjtcblxuICAvKiogVGhlIGNvbWJpbmVkIGZvcm0gY29udHJvbCB2YWxpZGF0b3IgZm9yIHRoaXMgaW5wdXQuICovXG4gIHByb3RlY3RlZCBfdmFsaWRhdG9yOiBWYWxpZGF0b3JGbiB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICBAT3B0aW9uYWwoKSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RD4sXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfREFURV9GT1JNQVRTKSBkYXRlRm9ybWF0czogTWF0RGF0ZUZvcm1hdHMsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRk9STV9GSUVMRCkgcHJpdmF0ZSBfZm9ybUZpZWxkPzogX01hdEZvcm1GaWVsZFBhcnRpYWwsXG4gICkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIGRhdGVBZGFwdGVyLCBkYXRlRm9ybWF0cyk7XG4gICAgdGhpcy5fdmFsaWRhdG9yID0gVmFsaWRhdG9ycy5jb21wb3NlKHN1cGVyLl9nZXRWYWxpZGF0b3JzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVsZW1lbnQgdGhhdCB0aGUgZGF0ZXBpY2tlciBwb3B1cCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKiBAcmV0dXJuIFRoZSBlbGVtZW50IHRvIGNvbm5lY3QgdGhlIHBvcHVwIHRvLlxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOiBFbGVtZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUZpZWxkID8gdGhpcy5fZm9ybUZpZWxkLmdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKSA6IHRoaXMuX2VsZW1lbnRSZWY7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgSUQgb2YgYW4gZWxlbWVudCB0aGF0IHNob3VsZCBiZSB1c2VkIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBjYWxlbmRhciBvdmVybGF5LiAqL1xuICBnZXRPdmVybGF5TGFiZWxJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5fZm9ybUZpZWxkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUZpZWxkLmdldExhYmVsSWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5Jyk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgcGFsZXR0ZSB1c2VkIGJ5IHRoZSBpbnB1dCdzIGZvcm0gZmllbGQsIGlmIGFueS4gKi9cbiAgZ2V0VGhlbWVQYWxldHRlKCk6IFRoZW1lUGFsZXR0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1GaWVsZCA/IHRoaXMuX2Zvcm1GaWVsZC5jb2xvciA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSB2YWx1ZSBhdCB3aGljaCB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0LiAqL1xuICBnZXRTdGFydFZhbHVlKCk6IEQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fY2xvc2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKiogT3BlbnMgdGhlIGFzc29jaWF0ZWQgZGF0ZXBpY2tlci4gKi9cbiAgcHJvdGVjdGVkIF9vcGVuUG9wdXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGVwaWNrZXIpIHtcbiAgICAgIHRoaXMuX2RhdGVwaWNrZXIub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfZ2V0VmFsdWVGcm9tTW9kZWwobW9kZWxWYWx1ZTogRCB8IG51bGwpOiBEIHwgbnVsbCB7XG4gICAgcmV0dXJuIG1vZGVsVmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2Fzc2lnblZhbHVlVG9Nb2RlbCh2YWx1ZTogRCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbW9kZWwpIHtcbiAgICAgIHRoaXMuX21vZGVsLnVwZGF0ZVNlbGVjdGlvbih2YWx1ZSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldHMgdGhlIGlucHV0J3MgbWluaW11bSBkYXRlLiAqL1xuICBfZ2V0TWluRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGlucHV0J3MgbWF4aW11bSBkYXRlLiAqL1xuICBfZ2V0TWF4RGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGlucHV0J3MgZGF0ZSBmaWx0ZXJpbmcgZnVuY3Rpb24uICovXG4gIHByb3RlY3RlZCBfZ2V0RGF0ZUZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZUZpbHRlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBfc2hvdWxkSGFuZGxlQ2hhbmdlRXZlbnQoZXZlbnQ6IERhdGVTZWxlY3Rpb25Nb2RlbENoYW5nZTxEPikge1xuICAgIHJldHVybiBldmVudC5zb3VyY2UgIT09IHRoaXM7XG4gIH1cbn1cbiJdfQ==