@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
@@ -7,7 +7,7 @@ import { DOCUMENT, Location } from '@angular/common';
7
7
  import { Subject, defer, of } from 'rxjs';
8
8
  import { filter, take, startWith } from 'rxjs/operators';
9
9
  import { trigger, state, style, transition, animate } from '@angular/animations';
10
- import { FocusTrapFactory } from '@angular/cdk/a11y';
10
+ import { FocusTrapFactory, FocusMonitor } from '@angular/cdk/a11y';
11
11
  import { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';
12
12
 
13
13
  /**
@@ -107,190 +107,202 @@ function throwMatDialogContentAlreadyAttachedError() {
107
107
  * Animation is based on https://material.io/guidelines/motion/choreography.html.
108
108
  * @docs-private
109
109
  */
110
- let MatDialogContainer = /** @class */ (() => {
111
- class MatDialogContainer extends BasePortalOutlet {
112
- constructor(_elementRef, _focusTrapFactory, _changeDetectorRef, _document,
113
- /** The dialog configuration. */
114
- _config) {
115
- super();
116
- this._elementRef = _elementRef;
117
- this._focusTrapFactory = _focusTrapFactory;
118
- this._changeDetectorRef = _changeDetectorRef;
119
- this._config = _config;
120
- /** Element that was focused before the dialog was opened. Save this to restore upon close. */
121
- this._elementFocusedBeforeDialogWasOpened = null;
122
- /** State of the dialog animation. */
123
- this._state = 'enter';
124
- /** Emits when an animation state changes. */
125
- this._animationStateChanged = new EventEmitter();
126
- /**
127
- * Attaches a DOM portal to the dialog container.
128
- * @param portal Portal to be attached.
129
- * @deprecated To be turned into a method.
130
- * @breaking-change 10.0.0
131
- */
132
- this.attachDomPortal = (portal) => {
133
- if (this._portalOutlet.hasAttached()) {
134
- throwMatDialogContentAlreadyAttachedError();
135
- }
136
- this._setupFocusTrap();
137
- return this._portalOutlet.attachDomPortal(portal);
138
- };
139
- this._ariaLabelledBy = _config.ariaLabelledBy || null;
140
- this._document = _document;
141
- }
110
+ class MatDialogContainer extends BasePortalOutlet {
111
+ constructor(_elementRef, _focusTrapFactory, _changeDetectorRef, _document,
112
+ /** The dialog configuration. */
113
+ _config, _focusMonitor) {
114
+ super();
115
+ this._elementRef = _elementRef;
116
+ this._focusTrapFactory = _focusTrapFactory;
117
+ this._changeDetectorRef = _changeDetectorRef;
118
+ this._config = _config;
119
+ this._focusMonitor = _focusMonitor;
120
+ /** Element that was focused before the dialog was opened. Save this to restore upon close. */
121
+ this._elementFocusedBeforeDialogWasOpened = null;
142
122
  /**
143
- * Attach a ComponentPortal as content to this dialog container.
144
- * @param portal Portal to be attached as the dialog content.
123
+ * Type of interaction that led to the dialog being closed. This is used to determine
124
+ * whether the focus style will be applied when returning focus to its original location
125
+ * after the dialog is closed.
145
126
  */
146
- attachComponentPortal(portal) {
147
- if (this._portalOutlet.hasAttached()) {
148
- throwMatDialogContentAlreadyAttachedError();
149
- }
150
- this._setupFocusTrap();
151
- return this._portalOutlet.attachComponentPortal(portal);
152
- }
127
+ this._closeInteractionType = null;
128
+ /** State of the dialog animation. */
129
+ this._state = 'enter';
130
+ /** Emits when an animation state changes. */
131
+ this._animationStateChanged = new EventEmitter();
153
132
  /**
154
- * Attach a TemplatePortal as content to this dialog container.
155
- * @param portal Portal to be attached as the dialog content.
133
+ * Attaches a DOM portal to the dialog container.
134
+ * @param portal Portal to be attached.
135
+ * @deprecated To be turned into a method.
136
+ * @breaking-change 10.0.0
156
137
  */
157
- attachTemplatePortal(portal) {
138
+ this.attachDomPortal = (portal) => {
158
139
  if (this._portalOutlet.hasAttached()) {
159
140
  throwMatDialogContentAlreadyAttachedError();
160
141
  }
161
142
  this._setupFocusTrap();
162
- return this._portalOutlet.attachTemplatePortal(portal);
143
+ return this._portalOutlet.attachDomPortal(portal);
144
+ };
145
+ this._ariaLabelledBy = _config.ariaLabelledBy || null;
146
+ this._document = _document;
147
+ }
148
+ /**
149
+ * Attach a ComponentPortal as content to this dialog container.
150
+ * @param portal Portal to be attached as the dialog content.
151
+ */
152
+ attachComponentPortal(portal) {
153
+ if (this._portalOutlet.hasAttached()) {
154
+ throwMatDialogContentAlreadyAttachedError();
163
155
  }
164
- /** Moves focus back into the dialog if it was moved out. */
165
- _recaptureFocus() {
166
- if (!this._containsFocus()) {
167
- const focusContainer = !this._config.autoFocus || !this._focusTrap.focusInitialElement();
168
- if (focusContainer) {
169
- this._elementRef.nativeElement.focus();
170
- }
171
- }
156
+ this._setupFocusTrap();
157
+ return this._portalOutlet.attachComponentPortal(portal);
158
+ }
159
+ /**
160
+ * Attach a TemplatePortal as content to this dialog container.
161
+ * @param portal Portal to be attached as the dialog content.
162
+ */
163
+ attachTemplatePortal(portal) {
164
+ if (this._portalOutlet.hasAttached()) {
165
+ throwMatDialogContentAlreadyAttachedError();
172
166
  }
173
- /** Moves the focus inside the focus trap. */
174
- _trapFocus() {
175
- // If we were to attempt to focus immediately, then the content of the dialog would not yet be
176
- // ready in instances where change detection has to run first. To deal with this, we simply
177
- // wait for the microtask queue to be empty.
178
- if (this._config.autoFocus) {
179
- this._focusTrap.focusInitialElementWhenReady();
180
- }
181
- else if (!this._containsFocus()) {
182
- // Otherwise ensure that focus is on the dialog container. It's possible that a different
183
- // component tried to move focus while the open animation was running. See:
184
- // https://github.com/angular/components/issues/16215. Note that we only want to do this
185
- // if the focus isn't inside the dialog already, because it's possible that the consumer
186
- // turned off `autoFocus` in order to move focus themselves.
167
+ this._setupFocusTrap();
168
+ return this._portalOutlet.attachTemplatePortal(portal);
169
+ }
170
+ /** Moves focus back into the dialog if it was moved out. */
171
+ _recaptureFocus() {
172
+ if (!this._containsFocus()) {
173
+ const focusContainer = !this._config.autoFocus || !this._focusTrap.focusInitialElement();
174
+ if (focusContainer) {
187
175
  this._elementRef.nativeElement.focus();
188
176
  }
189
177
  }
190
- /** Restores focus to the element that was focused before the dialog opened. */
191
- _restoreFocus() {
192
- const toFocus = this._elementFocusedBeforeDialogWasOpened;
193
- // We need the extra check, because IE can set the `activeElement` to null in some cases.
194
- if (this._config.restoreFocus && toFocus && typeof toFocus.focus === 'function') {
195
- const activeElement = this._document.activeElement;
196
- const element = this._elementRef.nativeElement;
197
- // Make sure that focus is still inside the dialog or is on the body (usually because a
198
- // non-focusable element like the backdrop was clicked) before moving it. It's possible that
199
- // the consumer moved it themselves before the animation was done, in which case we shouldn't
200
- // do anything.
201
- if (!activeElement || activeElement === this._document.body || activeElement === element ||
202
- element.contains(activeElement)) {
203
- toFocus.focus();
204
- }
205
- }
206
- if (this._focusTrap) {
207
- this._focusTrap.destroy();
208
- }
178
+ }
179
+ /** Moves the focus inside the focus trap. */
180
+ _trapFocus() {
181
+ // If we were to attempt to focus immediately, then the content of the dialog would not yet be
182
+ // ready in instances where change detection has to run first. To deal with this, we simply
183
+ // wait for the microtask queue to be empty.
184
+ if (this._config.autoFocus) {
185
+ this._focusTrap.focusInitialElementWhenReady();
186
+ }
187
+ else if (!this._containsFocus()) {
188
+ // Otherwise ensure that focus is on the dialog container. It's possible that a different
189
+ // component tried to move focus while the open animation was running. See:
190
+ // https://github.com/angular/components/issues/16215. Note that we only want to do this
191
+ // if the focus isn't inside the dialog already, because it's possible that the consumer
192
+ // turned off `autoFocus` in order to move focus themselves.
193
+ this._elementRef.nativeElement.focus();
209
194
  }
210
- /**
211
- * Sets up the focus trand and saves a reference to the
212
- * element that was focused before the dialog was opened.
213
- */
214
- _setupFocusTrap() {
215
- if (!this._focusTrap) {
216
- this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);
217
- }
218
- if (this._document) {
219
- this._elementFocusedBeforeDialogWasOpened = this._document.activeElement;
220
- // Note that there is no focus method when rendering on the server.
221
- if (this._elementRef.nativeElement.focus) {
222
- // Move focus onto the dialog immediately in order to prevent the user from accidentally
223
- // opening multiple dialogs at the same time. Needs to be async, because the element
224
- // may not be focusable immediately.
225
- Promise.resolve().then(() => this._elementRef.nativeElement.focus());
195
+ }
196
+ /** Restores focus to the element that was focused before the dialog opened. */
197
+ _restoreFocus() {
198
+ const previousElement = this._elementFocusedBeforeDialogWasOpened;
199
+ // We need the extra check, because IE can set the `activeElement` to null in some cases.
200
+ if (this._config.restoreFocus && previousElement &&
201
+ typeof previousElement.focus === 'function') {
202
+ const activeElement = this._document.activeElement;
203
+ const element = this._elementRef.nativeElement;
204
+ // Make sure that focus is still inside the dialog or is on the body (usually because a
205
+ // non-focusable element like the backdrop was clicked) before moving it. It's possible that
206
+ // the consumer moved it themselves before the animation was done, in which case we shouldn't
207
+ // do anything.
208
+ if (!activeElement || activeElement === this._document.body || activeElement === element ||
209
+ element.contains(activeElement)) {
210
+ if (this._focusMonitor) {
211
+ this._focusMonitor.focusVia(previousElement, this._closeInteractionType);
212
+ this._closeInteractionType = null;
213
+ }
214
+ else {
215
+ previousElement.focus();
226
216
  }
227
217
  }
228
218
  }
229
- /** Returns whether focus is inside the dialog. */
230
- _containsFocus() {
231
- const element = this._elementRef.nativeElement;
232
- const activeElement = this._document.activeElement;
233
- return element === activeElement || element.contains(activeElement);
219
+ if (this._focusTrap) {
220
+ this._focusTrap.destroy();
234
221
  }
235
- /** Callback, invoked whenever an animation on the host completes. */
236
- _onAnimationDone(event) {
237
- if (event.toState === 'enter') {
238
- this._trapFocus();
239
- }
240
- else if (event.toState === 'exit') {
241
- this._restoreFocus();
222
+ }
223
+ /**
224
+ * Sets up the focus trand and saves a reference to the
225
+ * element that was focused before the dialog was opened.
226
+ */
227
+ _setupFocusTrap() {
228
+ if (!this._focusTrap) {
229
+ this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);
230
+ }
231
+ if (this._document) {
232
+ this._elementFocusedBeforeDialogWasOpened = this._document.activeElement;
233
+ // Note that there is no focus method when rendering on the server.
234
+ if (this._elementRef.nativeElement.focus) {
235
+ // Move focus onto the dialog immediately in order to prevent the user from accidentally
236
+ // opening multiple dialogs at the same time. Needs to be async, because the element
237
+ // may not be focusable immediately.
238
+ Promise.resolve().then(() => this._elementRef.nativeElement.focus());
242
239
  }
243
- this._animationStateChanged.emit(event);
244
240
  }
245
- /** Callback, invoked when an animation on the host starts. */
246
- _onAnimationStart(event) {
247
- this._animationStateChanged.emit(event);
241
+ }
242
+ /** Returns whether focus is inside the dialog. */
243
+ _containsFocus() {
244
+ const element = this._elementRef.nativeElement;
245
+ const activeElement = this._document.activeElement;
246
+ return element === activeElement || element.contains(activeElement);
247
+ }
248
+ /** Callback, invoked whenever an animation on the host completes. */
249
+ _onAnimationDone(event) {
250
+ if (event.toState === 'enter') {
251
+ this._trapFocus();
248
252
  }
249
- /** Starts the dialog exit animation. */
250
- _startExitAnimation() {
251
- this._state = 'exit';
252
- // Mark the container for check so it can react if the
253
- // view container is using OnPush change detection.
254
- this._changeDetectorRef.markForCheck();
253
+ else if (event.toState === 'exit') {
254
+ this._restoreFocus();
255
255
  }
256
+ this._animationStateChanged.emit(event);
257
+ }
258
+ /** Callback, invoked when an animation on the host starts. */
259
+ _onAnimationStart(event) {
260
+ this._animationStateChanged.emit(event);
261
+ }
262
+ /** Starts the dialog exit animation. */
263
+ _startExitAnimation() {
264
+ this._state = 'exit';
265
+ // Mark the container for check so it can react if the
266
+ // view container is using OnPush change detection.
267
+ this._changeDetectorRef.markForCheck();
256
268
  }
257
- MatDialogContainer.decorators = [
258
- { type: Component, args: [{
259
- selector: 'mat-dialog-container',
260
- template: "<ng-template cdkPortalOutlet></ng-template>\n",
261
- encapsulation: ViewEncapsulation.None,
262
- // Using OnPush for dialogs caused some G3 sync issues. Disabled until we can track them down.
263
- // tslint:disable-next-line:validate-decorators
264
- changeDetection: ChangeDetectionStrategy.Default,
265
- animations: [matDialogAnimations.dialogContainer],
266
- host: {
267
- 'class': 'mat-dialog-container',
268
- 'tabindex': '-1',
269
- 'aria-modal': 'true',
270
- '[attr.id]': '_id',
271
- '[attr.role]': '_config.role',
272
- '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledBy',
273
- '[attr.aria-label]': '_config.ariaLabel',
274
- '[attr.aria-describedby]': '_config.ariaDescribedBy || null',
275
- '[@dialogContainer]': '_state',
276
- '(@dialogContainer.start)': '_onAnimationStart($event)',
277
- '(@dialogContainer.done)': '_onAnimationDone($event)',
278
- },
279
- styles: [".mat-dialog-container{display:block;padding:24px;border-radius:4px;box-sizing:border-box;overflow:auto;outline:0;width:100%;height:100%;min-height:inherit;max-height:inherit}.cdk-high-contrast-active .mat-dialog-container{outline:solid 1px}.mat-dialog-content{display:block;margin:0 -24px;padding:0 24px;max-height:65vh;overflow:auto;-webkit-overflow-scrolling:touch}.mat-dialog-title{margin:0 0 20px;display:block}.mat-dialog-actions{padding:8px 0;display:flex;flex-wrap:wrap;min-height:52px;align-items:center;margin-bottom:-24px}.mat-dialog-actions[align=end]{justify-content:flex-end}.mat-dialog-actions[align=center]{justify-content:center}.mat-dialog-actions .mat-button-base+.mat-button-base,.mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\n"]
280
- },] }
281
- ];
282
- MatDialogContainer.ctorParameters = () => [
283
- { type: ElementRef },
284
- { type: FocusTrapFactory },
285
- { type: ChangeDetectorRef },
286
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },
287
- { type: MatDialogConfig }
288
- ];
289
- MatDialogContainer.propDecorators = {
290
- _portalOutlet: [{ type: ViewChild, args: [CdkPortalOutlet, { static: true },] }]
291
- };
292
- return MatDialogContainer;
293
- })();
269
+ }
270
+ MatDialogContainer.decorators = [
271
+ { type: Component, args: [{
272
+ selector: 'mat-dialog-container',
273
+ template: "<ng-template cdkPortalOutlet></ng-template>\n",
274
+ encapsulation: ViewEncapsulation.None,
275
+ // Using OnPush for dialogs caused some G3 sync issues. Disabled until we can track them down.
276
+ // tslint:disable-next-line:validate-decorators
277
+ changeDetection: ChangeDetectionStrategy.Default,
278
+ animations: [matDialogAnimations.dialogContainer],
279
+ host: {
280
+ 'class': 'mat-dialog-container',
281
+ 'tabindex': '-1',
282
+ 'aria-modal': 'true',
283
+ '[attr.id]': '_id',
284
+ '[attr.role]': '_config.role',
285
+ '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledBy',
286
+ '[attr.aria-label]': '_config.ariaLabel',
287
+ '[attr.aria-describedby]': '_config.ariaDescribedBy || null',
288
+ '[@dialogContainer]': '_state',
289
+ '(@dialogContainer.start)': '_onAnimationStart($event)',
290
+ '(@dialogContainer.done)': '_onAnimationDone($event)',
291
+ },
292
+ styles: [".mat-dialog-container{display:block;padding:24px;border-radius:4px;box-sizing:border-box;overflow:auto;outline:0;width:100%;height:100%;min-height:inherit;max-height:inherit}.cdk-high-contrast-active .mat-dialog-container{outline:solid 1px}.mat-dialog-content{display:block;margin:0 -24px;padding:0 24px;max-height:65vh;overflow:auto;-webkit-overflow-scrolling:touch}.mat-dialog-title{margin:0 0 20px;display:block}.mat-dialog-actions{padding:8px 0;display:flex;flex-wrap:wrap;min-height:52px;align-items:center;margin-bottom:-24px}.mat-dialog-actions[align=end]{justify-content:flex-end}.mat-dialog-actions[align=center]{justify-content:center}.mat-dialog-actions .mat-button-base+.mat-button-base,.mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\n"]
293
+ },] }
294
+ ];
295
+ MatDialogContainer.ctorParameters = () => [
296
+ { type: ElementRef },
297
+ { type: FocusTrapFactory },
298
+ { type: ChangeDetectorRef },
299
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },
300
+ { type: MatDialogConfig },
301
+ { type: FocusMonitor }
302
+ ];
303
+ MatDialogContainer.propDecorators = {
304
+ _portalOutlet: [{ type: ViewChild, args: [CdkPortalOutlet, { static: true },] }]
305
+ };
294
306
 
295
307
  /**
296
308
  * @license
@@ -347,14 +359,14 @@ class MatDialogRef {
347
359
  }))
348
360
  .subscribe(event => {
349
361
  event.preventDefault();
350
- this.close();
362
+ _closeDialogVia(this, 'keyboard');
351
363
  });
352
364
  _overlayRef.backdropClick().subscribe(() => {
353
365
  if (this.disableClose) {
354
366
  this._containerInstance._recaptureFocus();
355
367
  }
356
368
  else {
357
- this.close();
369
+ _closeDialogVia(this, 'mouse');
358
370
  }
359
371
  });
360
372
  }
@@ -468,6 +480,20 @@ class MatDialogRef {
468
480
  return this._overlayRef.getConfig().positionStrategy;
469
481
  }
470
482
  }
483
+ /**
484
+ * Closes the dialog with the specified interaction type. This is currently not part of
485
+ * `MatDialogRef` as that would conflict with custom dialog ref mocks provided in tests.
486
+ * More details. See: https://github.com/angular/components/pull/9257#issuecomment-651342226.
487
+ */
488
+ // TODO: TODO: Move this back into `MatDialogRef` when we provide an official mock dialog ref.
489
+ function _closeDialogVia(ref, interactionType, result) {
490
+ // Some mock dialog ref instances in tests do not have the `_containerInstance` property.
491
+ // For those, we keep the behavior as is and do not deal with the interaction type.
492
+ if (ref._containerInstance !== undefined) {
493
+ ref._containerInstance._closeInteractionType = interactionType;
494
+ }
495
+ return ref.close(result);
496
+ }
471
497
 
472
498
  /**
473
499
  * @license
@@ -499,261 +525,258 @@ const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {
499
525
  /**
500
526
  * Service to open Material Design modal dialogs.
501
527
  */
502
- let MatDialog = /** @class */ (() => {
503
- class MatDialog {
504
- constructor(_overlay, _injector,
505
- /**
506
- * @deprecated `_location` parameter to be removed.
507
- * @breaking-change 10.0.0
508
- */
509
- _location, _defaultOptions, scrollStrategy, _parentDialog, _overlayContainer) {
510
- this._overlay = _overlay;
511
- this._injector = _injector;
512
- this._defaultOptions = _defaultOptions;
513
- this._parentDialog = _parentDialog;
514
- this._overlayContainer = _overlayContainer;
515
- this._openDialogsAtThisLevel = [];
516
- this._afterAllClosedAtThisLevel = new Subject();
517
- this._afterOpenedAtThisLevel = new Subject();
518
- this._ariaHiddenElements = new Map();
519
- // TODO (jelbourn): tighten the typing right-hand side of this expression.
520
- /**
521
- * Stream that emits when all open dialog have finished closing.
522
- * Will emit on subscribe if there are no open dialogs to begin with.
523
- */
524
- this.afterAllClosed = defer(() => this.openDialogs.length ?
525
- this._afterAllClosed :
526
- this._afterAllClosed.pipe(startWith(undefined)));
527
- this._scrollStrategy = scrollStrategy;
528
- }
529
- /** Keeps track of the currently-open dialogs. */
530
- get openDialogs() {
531
- return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;
532
- }
533
- /** Stream that emits when a dialog has been opened. */
534
- get afterOpened() {
535
- return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;
536
- }
537
- get _afterAllClosed() {
538
- const parent = this._parentDialog;
539
- return parent ? parent._afterAllClosed : this._afterAllClosedAtThisLevel;
540
- }
541
- /**
542
- * Opens a modal dialog containing the given component.
543
- * @param componentOrTemplateRef Type of the component to load into the dialog,
544
- * or a TemplateRef to instantiate as the dialog content.
545
- * @param config Extra configuration options.
546
- * @returns Reference to the newly-opened dialog.
547
- */
548
- open(componentOrTemplateRef, config) {
549
- config = _applyConfigDefaults(config, this._defaultOptions || new MatDialogConfig());
550
- if (config.id && this.getDialogById(config.id)) {
551
- throw Error(`Dialog with id "${config.id}" exists already. The dialog id must be unique.`);
552
- }
553
- const overlayRef = this._createOverlay(config);
554
- const dialogContainer = this._attachDialogContainer(overlayRef, config);
555
- const dialogRef = this._attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);
556
- // If this is the first dialog that we're opening, hide all the non-overlay content.
557
- if (!this.openDialogs.length) {
558
- this._hideNonDialogContentFromAssistiveTechnology();
559
- }
560
- this.openDialogs.push(dialogRef);
561
- dialogRef.afterClosed().subscribe(() => this._removeOpenDialog(dialogRef));
562
- this.afterOpened.next(dialogRef);
563
- return dialogRef;
564
- }
565
- /**
566
- * Closes all of the currently-open dialogs.
567
- */
568
- closeAll() {
569
- this._closeDialogs(this.openDialogs);
570
- }
571
- /**
572
- * Finds an open dialog by its id.
573
- * @param id ID to use when looking up the dialog.
574
- */
575
- getDialogById(id) {
576
- return this.openDialogs.find(dialog => dialog.id === id);
577
- }
578
- ngOnDestroy() {
579
- // Only close the dialogs at this level on destroy
580
- // since the parent service may still be active.
581
- this._closeDialogs(this._openDialogsAtThisLevel);
582
- this._afterAllClosedAtThisLevel.complete();
583
- this._afterOpenedAtThisLevel.complete();
584
- }
528
+ class MatDialog {
529
+ constructor(_overlay, _injector,
530
+ /**
531
+ * @deprecated `_location` parameter to be removed.
532
+ * @breaking-change 10.0.0
533
+ */
534
+ _location, _defaultOptions, scrollStrategy, _parentDialog, _overlayContainer) {
535
+ this._overlay = _overlay;
536
+ this._injector = _injector;
537
+ this._defaultOptions = _defaultOptions;
538
+ this._parentDialog = _parentDialog;
539
+ this._overlayContainer = _overlayContainer;
540
+ this._openDialogsAtThisLevel = [];
541
+ this._afterAllClosedAtThisLevel = new Subject();
542
+ this._afterOpenedAtThisLevel = new Subject();
543
+ this._ariaHiddenElements = new Map();
544
+ // TODO (jelbourn): tighten the typing right-hand side of this expression.
585
545
  /**
586
- * Creates the overlay into which the dialog will be loaded.
587
- * @param config The dialog configuration.
588
- * @returns A promise resolving to the OverlayRef for the created overlay.
546
+ * Stream that emits when all open dialog have finished closing.
547
+ * Will emit on subscribe if there are no open dialogs to begin with.
589
548
  */
590
- _createOverlay(config) {
591
- const overlayConfig = this._getOverlayConfig(config);
592
- return this._overlay.create(overlayConfig);
549
+ this.afterAllClosed = defer(() => this.openDialogs.length ?
550
+ this._afterAllClosed :
551
+ this._afterAllClosed.pipe(startWith(undefined)));
552
+ this._scrollStrategy = scrollStrategy;
553
+ }
554
+ /** Keeps track of the currently-open dialogs. */
555
+ get openDialogs() {
556
+ return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;
557
+ }
558
+ /** Stream that emits when a dialog has been opened. */
559
+ get afterOpened() {
560
+ return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;
561
+ }
562
+ get _afterAllClosed() {
563
+ const parent = this._parentDialog;
564
+ return parent ? parent._afterAllClosed : this._afterAllClosedAtThisLevel;
565
+ }
566
+ /**
567
+ * Opens a modal dialog containing the given component.
568
+ * @param componentOrTemplateRef Type of the component to load into the dialog,
569
+ * or a TemplateRef to instantiate as the dialog content.
570
+ * @param config Extra configuration options.
571
+ * @returns Reference to the newly-opened dialog.
572
+ */
573
+ open(componentOrTemplateRef, config) {
574
+ config = _applyConfigDefaults(config, this._defaultOptions || new MatDialogConfig());
575
+ if (config.id && this.getDialogById(config.id)) {
576
+ throw Error(`Dialog with id "${config.id}" exists already. The dialog id must be unique.`);
577
+ }
578
+ const overlayRef = this._createOverlay(config);
579
+ const dialogContainer = this._attachDialogContainer(overlayRef, config);
580
+ const dialogRef = this._attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);
581
+ // If this is the first dialog that we're opening, hide all the non-overlay content.
582
+ if (!this.openDialogs.length) {
583
+ this._hideNonDialogContentFromAssistiveTechnology();
584
+ }
585
+ this.openDialogs.push(dialogRef);
586
+ dialogRef.afterClosed().subscribe(() => this._removeOpenDialog(dialogRef));
587
+ this.afterOpened.next(dialogRef);
588
+ return dialogRef;
589
+ }
590
+ /**
591
+ * Closes all of the currently-open dialogs.
592
+ */
593
+ closeAll() {
594
+ this._closeDialogs(this.openDialogs);
595
+ }
596
+ /**
597
+ * Finds an open dialog by its id.
598
+ * @param id ID to use when looking up the dialog.
599
+ */
600
+ getDialogById(id) {
601
+ return this.openDialogs.find(dialog => dialog.id === id);
602
+ }
603
+ ngOnDestroy() {
604
+ // Only close the dialogs at this level on destroy
605
+ // since the parent service may still be active.
606
+ this._closeDialogs(this._openDialogsAtThisLevel);
607
+ this._afterAllClosedAtThisLevel.complete();
608
+ this._afterOpenedAtThisLevel.complete();
609
+ }
610
+ /**
611
+ * Creates the overlay into which the dialog will be loaded.
612
+ * @param config The dialog configuration.
613
+ * @returns A promise resolving to the OverlayRef for the created overlay.
614
+ */
615
+ _createOverlay(config) {
616
+ const overlayConfig = this._getOverlayConfig(config);
617
+ return this._overlay.create(overlayConfig);
618
+ }
619
+ /**
620
+ * Creates an overlay config from a dialog config.
621
+ * @param dialogConfig The dialog configuration.
622
+ * @returns The overlay configuration.
623
+ */
624
+ _getOverlayConfig(dialogConfig) {
625
+ const state = new OverlayConfig({
626
+ positionStrategy: this._overlay.position().global(),
627
+ scrollStrategy: dialogConfig.scrollStrategy || this._scrollStrategy(),
628
+ panelClass: dialogConfig.panelClass,
629
+ hasBackdrop: dialogConfig.hasBackdrop,
630
+ direction: dialogConfig.direction,
631
+ minWidth: dialogConfig.minWidth,
632
+ minHeight: dialogConfig.minHeight,
633
+ maxWidth: dialogConfig.maxWidth,
634
+ maxHeight: dialogConfig.maxHeight,
635
+ disposeOnNavigation: dialogConfig.closeOnNavigation
636
+ });
637
+ if (dialogConfig.backdropClass) {
638
+ state.backdropClass = dialogConfig.backdropClass;
593
639
  }
594
- /**
595
- * Creates an overlay config from a dialog config.
596
- * @param dialogConfig The dialog configuration.
597
- * @returns The overlay configuration.
598
- */
599
- _getOverlayConfig(dialogConfig) {
600
- const state = new OverlayConfig({
601
- positionStrategy: this._overlay.position().global(),
602
- scrollStrategy: dialogConfig.scrollStrategy || this._scrollStrategy(),
603
- panelClass: dialogConfig.panelClass,
604
- hasBackdrop: dialogConfig.hasBackdrop,
605
- direction: dialogConfig.direction,
606
- minWidth: dialogConfig.minWidth,
607
- minHeight: dialogConfig.minHeight,
608
- maxWidth: dialogConfig.maxWidth,
609
- maxHeight: dialogConfig.maxHeight,
610
- disposeOnNavigation: dialogConfig.closeOnNavigation
611
- });
612
- if (dialogConfig.backdropClass) {
613
- state.backdropClass = dialogConfig.backdropClass;
614
- }
615
- return state;
640
+ return state;
641
+ }
642
+ /**
643
+ * Attaches an MatDialogContainer to a dialog's already-created overlay.
644
+ * @param overlay Reference to the dialog's underlying overlay.
645
+ * @param config The dialog configuration.
646
+ * @returns A promise resolving to a ComponentRef for the attached container.
647
+ */
648
+ _attachDialogContainer(overlay, config) {
649
+ const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
650
+ const injector = Injector.create({
651
+ parent: userInjector || this._injector,
652
+ providers: [{ provide: MatDialogConfig, useValue: config }]
653
+ });
654
+ const containerPortal = new ComponentPortal(MatDialogContainer, config.viewContainerRef, injector, config.componentFactoryResolver);
655
+ const containerRef = overlay.attach(containerPortal);
656
+ return containerRef.instance;
657
+ }
658
+ /**
659
+ * Attaches the user-provided component to the already-created MatDialogContainer.
660
+ * @param componentOrTemplateRef The type of component being loaded into the dialog,
661
+ * or a TemplateRef to instantiate as the content.
662
+ * @param dialogContainer Reference to the wrapping MatDialogContainer.
663
+ * @param overlayRef Reference to the overlay in which the dialog resides.
664
+ * @param config The dialog configuration.
665
+ * @returns A promise resolving to the MatDialogRef that should be returned to the user.
666
+ */
667
+ _attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config) {
668
+ // Create a reference to the dialog we're creating in order to give the user a handle
669
+ // to modify and close it.
670
+ const dialogRef = new MatDialogRef(overlayRef, dialogContainer, config.id);
671
+ if (componentOrTemplateRef instanceof TemplateRef) {
672
+ dialogContainer.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, { $implicit: config.data, dialogRef }));
616
673
  }
617
- /**
618
- * Attaches an MatDialogContainer to a dialog's already-created overlay.
619
- * @param overlay Reference to the dialog's underlying overlay.
620
- * @param config The dialog configuration.
621
- * @returns A promise resolving to a ComponentRef for the attached container.
622
- */
623
- _attachDialogContainer(overlay, config) {
624
- const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
625
- const injector = Injector.create({
626
- parent: userInjector || this._injector,
627
- providers: [{ provide: MatDialogConfig, useValue: config }]
674
+ else {
675
+ const injector = this._createInjector(config, dialogRef, dialogContainer);
676
+ const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector));
677
+ dialogRef.componentInstance = contentRef.instance;
678
+ }
679
+ dialogRef
680
+ .updateSize(config.width, config.height)
681
+ .updatePosition(config.position);
682
+ return dialogRef;
683
+ }
684
+ /**
685
+ * Creates a custom injector to be used inside the dialog. This allows a component loaded inside
686
+ * of a dialog to close itself and, optionally, to return a value.
687
+ * @param config Config object that is used to construct the dialog.
688
+ * @param dialogRef Reference to the dialog.
689
+ * @param container Dialog container element that wraps all of the contents.
690
+ * @returns The custom injector that can be used inside the dialog.
691
+ */
692
+ _createInjector(config, dialogRef, dialogContainer) {
693
+ const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
694
+ // The MatDialogContainer is injected in the portal as the MatDialogContainer and the dialog's
695
+ // content are created out of the same ViewContainerRef and as such, are siblings for injector
696
+ // purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly
697
+ // added to the injection tokens.
698
+ const providers = [
699
+ { provide: MatDialogContainer, useValue: dialogContainer },
700
+ { provide: MAT_DIALOG_DATA, useValue: config.data },
701
+ { provide: MatDialogRef, useValue: dialogRef }
702
+ ];
703
+ if (config.direction &&
704
+ (!userInjector || !userInjector.get(Directionality, null))) {
705
+ providers.push({
706
+ provide: Directionality,
707
+ useValue: { value: config.direction, change: of() }
628
708
  });
629
- const containerPortal = new ComponentPortal(MatDialogContainer, config.viewContainerRef, injector, config.componentFactoryResolver);
630
- const containerRef = overlay.attach(containerPortal);
631
- return containerRef.instance;
632
709
  }
633
- /**
634
- * Attaches the user-provided component to the already-created MatDialogContainer.
635
- * @param componentOrTemplateRef The type of component being loaded into the dialog,
636
- * or a TemplateRef to instantiate as the content.
637
- * @param dialogContainer Reference to the wrapping MatDialogContainer.
638
- * @param overlayRef Reference to the overlay in which the dialog resides.
639
- * @param config The dialog configuration.
640
- * @returns A promise resolving to the MatDialogRef that should be returned to the user.
641
- */
642
- _attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config) {
643
- // Create a reference to the dialog we're creating in order to give the user a handle
644
- // to modify and close it.
645
- const dialogRef = new MatDialogRef(overlayRef, dialogContainer, config.id);
646
- if (componentOrTemplateRef instanceof TemplateRef) {
647
- dialogContainer.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, { $implicit: config.data, dialogRef }));
648
- }
649
- else {
650
- const injector = this._createInjector(config, dialogRef, dialogContainer);
651
- const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector));
652
- dialogRef.componentInstance = contentRef.instance;
653
- }
654
- dialogRef
655
- .updateSize(config.width, config.height)
656
- .updatePosition(config.position);
657
- return dialogRef;
658
- }
659
- /**
660
- * Creates a custom injector to be used inside the dialog. This allows a component loaded inside
661
- * of a dialog to close itself and, optionally, to return a value.
662
- * @param config Config object that is used to construct the dialog.
663
- * @param dialogRef Reference to the dialog.
664
- * @param container Dialog container element that wraps all of the contents.
665
- * @returns The custom injector that can be used inside the dialog.
666
- */
667
- _createInjector(config, dialogRef, dialogContainer) {
668
- const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
669
- // The MatDialogContainer is injected in the portal as the MatDialogContainer and the dialog's
670
- // content are created out of the same ViewContainerRef and as such, are siblings for injector
671
- // purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly
672
- // added to the injection tokens.
673
- const providers = [
674
- { provide: MatDialogContainer, useValue: dialogContainer },
675
- { provide: MAT_DIALOG_DATA, useValue: config.data },
676
- { provide: MatDialogRef, useValue: dialogRef }
677
- ];
678
- if (config.direction &&
679
- (!userInjector || !userInjector.get(Directionality, null))) {
680
- providers.push({
681
- provide: Directionality,
682
- useValue: { value: config.direction, change: of() }
710
+ return Injector.create({ parent: userInjector || this._injector, providers });
711
+ }
712
+ /**
713
+ * Removes a dialog from the array of open dialogs.
714
+ * @param dialogRef Dialog to be removed.
715
+ */
716
+ _removeOpenDialog(dialogRef) {
717
+ const index = this.openDialogs.indexOf(dialogRef);
718
+ if (index > -1) {
719
+ this.openDialogs.splice(index, 1);
720
+ // If all the dialogs were closed, remove/restore the `aria-hidden`
721
+ // to a the siblings and emit to the `afterAllClosed` stream.
722
+ if (!this.openDialogs.length) {
723
+ this._ariaHiddenElements.forEach((previousValue, element) => {
724
+ if (previousValue) {
725
+ element.setAttribute('aria-hidden', previousValue);
726
+ }
727
+ else {
728
+ element.removeAttribute('aria-hidden');
729
+ }
683
730
  });
684
- }
685
- return Injector.create({ parent: userInjector || this._injector, providers });
686
- }
687
- /**
688
- * Removes a dialog from the array of open dialogs.
689
- * @param dialogRef Dialog to be removed.
690
- */
691
- _removeOpenDialog(dialogRef) {
692
- const index = this.openDialogs.indexOf(dialogRef);
693
- if (index > -1) {
694
- this.openDialogs.splice(index, 1);
695
- // If all the dialogs were closed, remove/restore the `aria-hidden`
696
- // to a the siblings and emit to the `afterAllClosed` stream.
697
- if (!this.openDialogs.length) {
698
- this._ariaHiddenElements.forEach((previousValue, element) => {
699
- if (previousValue) {
700
- element.setAttribute('aria-hidden', previousValue);
701
- }
702
- else {
703
- element.removeAttribute('aria-hidden');
704
- }
705
- });
706
- this._ariaHiddenElements.clear();
707
- this._afterAllClosed.next();
708
- }
731
+ this._ariaHiddenElements.clear();
732
+ this._afterAllClosed.next();
709
733
  }
710
734
  }
711
- /**
712
- * Hides all of the content that isn't an overlay from assistive technology.
713
- */
714
- _hideNonDialogContentFromAssistiveTechnology() {
715
- const overlayContainer = this._overlayContainer.getContainerElement();
716
- // Ensure that the overlay container is attached to the DOM.
717
- if (overlayContainer.parentElement) {
718
- const siblings = overlayContainer.parentElement.children;
719
- for (let i = siblings.length - 1; i > -1; i--) {
720
- let sibling = siblings[i];
721
- if (sibling !== overlayContainer &&
722
- sibling.nodeName !== 'SCRIPT' &&
723
- sibling.nodeName !== 'STYLE' &&
724
- !sibling.hasAttribute('aria-live')) {
725
- this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));
726
- sibling.setAttribute('aria-hidden', 'true');
727
- }
735
+ }
736
+ /**
737
+ * Hides all of the content that isn't an overlay from assistive technology.
738
+ */
739
+ _hideNonDialogContentFromAssistiveTechnology() {
740
+ const overlayContainer = this._overlayContainer.getContainerElement();
741
+ // Ensure that the overlay container is attached to the DOM.
742
+ if (overlayContainer.parentElement) {
743
+ const siblings = overlayContainer.parentElement.children;
744
+ for (let i = siblings.length - 1; i > -1; i--) {
745
+ let sibling = siblings[i];
746
+ if (sibling !== overlayContainer &&
747
+ sibling.nodeName !== 'SCRIPT' &&
748
+ sibling.nodeName !== 'STYLE' &&
749
+ !sibling.hasAttribute('aria-live')) {
750
+ this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));
751
+ sibling.setAttribute('aria-hidden', 'true');
728
752
  }
729
753
  }
730
754
  }
731
- /** Closes all of the dialogs in an array. */
732
- _closeDialogs(dialogs) {
733
- let i = dialogs.length;
734
- while (i--) {
735
- // The `_openDialogs` property isn't updated after close until the rxjs subscription
736
- // runs on the next microtask, in addition to modifying the array as we're going
737
- // through it. We loop through all of them and call close without assuming that
738
- // they'll be removed from the list instantaneously.
739
- dialogs[i].close();
740
- }
755
+ }
756
+ /** Closes all of the dialogs in an array. */
757
+ _closeDialogs(dialogs) {
758
+ let i = dialogs.length;
759
+ while (i--) {
760
+ // The `_openDialogs` property isn't updated after close until the rxjs subscription
761
+ // runs on the next microtask, in addition to modifying the array as we're going
762
+ // through it. We loop through all of them and call close without assuming that
763
+ // they'll be removed from the list instantaneously.
764
+ dialogs[i].close();
741
765
  }
742
766
  }
743
- MatDialog.decorators = [
744
- { type: Injectable }
745
- ];
746
- MatDialog.ctorParameters = () => [
747
- { type: Overlay },
748
- { type: Injector },
749
- { type: Location, decorators: [{ type: Optional }] },
750
- { type: MatDialogConfig, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DIALOG_DEFAULT_OPTIONS,] }] },
751
- { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_SCROLL_STRATEGY,] }] },
752
- { type: MatDialog, decorators: [{ type: Optional }, { type: SkipSelf }] },
753
- { type: OverlayContainer }
754
- ];
755
- return MatDialog;
756
- })();
767
+ }
768
+ MatDialog.decorators = [
769
+ { type: Injectable }
770
+ ];
771
+ MatDialog.ctorParameters = () => [
772
+ { type: Overlay },
773
+ { type: Injector },
774
+ { type: Location, decorators: [{ type: Optional }] },
775
+ { type: MatDialogConfig, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DIALOG_DEFAULT_OPTIONS,] }] },
776
+ { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_SCROLL_STRATEGY,] }] },
777
+ { type: MatDialog, decorators: [{ type: Optional }, { type: SkipSelf }] },
778
+ { type: OverlayContainer }
779
+ ];
757
780
  /**
758
781
  * Applies default options to the dialog config.
759
782
  * @param config Config to be modified.
@@ -776,130 +799,125 @@ let dialogElementUid = 0;
776
799
  /**
777
800
  * Button that will close the current dialog.
778
801
  */
779
- let MatDialogClose = /** @class */ (() => {
780
- class MatDialogClose {
781
- constructor(dialogRef, _elementRef, _dialog) {
782
- this.dialogRef = dialogRef;
783
- this._elementRef = _elementRef;
784
- this._dialog = _dialog;
785
- /** Default to "button" to prevents accidental form submits. */
786
- this.type = 'button';
787
- }
788
- ngOnInit() {
789
- if (!this.dialogRef) {
790
- // When this directive is included in a dialog via TemplateRef (rather than being
791
- // in a Component), the DialogRef isn't available via injection because embedded
792
- // views cannot be given a custom injector. Instead, we look up the DialogRef by
793
- // ID. This must occur in `onInit`, as the ID binding for the dialog container won't
794
- // be resolved at constructor time.
795
- this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);
796
- }
802
+ class MatDialogClose {
803
+ constructor(dialogRef, _elementRef, _dialog) {
804
+ this.dialogRef = dialogRef;
805
+ this._elementRef = _elementRef;
806
+ this._dialog = _dialog;
807
+ /** Default to "button" to prevents accidental form submits. */
808
+ this.type = 'button';
809
+ }
810
+ ngOnInit() {
811
+ if (!this.dialogRef) {
812
+ // When this directive is included in a dialog via TemplateRef (rather than being
813
+ // in a Component), the DialogRef isn't available via injection because embedded
814
+ // views cannot be given a custom injector. Instead, we look up the DialogRef by
815
+ // ID. This must occur in `onInit`, as the ID binding for the dialog container won't
816
+ // be resolved at constructor time.
817
+ this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);
797
818
  }
798
- ngOnChanges(changes) {
799
- const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];
800
- if (proxiedChange) {
801
- this.dialogResult = proxiedChange.currentValue;
802
- }
819
+ }
820
+ ngOnChanges(changes) {
821
+ const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];
822
+ if (proxiedChange) {
823
+ this.dialogResult = proxiedChange.currentValue;
803
824
  }
804
825
  }
805
- MatDialogClose.decorators = [
806
- { type: Directive, args: [{
807
- selector: '[mat-dialog-close], [matDialogClose]',
808
- exportAs: 'matDialogClose',
809
- host: {
810
- '(click)': 'dialogRef.close(dialogResult)',
811
- '[attr.aria-label]': 'ariaLabel || null',
812
- '[attr.type]': 'type',
813
- }
814
- },] }
815
- ];
816
- MatDialogClose.ctorParameters = () => [
817
- { type: MatDialogRef, decorators: [{ type: Optional }] },
818
- { type: ElementRef },
819
- { type: MatDialog }
820
- ];
821
- MatDialogClose.propDecorators = {
822
- ariaLabel: [{ type: Input, args: ['aria-label',] }],
823
- type: [{ type: Input }],
824
- dialogResult: [{ type: Input, args: ['mat-dialog-close',] }],
825
- _matDialogClose: [{ type: Input, args: ['matDialogClose',] }]
826
- };
827
- return MatDialogClose;
828
- })();
826
+ _onButtonClick(event) {
827
+ // Determinate the focus origin using the click event, because using the FocusMonitor will
828
+ // result in incorrect origins. Most of the time, close buttons will be auto focused in the
829
+ // dialog, and therefore clicking the button won't result in a focus change. This means that
830
+ // the FocusMonitor won't detect any origin change, and will always output `program`.
831
+ _closeDialogVia(this.dialogRef, event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);
832
+ }
833
+ }
834
+ MatDialogClose.decorators = [
835
+ { type: Directive, args: [{
836
+ selector: '[mat-dialog-close], [matDialogClose]',
837
+ exportAs: 'matDialogClose',
838
+ host: {
839
+ '(click)': '_onButtonClick($event)',
840
+ '[attr.aria-label]': 'ariaLabel || null',
841
+ '[attr.type]': 'type',
842
+ }
843
+ },] }
844
+ ];
845
+ MatDialogClose.ctorParameters = () => [
846
+ { type: MatDialogRef, decorators: [{ type: Optional }] },
847
+ { type: ElementRef },
848
+ { type: MatDialog }
849
+ ];
850
+ MatDialogClose.propDecorators = {
851
+ ariaLabel: [{ type: Input, args: ['aria-label',] }],
852
+ type: [{ type: Input }],
853
+ dialogResult: [{ type: Input, args: ['mat-dialog-close',] }],
854
+ _matDialogClose: [{ type: Input, args: ['matDialogClose',] }]
855
+ };
829
856
  /**
830
857
  * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.
831
858
  */
832
- let MatDialogTitle = /** @class */ (() => {
833
- class MatDialogTitle {
834
- constructor(_dialogRef, _elementRef, _dialog) {
835
- this._dialogRef = _dialogRef;
836
- this._elementRef = _elementRef;
837
- this._dialog = _dialog;
838
- this.id = `mat-dialog-title-${dialogElementUid++}`;
839
- }
840
- ngOnInit() {
841
- if (!this._dialogRef) {
842
- this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);
843
- }
844
- if (this._dialogRef) {
845
- Promise.resolve().then(() => {
846
- const container = this._dialogRef._containerInstance;
847
- if (container && !container._ariaLabelledBy) {
848
- container._ariaLabelledBy = this.id;
849
- }
850
- });
851
- }
859
+ class MatDialogTitle {
860
+ constructor(_dialogRef, _elementRef, _dialog) {
861
+ this._dialogRef = _dialogRef;
862
+ this._elementRef = _elementRef;
863
+ this._dialog = _dialog;
864
+ this.id = `mat-dialog-title-${dialogElementUid++}`;
865
+ }
866
+ ngOnInit() {
867
+ if (!this._dialogRef) {
868
+ this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);
869
+ }
870
+ if (this._dialogRef) {
871
+ Promise.resolve().then(() => {
872
+ const container = this._dialogRef._containerInstance;
873
+ if (container && !container._ariaLabelledBy) {
874
+ container._ariaLabelledBy = this.id;
875
+ }
876
+ });
852
877
  }
853
878
  }
854
- MatDialogTitle.decorators = [
855
- { type: Directive, args: [{
856
- selector: '[mat-dialog-title], [matDialogTitle]',
857
- exportAs: 'matDialogTitle',
858
- host: {
859
- 'class': 'mat-dialog-title',
860
- '[id]': 'id',
861
- },
862
- },] }
863
- ];
864
- MatDialogTitle.ctorParameters = () => [
865
- { type: MatDialogRef, decorators: [{ type: Optional }] },
866
- { type: ElementRef },
867
- { type: MatDialog }
868
- ];
869
- MatDialogTitle.propDecorators = {
870
- id: [{ type: Input }]
871
- };
872
- return MatDialogTitle;
873
- })();
879
+ }
880
+ MatDialogTitle.decorators = [
881
+ { type: Directive, args: [{
882
+ selector: '[mat-dialog-title], [matDialogTitle]',
883
+ exportAs: 'matDialogTitle',
884
+ host: {
885
+ 'class': 'mat-dialog-title',
886
+ '[id]': 'id',
887
+ },
888
+ },] }
889
+ ];
890
+ MatDialogTitle.ctorParameters = () => [
891
+ { type: MatDialogRef, decorators: [{ type: Optional }] },
892
+ { type: ElementRef },
893
+ { type: MatDialog }
894
+ ];
895
+ MatDialogTitle.propDecorators = {
896
+ id: [{ type: Input }]
897
+ };
874
898
  /**
875
899
  * Scrollable content container of a dialog.
876
900
  */
877
- let MatDialogContent = /** @class */ (() => {
878
- class MatDialogContent {
879
- }
880
- MatDialogContent.decorators = [
881
- { type: Directive, args: [{
882
- selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`,
883
- host: { 'class': 'mat-dialog-content' }
884
- },] }
885
- ];
886
- return MatDialogContent;
887
- })();
901
+ class MatDialogContent {
902
+ }
903
+ MatDialogContent.decorators = [
904
+ { type: Directive, args: [{
905
+ selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`,
906
+ host: { 'class': 'mat-dialog-content' }
907
+ },] }
908
+ ];
888
909
  /**
889
910
  * Container for the bottom action buttons in a dialog.
890
911
  * Stays fixed to the bottom when scrolling.
891
912
  */
892
- let MatDialogActions = /** @class */ (() => {
893
- class MatDialogActions {
894
- }
895
- MatDialogActions.decorators = [
896
- { type: Directive, args: [{
897
- selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`,
898
- host: { 'class': 'mat-dialog-actions' }
899
- },] }
900
- ];
901
- return MatDialogActions;
902
- })();
913
+ class MatDialogActions {
914
+ }
915
+ MatDialogActions.decorators = [
916
+ { type: Directive, args: [{
917
+ selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`,
918
+ host: { 'class': 'mat-dialog-actions' }
919
+ },] }
920
+ ];
903
921
  /**
904
922
  * Finds the closest MatDialogRef to an element by looking at the DOM.
905
923
  * @param element Element relative to which to look for a dialog.
@@ -920,40 +938,37 @@ function getClosestDialog(element, openDialogs) {
920
938
  * Use of this source code is governed by an MIT-style license that can be
921
939
  * found in the LICENSE file at https://angular.io/license
922
940
  */
923
- let MatDialogModule = /** @class */ (() => {
924
- class MatDialogModule {
925
- }
926
- MatDialogModule.decorators = [
927
- { type: NgModule, args: [{
928
- imports: [
929
- OverlayModule,
930
- PortalModule,
931
- MatCommonModule,
932
- ],
933
- exports: [
934
- MatDialogContainer,
935
- MatDialogClose,
936
- MatDialogTitle,
937
- MatDialogContent,
938
- MatDialogActions,
939
- MatCommonModule,
940
- ],
941
- declarations: [
942
- MatDialogContainer,
943
- MatDialogClose,
944
- MatDialogTitle,
945
- MatDialogActions,
946
- MatDialogContent,
947
- ],
948
- providers: [
949
- MatDialog,
950
- MAT_DIALOG_SCROLL_STRATEGY_PROVIDER,
951
- ],
952
- entryComponents: [MatDialogContainer],
953
- },] }
954
- ];
955
- return MatDialogModule;
956
- })();
941
+ class MatDialogModule {
942
+ }
943
+ MatDialogModule.decorators = [
944
+ { type: NgModule, args: [{
945
+ imports: [
946
+ OverlayModule,
947
+ PortalModule,
948
+ MatCommonModule,
949
+ ],
950
+ exports: [
951
+ MatDialogContainer,
952
+ MatDialogClose,
953
+ MatDialogTitle,
954
+ MatDialogContent,
955
+ MatDialogActions,
956
+ MatCommonModule,
957
+ ],
958
+ declarations: [
959
+ MatDialogContainer,
960
+ MatDialogClose,
961
+ MatDialogTitle,
962
+ MatDialogActions,
963
+ MatDialogContent,
964
+ ],
965
+ providers: [
966
+ MatDialog,
967
+ MAT_DIALOG_SCROLL_STRATEGY_PROVIDER,
968
+ ],
969
+ entryComponents: [MatDialogContainer],
970
+ },] }
971
+ ];
957
972
 
958
973
  /**
959
974
  * @license
@@ -967,5 +982,5 @@ let MatDialogModule = /** @class */ (() => {
967
982
  * Generated bundle index. Do not edit.
968
983
  */
969
984
 
970
- export { MAT_DIALOG_DATA, MAT_DIALOG_DEFAULT_OPTIONS, MAT_DIALOG_SCROLL_STRATEGY, MAT_DIALOG_SCROLL_STRATEGY_FACTORY, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, MatDialog, MatDialogActions, MatDialogClose, MatDialogConfig, MatDialogContainer, MatDialogContent, MatDialogModule, MatDialogRef, MatDialogTitle, matDialogAnimations, throwMatDialogContentAlreadyAttachedError };
985
+ export { MAT_DIALOG_DATA, MAT_DIALOG_DEFAULT_OPTIONS, MAT_DIALOG_SCROLL_STRATEGY, MAT_DIALOG_SCROLL_STRATEGY_FACTORY, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, MatDialog, MatDialogActions, MatDialogClose, MatDialogConfig, MatDialogContainer, MatDialogContent, MatDialogModule, MatDialogRef, MatDialogTitle, _closeDialogVia, matDialogAnimations, throwMatDialogContentAlreadyAttachedError };
971
986
  //# sourceMappingURL=dialog.js.map