@angular/material 11.0.4 → 11.1.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 (583) hide show
  1. package/_theming.scss +354 -337
  2. package/autocomplete/_autocomplete-theme.scss +4 -5
  3. package/autocomplete/autocomplete.d.ts +7 -1
  4. package/autocomplete/index.metadata.json +1 -1
  5. package/autocomplete/testing/autocomplete-harness.d.ts +29 -15
  6. package/badge/_badge-theme.scss +2 -3
  7. package/bottom-sheet/_bottom-sheet-theme.scss +4 -5
  8. package/bundles/material-autocomplete-testing.umd.js +54 -36
  9. package/bundles/material-autocomplete-testing.umd.js.map +1 -1
  10. package/bundles/material-autocomplete-testing.umd.min.js +2 -2
  11. package/bundles/material-autocomplete-testing.umd.min.js.map +1 -1
  12. package/bundles/material-autocomplete.umd.js +31 -9
  13. package/bundles/material-autocomplete.umd.js.map +1 -1
  14. package/bundles/material-autocomplete.umd.min.js +3 -3
  15. package/bundles/material-autocomplete.umd.min.js.map +1 -1
  16. package/bundles/material-badge-testing.umd.js +9 -1
  17. package/bundles/material-badge-testing.umd.js.map +1 -1
  18. package/bundles/material-badge-testing.umd.min.js +1 -1
  19. package/bundles/material-badge-testing.umd.min.js.map +1 -1
  20. package/bundles/material-badge.umd.js +9 -1
  21. package/bundles/material-badge.umd.js.map +1 -1
  22. package/bundles/material-badge.umd.min.js +3 -3
  23. package/bundles/material-badge.umd.min.js.map +1 -1
  24. package/bundles/material-bottom-sheet-testing.umd.js +9 -1
  25. package/bundles/material-bottom-sheet-testing.umd.js.map +1 -1
  26. package/bundles/material-bottom-sheet-testing.umd.min.js +1 -1
  27. package/bundles/material-bottom-sheet-testing.umd.min.js.map +1 -1
  28. package/bundles/material-bottom-sheet.umd.js +9 -1
  29. package/bundles/material-bottom-sheet.umd.js.map +1 -1
  30. package/bundles/material-bottom-sheet.umd.min.js +1 -1
  31. package/bundles/material-bottom-sheet.umd.min.js.map +1 -1
  32. package/bundles/material-button-testing.umd.js +9 -1
  33. package/bundles/material-button-testing.umd.js.map +1 -1
  34. package/bundles/material-button-testing.umd.min.js +1 -1
  35. package/bundles/material-button-testing.umd.min.js.map +1 -1
  36. package/bundles/material-button-toggle-testing.umd.js +9 -1
  37. package/bundles/material-button-toggle-testing.umd.js.map +1 -1
  38. package/bundles/material-button-toggle-testing.umd.min.js +1 -1
  39. package/bundles/material-button-toggle-testing.umd.min.js.map +1 -1
  40. package/bundles/material-button-toggle.umd.js +9 -1
  41. package/bundles/material-button-toggle.umd.js.map +1 -1
  42. package/bundles/material-button-toggle.umd.min.js +1 -1
  43. package/bundles/material-button-toggle.umd.min.js.map +1 -1
  44. package/bundles/material-button.umd.js +17 -5
  45. package/bundles/material-button.umd.js.map +1 -1
  46. package/bundles/material-button.umd.min.js +1 -1
  47. package/bundles/material-button.umd.min.js.map +1 -1
  48. package/bundles/material-card-testing.umd.js +9 -1
  49. package/bundles/material-card-testing.umd.js.map +1 -1
  50. package/bundles/material-card-testing.umd.min.js +1 -1
  51. package/bundles/material-card-testing.umd.min.js.map +1 -1
  52. package/bundles/material-checkbox-testing.umd.js +73 -64
  53. package/bundles/material-checkbox-testing.umd.js.map +1 -1
  54. package/bundles/material-checkbox-testing.umd.min.js +2 -2
  55. package/bundles/material-checkbox-testing.umd.min.js.map +1 -1
  56. package/bundles/material-checkbox.umd.js +15 -3
  57. package/bundles/material-checkbox.umd.js.map +1 -1
  58. package/bundles/material-checkbox.umd.min.js +2 -2
  59. package/bundles/material-checkbox.umd.min.js.map +1 -1
  60. package/bundles/material-chips-testing.umd.js +189 -29
  61. package/bundles/material-chips-testing.umd.js.map +1 -1
  62. package/bundles/material-chips-testing.umd.min.js +2 -2
  63. package/bundles/material-chips-testing.umd.min.js.map +1 -1
  64. package/bundles/material-chips.umd.js +9 -1
  65. package/bundles/material-chips.umd.js.map +1 -1
  66. package/bundles/material-chips.umd.min.js +4 -4
  67. package/bundles/material-chips.umd.min.js.map +1 -1
  68. package/bundles/material-core-testing.umd.js +14 -3
  69. package/bundles/material-core-testing.umd.js.map +1 -1
  70. package/bundles/material-core-testing.umd.min.js +1 -1
  71. package/bundles/material-core-testing.umd.min.js.map +1 -1
  72. package/bundles/material-core.umd.js +55 -14
  73. package/bundles/material-core.umd.js.map +1 -1
  74. package/bundles/material-core.umd.min.js +16 -8
  75. package/bundles/material-core.umd.min.js.map +1 -1
  76. package/bundles/material-datepicker-testing.umd.js +24 -12
  77. package/bundles/material-datepicker-testing.umd.js.map +1 -1
  78. package/bundles/material-datepicker-testing.umd.min.js +1 -1
  79. package/bundles/material-datepicker-testing.umd.min.js.map +1 -1
  80. package/bundles/material-datepicker.umd.js +250 -80
  81. package/bundles/material-datepicker.umd.js.map +1 -1
  82. package/bundles/material-datepicker.umd.min.js +20 -12
  83. package/bundles/material-datepicker.umd.min.js.map +1 -1
  84. package/bundles/material-dialog-testing.umd.js +9 -1
  85. package/bundles/material-dialog-testing.umd.js.map +1 -1
  86. package/bundles/material-dialog-testing.umd.min.js +1 -1
  87. package/bundles/material-dialog-testing.umd.min.js.map +1 -1
  88. package/bundles/material-dialog.umd.js +10 -2
  89. package/bundles/material-dialog.umd.js.map +1 -1
  90. package/bundles/material-dialog.umd.min.js +8 -8
  91. package/bundles/material-dialog.umd.min.js.map +1 -1
  92. package/bundles/material-divider-testing.umd.js +9 -1
  93. package/bundles/material-divider-testing.umd.js.map +1 -1
  94. package/bundles/material-divider-testing.umd.min.js +2 -2
  95. package/bundles/material-divider-testing.umd.min.js.map +1 -1
  96. package/bundles/material-expansion-testing.umd.js +9 -1
  97. package/bundles/material-expansion-testing.umd.js.map +1 -1
  98. package/bundles/material-expansion-testing.umd.min.js +1 -1
  99. package/bundles/material-expansion-testing.umd.min.js.map +1 -1
  100. package/bundles/material-expansion.umd.js +16 -4
  101. package/bundles/material-expansion.umd.js.map +1 -1
  102. package/bundles/material-expansion.umd.min.js +6 -6
  103. package/bundles/material-expansion.umd.min.js.map +1 -1
  104. package/bundles/material-form-field-testing-control.umd.js +9 -1
  105. package/bundles/material-form-field-testing-control.umd.js.map +1 -1
  106. package/bundles/material-form-field-testing-control.umd.min.js +1 -1
  107. package/bundles/material-form-field-testing-control.umd.min.js.map +1 -1
  108. package/bundles/material-form-field-testing.umd.js +41 -30
  109. package/bundles/material-form-field-testing.umd.js.map +1 -1
  110. package/bundles/material-form-field-testing.umd.min.js +3 -3
  111. package/bundles/material-form-field-testing.umd.min.js.map +1 -1
  112. package/bundles/material-form-field.umd.js +11 -3
  113. package/bundles/material-form-field.umd.js.map +1 -1
  114. package/bundles/material-form-field.umd.min.js +2 -2
  115. package/bundles/material-form-field.umd.min.js.map +1 -1
  116. package/bundles/material-grid-list-testing.umd.js +15 -5
  117. package/bundles/material-grid-list-testing.umd.js.map +1 -1
  118. package/bundles/material-grid-list-testing.umd.min.js +2 -2
  119. package/bundles/material-grid-list-testing.umd.min.js.map +1 -1
  120. package/bundles/material-grid-list.umd.js +156 -146
  121. package/bundles/material-grid-list.umd.js.map +1 -1
  122. package/bundles/material-grid-list.umd.min.js +12 -19
  123. package/bundles/material-grid-list.umd.min.js.map +1 -1
  124. package/bundles/material-icon-testing.umd.js +12 -2
  125. package/bundles/material-icon-testing.umd.js.map +1 -1
  126. package/bundles/material-icon-testing.umd.min.js +2 -2
  127. package/bundles/material-icon-testing.umd.min.js.map +1 -1
  128. package/bundles/material-icon.umd.js +46 -2
  129. package/bundles/material-icon.umd.js.map +1 -1
  130. package/bundles/material-icon.umd.min.js +3 -3
  131. package/bundles/material-icon.umd.min.js.map +1 -1
  132. package/bundles/material-input-testing.umd.js +19 -8
  133. package/bundles/material-input-testing.umd.js.map +1 -1
  134. package/bundles/material-input-testing.umd.min.js +1 -1
  135. package/bundles/material-input-testing.umd.min.js.map +1 -1
  136. package/bundles/material-input.umd.js +9 -1
  137. package/bundles/material-input.umd.js.map +1 -1
  138. package/bundles/material-input.umd.min.js +1 -1
  139. package/bundles/material-input.umd.min.js.map +1 -1
  140. package/bundles/material-list-testing.umd.js +62 -57
  141. package/bundles/material-list-testing.umd.js.map +1 -1
  142. package/bundles/material-list-testing.umd.min.js +1 -1
  143. package/bundles/material-list-testing.umd.min.js.map +1 -1
  144. package/bundles/material-list.umd.js +9 -1
  145. package/bundles/material-list.umd.js.map +1 -1
  146. package/bundles/material-list.umd.min.js +1 -1
  147. package/bundles/material-list.umd.min.js.map +1 -1
  148. package/bundles/material-menu-testing.umd.js +94 -67
  149. package/bundles/material-menu-testing.umd.js.map +1 -1
  150. package/bundles/material-menu-testing.umd.min.js +2 -2
  151. package/bundles/material-menu-testing.umd.min.js.map +1 -1
  152. package/bundles/material-menu.umd.js +24 -28
  153. package/bundles/material-menu.umd.js.map +1 -1
  154. package/bundles/material-menu.umd.min.js +3 -3
  155. package/bundles/material-menu.umd.min.js.map +1 -1
  156. package/bundles/material-paginator-testing.umd.js +50 -34
  157. package/bundles/material-paginator-testing.umd.js.map +1 -1
  158. package/bundles/material-paginator-testing.umd.min.js +2 -2
  159. package/bundles/material-paginator-testing.umd.min.js.map +1 -1
  160. package/bundles/material-paginator.umd.js +9 -1
  161. package/bundles/material-paginator.umd.js.map +1 -1
  162. package/bundles/material-paginator.umd.min.js +1 -1
  163. package/bundles/material-paginator.umd.min.js.map +1 -1
  164. package/bundles/material-progress-bar-testing.umd.js +9 -1
  165. package/bundles/material-progress-bar-testing.umd.js.map +1 -1
  166. package/bundles/material-progress-bar-testing.umd.min.js +1 -1
  167. package/bundles/material-progress-bar-testing.umd.min.js.map +1 -1
  168. package/bundles/material-progress-bar.umd.js +9 -1
  169. package/bundles/material-progress-bar.umd.js.map +1 -1
  170. package/bundles/material-progress-bar.umd.min.js +1 -1
  171. package/bundles/material-progress-bar.umd.min.js.map +1 -1
  172. package/bundles/material-progress-spinner-testing.umd.js +9 -1
  173. package/bundles/material-progress-spinner-testing.umd.js.map +1 -1
  174. package/bundles/material-progress-spinner-testing.umd.min.js +1 -1
  175. package/bundles/material-progress-spinner-testing.umd.min.js.map +1 -1
  176. package/bundles/material-progress-spinner.umd.js +9 -1
  177. package/bundles/material-progress-spinner.umd.js.map +1 -1
  178. package/bundles/material-progress-spinner.umd.min.js +2 -2
  179. package/bundles/material-progress-spinner.umd.min.js.map +1 -1
  180. package/bundles/material-radio-testing.umd.js +88 -63
  181. package/bundles/material-radio-testing.umd.js.map +1 -1
  182. package/bundles/material-radio-testing.umd.min.js +2 -2
  183. package/bundles/material-radio-testing.umd.min.js.map +1 -1
  184. package/bundles/material-radio.umd.js +18 -5
  185. package/bundles/material-radio.umd.js.map +1 -1
  186. package/bundles/material-radio.umd.min.js +1 -1
  187. package/bundles/material-radio.umd.min.js.map +1 -1
  188. package/bundles/material-select-testing.umd.js +73 -51
  189. package/bundles/material-select-testing.umd.js.map +1 -1
  190. package/bundles/material-select-testing.umd.min.js +2 -2
  191. package/bundles/material-select-testing.umd.min.js.map +1 -1
  192. package/bundles/material-select.umd.js +14 -3
  193. package/bundles/material-select.umd.js.map +1 -1
  194. package/bundles/material-select.umd.min.js +5 -5
  195. package/bundles/material-select.umd.min.js.map +1 -1
  196. package/bundles/material-sidenav-testing.umd.js +175 -28
  197. package/bundles/material-sidenav-testing.umd.js.map +1 -1
  198. package/bundles/material-sidenav-testing.umd.min.js +2 -2
  199. package/bundles/material-sidenav-testing.umd.min.js.map +1 -1
  200. package/bundles/material-sidenav.umd.js +9 -1
  201. package/bundles/material-sidenav.umd.js.map +1 -1
  202. package/bundles/material-sidenav.umd.min.js +1 -1
  203. package/bundles/material-sidenav.umd.min.js.map +1 -1
  204. package/bundles/material-slide-toggle-testing.umd.js +9 -1
  205. package/bundles/material-slide-toggle-testing.umd.js.map +1 -1
  206. package/bundles/material-slide-toggle-testing.umd.min.js +1 -1
  207. package/bundles/material-slide-toggle-testing.umd.min.js.map +1 -1
  208. package/bundles/material-slide-toggle.umd.js +16 -3
  209. package/bundles/material-slide-toggle.umd.js.map +1 -1
  210. package/bundles/material-slide-toggle.umd.min.js +3 -3
  211. package/bundles/material-slide-toggle.umd.min.js.map +1 -1
  212. package/bundles/material-slider-testing.umd.js +15 -4
  213. package/bundles/material-slider-testing.umd.js.map +1 -1
  214. package/bundles/material-slider-testing.umd.min.js +2 -2
  215. package/bundles/material-slider-testing.umd.min.js.map +1 -1
  216. package/bundles/material-slider.umd.js +9 -1
  217. package/bundles/material-slider.umd.js.map +1 -1
  218. package/bundles/material-slider.umd.min.js +1 -1
  219. package/bundles/material-slider.umd.min.js.map +1 -1
  220. package/bundles/material-snack-bar-testing.umd.js +29 -12
  221. package/bundles/material-snack-bar-testing.umd.js.map +1 -1
  222. package/bundles/material-snack-bar-testing.umd.min.js +2 -2
  223. package/bundles/material-snack-bar-testing.umd.min.js.map +1 -1
  224. package/bundles/material-snack-bar.umd.js +20 -2
  225. package/bundles/material-snack-bar.umd.js.map +1 -1
  226. package/bundles/material-snack-bar.umd.min.js +1 -1
  227. package/bundles/material-snack-bar.umd.min.js.map +1 -1
  228. package/bundles/material-sort-testing.umd.js +9 -1
  229. package/bundles/material-sort-testing.umd.js.map +1 -1
  230. package/bundles/material-sort-testing.umd.min.js +1 -1
  231. package/bundles/material-sort-testing.umd.min.js.map +1 -1
  232. package/bundles/material-sort.umd.js +9 -1
  233. package/bundles/material-sort.umd.js.map +1 -1
  234. package/bundles/material-sort.umd.min.js +3 -3
  235. package/bundles/material-sort.umd.min.js.map +1 -1
  236. package/bundles/material-stepper-testing.umd.js +9 -1
  237. package/bundles/material-stepper-testing.umd.js.map +1 -1
  238. package/bundles/material-stepper-testing.umd.min.js +2 -2
  239. package/bundles/material-stepper-testing.umd.min.js.map +1 -1
  240. package/bundles/material-stepper.umd.js +16 -3
  241. package/bundles/material-stepper.umd.js.map +1 -1
  242. package/bundles/material-stepper.umd.min.js +3 -3
  243. package/bundles/material-stepper.umd.min.js.map +1 -1
  244. package/bundles/material-table-testing.umd.js +26 -17
  245. package/bundles/material-table-testing.umd.js.map +1 -1
  246. package/bundles/material-table-testing.umd.min.js +2 -2
  247. package/bundles/material-table-testing.umd.min.js.map +1 -1
  248. package/bundles/material-table.umd.js +65 -38
  249. package/bundles/material-table.umd.js.map +1 -1
  250. package/bundles/material-table.umd.min.js +3 -3
  251. package/bundles/material-table.umd.min.js.map +1 -1
  252. package/bundles/material-tabs-testing.umd.js +11 -3
  253. package/bundles/material-tabs-testing.umd.js.map +1 -1
  254. package/bundles/material-tabs-testing.umd.min.js +1 -1
  255. package/bundles/material-tabs-testing.umd.min.js.map +1 -1
  256. package/bundles/material-tabs.umd.js +10 -2
  257. package/bundles/material-tabs.umd.js.map +1 -1
  258. package/bundles/material-tabs.umd.min.js +5 -5
  259. package/bundles/material-tabs.umd.min.js.map +1 -1
  260. package/bundles/material-toolbar-testing.umd.js +11 -2
  261. package/bundles/material-toolbar-testing.umd.js.map +1 -1
  262. package/bundles/material-toolbar-testing.umd.min.js +2 -2
  263. package/bundles/material-toolbar-testing.umd.min.js.map +1 -1
  264. package/bundles/material-toolbar.umd.js +9 -1
  265. package/bundles/material-toolbar.umd.js.map +1 -1
  266. package/bundles/material-toolbar.umd.min.js +2 -2
  267. package/bundles/material-toolbar.umd.min.js.map +1 -1
  268. package/bundles/material-tooltip-testing.umd.js +9 -1
  269. package/bundles/material-tooltip-testing.umd.js.map +1 -1
  270. package/bundles/material-tooltip-testing.umd.min.js +1 -1
  271. package/bundles/material-tooltip-testing.umd.min.js.map +1 -1
  272. package/bundles/material-tooltip.umd.js +35 -7
  273. package/bundles/material-tooltip.umd.js.map +1 -1
  274. package/bundles/material-tooltip.umd.min.js +3 -3
  275. package/bundles/material-tooltip.umd.min.js.map +1 -1
  276. package/bundles/material-tree-testing.umd.js +10 -2
  277. package/bundles/material-tree-testing.umd.js.map +1 -1
  278. package/bundles/material-tree-testing.umd.min.js +1 -1
  279. package/bundles/material-tree-testing.umd.min.js.map +1 -1
  280. package/bundles/material-tree.umd.js +9 -1
  281. package/bundles/material-tree.umd.js.map +1 -1
  282. package/bundles/material-tree.umd.min.js +3 -3
  283. package/bundles/material-tree.umd.min.js.map +1 -1
  284. package/button/_button-base.scss +2 -2
  285. package/button/_button-theme.scss +10 -11
  286. package/button/index.metadata.json +1 -1
  287. package/button-toggle/_button-toggle-theme.scss +9 -10
  288. package/card/_card-theme.scss +5 -6
  289. package/checkbox/_checkbox-theme.scss +2 -3
  290. package/checkbox/testing/checkbox-harness.d.ts +21 -16
  291. package/chips/_chips-theme.scss +4 -5
  292. package/chips/testing/chip-harness-filters.d.ts +11 -3
  293. package/chips/testing/chip-harness.d.ts +5 -5
  294. package/chips/testing/chip-list-harness.d.ts +15 -12
  295. package/chips/testing/chip-listbox-harness.d.ts +34 -0
  296. package/chips/testing/chip-option-harness.d.ts +29 -0
  297. package/chips/testing/public-api.d.ts +3 -1
  298. package/core/_core.scss +6 -6
  299. package/core/color/_all-color.scss +2 -1
  300. package/core/datetime/date-formats.d.ts +1 -0
  301. package/core/density/private/_all-density.scss +34 -0
  302. package/core/density/{_index.scss → private/_compatibility.scss} +11 -8
  303. package/core/focus-indicators/_focus-indicators.scss +3 -4
  304. package/core/index.metadata.json +1 -1
  305. package/core/option/_optgroup-theme.scss +2 -3
  306. package/core/option/_option-theme.scss +2 -3
  307. package/core/option/index.d.ts +1 -0
  308. package/core/option/optgroup.d.ts +4 -0
  309. package/core/option/option-parent.d.ts +22 -0
  310. package/core/option/option.d.ts +2 -14
  311. package/core/ripple/_ripple.scss +2 -3
  312. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +2 -3
  313. package/core/style/_elevation.scss +2 -18
  314. package/core/style/_form-common.scss +2 -2
  315. package/core/style/_private.scss +40 -0
  316. package/core/testing/option-harness.d.ts +2 -0
  317. package/core/theming/_all-theme.scss +3 -2
  318. package/core/theming/_theming.scss +148 -38
  319. package/core/typography/_all-typography.scss +1 -1
  320. package/datepicker/_datepicker-theme.scss +5 -6
  321. package/datepicker/date-range-input-parts.d.ts +2 -3
  322. package/datepicker/date-range-input.d.ts +5 -4
  323. package/datepicker/date-selection-model.d.ts +10 -0
  324. package/datepicker/datepicker-actions.d.ts +33 -0
  325. package/datepicker/datepicker-base.d.ts +52 -9
  326. package/datepicker/datepicker-input-base.d.ts +5 -10
  327. package/datepicker/datepicker-input.d.ts +9 -8
  328. package/datepicker/datepicker-toggle.d.ts +4 -2
  329. package/datepicker/index.metadata.json +1 -1
  330. package/datepicker/public-api.d.ts +1 -0
  331. package/dialog/_dialog-theme.scss +4 -5
  332. package/divider/_divider-theme.scss +2 -3
  333. package/esm2015/autocomplete/autocomplete-trigger.js +10 -2
  334. package/esm2015/autocomplete/autocomplete.js +11 -4
  335. package/esm2015/autocomplete/testing/autocomplete-harness.js +27 -19
  336. package/esm2015/button/button.js +10 -5
  337. package/esm2015/checkbox/checkbox.js +8 -3
  338. package/esm2015/checkbox/testing/checkbox-harness.js +31 -36
  339. package/esm2015/chips/testing/chip-harness-filters.js +1 -1
  340. package/esm2015/chips/testing/chip-harness.js +6 -6
  341. package/esm2015/chips/testing/chip-list-harness.js +19 -16
  342. package/esm2015/chips/testing/chip-listbox-harness.js +49 -0
  343. package/esm2015/chips/testing/chip-option-harness.js +54 -0
  344. package/esm2015/chips/testing/public-api.js +4 -2
  345. package/esm2015/core/common-behaviors/common-module.js +1 -1
  346. package/esm2015/core/datetime/date-formats.js +1 -1
  347. package/esm2015/core/option/index.js +2 -1
  348. package/esm2015/core/option/optgroup.js +32 -7
  349. package/esm2015/core/option/option-parent.js +13 -0
  350. package/esm2015/core/option/option.js +5 -8
  351. package/esm2015/core/testing/option-harness.js +7 -2
  352. package/esm2015/core/version.js +1 -1
  353. package/esm2015/datepicker/date-range-input-parts.js +10 -14
  354. package/esm2015/datepicker/date-range-input.js +11 -4
  355. package/esm2015/datepicker/date-range-picker.js +3 -2
  356. package/esm2015/datepicker/date-selection-model.js +24 -1
  357. package/esm2015/datepicker/datepicker-actions.js +89 -0
  358. package/esm2015/datepicker/datepicker-base.js +66 -25
  359. package/esm2015/datepicker/datepicker-input-base.js +15 -27
  360. package/esm2015/datepicker/datepicker-input.js +11 -5
  361. package/esm2015/datepicker/datepicker-module.js +8 -1
  362. package/esm2015/datepicker/datepicker-toggle.js +7 -10
  363. package/esm2015/datepicker/datepicker.js +5 -2
  364. package/esm2015/datepicker/month-view.js +6 -3
  365. package/esm2015/datepicker/public-api.js +2 -1
  366. package/esm2015/datepicker/testing/date-range-input-harness.js +4 -4
  367. package/esm2015/datepicker/testing/datepicker-input-harness.js +3 -3
  368. package/esm2015/datepicker/testing/datepicker-trigger-harness-base.js +3 -3
  369. package/esm2015/dialog/dialog-ref.js +2 -2
  370. package/esm2015/expansion/expansion-panel-header.js +9 -4
  371. package/esm2015/expansion/expansion-panel.js +1 -1
  372. package/esm2015/form-field/form-field-animations.js +2 -2
  373. package/esm2015/form-field/form-field.js +2 -2
  374. package/esm2015/form-field/testing/form-field-harness.js +14 -9
  375. package/esm2015/grid-list/public-api.js +3 -2
  376. package/esm2015/grid-list/testing/grid-list-harness.js +6 -5
  377. package/esm2015/icon/icon-registry.js +39 -3
  378. package/esm2015/icon/testing/fake-icon-registry.js +4 -2
  379. package/esm2015/input/testing/input-harness.js +3 -3
  380. package/esm2015/input/testing/native-select-harness.js +7 -5
  381. package/esm2015/list/selection-list.js +1 -1
  382. package/esm2015/list/testing/list-harness-base.js +5 -4
  383. package/esm2015/list/testing/list-item-harness-base.js +5 -4
  384. package/esm2015/list/testing/selection-list-harness.js +8 -5
  385. package/esm2015/menu/menu-item.js +3 -3
  386. package/esm2015/menu/menu-trigger.js +15 -25
  387. package/esm2015/menu/menu.js +2 -2
  388. package/esm2015/menu/testing/menu-harness.js +44 -32
  389. package/esm2015/paginator/testing/paginator-harness.js +27 -25
  390. package/esm2015/radio/radio.js +10 -5
  391. package/esm2015/radio/testing/radio-harness.js +40 -29
  392. package/esm2015/select/select.js +6 -3
  393. package/esm2015/select/testing/select-harness.js +36 -28
  394. package/esm2015/sidenav/testing/drawer-container-harness.js +41 -0
  395. package/esm2015/sidenav/testing/drawer-content-harness.js +23 -0
  396. package/esm2015/sidenav/testing/drawer-harness-filters.js +1 -1
  397. package/esm2015/sidenav/testing/drawer-harness.js +19 -13
  398. package/esm2015/sidenav/testing/public-api.js +6 -2
  399. package/esm2015/sidenav/testing/sidenav-container-harness.js +41 -0
  400. package/esm2015/sidenav/testing/sidenav-content-harness.js +23 -0
  401. package/esm2015/sidenav/testing/sidenav-harness.js +4 -4
  402. package/esm2015/slide-toggle/slide-toggle.js +8 -3
  403. package/esm2015/slider/testing/slider-harness.js +5 -5
  404. package/esm2015/snack-bar/snack-bar-container.js +12 -2
  405. package/esm2015/snack-bar/testing/snack-bar-harness.js +19 -12
  406. package/esm2015/stepper/step-header.js +8 -3
  407. package/esm2015/table/table-data-source.js +34 -21
  408. package/esm2015/table/testing/cell-harness.js +3 -3
  409. package/esm2015/table/testing/row-harness.js +5 -5
  410. package/esm2015/table/testing/table-harness.js +8 -8
  411. package/esm2015/tabs/tab-body.js +3 -3
  412. package/esm2015/tabs/testing/tab-group-harness.js +3 -3
  413. package/esm2015/tabs/testing/tab-nav-bar-harness.js +3 -3
  414. package/esm2015/toolbar/testing/toolbar-harness.js +3 -3
  415. package/esm2015/tooltip/tooltip.js +28 -7
  416. package/esm2015/tree/testing/tree-harness.js +2 -2
  417. package/expansion/_expansion-mixins.scss +11 -0
  418. package/expansion/_expansion-theme.scss +13 -19
  419. package/expansion/index.metadata.json +1 -1
  420. package/fesm2015/autocomplete/testing.js +26 -18
  421. package/fesm2015/autocomplete/testing.js.map +1 -1
  422. package/fesm2015/autocomplete.js +19 -5
  423. package/fesm2015/autocomplete.js.map +1 -1
  424. package/fesm2015/button.js +9 -4
  425. package/fesm2015/button.js.map +1 -1
  426. package/fesm2015/checkbox/testing.js +30 -35
  427. package/fesm2015/checkbox/testing.js.map +1 -1
  428. package/fesm2015/checkbox.js +7 -2
  429. package/fesm2015/checkbox.js.map +1 -1
  430. package/fesm2015/chips/testing.js +120 -21
  431. package/fesm2015/chips/testing.js.map +1 -1
  432. package/fesm2015/core/testing.js +6 -1
  433. package/fesm2015/core/testing.js.map +1 -1
  434. package/fesm2015/core.js +45 -13
  435. package/fesm2015/core.js.map +1 -1
  436. package/fesm2015/datepicker/testing.js +5 -5
  437. package/fesm2015/datepicker/testing.js.map +1 -1
  438. package/fesm2015/datepicker.js +275 -116
  439. package/fesm2015/datepicker.js.map +1 -1
  440. package/fesm2015/dialog.js +1 -1
  441. package/fesm2015/dialog.js.map +1 -1
  442. package/fesm2015/expansion.js +8 -3
  443. package/fesm2015/expansion.js.map +1 -1
  444. package/fesm2015/form-field/testing.js +13 -8
  445. package/fesm2015/form-field/testing.js.map +1 -1
  446. package/fesm2015/form-field.js +2 -2
  447. package/fesm2015/form-field.js.map +1 -1
  448. package/fesm2015/grid-list/testing.js +5 -4
  449. package/fesm2015/grid-list/testing.js.map +1 -1
  450. package/fesm2015/grid-list.js +128 -126
  451. package/fesm2015/grid-list.js.map +1 -1
  452. package/fesm2015/icon/testing.js +3 -1
  453. package/fesm2015/icon/testing.js.map +1 -1
  454. package/fesm2015/icon.js +38 -2
  455. package/fesm2015/icon.js.map +1 -1
  456. package/fesm2015/input/testing.js +7 -5
  457. package/fesm2015/input/testing.js.map +1 -1
  458. package/fesm2015/list/testing.js +13 -8
  459. package/fesm2015/list/testing.js.map +1 -1
  460. package/fesm2015/list.js.map +1 -1
  461. package/fesm2015/menu/testing.js +45 -33
  462. package/fesm2015/menu/testing.js.map +1 -1
  463. package/fesm2015/menu.js +17 -27
  464. package/fesm2015/menu.js.map +1 -1
  465. package/fesm2015/paginator/testing.js +26 -24
  466. package/fesm2015/paginator/testing.js.map +1 -1
  467. package/fesm2015/paginator.js.map +1 -1
  468. package/fesm2015/progress-spinner.js.map +1 -1
  469. package/fesm2015/radio/testing.js +39 -28
  470. package/fesm2015/radio/testing.js.map +1 -1
  471. package/fesm2015/radio.js +9 -4
  472. package/fesm2015/radio.js.map +1 -1
  473. package/fesm2015/select/testing.js +36 -28
  474. package/fesm2015/select/testing.js.map +1 -1
  475. package/fesm2015/select.js +5 -2
  476. package/fesm2015/select.js.map +1 -1
  477. package/fesm2015/sidenav/testing.js +139 -15
  478. package/fesm2015/sidenav/testing.js.map +1 -1
  479. package/fesm2015/sidenav.js.map +1 -1
  480. package/fesm2015/slide-toggle.js +7 -2
  481. package/fesm2015/slide-toggle.js.map +1 -1
  482. package/fesm2015/slider/testing.js +4 -4
  483. package/fesm2015/slider/testing.js.map +1 -1
  484. package/fesm2015/snack-bar/testing.js +18 -11
  485. package/fesm2015/snack-bar/testing.js.map +1 -1
  486. package/fesm2015/snack-bar.js +11 -1
  487. package/fesm2015/snack-bar.js.map +1 -1
  488. package/fesm2015/stepper.js +7 -2
  489. package/fesm2015/stepper.js.map +1 -1
  490. package/fesm2015/table/testing.js +11 -11
  491. package/fesm2015/table/testing.js.map +1 -1
  492. package/fesm2015/table.js +34 -21
  493. package/fesm2015/table.js.map +1 -1
  494. package/fesm2015/tabs/testing.js +3 -3
  495. package/fesm2015/tabs/testing.js.map +1 -1
  496. package/fesm2015/tabs.js +2 -2
  497. package/fesm2015/tabs.js.map +1 -1
  498. package/fesm2015/toolbar/testing.js +2 -2
  499. package/fesm2015/toolbar/testing.js.map +1 -1
  500. package/fesm2015/tooltip.js +27 -7
  501. package/fesm2015/tooltip.js.map +1 -1
  502. package/fesm2015/tree/testing.js +1 -1
  503. package/fesm2015/tree/testing.js.map +1 -1
  504. package/form-field/_form-field-fill-theme.scss +4 -5
  505. package/form-field/_form-field-legacy-theme.scss +5 -6
  506. package/form-field/_form-field-outline-theme.scss +4 -5
  507. package/form-field/_form-field-standard-theme.scss +5 -6
  508. package/form-field/_form-field-theme.scss +8 -9
  509. package/form-field/index.metadata.json +1 -1
  510. package/grid-list/_grid-list-theme.scss +2 -3
  511. package/grid-list/index.metadata.json +1 -1
  512. package/grid-list/public-api.d.ts +2 -1
  513. package/icon/_icon-theme.scss +2 -3
  514. package/icon/icon-registry.d.ts +23 -0
  515. package/icon/index.metadata.json +1 -1
  516. package/icon/testing/fake-icon-registry.d.ts +1 -0
  517. package/icon/testing/index.metadata.json +1 -1
  518. package/input/_input-theme.scss +3 -4
  519. package/list/_list-theme.scss +2 -3
  520. package/list/index.metadata.json +1 -1
  521. package/list/selection-list.d.ts +6 -1
  522. package/list/testing/list-harness-base.d.ts +1 -1
  523. package/list/testing/list-item-harness-base.d.ts +2 -2
  524. package/list/testing/selection-list-harness.d.ts +2 -1
  525. package/menu/_menu-theme.scss +4 -5
  526. package/menu/index.metadata.json +1 -1
  527. package/menu/menu-trigger.d.ts +1 -3
  528. package/menu/menu.d.ts +4 -2
  529. package/menu/testing/menu-harness.d.ts +39 -26
  530. package/package.json +2 -2
  531. package/paginator/_paginator-theme.scss +7 -8
  532. package/paginator/testing/paginator-harness.d.ts +32 -19
  533. package/prebuilt-themes/deeppurple-amber.css +1 -1
  534. package/prebuilt-themes/indigo-pink.css +1 -1
  535. package/prebuilt-themes/pink-bluegrey.css +1 -1
  536. package/prebuilt-themes/purple-green.css +1 -1
  537. package/progress-bar/_progress-bar-theme.scss +2 -3
  538. package/progress-spinner/_progress-spinner-theme.scss +2 -3
  539. package/radio/_radio-theme.scss +2 -3
  540. package/radio/index.metadata.json +1 -1
  541. package/radio/radio.d.ts +2 -2
  542. package/radio/testing/radio-harness.d.ts +39 -24
  543. package/schematics/ng-add/fonts/material-fonts.js +7 -5
  544. package/schematics/ng-add/index.js +1 -1
  545. package/schematics/ng-add/setup-project.js +4 -3
  546. package/select/_select-theme.scss +5 -6
  547. package/select/index.metadata.json +1 -1
  548. package/select/testing/select-harness.d.ts +28 -16
  549. package/sidenav/_sidenav-theme.scss +4 -5
  550. package/sidenav/testing/drawer-container-harness.d.ts +30 -0
  551. package/sidenav/testing/drawer-content-harness.d.ts +21 -0
  552. package/sidenav/testing/drawer-harness-filters.d.ts +6 -0
  553. package/sidenav/testing/drawer-harness.d.ts +13 -7
  554. package/sidenav/testing/public-api.d.ts +5 -1
  555. package/sidenav/testing/sidenav-container-harness.d.ts +30 -0
  556. package/sidenav/testing/sidenav-content-harness.d.ts +21 -0
  557. package/sidenav/testing/sidenav-harness.d.ts +3 -3
  558. package/slide-toggle/_slide-toggle-theme.scss +4 -5
  559. package/slide-toggle/slide-toggle.d.ts +2 -2
  560. package/slider/_slider-theme.scss +2 -3
  561. package/snack-bar/_snack-bar-theme.scss +4 -5
  562. package/snack-bar/index.metadata.json +1 -1
  563. package/snack-bar/snack-bar-container.d.ts +5 -0
  564. package/snack-bar/testing/snack-bar-harness.d.ts +7 -4
  565. package/sort/_sort-theme.scss +2 -3
  566. package/stepper/_stepper-theme.scss +7 -8
  567. package/stepper/step-header.d.ts +2 -2
  568. package/table/_table-theme.scss +2 -3
  569. package/table/index.metadata.json +1 -1
  570. package/table/table-data-source.d.ts +31 -20
  571. package/table/testing/cell-harness.d.ts +2 -2
  572. package/tabs/_tabs-common.scss +2 -2
  573. package/tabs/_tabs-theme.scss +14 -9
  574. package/tabs/index.metadata.json +1 -1
  575. package/tabs/tab-body.d.ts +3 -3
  576. package/toolbar/_toolbar-theme.scss +8 -9
  577. package/tooltip/_tooltip-theme.scss +2 -3
  578. package/tooltip/index.metadata.json +1 -1
  579. package/tooltip/tooltip.d.ts +10 -1
  580. package/tree/_tree-theme.scss +7 -8
  581. package/core/density/_all-density.scss +0 -19
  582. package/core/style/_noop-animation.scss +0 -22
  583. package/core/theming/_check-duplicate-styles.scss +0 -106
@@ -1,8 +1,21 @@
1
1
  @import 'palette';
2
2
 
3
+ // Whether duplication warnings should be disabled. Warnings enabled by default.
4
+ $mat-theme-ignore-duplication-warnings: false !default;
5
+
3
6
  // Whether density should be generated by default.
4
7
  $_mat-theme-generate-default-density: true !default;
5
8
 
9
+ // Warning that will be printed if duplicated styles are generated by a theme.
10
+ $_mat-theme-duplicate-warning: 'Read more about how style duplication can be avoided in a ' +
11
+ 'dedicated guide. https://github.com/angular/components/blob/master/guides/duplicate-theming-styles.md';
12
+
13
+ // These variable are not intended to be overridden externally. They use `!default` to
14
+ // avoid being reset every time this file is imported.
15
+ $_mat-theme-emitted-color: () !default;
16
+ $_mat-theme-emitted-typography: () !default;
17
+ $_mat-theme-emitted-density: () !default;
18
+
6
19
  // For a given hue in a palette, return the contrast color from the map of contrast palettes.
7
20
  // @param $color-map
8
21
  // @param $hue
@@ -84,31 +97,6 @@ $_mat-theme-generate-default-density: true !default;
84
97
  @return $theme;
85
98
  }
86
99
 
87
- // Creates a backwards compatible theme. Previously in Angular Material, theme objects
88
- // contained the color configuration directly. With the recent refactoring of the theming
89
- // system to allow for density and typography configurations, this is no longer the case.
90
- // To ensure that constructed themes which will be passed to custom theme mixins do not break,
91
- // we copy the color configuration and put its properties at the top-level of the theme object.
92
- // Here is an example of a pattern that should still work until it's officially marked as a
93
- // breaking change:
94
- //
95
- // @mixin my-custom-component-theme($theme) {
96
- // .my-comp {
97
- // background-color: mat-color(map-get($theme, primary));
98
- // }
99
- // }
100
- //
101
- // Note that the `$theme.primary` key does usually not exist since the color configuration
102
- // is stored in `$theme.color` which contains a property for `primary`. This method copies
103
- // the map from `$theme.color` to `$theme` for backwards compatibility.
104
- @function _mat-create-backwards-compatibility-theme($theme) {
105
- @if not map-get($theme, color) {
106
- @return $theme;
107
- }
108
- $color: map-get($theme, color);
109
- @return map-merge($theme, $color);
110
- }
111
-
112
100
  // Creates a light-themed color configuration from the specified
113
101
  // primary, accent and warn palettes.
114
102
  @function _mat-create-light-color-config($primary, $accent, $warn: null) {
@@ -153,7 +141,7 @@ $_mat-theme-generate-default-density: true !default;
153
141
  // If the legacy pattern is used, we generate a container object only with a light-themed
154
142
  // configuration for the `color` theming part.
155
143
  @if $accent != null {
156
- @return _mat-create-backwards-compatibility-theme(_mat-validate-theme((
144
+ @return mat-private-create-backwards-compatibility-theme(_mat-validate-theme((
157
145
  _is-legacy-theme: true,
158
146
  color: _mat-create-light-color-config($primary, $accent, $warn),
159
147
  )));
@@ -169,7 +157,7 @@ $_mat-theme-generate-default-density: true !default;
169
157
  $warn: map-get($color-settings, warn);
170
158
  $result: map-merge($result, (color: _mat-create-light-color-config($primary, $accent, $warn)));
171
159
  }
172
- @return _mat-create-backwards-compatibility-theme(_mat-validate-theme($result));
160
+ @return mat-private-create-backwards-compatibility-theme(_mat-validate-theme($result));
173
161
  }
174
162
 
175
163
  // Creates a container object for a dark theme to be given to individual component theme mixins.
@@ -190,7 +178,7 @@ $_mat-theme-generate-default-density: true !default;
190
178
  // If the legacy pattern is used, we generate a container object only with a dark-themed
191
179
  // configuration for the `color` theming part.
192
180
  @if $accent != null {
193
- @return _mat-create-backwards-compatibility-theme(_mat-validate-theme((
181
+ @return mat-private-create-backwards-compatibility-theme(_mat-validate-theme((
194
182
  _is-legacy-theme: true,
195
183
  color: _mat-create-dark-color-config($primary, $accent, $warn),
196
184
  )));
@@ -206,13 +194,13 @@ $_mat-theme-generate-default-density: true !default;
206
194
  $warn: map-get($color-settings, warn);
207
195
  $result: map-merge($result, (color: _mat-create-dark-color-config($primary, $accent, $warn)));
208
196
  }
209
- @return _mat-create-backwards-compatibility-theme(_mat-validate-theme($result));
197
+ @return mat-private-create-backwards-compatibility-theme(_mat-validate-theme($result));
210
198
  }
211
199
 
212
200
  /// Gets the color configuration from the given theme or configuration.
213
201
  @function mat-get-color-config($theme, $default: null) {
214
202
  // If a configuration has been passed, return the config directly.
215
- @if not _mat-is-theme-object($theme) {
203
+ @if not mat-private-is-theme-object($theme) {
216
204
  @return $theme;
217
205
  }
218
206
  // If the theme has been constructed through the legacy theming API, we use the theme object
@@ -220,7 +208,7 @@ $_mat-theme-generate-default-density: true !default;
220
208
  // backwards compatibility, we copied the color configuration from `$theme.color` to `$theme`.
221
209
  // Hence developers could customize the colors at top-level and want to respect these changes
222
210
  // TODO: Remove when legacy theming API is removed.
223
- @if _mat-is-legacy-constructed-theme($theme) {
211
+ @if mat-private-is-legacy-constructed-theme($theme) {
224
212
  @return $theme;
225
213
  }
226
214
  @if map-has-key($theme, color) {
@@ -232,7 +220,7 @@ $_mat-theme-generate-default-density: true !default;
232
220
  /// Gets the density configuration from the given theme or configuration.
233
221
  @function mat-get-density-config($theme-or-config, $default: 0) {
234
222
  // If a configuration has been passed, return the config directly.
235
- @if not _mat-is-theme-object($theme-or-config) {
223
+ @if not mat-private-is-theme-object($theme-or-config) {
236
224
  @return $theme-or-config;
237
225
  }
238
226
  // In case a theme has been passed, extract the configuration if present,
@@ -247,7 +235,7 @@ $_mat-theme-generate-default-density: true !default;
247
235
  /// For backwards compatibility, typography is not included by default.
248
236
  @function mat-get-typography-config($theme-or-config, $default: null) {
249
237
  // If a configuration has been passed, return the config directly.
250
- @if not _mat-is-theme-object($theme-or-config) {
238
+ @if not mat-private-is-theme-object($theme-or-config) {
251
239
  @return $theme-or-config;
252
240
  }
253
241
  // In case a theme has been passed, extract the configuration if present,
@@ -258,9 +246,106 @@ $_mat-theme-generate-default-density: true !default;
258
246
  @return $default;
259
247
  }
260
248
 
249
+
250
+ //
251
+ // Private APIs
252
+ //
253
+
254
+ // Checks if configurations that have been declared in the given theme have been generated
255
+ // before. If so, warnings will be reported. This should notify developers in case duplicate
256
+ // styles are accidentally generated due to wrong usage of the all-theme mixins.
257
+ //
258
+ // Additionally, this mixin controls the default value for the density configuration. By
259
+ // default, density styles are generated at scale zero. If the same density styles would be
260
+ // generated a second time though, the default value will change to avoid duplicate styles.
261
+ //
262
+ // The mixin keeps track of all configurations in a list that is scoped to the specified
263
+ // id. This is necessary because a given theme can be passed to multiple disjoint theme mixins
264
+ // (e.g. `angular-material-theme` and `angular-material-mdc-theme`) without causing any
265
+ // style duplication.
266
+ @mixin mat-private-check-duplicate-theme-styles($theme-or-color-config, $id) {
267
+ $theme: mat-private-legacy-get-theme($theme-or-color-config);
268
+ $color-config: mat-get-color-config($theme);
269
+ $density-config: mat-get-density-config($theme);
270
+ $typography-config: mat-get-typography-config($theme);
271
+ // Lists of previous `color`, `density` and `typography` configurations.
272
+ $previous-color: map-get($_mat-theme-emitted-color, $id) or ();
273
+ $previous-typography: map-get($_mat-theme-emitted-typography, $id) or ();
274
+ $previous-density: map-get($_mat-theme-emitted-density, $id) or ();
275
+ // Whether duplicate legacy density styles would be generated.
276
+ $duplicate-legacy-density: false;
277
+
278
+ // Check if the color configuration has been generated before.
279
+ @if $color-config != null {
280
+ @if index($previous-color, $color-config) != null and
281
+ not $mat-theme-ignore-duplication-warnings {
282
+ @warn 'The same color styles are generated multiple times. ' +
283
+ $_mat-theme-duplicate-warning;
284
+ }
285
+ $previous-color: append($previous-color, $color-config);
286
+ }
287
+
288
+ // Check if the typography configuration has been generated before.
289
+ @if $typography-config != null {
290
+ @if index($previous-typography, $typography-config) != null and
291
+ not $mat-theme-ignore-duplication-warnings {
292
+ @warn 'The same typography styles are generated multiple times. ' +
293
+ $_mat-theme-duplicate-warning;
294
+ }
295
+ $previous-typography: append($previous-typography, $typography-config);
296
+ }
297
+
298
+ // Check if the density configuration has been generated before.
299
+ @if $density-config != null {
300
+ @if index($previous-density, $density-config) != null {
301
+ // Only report a warning if density styles would be duplicated for non-legacy theme
302
+ // definitions. For legacy themes, we have compatibility logic that avoids duplication
303
+ // of default density styles. We don't want to report a warning in those cases.
304
+ @if mat-private-is-legacy-constructed-theme($theme) {
305
+ $duplicate-legacy-density: true;
306
+ }
307
+ @else if not $mat-theme-ignore-duplication-warnings {
308
+ @warn 'The same density styles are generated multiple times. ' +
309
+ $_mat-theme-duplicate-warning;
310
+ }
311
+ }
312
+ $previous-density: append($previous-density, $density-config);
313
+ }
314
+
315
+ $_mat-theme-emitted-color: map-merge(
316
+ $_mat-theme-emitted-color, ($id: $previous-color)) !global;
317
+ $_mat-theme-emitted-density: map-merge(
318
+ $_mat-theme-emitted-density, ($id: $previous-density)) !global;
319
+ $_mat-theme-emitted-typography: map-merge(
320
+ $_mat-theme-emitted-typography, ($id: $previous-typography)) !global;
321
+
322
+ // Optionally, consumers of this mixin can wrap contents inside so that nested
323
+ // duplicate style checks do not report another warning. e.g. if developers include
324
+ // the `angular-material-theme` mixin twice, only the top-level duplicate styles check
325
+ // should report a warning. Not all individual components should report a warning too.
326
+ $orig-mat-theme-ignore-duplication-warnings: $mat-theme-ignore-duplication-warnings;
327
+ $mat-theme-ignore-duplication-warnings: true !global;
328
+
329
+ // If duplicate default density styles would be generated for a legacy constructed theme,
330
+ // we adjust the density generation so that no density styles are generated by default.
331
+ // If no default density styles have been generated yet, we ensure that the styles
332
+ // are generated at root. For legacy themes our goal is to generate default density
333
+ // styles **once** and at root. This matches the old behavior where density styles were
334
+ // part of the base component styles (that did not use view encapsulation).
335
+ // TODO: Remove this compatibility logic when the legacy theming API is removed.
336
+ $mat-private-density-generate-at-root: mat-private-is-legacy-constructed-theme($theme) !global;
337
+ $mat-private-density-generate-styles: not $duplicate-legacy-density !global;
338
+
339
+ @content;
340
+ $mat-theme-ignore-duplication-warnings: $orig-mat-theme-ignore-duplication-warnings !global;
341
+
342
+ $mat-private-density-generate-at-root: false !global;
343
+ $mat-private-density-generate-styles: true !global;
344
+ }
345
+
261
346
  // Checks whether the given value resolves to a theme object. Theme objects are always
262
347
  // of type `map` and can optionally only specify `color`, `density` or `typography`.
263
- @function _mat-is-theme-object($value) {
348
+ @function mat-private-is-theme-object($value) {
264
349
  @return type-of($value) == 'map' and (
265
350
  map-has-key($value, color) or
266
351
  map-has-key($value, density) or
@@ -270,10 +355,35 @@ $_mat-theme-generate-default-density: true !default;
270
355
  }
271
356
 
272
357
  // Checks whether a given value corresponds to a legacy constructed theme.
273
- @function _mat-is-legacy-constructed-theme($value) {
358
+ @function mat-private-is-legacy-constructed-theme($value) {
274
359
  @return type-of($value) == 'map' and map-get($value, '_is-legacy-theme');
275
360
  }
276
361
 
362
+ // Creates a backwards compatible theme. Previously in Angular Material, theme objects
363
+ // contained the color configuration directly. With the recent refactoring of the theming
364
+ // system to allow for density and typography configurations, this is no longer the case.
365
+ // To ensure that constructed themes which will be passed to custom theme mixins do not break,
366
+ // we copy the color configuration and put its properties at the top-level of the theme object.
367
+ // Here is an example of a pattern that should still work until it's officially marked as a
368
+ // breaking change:
369
+ //
370
+ // @mixin my-custom-component-theme($theme) {
371
+ // .my-comp {
372
+ // background-color: mat-color(map-get($theme, primary));
373
+ // }
374
+ // }
375
+ //
376
+ // Note that the `$theme.primary` key does usually not exist since the color configuration
377
+ // is stored in `$theme.color` which contains a property for `primary`. This method copies
378
+ // the map from `$theme.color` to `$theme` for backwards compatibility.
379
+ @function mat-private-create-backwards-compatibility-theme($theme) {
380
+ @if not map-get($theme, color) {
381
+ @return $theme;
382
+ }
383
+ $color: map-get($theme, color);
384
+ @return map-merge($theme, $color);
385
+ }
386
+
277
387
  // Gets the theme from the given value that is either already a theme, or a color configuration.
278
388
  // This handles the legacy case where developers pass a color configuration directly to the
279
389
  // theme mixin. Before we introduced the new pattern for constructing a theme, developers passed
@@ -281,11 +391,11 @@ $_mat-theme-generate-default-density: true !default;
281
391
  // construct a theme manually and pass it to a theme. We support this for backwards compatibility.
282
392
  // TODO(devversion): remove this in the future. Constructing themes manually is rare,
283
393
  // and the code can be easily updated to the new API.
284
- @function _mat-legacy-get-theme($theme-or-color-config) {
285
- @if _mat-is-theme-object($theme-or-color-config) {
394
+ @function mat-private-legacy-get-theme($theme-or-color-config) {
395
+ @if mat-private-is-theme-object($theme-or-color-config) {
286
396
  @return $theme-or-color-config;
287
397
  }
288
- @return _mat-create-backwards-compatibility-theme((
398
+ @return mat-private-create-backwards-compatibility-theme((
289
399
  _is-legacy-theme: true,
290
400
  color: $theme-or-color-config
291
401
  ));
@@ -39,7 +39,7 @@
39
39
 
40
40
  // Includes all of the typographic styles.
41
41
  @mixin angular-material-typography($config-or-theme: null) {
42
- $config: if(_mat-is-theme-object($config-or-theme),
42
+ $config: if(mat-private-is-theme-object($config-or-theme),
43
43
  mat-get-typography-config($config-or-theme), $config-or-theme);
44
44
 
45
45
  // If no actual color configuration has been specified, create a default one.
@@ -1,7 +1,6 @@
1
- @import '../core/style/elevation';
1
+ @import '../core/style/private';
2
2
  @import '../core/theming/palette';
3
3
  @import '../core/theming/theming';
4
- @import '../core/theming/check-duplicate-styles';
5
4
  @import '../core/typography/typography-utils';
6
5
 
7
6
 
@@ -145,7 +144,7 @@ $mat-calendar-weekday-table-font-size: 11px !default;
145
144
  @include _mat-datepicker-color(map-get($config, primary));
146
145
 
147
146
  .mat-datepicker-content {
148
- @include _mat-theme-elevation(4, $config);
147
+ @include mat-private-theme-elevation(4, $config);
149
148
  background-color: mat-color($background, card);
150
149
  color: mat-color($foreground, text);
151
150
 
@@ -159,7 +158,7 @@ $mat-calendar-weekday-table-font-size: 11px !default;
159
158
  }
160
159
 
161
160
  .mat-datepicker-content-touch {
162
- @include _mat-theme-elevation(0, $config);
161
+ @include mat-private-theme-elevation(0, $config);
163
162
  }
164
163
 
165
164
  .mat-datepicker-toggle-active {
@@ -244,8 +243,8 @@ $mat-calendar-weekday-table-font-size: 11px !default;
244
243
  @mixin _mat-datepicker-density($config-or-theme) {}
245
244
 
246
245
  @mixin mat-datepicker-theme($theme-or-color-config) {
247
- $theme: _mat-legacy-get-theme($theme-or-color-config);
248
- @include _mat-check-duplicate-theme-styles($theme, 'mat-datepicker') {
246
+ $theme: mat-private-legacy-get-theme($theme-or-color-config);
247
+ @include mat-private-check-duplicate-theme-styles($theme, 'mat-datepicker') {
249
248
  $color: mat-get-color-config($theme);
250
249
  $density: mat-get-density-config($theme);
251
250
  $typography: mat-get-typography-config($theme);
@@ -67,8 +67,9 @@ declare abstract class MatDateRangeInputPartBase<D> extends MatDatepickerInputBa
67
67
  _getMaxDate(): D | null;
68
68
  /** Gets the date filter function from the range input. */
69
69
  protected _getDateFilter(): DateFilterFn<D>;
70
- protected _outsideValueChanged: () => void;
71
70
  protected _parentDisabled(): boolean;
71
+ protected _shouldHandleChangeEvent({ source }: DateSelectionModelChange<DateRange<D>>): boolean;
72
+ protected _assignValueProgrammatically(value: D | null): void;
72
73
  }
73
74
  declare const _MatDateRangeInputBase: CanUpdateErrorStateCtor & typeof MatDateRangeInputPartBase;
74
75
  /** Input for entering the start date in a `mat-date-range-input`. */
@@ -81,7 +82,6 @@ export declare class MatStartDate<D> extends _MatDateRangeInputBase<D> implement
81
82
  protected _validator: ValidatorFn | null;
82
83
  protected _getValueFromModel(modelValue: DateRange<D>): D | null;
83
84
  protected _assignValueToModel(value: D | null): void;
84
- protected _canEmitChangeEvent: (event: DateSelectionModelChange<DateRange<D>>) => boolean;
85
85
  protected _formatValue(value: D | null): void;
86
86
  /** Gets the value that should be used when mirroring the input's size. */
87
87
  getMirrorValue(): string;
@@ -97,7 +97,6 @@ export declare class MatEndDate<D> extends _MatDateRangeInputBase<D> implements
97
97
  protected _validator: ValidatorFn | null;
98
98
  protected _getValueFromModel(modelValue: DateRange<D>): D | null;
99
99
  protected _assignValueToModel(value: D | null): void;
100
- protected _canEmitChangeEvent: (event: DateSelectionModelChange<DateRange<D>>) => boolean;
101
100
  _onKeydown(event: KeyboardEvent): void;
102
101
  static ngAcceptInputType_disabled: BooleanInput;
103
102
  }
@@ -12,15 +12,16 @@ import { NgControl, ControlContainer } from '@angular/forms';
12
12
  import { Subject } from 'rxjs';
13
13
  import { BooleanInput } from '@angular/cdk/coercion';
14
14
  import { MatStartDate, MatEndDate, MatDateRangeInputParent } from './date-range-input-parts';
15
- import { MatDatepickerControl } from './datepicker-base';
15
+ import { MatDatepickerControl, MatDatepickerPanel } from './datepicker-base';
16
16
  import { DateFilterFn } from './datepicker-input-base';
17
- import { MatDateRangePicker, MatDateRangePickerInput } from './date-range-picker';
17
+ import { MatDateRangePickerInput } from './date-range-picker';
18
18
  import { DateRange } from './date-selection-model';
19
19
  export declare class MatDateRangeInput<D> implements MatFormFieldControl<DateRange<D>>, MatDatepickerControl<D>, MatDateRangeInputParent<D>, MatDateRangePickerInput<D>, AfterContentInit, OnChanges, OnDestroy {
20
20
  private _changeDetectorRef;
21
21
  private _elementRef;
22
22
  private _dateAdapter;
23
23
  private _formField?;
24
+ private _closedSubscription;
24
25
  /** Current value of the range input. */
25
26
  get value(): DateRange<D> | null;
26
27
  /** Unique ID for the input. */
@@ -38,8 +39,8 @@ export declare class MatDateRangeInput<D> implements MatFormFieldControl<DateRan
38
39
  */
39
40
  get placeholder(): string;
40
41
  /** The range picker that this input is associated with. */
41
- get rangePicker(): MatDateRangePicker<D>;
42
- set rangePicker(rangePicker: MatDateRangePicker<D>);
42
+ get rangePicker(): MatDatepickerPanel<MatDatepickerControl<D>, DateRange<D>, D>;
43
+ set rangePicker(rangePicker: MatDatepickerPanel<MatDatepickerControl<D>, DateRange<D>, D>);
43
44
  private _rangePicker;
44
45
  /** Whether the input is required. */
45
46
  get required(): boolean;
@@ -62,6 +62,12 @@ export declare abstract class MatDateSelectionModel<S, D = ExtractDateTypeFromSe
62
62
  abstract isValid(): boolean;
63
63
  /** Checks whether the current selection is complete. */
64
64
  abstract isComplete(): boolean;
65
+ /**
66
+ * Clones the selection model.
67
+ * @deprecated To be turned into an abstract method.
68
+ * @breaking-change 12.0.0
69
+ */
70
+ clone(): MatDateSelectionModel<S, D>;
65
71
  }
66
72
  /** A selection model that contains a single date. */
67
73
  export declare class MatSingleDateSelectionModel<D> extends MatDateSelectionModel<D | null, D> {
@@ -78,6 +84,8 @@ export declare class MatSingleDateSelectionModel<D> extends MatDateSelectionMode
78
84
  * is true if the current selection is not null.
79
85
  */
80
86
  isComplete(): boolean;
87
+ /** Clones the selection model. */
88
+ clone(): MatSingleDateSelectionModel<D>;
81
89
  }
82
90
  /** A selection model that contains a date range. */
83
91
  export declare class MatRangeDateSelectionModel<D> extends MatDateSelectionModel<DateRange<D>, D> {
@@ -95,6 +103,8 @@ export declare class MatRangeDateSelectionModel<D> extends MatDateSelectionModel
95
103
  * is true if the current selection has a non-null `start` and `end`.
96
104
  */
97
105
  isComplete(): boolean;
106
+ /** Clones the selection model. */
107
+ clone(): MatRangeDateSelectionModel<D>;
98
108
  }
99
109
  /** @docs-private */
100
110
  export declare function MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY(parent: MatSingleDateSelectionModel<unknown>, adapter: DateAdapter<unknown>): MatSingleDateSelectionModel<unknown>;
@@ -0,0 +1,33 @@
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 { AfterViewInit, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';
9
+ import { MatDatepickerBase, MatDatepickerControl } from './datepicker-base';
10
+ /** Button that will close the datepicker and assign the current selection to the data model. */
11
+ export declare class MatDatepickerApply {
12
+ private _datepicker;
13
+ constructor(_datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>);
14
+ _applySelection(): void;
15
+ }
16
+ /** Button that will close the datepicker and discard the current selection. */
17
+ export declare class MatDatepickerCancel {
18
+ _datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>;
19
+ constructor(_datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>);
20
+ }
21
+ /**
22
+ * Container that can be used to project a row of action buttons
23
+ * to the bottom of a datepicker or date range picker.
24
+ */
25
+ export declare class MatDatepickerActions implements AfterViewInit, OnDestroy {
26
+ private _datepicker;
27
+ private _viewContainerRef;
28
+ _template: TemplateRef<unknown>;
29
+ private _portal;
30
+ constructor(_datepicker: MatDatepickerBase<MatDatepickerControl<unknown>, unknown>, _viewContainerRef: ViewContainerRef);
31
+ ngAfterViewInit(): void;
32
+ ngOnDestroy(): void;
33
+ }
@@ -8,8 +8,8 @@
8
8
  import { Directionality } from '@angular/cdk/bidi';
9
9
  import { BooleanInput } from '@angular/cdk/coercion';
10
10
  import { Overlay, ScrollStrategy } from '@angular/cdk/overlay';
11
- import { ComponentType } from '@angular/cdk/portal';
12
- import { AfterViewInit, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, ViewContainerRef, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core';
11
+ import { ComponentType, TemplatePortal } from '@angular/cdk/portal';
12
+ import { AfterViewInit, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, ViewContainerRef, ChangeDetectorRef, OnChanges, SimpleChanges, OnInit } from '@angular/core';
13
13
  import { CanColor, CanColorCtor, DateAdapter, ThemePalette } from '@angular/material/core';
14
14
  import { MatDialog } from '@angular/material/dialog';
15
15
  import { Subject, Observable } from 'rxjs';
@@ -46,12 +46,13 @@ declare const _MatDatepickerContentMixinBase: CanColorCtor & typeof MatDatepicke
46
46
  * future. (e.g. confirmation buttons).
47
47
  * @docs-private
48
48
  */
49
- export declare class MatDatepickerContent<S, D = ExtractDateTypeFromSelection<S>> extends _MatDatepickerContentMixinBase implements AfterViewInit, OnDestroy, CanColor {
49
+ export declare class MatDatepickerContent<S, D = ExtractDateTypeFromSelection<S>> extends _MatDatepickerContentMixinBase implements OnInit, AfterViewInit, OnDestroy, CanColor {
50
50
  private _changeDetectorRef;
51
- private _model;
51
+ private _globalModel;
52
52
  private _dateAdapter;
53
53
  private _rangeSelectionStrategy;
54
54
  private _subscriptions;
55
+ private _model;
55
56
  /** Reference to the internal calendar component. */
56
57
  _calendar: MatCalendar<D>;
57
58
  /** Reference to the datepicker that created the overlay. */
@@ -70,17 +71,22 @@ export declare class MatDatepickerContent<S, D = ExtractDateTypeFromSelection<S>
70
71
  _closeButtonText: string;
71
72
  /** Whether the close button currently has focus. */
72
73
  _closeButtonFocused: boolean;
73
- constructor(elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, _model: MatDateSelectionModel<S, D>, _dateAdapter: DateAdapter<D>, _rangeSelectionStrategy: MatDateRangeSelectionStrategy<D>,
74
+ /** Portal with projected action buttons. */
75
+ _actionsPortal: TemplatePortal | null;
76
+ constructor(elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, _globalModel: MatDateSelectionModel<S, D>, _dateAdapter: DateAdapter<D>, _rangeSelectionStrategy: MatDateRangeSelectionStrategy<D>,
74
77
  /**
75
78
  * @deprecated `intl` argument to become required.
76
79
  * @breaking-change 12.0.0
77
80
  */
78
81
  intl?: MatDatepickerIntl);
82
+ ngOnInit(): void;
79
83
  ngAfterViewInit(): void;
80
84
  ngOnDestroy(): void;
81
85
  _handleUserSelection(event: MatCalendarUserEvent<D | null>): void;
82
86
  _startExitAnimation(): void;
83
87
  _getSelected(): D | DateRange<D> | null;
88
+ /** Applies the current pending selection to the global model. */
89
+ _applyPendingSelection(): void;
84
90
  }
85
91
  /** Form control that can be associated with a datepicker. */
86
92
  export interface MatDatepickerControl<D> {
@@ -93,8 +99,31 @@ export interface MatDatepickerControl<D> {
93
99
  getConnectedOverlayOrigin(): ElementRef;
94
100
  stateChanges: Observable<void>;
95
101
  }
102
+ /** A datepicker that can be attached to a {@link MatDatepickerControl}. */
103
+ export interface MatDatepickerPanel<C extends MatDatepickerControl<D>, S, D = ExtractDateTypeFromSelection<S>> {
104
+ /** Stream that emits whenever the date picker is closed. */
105
+ closedStream: EventEmitter<void>;
106
+ /** Color palette to use on the datepicker's calendar. */
107
+ color: ThemePalette;
108
+ /** The input element the datepicker is associated with. */
109
+ datepickerInput: C;
110
+ /** Whether the datepicker pop-up should be disabled. */
111
+ disabled: boolean;
112
+ /** The id for the datepicker's calendar. */
113
+ id: string;
114
+ /** Whether the datepicker is open. */
115
+ opened: boolean;
116
+ /** Stream that emits whenever the date picker is opened. */
117
+ openedStream: EventEmitter<void>;
118
+ /** Emits when the datepicker's state changes. */
119
+ stateChanges: Subject<void>;
120
+ /** Opens the datepicker. */
121
+ open(): void;
122
+ /** Register an input with the datepicker. */
123
+ registerInput(input: C): MatDateSelectionModel<S, D>;
124
+ }
96
125
  /** Base class for a datepicker. */
97
- export declare abstract class MatDatepickerBase<C extends MatDatepickerControl<D>, S, D = ExtractDateTypeFromSelection<S>> implements OnDestroy, OnChanges {
126
+ export declare abstract class MatDatepickerBase<C extends MatDatepickerControl<D>, S, D = ExtractDateTypeFromSelection<S>> implements MatDatepickerPanel<C, S, D>, OnDestroy, OnChanges {
98
127
  private _dialog;
99
128
  private _overlay;
100
129
  private _ngZone;
@@ -180,10 +209,12 @@ export declare abstract class MatDatepickerBase<C extends MatDatepickerControl<D
180
209
  private _focusedElementBeforeOpen;
181
210
  /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
182
211
  private _backdropHarnessClass;
212
+ /** Currently-registered actions portal. */
213
+ private _actionsPortal;
183
214
  /** The input element this datepicker is associated with. */
184
- _datepickerInput: C;
215
+ datepickerInput: C;
185
216
  /** Emits when the datepicker's state changes. */
186
- readonly _stateChanges: Subject<void>;
217
+ readonly stateChanges: Subject<void>;
187
218
  constructor(_dialog: MatDialog, _overlay: Overlay, _ngZone: NgZone, _viewContainerRef: ViewContainerRef, scrollStrategy: any, _dateAdapter: DateAdapter<D>, _dir: Directionality, _document: any, _model: MatDateSelectionModel<S, D>);
188
219
  ngOnChanges(changes: SimpleChanges): void;
189
220
  ngOnDestroy(): void;
@@ -200,11 +231,23 @@ export declare abstract class MatDatepickerBase<C extends MatDatepickerControl<D
200
231
  * @param input The datepicker input to register with this datepicker.
201
232
  * @returns Selection model that the input should hook itself up to.
202
233
  */
203
- _registerInput(input: C): MatDateSelectionModel<S, D>;
234
+ registerInput(input: C): MatDateSelectionModel<S, D>;
235
+ /**
236
+ * Registers a portal containing action buttons with the datepicker.
237
+ * @param portal Portal to be registered.
238
+ */
239
+ registerActions(portal: TemplatePortal): void;
240
+ /**
241
+ * Removes a portal containing action buttons from the datepicker.
242
+ * @param portal Portal to be removed.
243
+ */
244
+ removeActions(portal: TemplatePortal): void;
204
245
  /** Open the calendar. */
205
246
  open(): void;
206
247
  /** Close the calendar. */
207
248
  close(): void;
249
+ /** Applies the current pending selection on the popup to the model. */
250
+ _applyPendingSelection(): void;
208
251
  /** Open the calendar as a dialog. */
209
252
  private _openAsDialog;
210
253
  /** Open the calendar as a popup. */
@@ -50,13 +50,11 @@ export declare abstract class MatDatepickerInputBase<S, D = ExtractDateTypeFromS
50
50
  readonly dateChange: EventEmitter<MatDatepickerInputEvent<D, S>>;
51
51
  /** Emits when an `input` event is fired on this `<input>`. */
52
52
  readonly dateInput: EventEmitter<MatDatepickerInputEvent<D, S>>;
53
- /** Emits when the value changes (either due to user input or programmatic change). */
54
- _valueChange: EventEmitter<D | null>;
55
53
  /** Emits when the internal state has changed */
56
54
  stateChanges: Subject<void>;
57
55
  _onTouched: () => void;
58
56
  _validatorOnChange: () => void;
59
- protected _cvaOnChange: (value: any) => void;
57
+ private _cvaOnChange;
60
58
  private _valueChangesSubscription;
61
59
  private _localeSubscription;
62
60
  /**
@@ -91,13 +89,8 @@ export declare abstract class MatDatepickerInputBase<S, D = ExtractDateTypeFromS
91
89
  protected abstract _getValueFromModel(modelValue: S): D | null;
92
90
  /** Combined form control validator for this input. */
93
91
  protected abstract _validator: ValidatorFn | null;
94
- /**
95
- * Callback that'll be invoked when the selection model is changed
96
- * from somewhere that's not the current datepicker input.
97
- */
98
- protected abstract _outsideValueChanged?: () => void;
99
- /** Predicate that determines whether we're allowed to emit a particular change event. */
100
- protected abstract _canEmitChangeEvent(event: DateSelectionModelChange<S>): boolean;
92
+ /** Predicate that determines whether the input should handle a particular change event. */
93
+ protected abstract _shouldHandleChangeEvent(event: DateSelectionModelChange<S>): boolean;
101
94
  /** Whether the last value set on the input was valid. */
102
95
  protected _lastValueValid: boolean;
103
96
  constructor(_elementRef: ElementRef<HTMLInputElement>, _dateAdapter: DateAdapter<D>, _dateFormats: MatDateFormats);
@@ -128,6 +121,8 @@ export declare abstract class MatDatepickerInputBase<S, D = ExtractDateTypeFromS
128
121
  * by inputs extending this one which can be placed inside of a group that can be disabled.
129
122
  */
130
123
  protected _parentDisabled(): boolean;
124
+ /** Programmatically assigns a value to the input. */
125
+ protected _assignValueProgrammatically(value: D | null): void;
131
126
  /** Gets whether a value matches the current date filter. */
132
127
  _matchesFilter(value: D | null): boolean;
133
128
  static ngAcceptInputType_value: any;