@angular/material 10.0.0-rc.3 → 10.1.0

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 (627) hide show
  1. package/_theming.scss +17 -17
  2. package/autocomplete/index.metadata.json +1 -1
  3. package/autocomplete/testing/autocomplete-harness.d.ts +2 -0
  4. package/bundles/material-autocomplete-testing.umd.js +11 -0
  5. package/bundles/material-autocomplete-testing.umd.js.map +1 -1
  6. package/bundles/material-autocomplete-testing.umd.min.js +2 -2
  7. package/bundles/material-autocomplete-testing.umd.min.js.map +1 -1
  8. package/bundles/material-autocomplete.umd.js +3 -1
  9. package/bundles/material-autocomplete.umd.js.map +1 -1
  10. package/bundles/material-autocomplete.umd.min.js +5 -5
  11. package/bundles/material-autocomplete.umd.min.js.map +1 -1
  12. package/bundles/material-badge-testing.umd.min.js +1 -1
  13. package/bundles/material-badge-testing.umd.min.js.map +1 -1
  14. package/bundles/material-bottom-sheet-testing.umd.min.js +1 -1
  15. package/bundles/material-bottom-sheet-testing.umd.min.js.map +1 -1
  16. package/bundles/material-button-testing.umd.js +11 -0
  17. package/bundles/material-button-testing.umd.js.map +1 -1
  18. package/bundles/material-button-testing.umd.min.js +2 -2
  19. package/bundles/material-button-testing.umd.min.js.map +1 -1
  20. package/bundles/material-button-toggle-testing.umd.js +11 -0
  21. package/bundles/material-button-toggle-testing.umd.js.map +1 -1
  22. package/bundles/material-button-toggle-testing.umd.min.js +3 -3
  23. package/bundles/material-button-toggle-testing.umd.min.js.map +1 -1
  24. package/bundles/material-button-toggle.umd.js +12 -3
  25. package/bundles/material-button-toggle.umd.js.map +1 -1
  26. package/bundles/material-button-toggle.umd.min.js +2 -2
  27. package/bundles/material-button-toggle.umd.min.js.map +1 -1
  28. package/bundles/material-button.umd.js +7 -2
  29. package/bundles/material-button.umd.js.map +1 -1
  30. package/bundles/material-button.umd.min.js +4 -4
  31. package/bundles/material-button.umd.min.js.map +1 -1
  32. package/bundles/material-card-testing.umd.js +335 -0
  33. package/bundles/material-card-testing.umd.js.map +1 -0
  34. package/bundles/material-card-testing.umd.min.js +44 -0
  35. package/bundles/material-card-testing.umd.min.js.map +1 -0
  36. package/bundles/material-checkbox-testing.umd.js +11 -0
  37. package/bundles/material-checkbox-testing.umd.js.map +1 -1
  38. package/bundles/material-checkbox-testing.umd.min.js +3 -3
  39. package/bundles/material-checkbox-testing.umd.min.js.map +1 -1
  40. package/bundles/material-checkbox.umd.js.map +1 -1
  41. package/bundles/material-chips.umd.js +36 -12
  42. package/bundles/material-chips.umd.js.map +1 -1
  43. package/bundles/material-chips.umd.min.js +4 -4
  44. package/bundles/material-chips.umd.min.js.map +1 -1
  45. package/bundles/material-core-testing.umd.min.js +1 -1
  46. package/bundles/material-core-testing.umd.min.js.map +1 -1
  47. package/bundles/material-core.umd.js +11 -3
  48. package/bundles/material-core.umd.js.map +1 -1
  49. package/bundles/material-core.umd.min.js +11 -11
  50. package/bundles/material-core.umd.min.js.map +1 -1
  51. package/bundles/material-datepicker.umd.js +20 -11
  52. package/bundles/material-datepicker.umd.js.map +1 -1
  53. package/bundles/material-datepicker.umd.min.js +5 -5
  54. package/bundles/material-datepicker.umd.min.js.map +1 -1
  55. package/bundles/material-dialog-testing.umd.min.js +1 -1
  56. package/bundles/material-dialog-testing.umd.min.js.map +1 -1
  57. package/bundles/material-dialog.umd.js +45 -8
  58. package/bundles/material-dialog.umd.js.map +1 -1
  59. package/bundles/material-dialog.umd.min.js +14 -7
  60. package/bundles/material-dialog.umd.min.js.map +1 -1
  61. package/bundles/material-divider-testing.umd.min.js +1 -1
  62. package/bundles/material-divider-testing.umd.min.js.map +1 -1
  63. package/bundles/material-expansion-testing.umd.js +11 -0
  64. package/bundles/material-expansion-testing.umd.js.map +1 -1
  65. package/bundles/material-expansion-testing.umd.min.js +3 -3
  66. package/bundles/material-expansion-testing.umd.min.js.map +1 -1
  67. package/bundles/material-form-field-testing.umd.js +32 -0
  68. package/bundles/material-form-field-testing.umd.js.map +1 -1
  69. package/bundles/material-form-field-testing.umd.min.js +4 -4
  70. package/bundles/material-form-field-testing.umd.min.js.map +1 -1
  71. package/bundles/material-form-field.umd.js +47 -21
  72. package/bundles/material-form-field.umd.js.map +1 -1
  73. package/bundles/material-form-field.umd.min.js +5 -5
  74. package/bundles/material-form-field.umd.min.js.map +1 -1
  75. package/bundles/material-grid-list-testing.umd.min.js +1 -1
  76. package/bundles/material-grid-list-testing.umd.min.js.map +1 -1
  77. package/bundles/material-grid-list.umd.js +2 -2
  78. package/bundles/material-grid-list.umd.js.map +1 -1
  79. package/bundles/material-grid-list.umd.min.js +2 -2
  80. package/bundles/material-grid-list.umd.min.js.map +1 -1
  81. package/bundles/material-input-testing.umd.js +23 -6
  82. package/bundles/material-input-testing.umd.js.map +1 -1
  83. package/bundles/material-input-testing.umd.min.js +3 -3
  84. package/bundles/material-input-testing.umd.min.js.map +1 -1
  85. package/bundles/material-input.umd.js +28 -3
  86. package/bundles/material-input.umd.js.map +1 -1
  87. package/bundles/material-input.umd.min.js +3 -3
  88. package/bundles/material-input.umd.min.js.map +1 -1
  89. package/bundles/material-list-testing.umd.js +33 -0
  90. package/bundles/material-list-testing.umd.js.map +1 -1
  91. package/bundles/material-list-testing.umd.min.js +2 -2
  92. package/bundles/material-list-testing.umd.min.js.map +1 -1
  93. package/bundles/material-list.umd.js +3 -3
  94. package/bundles/material-list.umd.min.js +1 -1
  95. package/bundles/material-list.umd.min.js.map +1 -1
  96. package/bundles/material-menu-testing.umd.js +22 -0
  97. package/bundles/material-menu-testing.umd.js.map +1 -1
  98. package/bundles/material-menu-testing.umd.min.js +2 -2
  99. package/bundles/material-menu-testing.umd.min.js.map +1 -1
  100. package/bundles/material-menu.umd.js +13 -2
  101. package/bundles/material-menu.umd.js.map +1 -1
  102. package/bundles/material-menu.umd.min.js +4 -4
  103. package/bundles/material-menu.umd.min.js.map +1 -1
  104. package/bundles/material-paginator-testing.umd.min.js +1 -1
  105. package/bundles/material-paginator-testing.umd.min.js.map +1 -1
  106. package/bundles/material-progress-bar-testing.umd.min.js +1 -1
  107. package/bundles/material-progress-bar-testing.umd.min.js.map +1 -1
  108. package/bundles/material-progress-spinner-testing.umd.js +1 -1
  109. package/bundles/material-progress-spinner-testing.umd.js.map +1 -1
  110. package/bundles/material-progress-spinner-testing.umd.min.js +2 -2
  111. package/bundles/material-progress-spinner-testing.umd.min.js.map +1 -1
  112. package/bundles/material-progress-spinner.umd.js +2 -2
  113. package/bundles/material-progress-spinner.umd.min.js +3 -3
  114. package/bundles/material-progress-spinner.umd.min.js.map +1 -1
  115. package/bundles/material-radio-testing.umd.js +11 -0
  116. package/bundles/material-radio-testing.umd.js.map +1 -1
  117. package/bundles/material-radio-testing.umd.min.js +3 -3
  118. package/bundles/material-radio-testing.umd.min.js.map +1 -1
  119. package/bundles/material-radio.umd.js +15 -5
  120. package/bundles/material-radio.umd.js.map +1 -1
  121. package/bundles/material-radio.umd.min.js +2 -2
  122. package/bundles/material-radio.umd.min.js.map +1 -1
  123. package/bundles/material-select-testing.umd.js +11 -0
  124. package/bundles/material-select-testing.umd.js.map +1 -1
  125. package/bundles/material-select-testing.umd.min.js +2 -2
  126. package/bundles/material-select-testing.umd.min.js.map +1 -1
  127. package/bundles/material-select.umd.js +11 -3
  128. package/bundles/material-select.umd.js.map +1 -1
  129. package/bundles/material-select.umd.min.js +4 -4
  130. package/bundles/material-select.umd.min.js.map +1 -1
  131. package/bundles/material-sidenav-testing.umd.min.js +1 -1
  132. package/bundles/material-sidenav-testing.umd.min.js.map +1 -1
  133. package/bundles/material-sidenav.umd.js +41 -17
  134. package/bundles/material-sidenav.umd.js.map +1 -1
  135. package/bundles/material-sidenav.umd.min.js +2 -2
  136. package/bundles/material-sidenav.umd.min.js.map +1 -1
  137. package/bundles/material-slide-toggle-testing.umd.js +11 -0
  138. package/bundles/material-slide-toggle-testing.umd.js.map +1 -1
  139. package/bundles/material-slide-toggle-testing.umd.min.js +2 -2
  140. package/bundles/material-slide-toggle-testing.umd.min.js.map +1 -1
  141. package/bundles/material-slide-toggle.umd.js.map +1 -1
  142. package/bundles/material-slider-testing.umd.js +11 -0
  143. package/bundles/material-slider-testing.umd.js.map +1 -1
  144. package/bundles/material-slider-testing.umd.min.js +2 -2
  145. package/bundles/material-slider-testing.umd.min.js.map +1 -1
  146. package/bundles/material-snack-bar-testing.umd.min.js +1 -1
  147. package/bundles/material-snack-bar-testing.umd.min.js.map +1 -1
  148. package/bundles/material-snack-bar.umd.js +47 -39
  149. package/bundles/material-snack-bar.umd.js.map +1 -1
  150. package/bundles/material-snack-bar.umd.min.js +2 -2
  151. package/bundles/material-snack-bar.umd.min.js.map +1 -1
  152. package/bundles/material-sort-testing.umd.js +10 -10
  153. package/bundles/material-sort-testing.umd.js.map +1 -1
  154. package/bundles/material-sort-testing.umd.min.js +3 -3
  155. package/bundles/material-sort-testing.umd.min.js.map +1 -1
  156. package/bundles/material-sort.umd.js +25 -12
  157. package/bundles/material-sort.umd.js.map +1 -1
  158. package/bundles/material-sort.umd.min.js +5 -5
  159. package/bundles/material-sort.umd.min.js.map +1 -1
  160. package/bundles/material-table-testing.umd.min.js +1 -1
  161. package/bundles/material-table-testing.umd.min.js.map +1 -1
  162. package/bundles/material-table.umd.min.js +2 -2
  163. package/bundles/material-table.umd.min.js.map +1 -1
  164. package/bundles/material-tabs-testing.umd.min.js +1 -1
  165. package/bundles/material-tabs-testing.umd.min.js.map +1 -1
  166. package/bundles/material-tabs.umd.js +23 -4
  167. package/bundles/material-tabs.umd.js.map +1 -1
  168. package/bundles/material-tabs.umd.min.js +5 -12
  169. package/bundles/material-tabs.umd.min.js.map +1 -1
  170. package/bundles/material-toolbar-testing.umd.js +330 -0
  171. package/bundles/material-toolbar-testing.umd.js.map +1 -0
  172. package/bundles/material-toolbar-testing.umd.min.js +44 -0
  173. package/bundles/material-toolbar-testing.umd.min.js.map +1 -0
  174. package/bundles/material-tooltip-testing.umd.min.js +1 -1
  175. package/bundles/material-tooltip-testing.umd.min.js.map +1 -1
  176. package/bundles/material-tooltip.umd.js +14 -1
  177. package/bundles/material-tooltip.umd.js.map +1 -1
  178. package/bundles/material-tooltip.umd.min.js +3 -3
  179. package/bundles/material-tooltip.umd.min.js.map +1 -1
  180. package/bundles/material-tree.umd.js.map +1 -1
  181. package/button/_button-base.scss +1 -1
  182. package/button/_button-theme.scss +8 -8
  183. package/button/index.metadata.json +1 -1
  184. package/button/testing/button-harness.d.ts +2 -0
  185. package/button-toggle/button-toggle.d.ts +10 -3
  186. package/button-toggle/index.metadata.json +1 -1
  187. package/button-toggle/testing/button-toggle-harness.d.ts +2 -0
  188. package/card/testing/card-harness-filters.d.ts +17 -0
  189. package/card/testing/card-harness.d.ts +36 -0
  190. package/card/testing/index.d.ts +8 -0
  191. package/card/testing/package.json +9 -0
  192. package/card/testing/public-api.d.ts +9 -0
  193. package/checkbox/index.metadata.json +1 -1
  194. package/checkbox/testing/checkbox-harness.d.ts +2 -0
  195. package/chips/chip.d.ts +19 -1
  196. package/chips/index.metadata.json +1 -1
  197. package/core/focus-indicators/_focus-indicators.scss +6 -6
  198. package/core/index.metadata.json +1 -1
  199. package/core/option/optgroup.d.ts +7 -0
  200. package/core/ripple/ripple-ref.d.ts +21 -2
  201. package/core/ripple/ripple-renderer.d.ts +1 -19
  202. package/core/ripple/ripple.d.ts +2 -2
  203. package/core/style/_list-common.scss +1 -1
  204. package/datepicker/date-range-input-parts.d.ts +2 -4
  205. package/datepicker/date-range-input.d.ts +4 -4
  206. package/datepicker/date-range-picker.d.ts +10 -3
  207. package/datepicker/datepicker.d.ts +2 -3
  208. package/datepicker/index.metadata.json +1 -1
  209. package/datepicker/public-api.d.ts +1 -1
  210. package/dialog/dialog-container.d.ts +9 -2
  211. package/dialog/dialog-content-directives.d.ts +1 -0
  212. package/dialog/dialog-ref.d.ts +7 -0
  213. package/dialog/index.metadata.json +1 -1
  214. package/esm2015/autocomplete/autocomplete-module.js +18 -22
  215. package/esm2015/autocomplete/autocomplete-origin.js +16 -20
  216. package/esm2015/autocomplete/autocomplete-trigger.js +519 -521
  217. package/esm2015/autocomplete/autocomplete.js +126 -130
  218. package/esm2015/autocomplete/testing/autocomplete-harness.js +99 -97
  219. package/esm2015/badge/badge-module.js +13 -17
  220. package/esm2015/badge/badge.js +184 -188
  221. package/esm2015/badge/testing/badge-harness.js +74 -78
  222. package/esm2015/bottom-sheet/bottom-sheet-container.js +161 -165
  223. package/esm2015/bottom-sheet/bottom-sheet-module.js +15 -19
  224. package/esm2015/bottom-sheet/bottom-sheet.js +124 -128
  225. package/esm2015/bottom-sheet/testing/bottom-sheet-harness.js +29 -33
  226. package/esm2015/button/button-module.js +20 -24
  227. package/esm2015/button/button.js +111 -114
  228. package/esm2015/button/testing/button-harness.js +60 -58
  229. package/esm2015/button-toggle/button-toggle-module.js +10 -14
  230. package/esm2015/button-toggle/button-toggle.js +368 -368
  231. package/esm2015/button-toggle/testing/button-toggle-group-harness.js +42 -46
  232. package/esm2015/button-toggle/testing/button-toggle-harness.js +113 -111
  233. package/esm2015/card/card-module.js +30 -34
  234. package/esm2015/card/card.js +147 -203
  235. package/esm2015/card/testing/card-harness-filters.js +8 -0
  236. package/esm2015/card/testing/card-harness.js +52 -0
  237. package/esm2015/card/testing/index.js +9 -0
  238. package/esm2015/card/testing/public-api.js +10 -0
  239. package/esm2015/card/testing/testing.externs.js +0 -0
  240. package/esm2015/checkbox/checkbox-module.js +21 -29
  241. package/esm2015/checkbox/checkbox-required-validator.js +9 -13
  242. package/esm2015/checkbox/checkbox.js +315 -319
  243. package/esm2015/checkbox/testing/checkbox-harness.js +150 -148
  244. package/esm2015/chips/chip-input.js +119 -123
  245. package/esm2015/chips/chip-list.js +572 -576
  246. package/esm2015/chips/chip.js +333 -328
  247. package/esm2015/chips/chips-module.js +16 -20
  248. package/esm2015/core/animation/animation.js +12 -20
  249. package/esm2015/core/common-behaviors/common-module.js +91 -95
  250. package/esm2015/core/datetime/index.js +19 -27
  251. package/esm2015/core/datetime/native-date-adapter.js +202 -206
  252. package/esm2015/core/error/error-options.js +16 -24
  253. package/esm2015/core/line/line.js +18 -26
  254. package/esm2015/core/option/index.js +10 -14
  255. package/esm2015/core/option/optgroup.js +36 -33
  256. package/esm2015/core/option/option.js +181 -185
  257. package/esm2015/core/ripple/index.js +10 -14
  258. package/esm2015/core/ripple/ripple-ref.js +1 -1
  259. package/esm2015/core/ripple/ripple-renderer.js +1 -1
  260. package/esm2015/core/ripple/ripple.js +102 -106
  261. package/esm2015/core/selection/index.js +9 -13
  262. package/esm2015/core/selection/pseudo-checkbox/pseudo-checkbox.js +32 -36
  263. package/esm2015/core/testing/optgroup-harness.js +39 -43
  264. package/esm2015/core/testing/option-harness.js +51 -55
  265. package/esm2015/core/version.js +1 -1
  266. package/esm2015/datepicker/calendar-body.js +214 -218
  267. package/esm2015/datepicker/calendar.js +295 -303
  268. package/esm2015/datepicker/date-range-input-parts.js +214 -229
  269. package/esm2015/datepicker/date-range-input.js +244 -242
  270. package/esm2015/datepicker/date-range-picker.js +19 -23
  271. package/esm2015/datepicker/date-range-selection-strategy.js +31 -35
  272. package/esm2015/datepicker/date-selection-model.js +110 -122
  273. package/esm2015/datepicker/datepicker-base.js +418 -426
  274. package/esm2015/datepicker/datepicker-input-base.js +227 -224
  275. package/esm2015/datepicker/datepicker-input.js +111 -115
  276. package/esm2015/datepicker/datepicker-intl.js +37 -41
  277. package/esm2015/datepicker/datepicker-module.js +62 -66
  278. package/esm2015/datepicker/datepicker-toggle.js +81 -89
  279. package/esm2015/datepicker/datepicker.js +13 -17
  280. package/esm2015/datepicker/month-view.js +283 -287
  281. package/esm2015/datepicker/multi-year-view.js +198 -202
  282. package/esm2015/datepicker/public-api.js +2 -2
  283. package/esm2015/datepicker/year-view.js +220 -224
  284. package/esm2015/dialog/dialog-container.js +175 -164
  285. package/esm2015/dialog/dialog-content-directives.js +105 -114
  286. package/esm2015/dialog/dialog-module.js +32 -36
  287. package/esm2015/dialog/dialog-ref.js +17 -3
  288. package/esm2015/dialog/dialog.js +236 -240
  289. package/esm2015/dialog/testing/dialog-harness.js +58 -62
  290. package/esm2015/divider/divider-module.js +10 -14
  291. package/esm2015/divider/divider.js +33 -37
  292. package/esm2015/divider/testing/divider-harness.js +16 -20
  293. package/esm2015/expansion/accordion.js +73 -77
  294. package/esm2015/expansion/expansion-module.js +26 -30
  295. package/esm2015/expansion/expansion-panel-content.js +13 -17
  296. package/esm2015/expansion/expansion-panel-header.js +168 -180
  297. package/esm2015/expansion/expansion-panel.js +144 -152
  298. package/esm2015/expansion/testing/accordion-harness.js +24 -28
  299. package/esm2015/expansion/testing/expansion-harness.js +136 -134
  300. package/esm2015/form-field/error.js +26 -23
  301. package/esm2015/form-field/form-field-control.js +6 -10
  302. package/esm2015/form-field/form-field-module.js +31 -35
  303. package/esm2015/form-field/form-field.js +407 -409
  304. package/esm2015/form-field/hint.js +35 -29
  305. package/esm2015/form-field/label.js +8 -12
  306. package/esm2015/form-field/placeholder.js +8 -12
  307. package/esm2015/form-field/prefix.js +16 -13
  308. package/esm2015/form-field/suffix.js +16 -13
  309. package/esm2015/form-field/testing/form-field-harness.js +220 -206
  310. package/esm2015/grid-list/grid-list-module.js +26 -30
  311. package/esm2015/grid-list/grid-list.js +108 -112
  312. package/esm2015/grid-list/grid-tile.js +91 -111
  313. package/esm2015/grid-list/testing/grid-list-harness.js +62 -66
  314. package/esm2015/grid-list/testing/grid-tile-harness.js +69 -73
  315. package/esm2015/grid-list/tile-styler.js +1 -1
  316. package/esm2015/icon/icon-module.js +10 -14
  317. package/esm2015/icon/icon-registry.js +406 -410
  318. package/esm2015/icon/icon.js +228 -232
  319. package/esm2015/icon/testing/fake-icon-registry.js +66 -74
  320. package/esm2015/input/autosize.js +30 -34
  321. package/esm2015/input/input-module.js +21 -25
  322. package/esm2015/input/input.js +305 -284
  323. package/esm2015/input/testing/input-harness.js +129 -123
  324. package/esm2015/list/list-module.js +32 -36
  325. package/esm2015/list/list.js +165 -189
  326. package/esm2015/list/selection-list.js +503 -511
  327. package/esm2015/list/testing/action-list-harness.js +55 -57
  328. package/esm2015/list/testing/list-harness.js +31 -39
  329. package/esm2015/list/testing/list-item-harness-base.js +13 -17
  330. package/esm2015/list/testing/nav-list-harness.js +62 -64
  331. package/esm2015/list/testing/selection-list-harness.js +136 -138
  332. package/esm2015/menu/menu-content.js +74 -71
  333. package/esm2015/menu/menu-item.js +119 -123
  334. package/esm2015/menu/menu-module.js +29 -37
  335. package/esm2015/menu/menu-panel.js +1 -1
  336. package/esm2015/menu/menu-trigger.js +402 -405
  337. package/esm2015/menu/menu.js +329 -339
  338. package/esm2015/menu/testing/menu-harness.js +193 -189
  339. package/esm2015/paginator/paginator-intl.js +36 -40
  340. package/esm2015/paginator/paginator-module.js +16 -20
  341. package/esm2015/paginator/paginator.js +205 -209
  342. package/esm2015/paginator/testing/paginator-harness.js +91 -95
  343. package/esm2015/progress-bar/progress-bar-module.js +10 -14
  344. package/esm2015/progress-bar/progress-bar.js +114 -118
  345. package/esm2015/progress-bar/testing/progress-bar-harness.js +27 -31
  346. package/esm2015/progress-spinner/progress-spinner-module.js +17 -21
  347. package/esm2015/progress-spinner/progress-spinner.js +181 -189
  348. package/esm2015/progress-spinner/testing/progress-spinner-harness.js +28 -32
  349. package/esm2015/radio/radio-module.js +10 -14
  350. package/esm2015/radio/radio.js +437 -444
  351. package/esm2015/radio/testing/radio-harness.js +241 -243
  352. package/esm2015/select/select-module.js +23 -27
  353. package/esm2015/select/select.js +917 -918
  354. package/esm2015/select/testing/select-harness.js +138 -136
  355. package/esm2015/sidenav/drawer.js +632 -620
  356. package/esm2015/sidenav/sidenav-module.js +31 -35
  357. package/esm2015/sidenav/sidenav.js +104 -116
  358. package/esm2015/sidenav/testing/drawer-harness.js +40 -44
  359. package/esm2015/sidenav/testing/sidenav-harness.js +20 -24
  360. package/esm2015/slide-toggle/slide-toggle-module.js +27 -35
  361. package/esm2015/slide-toggle/slide-toggle-required-validator.js +9 -13
  362. package/esm2015/slide-toggle/slide-toggle.js +184 -188
  363. package/esm2015/slide-toggle/testing/slide-toggle-harness.js +123 -121
  364. package/esm2015/slider/slider-module.js +10 -14
  365. package/esm2015/slider/slider.js +640 -644
  366. package/esm2015/slider/testing/slider-harness.js +129 -127
  367. package/esm2015/snack-bar/simple-snack-bar.js +32 -36
  368. package/esm2015/snack-bar/snack-bar-container.js +144 -148
  369. package/esm2015/snack-bar/snack-bar-module.js +17 -21
  370. package/esm2015/snack-bar/snack-bar-ref.js +1 -1
  371. package/esm2015/snack-bar/snack-bar.js +208 -205
  372. package/esm2015/snack-bar/testing/snack-bar-harness.js +112 -116
  373. package/esm2015/sort/sort-header-intl.js +21 -21
  374. package/esm2015/sort/sort-header.js +200 -194
  375. package/esm2015/sort/sort-module.js +11 -15
  376. package/esm2015/sort/sort.js +92 -96
  377. package/esm2015/sort/testing/sort-harness.js +28 -32
  378. package/esm2015/sort/testing/sort-header-harness.js +66 -67
  379. package/esm2015/stepper/step-header.js +78 -82
  380. package/esm2015/stepper/step-label.js +8 -12
  381. package/esm2015/stepper/stepper-button.js +23 -31
  382. package/esm2015/stepper/stepper-icon.js +16 -20
  383. package/esm2015/stepper/stepper-intl.js +15 -19
  384. package/esm2015/stepper/stepper-module.js +40 -44
  385. package/esm2015/stepper/stepper.js +139 -155
  386. package/esm2015/table/cell.js +94 -122
  387. package/esm2015/table/row.js +90 -118
  388. package/esm2015/table/table-module.js +13 -17
  389. package/esm2015/table/table.js +26 -30
  390. package/esm2015/table/testing/cell-harness.js +56 -68
  391. package/esm2015/table/testing/row-harness.js +90 -102
  392. package/esm2015/table/testing/table-harness.js +65 -69
  393. package/esm2015/table/text-column.js +17 -21
  394. package/esm2015/tabs/index.js +4 -2
  395. package/esm2015/tabs/ink-bar.js +55 -59
  396. package/esm2015/tabs/paginated-tab-header.js +415 -419
  397. package/esm2015/tabs/tab-body.js +179 -191
  398. package/esm2015/tabs/tab-content.js +21 -16
  399. package/esm2015/tabs/tab-group.js +263 -271
  400. package/esm2015/tabs/tab-header.js +69 -77
  401. package/esm2015/tabs/tab-label-wrapper.js +29 -33
  402. package/esm2015/tabs/tab-label.js +16 -13
  403. package/esm2015/tabs/tab-nav-bar/tab-nav-bar.js +199 -215
  404. package/esm2015/tabs/tab.js +80 -83
  405. package/esm2015/tabs/tabs-module.js +38 -42
  406. package/esm2015/tabs/testing/tab-group-harness.js +52 -56
  407. package/esm2015/tabs/testing/tab-harness.js +78 -82
  408. package/esm2015/toolbar/testing/index.js +9 -0
  409. package/esm2015/toolbar/testing/public-api.js +10 -0
  410. package/esm2015/toolbar/testing/testing.externs.js +0 -0
  411. package/esm2015/toolbar/testing/toolbar-harness-filters.js +8 -0
  412. package/esm2015/toolbar/testing/toolbar-harness.js +47 -0
  413. package/esm2015/toolbar/toolbar-module.js +10 -14
  414. package/esm2015/toolbar/toolbar.js +61 -69
  415. package/esm2015/tooltip/testing/tooltip-harness.js +43 -47
  416. package/esm2015/tooltip/tooltip-module.js +17 -21
  417. package/esm2015/tooltip/tooltip.js +502 -497
  418. package/esm2015/tree/data-source/flat-data-source.js +1 -1
  419. package/esm2015/tree/node.js +99 -111
  420. package/esm2015/tree/outlet.js +19 -23
  421. package/esm2015/tree/padding.js +13 -17
  422. package/esm2015/tree/toggle.js +15 -19
  423. package/esm2015/tree/tree-module.js +10 -14
  424. package/esm2015/tree/tree.js +23 -27
  425. package/expansion/testing/expansion-harness.d.ts +2 -0
  426. package/fesm2015/autocomplete/testing.js +98 -95
  427. package/fesm2015/autocomplete/testing.js.map +1 -1
  428. package/fesm2015/autocomplete.js +677 -687
  429. package/fesm2015/autocomplete.js.map +1 -1
  430. package/fesm2015/badge/testing.js +73 -76
  431. package/fesm2015/badge/testing.js.map +1 -1
  432. package/fesm2015/badge.js +195 -201
  433. package/fesm2015/badge.js.map +1 -1
  434. package/fesm2015/bottom-sheet/testing.js +28 -31
  435. package/fesm2015/bottom-sheet/testing.js.map +1 -1
  436. package/fesm2015/bottom-sheet.js +297 -306
  437. package/fesm2015/bottom-sheet.js.map +1 -1
  438. package/fesm2015/button/testing.js +59 -56
  439. package/fesm2015/button/testing.js.map +1 -1
  440. package/fesm2015/button-toggle/testing.js +155 -155
  441. package/fesm2015/button-toggle/testing.js.map +1 -1
  442. package/fesm2015/button-toggle.js +377 -378
  443. package/fesm2015/button-toggle.js.map +1 -1
  444. package/fesm2015/button.js +129 -133
  445. package/fesm2015/button.js.map +1 -1
  446. package/fesm2015/card/testing.js +79 -0
  447. package/fesm2015/card/testing.js.map +1 -0
  448. package/fesm2015/card.js +175 -220
  449. package/fesm2015/card.js.map +1 -1
  450. package/fesm2015/checkbox/testing.js +149 -146
  451. package/fesm2015/checkbox/testing.js.map +1 -1
  452. package/fesm2015/checkbox.js +342 -354
  453. package/fesm2015/checkbox.js.map +1 -1
  454. package/fesm2015/chips.js +1039 -1039
  455. package/fesm2015/chips.js.map +1 -1
  456. package/fesm2015/core/testing.js +88 -94
  457. package/fesm2015/core/testing.js.map +1 -1
  458. package/fesm2015/core.js +729 -773
  459. package/fesm2015/core.js.map +1 -1
  460. package/fesm2015/datepicker.js +2821 -2884
  461. package/fesm2015/datepicker.js.map +1 -1
  462. package/fesm2015/dialog/testing.js +57 -60
  463. package/fesm2015/dialog/testing.js.map +1 -1
  464. package/fesm2015/dialog.js +564 -549
  465. package/fesm2015/dialog.js.map +1 -1
  466. package/fesm2015/divider/testing.js +15 -18
  467. package/fesm2015/divider/testing.js.map +1 -1
  468. package/fesm2015/divider.js +41 -47
  469. package/fesm2015/divider.js.map +1 -1
  470. package/fesm2015/expansion/testing.js +159 -159
  471. package/fesm2015/expansion/testing.js.map +1 -1
  472. package/fesm2015/expansion.js +422 -446
  473. package/fesm2015/expansion.js.map +1 -1
  474. package/fesm2015/form-field/testing.js +219 -204
  475. package/fesm2015/form-field/testing.js.map +1 -1
  476. package/fesm2015/form-field.js +538 -532
  477. package/fesm2015/form-field.js.map +1 -1
  478. package/fesm2015/grid-list/testing.js +129 -135
  479. package/fesm2015/grid-list/testing.js.map +1 -1
  480. package/fesm2015/grid-list.js +221 -242
  481. package/fesm2015/grid-list.js.map +1 -1
  482. package/fesm2015/icon/testing.js +65 -71
  483. package/fesm2015/icon/testing.js.map +1 -1
  484. package/fesm2015/icon.js +660 -669
  485. package/fesm2015/icon.js.map +1 -1
  486. package/fesm2015/input/testing.js +128 -121
  487. package/fesm2015/input/testing.js.map +1 -1
  488. package/fesm2015/input.js +353 -337
  489. package/fesm2015/input.js.map +1 -1
  490. package/fesm2015/list/testing.js +298 -307
  491. package/fesm2015/list/testing.js.map +1 -1
  492. package/fesm2015/list.js +698 -725
  493. package/fesm2015/list.js.map +1 -1
  494. package/fesm2015/menu/testing.js +192 -186
  495. package/fesm2015/menu/testing.js.map +1 -1
  496. package/fesm2015/menu.js +948 -962
  497. package/fesm2015/menu.js.map +1 -1
  498. package/fesm2015/paginator/testing.js +90 -93
  499. package/fesm2015/paginator/testing.js.map +1 -1
  500. package/fesm2015/paginator.js +247 -256
  501. package/fesm2015/paginator.js.map +1 -1
  502. package/fesm2015/progress-bar/testing.js +26 -29
  503. package/fesm2015/progress-bar/testing.js.map +1 -1
  504. package/fesm2015/progress-bar.js +122 -128
  505. package/fesm2015/progress-bar.js.map +1 -1
  506. package/fesm2015/progress-spinner/testing.js +27 -30
  507. package/fesm2015/progress-spinner/testing.js.map +1 -1
  508. package/fesm2015/progress-spinner.js +196 -205
  509. package/fesm2015/progress-spinner.js.map +1 -1
  510. package/fesm2015/radio/testing.js +240 -240
  511. package/fesm2015/radio/testing.js.map +1 -1
  512. package/fesm2015/radio.js +447 -453
  513. package/fesm2015/radio.js.map +1 -1
  514. package/fesm2015/select/testing.js +137 -134
  515. package/fesm2015/select/testing.js.map +1 -1
  516. package/fesm2015/select.js +939 -941
  517. package/fesm2015/select.js.map +1 -1
  518. package/fesm2015/sidenav/testing.js +58 -64
  519. package/fesm2015/sidenav/testing.js.map +1 -1
  520. package/fesm2015/sidenav.js +765 -762
  521. package/fesm2015/sidenav.js.map +1 -1
  522. package/fesm2015/slide-toggle/testing.js +122 -119
  523. package/fesm2015/slide-toggle/testing.js.map +1 -1
  524. package/fesm2015/slide-toggle.js +217 -229
  525. package/fesm2015/slide-toggle.js.map +1 -1
  526. package/fesm2015/slider/testing.js +128 -125
  527. package/fesm2015/slider/testing.js.map +1 -1
  528. package/fesm2015/slider.js +648 -654
  529. package/fesm2015/slider.js.map +1 -1
  530. package/fesm2015/snack-bar/testing.js +111 -114
  531. package/fesm2015/snack-bar/testing.js.map +1 -1
  532. package/fesm2015/snack-bar.js +426 -431
  533. package/fesm2015/snack-bar.js.map +1 -1
  534. package/fesm2015/sort/testing.js +92 -95
  535. package/fesm2015/sort/testing.js.map +1 -1
  536. package/fesm2015/sort.js +320 -318
  537. package/fesm2015/sort.js.map +1 -1
  538. package/fesm2015/stepper.js +312 -345
  539. package/fesm2015/stepper.js.map +1 -1
  540. package/fesm2015/table/testing.js +208 -229
  541. package/fesm2015/table/testing.js.map +1 -1
  542. package/fesm2015/table.js +235 -286
  543. package/fesm2015/table.js.map +1 -1
  544. package/fesm2015/tabs/testing.js +128 -134
  545. package/fesm2015/tabs/testing.js.map +1 -1
  546. package/fesm2015/tabs.js +1362 -1399
  547. package/fesm2015/tabs.js.map +1 -1
  548. package/fesm2015/toolbar/testing.js +74 -0
  549. package/fesm2015/toolbar/testing.js.map +1 -0
  550. package/fesm2015/toolbar.js +69 -78
  551. package/fesm2015/toolbar.js.map +1 -1
  552. package/fesm2015/tooltip/testing.js +42 -45
  553. package/fesm2015/tooltip/testing.js.map +1 -1
  554. package/fesm2015/tooltip.js +517 -513
  555. package/fesm2015/tooltip.js.map +1 -1
  556. package/fesm2015/tree.js +173 -197
  557. package/fesm2015/tree.js.map +1 -1
  558. package/form-field/error.d.ts +7 -0
  559. package/form-field/hint.d.ts +10 -0
  560. package/form-field/index.metadata.json +1 -1
  561. package/form-field/prefix.d.ts +7 -0
  562. package/form-field/suffix.d.ts +7 -0
  563. package/form-field/testing/form-field-harness.d.ts +8 -0
  564. package/grid-list/grid-list.d.ts +2 -1
  565. package/grid-list/index.metadata.json +1 -1
  566. package/grid-list/tile-styler.d.ts +10 -5
  567. package/input/_input-theme.scss +2 -2
  568. package/input/index.metadata.json +1 -1
  569. package/input/input.d.ts +6 -2
  570. package/input/testing/input-harness.d.ts +2 -0
  571. package/list/index.metadata.json +1 -1
  572. package/list/testing/action-list-harness.d.ts +2 -0
  573. package/list/testing/nav-list-harness.d.ts +2 -0
  574. package/list/testing/selection-list-harness.d.ts +2 -0
  575. package/menu/index.metadata.json +1 -1
  576. package/menu/menu-content.d.ts +7 -1
  577. package/menu/menu-panel.d.ts +1 -0
  578. package/menu/menu.d.ts +4 -0
  579. package/menu/testing/menu-harness.d.ts +4 -0
  580. package/package.json +6 -6
  581. package/prebuilt-themes/deeppurple-amber.css +1 -1
  582. package/prebuilt-themes/indigo-pink.css +1 -1
  583. package/prebuilt-themes/pink-bluegrey.css +1 -1
  584. package/prebuilt-themes/purple-green.css +1 -1
  585. package/progress-spinner/index.metadata.json +1 -1
  586. package/radio/index.metadata.json +1 -1
  587. package/radio/radio.d.ts +6 -0
  588. package/radio/testing/radio-harness.d.ts +2 -0
  589. package/schematics/migration.json +5 -0
  590. package/schematics/ng-add/index.js +2 -2
  591. package/schematics/ng-generate/navigation/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +3 -3
  592. package/schematics/ng-generate/navigation/schema.json +5 -0
  593. package/schematics/ng-update/data/index.js +1 -1
  594. package/schematics/ng-update/index.d.ts +2 -0
  595. package/schematics/ng-update/index.js +7 -2
  596. package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.js +639 -639
  597. package/schematics/ng-update/migrations/misc-ripples-v7/ripple-speed-factor-migration.js +1 -1
  598. package/select/index.metadata.json +1 -1
  599. package/select/select.d.ts +6 -0
  600. package/select/testing/select-harness.d.ts +2 -0
  601. package/sidenav/drawer.d.ts +15 -3
  602. package/sidenav/index.metadata.json +1 -1
  603. package/slide-toggle/index.metadata.json +1 -1
  604. package/slide-toggle/testing/slide-toggle-harness.d.ts +2 -0
  605. package/slider/testing/slider-harness.d.ts +2 -0
  606. package/snack-bar/index.metadata.json +1 -1
  607. package/snack-bar/simple-snack-bar.d.ts +13 -1
  608. package/snack-bar/snack-bar-container.d.ts +16 -3
  609. package/snack-bar/snack-bar-ref.d.ts +3 -3
  610. package/snack-bar/snack-bar.d.ts +10 -3
  611. package/sort/index.metadata.json +1 -1
  612. package/sort/sort-header-intl.d.ts +5 -1
  613. package/sort/sort-header.d.ts +3 -1
  614. package/sort/testing/sort-header-harness.d.ts +6 -2
  615. package/tabs/index.d.ts +3 -1
  616. package/tabs/index.metadata.json +1 -1
  617. package/tabs/tab-content.d.ts +7 -1
  618. package/tabs/tab-label.d.ts +7 -0
  619. package/toolbar/testing/index.d.ts +8 -0
  620. package/toolbar/testing/package.json +9 -0
  621. package/toolbar/testing/public-api.d.ts +9 -0
  622. package/toolbar/testing/toolbar-harness-filters.d.ts +13 -0
  623. package/toolbar/testing/toolbar-harness.d.ts +31 -0
  624. package/tooltip/index.metadata.json +1 -1
  625. package/tooltip/tooltip.d.ts +1 -0
  626. package/tree/data-source/flat-data-source.d.ts +4 -4
  627. package/tree/index.metadata.json +1 -1
@@ -10,6 +10,38 @@ import { trigger, state, style, transition, animate } from '@angular/animations'
10
10
  import { LiveAnnouncer } from '@angular/cdk/a11y';
11
11
  import { Breakpoints, BreakpointObserver } from '@angular/cdk/layout';
12
12
 
13
+ /**
14
+ * @license
15
+ * Copyright Google LLC All Rights Reserved.
16
+ *
17
+ * Use of this source code is governed by an MIT-style license that can be
18
+ * found in the LICENSE file at https://angular.io/license
19
+ */
20
+ /** Injection token that can be used to access the data that was passed in to a snack bar. */
21
+ const MAT_SNACK_BAR_DATA = new InjectionToken('MatSnackBarData');
22
+ /**
23
+ * Configuration used when opening a snack-bar.
24
+ */
25
+ class MatSnackBarConfig {
26
+ constructor() {
27
+ /** The politeness level for the MatAriaLiveAnnouncer announcement. */
28
+ this.politeness = 'assertive';
29
+ /**
30
+ * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom
31
+ * component or template, the announcement message will default to the specified message.
32
+ */
33
+ this.announcementMessage = '';
34
+ /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */
35
+ this.duration = 0;
36
+ /** Data being injected into the child component. */
37
+ this.data = null;
38
+ /** The horizontal position to place the snack bar. */
39
+ this.horizontalPosition = 'center';
40
+ /** The vertical position to place the snack bar. */
41
+ this.verticalPosition = 'bottom';
42
+ }
43
+ }
44
+
13
45
  /**
14
46
  * @license
15
47
  * Copyright Google LLC All Rights Reserved.
@@ -98,38 +130,6 @@ class MatSnackBarRef {
98
130
  }
99
131
  }
100
132
 
101
- /**
102
- * @license
103
- * Copyright Google LLC All Rights Reserved.
104
- *
105
- * Use of this source code is governed by an MIT-style license that can be
106
- * found in the LICENSE file at https://angular.io/license
107
- */
108
- /** Injection token that can be used to access the data that was passed in to a snack bar. */
109
- const MAT_SNACK_BAR_DATA = new InjectionToken('MatSnackBarData');
110
- /**
111
- * Configuration used when opening a snack-bar.
112
- */
113
- class MatSnackBarConfig {
114
- constructor() {
115
- /** The politeness level for the MatAriaLiveAnnouncer announcement. */
116
- this.politeness = 'assertive';
117
- /**
118
- * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom
119
- * component or template, the announcement message will default to the specified message.
120
- */
121
- this.announcementMessage = '';
122
- /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */
123
- this.duration = 0;
124
- /** Data being injected into the child component. */
125
- this.data = null;
126
- /** The horizontal position to place the snack bar. */
127
- this.horizontalPosition = 'center';
128
- /** The vertical position to place the snack bar. */
129
- this.verticalPosition = 'bottom';
130
- }
131
- }
132
-
133
133
  /**
134
134
  * @license
135
135
  * Copyright Google LLC All Rights Reserved.
@@ -141,39 +141,36 @@ class MatSnackBarConfig {
141
141
  * A component used to open as the default snack bar, matching material spec.
142
142
  * This should only be used internally by the snack bar service.
143
143
  */
144
- let SimpleSnackBar = /** @class */ (() => {
145
- class SimpleSnackBar {
146
- constructor(snackBarRef, data) {
147
- this.snackBarRef = snackBarRef;
148
- this.data = data;
149
- }
150
- /** Performs the action on the snack bar. */
151
- action() {
152
- this.snackBarRef.dismissWithAction();
153
- }
154
- /** If the action button should be shown. */
155
- get hasAction() {
156
- return !!this.data.action;
157
- }
144
+ class SimpleSnackBar {
145
+ constructor(snackBarRef, data) {
146
+ this.snackBarRef = snackBarRef;
147
+ this.data = data;
148
+ }
149
+ /** Performs the action on the snack bar. */
150
+ action() {
151
+ this.snackBarRef.dismissWithAction();
152
+ }
153
+ /** If the action button should be shown. */
154
+ get hasAction() {
155
+ return !!this.data.action;
158
156
  }
159
- SimpleSnackBar.decorators = [
160
- { type: Component, args: [{
161
- selector: 'simple-snack-bar',
162
- template: "<span>{{data.message}}</span>\n<div class=\"mat-simple-snackbar-action\" *ngIf=\"hasAction\">\n <button mat-button (click)=\"action()\">{{data.action}}</button>\n</div>\n",
163
- encapsulation: ViewEncapsulation.None,
164
- changeDetection: ChangeDetectionStrategy.OnPush,
165
- host: {
166
- 'class': 'mat-simple-snackbar',
167
- },
168
- styles: [".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\n"]
169
- },] }
170
- ];
171
- SimpleSnackBar.ctorParameters = () => [
172
- { type: MatSnackBarRef },
173
- { type: undefined, decorators: [{ type: Inject, args: [MAT_SNACK_BAR_DATA,] }] }
174
- ];
175
- return SimpleSnackBar;
176
- })();
157
+ }
158
+ SimpleSnackBar.decorators = [
159
+ { type: Component, args: [{
160
+ selector: 'simple-snack-bar',
161
+ template: "<span>{{data.message}}</span>\n<div class=\"mat-simple-snackbar-action\" *ngIf=\"hasAction\">\n <button mat-button (click)=\"action()\">{{data.action}}</button>\n</div>\n",
162
+ encapsulation: ViewEncapsulation.None,
163
+ changeDetection: ChangeDetectionStrategy.OnPush,
164
+ host: {
165
+ 'class': 'mat-simple-snackbar',
166
+ },
167
+ styles: [".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\n"]
168
+ },] }
169
+ ];
170
+ SimpleSnackBar.ctorParameters = () => [
171
+ { type: MatSnackBarRef },
172
+ { type: undefined, decorators: [{ type: Inject, args: [MAT_SNACK_BAR_DATA,] }] }
173
+ ];
177
174
 
178
175
  /**
179
176
  * @license
@@ -215,166 +212,163 @@ const matSnackBarAnimations = {
215
212
  * Internal component that wraps user-provided snack bar content.
216
213
  * @docs-private
217
214
  */
218
- let MatSnackBarContainer = /** @class */ (() => {
219
- class MatSnackBarContainer extends BasePortalOutlet {
220
- constructor(_ngZone, _elementRef, _changeDetectorRef,
221
- /** The snack bar configuration. */
222
- snackBarConfig) {
223
- super();
224
- this._ngZone = _ngZone;
225
- this._elementRef = _elementRef;
226
- this._changeDetectorRef = _changeDetectorRef;
227
- this.snackBarConfig = snackBarConfig;
228
- /** Whether the component has been destroyed. */
229
- this._destroyed = false;
230
- /** Subject for notifying that the snack bar has exited from view. */
231
- this._onExit = new Subject();
232
- /** Subject for notifying that the snack bar has finished entering the view. */
233
- this._onEnter = new Subject();
234
- /** The state of the snack bar animations. */
235
- this._animationState = 'void';
236
- /**
237
- * Attaches a DOM portal to the snack bar container.
238
- * @deprecated To be turned into a method.
239
- * @breaking-change 10.0.0
240
- */
241
- this.attachDomPortal = (portal) => {
242
- this._assertNotAttached();
243
- this._applySnackBarClasses();
244
- return this._portalOutlet.attachDomPortal(portal);
245
- };
246
- // Based on the ARIA spec, `alert` and `status` roles have an
247
- // implicit `assertive` and `polite` politeness respectively.
248
- if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {
249
- this._role = 'alert';
250
- }
251
- else if (snackBarConfig.politeness === 'off') {
252
- this._role = null;
253
- }
254
- else {
255
- this._role = 'status';
256
- }
257
- }
258
- /** Attach a component portal as content to this snack bar container. */
259
- attachComponentPortal(portal) {
215
+ class MatSnackBarContainer extends BasePortalOutlet {
216
+ constructor(_ngZone, _elementRef, _changeDetectorRef,
217
+ /** The snack bar configuration. */
218
+ snackBarConfig) {
219
+ super();
220
+ this._ngZone = _ngZone;
221
+ this._elementRef = _elementRef;
222
+ this._changeDetectorRef = _changeDetectorRef;
223
+ this.snackBarConfig = snackBarConfig;
224
+ /** Whether the component has been destroyed. */
225
+ this._destroyed = false;
226
+ /** Subject for notifying that the snack bar has exited from view. */
227
+ this._onExit = new Subject();
228
+ /** Subject for notifying that the snack bar has finished entering the view. */
229
+ this._onEnter = new Subject();
230
+ /** The state of the snack bar animations. */
231
+ this._animationState = 'void';
232
+ /**
233
+ * Attaches a DOM portal to the snack bar container.
234
+ * @deprecated To be turned into a method.
235
+ * @breaking-change 10.0.0
236
+ */
237
+ this.attachDomPortal = (portal) => {
260
238
  this._assertNotAttached();
261
239
  this._applySnackBarClasses();
262
- return this._portalOutlet.attachComponentPortal(portal);
240
+ return this._portalOutlet.attachDomPortal(portal);
241
+ };
242
+ // Based on the ARIA spec, `alert` and `status` roles have an
243
+ // implicit `assertive` and `polite` politeness respectively.
244
+ if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {
245
+ this._role = 'alert';
263
246
  }
264
- /** Attach a template portal as content to this snack bar container. */
265
- attachTemplatePortal(portal) {
266
- this._assertNotAttached();
267
- this._applySnackBarClasses();
268
- return this._portalOutlet.attachTemplatePortal(portal);
247
+ else if (snackBarConfig.politeness === 'off') {
248
+ this._role = null;
269
249
  }
270
- /** Handle end of animations, updating the state of the snackbar. */
271
- onAnimationEnd(event) {
272
- const { fromState, toState } = event;
273
- if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {
274
- this._completeExit();
275
- }
276
- if (toState === 'visible') {
277
- // Note: we shouldn't use `this` inside the zone callback,
278
- // because it can cause a memory leak.
279
- const onEnter = this._onEnter;
280
- this._ngZone.run(() => {
281
- onEnter.next();
282
- onEnter.complete();
283
- });
284
- }
250
+ else {
251
+ this._role = 'status';
285
252
  }
286
- /** Begin animation of snack bar entrance into view. */
287
- enter() {
288
- if (!this._destroyed) {
289
- this._animationState = 'visible';
290
- this._changeDetectorRef.detectChanges();
291
- }
292
- }
293
- /** Begin animation of the snack bar exiting from view. */
294
- exit() {
295
- // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case
296
- // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to
297
- // `MatSnackBar.open`).
298
- this._animationState = 'hidden';
299
- // Mark this element with an 'exit' attribute to indicate that the snackbar has
300
- // been dismissed and will soon be removed from the DOM. This is used by the snackbar
301
- // test harness.
302
- this._elementRef.nativeElement.setAttribute('mat-exit', '');
303
- return this._onExit;
304
- }
305
- /** Makes sure the exit callbacks have been invoked when the element is destroyed. */
306
- ngOnDestroy() {
307
- this._destroyed = true;
253
+ }
254
+ /** Attach a component portal as content to this snack bar container. */
255
+ attachComponentPortal(portal) {
256
+ this._assertNotAttached();
257
+ this._applySnackBarClasses();
258
+ return this._portalOutlet.attachComponentPortal(portal);
259
+ }
260
+ /** Attach a template portal as content to this snack bar container. */
261
+ attachTemplatePortal(portal) {
262
+ this._assertNotAttached();
263
+ this._applySnackBarClasses();
264
+ return this._portalOutlet.attachTemplatePortal(portal);
265
+ }
266
+ /** Handle end of animations, updating the state of the snackbar. */
267
+ onAnimationEnd(event) {
268
+ const { fromState, toState } = event;
269
+ if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {
308
270
  this._completeExit();
309
271
  }
310
- /**
311
- * Waits for the zone to settle before removing the element. Helps prevent
312
- * errors where we end up removing an element which is in the middle of an animation.
313
- */
314
- _completeExit() {
315
- this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1)).subscribe(() => {
316
- this._onExit.next();
317
- this._onExit.complete();
272
+ if (toState === 'visible') {
273
+ // Note: we shouldn't use `this` inside the zone callback,
274
+ // because it can cause a memory leak.
275
+ const onEnter = this._onEnter;
276
+ this._ngZone.run(() => {
277
+ onEnter.next();
278
+ onEnter.complete();
318
279
  });
319
280
  }
320
- /** Applies the various positioning and user-configured CSS classes to the snack bar. */
321
- _applySnackBarClasses() {
322
- const element = this._elementRef.nativeElement;
323
- const panelClasses = this.snackBarConfig.panelClass;
324
- if (panelClasses) {
325
- if (Array.isArray(panelClasses)) {
326
- // Note that we can't use a spread here, because IE doesn't support multiple arguments.
327
- panelClasses.forEach(cssClass => element.classList.add(cssClass));
328
- }
329
- else {
330
- element.classList.add(panelClasses);
331
- }
332
- }
333
- if (this.snackBarConfig.horizontalPosition === 'center') {
334
- element.classList.add('mat-snack-bar-center');
281
+ }
282
+ /** Begin animation of snack bar entrance into view. */
283
+ enter() {
284
+ if (!this._destroyed) {
285
+ this._animationState = 'visible';
286
+ this._changeDetectorRef.detectChanges();
287
+ }
288
+ }
289
+ /** Begin animation of the snack bar exiting from view. */
290
+ exit() {
291
+ // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case
292
+ // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to
293
+ // `MatSnackBar.open`).
294
+ this._animationState = 'hidden';
295
+ // Mark this element with an 'exit' attribute to indicate that the snackbar has
296
+ // been dismissed and will soon be removed from the DOM. This is used by the snackbar
297
+ // test harness.
298
+ this._elementRef.nativeElement.setAttribute('mat-exit', '');
299
+ return this._onExit;
300
+ }
301
+ /** Makes sure the exit callbacks have been invoked when the element is destroyed. */
302
+ ngOnDestroy() {
303
+ this._destroyed = true;
304
+ this._completeExit();
305
+ }
306
+ /**
307
+ * Waits for the zone to settle before removing the element. Helps prevent
308
+ * errors where we end up removing an element which is in the middle of an animation.
309
+ */
310
+ _completeExit() {
311
+ this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1)).subscribe(() => {
312
+ this._onExit.next();
313
+ this._onExit.complete();
314
+ });
315
+ }
316
+ /** Applies the various positioning and user-configured CSS classes to the snack bar. */
317
+ _applySnackBarClasses() {
318
+ const element = this._elementRef.nativeElement;
319
+ const panelClasses = this.snackBarConfig.panelClass;
320
+ if (panelClasses) {
321
+ if (Array.isArray(panelClasses)) {
322
+ // Note that we can't use a spread here, because IE doesn't support multiple arguments.
323
+ panelClasses.forEach(cssClass => element.classList.add(cssClass));
335
324
  }
336
- if (this.snackBarConfig.verticalPosition === 'top') {
337
- element.classList.add('mat-snack-bar-top');
325
+ else {
326
+ element.classList.add(panelClasses);
338
327
  }
339
328
  }
340
- /** Asserts that no content is already attached to the container. */
341
- _assertNotAttached() {
342
- if (this._portalOutlet.hasAttached()) {
343
- throw Error('Attempting to attach snack bar content after content is already attached');
344
- }
329
+ if (this.snackBarConfig.horizontalPosition === 'center') {
330
+ element.classList.add('mat-snack-bar-center');
331
+ }
332
+ if (this.snackBarConfig.verticalPosition === 'top') {
333
+ element.classList.add('mat-snack-bar-top');
345
334
  }
346
335
  }
347
- MatSnackBarContainer.decorators = [
348
- { type: Component, args: [{
349
- selector: 'snack-bar-container',
350
- template: "<ng-template cdkPortalOutlet></ng-template>\n",
351
- // In Ivy embedded views will be change detected from their declaration place, rather than
352
- // where they were stamped out. This means that we can't have the snack bar container be OnPush,
353
- // because it might cause snack bars that were opened from a template not to be out of date.
354
- // tslint:disable-next-line:validate-decorators
355
- changeDetection: ChangeDetectionStrategy.Default,
356
- encapsulation: ViewEncapsulation.None,
357
- animations: [matSnackBarAnimations.snackBarState],
358
- host: {
359
- '[attr.role]': '_role',
360
- 'class': 'mat-snack-bar-container',
361
- '[@state]': '_animationState',
362
- '(@state.done)': 'onAnimationEnd($event)'
363
- },
364
- styles: [".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\n"]
365
- },] }
366
- ];
367
- MatSnackBarContainer.ctorParameters = () => [
368
- { type: NgZone },
369
- { type: ElementRef },
370
- { type: ChangeDetectorRef },
371
- { type: MatSnackBarConfig }
372
- ];
373
- MatSnackBarContainer.propDecorators = {
374
- _portalOutlet: [{ type: ViewChild, args: [CdkPortalOutlet, { static: true },] }]
375
- };
376
- return MatSnackBarContainer;
377
- })();
336
+ /** Asserts that no content is already attached to the container. */
337
+ _assertNotAttached() {
338
+ if (this._portalOutlet.hasAttached()) {
339
+ throw Error('Attempting to attach snack bar content after content is already attached');
340
+ }
341
+ }
342
+ }
343
+ MatSnackBarContainer.decorators = [
344
+ { type: Component, args: [{
345
+ selector: 'snack-bar-container',
346
+ template: "<ng-template cdkPortalOutlet></ng-template>\n",
347
+ // In Ivy embedded views will be change detected from their declaration place, rather than
348
+ // where they were stamped out. This means that we can't have the snack bar container be OnPush,
349
+ // because it might cause snack bars that were opened from a template not to be out of date.
350
+ // tslint:disable-next-line:validate-decorators
351
+ changeDetection: ChangeDetectionStrategy.Default,
352
+ encapsulation: ViewEncapsulation.None,
353
+ animations: [matSnackBarAnimations.snackBarState],
354
+ host: {
355
+ '[attr.role]': '_role',
356
+ 'class': 'mat-snack-bar-container',
357
+ '[@state]': '_animationState',
358
+ '(@state.done)': 'onAnimationEnd($event)'
359
+ },
360
+ styles: [".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\n"]
361
+ },] }
362
+ ];
363
+ MatSnackBarContainer.ctorParameters = () => [
364
+ { type: NgZone },
365
+ { type: ElementRef },
366
+ { type: ChangeDetectorRef },
367
+ { type: MatSnackBarConfig }
368
+ ];
369
+ MatSnackBarContainer.propDecorators = {
370
+ _portalOutlet: [{ type: ViewChild, args: [CdkPortalOutlet, { static: true },] }]
371
+ };
378
372
 
379
373
  /**
380
374
  * @license
@@ -383,25 +377,22 @@ let MatSnackBarContainer = /** @class */ (() => {
383
377
  * Use of this source code is governed by an MIT-style license that can be
384
378
  * found in the LICENSE file at https://angular.io/license
385
379
  */
386
- let MatSnackBarModule = /** @class */ (() => {
387
- class MatSnackBarModule {
388
- }
389
- MatSnackBarModule.decorators = [
390
- { type: NgModule, args: [{
391
- imports: [
392
- OverlayModule,
393
- PortalModule,
394
- CommonModule,
395
- MatButtonModule,
396
- MatCommonModule,
397
- ],
398
- exports: [MatSnackBarContainer, MatCommonModule],
399
- declarations: [MatSnackBarContainer, SimpleSnackBar],
400
- entryComponents: [MatSnackBarContainer, SimpleSnackBar],
401
- },] }
402
- ];
403
- return MatSnackBarModule;
404
- })();
380
+ class MatSnackBarModule {
381
+ }
382
+ MatSnackBarModule.decorators = [
383
+ { type: NgModule, args: [{
384
+ imports: [
385
+ OverlayModule,
386
+ PortalModule,
387
+ CommonModule,
388
+ MatButtonModule,
389
+ MatCommonModule,
390
+ ],
391
+ exports: [MatSnackBarContainer, MatCommonModule],
392
+ declarations: [MatSnackBarContainer, SimpleSnackBar],
393
+ entryComponents: [MatSnackBarContainer, SimpleSnackBar],
394
+ },] }
395
+ ];
405
396
 
406
397
  /**
407
398
  * @license
@@ -422,224 +413,228 @@ function MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY() {
422
413
  /**
423
414
  * Service to dispatch Material Design snack bar messages.
424
415
  */
425
- let MatSnackBar = /** @class */ (() => {
426
- class MatSnackBar {
427
- constructor(_overlay, _live, _injector, _breakpointObserver, _parentSnackBar, _defaultConfig) {
428
- this._overlay = _overlay;
429
- this._live = _live;
430
- this._injector = _injector;
431
- this._breakpointObserver = _breakpointObserver;
432
- this._parentSnackBar = _parentSnackBar;
433
- this._defaultConfig = _defaultConfig;
434
- /**
435
- * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).
436
- * If there is a parent snack-bar service, all operations should delegate to that parent
437
- * via `_openedSnackBarRef`.
438
- */
439
- this._snackBarRefAtThisLevel = null;
440
- }
441
- /** Reference to the currently opened snackbar at *any* level. */
442
- get _openedSnackBarRef() {
443
- const parent = this._parentSnackBar;
444
- return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;
445
- }
446
- set _openedSnackBarRef(value) {
447
- if (this._parentSnackBar) {
448
- this._parentSnackBar._openedSnackBarRef = value;
449
- }
450
- else {
451
- this._snackBarRefAtThisLevel = value;
452
- }
453
- }
454
- /**
455
- * Creates and dispatches a snack bar with a custom component for the content, removing any
456
- * currently opened snack bars.
457
- *
458
- * @param component Component to be instantiated.
459
- * @param config Extra configuration for the snack bar.
460
- */
461
- openFromComponent(component, config) {
462
- return this._attach(component, config);
463
- }
416
+ class MatSnackBar {
417
+ constructor(_overlay, _live, _injector, _breakpointObserver, _parentSnackBar, _defaultConfig) {
418
+ this._overlay = _overlay;
419
+ this._live = _live;
420
+ this._injector = _injector;
421
+ this._breakpointObserver = _breakpointObserver;
422
+ this._parentSnackBar = _parentSnackBar;
423
+ this._defaultConfig = _defaultConfig;
464
424
  /**
465
- * Creates and dispatches a snack bar with a custom template for the content, removing any
466
- * currently opened snack bars.
467
- *
468
- * @param template Template to be instantiated.
469
- * @param config Extra configuration for the snack bar.
425
+ * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).
426
+ * If there is a parent snack-bar service, all operations should delegate to that parent
427
+ * via `_openedSnackBarRef`.
470
428
  */
471
- openFromTemplate(template, config) {
472
- return this._attach(template, config);
429
+ this._snackBarRefAtThisLevel = null;
430
+ /** The component that should be rendered as the snack bar's simple component. */
431
+ this.simpleSnackBarComponent = SimpleSnackBar;
432
+ /** The container component that attaches the provided template or component. */
433
+ this.snackBarContainerComponent = MatSnackBarContainer;
434
+ /** The CSS class to applie for handset mode. */
435
+ this.handsetCssClass = 'mat-snack-bar-handset';
436
+ }
437
+ /** Reference to the currently opened snackbar at *any* level. */
438
+ get _openedSnackBarRef() {
439
+ const parent = this._parentSnackBar;
440
+ return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;
441
+ }
442
+ set _openedSnackBarRef(value) {
443
+ if (this._parentSnackBar) {
444
+ this._parentSnackBar._openedSnackBarRef = value;
473
445
  }
474
- /**
475
- * Opens a snackbar with a message and an optional action.
476
- * @param message The message to show in the snackbar.
477
- * @param action The label for the snackbar action.
478
- * @param config Additional configuration options for the snackbar.
479
- */
480
- open(message, action = '', config) {
481
- const _config = Object.assign(Object.assign({}, this._defaultConfig), config);
482
- // Since the user doesn't have access to the component, we can
483
- // override the data to pass in our own message and action.
484
- _config.data = { message, action };
485
- if (!_config.announcementMessage) {
486
- _config.announcementMessage = message;
487
- }
488
- return this.openFromComponent(SimpleSnackBar, _config);
446
+ else {
447
+ this._snackBarRefAtThisLevel = value;
489
448
  }
490
- /**
491
- * Dismisses the currently-visible snack bar.
492
- */
493
- dismiss() {
494
- if (this._openedSnackBarRef) {
495
- this._openedSnackBarRef.dismiss();
496
- }
449
+ }
450
+ /**
451
+ * Creates and dispatches a snack bar with a custom component for the content, removing any
452
+ * currently opened snack bars.
453
+ *
454
+ * @param component Component to be instantiated.
455
+ * @param config Extra configuration for the snack bar.
456
+ */
457
+ openFromComponent(component, config) {
458
+ return this._attach(component, config);
459
+ }
460
+ /**
461
+ * Creates and dispatches a snack bar with a custom template for the content, removing any
462
+ * currently opened snack bars.
463
+ *
464
+ * @param template Template to be instantiated.
465
+ * @param config Extra configuration for the snack bar.
466
+ */
467
+ openFromTemplate(template, config) {
468
+ return this._attach(template, config);
469
+ }
470
+ /**
471
+ * Opens a snackbar with a message and an optional action.
472
+ * @param message The message to show in the snackbar.
473
+ * @param action The label for the snackbar action.
474
+ * @param config Additional configuration options for the snackbar.
475
+ */
476
+ open(message, action = '', config) {
477
+ const _config = Object.assign(Object.assign({}, this._defaultConfig), config);
478
+ // Since the user doesn't have access to the component, we can
479
+ // override the data to pass in our own message and action.
480
+ _config.data = { message, action };
481
+ // Since the snack bar has `role="alert"`, we don't
482
+ // want to announce the same message twice.
483
+ if (_config.announcementMessage === message) {
484
+ _config.announcementMessage = undefined;
497
485
  }
498
- ngOnDestroy() {
499
- // Only dismiss the snack bar at the current level on destroy.
500
- if (this._snackBarRefAtThisLevel) {
501
- this._snackBarRefAtThisLevel.dismiss();
502
- }
486
+ return this.openFromComponent(this.simpleSnackBarComponent, _config);
487
+ }
488
+ /**
489
+ * Dismisses the currently-visible snack bar.
490
+ */
491
+ dismiss() {
492
+ if (this._openedSnackBarRef) {
493
+ this._openedSnackBarRef.dismiss();
503
494
  }
504
- /**
505
- * Attaches the snack bar container component to the overlay.
506
- */
507
- _attachSnackBarContainer(overlayRef, config) {
508
- const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
509
- const injector = new PortalInjector(userInjector || this._injector, new WeakMap([
510
- [MatSnackBarConfig, config]
511
- ]));
512
- const containerPortal = new ComponentPortal(MatSnackBarContainer, config.viewContainerRef, injector);
513
- const containerRef = overlayRef.attach(containerPortal);
514
- containerRef.instance.snackBarConfig = config;
515
- return containerRef.instance;
495
+ }
496
+ ngOnDestroy() {
497
+ // Only dismiss the snack bar at the current level on destroy.
498
+ if (this._snackBarRefAtThisLevel) {
499
+ this._snackBarRefAtThisLevel.dismiss();
516
500
  }
517
- /**
518
- * Places a new component or a template as the content of the snack bar container.
519
- */
520
- _attach(content, userConfig) {
521
- const config = Object.assign(Object.assign(Object.assign({}, new MatSnackBarConfig()), this._defaultConfig), userConfig);
522
- const overlayRef = this._createOverlay(config);
523
- const container = this._attachSnackBarContainer(overlayRef, config);
524
- const snackBarRef = new MatSnackBarRef(container, overlayRef);
525
- if (content instanceof TemplateRef) {
526
- const portal = new TemplatePortal(content, null, {
527
- $implicit: config.data,
528
- snackBarRef
529
- });
530
- snackBarRef.instance = container.attachTemplatePortal(portal);
531
- }
532
- else {
533
- const injector = this._createInjector(config, snackBarRef);
534
- const portal = new ComponentPortal(content, undefined, injector);
535
- const contentRef = container.attachComponentPortal(portal);
536
- // We can't pass this via the injector, because the injector is created earlier.
537
- snackBarRef.instance = contentRef.instance;
538
- }
539
- // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as
540
- // appropriate. This class is applied to the overlay element because the overlay must expand to
541
- // fill the width of the screen for full width snackbars.
542
- this._breakpointObserver.observe(Breakpoints.HandsetPortrait).pipe(takeUntil(overlayRef.detachments())).subscribe(state => {
543
- const classList = overlayRef.overlayElement.classList;
544
- const className = 'mat-snack-bar-handset';
545
- state.matches ? classList.add(className) : classList.remove(className);
501
+ }
502
+ /**
503
+ * Attaches the snack bar container component to the overlay.
504
+ */
505
+ _attachSnackBarContainer(overlayRef, config) {
506
+ const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
507
+ const injector = new PortalInjector(userInjector || this._injector, new WeakMap([
508
+ [MatSnackBarConfig, config]
509
+ ]));
510
+ const containerPortal = new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);
511
+ const containerRef = overlayRef.attach(containerPortal);
512
+ containerRef.instance.snackBarConfig = config;
513
+ return containerRef.instance;
514
+ }
515
+ /**
516
+ * Places a new component or a template as the content of the snack bar container.
517
+ */
518
+ _attach(content, userConfig) {
519
+ const config = Object.assign(Object.assign(Object.assign({}, new MatSnackBarConfig()), this._defaultConfig), userConfig);
520
+ const overlayRef = this._createOverlay(config);
521
+ const container = this._attachSnackBarContainer(overlayRef, config);
522
+ const snackBarRef = new MatSnackBarRef(container, overlayRef);
523
+ if (content instanceof TemplateRef) {
524
+ const portal = new TemplatePortal(content, null, {
525
+ $implicit: config.data,
526
+ snackBarRef
546
527
  });
547
- this._animateSnackBar(snackBarRef, config);
548
- this._openedSnackBarRef = snackBarRef;
549
- return this._openedSnackBarRef;
528
+ snackBarRef.instance = container.attachTemplatePortal(portal);
550
529
  }
551
- /** Animates the old snack bar out and the new one in. */
552
- _animateSnackBar(snackBarRef, config) {
553
- // When the snackbar is dismissed, clear the reference to it.
554
- snackBarRef.afterDismissed().subscribe(() => {
555
- // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.
556
- if (this._openedSnackBarRef == snackBarRef) {
557
- this._openedSnackBarRef = null;
558
- }
559
- if (config.announcementMessage) {
560
- this._live.clear();
561
- }
562
- });
563
- if (this._openedSnackBarRef) {
564
- // If a snack bar is already in view, dismiss it and enter the
565
- // new snack bar after exit animation is complete.
566
- this._openedSnackBarRef.afterDismissed().subscribe(() => {
567
- snackBarRef.containerInstance.enter();
568
- });
569
- this._openedSnackBarRef.dismiss();
570
- }
571
- else {
572
- // If no snack bar is in view, enter the new snack bar.
573
- snackBarRef.containerInstance.enter();
574
- }
575
- // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.
576
- if (config.duration && config.duration > 0) {
577
- snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration));
530
+ else {
531
+ const injector = this._createInjector(config, snackBarRef);
532
+ const portal = new ComponentPortal(content, undefined, injector);
533
+ const contentRef = container.attachComponentPortal(portal);
534
+ // We can't pass this via the injector, because the injector is created earlier.
535
+ snackBarRef.instance = contentRef.instance;
536
+ }
537
+ // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as
538
+ // appropriate. This class is applied to the overlay element because the overlay must expand to
539
+ // fill the width of the screen for full width snackbars.
540
+ this._breakpointObserver.observe(Breakpoints.HandsetPortrait).pipe(takeUntil(overlayRef.detachments())).subscribe(state => {
541
+ const classList = overlayRef.overlayElement.classList;
542
+ state.matches ? classList.add(this.handsetCssClass) : classList.remove(this.handsetCssClass);
543
+ });
544
+ this._animateSnackBar(snackBarRef, config);
545
+ this._openedSnackBarRef = snackBarRef;
546
+ return this._openedSnackBarRef;
547
+ }
548
+ /** Animates the old snack bar out and the new one in. */
549
+ _animateSnackBar(snackBarRef, config) {
550
+ // When the snackbar is dismissed, clear the reference to it.
551
+ snackBarRef.afterDismissed().subscribe(() => {
552
+ // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.
553
+ if (this._openedSnackBarRef == snackBarRef) {
554
+ this._openedSnackBarRef = null;
578
555
  }
579
556
  if (config.announcementMessage) {
580
- this._live.announce(config.announcementMessage, config.politeness);
557
+ this._live.clear();
581
558
  }
559
+ });
560
+ if (this._openedSnackBarRef) {
561
+ // If a snack bar is already in view, dismiss it and enter the
562
+ // new snack bar after exit animation is complete.
563
+ this._openedSnackBarRef.afterDismissed().subscribe(() => {
564
+ snackBarRef.containerInstance.enter();
565
+ });
566
+ this._openedSnackBarRef.dismiss();
582
567
  }
583
- /**
584
- * Creates a new overlay and places it in the correct location.
585
- * @param config The user-specified snack bar config.
586
- */
587
- _createOverlay(config) {
588
- const overlayConfig = new OverlayConfig();
589
- overlayConfig.direction = config.direction;
590
- let positionStrategy = this._overlay.position().global();
591
- // Set horizontal position.
592
- const isRtl = config.direction === 'rtl';
593
- const isLeft = (config.horizontalPosition === 'left' ||
594
- (config.horizontalPosition === 'start' && !isRtl) ||
595
- (config.horizontalPosition === 'end' && isRtl));
596
- const isRight = !isLeft && config.horizontalPosition !== 'center';
597
- if (isLeft) {
598
- positionStrategy.left('0');
599
- }
600
- else if (isRight) {
601
- positionStrategy.right('0');
602
- }
603
- else {
604
- positionStrategy.centerHorizontally();
605
- }
606
- // Set horizontal position.
607
- if (config.verticalPosition === 'top') {
608
- positionStrategy.top('0');
609
- }
610
- else {
611
- positionStrategy.bottom('0');
612
- }
613
- overlayConfig.positionStrategy = positionStrategy;
614
- return this._overlay.create(overlayConfig);
568
+ else {
569
+ // If no snack bar is in view, enter the new snack bar.
570
+ snackBarRef.containerInstance.enter();
615
571
  }
616
- /**
617
- * Creates an injector to be used inside of a snack bar component.
618
- * @param config Config that was used to create the snack bar.
619
- * @param snackBarRef Reference to the snack bar.
620
- */
621
- _createInjector(config, snackBarRef) {
622
- const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
623
- return new PortalInjector(userInjector || this._injector, new WeakMap([
624
- [MatSnackBarRef, snackBarRef],
625
- [MAT_SNACK_BAR_DATA, config.data]
626
- ]));
572
+ // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.
573
+ if (config.duration && config.duration > 0) {
574
+ snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration));
575
+ }
576
+ if (config.announcementMessage) {
577
+ this._live.announce(config.announcementMessage, config.politeness);
627
578
  }
628
579
  }
629
- MatSnackBar.ɵprov = ɵɵdefineInjectable({ factory: function MatSnackBar_Factory() { return new MatSnackBar(ɵɵinject(Overlay), ɵɵinject(LiveAnnouncer), ɵɵinject(INJECTOR), ɵɵinject(BreakpointObserver), ɵɵinject(MatSnackBar, 12), ɵɵinject(MAT_SNACK_BAR_DEFAULT_OPTIONS)); }, token: MatSnackBar, providedIn: MatSnackBarModule });
630
- MatSnackBar.decorators = [
631
- { type: Injectable, args: [{ providedIn: MatSnackBarModule },] }
632
- ];
633
- MatSnackBar.ctorParameters = () => [
634
- { type: Overlay },
635
- { type: LiveAnnouncer },
636
- { type: Injector },
637
- { type: BreakpointObserver },
638
- { type: MatSnackBar, decorators: [{ type: Optional }, { type: SkipSelf }] },
639
- { type: MatSnackBarConfig, decorators: [{ type: Inject, args: [MAT_SNACK_BAR_DEFAULT_OPTIONS,] }] }
640
- ];
641
- return MatSnackBar;
642
- })();
580
+ /**
581
+ * Creates a new overlay and places it in the correct location.
582
+ * @param config The user-specified snack bar config.
583
+ */
584
+ _createOverlay(config) {
585
+ const overlayConfig = new OverlayConfig();
586
+ overlayConfig.direction = config.direction;
587
+ let positionStrategy = this._overlay.position().global();
588
+ // Set horizontal position.
589
+ const isRtl = config.direction === 'rtl';
590
+ const isLeft = (config.horizontalPosition === 'left' ||
591
+ (config.horizontalPosition === 'start' && !isRtl) ||
592
+ (config.horizontalPosition === 'end' && isRtl));
593
+ const isRight = !isLeft && config.horizontalPosition !== 'center';
594
+ if (isLeft) {
595
+ positionStrategy.left('0');
596
+ }
597
+ else if (isRight) {
598
+ positionStrategy.right('0');
599
+ }
600
+ else {
601
+ positionStrategy.centerHorizontally();
602
+ }
603
+ // Set horizontal position.
604
+ if (config.verticalPosition === 'top') {
605
+ positionStrategy.top('0');
606
+ }
607
+ else {
608
+ positionStrategy.bottom('0');
609
+ }
610
+ overlayConfig.positionStrategy = positionStrategy;
611
+ return this._overlay.create(overlayConfig);
612
+ }
613
+ /**
614
+ * Creates an injector to be used inside of a snack bar component.
615
+ * @param config Config that was used to create the snack bar.
616
+ * @param snackBarRef Reference to the snack bar.
617
+ */
618
+ _createInjector(config, snackBarRef) {
619
+ const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
620
+ return new PortalInjector(userInjector || this._injector, new WeakMap([
621
+ [MatSnackBarRef, snackBarRef],
622
+ [MAT_SNACK_BAR_DATA, config.data]
623
+ ]));
624
+ }
625
+ }
626
+ MatSnackBar.ɵprov = ɵɵdefineInjectable({ factory: function MatSnackBar_Factory() { return new MatSnackBar(ɵɵinject(Overlay), ɵɵinject(LiveAnnouncer), ɵɵinject(INJECTOR), ɵɵinject(BreakpointObserver), ɵɵinject(MatSnackBar, 12), ɵɵinject(MAT_SNACK_BAR_DEFAULT_OPTIONS)); }, token: MatSnackBar, providedIn: MatSnackBarModule });
627
+ MatSnackBar.decorators = [
628
+ { type: Injectable, args: [{ providedIn: MatSnackBarModule },] }
629
+ ];
630
+ MatSnackBar.ctorParameters = () => [
631
+ { type: Overlay },
632
+ { type: LiveAnnouncer },
633
+ { type: Injector },
634
+ { type: BreakpointObserver },
635
+ { type: MatSnackBar, decorators: [{ type: Optional }, { type: SkipSelf }] },
636
+ { type: MatSnackBarConfig, decorators: [{ type: Inject, args: [MAT_SNACK_BAR_DEFAULT_OPTIONS,] }] }
637
+ ];
643
638
 
644
639
  /**
645
640
  * @license