@angular/material 11.0.3 → 11.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/LICENSE +1 -1
  2. package/_theming.scss +392 -351
  3. package/autocomplete/_autocomplete-theme.scss +4 -5
  4. package/autocomplete/autocomplete.d.ts +7 -1
  5. package/autocomplete/index.metadata.json +1 -1
  6. package/autocomplete/testing/autocomplete-harness.d.ts +29 -15
  7. package/badge/_badge-theme.scss +2 -3
  8. package/bottom-sheet/_bottom-sheet-theme.scss +4 -5
  9. package/bundles/material-autocomplete-testing.umd.js +54 -36
  10. package/bundles/material-autocomplete-testing.umd.js.map +1 -1
  11. package/bundles/material-autocomplete-testing.umd.min.js +2 -2
  12. package/bundles/material-autocomplete-testing.umd.min.js.map +1 -1
  13. package/bundles/material-autocomplete.umd.js +32 -10
  14. package/bundles/material-autocomplete.umd.js.map +1 -1
  15. package/bundles/material-autocomplete.umd.min.js +3 -3
  16. package/bundles/material-autocomplete.umd.min.js.map +1 -1
  17. package/bundles/material-badge-testing.umd.js +9 -1
  18. package/bundles/material-badge-testing.umd.js.map +1 -1
  19. package/bundles/material-badge-testing.umd.min.js +1 -1
  20. package/bundles/material-badge-testing.umd.min.js.map +1 -1
  21. package/bundles/material-badge.umd.js +9 -1
  22. package/bundles/material-badge.umd.js.map +1 -1
  23. package/bundles/material-badge.umd.min.js +3 -3
  24. package/bundles/material-badge.umd.min.js.map +1 -1
  25. package/bundles/material-bottom-sheet-testing.umd.js +9 -1
  26. package/bundles/material-bottom-sheet-testing.umd.js.map +1 -1
  27. package/bundles/material-bottom-sheet-testing.umd.min.js +1 -1
  28. package/bundles/material-bottom-sheet-testing.umd.min.js.map +1 -1
  29. package/bundles/material-bottom-sheet.umd.js +9 -1
  30. package/bundles/material-bottom-sheet.umd.js.map +1 -1
  31. package/bundles/material-bottom-sheet.umd.min.js +1 -1
  32. package/bundles/material-bottom-sheet.umd.min.js.map +1 -1
  33. package/bundles/material-button-testing.umd.js +9 -1
  34. package/bundles/material-button-testing.umd.js.map +1 -1
  35. package/bundles/material-button-testing.umd.min.js +1 -1
  36. package/bundles/material-button-testing.umd.min.js.map +1 -1
  37. package/bundles/material-button-toggle-testing.umd.js +9 -1
  38. package/bundles/material-button-toggle-testing.umd.js.map +1 -1
  39. package/bundles/material-button-toggle-testing.umd.min.js +1 -1
  40. package/bundles/material-button-toggle-testing.umd.min.js.map +1 -1
  41. package/bundles/material-button-toggle.umd.js +9 -1
  42. package/bundles/material-button-toggle.umd.js.map +1 -1
  43. package/bundles/material-button-toggle.umd.min.js +1 -1
  44. package/bundles/material-button-toggle.umd.min.js.map +1 -1
  45. package/bundles/material-button.umd.js +17 -5
  46. package/bundles/material-button.umd.js.map +1 -1
  47. package/bundles/material-button.umd.min.js +1 -1
  48. package/bundles/material-button.umd.min.js.map +1 -1
  49. package/bundles/material-card-testing.umd.js +9 -1
  50. package/bundles/material-card-testing.umd.js.map +1 -1
  51. package/bundles/material-card-testing.umd.min.js +1 -1
  52. package/bundles/material-card-testing.umd.min.js.map +1 -1
  53. package/bundles/material-checkbox-testing.umd.js +73 -64
  54. package/bundles/material-checkbox-testing.umd.js.map +1 -1
  55. package/bundles/material-checkbox-testing.umd.min.js +2 -2
  56. package/bundles/material-checkbox-testing.umd.min.js.map +1 -1
  57. package/bundles/material-checkbox.umd.js +15 -3
  58. package/bundles/material-checkbox.umd.js.map +1 -1
  59. package/bundles/material-checkbox.umd.min.js +2 -2
  60. package/bundles/material-checkbox.umd.min.js.map +1 -1
  61. package/bundles/material-chips-testing.umd.js +189 -29
  62. package/bundles/material-chips-testing.umd.js.map +1 -1
  63. package/bundles/material-chips-testing.umd.min.js +2 -2
  64. package/bundles/material-chips-testing.umd.min.js.map +1 -1
  65. package/bundles/material-chips.umd.js +9 -1
  66. package/bundles/material-chips.umd.js.map +1 -1
  67. package/bundles/material-chips.umd.min.js +4 -4
  68. package/bundles/material-chips.umd.min.js.map +1 -1
  69. package/bundles/material-core-testing.umd.js +14 -3
  70. package/bundles/material-core-testing.umd.js.map +1 -1
  71. package/bundles/material-core-testing.umd.min.js +1 -1
  72. package/bundles/material-core-testing.umd.min.js.map +1 -1
  73. package/bundles/material-core.umd.js +55 -14
  74. package/bundles/material-core.umd.js.map +1 -1
  75. package/bundles/material-core.umd.min.js +16 -8
  76. package/bundles/material-core.umd.min.js.map +1 -1
  77. package/bundles/material-datepicker-testing.umd.js +24 -12
  78. package/bundles/material-datepicker-testing.umd.js.map +1 -1
  79. package/bundles/material-datepicker-testing.umd.min.js +1 -1
  80. package/bundles/material-datepicker-testing.umd.min.js.map +1 -1
  81. package/bundles/material-datepicker.umd.js +256 -84
  82. package/bundles/material-datepicker.umd.js.map +1 -1
  83. package/bundles/material-datepicker.umd.min.js +20 -12
  84. package/bundles/material-datepicker.umd.min.js.map +1 -1
  85. package/bundles/material-dialog-testing.umd.js +9 -1
  86. package/bundles/material-dialog-testing.umd.js.map +1 -1
  87. package/bundles/material-dialog-testing.umd.min.js +1 -1
  88. package/bundles/material-dialog-testing.umd.min.js.map +1 -1
  89. package/bundles/material-dialog.umd.js +10 -2
  90. package/bundles/material-dialog.umd.js.map +1 -1
  91. package/bundles/material-dialog.umd.min.js +8 -8
  92. package/bundles/material-dialog.umd.min.js.map +1 -1
  93. package/bundles/material-divider-testing.umd.js +9 -1
  94. package/bundles/material-divider-testing.umd.js.map +1 -1
  95. package/bundles/material-divider-testing.umd.min.js +2 -2
  96. package/bundles/material-divider-testing.umd.min.js.map +1 -1
  97. package/bundles/material-expansion-testing.umd.js +9 -1
  98. package/bundles/material-expansion-testing.umd.js.map +1 -1
  99. package/bundles/material-expansion-testing.umd.min.js +1 -1
  100. package/bundles/material-expansion-testing.umd.min.js.map +1 -1
  101. package/bundles/material-expansion.umd.js +15 -3
  102. package/bundles/material-expansion.umd.js.map +1 -1
  103. package/bundles/material-expansion.umd.min.js +3 -3
  104. package/bundles/material-expansion.umd.min.js.map +1 -1
  105. package/bundles/material-form-field-testing-control.umd.js +9 -1
  106. package/bundles/material-form-field-testing-control.umd.js.map +1 -1
  107. package/bundles/material-form-field-testing-control.umd.min.js +1 -1
  108. package/bundles/material-form-field-testing-control.umd.min.js.map +1 -1
  109. package/bundles/material-form-field-testing.umd.js +41 -30
  110. package/bundles/material-form-field-testing.umd.js.map +1 -1
  111. package/bundles/material-form-field-testing.umd.min.js +3 -3
  112. package/bundles/material-form-field-testing.umd.min.js.map +1 -1
  113. package/bundles/material-form-field.umd.js +10 -2
  114. package/bundles/material-form-field.umd.js.map +1 -1
  115. package/bundles/material-form-field.umd.min.js +1 -1
  116. package/bundles/material-form-field.umd.min.js.map +1 -1
  117. package/bundles/material-grid-list-testing.umd.js +15 -5
  118. package/bundles/material-grid-list-testing.umd.js.map +1 -1
  119. package/bundles/material-grid-list-testing.umd.min.js +2 -2
  120. package/bundles/material-grid-list-testing.umd.min.js.map +1 -1
  121. package/bundles/material-grid-list.umd.js +9 -1
  122. package/bundles/material-grid-list.umd.js.map +1 -1
  123. package/bundles/material-grid-list.umd.min.js +1 -1
  124. package/bundles/material-grid-list.umd.min.js.map +1 -1
  125. package/bundles/material-icon-testing.umd.js +12 -2
  126. package/bundles/material-icon-testing.umd.js.map +1 -1
  127. package/bundles/material-icon-testing.umd.min.js +2 -2
  128. package/bundles/material-icon-testing.umd.min.js.map +1 -1
  129. package/bundles/material-icon.umd.js +46 -2
  130. package/bundles/material-icon.umd.js.map +1 -1
  131. package/bundles/material-icon.umd.min.js +3 -3
  132. package/bundles/material-icon.umd.min.js.map +1 -1
  133. package/bundles/material-input-testing.umd.js +19 -8
  134. package/bundles/material-input-testing.umd.js.map +1 -1
  135. package/bundles/material-input-testing.umd.min.js +1 -1
  136. package/bundles/material-input-testing.umd.min.js.map +1 -1
  137. package/bundles/material-input.umd.js +9 -1
  138. package/bundles/material-input.umd.js.map +1 -1
  139. package/bundles/material-input.umd.min.js +1 -1
  140. package/bundles/material-input.umd.min.js.map +1 -1
  141. package/bundles/material-list-testing.umd.js +62 -57
  142. package/bundles/material-list-testing.umd.js.map +1 -1
  143. package/bundles/material-list-testing.umd.min.js +1 -1
  144. package/bundles/material-list-testing.umd.min.js.map +1 -1
  145. package/bundles/material-list.umd.js +9 -1
  146. package/bundles/material-list.umd.js.map +1 -1
  147. package/bundles/material-list.umd.min.js +1 -1
  148. package/bundles/material-list.umd.min.js.map +1 -1
  149. package/bundles/material-menu-testing.umd.js +94 -67
  150. package/bundles/material-menu-testing.umd.js.map +1 -1
  151. package/bundles/material-menu-testing.umd.min.js +2 -2
  152. package/bundles/material-menu-testing.umd.min.js.map +1 -1
  153. package/bundles/material-menu.umd.js +18 -6
  154. package/bundles/material-menu.umd.js.map +1 -1
  155. package/bundles/material-menu.umd.min.js +3 -3
  156. package/bundles/material-menu.umd.min.js.map +1 -1
  157. package/bundles/material-paginator-testing.umd.js +50 -34
  158. package/bundles/material-paginator-testing.umd.js.map +1 -1
  159. package/bundles/material-paginator-testing.umd.min.js +2 -2
  160. package/bundles/material-paginator-testing.umd.min.js.map +1 -1
  161. package/bundles/material-paginator.umd.js +9 -1
  162. package/bundles/material-paginator.umd.js.map +1 -1
  163. package/bundles/material-paginator.umd.min.js +1 -1
  164. package/bundles/material-paginator.umd.min.js.map +1 -1
  165. package/bundles/material-progress-bar-testing.umd.js +9 -1
  166. package/bundles/material-progress-bar-testing.umd.js.map +1 -1
  167. package/bundles/material-progress-bar-testing.umd.min.js +1 -1
  168. package/bundles/material-progress-bar-testing.umd.min.js.map +1 -1
  169. package/bundles/material-progress-bar.umd.js +9 -1
  170. package/bundles/material-progress-bar.umd.js.map +1 -1
  171. package/bundles/material-progress-bar.umd.min.js +1 -1
  172. package/bundles/material-progress-bar.umd.min.js.map +1 -1
  173. package/bundles/material-progress-spinner-testing.umd.js +9 -1
  174. package/bundles/material-progress-spinner-testing.umd.js.map +1 -1
  175. package/bundles/material-progress-spinner-testing.umd.min.js +1 -1
  176. package/bundles/material-progress-spinner-testing.umd.min.js.map +1 -1
  177. package/bundles/material-progress-spinner.umd.js +9 -1
  178. package/bundles/material-progress-spinner.umd.js.map +1 -1
  179. package/bundles/material-progress-spinner.umd.min.js +2 -2
  180. package/bundles/material-progress-spinner.umd.min.js.map +1 -1
  181. package/bundles/material-radio-testing.umd.js +88 -63
  182. package/bundles/material-radio-testing.umd.js.map +1 -1
  183. package/bundles/material-radio-testing.umd.min.js +2 -2
  184. package/bundles/material-radio-testing.umd.min.js.map +1 -1
  185. package/bundles/material-radio.umd.js +18 -5
  186. package/bundles/material-radio.umd.js.map +1 -1
  187. package/bundles/material-radio.umd.min.js +1 -1
  188. package/bundles/material-radio.umd.min.js.map +1 -1
  189. package/bundles/material-select-testing.umd.js +73 -51
  190. package/bundles/material-select-testing.umd.js.map +1 -1
  191. package/bundles/material-select-testing.umd.min.js +2 -2
  192. package/bundles/material-select-testing.umd.min.js.map +1 -1
  193. package/bundles/material-select.umd.js +9 -1
  194. package/bundles/material-select.umd.js.map +1 -1
  195. package/bundles/material-select.umd.min.js +4 -4
  196. package/bundles/material-select.umd.min.js.map +1 -1
  197. package/bundles/material-sidenav-testing.umd.js +175 -28
  198. package/bundles/material-sidenav-testing.umd.js.map +1 -1
  199. package/bundles/material-sidenav-testing.umd.min.js +2 -2
  200. package/bundles/material-sidenav-testing.umd.min.js.map +1 -1
  201. package/bundles/material-sidenav.umd.js +9 -1
  202. package/bundles/material-sidenav.umd.js.map +1 -1
  203. package/bundles/material-sidenav.umd.min.js +1 -1
  204. package/bundles/material-sidenav.umd.min.js.map +1 -1
  205. package/bundles/material-slide-toggle-testing.umd.js +9 -1
  206. package/bundles/material-slide-toggle-testing.umd.js.map +1 -1
  207. package/bundles/material-slide-toggle-testing.umd.min.js +1 -1
  208. package/bundles/material-slide-toggle-testing.umd.min.js.map +1 -1
  209. package/bundles/material-slide-toggle.umd.js +16 -3
  210. package/bundles/material-slide-toggle.umd.js.map +1 -1
  211. package/bundles/material-slide-toggle.umd.min.js +3 -3
  212. package/bundles/material-slide-toggle.umd.min.js.map +1 -1
  213. package/bundles/material-slider-testing.umd.js +15 -4
  214. package/bundles/material-slider-testing.umd.js.map +1 -1
  215. package/bundles/material-slider-testing.umd.min.js +2 -2
  216. package/bundles/material-slider-testing.umd.min.js.map +1 -1
  217. package/bundles/material-slider.umd.js +9 -1
  218. package/bundles/material-slider.umd.js.map +1 -1
  219. package/bundles/material-slider.umd.min.js +1 -1
  220. package/bundles/material-slider.umd.min.js.map +1 -1
  221. package/bundles/material-snack-bar-testing.umd.js +29 -12
  222. package/bundles/material-snack-bar-testing.umd.js.map +1 -1
  223. package/bundles/material-snack-bar-testing.umd.min.js +2 -2
  224. package/bundles/material-snack-bar-testing.umd.min.js.map +1 -1
  225. package/bundles/material-snack-bar.umd.js +20 -2
  226. package/bundles/material-snack-bar.umd.js.map +1 -1
  227. package/bundles/material-snack-bar.umd.min.js +1 -1
  228. package/bundles/material-snack-bar.umd.min.js.map +1 -1
  229. package/bundles/material-sort-testing.umd.js +9 -1
  230. package/bundles/material-sort-testing.umd.js.map +1 -1
  231. package/bundles/material-sort-testing.umd.min.js +1 -1
  232. package/bundles/material-sort-testing.umd.min.js.map +1 -1
  233. package/bundles/material-sort.umd.js +19 -5
  234. package/bundles/material-sort.umd.js.map +1 -1
  235. package/bundles/material-sort.umd.min.js +2 -2
  236. package/bundles/material-sort.umd.min.js.map +1 -1
  237. package/bundles/material-stepper-testing.umd.js +9 -1
  238. package/bundles/material-stepper-testing.umd.js.map +1 -1
  239. package/bundles/material-stepper-testing.umd.min.js +2 -2
  240. package/bundles/material-stepper-testing.umd.min.js.map +1 -1
  241. package/bundles/material-stepper.umd.js +16 -3
  242. package/bundles/material-stepper.umd.js.map +1 -1
  243. package/bundles/material-stepper.umd.min.js +3 -3
  244. package/bundles/material-stepper.umd.min.js.map +1 -1
  245. package/bundles/material-table-testing.umd.js +26 -17
  246. package/bundles/material-table-testing.umd.js.map +1 -1
  247. package/bundles/material-table-testing.umd.min.js +2 -2
  248. package/bundles/material-table-testing.umd.min.js.map +1 -1
  249. package/bundles/material-table.umd.js +66 -39
  250. package/bundles/material-table.umd.js.map +1 -1
  251. package/bundles/material-table.umd.min.js +3 -3
  252. package/bundles/material-table.umd.min.js.map +1 -1
  253. package/bundles/material-tabs-testing.umd.js +11 -3
  254. package/bundles/material-tabs-testing.umd.js.map +1 -1
  255. package/bundles/material-tabs-testing.umd.min.js +1 -1
  256. package/bundles/material-tabs-testing.umd.min.js.map +1 -1
  257. package/bundles/material-tabs.umd.js +10 -2
  258. package/bundles/material-tabs.umd.js.map +1 -1
  259. package/bundles/material-tabs.umd.min.js +5 -5
  260. package/bundles/material-tabs.umd.min.js.map +1 -1
  261. package/bundles/material-toolbar-testing.umd.js +11 -2
  262. package/bundles/material-toolbar-testing.umd.js.map +1 -1
  263. package/bundles/material-toolbar-testing.umd.min.js +2 -2
  264. package/bundles/material-toolbar-testing.umd.min.js.map +1 -1
  265. package/bundles/material-toolbar.umd.js +9 -1
  266. package/bundles/material-toolbar.umd.js.map +1 -1
  267. package/bundles/material-toolbar.umd.min.js +2 -2
  268. package/bundles/material-toolbar.umd.min.js.map +1 -1
  269. package/bundles/material-tooltip-testing.umd.js +9 -1
  270. package/bundles/material-tooltip-testing.umd.js.map +1 -1
  271. package/bundles/material-tooltip-testing.umd.min.js +1 -1
  272. package/bundles/material-tooltip-testing.umd.min.js.map +1 -1
  273. package/bundles/material-tooltip.umd.js +35 -7
  274. package/bundles/material-tooltip.umd.js.map +1 -1
  275. package/bundles/material-tooltip.umd.min.js +3 -3
  276. package/bundles/material-tooltip.umd.min.js.map +1 -1
  277. package/bundles/material-tree-testing.umd.js +10 -2
  278. package/bundles/material-tree-testing.umd.js.map +1 -1
  279. package/bundles/material-tree-testing.umd.min.js +1 -1
  280. package/bundles/material-tree-testing.umd.min.js.map +1 -1
  281. package/bundles/material-tree.umd.js +12 -3
  282. package/bundles/material-tree.umd.js.map +1 -1
  283. package/bundles/material-tree.umd.min.js +3 -3
  284. package/bundles/material-tree.umd.min.js.map +1 -1
  285. package/button/_button-base.scss +2 -2
  286. package/button/_button-theme.scss +10 -11
  287. package/button/index.metadata.json +1 -1
  288. package/button-toggle/_button-toggle-theme.scss +9 -10
  289. package/card/_card-theme.scss +5 -6
  290. package/checkbox/_checkbox-theme.scss +2 -3
  291. package/checkbox/testing/checkbox-harness.d.ts +21 -16
  292. package/chips/_chips-theme.scss +4 -5
  293. package/chips/testing/chip-harness-filters.d.ts +11 -3
  294. package/chips/testing/chip-harness.d.ts +5 -5
  295. package/chips/testing/chip-list-harness.d.ts +15 -12
  296. package/chips/testing/chip-listbox-harness.d.ts +34 -0
  297. package/chips/testing/chip-option-harness.d.ts +29 -0
  298. package/chips/testing/public-api.d.ts +3 -1
  299. package/core/_core.scss +6 -6
  300. package/core/color/_all-color.scss +2 -1
  301. package/core/datetime/date-formats.d.ts +1 -0
  302. package/core/density/private/_all-density.scss +34 -0
  303. package/core/density/{_index.scss → private/_compatibility.scss} +11 -8
  304. package/core/focus-indicators/_focus-indicators.scss +3 -4
  305. package/core/index.metadata.json +1 -1
  306. package/core/option/_optgroup-theme.scss +2 -3
  307. package/core/option/_option-theme.scss +2 -3
  308. package/core/option/index.d.ts +1 -0
  309. package/core/option/optgroup.d.ts +4 -0
  310. package/core/option/option-parent.d.ts +22 -0
  311. package/core/option/option.d.ts +2 -14
  312. package/core/ripple/_ripple.scss +2 -3
  313. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +2 -3
  314. package/core/style/_elevation.scss +2 -18
  315. package/core/style/_form-common.scss +2 -2
  316. package/core/style/_private.scss +40 -0
  317. package/core/style/_vendor-prefixes.scss +3 -3
  318. package/core/testing/option-harness.d.ts +2 -0
  319. package/core/theming/_all-theme.scss +3 -2
  320. package/core/theming/_theming.scss +148 -38
  321. package/core/typography/_all-typography.scss +1 -1
  322. package/core/typography/_typography.scss +39 -9
  323. package/datepicker/_datepicker-theme.scss +15 -16
  324. package/datepicker/date-range-input-parts.d.ts +2 -3
  325. package/datepicker/date-range-input.d.ts +5 -4
  326. package/datepicker/date-selection-model.d.ts +10 -0
  327. package/datepicker/datepicker-actions.d.ts +33 -0
  328. package/datepicker/datepicker-base.d.ts +52 -9
  329. package/datepicker/datepicker-input-base.d.ts +5 -10
  330. package/datepicker/datepicker-input.d.ts +9 -8
  331. package/datepicker/datepicker-toggle.d.ts +4 -2
  332. package/datepicker/index.metadata.json +1 -1
  333. package/datepicker/public-api.d.ts +1 -0
  334. package/datepicker/year-view.d.ts +1 -1
  335. package/dialog/_dialog-theme.scss +4 -5
  336. package/divider/_divider-theme.scss +2 -3
  337. package/esm2015/autocomplete/autocomplete-trigger.js +11 -3
  338. package/esm2015/autocomplete/autocomplete.js +11 -4
  339. package/esm2015/autocomplete/testing/autocomplete-harness.js +27 -19
  340. package/esm2015/button/button.js +10 -5
  341. package/esm2015/checkbox/checkbox.js +8 -3
  342. package/esm2015/checkbox/testing/checkbox-harness.js +31 -36
  343. package/esm2015/chips/testing/chip-harness-filters.js +1 -1
  344. package/esm2015/chips/testing/chip-harness.js +6 -6
  345. package/esm2015/chips/testing/chip-list-harness.js +19 -16
  346. package/esm2015/chips/testing/chip-listbox-harness.js +49 -0
  347. package/esm2015/chips/testing/chip-option-harness.js +54 -0
  348. package/esm2015/chips/testing/public-api.js +4 -2
  349. package/esm2015/core/common-behaviors/common-module.js +1 -1
  350. package/esm2015/core/datetime/date-formats.js +1 -1
  351. package/esm2015/core/option/index.js +2 -1
  352. package/esm2015/core/option/optgroup.js +32 -7
  353. package/esm2015/core/option/option-parent.js +13 -0
  354. package/esm2015/core/option/option.js +5 -8
  355. package/esm2015/core/testing/option-harness.js +7 -2
  356. package/esm2015/core/version.js +1 -1
  357. package/esm2015/datepicker/calendar-body.js +1 -1
  358. package/esm2015/datepicker/date-range-input-parts.js +14 -16
  359. package/esm2015/datepicker/date-range-input.js +11 -4
  360. package/esm2015/datepicker/date-range-picker.js +3 -2
  361. package/esm2015/datepicker/date-selection-model.js +24 -1
  362. package/esm2015/datepicker/datepicker-actions.js +89 -0
  363. package/esm2015/datepicker/datepicker-base.js +69 -26
  364. package/esm2015/datepicker/datepicker-input-base.js +15 -27
  365. package/esm2015/datepicker/datepicker-input.js +11 -5
  366. package/esm2015/datepicker/datepicker-module.js +8 -1
  367. package/esm2015/datepicker/datepicker-toggle.js +7 -10
  368. package/esm2015/datepicker/datepicker.js +5 -2
  369. package/esm2015/datepicker/month-view.js +4 -3
  370. package/esm2015/datepicker/public-api.js +2 -1
  371. package/esm2015/datepicker/testing/date-range-input-harness.js +4 -4
  372. package/esm2015/datepicker/testing/datepicker-input-harness.js +3 -3
  373. package/esm2015/datepicker/testing/datepicker-trigger-harness-base.js +3 -3
  374. package/esm2015/datepicker/year-view.js +1 -1
  375. package/esm2015/dialog/dialog-ref.js +2 -2
  376. package/esm2015/expansion/expansion-panel-header.js +8 -3
  377. package/esm2015/expansion/expansion-panel.js +1 -1
  378. package/esm2015/form-field/form-field.js +2 -2
  379. package/esm2015/form-field/testing/form-field-harness.js +14 -9
  380. package/esm2015/grid-list/testing/grid-list-harness.js +6 -5
  381. package/esm2015/icon/icon-registry.js +39 -3
  382. package/esm2015/icon/testing/fake-icon-registry.js +4 -2
  383. package/esm2015/input/testing/input-harness.js +3 -3
  384. package/esm2015/input/testing/native-select-harness.js +7 -5
  385. package/esm2015/list/selection-list.js +1 -1
  386. package/esm2015/list/testing/list-harness-base.js +5 -4
  387. package/esm2015/list/testing/list-item-harness-base.js +5 -4
  388. package/esm2015/list/testing/selection-list-harness.js +8 -5
  389. package/esm2015/menu/menu-item.js +3 -3
  390. package/esm2015/menu/menu-trigger.js +10 -4
  391. package/esm2015/menu/menu.js +1 -1
  392. package/esm2015/menu/testing/menu-harness.js +44 -32
  393. package/esm2015/paginator/testing/paginator-harness.js +27 -25
  394. package/esm2015/radio/radio.js +10 -5
  395. package/esm2015/radio/testing/radio-harness.js +40 -29
  396. package/esm2015/select/testing/select-harness.js +36 -28
  397. package/esm2015/sidenav/testing/drawer-container-harness.js +41 -0
  398. package/esm2015/sidenav/testing/drawer-content-harness.js +23 -0
  399. package/esm2015/sidenav/testing/drawer-harness-filters.js +1 -1
  400. package/esm2015/sidenav/testing/drawer-harness.js +19 -13
  401. package/esm2015/sidenav/testing/public-api.js +6 -2
  402. package/esm2015/sidenav/testing/sidenav-container-harness.js +41 -0
  403. package/esm2015/sidenav/testing/sidenav-content-harness.js +23 -0
  404. package/esm2015/sidenav/testing/sidenav-harness.js +4 -4
  405. package/esm2015/slide-toggle/slide-toggle.js +8 -3
  406. package/esm2015/slider/testing/slider-harness.js +5 -5
  407. package/esm2015/snack-bar/snack-bar-container.js +12 -2
  408. package/esm2015/snack-bar/testing/snack-bar-harness.js +19 -12
  409. package/esm2015/sort/sort-header.js +11 -5
  410. package/esm2015/stepper/step-header.js +8 -3
  411. package/esm2015/table/table-data-source.js +34 -21
  412. package/esm2015/table/table.js +1 -1
  413. package/esm2015/table/testing/cell-harness.js +3 -3
  414. package/esm2015/table/testing/row-harness.js +5 -5
  415. package/esm2015/table/testing/table-harness.js +8 -8
  416. package/esm2015/tabs/tab-body.js +3 -3
  417. package/esm2015/tabs/testing/tab-group-harness.js +3 -3
  418. package/esm2015/tabs/testing/tab-nav-bar-harness.js +3 -3
  419. package/esm2015/toolbar/testing/toolbar-harness.js +3 -3
  420. package/esm2015/tooltip/tooltip.js +28 -7
  421. package/esm2015/tree/node.js +4 -3
  422. package/esm2015/tree/padding.js +1 -1
  423. package/esm2015/tree/testing/tree-harness.js +2 -2
  424. package/esm2015/tree/toggle.js +1 -1
  425. package/esm2015/tree/tree.js +1 -1
  426. package/expansion/_expansion-theme.scss +10 -11
  427. package/expansion/index.metadata.json +1 -1
  428. package/fesm2015/autocomplete/testing.js +26 -18
  429. package/fesm2015/autocomplete/testing.js.map +1 -1
  430. package/fesm2015/autocomplete.js +20 -6
  431. package/fesm2015/autocomplete.js.map +1 -1
  432. package/fesm2015/button.js +9 -4
  433. package/fesm2015/button.js.map +1 -1
  434. package/fesm2015/checkbox/testing.js +30 -35
  435. package/fesm2015/checkbox/testing.js.map +1 -1
  436. package/fesm2015/checkbox.js +7 -2
  437. package/fesm2015/checkbox.js.map +1 -1
  438. package/fesm2015/chips/testing.js +120 -21
  439. package/fesm2015/chips/testing.js.map +1 -1
  440. package/fesm2015/core/testing.js +6 -1
  441. package/fesm2015/core/testing.js.map +1 -1
  442. package/fesm2015/core.js +45 -13
  443. package/fesm2015/core.js.map +1 -1
  444. package/fesm2015/datepicker/testing.js +5 -5
  445. package/fesm2015/datepicker/testing.js.map +1 -1
  446. package/fesm2015/datepicker.js +281 -120
  447. package/fesm2015/datepicker.js.map +1 -1
  448. package/fesm2015/dialog.js +1 -1
  449. package/fesm2015/dialog.js.map +1 -1
  450. package/fesm2015/expansion.js +7 -2
  451. package/fesm2015/expansion.js.map +1 -1
  452. package/fesm2015/form-field/testing.js +13 -8
  453. package/fesm2015/form-field/testing.js.map +1 -1
  454. package/fesm2015/form-field.js +1 -1
  455. package/fesm2015/form-field.js.map +1 -1
  456. package/fesm2015/grid-list/testing.js +5 -4
  457. package/fesm2015/grid-list/testing.js.map +1 -1
  458. package/fesm2015/grid-list.js.map +1 -1
  459. package/fesm2015/icon/testing.js +3 -1
  460. package/fesm2015/icon/testing.js.map +1 -1
  461. package/fesm2015/icon.js +38 -2
  462. package/fesm2015/icon.js.map +1 -1
  463. package/fesm2015/input/testing.js +7 -5
  464. package/fesm2015/input/testing.js.map +1 -1
  465. package/fesm2015/list/testing.js +13 -8
  466. package/fesm2015/list/testing.js.map +1 -1
  467. package/fesm2015/list.js.map +1 -1
  468. package/fesm2015/menu/testing.js +45 -33
  469. package/fesm2015/menu/testing.js.map +1 -1
  470. package/fesm2015/menu.js +12 -6
  471. package/fesm2015/menu.js.map +1 -1
  472. package/fesm2015/paginator/testing.js +26 -24
  473. package/fesm2015/paginator/testing.js.map +1 -1
  474. package/fesm2015/paginator.js.map +1 -1
  475. package/fesm2015/progress-spinner.js.map +1 -1
  476. package/fesm2015/radio/testing.js +39 -28
  477. package/fesm2015/radio/testing.js.map +1 -1
  478. package/fesm2015/radio.js +9 -4
  479. package/fesm2015/radio.js.map +1 -1
  480. package/fesm2015/select/testing.js +36 -28
  481. package/fesm2015/select/testing.js.map +1 -1
  482. package/fesm2015/sidenav/testing.js +139 -15
  483. package/fesm2015/sidenav/testing.js.map +1 -1
  484. package/fesm2015/sidenav.js.map +1 -1
  485. package/fesm2015/slide-toggle.js +7 -2
  486. package/fesm2015/slide-toggle.js.map +1 -1
  487. package/fesm2015/slider/testing.js +4 -4
  488. package/fesm2015/slider/testing.js.map +1 -1
  489. package/fesm2015/snack-bar/testing.js +18 -11
  490. package/fesm2015/snack-bar/testing.js.map +1 -1
  491. package/fesm2015/snack-bar.js +11 -1
  492. package/fesm2015/snack-bar.js.map +1 -1
  493. package/fesm2015/sort.js +10 -4
  494. package/fesm2015/sort.js.map +1 -1
  495. package/fesm2015/stepper.js +7 -2
  496. package/fesm2015/stepper.js.map +1 -1
  497. package/fesm2015/table/testing.js +11 -11
  498. package/fesm2015/table/testing.js.map +1 -1
  499. package/fesm2015/table.js +35 -22
  500. package/fesm2015/table.js.map +1 -1
  501. package/fesm2015/tabs/testing.js +3 -3
  502. package/fesm2015/tabs/testing.js.map +1 -1
  503. package/fesm2015/tabs.js +2 -2
  504. package/fesm2015/tabs.js.map +1 -1
  505. package/fesm2015/toolbar/testing.js +2 -2
  506. package/fesm2015/toolbar/testing.js.map +1 -1
  507. package/fesm2015/tooltip.js +27 -7
  508. package/fesm2015/tooltip.js.map +1 -1
  509. package/fesm2015/tree/testing.js +1 -1
  510. package/fesm2015/tree/testing.js.map +1 -1
  511. package/fesm2015/tree.js +3 -2
  512. package/fesm2015/tree.js.map +1 -1
  513. package/form-field/_form-field-fill-theme.scss +4 -5
  514. package/form-field/_form-field-legacy-theme.scss +5 -6
  515. package/form-field/_form-field-outline-theme.scss +4 -5
  516. package/form-field/_form-field-standard-theme.scss +5 -6
  517. package/form-field/_form-field-theme.scss +8 -9
  518. package/form-field/index.metadata.json +1 -1
  519. package/grid-list/_grid-list-theme.scss +2 -3
  520. package/icon/_icon-theme.scss +2 -3
  521. package/icon/icon-registry.d.ts +23 -0
  522. package/icon/index.metadata.json +1 -1
  523. package/icon/testing/fake-icon-registry.d.ts +1 -0
  524. package/icon/testing/index.metadata.json +1 -1
  525. package/input/_input-theme.scss +3 -4
  526. package/list/_list-theme.scss +2 -3
  527. package/list/index.metadata.json +1 -1
  528. package/list/selection-list.d.ts +6 -1
  529. package/list/testing/list-harness-base.d.ts +1 -1
  530. package/list/testing/list-item-harness-base.d.ts +2 -2
  531. package/list/testing/selection-list-harness.d.ts +2 -1
  532. package/menu/_menu-theme.scss +4 -5
  533. package/menu/index.metadata.json +1 -1
  534. package/menu/menu-trigger.d.ts +1 -1
  535. package/menu/testing/menu-harness.d.ts +39 -26
  536. package/package.json +2 -2
  537. package/paginator/_paginator-theme.scss +7 -8
  538. package/paginator/testing/paginator-harness.d.ts +32 -19
  539. package/prebuilt-themes/deeppurple-amber.css +1 -1
  540. package/prebuilt-themes/indigo-pink.css +1 -1
  541. package/prebuilt-themes/pink-bluegrey.css +1 -1
  542. package/prebuilt-themes/purple-green.css +1 -1
  543. package/progress-bar/_progress-bar-theme.scss +2 -3
  544. package/progress-spinner/_progress-spinner-theme.scss +2 -3
  545. package/radio/_radio-theme.scss +2 -3
  546. package/radio/index.metadata.json +1 -1
  547. package/radio/radio.d.ts +2 -2
  548. package/radio/testing/radio-harness.d.ts +39 -24
  549. package/schematics/ng-add/fonts/material-fonts.js +7 -5
  550. package/schematics/ng-add/index.js +1 -1
  551. package/select/_select-theme.scss +5 -6
  552. package/select/testing/select-harness.d.ts +28 -16
  553. package/sidenav/_sidenav-theme.scss +4 -5
  554. package/sidenav/testing/drawer-container-harness.d.ts +30 -0
  555. package/sidenav/testing/drawer-content-harness.d.ts +21 -0
  556. package/sidenav/testing/drawer-harness-filters.d.ts +6 -0
  557. package/sidenav/testing/drawer-harness.d.ts +13 -7
  558. package/sidenav/testing/public-api.d.ts +5 -1
  559. package/sidenav/testing/sidenav-container-harness.d.ts +30 -0
  560. package/sidenav/testing/sidenav-content-harness.d.ts +21 -0
  561. package/sidenav/testing/sidenav-harness.d.ts +3 -3
  562. package/slide-toggle/_slide-toggle-theme.scss +4 -5
  563. package/slide-toggle/slide-toggle.d.ts +2 -2
  564. package/slider/_slider-theme.scss +2 -3
  565. package/snack-bar/_snack-bar-theme.scss +4 -5
  566. package/snack-bar/index.metadata.json +1 -1
  567. package/snack-bar/snack-bar-container.d.ts +5 -0
  568. package/snack-bar/testing/snack-bar-harness.d.ts +7 -4
  569. package/sort/_sort-theme.scss +2 -3
  570. package/sort/index.metadata.json +1 -1
  571. package/sort/sort-header.d.ts +2 -1
  572. package/stepper/_stepper-theme.scss +7 -8
  573. package/stepper/step-header.d.ts +2 -2
  574. package/table/_table-theme.scss +2 -3
  575. package/table/index.metadata.json +1 -1
  576. package/table/table-data-source.d.ts +31 -20
  577. package/table/testing/cell-harness.d.ts +2 -2
  578. package/tabs/_tabs-common.scss +2 -2
  579. package/tabs/_tabs-theme.scss +14 -9
  580. package/tabs/index.metadata.json +1 -1
  581. package/tabs/tab-body.d.ts +3 -3
  582. package/toolbar/_toolbar-theme.scss +8 -9
  583. package/tooltip/_tooltip-theme.scss +2 -3
  584. package/tooltip/index.metadata.json +1 -1
  585. package/tooltip/tooltip.d.ts +10 -1
  586. package/tree/_tree-theme.scss +7 -8
  587. package/tree/index.metadata.json +1 -1
  588. package/tree/node.d.ts +7 -6
  589. package/tree/padding.d.ts +1 -1
  590. package/tree/toggle.d.ts +1 -1
  591. package/tree/tree.d.ts +1 -1
  592. package/core/density/_all-density.scss +0 -19
  593. package/core/style/_noop-animation.scss +0 -22
  594. package/core/theming/_check-duplicate-styles.scss +0 -106
@@ -1,8 +1,8 @@
1
1
  import { A11yModule } from '@angular/cdk/a11y';
2
2
  import { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
3
- import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
3
+ import { ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';
4
4
  import { DOCUMENT, CommonModule } from '@angular/common';
5
- import { ɵɵdefineInjectable, Injectable, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, NgZone, Input, Output, Directive, Optional, SkipSelf, InjectionToken, ChangeDetectorRef, Inject, ViewChild, forwardRef, ViewContainerRef, Attribute, ContentChild, InjectFlags, Injector, Self, NgModule } from '@angular/core';
5
+ import { ɵɵdefineInjectable, Injectable, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, NgZone, Input, Output, Directive, Optional, SkipSelf, InjectionToken, ChangeDetectorRef, Inject, ViewChild, forwardRef, ViewContainerRef, Attribute, ContentChild, InjectFlags, Injector, Self, TemplateRef, NgModule } from '@angular/core';
6
6
  import { MatButtonModule } from '@angular/material/button';
7
7
  import { MatDialog, MatDialogModule } from '@angular/material/dialog';
8
8
  import { CdkScrollableModule } from '@angular/cdk/scrolling';
@@ -327,7 +327,7 @@ MatCalendarBody.decorators = [
327
327
  exportAs: 'matCalendarBody',
328
328
  encapsulation: ViewEncapsulation.None,
329
329
  changeDetection: ChangeDetectionStrategy.OnPush,
330
- styles: [".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.7142857143%;padding-right:4.7142857143%}.mat-calendar-body-cell{position:relative;height:0;line-height:0;text-align:center;outline:none;cursor:pointer}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\"\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}.cdk-high-contrast-active .mat-calendar-body-cell-content{border:none}.cdk-high-contrast-active .mat-datepicker-popup:not(:empty),.cdk-high-contrast-active .mat-calendar-body-selected{outline:solid 1px}.cdk-high-contrast-active .mat-calendar-body-today{outline:dotted 1px}.cdk-high-contrast-active .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-high-contrast-active .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){outline:dotted 2px}[dir=rtl] .mat-calendar-body-label{text-align:right}@media(hover: none){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:transparent}}\n"]
330
+ styles: [".mat-calendar-body{min-width:224px}.mat-calendar-body-label{height:0;line-height:0;text-align:left;padding-left:4.7142857143%;padding-right:4.7142857143%}.mat-calendar-body-cell{position:relative;height:0;line-height:0;text-align:center;outline:none;cursor:pointer}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\"\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.cdk-high-contrast-active .mat-calendar-body-disabled{opacity:.5}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}.cdk-high-contrast-active .mat-calendar-body-cell-content{border:none}.mat-datepicker-dialog .mat-dialog-container{position:relative;overflow:visible}.cdk-high-contrast-active .mat-datepicker-popup:not(:empty),.cdk-high-contrast-active .mat-calendar-body-selected{outline:solid 1px}.cdk-high-contrast-active .mat-calendar-body-today{outline:dotted 1px}.cdk-high-contrast-active .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-high-contrast-active .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){outline:dotted 2px}[dir=rtl] .mat-calendar-body-label{text-align:right}@media(hover: none){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:transparent}}\n"]
331
331
  },] }
332
332
  ];
333
333
  MatCalendarBody.ctorParameters = () => [
@@ -415,6 +415,17 @@ class MatDateSelectionModel {
415
415
  _isValidDateInstance(date) {
416
416
  return this._adapter.isDateInstance(date) && this._adapter.isValid(date);
417
417
  }
418
+ /**
419
+ * Clones the selection model.
420
+ * @deprecated To be turned into an abstract method.
421
+ * @breaking-change 12.0.0
422
+ */
423
+ clone() {
424
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
425
+ throw Error('Not implemented');
426
+ }
427
+ return null;
428
+ }
418
429
  }
419
430
  MatDateSelectionModel.decorators = [
420
431
  { type: Directive }
@@ -446,6 +457,12 @@ class MatSingleDateSelectionModel extends MatDateSelectionModel {
446
457
  isComplete() {
447
458
  return this.selection != null;
448
459
  }
460
+ /** Clones the selection model. */
461
+ clone() {
462
+ const clone = new MatSingleDateSelectionModel(this._adapter);
463
+ clone.updateSelection(this.selection, this);
464
+ return clone;
465
+ }
449
466
  }
450
467
  MatSingleDateSelectionModel.decorators = [
451
468
  { type: Injectable }
@@ -500,6 +517,12 @@ class MatRangeDateSelectionModel extends MatDateSelectionModel {
500
517
  isComplete() {
501
518
  return this.selection.start != null && this.selection.end != null;
502
519
  }
520
+ /** Clones the selection model. */
521
+ clone() {
522
+ const clone = new MatRangeDateSelectionModel(this._adapter);
523
+ clone.updateSelection(this.selection, this);
524
+ return clone;
525
+ }
503
526
  }
504
527
  MatRangeDateSelectionModel.decorators = [
505
528
  { type: Injectable }
@@ -756,8 +779,9 @@ class MatMonthView {
756
779
  _init() {
757
780
  this._setRanges(this.selected);
758
781
  this._todayDate = this._getCellCompareValue(this._dateAdapter.today());
759
- this._monthLabel =
760
- this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)]
782
+ this._monthLabel = this._dateFormats.display.monthLabel
783
+ ? this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthLabel)
784
+ : this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)]
761
785
  .toLocaleUpperCase();
762
786
  let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), 1);
763
787
  this._firstWeekOffset =
@@ -1802,7 +1826,7 @@ const _MatDatepickerContentMixinBase = mixinColor(MatDatepickerContentBase);
1802
1826
  * @docs-private
1803
1827
  */
1804
1828
  class MatDatepickerContent extends _MatDatepickerContentMixinBase {
1805
- constructor(elementRef, _changeDetectorRef, _model, _dateAdapter, _rangeSelectionStrategy,
1829
+ constructor(elementRef, _changeDetectorRef, _globalModel, _dateAdapter, _rangeSelectionStrategy,
1806
1830
  /**
1807
1831
  * @deprecated `intl` argument to become required.
1808
1832
  * @breaking-change 12.0.0
@@ -1810,7 +1834,7 @@ class MatDatepickerContent extends _MatDatepickerContentMixinBase {
1810
1834
  intl) {
1811
1835
  super(elementRef);
1812
1836
  this._changeDetectorRef = _changeDetectorRef;
1813
- this._model = _model;
1837
+ this._globalModel = _globalModel;
1814
1838
  this._dateAdapter = _dateAdapter;
1815
1839
  this._rangeSelectionStrategy = _rangeSelectionStrategy;
1816
1840
  this._subscriptions = new Subscription();
@@ -1818,11 +1842,19 @@ class MatDatepickerContent extends _MatDatepickerContentMixinBase {
1818
1842
  this._animationState = 'enter';
1819
1843
  /** Emits when an animation has finished. */
1820
1844
  this._animationDone = new Subject();
1845
+ /** Portal with projected action buttons. */
1846
+ this._actionsPortal = null;
1821
1847
  // @breaking-change 12.0.0 Remove fallback for `intl`.
1822
1848
  this._closeButtonText = (intl === null || intl === void 0 ? void 0 : intl.closeCalendarLabel) || 'Close calendar';
1823
1849
  }
1850
+ ngOnInit() {
1851
+ // If we have actions, clone the model so that we have the ability to cancel the selection,
1852
+ // otherwise update the global model directly. Note that we want to assign this as soon as
1853
+ // possible, but `_actionsPortal` isn't available in the constructor so we do it in `ngOnInit`.
1854
+ this._model = this._actionsPortal ? this._globalModel.clone() : this._globalModel;
1855
+ }
1824
1856
  ngAfterViewInit() {
1825
- this._subscriptions.add(this.datepicker._stateChanges.subscribe(() => {
1857
+ this._subscriptions.add(this.datepicker.stateChanges.subscribe(() => {
1826
1858
  this._changeDetectorRef.markForCheck();
1827
1859
  }));
1828
1860
  this._calendar.focusActiveCell();
@@ -1848,7 +1880,8 @@ class MatDatepickerContent extends _MatDatepickerContentMixinBase {
1848
1880
  !this._dateAdapter.sameDate(value, selection))) {
1849
1881
  this._model.add(value);
1850
1882
  }
1851
- if (!this._model || this._model.isComplete()) {
1883
+ // Delegate closing the popup to the actions.
1884
+ if ((!this._model || this._model.isComplete()) && !this._actionsPortal) {
1852
1885
  this.datepicker.close();
1853
1886
  }
1854
1887
  }
@@ -1859,11 +1892,17 @@ class MatDatepickerContent extends _MatDatepickerContentMixinBase {
1859
1892
  _getSelected() {
1860
1893
  return this._model.selection;
1861
1894
  }
1895
+ /** Applies the current pending selection to the global model. */
1896
+ _applyPendingSelection() {
1897
+ if (this._model !== this._globalModel) {
1898
+ this._globalModel.updateSelection(this._model.selection, this);
1899
+ }
1900
+ }
1862
1901
  }
1863
1902
  MatDatepickerContent.decorators = [
1864
1903
  { type: Component, args: [{
1865
1904
  selector: 'mat-datepicker-content',
1866
- template: "<div cdkTrapFocus>\n <mat-calendar\n [id]=\"datepicker.id\"\n [ngClass]=\"datepicker.panelClass\"\n [startAt]=\"datepicker.startAt\"\n [startView]=\"datepicker.startView\"\n [minDate]=\"datepicker._getMinDate()\"\n [maxDate]=\"datepicker._getMaxDate()\"\n [dateFilter]=\"datepicker._getDateFilter()\"\n [headerComponent]=\"datepicker.calendarHeaderComponent\"\n [selected]=\"_getSelected()\"\n [dateClass]=\"datepicker.dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [@fadeInCalendar]=\"'enter'\"\n (yearSelected)=\"datepicker._selectYear($event)\"\n (monthSelected)=\"datepicker._selectMonth($event)\"\n (viewChanged)=\"datepicker._viewChanged($event)\"\n (_userSelection)=\"_handleUserSelection($event)\"></mat-calendar>\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n mat-raised-button\n color=\"primary\"\n class=\"mat-datepicker-close-button\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"datepicker.close()\">{{ _closeButtonText }}</button>\n</div>\n",
1905
+ template: "<div\n cdkTrapFocus\n class=\"mat-datepicker-content-container\"\n [class.mat-datepicker-content-container-with-actions]=\"_actionsPortal\">\n <mat-calendar\n [id]=\"datepicker.id\"\n [ngClass]=\"datepicker.panelClass\"\n [startAt]=\"datepicker.startAt\"\n [startView]=\"datepicker.startView\"\n [minDate]=\"datepicker._getMinDate()\"\n [maxDate]=\"datepicker._getMaxDate()\"\n [dateFilter]=\"datepicker._getDateFilter()\"\n [headerComponent]=\"datepicker.calendarHeaderComponent\"\n [selected]=\"_getSelected()\"\n [dateClass]=\"datepicker.dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [@fadeInCalendar]=\"'enter'\"\n (yearSelected)=\"datepicker._selectYear($event)\"\n (monthSelected)=\"datepicker._selectMonth($event)\"\n (viewChanged)=\"datepicker._viewChanged($event)\"\n (_userSelection)=\"_handleUserSelection($event)\"></mat-calendar>\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n mat-raised-button\n [color]=\"color || 'primary'\"\n class=\"mat-datepicker-close-button\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"datepicker.close()\">{{ _closeButtonText }}</button>\n</div>\n",
1867
1906
  host: {
1868
1907
  'class': 'mat-datepicker-content',
1869
1908
  '[@transformPanel]': '_animationState',
@@ -1878,7 +1917,7 @@ MatDatepickerContent.decorators = [
1878
1917
  encapsulation: ViewEncapsulation.None,
1879
1918
  changeDetection: ChangeDetectionStrategy.OnPush,
1880
1919
  inputs: ['color'],
1881
- styles: [".mat-datepicker-content{display:block;border-radius:4px}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.mat-datepicker-content-touch{display:block;max-height:80vh;overflow:auto;margin:-24px}.mat-datepicker-content-touch .mat-calendar{min-width:250px;min-height:312px;max-width:750px;max-height:788px}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-calendar{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-calendar{width:80vw;height:100vw}}\n"]
1920
+ styles: [".mat-datepicker-content{display:block;border-radius:4px}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.ng-animating .mat-datepicker-content .mat-datepicker-close-button{display:none}.mat-datepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.mat-datepicker-content-touch{display:block;max-height:80vh;overflow:auto;margin:-24px}.mat-datepicker-content-touch .mat-datepicker-content-container{min-height:312px;max-height:788px;min-width:250px;max-width:750px}.mat-datepicker-content-touch .mat-calendar{width:100%;height:auto}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-datepicker-content-container{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-datepicker-content-container{width:80vw;height:100vw}.mat-datepicker-content-touch .mat-datepicker-content-container-with-actions{height:115vw}}\n"]
1882
1921
  },] }
1883
1922
  ];
1884
1923
  MatDatepickerContent.ctorParameters = () => [
@@ -1937,7 +1976,7 @@ class MatDatepickerBase {
1937
1976
  /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
1938
1977
  this._backdropHarnessClass = `${this.id}-backdrop`;
1939
1978
  /** Emits when the datepicker's state changes. */
1940
- this._stateChanges = new Subject();
1979
+ this.stateChanges = new Subject();
1941
1980
  if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
1942
1981
  throw createMissingDateImplError('DateAdapter');
1943
1982
  }
@@ -1947,7 +1986,7 @@ class MatDatepickerBase {
1947
1986
  get startAt() {
1948
1987
  // If an explicit startAt is set we start there, otherwise we start at whatever the currently
1949
1988
  // selected value is.
1950
- return this._startAt || (this._datepickerInput ? this._datepickerInput.getStartValue() : null);
1989
+ return this._startAt || (this.datepickerInput ? this.datepickerInput.getStartValue() : null);
1951
1990
  }
1952
1991
  set startAt(value) {
1953
1992
  this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
@@ -1955,7 +1994,7 @@ class MatDatepickerBase {
1955
1994
  /** Color palette to use on the datepicker's calendar. */
1956
1995
  get color() {
1957
1996
  return this._color ||
1958
- (this._datepickerInput ? this._datepickerInput.getThemePalette() : undefined);
1997
+ (this.datepickerInput ? this.datepickerInput.getThemePalette() : undefined);
1959
1998
  }
1960
1999
  set color(value) {
1961
2000
  this._color = value;
@@ -1970,14 +2009,14 @@ class MatDatepickerBase {
1970
2009
  }
1971
2010
  /** Whether the datepicker pop-up should be disabled. */
1972
2011
  get disabled() {
1973
- return this._disabled === undefined && this._datepickerInput ?
1974
- this._datepickerInput.disabled : !!this._disabled;
2012
+ return this._disabled === undefined && this.datepickerInput ?
2013
+ this.datepickerInput.disabled : !!this._disabled;
1975
2014
  }
1976
2015
  set disabled(value) {
1977
2016
  const newValue = coerceBooleanProperty(value);
1978
2017
  if (newValue !== this._disabled) {
1979
2018
  this._disabled = newValue;
1980
- this._stateChanges.next(undefined);
2019
+ this.stateChanges.next(undefined);
1981
2020
  }
1982
2021
  }
1983
2022
  /**
@@ -1995,14 +2034,14 @@ class MatDatepickerBase {
1995
2034
  }
1996
2035
  /** The minimum selectable date. */
1997
2036
  _getMinDate() {
1998
- return this._datepickerInput && this._datepickerInput.min;
2037
+ return this.datepickerInput && this.datepickerInput.min;
1999
2038
  }
2000
2039
  /** The maximum selectable date. */
2001
2040
  _getMaxDate() {
2002
- return this._datepickerInput && this._datepickerInput.max;
2041
+ return this.datepickerInput && this.datepickerInput.max;
2003
2042
  }
2004
2043
  _getDateFilter() {
2005
- return this._datepickerInput && this._datepickerInput.dateFilter;
2044
+ return this.datepickerInput && this.datepickerInput.dateFilter;
2006
2045
  }
2007
2046
  ngOnChanges(changes) {
2008
2047
  const positionChange = changes['xPosition'] || changes['yPosition'];
@@ -2012,13 +2051,13 @@ class MatDatepickerBase {
2012
2051
  this._popupRef.updatePosition();
2013
2052
  }
2014
2053
  }
2015
- this._stateChanges.next(undefined);
2054
+ this.stateChanges.next(undefined);
2016
2055
  }
2017
2056
  ngOnDestroy() {
2018
2057
  this._destroyPopup();
2019
2058
  this.close();
2020
2059
  this._inputStateChanges.unsubscribe();
2021
- this._stateChanges.complete();
2060
+ this.stateChanges.complete();
2022
2061
  }
2023
2062
  /** Selects the given date */
2024
2063
  select(date) {
@@ -2041,22 +2080,41 @@ class MatDatepickerBase {
2041
2080
  * @param input The datepicker input to register with this datepicker.
2042
2081
  * @returns Selection model that the input should hook itself up to.
2043
2082
  */
2044
- _registerInput(input) {
2045
- if (this._datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {
2083
+ registerInput(input) {
2084
+ if (this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {
2046
2085
  throw Error('A MatDatepicker can only be associated with a single input.');
2047
2086
  }
2048
2087
  this._inputStateChanges.unsubscribe();
2049
- this._datepickerInput = input;
2088
+ this.datepickerInput = input;
2050
2089
  this._inputStateChanges =
2051
- input.stateChanges.subscribe(() => this._stateChanges.next(undefined));
2090
+ input.stateChanges.subscribe(() => this.stateChanges.next(undefined));
2052
2091
  return this._model;
2053
2092
  }
2093
+ /**
2094
+ * Registers a portal containing action buttons with the datepicker.
2095
+ * @param portal Portal to be registered.
2096
+ */
2097
+ registerActions(portal) {
2098
+ if (this._actionsPortal && (typeof ngDevMode === 'undefined' || ngDevMode)) {
2099
+ throw Error('A MatDatepicker can only be associated with a single actions row.');
2100
+ }
2101
+ this._actionsPortal = portal;
2102
+ }
2103
+ /**
2104
+ * Removes a portal containing action buttons from the datepicker.
2105
+ * @param portal Portal to be removed.
2106
+ */
2107
+ removeActions(portal) {
2108
+ if (portal === this._actionsPortal) {
2109
+ this._actionsPortal = null;
2110
+ }
2111
+ }
2054
2112
  /** Open the calendar. */
2055
2113
  open() {
2056
2114
  if (this._opened || this.disabled) {
2057
2115
  return;
2058
2116
  }
2059
- if (!this._datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {
2117
+ if (!this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {
2060
2118
  throw Error('Attempted to open an MatDatepicker with no associated input.');
2061
2119
  }
2062
2120
  if (this._document) {
@@ -2103,6 +2161,12 @@ class MatDatepickerBase {
2103
2161
  completeClose();
2104
2162
  }
2105
2163
  }
2164
+ /** Applies the current pending selection on the popup to the model. */
2165
+ _applyPendingSelection() {
2166
+ var _a, _b;
2167
+ const instance = ((_a = this._popupComponentRef) === null || _a === void 0 ? void 0 : _a.instance) || ((_b = this._dialogRef) === null || _b === void 0 ? void 0 : _b.componentInstance);
2168
+ instance === null || instance === void 0 ? void 0 : instance._applyPendingSelection();
2169
+ }
2106
2170
  /** Open the calendar as a dialog. */
2107
2171
  _openAsDialog() {
2108
2172
  // Usually this would be handled by `open` which ensures that we can only have one overlay
@@ -2128,7 +2192,9 @@ class MatDatepickerBase {
2128
2192
  maxWidth: '80vw',
2129
2193
  maxHeight: '',
2130
2194
  position: {},
2131
- autoFocus: true,
2195
+ // Disable the dialog's automatic focus capturing, because it'll go to the close button
2196
+ // automatically. The calendar will move focus on its own once it renders.
2197
+ autoFocus: false,
2132
2198
  // `MatDialog` has focus restoration built in, however we want to disable it since the
2133
2199
  // datepicker also has focus restoration for dropdown mode. We want to do this, in order
2134
2200
  // to ensure that the timing is consistent between dropdown and dialog modes since `MatDialog`
@@ -2156,11 +2222,12 @@ class MatDatepickerBase {
2156
2222
  _forwardContentValues(instance) {
2157
2223
  instance.datepicker = this;
2158
2224
  instance.color = this.color;
2225
+ instance._actionsPortal = this._actionsPortal;
2159
2226
  }
2160
2227
  /** Create the popup. */
2161
2228
  _createPopup() {
2162
2229
  const positionStrategy = this._overlay.position()
2163
- .flexibleConnectedTo(this._datepickerInput.getConnectedOverlayOrigin())
2230
+ .flexibleConnectedTo(this.datepickerInput.getConnectedOverlayOrigin())
2164
2231
  .withTransformOriginOn('.mat-datepicker-content')
2165
2232
  .withFlexibleDimensions(false)
2166
2233
  .withViewportMargin(8)
@@ -2177,7 +2244,7 @@ class MatDatepickerBase {
2177
2244
  this._popupRef.overlayElement.setAttribute('role', 'dialog');
2178
2245
  merge(this._popupRef.backdropClick(), this._popupRef.detachments(), this._popupRef.keydownEvents().pipe(filter(event => {
2179
2246
  // Closing on alt + up is only valid when there's an input associated with the datepicker.
2180
- return (event.keyCode === ESCAPE && !hasModifierKey(event)) || (this._datepickerInput &&
2247
+ return (event.keyCode === ESCAPE && !hasModifierKey(event)) || (this.datepickerInput &&
2181
2248
  hasModifierKey(event, 'altKey') && event.keyCode === UP_ARROW);
2182
2249
  }))).subscribe(event => {
2183
2250
  if (event) {
@@ -2280,7 +2347,10 @@ MatDatepicker.decorators = [
2280
2347
  exportAs: 'matDatepicker',
2281
2348
  changeDetection: ChangeDetectionStrategy.OnPush,
2282
2349
  encapsulation: ViewEncapsulation.None,
2283
- providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER]
2350
+ providers: [
2351
+ MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,
2352
+ { provide: MatDatepickerBase, useExisting: MatDatepicker },
2353
+ ]
2284
2354
  },] }
2285
2355
  ];
2286
2356
 
@@ -2317,8 +2387,6 @@ class MatDatepickerInputBase {
2317
2387
  this.dateChange = new EventEmitter();
2318
2388
  /** Emits when an `input` event is fired on this `<input>`. */
2319
2389
  this.dateInput = new EventEmitter();
2320
- /** Emits when the value changes (either due to user input or programmatic change). */
2321
- this._valueChange = new EventEmitter();
2322
2390
  /** Emits when the internal state has changed */
2323
2391
  this.stateChanges = new Subject();
2324
2392
  this._onTouched = () => { };
@@ -2365,7 +2433,7 @@ class MatDatepickerInputBase {
2365
2433
  }
2366
2434
  // Update the displayed date when the locale changes.
2367
2435
  this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {
2368
- this.value = this.value;
2436
+ this._assignValueProgrammatically(this.value);
2369
2437
  });
2370
2438
  }
2371
2439
  /** The value of the input. */
@@ -2373,15 +2441,7 @@ class MatDatepickerInputBase {
2373
2441
  return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;
2374
2442
  }
2375
2443
  set value(value) {
2376
- value = this._dateAdapter.deserialize(value);
2377
- this._lastValueValid = this._isValidValue(value);
2378
- value = this._dateAdapter.getValidDateOrNull(value);
2379
- const oldDate = this.value;
2380
- this._assignValue(value);
2381
- this._formatValue(value);
2382
- if (!this._dateAdapter.sameDate(oldDate, value)) {
2383
- this._valueChange.emit(value);
2384
- }
2444
+ this._assignValueProgrammatically(value);
2385
2445
  }
2386
2446
  /** Whether the datepicker-input is disabled. */
2387
2447
  get disabled() { return !!this._disabled || this._parentDisabled(); }
@@ -2415,22 +2475,14 @@ class MatDatepickerInputBase {
2415
2475
  this._assignValue(this._pendingValue);
2416
2476
  }
2417
2477
  this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {
2418
- if (event.source !== this) {
2478
+ if (this._shouldHandleChangeEvent(event)) {
2419
2479
  const value = this._getValueFromModel(event.selection);
2420
2480
  this._lastValueValid = this._isValidValue(value);
2421
2481
  this._cvaOnChange(value);
2422
2482
  this._onTouched();
2423
2483
  this._formatValue(value);
2424
- // Note that we can't wrap the entire block with this logic, because for the range inputs
2425
- // we want to revalidate whenever either one of the inputs changes and we don't have a
2426
- // good way of distinguishing it at the moment.
2427
- if (this._canEmitChangeEvent(event)) {
2428
- this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
2429
- this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
2430
- }
2431
- if (this._outsideValueChanged) {
2432
- this._outsideValueChanged();
2433
- }
2484
+ this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
2485
+ this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
2434
2486
  }
2435
2487
  });
2436
2488
  }
@@ -2445,7 +2497,6 @@ class MatDatepickerInputBase {
2445
2497
  ngOnDestroy() {
2446
2498
  this._valueChangesSubscription.unsubscribe();
2447
2499
  this._localeSubscription.unsubscribe();
2448
- this._valueChange.complete();
2449
2500
  this.stateChanges.complete();
2450
2501
  }
2451
2502
  /** @docs-private */
@@ -2458,7 +2509,7 @@ class MatDatepickerInputBase {
2458
2509
  }
2459
2510
  // Implemented as part of ControlValueAccessor.
2460
2511
  writeValue(value) {
2461
- this.value = value;
2512
+ this._assignValueProgrammatically(value);
2462
2513
  }
2463
2514
  // Implemented as part of ControlValueAccessor.
2464
2515
  registerOnChange(fn) {
@@ -2487,7 +2538,6 @@ class MatDatepickerInputBase {
2487
2538
  if (!this._dateAdapter.sameDate(date, this.value)) {
2488
2539
  this._assignValue(date);
2489
2540
  this._cvaOnChange(date);
2490
- this._valueChange.emit(date);
2491
2541
  this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));
2492
2542
  }
2493
2543
  else {
@@ -2540,6 +2590,14 @@ class MatDatepickerInputBase {
2540
2590
  _parentDisabled() {
2541
2591
  return false;
2542
2592
  }
2593
+ /** Programmatically assigns a value to the input. */
2594
+ _assignValueProgrammatically(value) {
2595
+ value = this._dateAdapter.deserialize(value);
2596
+ this._lastValueValid = this._isValidValue(value);
2597
+ value = this._dateAdapter.getValidDateOrNull(value);
2598
+ this._assignValue(value);
2599
+ this._formatValue(value);
2600
+ }
2543
2601
  /** Gets whether a value matches the current date filter. */
2544
2602
  _matchesFilter(value) {
2545
2603
  const filter = this._getDateFilter();
@@ -2604,13 +2662,15 @@ class MatDatepickerInput extends MatDatepickerInputBase {
2604
2662
  constructor(elementRef, dateAdapter, dateFormats, _formField) {
2605
2663
  super(elementRef, dateAdapter, dateFormats);
2606
2664
  this._formField = _formField;
2665
+ this._closedSubscription = Subscription.EMPTY;
2607
2666
  this._validator = Validators.compose(super._getValidators());
2608
2667
  }
2609
2668
  /** The datepicker that this input is associated with. */
2610
2669
  set matDatepicker(datepicker) {
2611
2670
  if (datepicker) {
2612
2671
  this._datepicker = datepicker;
2613
- this._registerModel(datepicker._registerInput(this));
2672
+ this._closedSubscription = datepicker.closedStream.subscribe(() => this._onTouched());
2673
+ this._registerModel(datepicker.registerInput(this));
2614
2674
  }
2615
2675
  }
2616
2676
  /** The minimum valid date. */
@@ -2655,6 +2715,10 @@ class MatDatepickerInput extends MatDatepickerInputBase {
2655
2715
  getStartValue() {
2656
2716
  return this.value;
2657
2717
  }
2718
+ ngOnDestroy() {
2719
+ super.ngOnDestroy();
2720
+ this._closedSubscription.unsubscribe();
2721
+ }
2658
2722
  /** Opens the associated datepicker. */
2659
2723
  _openPopup() {
2660
2724
  if (this._datepicker) {
@@ -2681,8 +2745,8 @@ class MatDatepickerInput extends MatDatepickerInputBase {
2681
2745
  _getDateFilter() {
2682
2746
  return this._dateFilter;
2683
2747
  }
2684
- _canEmitChangeEvent() {
2685
- return true;
2748
+ _shouldHandleChangeEvent(event) {
2749
+ return event.source !== this;
2686
2750
  }
2687
2751
  }
2688
2752
  MatDatepickerInput.decorators = [
@@ -2775,9 +2839,9 @@ class MatDatepickerToggle {
2775
2839
  }
2776
2840
  }
2777
2841
  _watchStateChanges() {
2778
- const datepickerStateChanged = this.datepicker ? this.datepicker._stateChanges : of();
2779
- const inputStateChanged = this.datepicker && this.datepicker._datepickerInput ?
2780
- this.datepicker._datepickerInput.stateChanges : of();
2842
+ const datepickerStateChanged = this.datepicker ? this.datepicker.stateChanges : of();
2843
+ const inputStateChanged = this.datepicker && this.datepicker.datepickerInput ?
2844
+ this.datepicker.datepickerInput.stateChanges : of();
2781
2845
  const datepickerToggled = this.datepicker ?
2782
2846
  merge(this.datepicker.openedStream, this.datepicker.closedStream) :
2783
2847
  of();
@@ -2788,18 +2852,15 @@ class MatDatepickerToggle {
2788
2852
  MatDatepickerToggle.decorators = [
2789
2853
  { type: Component, args: [{
2790
2854
  selector: 'mat-datepicker-toggle',
2791
- template: "<button\n #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"datepicker ? 'dialog' : null\"\n [attr.aria-label]=\"_intl.openCalendarLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\"\n (click)=\"_open($event)\">\n\n <svg\n *ngIf=\"!_customIcon\"\n class=\"mat-datepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\n </svg>\n\n <ng-content select=\"[matDatepickerToggleIcon]\"></ng-content>\n</button>\n",
2855
+ template: "<button\n #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"datepicker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\"\n (click)=\"_open($event)\">\n\n <svg\n *ngIf=\"!_customIcon\"\n class=\"mat-datepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\n </svg>\n\n <ng-content select=\"[matDatepickerToggleIcon]\"></ng-content>\n</button>\n",
2792
2856
  host: {
2793
2857
  'class': 'mat-datepicker-toggle',
2794
- // Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the
2795
- // consumer may have provided, while still being able to receive focus.
2796
- '[attr.tabindex]': 'disabled ? null : -1',
2858
+ '[attr.tabindex]': 'null',
2797
2859
  '[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',
2798
2860
  '[class.mat-accent]': 'datepicker && datepicker.color === "accent"',
2799
2861
  '[class.mat-warn]': 'datepicker && datepicker.color === "warn"',
2800
2862
  // Used by the test harness to tie this toggle to its datepicker.
2801
2863
  '[attr.data-mat-calendar]': 'datepicker ? datepicker.id : null',
2802
- '(focus)': '_button.focus()',
2803
2864
  },
2804
2865
  exportAs: 'matDatepickerToggle',
2805
2866
  encapsulation: ViewEncapsulation.None,
@@ -2815,6 +2876,7 @@ MatDatepickerToggle.ctorParameters = () => [
2815
2876
  MatDatepickerToggle.propDecorators = {
2816
2877
  datepicker: [{ type: Input, args: ['for',] }],
2817
2878
  tabIndex: [{ type: Input }],
2879
+ ariaLabel: [{ type: Input, args: ['aria-label',] }],
2818
2880
  disabled: [{ type: Input }],
2819
2881
  disableRipple: [{ type: Input }],
2820
2882
  _customIcon: [{ type: ContentChild, args: [MatDatepickerToggleIcon,] }],
@@ -2844,11 +2906,6 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
2844
2906
  this._injector = _injector;
2845
2907
  this._parentForm = _parentForm;
2846
2908
  this._parentFormGroup = _parentFormGroup;
2847
- this._outsideValueChanged = () => {
2848
- // Whenever the value changes outside the input we need to revalidate, because
2849
- // the validation state of each of the inputs depends on the other one.
2850
- this._validatorOnChange();
2851
- };
2852
2909
  }
2853
2910
  ngOnInit() {
2854
2911
  // We need the date input to provide itself as a `ControlValueAccessor` and a `Validator`, while
@@ -2906,6 +2963,15 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
2906
2963
  _parentDisabled() {
2907
2964
  return this._rangeInput._groupDisabled;
2908
2965
  }
2966
+ _shouldHandleChangeEvent({ source }) {
2967
+ return source !== this._rangeInput._startInput && source !== this._rangeInput._endInput;
2968
+ }
2969
+ _assignValueProgrammatically(value) {
2970
+ super._assignValueProgrammatically(value);
2971
+ const opposite = (this === this._rangeInput._startInput ? this._rangeInput._endInput :
2972
+ this._rangeInput._startInput);
2973
+ opposite === null || opposite === void 0 ? void 0 : opposite._validatorOnChange();
2974
+ }
2909
2975
  }
2910
2976
  MatDateRangeInputPartBase.decorators = [
2911
2977
  { type: Directive }
@@ -2939,9 +3005,6 @@ class MatStartDate extends _MatDateRangeInputBase {
2939
3005
  null : { 'matStartDateInvalid': { 'end': end, 'actual': start } };
2940
3006
  };
2941
3007
  this._validator = Validators.compose([...super._getValidators(), this._startValidator]);
2942
- this._canEmitChangeEvent = (event) => {
2943
- return event.source !== this._rangeInput._endInput;
2944
- };
2945
3008
  }
2946
3009
  ngOnInit() {
2947
3010
  // Normally this happens automatically, but it seems to break if not added explicitly when all
@@ -2968,7 +3031,6 @@ class MatStartDate extends _MatDateRangeInputBase {
2968
3031
  if (this._model) {
2969
3032
  const range = new DateRange(value, this._model.selection.end);
2970
3033
  this._model.updateSelection(range, this);
2971
- this._cvaOnChange(value);
2972
3034
  }
2973
3035
  }
2974
3036
  _formatValue(value) {
@@ -3006,7 +3068,8 @@ MatStartDate.decorators = [
3006
3068
  ],
3007
3069
  // These need to be specified explicitly, because some tooling doesn't
3008
3070
  // seem to pick them up from the base class. See #20932.
3009
- outputs: ['dateChange', 'dateInput']
3071
+ outputs: ['dateChange', 'dateInput'],
3072
+ inputs: ['errorStateMatcher']
3010
3073
  },] }
3011
3074
  ];
3012
3075
  MatStartDate.ctorParameters = () => [
@@ -3035,9 +3098,6 @@ class MatEndDate extends _MatDateRangeInputBase {
3035
3098
  null : { 'matEndDateInvalid': { 'start': start, 'actual': end } };
3036
3099
  };
3037
3100
  this._validator = Validators.compose([...super._getValidators(), this._endValidator]);
3038
- this._canEmitChangeEvent = (event) => {
3039
- return event.source !== this._rangeInput._startInput;
3040
- };
3041
3101
  }
3042
3102
  ngOnInit() {
3043
3103
  // Normally this happens automatically, but it seems to break if not added explicitly when all
@@ -3064,7 +3124,6 @@ class MatEndDate extends _MatDateRangeInputBase {
3064
3124
  if (this._model) {
3065
3125
  const range = new DateRange(this._model.selection.start, value);
3066
3126
  this._model.updateSelection(range, this);
3067
- this._cvaOnChange(value);
3068
3127
  }
3069
3128
  }
3070
3129
  _onKeydown(event) {
@@ -3097,7 +3156,8 @@ MatEndDate.decorators = [
3097
3156
  ],
3098
3157
  // These need to be specified explicitly, because some tooling doesn't
3099
3158
  // seem to pick them up from the base class. See #20932.
3100
- outputs: ['dateChange', 'dateInput']
3159
+ outputs: ['dateChange', 'dateInput'],
3160
+ inputs: ['errorStateMatcher']
3101
3161
  },] }
3102
3162
  ];
3103
3163
  MatEndDate.ctorParameters = () => [
@@ -3111,41 +3171,6 @@ MatEndDate.ctorParameters = () => [
3111
3171
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_FORMATS,] }] }
3112
3172
  ];
3113
3173
 
3114
- /**
3115
- * @license
3116
- * Copyright Google LLC All Rights Reserved.
3117
- *
3118
- * Use of this source code is governed by an MIT-style license that can be
3119
- * found in the LICENSE file at https://angular.io/license
3120
- */
3121
- // TODO(mmalerba): We use a component instead of a directive here so the user can use implicit
3122
- // template reference variables (e.g. #d vs #d="matDateRangePicker"). We can change this to a
3123
- // directive if angular adds support for `exportAs: '$implicit'` on directives.
3124
- /** Component responsible for managing the date range picker popup/dialog. */
3125
- class MatDateRangePicker extends MatDatepickerBase {
3126
- _forwardContentValues(instance) {
3127
- super._forwardContentValues(instance);
3128
- const input = this._datepickerInput;
3129
- if (input) {
3130
- instance.comparisonStart = input.comparisonStart;
3131
- instance.comparisonEnd = input.comparisonEnd;
3132
- }
3133
- }
3134
- }
3135
- MatDateRangePicker.decorators = [
3136
- { type: Component, args: [{
3137
- selector: 'mat-date-range-picker',
3138
- template: '',
3139
- exportAs: 'matDateRangePicker',
3140
- changeDetection: ChangeDetectionStrategy.OnPush,
3141
- encapsulation: ViewEncapsulation.None,
3142
- providers: [
3143
- MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,
3144
- MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,
3145
- ]
3146
- },] }
3147
- ];
3148
-
3149
3174
  /**
3150
3175
  * @license
3151
3176
  * Copyright Google LLC All Rights Reserved.
@@ -3160,6 +3185,7 @@ class MatDateRangeInput {
3160
3185
  this._elementRef = _elementRef;
3161
3186
  this._dateAdapter = _dateAdapter;
3162
3187
  this._formField = _formField;
3188
+ this._closedSubscription = Subscription.EMPTY;
3163
3189
  /** Unique ID for the input. */
3164
3190
  this.id = `mat-date-range-input-${nextUniqueId++}`;
3165
3191
  /** Whether the control is focused. */
@@ -3206,8 +3232,14 @@ class MatDateRangeInput {
3206
3232
  get rangePicker() { return this._rangePicker; }
3207
3233
  set rangePicker(rangePicker) {
3208
3234
  if (rangePicker) {
3209
- this._model = rangePicker._registerInput(this);
3235
+ this._model = rangePicker.registerInput(this);
3210
3236
  this._rangePicker = rangePicker;
3237
+ this._closedSubscription.unsubscribe();
3238
+ this._closedSubscription = rangePicker.closedStream.subscribe(() => {
3239
+ var _a, _b;
3240
+ (_a = this._startInput) === null || _a === void 0 ? void 0 : _a._onTouched();
3241
+ (_b = this._endInput) === null || _b === void 0 ? void 0 : _b._onTouched();
3242
+ });
3211
3243
  this._registerModel(this._model);
3212
3244
  }
3213
3245
  }
@@ -3320,6 +3352,7 @@ class MatDateRangeInput {
3320
3352
  }
3321
3353
  }
3322
3354
  ngOnDestroy() {
3355
+ this._closedSubscription.unsubscribe();
3323
3356
  this.stateChanges.complete();
3324
3357
  }
3325
3358
  /** Gets the date at which the calendar should start. */
@@ -3428,6 +3461,128 @@ MatDateRangeInput.propDecorators = {
3428
3461
  _endInput: [{ type: ContentChild, args: [MatEndDate,] }]
3429
3462
  };
3430
3463
 
3464
+ /**
3465
+ * @license
3466
+ * Copyright Google LLC All Rights Reserved.
3467
+ *
3468
+ * Use of this source code is governed by an MIT-style license that can be
3469
+ * found in the LICENSE file at https://angular.io/license
3470
+ */
3471
+ // TODO(mmalerba): We use a component instead of a directive here so the user can use implicit
3472
+ // template reference variables (e.g. #d vs #d="matDateRangePicker"). We can change this to a
3473
+ // directive if angular adds support for `exportAs: '$implicit'` on directives.
3474
+ /** Component responsible for managing the date range picker popup/dialog. */
3475
+ class MatDateRangePicker extends MatDatepickerBase {
3476
+ _forwardContentValues(instance) {
3477
+ super._forwardContentValues(instance);
3478
+ const input = this.datepickerInput;
3479
+ if (input) {
3480
+ instance.comparisonStart = input.comparisonStart;
3481
+ instance.comparisonEnd = input.comparisonEnd;
3482
+ }
3483
+ }
3484
+ }
3485
+ MatDateRangePicker.decorators = [
3486
+ { type: Component, args: [{
3487
+ selector: 'mat-date-range-picker',
3488
+ template: '',
3489
+ exportAs: 'matDateRangePicker',
3490
+ changeDetection: ChangeDetectionStrategy.OnPush,
3491
+ encapsulation: ViewEncapsulation.None,
3492
+ providers: [
3493
+ MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,
3494
+ MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,
3495
+ { provide: MatDatepickerBase, useExisting: MatDateRangePicker },
3496
+ ]
3497
+ },] }
3498
+ ];
3499
+
3500
+ /**
3501
+ * @license
3502
+ * Copyright Google LLC All Rights Reserved.
3503
+ *
3504
+ * Use of this source code is governed by an MIT-style license that can be
3505
+ * found in the LICENSE file at https://angular.io/license
3506
+ */
3507
+ /** Button that will close the datepicker and assign the current selection to the data model. */
3508
+ class MatDatepickerApply {
3509
+ constructor(_datepicker) {
3510
+ this._datepicker = _datepicker;
3511
+ }
3512
+ _applySelection() {
3513
+ this._datepicker._applyPendingSelection();
3514
+ this._datepicker.close();
3515
+ }
3516
+ }
3517
+ MatDatepickerApply.decorators = [
3518
+ { type: Directive, args: [{
3519
+ selector: '[matDatepickerApply], [matDateRangePickerApply]',
3520
+ host: { '(click)': '_applySelection()' }
3521
+ },] }
3522
+ ];
3523
+ MatDatepickerApply.ctorParameters = () => [
3524
+ { type: MatDatepickerBase }
3525
+ ];
3526
+ /** Button that will close the datepicker and discard the current selection. */
3527
+ class MatDatepickerCancel {
3528
+ constructor(_datepicker) {
3529
+ this._datepicker = _datepicker;
3530
+ }
3531
+ }
3532
+ MatDatepickerCancel.decorators = [
3533
+ { type: Directive, args: [{
3534
+ selector: '[matDatepickerCancel], [matDateRangePickerCancel]',
3535
+ host: { '(click)': '_datepicker.close()' }
3536
+ },] }
3537
+ ];
3538
+ MatDatepickerCancel.ctorParameters = () => [
3539
+ { type: MatDatepickerBase }
3540
+ ];
3541
+ /**
3542
+ * Container that can be used to project a row of action buttons
3543
+ * to the bottom of a datepicker or date range picker.
3544
+ */
3545
+ class MatDatepickerActions {
3546
+ constructor(_datepicker, _viewContainerRef) {
3547
+ this._datepicker = _datepicker;
3548
+ this._viewContainerRef = _viewContainerRef;
3549
+ }
3550
+ ngAfterViewInit() {
3551
+ this._portal = new TemplatePortal(this._template, this._viewContainerRef);
3552
+ this._datepicker.registerActions(this._portal);
3553
+ }
3554
+ ngOnDestroy() {
3555
+ var _a;
3556
+ this._datepicker.removeActions(this._portal);
3557
+ // Needs to be null checked since we initialize it in `ngAfterViewInit`.
3558
+ if (this._portal && this._portal.isAttached) {
3559
+ (_a = this._portal) === null || _a === void 0 ? void 0 : _a.detach();
3560
+ }
3561
+ }
3562
+ }
3563
+ MatDatepickerActions.decorators = [
3564
+ { type: Component, args: [{
3565
+ selector: 'mat-datepicker-actions, mat-date-range-picker-actions',
3566
+ template: `
3567
+ <ng-template>
3568
+ <div class="mat-datepicker-actions">
3569
+ <ng-content></ng-content>
3570
+ </div>
3571
+ </ng-template>
3572
+ `,
3573
+ changeDetection: ChangeDetectionStrategy.OnPush,
3574
+ encapsulation: ViewEncapsulation.None,
3575
+ styles: [".mat-datepicker-actions{display:flex;justify-content:flex-end;align-items:center;padding:0 8px 8px 8px}.mat-datepicker-actions .mat-button-base+.mat-button-base{margin-left:8px}[dir=rtl] .mat-datepicker-actions .mat-button-base+.mat-button-base{margin-left:0;margin-right:8px}\n"]
3576
+ },] }
3577
+ ];
3578
+ MatDatepickerActions.ctorParameters = () => [
3579
+ { type: MatDatepickerBase },
3580
+ { type: ViewContainerRef }
3581
+ ];
3582
+ MatDatepickerActions.propDecorators = {
3583
+ _template: [{ type: ViewChild, args: [TemplateRef,] }]
3584
+ };
3585
+
3431
3586
  /**
3432
3587
  * @license
3433
3588
  * Copyright Google LLC All Rights Reserved.
@@ -3465,6 +3620,9 @@ MatDatepickerModule.decorators = [
3465
3620
  MatStartDate,
3466
3621
  MatEndDate,
3467
3622
  MatDateRangePicker,
3623
+ MatDatepickerActions,
3624
+ MatDatepickerCancel,
3625
+ MatDatepickerApply
3468
3626
  ],
3469
3627
  declarations: [
3470
3628
  MatCalendar,
@@ -3482,6 +3640,9 @@ MatDatepickerModule.decorators = [
3482
3640
  MatStartDate,
3483
3641
  MatEndDate,
3484
3642
  MatDateRangePicker,
3643
+ MatDatepickerActions,
3644
+ MatDatepickerCancel,
3645
+ MatDatepickerApply
3485
3646
  ],
3486
3647
  providers: [
3487
3648
  MatDatepickerIntl,
@@ -3506,5 +3667,5 @@ MatDatepickerModule.decorators = [
3506
3667
  * Generated bundle index. Do not edit.
3507
3668
  */
3508
3669
 
3509
- export { DateRange, DefaultMatCalendarRangeStrategy, MAT_DATEPICKER_SCROLL_STRATEGY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_DATEPICKER_VALIDATORS, MAT_DATEPICKER_VALUE_ACCESSOR, MAT_DATE_RANGE_SELECTION_STRATEGY, MAT_RANGE_DATE_SELECTION_MODEL_FACTORY, MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY, MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, MatCalendar, MatCalendarBody, MatCalendarCell, MatCalendarHeader, MatDateRangeInput, MatDateRangePicker, MatDateSelectionModel, MatDatepicker, MatDatepickerContent, MatDatepickerInput, MatDatepickerInputEvent, MatDatepickerIntl, MatDatepickerModule, MatDatepickerToggle, MatDatepickerToggleIcon, MatEndDate, MatMonthView, MatMultiYearView, MatRangeDateSelectionModel, MatSingleDateSelectionModel, MatStartDate, MatYearView, matDatepickerAnimations, yearsPerPage, yearsPerRow, MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_material_datepicker_datepicker_a, MAT_CALENDAR_RANGE_STRATEGY_PROVIDER as ɵangular_material_src_material_datepicker_datepicker_b, MatDatepickerBase as ɵangular_material_src_material_datepicker_datepicker_c, MatDatepickerInputBase as ɵangular_material_src_material_datepicker_datepicker_d, MAT_DATE_RANGE_INPUT_PARENT as ɵangular_material_src_material_datepicker_datepicker_e };
3670
+ export { DateRange, DefaultMatCalendarRangeStrategy, MAT_DATEPICKER_SCROLL_STRATEGY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_DATEPICKER_VALIDATORS, MAT_DATEPICKER_VALUE_ACCESSOR, MAT_DATE_RANGE_SELECTION_STRATEGY, MAT_RANGE_DATE_SELECTION_MODEL_FACTORY, MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY, MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, MatCalendar, MatCalendarBody, MatCalendarCell, MatCalendarHeader, MatDateRangeInput, MatDateRangePicker, MatDateSelectionModel, MatDatepicker, MatDatepickerActions, MatDatepickerApply, MatDatepickerCancel, MatDatepickerContent, MatDatepickerInput, MatDatepickerInputEvent, MatDatepickerIntl, MatDatepickerModule, MatDatepickerToggle, MatDatepickerToggleIcon, MatEndDate, MatMonthView, MatMultiYearView, MatRangeDateSelectionModel, MatSingleDateSelectionModel, MatStartDate, MatYearView, matDatepickerAnimations, yearsPerPage, yearsPerRow, MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_material_datepicker_datepicker_a, MAT_CALENDAR_RANGE_STRATEGY_PROVIDER as ɵangular_material_src_material_datepicker_datepicker_b, MatDatepickerBase as ɵangular_material_src_material_datepicker_datepicker_c, MatDatepickerInputBase as ɵangular_material_src_material_datepicker_datepicker_d, MAT_DATE_RANGE_INPUT_PARENT as ɵangular_material_src_material_datepicker_datepicker_e };
3510
3671
  //# sourceMappingURL=datepicker.js.map