@angular/material 11.0.4 → 11.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. package/_theming.scss +354 -337
  2. package/autocomplete/_autocomplete-theme.scss +4 -5
  3. package/autocomplete/autocomplete.d.ts +7 -1
  4. package/autocomplete/index.metadata.json +1 -1
  5. package/autocomplete/testing/autocomplete-harness.d.ts +29 -15
  6. package/badge/_badge-theme.scss +2 -3
  7. package/bottom-sheet/_bottom-sheet-theme.scss +4 -5
  8. package/bundles/material-autocomplete-testing.umd.js +54 -36
  9. package/bundles/material-autocomplete-testing.umd.js.map +1 -1
  10. package/bundles/material-autocomplete-testing.umd.min.js +2 -2
  11. package/bundles/material-autocomplete-testing.umd.min.js.map +1 -1
  12. package/bundles/material-autocomplete.umd.js +31 -9
  13. package/bundles/material-autocomplete.umd.js.map +1 -1
  14. package/bundles/material-autocomplete.umd.min.js +3 -3
  15. package/bundles/material-autocomplete.umd.min.js.map +1 -1
  16. package/bundles/material-badge-testing.umd.js +9 -1
  17. package/bundles/material-badge-testing.umd.js.map +1 -1
  18. package/bundles/material-badge-testing.umd.min.js +1 -1
  19. package/bundles/material-badge-testing.umd.min.js.map +1 -1
  20. package/bundles/material-badge.umd.js +9 -1
  21. package/bundles/material-badge.umd.js.map +1 -1
  22. package/bundles/material-badge.umd.min.js +3 -3
  23. package/bundles/material-badge.umd.min.js.map +1 -1
  24. package/bundles/material-bottom-sheet-testing.umd.js +9 -1
  25. package/bundles/material-bottom-sheet-testing.umd.js.map +1 -1
  26. package/bundles/material-bottom-sheet-testing.umd.min.js +1 -1
  27. package/bundles/material-bottom-sheet-testing.umd.min.js.map +1 -1
  28. package/bundles/material-bottom-sheet.umd.js +9 -1
  29. package/bundles/material-bottom-sheet.umd.js.map +1 -1
  30. package/bundles/material-bottom-sheet.umd.min.js +1 -1
  31. package/bundles/material-bottom-sheet.umd.min.js.map +1 -1
  32. package/bundles/material-button-testing.umd.js +9 -1
  33. package/bundles/material-button-testing.umd.js.map +1 -1
  34. package/bundles/material-button-testing.umd.min.js +1 -1
  35. package/bundles/material-button-testing.umd.min.js.map +1 -1
  36. package/bundles/material-button-toggle-testing.umd.js +9 -1
  37. package/bundles/material-button-toggle-testing.umd.js.map +1 -1
  38. package/bundles/material-button-toggle-testing.umd.min.js +1 -1
  39. package/bundles/material-button-toggle-testing.umd.min.js.map +1 -1
  40. package/bundles/material-button-toggle.umd.js +9 -1
  41. package/bundles/material-button-toggle.umd.js.map +1 -1
  42. package/bundles/material-button-toggle.umd.min.js +1 -1
  43. package/bundles/material-button-toggle.umd.min.js.map +1 -1
  44. package/bundles/material-button.umd.js +17 -5
  45. package/bundles/material-button.umd.js.map +1 -1
  46. package/bundles/material-button.umd.min.js +1 -1
  47. package/bundles/material-button.umd.min.js.map +1 -1
  48. package/bundles/material-card-testing.umd.js +9 -1
  49. package/bundles/material-card-testing.umd.js.map +1 -1
  50. package/bundles/material-card-testing.umd.min.js +1 -1
  51. package/bundles/material-card-testing.umd.min.js.map +1 -1
  52. package/bundles/material-checkbox-testing.umd.js +73 -64
  53. package/bundles/material-checkbox-testing.umd.js.map +1 -1
  54. package/bundles/material-checkbox-testing.umd.min.js +2 -2
  55. package/bundles/material-checkbox-testing.umd.min.js.map +1 -1
  56. package/bundles/material-checkbox.umd.js +15 -3
  57. package/bundles/material-checkbox.umd.js.map +1 -1
  58. package/bundles/material-checkbox.umd.min.js +2 -2
  59. package/bundles/material-checkbox.umd.min.js.map +1 -1
  60. package/bundles/material-chips-testing.umd.js +189 -29
  61. package/bundles/material-chips-testing.umd.js.map +1 -1
  62. package/bundles/material-chips-testing.umd.min.js +2 -2
  63. package/bundles/material-chips-testing.umd.min.js.map +1 -1
  64. package/bundles/material-chips.umd.js +9 -1
  65. package/bundles/material-chips.umd.js.map +1 -1
  66. package/bundles/material-chips.umd.min.js +4 -4
  67. package/bundles/material-chips.umd.min.js.map +1 -1
  68. package/bundles/material-core-testing.umd.js +14 -3
  69. package/bundles/material-core-testing.umd.js.map +1 -1
  70. package/bundles/material-core-testing.umd.min.js +1 -1
  71. package/bundles/material-core-testing.umd.min.js.map +1 -1
  72. package/bundles/material-core.umd.js +55 -14
  73. package/bundles/material-core.umd.js.map +1 -1
  74. package/bundles/material-core.umd.min.js +16 -8
  75. package/bundles/material-core.umd.min.js.map +1 -1
  76. package/bundles/material-datepicker-testing.umd.js +24 -12
  77. package/bundles/material-datepicker-testing.umd.js.map +1 -1
  78. package/bundles/material-datepicker-testing.umd.min.js +1 -1
  79. package/bundles/material-datepicker-testing.umd.min.js.map +1 -1
  80. package/bundles/material-datepicker.umd.js +250 -80
  81. package/bundles/material-datepicker.umd.js.map +1 -1
  82. package/bundles/material-datepicker.umd.min.js +20 -12
  83. package/bundles/material-datepicker.umd.min.js.map +1 -1
  84. package/bundles/material-dialog-testing.umd.js +9 -1
  85. package/bundles/material-dialog-testing.umd.js.map +1 -1
  86. package/bundles/material-dialog-testing.umd.min.js +1 -1
  87. package/bundles/material-dialog-testing.umd.min.js.map +1 -1
  88. package/bundles/material-dialog.umd.js +10 -2
  89. package/bundles/material-dialog.umd.js.map +1 -1
  90. package/bundles/material-dialog.umd.min.js +8 -8
  91. package/bundles/material-dialog.umd.min.js.map +1 -1
  92. package/bundles/material-divider-testing.umd.js +9 -1
  93. package/bundles/material-divider-testing.umd.js.map +1 -1
  94. package/bundles/material-divider-testing.umd.min.js +2 -2
  95. package/bundles/material-divider-testing.umd.min.js.map +1 -1
  96. package/bundles/material-expansion-testing.umd.js +9 -1
  97. package/bundles/material-expansion-testing.umd.js.map +1 -1
  98. package/bundles/material-expansion-testing.umd.min.js +1 -1
  99. package/bundles/material-expansion-testing.umd.min.js.map +1 -1
  100. package/bundles/material-expansion.umd.js +16 -4
  101. package/bundles/material-expansion.umd.js.map +1 -1
  102. package/bundles/material-expansion.umd.min.js +6 -6
  103. package/bundles/material-expansion.umd.min.js.map +1 -1
  104. package/bundles/material-form-field-testing-control.umd.js +9 -1
  105. package/bundles/material-form-field-testing-control.umd.js.map +1 -1
  106. package/bundles/material-form-field-testing-control.umd.min.js +1 -1
  107. package/bundles/material-form-field-testing-control.umd.min.js.map +1 -1
  108. package/bundles/material-form-field-testing.umd.js +41 -30
  109. package/bundles/material-form-field-testing.umd.js.map +1 -1
  110. package/bundles/material-form-field-testing.umd.min.js +3 -3
  111. package/bundles/material-form-field-testing.umd.min.js.map +1 -1
  112. package/bundles/material-form-field.umd.js +11 -3
  113. package/bundles/material-form-field.umd.js.map +1 -1
  114. package/bundles/material-form-field.umd.min.js +2 -2
  115. package/bundles/material-form-field.umd.min.js.map +1 -1
  116. package/bundles/material-grid-list-testing.umd.js +15 -5
  117. package/bundles/material-grid-list-testing.umd.js.map +1 -1
  118. package/bundles/material-grid-list-testing.umd.min.js +2 -2
  119. package/bundles/material-grid-list-testing.umd.min.js.map +1 -1
  120. package/bundles/material-grid-list.umd.js +156 -146
  121. package/bundles/material-grid-list.umd.js.map +1 -1
  122. package/bundles/material-grid-list.umd.min.js +12 -19
  123. package/bundles/material-grid-list.umd.min.js.map +1 -1
  124. package/bundles/material-icon-testing.umd.js +12 -2
  125. package/bundles/material-icon-testing.umd.js.map +1 -1
  126. package/bundles/material-icon-testing.umd.min.js +2 -2
  127. package/bundles/material-icon-testing.umd.min.js.map +1 -1
  128. package/bundles/material-icon.umd.js +46 -2
  129. package/bundles/material-icon.umd.js.map +1 -1
  130. package/bundles/material-icon.umd.min.js +3 -3
  131. package/bundles/material-icon.umd.min.js.map +1 -1
  132. package/bundles/material-input-testing.umd.js +19 -8
  133. package/bundles/material-input-testing.umd.js.map +1 -1
  134. package/bundles/material-input-testing.umd.min.js +1 -1
  135. package/bundles/material-input-testing.umd.min.js.map +1 -1
  136. package/bundles/material-input.umd.js +9 -1
  137. package/bundles/material-input.umd.js.map +1 -1
  138. package/bundles/material-input.umd.min.js +1 -1
  139. package/bundles/material-input.umd.min.js.map +1 -1
  140. package/bundles/material-list-testing.umd.js +62 -57
  141. package/bundles/material-list-testing.umd.js.map +1 -1
  142. package/bundles/material-list-testing.umd.min.js +1 -1
  143. package/bundles/material-list-testing.umd.min.js.map +1 -1
  144. package/bundles/material-list.umd.js +9 -1
  145. package/bundles/material-list.umd.js.map +1 -1
  146. package/bundles/material-list.umd.min.js +1 -1
  147. package/bundles/material-list.umd.min.js.map +1 -1
  148. package/bundles/material-menu-testing.umd.js +94 -67
  149. package/bundles/material-menu-testing.umd.js.map +1 -1
  150. package/bundles/material-menu-testing.umd.min.js +2 -2
  151. package/bundles/material-menu-testing.umd.min.js.map +1 -1
  152. package/bundles/material-menu.umd.js +24 -28
  153. package/bundles/material-menu.umd.js.map +1 -1
  154. package/bundles/material-menu.umd.min.js +3 -3
  155. package/bundles/material-menu.umd.min.js.map +1 -1
  156. package/bundles/material-paginator-testing.umd.js +50 -34
  157. package/bundles/material-paginator-testing.umd.js.map +1 -1
  158. package/bundles/material-paginator-testing.umd.min.js +2 -2
  159. package/bundles/material-paginator-testing.umd.min.js.map +1 -1
  160. package/bundles/material-paginator.umd.js +9 -1
  161. package/bundles/material-paginator.umd.js.map +1 -1
  162. package/bundles/material-paginator.umd.min.js +1 -1
  163. package/bundles/material-paginator.umd.min.js.map +1 -1
  164. package/bundles/material-progress-bar-testing.umd.js +9 -1
  165. package/bundles/material-progress-bar-testing.umd.js.map +1 -1
  166. package/bundles/material-progress-bar-testing.umd.min.js +1 -1
  167. package/bundles/material-progress-bar-testing.umd.min.js.map +1 -1
  168. package/bundles/material-progress-bar.umd.js +9 -1
  169. package/bundles/material-progress-bar.umd.js.map +1 -1
  170. package/bundles/material-progress-bar.umd.min.js +1 -1
  171. package/bundles/material-progress-bar.umd.min.js.map +1 -1
  172. package/bundles/material-progress-spinner-testing.umd.js +9 -1
  173. package/bundles/material-progress-spinner-testing.umd.js.map +1 -1
  174. package/bundles/material-progress-spinner-testing.umd.min.js +1 -1
  175. package/bundles/material-progress-spinner-testing.umd.min.js.map +1 -1
  176. package/bundles/material-progress-spinner.umd.js +9 -1
  177. package/bundles/material-progress-spinner.umd.js.map +1 -1
  178. package/bundles/material-progress-spinner.umd.min.js +2 -2
  179. package/bundles/material-progress-spinner.umd.min.js.map +1 -1
  180. package/bundles/material-radio-testing.umd.js +88 -63
  181. package/bundles/material-radio-testing.umd.js.map +1 -1
  182. package/bundles/material-radio-testing.umd.min.js +2 -2
  183. package/bundles/material-radio-testing.umd.min.js.map +1 -1
  184. package/bundles/material-radio.umd.js +18 -5
  185. package/bundles/material-radio.umd.js.map +1 -1
  186. package/bundles/material-radio.umd.min.js +1 -1
  187. package/bundles/material-radio.umd.min.js.map +1 -1
  188. package/bundles/material-select-testing.umd.js +73 -51
  189. package/bundles/material-select-testing.umd.js.map +1 -1
  190. package/bundles/material-select-testing.umd.min.js +2 -2
  191. package/bundles/material-select-testing.umd.min.js.map +1 -1
  192. package/bundles/material-select.umd.js +14 -3
  193. package/bundles/material-select.umd.js.map +1 -1
  194. package/bundles/material-select.umd.min.js +5 -5
  195. package/bundles/material-select.umd.min.js.map +1 -1
  196. package/bundles/material-sidenav-testing.umd.js +175 -28
  197. package/bundles/material-sidenav-testing.umd.js.map +1 -1
  198. package/bundles/material-sidenav-testing.umd.min.js +2 -2
  199. package/bundles/material-sidenav-testing.umd.min.js.map +1 -1
  200. package/bundles/material-sidenav.umd.js +9 -1
  201. package/bundles/material-sidenav.umd.js.map +1 -1
  202. package/bundles/material-sidenav.umd.min.js +1 -1
  203. package/bundles/material-sidenav.umd.min.js.map +1 -1
  204. package/bundles/material-slide-toggle-testing.umd.js +9 -1
  205. package/bundles/material-slide-toggle-testing.umd.js.map +1 -1
  206. package/bundles/material-slide-toggle-testing.umd.min.js +1 -1
  207. package/bundles/material-slide-toggle-testing.umd.min.js.map +1 -1
  208. package/bundles/material-slide-toggle.umd.js +16 -3
  209. package/bundles/material-slide-toggle.umd.js.map +1 -1
  210. package/bundles/material-slide-toggle.umd.min.js +3 -3
  211. package/bundles/material-slide-toggle.umd.min.js.map +1 -1
  212. package/bundles/material-slider-testing.umd.js +15 -4
  213. package/bundles/material-slider-testing.umd.js.map +1 -1
  214. package/bundles/material-slider-testing.umd.min.js +2 -2
  215. package/bundles/material-slider-testing.umd.min.js.map +1 -1
  216. package/bundles/material-slider.umd.js +9 -1
  217. package/bundles/material-slider.umd.js.map +1 -1
  218. package/bundles/material-slider.umd.min.js +1 -1
  219. package/bundles/material-slider.umd.min.js.map +1 -1
  220. package/bundles/material-snack-bar-testing.umd.js +29 -12
  221. package/bundles/material-snack-bar-testing.umd.js.map +1 -1
  222. package/bundles/material-snack-bar-testing.umd.min.js +2 -2
  223. package/bundles/material-snack-bar-testing.umd.min.js.map +1 -1
  224. package/bundles/material-snack-bar.umd.js +20 -2
  225. package/bundles/material-snack-bar.umd.js.map +1 -1
  226. package/bundles/material-snack-bar.umd.min.js +1 -1
  227. package/bundles/material-snack-bar.umd.min.js.map +1 -1
  228. package/bundles/material-sort-testing.umd.js +9 -1
  229. package/bundles/material-sort-testing.umd.js.map +1 -1
  230. package/bundles/material-sort-testing.umd.min.js +1 -1
  231. package/bundles/material-sort-testing.umd.min.js.map +1 -1
  232. package/bundles/material-sort.umd.js +9 -1
  233. package/bundles/material-sort.umd.js.map +1 -1
  234. package/bundles/material-sort.umd.min.js +3 -3
  235. package/bundles/material-sort.umd.min.js.map +1 -1
  236. package/bundles/material-stepper-testing.umd.js +9 -1
  237. package/bundles/material-stepper-testing.umd.js.map +1 -1
  238. package/bundles/material-stepper-testing.umd.min.js +2 -2
  239. package/bundles/material-stepper-testing.umd.min.js.map +1 -1
  240. package/bundles/material-stepper.umd.js +16 -3
  241. package/bundles/material-stepper.umd.js.map +1 -1
  242. package/bundles/material-stepper.umd.min.js +3 -3
  243. package/bundles/material-stepper.umd.min.js.map +1 -1
  244. package/bundles/material-table-testing.umd.js +26 -17
  245. package/bundles/material-table-testing.umd.js.map +1 -1
  246. package/bundles/material-table-testing.umd.min.js +2 -2
  247. package/bundles/material-table-testing.umd.min.js.map +1 -1
  248. package/bundles/material-table.umd.js +65 -38
  249. package/bundles/material-table.umd.js.map +1 -1
  250. package/bundles/material-table.umd.min.js +3 -3
  251. package/bundles/material-table.umd.min.js.map +1 -1
  252. package/bundles/material-tabs-testing.umd.js +11 -3
  253. package/bundles/material-tabs-testing.umd.js.map +1 -1
  254. package/bundles/material-tabs-testing.umd.min.js +1 -1
  255. package/bundles/material-tabs-testing.umd.min.js.map +1 -1
  256. package/bundles/material-tabs.umd.js +10 -2
  257. package/bundles/material-tabs.umd.js.map +1 -1
  258. package/bundles/material-tabs.umd.min.js +5 -5
  259. package/bundles/material-tabs.umd.min.js.map +1 -1
  260. package/bundles/material-toolbar-testing.umd.js +11 -2
  261. package/bundles/material-toolbar-testing.umd.js.map +1 -1
  262. package/bundles/material-toolbar-testing.umd.min.js +2 -2
  263. package/bundles/material-toolbar-testing.umd.min.js.map +1 -1
  264. package/bundles/material-toolbar.umd.js +9 -1
  265. package/bundles/material-toolbar.umd.js.map +1 -1
  266. package/bundles/material-toolbar.umd.min.js +2 -2
  267. package/bundles/material-toolbar.umd.min.js.map +1 -1
  268. package/bundles/material-tooltip-testing.umd.js +9 -1
  269. package/bundles/material-tooltip-testing.umd.js.map +1 -1
  270. package/bundles/material-tooltip-testing.umd.min.js +1 -1
  271. package/bundles/material-tooltip-testing.umd.min.js.map +1 -1
  272. package/bundles/material-tooltip.umd.js +35 -7
  273. package/bundles/material-tooltip.umd.js.map +1 -1
  274. package/bundles/material-tooltip.umd.min.js +3 -3
  275. package/bundles/material-tooltip.umd.min.js.map +1 -1
  276. package/bundles/material-tree-testing.umd.js +10 -2
  277. package/bundles/material-tree-testing.umd.js.map +1 -1
  278. package/bundles/material-tree-testing.umd.min.js +1 -1
  279. package/bundles/material-tree-testing.umd.min.js.map +1 -1
  280. package/bundles/material-tree.umd.js +9 -1
  281. package/bundles/material-tree.umd.js.map +1 -1
  282. package/bundles/material-tree.umd.min.js +3 -3
  283. package/bundles/material-tree.umd.min.js.map +1 -1
  284. package/button/_button-base.scss +2 -2
  285. package/button/_button-theme.scss +10 -11
  286. package/button/index.metadata.json +1 -1
  287. package/button-toggle/_button-toggle-theme.scss +9 -10
  288. package/card/_card-theme.scss +5 -6
  289. package/checkbox/_checkbox-theme.scss +2 -3
  290. package/checkbox/testing/checkbox-harness.d.ts +21 -16
  291. package/chips/_chips-theme.scss +4 -5
  292. package/chips/testing/chip-harness-filters.d.ts +11 -3
  293. package/chips/testing/chip-harness.d.ts +5 -5
  294. package/chips/testing/chip-list-harness.d.ts +15 -12
  295. package/chips/testing/chip-listbox-harness.d.ts +34 -0
  296. package/chips/testing/chip-option-harness.d.ts +29 -0
  297. package/chips/testing/public-api.d.ts +3 -1
  298. package/core/_core.scss +6 -6
  299. package/core/color/_all-color.scss +2 -1
  300. package/core/datetime/date-formats.d.ts +1 -0
  301. package/core/density/private/_all-density.scss +34 -0
  302. package/core/density/{_index.scss → private/_compatibility.scss} +11 -8
  303. package/core/focus-indicators/_focus-indicators.scss +3 -4
  304. package/core/index.metadata.json +1 -1
  305. package/core/option/_optgroup-theme.scss +2 -3
  306. package/core/option/_option-theme.scss +2 -3
  307. package/core/option/index.d.ts +1 -0
  308. package/core/option/optgroup.d.ts +4 -0
  309. package/core/option/option-parent.d.ts +22 -0
  310. package/core/option/option.d.ts +2 -14
  311. package/core/ripple/_ripple.scss +2 -3
  312. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +2 -3
  313. package/core/style/_elevation.scss +2 -18
  314. package/core/style/_form-common.scss +2 -2
  315. package/core/style/_private.scss +40 -0
  316. package/core/testing/option-harness.d.ts +2 -0
  317. package/core/theming/_all-theme.scss +3 -2
  318. package/core/theming/_theming.scss +148 -38
  319. package/core/typography/_all-typography.scss +1 -1
  320. package/datepicker/_datepicker-theme.scss +5 -6
  321. package/datepicker/date-range-input-parts.d.ts +2 -3
  322. package/datepicker/date-range-input.d.ts +5 -4
  323. package/datepicker/date-selection-model.d.ts +10 -0
  324. package/datepicker/datepicker-actions.d.ts +33 -0
  325. package/datepicker/datepicker-base.d.ts +52 -9
  326. package/datepicker/datepicker-input-base.d.ts +5 -10
  327. package/datepicker/datepicker-input.d.ts +9 -8
  328. package/datepicker/datepicker-toggle.d.ts +4 -2
  329. package/datepicker/index.metadata.json +1 -1
  330. package/datepicker/public-api.d.ts +1 -0
  331. package/dialog/_dialog-theme.scss +4 -5
  332. package/divider/_divider-theme.scss +2 -3
  333. package/esm2015/autocomplete/autocomplete-trigger.js +10 -2
  334. package/esm2015/autocomplete/autocomplete.js +11 -4
  335. package/esm2015/autocomplete/testing/autocomplete-harness.js +27 -19
  336. package/esm2015/button/button.js +10 -5
  337. package/esm2015/checkbox/checkbox.js +8 -3
  338. package/esm2015/checkbox/testing/checkbox-harness.js +31 -36
  339. package/esm2015/chips/testing/chip-harness-filters.js +1 -1
  340. package/esm2015/chips/testing/chip-harness.js +6 -6
  341. package/esm2015/chips/testing/chip-list-harness.js +19 -16
  342. package/esm2015/chips/testing/chip-listbox-harness.js +49 -0
  343. package/esm2015/chips/testing/chip-option-harness.js +54 -0
  344. package/esm2015/chips/testing/public-api.js +4 -2
  345. package/esm2015/core/common-behaviors/common-module.js +1 -1
  346. package/esm2015/core/datetime/date-formats.js +1 -1
  347. package/esm2015/core/option/index.js +2 -1
  348. package/esm2015/core/option/optgroup.js +32 -7
  349. package/esm2015/core/option/option-parent.js +13 -0
  350. package/esm2015/core/option/option.js +5 -8
  351. package/esm2015/core/testing/option-harness.js +7 -2
  352. package/esm2015/core/version.js +1 -1
  353. package/esm2015/datepicker/date-range-input-parts.js +10 -14
  354. package/esm2015/datepicker/date-range-input.js +11 -4
  355. package/esm2015/datepicker/date-range-picker.js +3 -2
  356. package/esm2015/datepicker/date-selection-model.js +24 -1
  357. package/esm2015/datepicker/datepicker-actions.js +89 -0
  358. package/esm2015/datepicker/datepicker-base.js +66 -25
  359. package/esm2015/datepicker/datepicker-input-base.js +15 -27
  360. package/esm2015/datepicker/datepicker-input.js +11 -5
  361. package/esm2015/datepicker/datepicker-module.js +8 -1
  362. package/esm2015/datepicker/datepicker-toggle.js +7 -10
  363. package/esm2015/datepicker/datepicker.js +5 -2
  364. package/esm2015/datepicker/month-view.js +6 -3
  365. package/esm2015/datepicker/public-api.js +2 -1
  366. package/esm2015/datepicker/testing/date-range-input-harness.js +4 -4
  367. package/esm2015/datepicker/testing/datepicker-input-harness.js +3 -3
  368. package/esm2015/datepicker/testing/datepicker-trigger-harness-base.js +3 -3
  369. package/esm2015/dialog/dialog-ref.js +2 -2
  370. package/esm2015/expansion/expansion-panel-header.js +9 -4
  371. package/esm2015/expansion/expansion-panel.js +1 -1
  372. package/esm2015/form-field/form-field-animations.js +2 -2
  373. package/esm2015/form-field/form-field.js +2 -2
  374. package/esm2015/form-field/testing/form-field-harness.js +14 -9
  375. package/esm2015/grid-list/public-api.js +3 -2
  376. package/esm2015/grid-list/testing/grid-list-harness.js +6 -5
  377. package/esm2015/icon/icon-registry.js +39 -3
  378. package/esm2015/icon/testing/fake-icon-registry.js +4 -2
  379. package/esm2015/input/testing/input-harness.js +3 -3
  380. package/esm2015/input/testing/native-select-harness.js +7 -5
  381. package/esm2015/list/selection-list.js +1 -1
  382. package/esm2015/list/testing/list-harness-base.js +5 -4
  383. package/esm2015/list/testing/list-item-harness-base.js +5 -4
  384. package/esm2015/list/testing/selection-list-harness.js +8 -5
  385. package/esm2015/menu/menu-item.js +3 -3
  386. package/esm2015/menu/menu-trigger.js +15 -25
  387. package/esm2015/menu/menu.js +2 -2
  388. package/esm2015/menu/testing/menu-harness.js +44 -32
  389. package/esm2015/paginator/testing/paginator-harness.js +27 -25
  390. package/esm2015/radio/radio.js +10 -5
  391. package/esm2015/radio/testing/radio-harness.js +40 -29
  392. package/esm2015/select/select.js +6 -3
  393. package/esm2015/select/testing/select-harness.js +36 -28
  394. package/esm2015/sidenav/testing/drawer-container-harness.js +41 -0
  395. package/esm2015/sidenav/testing/drawer-content-harness.js +23 -0
  396. package/esm2015/sidenav/testing/drawer-harness-filters.js +1 -1
  397. package/esm2015/sidenav/testing/drawer-harness.js +19 -13
  398. package/esm2015/sidenav/testing/public-api.js +6 -2
  399. package/esm2015/sidenav/testing/sidenav-container-harness.js +41 -0
  400. package/esm2015/sidenav/testing/sidenav-content-harness.js +23 -0
  401. package/esm2015/sidenav/testing/sidenav-harness.js +4 -4
  402. package/esm2015/slide-toggle/slide-toggle.js +8 -3
  403. package/esm2015/slider/testing/slider-harness.js +5 -5
  404. package/esm2015/snack-bar/snack-bar-container.js +12 -2
  405. package/esm2015/snack-bar/testing/snack-bar-harness.js +19 -12
  406. package/esm2015/stepper/step-header.js +8 -3
  407. package/esm2015/table/table-data-source.js +34 -21
  408. package/esm2015/table/testing/cell-harness.js +3 -3
  409. package/esm2015/table/testing/row-harness.js +5 -5
  410. package/esm2015/table/testing/table-harness.js +8 -8
  411. package/esm2015/tabs/tab-body.js +3 -3
  412. package/esm2015/tabs/testing/tab-group-harness.js +3 -3
  413. package/esm2015/tabs/testing/tab-nav-bar-harness.js +3 -3
  414. package/esm2015/toolbar/testing/toolbar-harness.js +3 -3
  415. package/esm2015/tooltip/tooltip.js +28 -7
  416. package/esm2015/tree/testing/tree-harness.js +2 -2
  417. package/expansion/_expansion-mixins.scss +11 -0
  418. package/expansion/_expansion-theme.scss +13 -19
  419. package/expansion/index.metadata.json +1 -1
  420. package/fesm2015/autocomplete/testing.js +26 -18
  421. package/fesm2015/autocomplete/testing.js.map +1 -1
  422. package/fesm2015/autocomplete.js +19 -5
  423. package/fesm2015/autocomplete.js.map +1 -1
  424. package/fesm2015/button.js +9 -4
  425. package/fesm2015/button.js.map +1 -1
  426. package/fesm2015/checkbox/testing.js +30 -35
  427. package/fesm2015/checkbox/testing.js.map +1 -1
  428. package/fesm2015/checkbox.js +7 -2
  429. package/fesm2015/checkbox.js.map +1 -1
  430. package/fesm2015/chips/testing.js +120 -21
  431. package/fesm2015/chips/testing.js.map +1 -1
  432. package/fesm2015/core/testing.js +6 -1
  433. package/fesm2015/core/testing.js.map +1 -1
  434. package/fesm2015/core.js +45 -13
  435. package/fesm2015/core.js.map +1 -1
  436. package/fesm2015/datepicker/testing.js +5 -5
  437. package/fesm2015/datepicker/testing.js.map +1 -1
  438. package/fesm2015/datepicker.js +275 -116
  439. package/fesm2015/datepicker.js.map +1 -1
  440. package/fesm2015/dialog.js +1 -1
  441. package/fesm2015/dialog.js.map +1 -1
  442. package/fesm2015/expansion.js +8 -3
  443. package/fesm2015/expansion.js.map +1 -1
  444. package/fesm2015/form-field/testing.js +13 -8
  445. package/fesm2015/form-field/testing.js.map +1 -1
  446. package/fesm2015/form-field.js +2 -2
  447. package/fesm2015/form-field.js.map +1 -1
  448. package/fesm2015/grid-list/testing.js +5 -4
  449. package/fesm2015/grid-list/testing.js.map +1 -1
  450. package/fesm2015/grid-list.js +128 -126
  451. package/fesm2015/grid-list.js.map +1 -1
  452. package/fesm2015/icon/testing.js +3 -1
  453. package/fesm2015/icon/testing.js.map +1 -1
  454. package/fesm2015/icon.js +38 -2
  455. package/fesm2015/icon.js.map +1 -1
  456. package/fesm2015/input/testing.js +7 -5
  457. package/fesm2015/input/testing.js.map +1 -1
  458. package/fesm2015/list/testing.js +13 -8
  459. package/fesm2015/list/testing.js.map +1 -1
  460. package/fesm2015/list.js.map +1 -1
  461. package/fesm2015/menu/testing.js +45 -33
  462. package/fesm2015/menu/testing.js.map +1 -1
  463. package/fesm2015/menu.js +17 -27
  464. package/fesm2015/menu.js.map +1 -1
  465. package/fesm2015/paginator/testing.js +26 -24
  466. package/fesm2015/paginator/testing.js.map +1 -1
  467. package/fesm2015/paginator.js.map +1 -1
  468. package/fesm2015/progress-spinner.js.map +1 -1
  469. package/fesm2015/radio/testing.js +39 -28
  470. package/fesm2015/radio/testing.js.map +1 -1
  471. package/fesm2015/radio.js +9 -4
  472. package/fesm2015/radio.js.map +1 -1
  473. package/fesm2015/select/testing.js +36 -28
  474. package/fesm2015/select/testing.js.map +1 -1
  475. package/fesm2015/select.js +5 -2
  476. package/fesm2015/select.js.map +1 -1
  477. package/fesm2015/sidenav/testing.js +139 -15
  478. package/fesm2015/sidenav/testing.js.map +1 -1
  479. package/fesm2015/sidenav.js.map +1 -1
  480. package/fesm2015/slide-toggle.js +7 -2
  481. package/fesm2015/slide-toggle.js.map +1 -1
  482. package/fesm2015/slider/testing.js +4 -4
  483. package/fesm2015/slider/testing.js.map +1 -1
  484. package/fesm2015/snack-bar/testing.js +18 -11
  485. package/fesm2015/snack-bar/testing.js.map +1 -1
  486. package/fesm2015/snack-bar.js +11 -1
  487. package/fesm2015/snack-bar.js.map +1 -1
  488. package/fesm2015/stepper.js +7 -2
  489. package/fesm2015/stepper.js.map +1 -1
  490. package/fesm2015/table/testing.js +11 -11
  491. package/fesm2015/table/testing.js.map +1 -1
  492. package/fesm2015/table.js +34 -21
  493. package/fesm2015/table.js.map +1 -1
  494. package/fesm2015/tabs/testing.js +3 -3
  495. package/fesm2015/tabs/testing.js.map +1 -1
  496. package/fesm2015/tabs.js +2 -2
  497. package/fesm2015/tabs.js.map +1 -1
  498. package/fesm2015/toolbar/testing.js +2 -2
  499. package/fesm2015/toolbar/testing.js.map +1 -1
  500. package/fesm2015/tooltip.js +27 -7
  501. package/fesm2015/tooltip.js.map +1 -1
  502. package/fesm2015/tree/testing.js +1 -1
  503. package/fesm2015/tree/testing.js.map +1 -1
  504. package/form-field/_form-field-fill-theme.scss +4 -5
  505. package/form-field/_form-field-legacy-theme.scss +5 -6
  506. package/form-field/_form-field-outline-theme.scss +4 -5
  507. package/form-field/_form-field-standard-theme.scss +5 -6
  508. package/form-field/_form-field-theme.scss +8 -9
  509. package/form-field/index.metadata.json +1 -1
  510. package/grid-list/_grid-list-theme.scss +2 -3
  511. package/grid-list/index.metadata.json +1 -1
  512. package/grid-list/public-api.d.ts +2 -1
  513. package/icon/_icon-theme.scss +2 -3
  514. package/icon/icon-registry.d.ts +23 -0
  515. package/icon/index.metadata.json +1 -1
  516. package/icon/testing/fake-icon-registry.d.ts +1 -0
  517. package/icon/testing/index.metadata.json +1 -1
  518. package/input/_input-theme.scss +3 -4
  519. package/list/_list-theme.scss +2 -3
  520. package/list/index.metadata.json +1 -1
  521. package/list/selection-list.d.ts +6 -1
  522. package/list/testing/list-harness-base.d.ts +1 -1
  523. package/list/testing/list-item-harness-base.d.ts +2 -2
  524. package/list/testing/selection-list-harness.d.ts +2 -1
  525. package/menu/_menu-theme.scss +4 -5
  526. package/menu/index.metadata.json +1 -1
  527. package/menu/menu-trigger.d.ts +1 -3
  528. package/menu/menu.d.ts +4 -2
  529. package/menu/testing/menu-harness.d.ts +39 -26
  530. package/package.json +2 -2
  531. package/paginator/_paginator-theme.scss +7 -8
  532. package/paginator/testing/paginator-harness.d.ts +32 -19
  533. package/prebuilt-themes/deeppurple-amber.css +1 -1
  534. package/prebuilt-themes/indigo-pink.css +1 -1
  535. package/prebuilt-themes/pink-bluegrey.css +1 -1
  536. package/prebuilt-themes/purple-green.css +1 -1
  537. package/progress-bar/_progress-bar-theme.scss +2 -3
  538. package/progress-spinner/_progress-spinner-theme.scss +2 -3
  539. package/radio/_radio-theme.scss +2 -3
  540. package/radio/index.metadata.json +1 -1
  541. package/radio/radio.d.ts +2 -2
  542. package/radio/testing/radio-harness.d.ts +39 -24
  543. package/schematics/ng-add/fonts/material-fonts.js +7 -5
  544. package/schematics/ng-add/index.js +1 -1
  545. package/schematics/ng-add/setup-project.js +4 -3
  546. package/select/_select-theme.scss +5 -6
  547. package/select/index.metadata.json +1 -1
  548. package/select/testing/select-harness.d.ts +28 -16
  549. package/sidenav/_sidenav-theme.scss +4 -5
  550. package/sidenav/testing/drawer-container-harness.d.ts +30 -0
  551. package/sidenav/testing/drawer-content-harness.d.ts +21 -0
  552. package/sidenav/testing/drawer-harness-filters.d.ts +6 -0
  553. package/sidenav/testing/drawer-harness.d.ts +13 -7
  554. package/sidenav/testing/public-api.d.ts +5 -1
  555. package/sidenav/testing/sidenav-container-harness.d.ts +30 -0
  556. package/sidenav/testing/sidenav-content-harness.d.ts +21 -0
  557. package/sidenav/testing/sidenav-harness.d.ts +3 -3
  558. package/slide-toggle/_slide-toggle-theme.scss +4 -5
  559. package/slide-toggle/slide-toggle.d.ts +2 -2
  560. package/slider/_slider-theme.scss +2 -3
  561. package/snack-bar/_snack-bar-theme.scss +4 -5
  562. package/snack-bar/index.metadata.json +1 -1
  563. package/snack-bar/snack-bar-container.d.ts +5 -0
  564. package/snack-bar/testing/snack-bar-harness.d.ts +7 -4
  565. package/sort/_sort-theme.scss +2 -3
  566. package/stepper/_stepper-theme.scss +7 -8
  567. package/stepper/step-header.d.ts +2 -2
  568. package/table/_table-theme.scss +2 -3
  569. package/table/index.metadata.json +1 -1
  570. package/table/table-data-source.d.ts +31 -20
  571. package/table/testing/cell-harness.d.ts +2 -2
  572. package/tabs/_tabs-common.scss +2 -2
  573. package/tabs/_tabs-theme.scss +14 -9
  574. package/tabs/index.metadata.json +1 -1
  575. package/tabs/tab-body.d.ts +3 -3
  576. package/toolbar/_toolbar-theme.scss +8 -9
  577. package/tooltip/_tooltip-theme.scss +2 -3
  578. package/tooltip/index.metadata.json +1 -1
  579. package/tooltip/tooltip.d.ts +10 -1
  580. package/tree/_tree-theme.scss +7 -8
  581. package/core/density/_all-density.scss +0 -19
  582. package/core/style/_noop-animation.scss +0 -22
  583. package/core/theming/_check-duplicate-styles.scss +0 -106
@@ -8,18 +8,11 @@ import { ContentContainerComponentHarness, HarnessPredicate } from '@angular/cdk
8
8
  * Use of this source code is governed by an MIT-style license that can be
9
9
  * found in the LICENSE file at https://angular.io/license
10
10
  */
11
- /** Harness for interacting with a standard mat-drawer in tests. */
12
- class MatDrawerHarness extends ContentContainerComponentHarness {
13
- /**
14
- * Gets a `HarnessPredicate` that can be used to search for a `MatDrawerHarness` that meets
15
- * certain criteria.
16
- * @param options Options for filtering which drawer instances are considered a match.
17
- * @return a `HarnessPredicate` configured with the given options.
18
- */
19
- static with(options = {}) {
20
- return new HarnessPredicate(MatDrawerHarness, options)
21
- .addOption('position', options.position, (harness, position) => __awaiter(this, void 0, void 0, function* () { return (yield harness.getPosition()) === position; }));
22
- }
11
+ /**
12
+ * Base class for the drawer harness functionality.
13
+ * @docs-private
14
+ */
15
+ class MatDrawerHarnessBase extends ContentContainerComponentHarness {
23
16
  /** Whether the drawer is open. */
24
17
  isOpen() {
25
18
  return __awaiter(this, void 0, void 0, function* () {
@@ -47,9 +40,81 @@ class MatDrawerHarness extends ContentContainerComponentHarness {
47
40
  });
48
41
  }
49
42
  }
43
+ /** Harness for interacting with a standard mat-drawer in tests. */
44
+ class MatDrawerHarness extends MatDrawerHarnessBase {
45
+ /**
46
+ * Gets a `HarnessPredicate` that can be used to search for a `MatDrawerHarness` that meets
47
+ * certain criteria.
48
+ * @param options Options for filtering which drawer instances are considered a match.
49
+ * @return a `HarnessPredicate` configured with the given options.
50
+ */
51
+ static with(options = {}) {
52
+ return new HarnessPredicate(MatDrawerHarness, options)
53
+ .addOption('position', options.position, (harness, position) => __awaiter(this, void 0, void 0, function* () { return (yield harness.getPosition()) === position; }));
54
+ }
55
+ }
50
56
  /** The selector for the host element of a `MatDrawer` instance. */
51
57
  MatDrawerHarness.hostSelector = '.mat-drawer';
52
58
 
59
+ /**
60
+ * @license
61
+ * Copyright Google LLC All Rights Reserved.
62
+ *
63
+ * Use of this source code is governed by an MIT-style license that can be
64
+ * found in the LICENSE file at https://angular.io/license
65
+ */
66
+ /** Harness for interacting with a standard mat-drawer-content in tests. */
67
+ class MatDrawerContentHarness extends ContentContainerComponentHarness {
68
+ /**
69
+ * Gets a `HarnessPredicate` that can be used to search for a `MatDrawerContentHarness` that
70
+ * meets certain criteria.
71
+ * @param options Options for filtering which drawer content instances are considered a match.
72
+ * @return a `HarnessPredicate` configured with the given options.
73
+ */
74
+ static with(options = {}) {
75
+ return new HarnessPredicate(MatDrawerContentHarness, options);
76
+ }
77
+ }
78
+ /** The selector for the host element of a `MatDrawerContent` instance. */
79
+ MatDrawerContentHarness.hostSelector = '.mat-drawer-content';
80
+
81
+ /**
82
+ * @license
83
+ * Copyright Google LLC All Rights Reserved.
84
+ *
85
+ * Use of this source code is governed by an MIT-style license that can be
86
+ * found in the LICENSE file at https://angular.io/license
87
+ */
88
+ /** Harness for interacting with a standard mat-drawer-container in tests. */
89
+ class MatDrawerContainerHarness extends ContentContainerComponentHarness {
90
+ /**
91
+ * Gets a `HarnessPredicate` that can be used to search for a `MatDrawerContainerHarness` that
92
+ * meets certain criteria.
93
+ * @param options Options for filtering which container instances are considered a match.
94
+ * @return a `HarnessPredicate` configured with the given options.
95
+ */
96
+ static with(options = {}) {
97
+ return new HarnessPredicate(MatDrawerContainerHarness, options);
98
+ }
99
+ /**
100
+ * Gets drawers that match particular criteria within the container.
101
+ * @param filter Optionally filters which chips are included.
102
+ */
103
+ getDrawers(filter = {}) {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ return this.locatorForAll(MatDrawerHarness.with(filter))();
106
+ });
107
+ }
108
+ /** Gets the element that has the container's content. */
109
+ getContent() {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ return this.locatorFor(MatDrawerContentHarness)();
112
+ });
113
+ }
114
+ }
115
+ /** The selector for the host element of a `MatDrawerContainer` instance. */
116
+ MatDrawerContainerHarness.hostSelector = '.mat-drawer-container';
117
+
53
118
  /**
54
119
  * @license
55
120
  * Copyright Google LLC All Rights Reserved.
@@ -58,6 +123,28 @@ MatDrawerHarness.hostSelector = '.mat-drawer';
58
123
  * found in the LICENSE file at https://angular.io/license
59
124
  */
60
125
 
126
+ /**
127
+ * @license
128
+ * Copyright Google LLC All Rights Reserved.
129
+ *
130
+ * Use of this source code is governed by an MIT-style license that can be
131
+ * found in the LICENSE file at https://angular.io/license
132
+ */
133
+ /** Harness for interacting with a standard mat-sidenav-content in tests. */
134
+ class MatSidenavContentHarness extends ContentContainerComponentHarness {
135
+ /**
136
+ * Gets a `HarnessPredicate` that can be used to search for a `MatSidenavContentHarness` that
137
+ * meets certain criteria.
138
+ * @param options Options for filtering which sidenav content instances are considered a match.
139
+ * @return a `HarnessPredicate` configured with the given options.
140
+ */
141
+ static with(options = {}) {
142
+ return new HarnessPredicate(MatSidenavContentHarness, options);
143
+ }
144
+ }
145
+ /** The selector for the host element of a `MatSidenavContent` instance. */
146
+ MatSidenavContentHarness.hostSelector = '.mat-sidenav-content';
147
+
61
148
  /**
62
149
  * @license
63
150
  * Copyright Google LLC All Rights Reserved.
@@ -66,7 +153,7 @@ MatDrawerHarness.hostSelector = '.mat-drawer';
66
153
  * found in the LICENSE file at https://angular.io/license
67
154
  */
68
155
  /** Harness for interacting with a standard mat-sidenav in tests. */
69
- class MatSidenavHarness extends MatDrawerHarness {
156
+ class MatSidenavHarness extends MatDrawerHarnessBase {
70
157
  /**
71
158
  * Gets a `HarnessPredicate` that can be used to search for a `MatSidenavHarness` that meets
72
159
  * certain criteria.
@@ -74,7 +161,7 @@ class MatSidenavHarness extends MatDrawerHarness {
74
161
  * @return a `HarnessPredicate` configured with the given options.
75
162
  */
76
163
  static with(options = {}) {
77
- return new HarnessPredicate(MatDrawerHarness, options)
164
+ return new HarnessPredicate(MatSidenavHarness, options)
78
165
  .addOption('position', options.position, (harness, position) => __awaiter(this, void 0, void 0, function* () { return (yield harness.getPosition()) === position; }));
79
166
  }
80
167
  /** Whether the sidenav is fixed in the viewport. */
@@ -87,6 +174,43 @@ class MatSidenavHarness extends MatDrawerHarness {
87
174
  /** The selector for the host element of a `MatSidenav` instance. */
88
175
  MatSidenavHarness.hostSelector = '.mat-sidenav';
89
176
 
177
+ /**
178
+ * @license
179
+ * Copyright Google LLC All Rights Reserved.
180
+ *
181
+ * Use of this source code is governed by an MIT-style license that can be
182
+ * found in the LICENSE file at https://angular.io/license
183
+ */
184
+ /** Harness for interacting with a standard mat-sidenav-container in tests. */
185
+ class MatSidenavContainerHarness extends ContentContainerComponentHarness {
186
+ /**
187
+ * Gets a `HarnessPredicate` that can be used to search for a `MatSidenavContainerHarness` that
188
+ * meets certain criteria.
189
+ * @param options Options for filtering which container instances are considered a match.
190
+ * @return a `HarnessPredicate` configured with the given options.
191
+ */
192
+ static with(options = {}) {
193
+ return new HarnessPredicate(MatSidenavContainerHarness, options);
194
+ }
195
+ /**
196
+ * Gets sidenavs that match particular criteria within the container.
197
+ * @param filter Optionally filters which chips are included.
198
+ */
199
+ getSidenavs(filter = {}) {
200
+ return __awaiter(this, void 0, void 0, function* () {
201
+ return this.locatorForAll(MatSidenavHarness.with(filter))();
202
+ });
203
+ }
204
+ /** Gets the element that has the container's content. */
205
+ getContent() {
206
+ return __awaiter(this, void 0, void 0, function* () {
207
+ return this.locatorFor(MatSidenavContentHarness)();
208
+ });
209
+ }
210
+ }
211
+ /** The selector for the host element of a `MatSidenavContainer` instance. */
212
+ MatSidenavContainerHarness.hostSelector = '.mat-sidenav-container';
213
+
90
214
  /**
91
215
  * @license
92
216
  * Copyright Google LLC All Rights Reserved.
@@ -103,5 +227,5 @@ MatSidenavHarness.hostSelector = '.mat-sidenav';
103
227
  * found in the LICENSE file at https://angular.io/license
104
228
  */
105
229
 
106
- export { MatDrawerHarness, MatSidenavHarness };
230
+ export { MatDrawerContainerHarness, MatDrawerContentHarness, MatDrawerHarness, MatSidenavContainerHarness, MatSidenavContentHarness, MatSidenavHarness };
107
231
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidenav__testing.js","sources":["../../../../../../src/material/sidenav/testing/drawer-harness.ts","../../../../../../src/material/sidenav/testing/drawer-harness-filters.ts","../../../../../../src/material/sidenav/testing/sidenav-harness.ts","../../../../../../src/material/sidenav/testing/public-api.ts","../../../../../../src/material/sidenav/testing/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ContentContainerComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {DrawerHarnessFilters} from './drawer-harness-filters';\n\n/** Harness for interacting with a standard mat-drawer in tests. */\nexport class MatDrawerHarness extends ContentContainerComponentHarness<string> {\n /** The selector for the host element of a `MatDrawer` instance. */\n static hostSelector = '.mat-drawer';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatDrawerHarness` that meets\n * certain criteria.\n * @param options Options for filtering which drawer instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: DrawerHarnessFilters = {}): HarnessPredicate<MatDrawerHarness> {\n return new HarnessPredicate(MatDrawerHarness, options)\n .addOption('position', options.position,\n async (harness, position) => (await harness.getPosition()) === position);\n }\n\n /** Whether the drawer is open. */\n async isOpen(): Promise<boolean> {\n return (await this.host()).hasClass('mat-drawer-opened');\n }\n\n /** Gets the position of the drawer inside its container. */\n async getPosition(): Promise<'start'|'end'> {\n const host = await this.host();\n return (await host.hasClass('mat-drawer-end')) ? 'end' : 'start';\n }\n\n /** Gets the mode that the drawer is in. */\n async getMode(): Promise<'over'|'push'|'side'> {\n const host = await this.host();\n\n if (await host.hasClass('mat-drawer-push')) {\n return 'push';\n }\n\n if (await host.hasClass('mat-drawer-side')) {\n return 'side';\n }\n\n return 'over';\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BaseHarnessFilters} from '@angular/cdk/testing';\n\n/** A set of criteria that can be used to filter a list of `MatDrawerHarness` instances. */\nexport interface DrawerHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose side is the given value. */\n position?: 'start' | 'end';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatDrawerHarness} from './drawer-harness';\nimport {DrawerHarnessFilters} from './drawer-harness-filters';\n\n/** Harness for interacting with a standard mat-sidenav in tests. */\nexport class MatSidenavHarness extends MatDrawerHarness {\n /** The selector for the host element of a `MatSidenav` instance. */\n static hostSelector = '.mat-sidenav';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatSidenavHarness` that meets\n * certain criteria.\n * @param options Options for filtering which sidenav instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: DrawerHarnessFilters = {}): HarnessPredicate<MatDrawerHarness> {\n return new HarnessPredicate(MatDrawerHarness, options)\n .addOption('position', options.position,\n async (harness, position) => (await harness.getPosition()) === position);\n }\n\n /** Whether the sidenav is fixed in the viewport. */\n async isFixedInViewport(): Promise<boolean> {\n return (await this.host()).hasClass('mat-sidenav-fixed');\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './drawer-harness';\nexport * from './drawer-harness-filters';\nexport * from './sidenav-harness';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAAA;;;;;;;AAWA;AACA,MAAa,gBAAiB,SAAQ,gCAAwC;;;;;;;IAU5E,OAAO,IAAI,CAAC,UAAgC,EAAE;QAC5C,OAAO,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC;aACjD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,EACnC,CAAO,OAAO,EAAE,QAAQ,oDAAK,OAAA,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,MAAM,QAAQ,CAAA,GAAA,CAAC,CAAC;KAClF;;IAGK,MAAM;;YACV,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;SAC1D;KAAA;;IAGK,WAAW;;YACf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC;SAClE;KAAA;;IAGK,OAAO;;YACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAE/B,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;gBAC1C,OAAO,MAAM,CAAC;aACf;YAED,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;gBAC1C,OAAO,MAAM,CAAC;aACf;YAED,OAAO,MAAM,CAAC;SACf;KAAA;;;AAtCM,6BAAY,GAAG,aAAa,CAAC;;ACdtC;;;;;;GAMG;;ACNH;;;;;;;AAYA;AACA,MAAa,iBAAkB,SAAQ,gBAAgB;;;;;;;IAUrD,OAAO,IAAI,CAAC,UAAgC,EAAE;QAC5C,OAAO,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC;aACjD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,EACnC,CAAO,OAAO,EAAE,QAAQ,oDAAK,OAAA,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,MAAM,QAAQ,CAAA,GAAA,CAAC,CAAC;KAClF;;IAGK,iBAAiB;;YACrB,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;SAC1D;KAAA;;;AAjBM,8BAAY,GAAG,cAAc,CAAC;;ACfvC;;;;;;GAMG;;ACNH;;;;;;GAMG;;;;"}
1
+ {"version":3,"file":"sidenav__testing.js","sources":["../../../../../../src/material/sidenav/testing/drawer-harness.ts","../../../../../../src/material/sidenav/testing/drawer-content-harness.ts","../../../../../../src/material/sidenav/testing/drawer-container-harness.ts","../../../../../../src/material/sidenav/testing/drawer-harness-filters.ts","../../../../../../src/material/sidenav/testing/sidenav-content-harness.ts","../../../../../../src/material/sidenav/testing/sidenav-harness.ts","../../../../../../src/material/sidenav/testing/sidenav-container-harness.ts","../../../../../../src/material/sidenav/testing/public-api.ts","../../../../../../src/material/sidenav/testing/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ContentContainerComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {DrawerHarnessFilters} from './drawer-harness-filters';\n\n/**\n * Base class for the drawer harness functionality.\n * @docs-private\n */\nexport class MatDrawerHarnessBase extends ContentContainerComponentHarness<string> {\n /** Whether the drawer is open. */\n async isOpen(): Promise<boolean> {\n return (await this.host()).hasClass('mat-drawer-opened');\n }\n\n /** Gets the position of the drawer inside its container. */\n async getPosition(): Promise<'start'|'end'> {\n const host = await this.host();\n return (await host.hasClass('mat-drawer-end')) ? 'end' : 'start';\n }\n\n /** Gets the mode that the drawer is in. */\n async getMode(): Promise<'over'|'push'|'side'> {\n const host = await this.host();\n\n if (await host.hasClass('mat-drawer-push')) {\n return 'push';\n }\n\n if (await host.hasClass('mat-drawer-side')) {\n return 'side';\n }\n\n return 'over';\n }\n}\n\n/** Harness for interacting with a standard mat-drawer in tests. */\nexport class MatDrawerHarness extends MatDrawerHarnessBase {\n /** The selector for the host element of a `MatDrawer` instance. */\n static hostSelector = '.mat-drawer';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatDrawerHarness` that meets\n * certain criteria.\n * @param options Options for filtering which drawer instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: DrawerHarnessFilters = {}): HarnessPredicate<MatDrawerHarness> {\n return new HarnessPredicate(MatDrawerHarness, options)\n .addOption('position', options.position,\n async (harness, position) => (await harness.getPosition()) === position);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ContentContainerComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {DrawerContentHarnessFilters} from './drawer-harness-filters';\n\n/** Harness for interacting with a standard mat-drawer-content in tests. */\nexport class MatDrawerContentHarness extends ContentContainerComponentHarness<string> {\n /** The selector for the host element of a `MatDrawerContent` instance. */\n static hostSelector = '.mat-drawer-content';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatDrawerContentHarness` that\n * meets certain criteria.\n * @param options Options for filtering which drawer content instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: DrawerContentHarnessFilters = {}):\n HarnessPredicate<MatDrawerContentHarness> {\n return new HarnessPredicate(MatDrawerContentHarness, options);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ContentContainerComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {DrawerContainerHarnessFilters, DrawerHarnessFilters} from './drawer-harness-filters';\nimport {MatDrawerContentHarness} from './drawer-content-harness';\nimport {MatDrawerHarness} from './drawer-harness';\n\n/** Harness for interacting with a standard mat-drawer-container in tests. */\nexport class MatDrawerContainerHarness extends ContentContainerComponentHarness<string> {\n /** The selector for the host element of a `MatDrawerContainer` instance. */\n static hostSelector = '.mat-drawer-container';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatDrawerContainerHarness` that\n * meets certain criteria.\n * @param options Options for filtering which container instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: DrawerContainerHarnessFilters = {}):\n HarnessPredicate<MatDrawerContainerHarness> {\n return new HarnessPredicate(MatDrawerContainerHarness, options);\n }\n\n /**\n * Gets drawers that match particular criteria within the container.\n * @param filter Optionally filters which chips are included.\n */\n async getDrawers(filter: DrawerHarnessFilters = {}): Promise<MatDrawerHarness[]> {\n return this.locatorForAll(MatDrawerHarness.with(filter))();\n }\n\n /** Gets the element that has the container's content. */\n async getContent(): Promise<MatDrawerContentHarness> {\n return this.locatorFor(MatDrawerContentHarness)();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BaseHarnessFilters} from '@angular/cdk/testing';\n\n/** A set of criteria that can be used to filter a list of `MatDrawerHarness` instances. */\nexport interface DrawerHarnessFilters extends BaseHarnessFilters {\n /** Only find instances whose side is the given value. */\n position?: 'start' | 'end';\n}\n\n/** A set of criteria that can be used to filter a list of `MatDrawerContainerHarness` instances. */\nexport interface DrawerContainerHarnessFilters extends BaseHarnessFilters {}\n\n/** A set of criteria that can be used to filter a list of `MatDrawerContentHarness` instances. */\nexport interface DrawerContentHarnessFilters extends BaseHarnessFilters {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ContentContainerComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {DrawerContentHarnessFilters} from './drawer-harness-filters';\n\n/** Harness for interacting with a standard mat-sidenav-content in tests. */\nexport class MatSidenavContentHarness extends ContentContainerComponentHarness<string> {\n /** The selector for the host element of a `MatSidenavContent` instance. */\n static hostSelector = '.mat-sidenav-content';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatSidenavContentHarness` that\n * meets certain criteria.\n * @param options Options for filtering which sidenav content instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: DrawerContentHarnessFilters = {}):\n HarnessPredicate<MatSidenavContentHarness> {\n return new HarnessPredicate(MatSidenavContentHarness, options);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatDrawerHarnessBase} from './drawer-harness';\nimport {DrawerHarnessFilters} from './drawer-harness-filters';\n\n/** Harness for interacting with a standard mat-sidenav in tests. */\nexport class MatSidenavHarness extends MatDrawerHarnessBase {\n /** The selector for the host element of a `MatSidenav` instance. */\n static hostSelector = '.mat-sidenav';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatSidenavHarness` that meets\n * certain criteria.\n * @param options Options for filtering which sidenav instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: DrawerHarnessFilters = {}): HarnessPredicate<MatSidenavHarness> {\n return new HarnessPredicate(MatSidenavHarness, options)\n .addOption('position', options.position,\n async (harness, position) => (await harness.getPosition()) === position);\n }\n\n /** Whether the sidenav is fixed in the viewport. */\n async isFixedInViewport(): Promise<boolean> {\n return (await this.host()).hasClass('mat-sidenav-fixed');\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ContentContainerComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {DrawerContainerHarnessFilters, DrawerHarnessFilters} from './drawer-harness-filters';\nimport {MatSidenavContentHarness} from './sidenav-content-harness';\nimport {MatSidenavHarness} from './sidenav-harness';\n\n/** Harness for interacting with a standard mat-sidenav-container in tests. */\nexport class MatSidenavContainerHarness extends ContentContainerComponentHarness<string> {\n /** The selector for the host element of a `MatSidenavContainer` instance. */\n static hostSelector = '.mat-sidenav-container';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatSidenavContainerHarness` that\n * meets certain criteria.\n * @param options Options for filtering which container instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: DrawerContainerHarnessFilters = {}):\n HarnessPredicate<MatSidenavContainerHarness> {\n return new HarnessPredicate(MatSidenavContainerHarness, options);\n }\n\n /**\n * Gets sidenavs that match particular criteria within the container.\n * @param filter Optionally filters which chips are included.\n */\n async getSidenavs(filter: DrawerHarnessFilters = {}): Promise<MatSidenavHarness[]> {\n return this.locatorForAll(MatSidenavHarness.with(filter))();\n }\n\n /** Gets the element that has the container's content. */\n async getContent(): Promise<MatSidenavContentHarness> {\n return this.locatorFor(MatSidenavContentHarness)();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport {MatDrawerHarness} from './drawer-harness';\nexport * from './drawer-container-harness';\nexport * from './drawer-content-harness';\nexport * from './drawer-harness-filters';\nexport * from './sidenav-container-harness';\nexport * from './sidenav-content-harness';\nexport * from './sidenav-harness';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidenav.js","sources":["../../../../../../src/material/sidenav/drawer-animations.ts","../../../../../../src/material/sidenav/drawer.ts","../../../../../../src/material/sidenav/sidenav.ts","../../../../../../src/material/sidenav/sidenav-module.ts","../../../../../../src/material/sidenav/public-api.ts","../../../../../../src/material/sidenav/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nexport const matDrawerAnimations: {\n readonly transformDrawer: AnimationTriggerMetadata;\n} = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void',\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n ])\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {AnimationEvent} from '@angular/animations';\nimport {FocusMonitor, FocusOrigin, FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {Platform} from '@angular/cdk/platform';\nimport {CdkScrollable, ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n HostListener,\n HostBinding,\n} from '@angular/core';\nimport {fromEvent, merge, Observable, Subject} from 'rxjs';\nimport {\n debounceTime,\n filter,\n map,\n startWith,\n take,\n takeUntil,\n distinctUntilChanged,\n mapTo,\n} from 'rxjs/operators';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nexport function throwMatDuplicatedDrawerError(position: string) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n\n\n/** Result of the toggle promise that indicates the state of the drawer. */\nexport type MatDrawerToggleResult = 'open' | 'close';\n\n/** Drawer and SideNav display modes. */\nexport type MatDrawerMode = 'over' | 'push' | 'side';\n\n/** Configures whether drawers should use auto sizing by default. */\nexport const MAT_DRAWER_DEFAULT_AUTOSIZE =\n new InjectionToken<boolean>('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n });\n\n\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nexport const MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n\n/** @docs-private */\nexport function MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY(): boolean {\n return false;\n}\n\n@Component({\n selector: 'mat-drawer-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawerContent extends CdkScrollable implements AfterContentInit {\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n @Inject(forwardRef(() => MatDrawerContainer)) public _container: MatDrawerContainer,\n elementRef: ElementRef<HTMLElement>,\n scrollDispatcher: ScrollDispatcher,\n ngZone: NgZone) {\n super(elementRef, scrollDispatcher, ngZone);\n }\n\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n\n\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\n@Component({\n selector: 'mat-drawer',\n exportAs: 'matDrawer',\n templateUrl: 'drawer.html',\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n 'tabIndex': '-1',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestroy {\n private _focusTrap: FocusTrap;\n private _elementFocusedBeforeDrawerWasOpened: HTMLElement | null = null;\n\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n private _enableAnimations = false;\n\n /** The side that the drawer is attached to. */\n @Input()\n get position(): 'start' | 'end' { return this._position; }\n set position(value: 'start' | 'end') {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n private _position: 'start' | 'end' = 'start';\n\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n @Input()\n get mode(): MatDrawerMode { return this._mode; }\n set mode(value: MatDrawerMode) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n private _mode: MatDrawerMode = 'over';\n\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n @Input()\n get disableClose(): boolean { return this._disableClose; }\n set disableClose(value: boolean) { this._disableClose = coerceBooleanProperty(value); }\n private _disableClose: boolean = false;\n\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n */\n @Input()\n get autoFocus(): boolean {\n const value = this._autoFocus;\n\n // Note that usually we disable auto focusing in `side` mode, because we don't know how the\n // sidenav is being used, but in some cases it still makes sense to do it. If the consumer\n // explicitly enabled `autoFocus`, we take it as them always wanting to enable it.\n return value == null ? this.mode !== 'side' : value;\n }\n set autoFocus(value: boolean) { this._autoFocus = coerceBooleanProperty(value); }\n private _autoFocus: boolean | undefined;\n\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n @Input()\n get opened(): boolean { return this._opened; }\n set opened(value: boolean) { this.toggle(coerceBooleanProperty(value)); }\n private _opened: boolean = false;\n\n /** How the sidenav was opened (keypress, mouse click etc.) */\n private _openedVia: FocusOrigin | null;\n\n /** Emits whenever the drawer has started animating. */\n _animationStarted = new Subject<AnimationEvent>();\n\n /** Emits whenever the drawer is done animating. */\n _animationEnd = new Subject<AnimationEvent>();\n\n /** Current state of the sidenav animation. */\n // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator\n // metadata is not inherited by child classes, instead the host binding data is defined in a way\n // that can be inherited.\n // tslint:disable:no-host-decorator-in-concrete\n @HostBinding('@transform')\n _animationState: 'open-instant' | 'open' | 'void' = 'void';\n\n /** Event emitted when the drawer open state is changed. */\n @Output() readonly openedChange: EventEmitter<boolean> =\n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter<boolean>(/* isAsync */true);\n\n /** Event emitted when the drawer has been opened. */\n @Output('opened')\n _openedStream = this.openedChange.pipe(filter(o => o), map(() => {}));\n\n /** Event emitted when the drawer has started opening. */\n @Output()\n readonly openedStart: Observable<void> = this._animationStarted.pipe(\n filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0),\n mapTo(undefined)\n );\n\n /** Event emitted when the drawer has been closed. */\n @Output('closed')\n _closedStream = this.openedChange.pipe(filter(o => !o), map(() => {}));\n\n /** Event emitted when the drawer has started closing. */\n @Output()\n readonly closedStart: Observable<void> = this._animationStarted.pipe(\n filter(e => e.fromState !== e.toState && e.toState === 'void'),\n mapTo(undefined)\n );\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n @Output('positionChanged') onPositionChanged: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n readonly _modeChanged = new Subject<void>();\n\n constructor(private _elementRef: ElementRef<HTMLElement>,\n private _focusTrapFactory: FocusTrapFactory,\n private _focusMonitor: FocusMonitor,\n private _platform: Platform,\n private _ngZone: NgZone,\n @Optional() @Inject(DOCUMENT) private _doc: any,\n @Optional() @Inject(MAT_DRAWER_CONTAINER) public _container?: MatDrawerContainer) {\n\n this.openedChange.subscribe((opened: boolean) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement as HTMLElement;\n }\n\n this._takeFocus();\n } else if (this._isFocusWithinDrawer()) {\n this._restoreFocus();\n }\n });\n\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n (fromEvent(this._elementRef.nativeElement, 'keydown') as Observable<KeyboardEvent>).pipe(\n filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }),\n takeUntil(this._destroyed)\n ).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe((event: AnimationEvent) => {\n const {fromState, toState} = event;\n\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n private _takeFocus() {\n if (!this.autoFocus || !this._focusTrap) {\n return;\n }\n\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If there were no focusable elements, focus the sidenav itself so the keyboard navigation\n // still works. We need to check that `focus` is a function due to Universal.\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n private _restoreFocus() {\n if (!this.autoFocus) {\n return;\n }\n\n // Note that we don't check via `instanceof HTMLElement` so that we can cover SVGs as well.\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, this._openedVia);\n } else {\n this._elementRef.nativeElement.blur();\n }\n\n this._elementFocusedBeforeDrawerWasOpened = null;\n this._openedVia = null;\n }\n\n /** Whether focus is currently within the drawer. */\n private _isFocusWithinDrawer(): boolean {\n const activeEl = this._doc?.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n }\n\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia?: FocusOrigin): Promise<MatDrawerToggleResult> {\n return this.toggle(true, openedVia);\n }\n\n /** Close the drawer. */\n close(): Promise<MatDrawerToggleResult> {\n return this.toggle(false);\n }\n\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick(): Promise<MatDrawerToggleResult> {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurring of the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true);\n }\n\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen: boolean = !this.opened, openedVia?: FocusOrigin)\n : Promise<MatDrawerToggleResult> {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n return this._setOpen(\n isOpen, /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), openedVia);\n }\n\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param openedVia Focus origin that can be optionally set when opening a drawer. The\n * origin will be used later when focus is restored on drawer close.\n */\n private _setOpen(isOpen: boolean, restoreFocus: boolean, openedVia: FocusOrigin = 'program')\n : Promise<MatDrawerToggleResult> {\n this._opened = isOpen;\n\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n this._openedVia = openedVia;\n } else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus();\n }\n }\n\n this._updateFocusTrapState();\n\n return new Promise<MatDrawerToggleResult>(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n\n _getWidth(): number {\n return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n }\n\n /** Updates the enabled state of the focus trap. */\n private _updateFocusTrapState() {\n if (this._focusTrap) {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n this._focusTrap.enabled = this.opened && this.mode !== 'side';\n }\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('@transform.start', ['$event'])\n _animationStartListener(event: AnimationEvent) {\n this._animationStarted.next(event);\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('@transform.done', ['$event'])\n _animationDoneListener(event: AnimationEvent) {\n this._animationEnd.next(event);\n }\n\n static ngAcceptInputType_disableClose: BooleanInput;\n static ngAcceptInputType_autoFocus: BooleanInput;\n static ngAcceptInputType_opened: BooleanInput;\n}\n\n\n/**\n * `<mat-drawer-container>` component.\n *\n * This is the parent component to one or two `<mat-drawer>`s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\n@Component({\n selector: 'mat-drawer-container',\n exportAs: 'matDrawerContainer',\n templateUrl: 'drawer-container.html',\n styleUrls: ['drawer.css'],\n host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }]\n})\nexport class MatDrawerContainer implements AfterContentInit, DoCheck, OnDestroy {\n /** All drawers in the container. Includes drawers from inside nested containers. */\n @ContentChildren(MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n })\n _allDrawers: QueryList<MatDrawer>;\n\n /** Drawers that belong to this container. */\n _drawers = new QueryList<MatDrawer>();\n\n @ContentChild(MatDrawerContent) _content: MatDrawerContent;\n @ViewChild(MatDrawerContent) _userContent: MatDrawerContent;\n\n /** The drawer child with the `start` position. */\n get start(): MatDrawer | null { return this._start; }\n\n /** The drawer child with the `end` position. */\n get end(): MatDrawer | null { return this._end; }\n\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n @Input()\n get autosize(): boolean { return this._autosize; }\n set autosize(value: boolean) { this._autosize = coerceBooleanProperty(value); }\n private _autosize: boolean;\n\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n @Input()\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n\n return this._backdropOverride;\n }\n set hasBackdrop(value: any) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n _backdropOverride: boolean | null;\n\n /** Event emitted when the drawer backdrop is clicked. */\n @Output() readonly backdropClick: EventEmitter<void> = new EventEmitter<void>();\n\n /** The drawer at the start/end position, independent of direction. */\n private _start: MatDrawer | null;\n private _end: MatDrawer | null;\n\n /**\n * The drawer at the left/right. When direction changes, these will change as well.\n * They're used as aliases for the above to set the left/right style properly.\n * In LTR, _left == _start and _right == _end.\n * In RTL, _left == _end and _right == _start.\n */\n private _left: MatDrawer | null;\n private _right: MatDrawer | null;\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n private readonly _doCheckSubject = new Subject<void>();\n\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n _contentMargins: {left: number|null, right: number|null} = {left: null, right: null};\n\n readonly _contentMarginChanges = new Subject<{left: number|null, right: number|null}>();\n\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable(): CdkScrollable {\n return this._userContent || this._content;\n }\n\n constructor(@Optional() private _dir: Directionality,\n private _element: ElementRef<HTMLElement>,\n private _ngZone: NgZone,\n private _changeDetectorRef: ChangeDetectorRef,\n viewportRuler: ViewportRuler,\n @Inject(MAT_DRAWER_DEFAULT_AUTOSIZE) defaultAutosize = false,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n\n this._autosize = defaultAutosize;\n }\n\n ngAfterContentInit() {\n this._allDrawers.changes\n .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n .subscribe((drawer: QueryList<MatDrawer>) => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n\n this._drawers.forEach((drawer: MatDrawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n\n this._changeDetectorRef.markForCheck();\n });\n\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject.pipe(\n debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)\n ).subscribe(() => this.updateContentMargins());\n });\n }\n\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Calls `open` of both start and end drawers */\n open(): void {\n this._drawers.forEach(drawer => drawer.open());\n }\n\n /** Calls `close` of both start and end drawers */\n close(): void {\n this._drawers.forEach(drawer => drawer.close());\n }\n\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n } else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n } else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null!;\n right = right || null!;\n\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = {left, right};\n\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n private _watchDrawerToggle(drawer: MatDrawer): void {\n drawer._animationStarted.pipe(\n filter((event: AnimationEvent) => event.fromState !== event.toState),\n takeUntil(this._drawers.changes),\n )\n .subscribe((event: AnimationEvent) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() =>\n this._setContainerClass(drawer.opened));\n }\n }\n\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n private _watchDrawerPosition(drawer: MatDrawer): void {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n\n /** Subscribes to changes in drawer mode so we can run change detection. */\n private _watchDrawerMode(drawer: MatDrawer): void {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n private _setContainerClass(isAdd: boolean): void {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n\n if (isAdd) {\n classList.add(className);\n } else {\n classList.remove(className);\n }\n }\n\n /** Validate the state of the drawer children components. */\n private _validateDrawers() {\n this._start = this._end = null;\n\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n } else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n\n this._right = this._left = null;\n\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n } else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n\n /** Whether the container is being pushed to the side by one of the drawers. */\n private _isPushed() {\n return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over');\n }\n\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer!._closeViaBackdropClick());\n }\n\n _isShowingBackdrop(): boolean {\n return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));\n }\n\n private _canHaveBackdrop(drawer: MatDrawer): boolean {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n\n private _isDrawerOpen(drawer: MatDrawer | null): drawer is MatDrawer {\n return drawer != null && drawer.opened;\n }\n\n static ngAcceptInputType_autosize: BooleanInput;\n static ngAcceptInputType_hasBackdrop: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n forwardRef,\n Inject,\n Input,\n ViewEncapsulation,\n QueryList,\n ElementRef,\n NgZone,\n} from '@angular/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent, MAT_DRAWER_CONTAINER} from './drawer';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {\n BooleanInput,\n coerceBooleanProperty,\n coerceNumberProperty,\n NumberInput\n} from '@angular/cdk/coercion';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\n\n\n@Component({\n selector: 'mat-sidenav-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenavContent extends MatDrawerContent {\n constructor(\n changeDetectorRef: ChangeDetectorRef,\n @Inject(forwardRef(() => MatSidenavContainer)) container: MatSidenavContainer,\n elementRef: ElementRef<HTMLElement>,\n scrollDispatcher: ScrollDispatcher,\n ngZone: NgZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\n\n\n@Component({\n selector: 'mat-sidenav',\n exportAs: 'matSidenav',\n templateUrl: 'drawer.html',\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenav extends MatDrawer {\n /** Whether the sidenav is fixed in the viewport. */\n @Input()\n get fixedInViewport(): boolean { return this._fixedInViewport; }\n set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\n private _fixedInViewport = false;\n\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n @Input()\n get fixedTopGap(): number { return this._fixedTopGap; }\n set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\n private _fixedTopGap = 0;\n\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n @Input()\n get fixedBottomGap(): number { return this._fixedBottomGap; }\n set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n private _fixedBottomGap = 0;\n\n static ngAcceptInputType_fixedInViewport: BooleanInput;\n static ngAcceptInputType_fixedTopGap: NumberInput;\n static ngAcceptInputType_fixedBottomGap: NumberInput;\n}\n\n\n@Component({\n selector: 'mat-sidenav-container',\n exportAs: 'matSidenavContainer',\n templateUrl: 'sidenav-container.html',\n styleUrls: ['drawer.css'],\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }]\n\n})\nexport class MatSidenavContainer extends MatDrawerContainer {\n @ContentChildren(MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n })\n _allDrawers: QueryList<MatSidenav>;\n\n @ContentChild(MatSidenavContent) _content: MatSidenavContent;\n static ngAcceptInputType_hasBackdrop: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent} from './drawer';\nimport {MatSidenav, MatSidenavContainer, MatSidenavContent} from './sidenav';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ],\n exports: [\n CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n})\nexport class MatSidenavModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './sidenav-module';\nexport {\n throwMatDuplicatedDrawerError,\n MatDrawerToggleResult,\n MAT_DRAWER_DEFAULT_AUTOSIZE,\n MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n MatDrawerContent,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerMode,\n} from './drawer';\nexport * from './sidenav';\nexport * from './drawer-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MAT_DRAWER_CONTAINER as ɵangular_material_src_material_sidenav_sidenav_a} from './drawer';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidenav.js","sources":["../../../../../../src/material/sidenav/drawer-animations.ts","../../../../../../src/material/sidenav/drawer.ts","../../../../../../src/material/sidenav/sidenav.ts","../../../../../../src/material/sidenav/sidenav-module.ts","../../../../../../src/material/sidenav/public-api.ts","../../../../../../src/material/sidenav/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nexport const matDrawerAnimations: {\n readonly transformDrawer: AnimationTriggerMetadata;\n} = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void',\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n ])\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {AnimationEvent} from '@angular/animations';\nimport {FocusMonitor, FocusOrigin, FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {Platform} from '@angular/cdk/platform';\nimport {CdkScrollable, ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n HostListener,\n HostBinding,\n} from '@angular/core';\nimport {fromEvent, merge, Observable, Subject} from 'rxjs';\nimport {\n debounceTime,\n filter,\n map,\n startWith,\n take,\n takeUntil,\n distinctUntilChanged,\n mapTo,\n} from 'rxjs/operators';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nexport function throwMatDuplicatedDrawerError(position: string) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n\n\n/** Result of the toggle promise that indicates the state of the drawer. */\nexport type MatDrawerToggleResult = 'open' | 'close';\n\n/** Drawer and SideNav display modes. */\nexport type MatDrawerMode = 'over' | 'push' | 'side';\n\n/** Configures whether drawers should use auto sizing by default. */\nexport const MAT_DRAWER_DEFAULT_AUTOSIZE =\n new InjectionToken<boolean>('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n });\n\n\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nexport const MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n\n/** @docs-private */\nexport function MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY(): boolean {\n return false;\n}\n\n@Component({\n selector: 'mat-drawer-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawerContent extends CdkScrollable implements AfterContentInit {\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n @Inject(forwardRef(() => MatDrawerContainer)) public _container: MatDrawerContainer,\n elementRef: ElementRef<HTMLElement>,\n scrollDispatcher: ScrollDispatcher,\n ngZone: NgZone) {\n super(elementRef, scrollDispatcher, ngZone);\n }\n\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n\n\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\n@Component({\n selector: 'mat-drawer',\n exportAs: 'matDrawer',\n templateUrl: 'drawer.html',\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n 'tabIndex': '-1',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestroy {\n private _focusTrap: FocusTrap;\n private _elementFocusedBeforeDrawerWasOpened: HTMLElement | null = null;\n\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n private _enableAnimations = false;\n\n /** The side that the drawer is attached to. */\n @Input()\n get position(): 'start' | 'end' { return this._position; }\n set position(value: 'start' | 'end') {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n private _position: 'start' | 'end' = 'start';\n\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n @Input()\n get mode(): MatDrawerMode { return this._mode; }\n set mode(value: MatDrawerMode) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n private _mode: MatDrawerMode = 'over';\n\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n @Input()\n get disableClose(): boolean { return this._disableClose; }\n set disableClose(value: boolean) { this._disableClose = coerceBooleanProperty(value); }\n private _disableClose: boolean = false;\n\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n */\n @Input()\n get autoFocus(): boolean {\n const value = this._autoFocus;\n\n // Note that usually we disable auto focusing in `side` mode, because we don't know how the\n // sidenav is being used, but in some cases it still makes sense to do it. If the consumer\n // explicitly enabled `autoFocus`, we take it as them always wanting to enable it.\n return value == null ? this.mode !== 'side' : value;\n }\n set autoFocus(value: boolean) { this._autoFocus = coerceBooleanProperty(value); }\n private _autoFocus: boolean | undefined;\n\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n @Input()\n get opened(): boolean { return this._opened; }\n set opened(value: boolean) { this.toggle(coerceBooleanProperty(value)); }\n private _opened: boolean = false;\n\n /** How the sidenav was opened (keypress, mouse click etc.) */\n private _openedVia: FocusOrigin | null;\n\n /** Emits whenever the drawer has started animating. */\n _animationStarted = new Subject<AnimationEvent>();\n\n /** Emits whenever the drawer is done animating. */\n _animationEnd = new Subject<AnimationEvent>();\n\n /** Current state of the sidenav animation. */\n // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator\n // metadata is not inherited by child classes, instead the host binding data is defined in a way\n // that can be inherited.\n // tslint:disable:no-host-decorator-in-concrete\n @HostBinding('@transform')\n _animationState: 'open-instant' | 'open' | 'void' = 'void';\n\n /** Event emitted when the drawer open state is changed. */\n @Output() readonly openedChange: EventEmitter<boolean> =\n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter<boolean>(/* isAsync */true);\n\n /** Event emitted when the drawer has been opened. */\n @Output('opened')\n _openedStream = this.openedChange.pipe(filter(o => o), map(() => {}));\n\n /** Event emitted when the drawer has started opening. */\n @Output()\n readonly openedStart: Observable<void> = this._animationStarted.pipe(\n filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0),\n mapTo(undefined)\n );\n\n /** Event emitted when the drawer has been closed. */\n @Output('closed')\n _closedStream = this.openedChange.pipe(filter(o => !o), map(() => {}));\n\n /** Event emitted when the drawer has started closing. */\n @Output()\n readonly closedStart: Observable<void> = this._animationStarted.pipe(\n filter(e => e.fromState !== e.toState && e.toState === 'void'),\n mapTo(undefined)\n );\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n @Output('positionChanged') onPositionChanged: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n readonly _modeChanged = new Subject<void>();\n\n constructor(private _elementRef: ElementRef<HTMLElement>,\n private _focusTrapFactory: FocusTrapFactory,\n private _focusMonitor: FocusMonitor,\n private _platform: Platform,\n private _ngZone: NgZone,\n @Optional() @Inject(DOCUMENT) private _doc: any,\n @Optional() @Inject(MAT_DRAWER_CONTAINER) public _container?: MatDrawerContainer) {\n\n this.openedChange.subscribe((opened: boolean) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement as HTMLElement;\n }\n\n this._takeFocus();\n } else if (this._isFocusWithinDrawer()) {\n this._restoreFocus();\n }\n });\n\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n (fromEvent(this._elementRef.nativeElement, 'keydown') as Observable<KeyboardEvent>).pipe(\n filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }),\n takeUntil(this._destroyed)\n ).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe((event: AnimationEvent) => {\n const {fromState, toState} = event;\n\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n private _takeFocus() {\n if (!this.autoFocus || !this._focusTrap) {\n return;\n }\n\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If there were no focusable elements, focus the sidenav itself so the keyboard navigation\n // still works. We need to check that `focus` is a function due to Universal.\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n private _restoreFocus() {\n if (!this.autoFocus) {\n return;\n }\n\n // Note that we don't check via `instanceof HTMLElement` so that we can cover SVGs as well.\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, this._openedVia);\n } else {\n this._elementRef.nativeElement.blur();\n }\n\n this._elementFocusedBeforeDrawerWasOpened = null;\n this._openedVia = null;\n }\n\n /** Whether focus is currently within the drawer. */\n private _isFocusWithinDrawer(): boolean {\n const activeEl = this._doc?.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n }\n\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia?: FocusOrigin): Promise<MatDrawerToggleResult> {\n return this.toggle(true, openedVia);\n }\n\n /** Close the drawer. */\n close(): Promise<MatDrawerToggleResult> {\n return this.toggle(false);\n }\n\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick(): Promise<MatDrawerToggleResult> {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurring of the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true);\n }\n\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen: boolean = !this.opened, openedVia?: FocusOrigin)\n : Promise<MatDrawerToggleResult> {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n return this._setOpen(\n isOpen, /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), openedVia);\n }\n\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param openedVia Focus origin that can be optionally set when opening a drawer. The\n * origin will be used later when focus is restored on drawer close.\n */\n private _setOpen(isOpen: boolean, restoreFocus: boolean, openedVia: FocusOrigin = 'program')\n : Promise<MatDrawerToggleResult> {\n this._opened = isOpen;\n\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n this._openedVia = openedVia;\n } else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus();\n }\n }\n\n this._updateFocusTrapState();\n\n return new Promise<MatDrawerToggleResult>(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n\n _getWidth(): number {\n return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n }\n\n /** Updates the enabled state of the focus trap. */\n private _updateFocusTrapState() {\n if (this._focusTrap) {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n this._focusTrap.enabled = this.opened && this.mode !== 'side';\n }\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('@transform.start', ['$event'])\n _animationStartListener(event: AnimationEvent) {\n this._animationStarted.next(event);\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('@transform.done', ['$event'])\n _animationDoneListener(event: AnimationEvent) {\n this._animationEnd.next(event);\n }\n\n static ngAcceptInputType_disableClose: BooleanInput;\n static ngAcceptInputType_autoFocus: BooleanInput;\n static ngAcceptInputType_opened: BooleanInput;\n}\n\n\n/**\n * `<mat-drawer-container>` component.\n *\n * This is the parent component to one or two `<mat-drawer>`s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\n@Component({\n selector: 'mat-drawer-container',\n exportAs: 'matDrawerContainer',\n templateUrl: 'drawer-container.html',\n styleUrls: ['drawer.css'],\n host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }]\n})\nexport class MatDrawerContainer implements AfterContentInit, DoCheck, OnDestroy {\n /** All drawers in the container. Includes drawers from inside nested containers. */\n @ContentChildren(MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n })\n _allDrawers: QueryList<MatDrawer>;\n\n /** Drawers that belong to this container. */\n _drawers = new QueryList<MatDrawer>();\n\n @ContentChild(MatDrawerContent) _content: MatDrawerContent;\n @ViewChild(MatDrawerContent) _userContent: MatDrawerContent;\n\n /** The drawer child with the `start` position. */\n get start(): MatDrawer | null { return this._start; }\n\n /** The drawer child with the `end` position. */\n get end(): MatDrawer | null { return this._end; }\n\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n @Input()\n get autosize(): boolean { return this._autosize; }\n set autosize(value: boolean) { this._autosize = coerceBooleanProperty(value); }\n private _autosize: boolean;\n\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n @Input()\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n\n return this._backdropOverride;\n }\n set hasBackdrop(value: any) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n _backdropOverride: boolean | null;\n\n /** Event emitted when the drawer backdrop is clicked. */\n @Output() readonly backdropClick: EventEmitter<void> = new EventEmitter<void>();\n\n /** The drawer at the start/end position, independent of direction. */\n private _start: MatDrawer | null;\n private _end: MatDrawer | null;\n\n /**\n * The drawer at the left/right. When direction changes, these will change as well.\n * They're used as aliases for the above to set the left/right style properly.\n * In LTR, _left == _start and _right == _end.\n * In RTL, _left == _end and _right == _start.\n */\n private _left: MatDrawer | null;\n private _right: MatDrawer | null;\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n private readonly _doCheckSubject = new Subject<void>();\n\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n _contentMargins: {left: number|null, right: number|null} = {left: null, right: null};\n\n readonly _contentMarginChanges = new Subject<{left: number|null, right: number|null}>();\n\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable(): CdkScrollable {\n return this._userContent || this._content;\n }\n\n constructor(@Optional() private _dir: Directionality,\n private _element: ElementRef<HTMLElement>,\n private _ngZone: NgZone,\n private _changeDetectorRef: ChangeDetectorRef,\n viewportRuler: ViewportRuler,\n @Inject(MAT_DRAWER_DEFAULT_AUTOSIZE) defaultAutosize = false,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n\n this._autosize = defaultAutosize;\n }\n\n ngAfterContentInit() {\n this._allDrawers.changes\n .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n .subscribe((drawer: QueryList<MatDrawer>) => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n\n this._drawers.forEach((drawer: MatDrawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n\n this._changeDetectorRef.markForCheck();\n });\n\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject.pipe(\n debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)\n ).subscribe(() => this.updateContentMargins());\n });\n }\n\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Calls `open` of both start and end drawers */\n open(): void {\n this._drawers.forEach(drawer => drawer.open());\n }\n\n /** Calls `close` of both start and end drawers */\n close(): void {\n this._drawers.forEach(drawer => drawer.close());\n }\n\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n } else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n } else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null!;\n right = right || null!;\n\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = {left, right};\n\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n private _watchDrawerToggle(drawer: MatDrawer): void {\n drawer._animationStarted.pipe(\n filter((event: AnimationEvent) => event.fromState !== event.toState),\n takeUntil(this._drawers.changes),\n )\n .subscribe((event: AnimationEvent) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() =>\n this._setContainerClass(drawer.opened));\n }\n }\n\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n private _watchDrawerPosition(drawer: MatDrawer): void {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n\n /** Subscribes to changes in drawer mode so we can run change detection. */\n private _watchDrawerMode(drawer: MatDrawer): void {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n private _setContainerClass(isAdd: boolean): void {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n\n if (isAdd) {\n classList.add(className);\n } else {\n classList.remove(className);\n }\n }\n\n /** Validate the state of the drawer children components. */\n private _validateDrawers() {\n this._start = this._end = null;\n\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n } else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n\n this._right = this._left = null;\n\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n } else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n\n /** Whether the container is being pushed to the side by one of the drawers. */\n private _isPushed() {\n return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over');\n }\n\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer!._closeViaBackdropClick());\n }\n\n _isShowingBackdrop(): boolean {\n return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));\n }\n\n private _canHaveBackdrop(drawer: MatDrawer): boolean {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n\n private _isDrawerOpen(drawer: MatDrawer | null): drawer is MatDrawer {\n return drawer != null && drawer.opened;\n }\n\n static ngAcceptInputType_autosize: BooleanInput;\n static ngAcceptInputType_hasBackdrop: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n forwardRef,\n Inject,\n Input,\n ViewEncapsulation,\n QueryList,\n ElementRef,\n NgZone,\n} from '@angular/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent, MAT_DRAWER_CONTAINER} from './drawer';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {\n BooleanInput,\n coerceBooleanProperty,\n coerceNumberProperty,\n NumberInput\n} from '@angular/cdk/coercion';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\n\n\n@Component({\n selector: 'mat-sidenav-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenavContent extends MatDrawerContent {\n constructor(\n changeDetectorRef: ChangeDetectorRef,\n @Inject(forwardRef(() => MatSidenavContainer)) container: MatSidenavContainer,\n elementRef: ElementRef<HTMLElement>,\n scrollDispatcher: ScrollDispatcher,\n ngZone: NgZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\n\n\n@Component({\n selector: 'mat-sidenav',\n exportAs: 'matSidenav',\n templateUrl: 'drawer.html',\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenav extends MatDrawer {\n /** Whether the sidenav is fixed in the viewport. */\n @Input()\n get fixedInViewport(): boolean { return this._fixedInViewport; }\n set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\n private _fixedInViewport = false;\n\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n @Input()\n get fixedTopGap(): number { return this._fixedTopGap; }\n set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\n private _fixedTopGap = 0;\n\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n @Input()\n get fixedBottomGap(): number { return this._fixedBottomGap; }\n set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n private _fixedBottomGap = 0;\n\n static ngAcceptInputType_fixedInViewport: BooleanInput;\n static ngAcceptInputType_fixedTopGap: NumberInput;\n static ngAcceptInputType_fixedBottomGap: NumberInput;\n}\n\n\n@Component({\n selector: 'mat-sidenav-container',\n exportAs: 'matSidenavContainer',\n templateUrl: 'sidenav-container.html',\n styleUrls: ['drawer.css'],\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }]\n\n})\nexport class MatSidenavContainer extends MatDrawerContainer {\n @ContentChildren(MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n })\n _allDrawers: QueryList<MatSidenav>;\n\n @ContentChild(MatSidenavContent) _content: MatSidenavContent;\n static ngAcceptInputType_hasBackdrop: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent} from './drawer';\nimport {MatSidenav, MatSidenavContainer, MatSidenavContent} from './sidenav';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ],\n exports: [\n CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n})\nexport class MatSidenavModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './sidenav-module';\nexport {\n throwMatDuplicatedDrawerError,\n MatDrawerToggleResult,\n MAT_DRAWER_DEFAULT_AUTOSIZE,\n MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n MatDrawerContent,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerMode,\n} from './drawer';\nexport * from './sidenav';\nexport * from './drawer-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MAT_DRAWER_CONTAINER as ɵangular_material_src_material_sidenav_sidenav_a} from './drawer';"],"names":[],"mappings":"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"}
@@ -170,8 +170,13 @@ class MatSlideToggle extends _MatSlideToggleMixinBase {
170
170
  this._changeDetectorRef.markForCheck();
171
171
  }
172
172
  /** Focuses the slide-toggle. */
173
- focus(options) {
174
- this._focusMonitor.focusVia(this._inputElement, 'keyboard', options);
173
+ focus(options, origin) {
174
+ if (origin) {
175
+ this._focusMonitor.focusVia(this._inputElement, origin, options);
176
+ }
177
+ else {
178
+ this._inputElement.nativeElement.focus(options);
179
+ }
175
180
  }
176
181
  /** Toggles the checked state of the slide-toggle. */
177
182
  toggle() {