@angular/material 13.2.0-rc.0 → 13.2.3

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 (317) hide show
  1. package/core/datetime/index.d.ts +1 -2
  2. package/core/ripple/index.d.ts +1 -2
  3. package/datepicker/datepicker-base.d.ts +2 -0
  4. package/esm2020/autocomplete/autocomplete-module.mjs +5 -5
  5. package/esm2020/autocomplete/autocomplete-origin.mjs +7 -7
  6. package/esm2020/autocomplete/autocomplete-trigger.mjs +7 -7
  7. package/esm2020/autocomplete/autocomplete.mjs +7 -7
  8. package/esm2020/badge/badge-module.mjs +5 -5
  9. package/esm2020/badge/badge.mjs +4 -4
  10. package/esm2020/bottom-sheet/bottom-sheet-container.mjs +4 -4
  11. package/esm2020/bottom-sheet/bottom-sheet-module.mjs +5 -5
  12. package/esm2020/bottom-sheet/bottom-sheet.mjs +4 -4
  13. package/esm2020/button/button-module.mjs +5 -5
  14. package/esm2020/button/button.mjs +7 -7
  15. package/esm2020/button-toggle/button-toggle-module.mjs +5 -5
  16. package/esm2020/button-toggle/button-toggle.mjs +7 -7
  17. package/esm2020/card/card-module.mjs +5 -5
  18. package/esm2020/card/card.mjs +43 -43
  19. package/esm2020/checkbox/checkbox-module.mjs +9 -9
  20. package/esm2020/checkbox/checkbox-required-validator.mjs +4 -4
  21. package/esm2020/checkbox/checkbox.mjs +4 -4
  22. package/esm2020/chips/chip-input.mjs +4 -4
  23. package/esm2020/chips/chip-list.mjs +4 -4
  24. package/esm2020/chips/chip.mjs +13 -16
  25. package/esm2020/chips/chips-module.mjs +5 -5
  26. package/esm2020/core/common-behaviors/common-module.mjs +5 -5
  27. package/esm2020/core/datetime/index.mjs +9 -11
  28. package/esm2020/core/datetime/native-date-adapter.mjs +4 -4
  29. package/esm2020/core/error/error-options.mjs +7 -7
  30. package/esm2020/core/line/line.mjs +8 -8
  31. package/esm2020/core/option/index.mjs +5 -5
  32. package/esm2020/core/option/optgroup.mjs +7 -7
  33. package/esm2020/core/option/option.mjs +7 -7
  34. package/esm2020/core/ripple/index.mjs +6 -7
  35. package/esm2020/core/ripple/ripple.mjs +4 -4
  36. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox-module.mjs +5 -5
  37. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +4 -4
  38. package/esm2020/core/version.mjs +1 -1
  39. package/esm2020/datepicker/calendar-body.mjs +6 -6
  40. package/esm2020/datepicker/calendar.mjs +8 -8
  41. package/esm2020/datepicker/date-range-input-parts.mjs +10 -10
  42. package/esm2020/datepicker/date-range-input.mjs +4 -4
  43. package/esm2020/datepicker/date-range-picker.mjs +4 -4
  44. package/esm2020/datepicker/date-range-selection-strategy.mjs +4 -4
  45. package/esm2020/datepicker/date-selection-model.mjs +10 -10
  46. package/esm2020/datepicker/datepicker-actions.mjs +10 -10
  47. package/esm2020/datepicker/datepicker-base.mjs +9 -17
  48. package/esm2020/datepicker/datepicker-input-base.mjs +4 -4
  49. package/esm2020/datepicker/datepicker-input.mjs +4 -4
  50. package/esm2020/datepicker/datepicker-intl.mjs +4 -4
  51. package/esm2020/datepicker/datepicker-module.mjs +5 -5
  52. package/esm2020/datepicker/datepicker-toggle.mjs +7 -7
  53. package/esm2020/datepicker/datepicker.mjs +4 -4
  54. package/esm2020/datepicker/month-view.mjs +5 -5
  55. package/esm2020/datepicker/multi-year-view.mjs +4 -4
  56. package/esm2020/datepicker/testing/calendar-cell-harness.mjs +2 -2
  57. package/esm2020/datepicker/year-view.mjs +4 -4
  58. package/esm2020/dialog/dialog-container.mjs +7 -7
  59. package/esm2020/dialog/dialog-content-directives.mjs +13 -13
  60. package/esm2020/dialog/dialog-module.mjs +5 -5
  61. package/esm2020/dialog/dialog.mjs +7 -7
  62. package/esm2020/divider/divider-module.mjs +5 -5
  63. package/esm2020/divider/divider.mjs +4 -4
  64. package/esm2020/expansion/accordion.mjs +4 -4
  65. package/esm2020/expansion/expansion-module.mjs +5 -5
  66. package/esm2020/expansion/expansion-panel-content.mjs +4 -4
  67. package/esm2020/expansion/expansion-panel-header.mjs +11 -11
  68. package/esm2020/expansion/expansion-panel.mjs +7 -7
  69. package/esm2020/form-field/error.mjs +4 -4
  70. package/esm2020/form-field/form-field-control.mjs +4 -4
  71. package/esm2020/form-field/form-field-module.mjs +5 -5
  72. package/esm2020/form-field/form-field.mjs +4 -4
  73. package/esm2020/form-field/hint.mjs +4 -4
  74. package/esm2020/form-field/label.mjs +4 -4
  75. package/esm2020/form-field/placeholder.mjs +4 -4
  76. package/esm2020/form-field/prefix.mjs +4 -4
  77. package/esm2020/form-field/suffix.mjs +4 -4
  78. package/esm2020/grid-list/grid-list-module.mjs +5 -5
  79. package/esm2020/grid-list/grid-list.mjs +4 -4
  80. package/esm2020/grid-list/grid-tile.mjs +16 -16
  81. package/esm2020/icon/icon-module.mjs +5 -5
  82. package/esm2020/icon/icon-registry.mjs +4 -4
  83. package/esm2020/icon/icon.mjs +4 -4
  84. package/esm2020/icon/testing/fake-icon-registry.mjs +8 -8
  85. package/esm2020/input/input-module.mjs +5 -5
  86. package/esm2020/input/input.mjs +4 -4
  87. package/esm2020/list/list-module.mjs +5 -5
  88. package/esm2020/list/list.mjs +22 -22
  89. package/esm2020/list/selection-list.mjs +8 -8
  90. package/esm2020/menu/menu-content.mjs +7 -7
  91. package/esm2020/menu/menu-item.mjs +4 -4
  92. package/esm2020/menu/menu-module.mjs +5 -5
  93. package/esm2020/menu/menu-trigger.mjs +28 -12
  94. package/esm2020/menu/menu.mjs +18 -13
  95. package/esm2020/paginator/paginator-intl.mjs +4 -4
  96. package/esm2020/paginator/paginator-module.mjs +5 -5
  97. package/esm2020/paginator/paginator.mjs +7 -7
  98. package/esm2020/progress-bar/progress-bar-module.mjs +5 -5
  99. package/esm2020/progress-bar/progress-bar.mjs +4 -4
  100. package/esm2020/progress-spinner/progress-spinner-module.mjs +5 -5
  101. package/esm2020/progress-spinner/progress-spinner.mjs +7 -7
  102. package/esm2020/radio/radio-module.mjs +5 -5
  103. package/esm2020/radio/radio.mjs +13 -13
  104. package/esm2020/select/select-module.mjs +5 -5
  105. package/esm2020/select/select.mjs +10 -10
  106. package/esm2020/sidenav/drawer.mjs +10 -10
  107. package/esm2020/sidenav/sidenav-module.mjs +7 -8
  108. package/esm2020/sidenav/sidenav.mjs +10 -10
  109. package/esm2020/slide-toggle/slide-toggle-module.mjs +9 -9
  110. package/esm2020/slide-toggle/slide-toggle-required-validator.mjs +4 -4
  111. package/esm2020/slide-toggle/slide-toggle.mjs +5 -5
  112. package/esm2020/slider/slider-module.mjs +5 -5
  113. package/esm2020/slider/slider.mjs +14 -7
  114. package/esm2020/snack-bar/simple-snack-bar.mjs +4 -4
  115. package/esm2020/snack-bar/snack-bar-container.mjs +4 -4
  116. package/esm2020/snack-bar/snack-bar-module.mjs +5 -5
  117. package/esm2020/snack-bar/snack-bar.mjs +7 -7
  118. package/esm2020/sort/sort-header-intl.mjs +4 -4
  119. package/esm2020/sort/sort-header.mjs +4 -4
  120. package/esm2020/sort/sort-module.mjs +5 -5
  121. package/esm2020/sort/sort.mjs +4 -4
  122. package/esm2020/stepper/step-content.mjs +4 -4
  123. package/esm2020/stepper/step-header.mjs +4 -4
  124. package/esm2020/stepper/step-label.mjs +4 -4
  125. package/esm2020/stepper/stepper-button.mjs +7 -7
  126. package/esm2020/stepper/stepper-icon.mjs +4 -4
  127. package/esm2020/stepper/stepper-intl.mjs +4 -4
  128. package/esm2020/stepper/stepper-module.mjs +5 -5
  129. package/esm2020/stepper/stepper.mjs +16 -16
  130. package/esm2020/table/cell.mjs +22 -22
  131. package/esm2020/table/row.mjs +22 -22
  132. package/esm2020/table/table-module.mjs +5 -5
  133. package/esm2020/table/table.mjs +7 -7
  134. package/esm2020/table/text-column.mjs +4 -4
  135. package/esm2020/tabs/ink-bar.mjs +4 -4
  136. package/esm2020/tabs/paginated-tab-header.mjs +4 -4
  137. package/esm2020/tabs/tab-body.mjs +10 -10
  138. package/esm2020/tabs/tab-content.mjs +4 -4
  139. package/esm2020/tabs/tab-group.mjs +7 -7
  140. package/esm2020/tabs/tab-header.mjs +8 -8
  141. package/esm2020/tabs/tab-label-wrapper.mjs +4 -4
  142. package/esm2020/tabs/tab-label.mjs +4 -4
  143. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +17 -17
  144. package/esm2020/tabs/tab.mjs +4 -4
  145. package/esm2020/tabs/tabs-module.mjs +5 -5
  146. package/esm2020/toolbar/toolbar-module.mjs +5 -5
  147. package/esm2020/toolbar/toolbar.mjs +7 -7
  148. package/esm2020/tooltip/tooltip-module.mjs +5 -5
  149. package/esm2020/tooltip/tooltip.mjs +13 -13
  150. package/esm2020/tree/node.mjs +10 -10
  151. package/esm2020/tree/outlet.mjs +4 -4
  152. package/esm2020/tree/padding.mjs +4 -4
  153. package/esm2020/tree/toggle.mjs +4 -4
  154. package/esm2020/tree/tree-module.mjs +5 -5
  155. package/esm2020/tree/tree.mjs +4 -4
  156. package/fesm2015/autocomplete.mjs +22 -22
  157. package/fesm2015/autocomplete.mjs.map +1 -1
  158. package/fesm2015/badge.mjs +7 -7
  159. package/fesm2015/badge.mjs.map +1 -1
  160. package/fesm2015/bottom-sheet.mjs +10 -10
  161. package/fesm2015/bottom-sheet.mjs.map +1 -1
  162. package/fesm2015/button-toggle.mjs +10 -10
  163. package/fesm2015/button-toggle.mjs.map +1 -1
  164. package/fesm2015/button.mjs +10 -10
  165. package/fesm2015/button.mjs.map +1 -1
  166. package/fesm2015/card.mjs +46 -46
  167. package/fesm2015/card.mjs.map +1 -1
  168. package/fesm2015/checkbox.mjs +14 -14
  169. package/fesm2015/checkbox.mjs.map +1 -1
  170. package/fesm2015/chips.mjs +22 -25
  171. package/fesm2015/chips.mjs.map +1 -1
  172. package/fesm2015/core.mjs +61 -62
  173. package/fesm2015/core.mjs.map +1 -1
  174. package/fesm2015/datepicker/testing.mjs +1 -1
  175. package/fesm2015/datepicker/testing.mjs.map +1 -1
  176. package/fesm2015/datepicker.mjs +88 -96
  177. package/fesm2015/datepicker.mjs.map +1 -1
  178. package/fesm2015/dialog.mjs +28 -28
  179. package/fesm2015/dialog.mjs.map +1 -1
  180. package/fesm2015/divider.mjs +7 -7
  181. package/fesm2015/divider.mjs.map +1 -1
  182. package/fesm2015/expansion.mjs +26 -26
  183. package/fesm2015/expansion.mjs.map +1 -1
  184. package/fesm2015/form-field.mjs +28 -28
  185. package/fesm2015/form-field.mjs.map +1 -1
  186. package/fesm2015/grid-list.mjs +22 -22
  187. package/fesm2015/grid-list.mjs.map +1 -1
  188. package/fesm2015/icon/testing.mjs +7 -7
  189. package/fesm2015/icon/testing.mjs.map +1 -1
  190. package/fesm2015/icon.mjs +10 -10
  191. package/fesm2015/icon.mjs.map +1 -1
  192. package/fesm2015/input.mjs +7 -7
  193. package/fesm2015/input.mjs.map +1 -1
  194. package/fesm2015/list.mjs +32 -32
  195. package/fesm2015/list.mjs.map +1 -1
  196. package/fesm2015/menu.mjs +57 -35
  197. package/fesm2015/menu.mjs.map +1 -1
  198. package/fesm2015/paginator.mjs +13 -13
  199. package/fesm2015/paginator.mjs.map +1 -1
  200. package/fesm2015/progress-bar.mjs +7 -7
  201. package/fesm2015/progress-bar.mjs.map +1 -1
  202. package/fesm2015/progress-spinner.mjs +10 -10
  203. package/fesm2015/progress-spinner.mjs.map +1 -1
  204. package/fesm2015/radio.mjs +16 -16
  205. package/fesm2015/radio.mjs.map +1 -1
  206. package/fesm2015/select.mjs +13 -13
  207. package/fesm2015/select.mjs.map +1 -1
  208. package/fesm2015/sidenav.mjs +25 -26
  209. package/fesm2015/sidenav.mjs.map +1 -1
  210. package/fesm2015/slide-toggle.mjs +15 -15
  211. package/fesm2015/slide-toggle.mjs.map +1 -1
  212. package/fesm2015/slider.mjs +17 -10
  213. package/fesm2015/slider.mjs.map +1 -1
  214. package/fesm2015/snack-bar.mjs +16 -16
  215. package/fesm2015/snack-bar.mjs.map +1 -1
  216. package/fesm2015/sort.mjs +13 -13
  217. package/fesm2015/sort.mjs.map +1 -1
  218. package/fesm2015/stepper.mjs +40 -40
  219. package/fesm2015/stepper.mjs.map +1 -1
  220. package/fesm2015/table.mjs +55 -55
  221. package/fesm2015/table.mjs.map +1 -1
  222. package/fesm2015/tabs.mjs +60 -60
  223. package/fesm2015/tabs.mjs.map +1 -1
  224. package/fesm2015/toolbar.mjs +10 -10
  225. package/fesm2015/toolbar.mjs.map +1 -1
  226. package/fesm2015/tooltip.mjs +16 -16
  227. package/fesm2015/tooltip.mjs.map +1 -1
  228. package/fesm2015/tree.mjs +25 -25
  229. package/fesm2015/tree.mjs.map +1 -1
  230. package/fesm2020/autocomplete.mjs +22 -22
  231. package/fesm2020/autocomplete.mjs.map +1 -1
  232. package/fesm2020/badge.mjs +7 -7
  233. package/fesm2020/badge.mjs.map +1 -1
  234. package/fesm2020/bottom-sheet.mjs +10 -10
  235. package/fesm2020/bottom-sheet.mjs.map +1 -1
  236. package/fesm2020/button-toggle.mjs +10 -10
  237. package/fesm2020/button-toggle.mjs.map +1 -1
  238. package/fesm2020/button.mjs +10 -10
  239. package/fesm2020/button.mjs.map +1 -1
  240. package/fesm2020/card.mjs +46 -46
  241. package/fesm2020/card.mjs.map +1 -1
  242. package/fesm2020/checkbox.mjs +14 -14
  243. package/fesm2020/checkbox.mjs.map +1 -1
  244. package/fesm2020/chips.mjs +22 -25
  245. package/fesm2020/chips.mjs.map +1 -1
  246. package/fesm2020/core.mjs +61 -62
  247. package/fesm2020/core.mjs.map +1 -1
  248. package/fesm2020/datepicker/testing.mjs +1 -1
  249. package/fesm2020/datepicker/testing.mjs.map +1 -1
  250. package/fesm2020/datepicker.mjs +88 -96
  251. package/fesm2020/datepicker.mjs.map +1 -1
  252. package/fesm2020/dialog.mjs +28 -28
  253. package/fesm2020/dialog.mjs.map +1 -1
  254. package/fesm2020/divider.mjs +7 -7
  255. package/fesm2020/divider.mjs.map +1 -1
  256. package/fesm2020/expansion.mjs +26 -26
  257. package/fesm2020/expansion.mjs.map +1 -1
  258. package/fesm2020/form-field.mjs +28 -28
  259. package/fesm2020/form-field.mjs.map +1 -1
  260. package/fesm2020/grid-list.mjs +22 -22
  261. package/fesm2020/grid-list.mjs.map +1 -1
  262. package/fesm2020/icon/testing.mjs +7 -7
  263. package/fesm2020/icon/testing.mjs.map +1 -1
  264. package/fesm2020/icon.mjs +10 -10
  265. package/fesm2020/icon.mjs.map +1 -1
  266. package/fesm2020/input.mjs +7 -7
  267. package/fesm2020/input.mjs.map +1 -1
  268. package/fesm2020/list.mjs +32 -32
  269. package/fesm2020/list.mjs.map +1 -1
  270. package/fesm2020/menu.mjs +56 -35
  271. package/fesm2020/menu.mjs.map +1 -1
  272. package/fesm2020/paginator.mjs +13 -13
  273. package/fesm2020/paginator.mjs.map +1 -1
  274. package/fesm2020/progress-bar.mjs +7 -7
  275. package/fesm2020/progress-bar.mjs.map +1 -1
  276. package/fesm2020/progress-spinner.mjs +10 -10
  277. package/fesm2020/progress-spinner.mjs.map +1 -1
  278. package/fesm2020/radio.mjs +16 -16
  279. package/fesm2020/radio.mjs.map +1 -1
  280. package/fesm2020/select.mjs +13 -13
  281. package/fesm2020/select.mjs.map +1 -1
  282. package/fesm2020/sidenav.mjs +25 -26
  283. package/fesm2020/sidenav.mjs.map +1 -1
  284. package/fesm2020/slide-toggle.mjs +15 -15
  285. package/fesm2020/slide-toggle.mjs.map +1 -1
  286. package/fesm2020/slider.mjs +17 -10
  287. package/fesm2020/slider.mjs.map +1 -1
  288. package/fesm2020/snack-bar.mjs +16 -16
  289. package/fesm2020/snack-bar.mjs.map +1 -1
  290. package/fesm2020/sort.mjs +13 -13
  291. package/fesm2020/sort.mjs.map +1 -1
  292. package/fesm2020/stepper.mjs +40 -40
  293. package/fesm2020/stepper.mjs.map +1 -1
  294. package/fesm2020/table.mjs +55 -55
  295. package/fesm2020/table.mjs.map +1 -1
  296. package/fesm2020/tabs.mjs +60 -60
  297. package/fesm2020/tabs.mjs.map +1 -1
  298. package/fesm2020/toolbar.mjs +10 -10
  299. package/fesm2020/toolbar.mjs.map +1 -1
  300. package/fesm2020/tooltip.mjs +16 -16
  301. package/fesm2020/tooltip.mjs.map +1 -1
  302. package/fesm2020/tree.mjs +25 -25
  303. package/fesm2020/tree.mjs.map +1 -1
  304. package/menu/menu-trigger.d.ts +7 -1
  305. package/menu/menu.d.ts +8 -3
  306. package/package.json +2 -2
  307. package/schematics/ng-add/index.js +1 -1
  308. package/schematics/ng-add/index.mjs +1 -1
  309. package/schematics/ng-add/schema.json +17 -5
  310. package/schematics/ng-generate/address-form/schema.json +1 -1
  311. package/schematics/ng-generate/dashboard/schema.json +1 -1
  312. package/schematics/ng-generate/navigation/schema.json +1 -1
  313. package/schematics/ng-generate/table/schema.json +1 -1
  314. package/schematics/ng-generate/tree/schema.json +1 -1
  315. package/schematics/tsconfig.json +1 -4
  316. package/sidenav/sidenav-module.d.ts +2 -3
  317. package/tabs/_tabs-common.scss +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"list.mjs","sources":["../../../../../../src/material/list/list.ts","../../../../../../src/material/list/list.html","../../../../../../src/material/list/list-item.html","../../../../../../src/material/list/selection-list.ts","../../../../../../src/material/list/list-option.html","../../../../../../src/material/list/list-module.ts","../../../../../../src/material/list/public-api.ts","../../../../../../src/material/list/index.ts","../../../../../../src/material/list/list_public_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 {coerceBooleanProperty, BooleanInput} from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n Optional,\n QueryList,\n ViewEncapsulation,\n OnChanges,\n OnDestroy,\n ChangeDetectorRef,\n Input,\n InjectionToken,\n Inject,\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableRipple,\n MatLine,\n setLines,\n mixinDisableRipple,\n mixinDisabled,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n// Boilerplate for applying mixins to MatList.\n/** @docs-private */\nconst _MatListBase = mixinDisabled(mixinDisableRipple(class {}));\n\n// Boilerplate for applying mixins to MatListItem.\n/** @docs-private */\nconst _MatListItemMixinBase = mixinDisableRipple(class {});\n\n/**\n * Injection token that can be used to inject instances of `MatList`. It serves as\n * alternative token to the actual `MatList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_LIST = new InjectionToken<MatList>('MatList');\n\n/**\n * Injection token that can be used to inject instances of `MatNavList`. It serves as\n * alternative token to the actual `MatNavList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_NAV_LIST = new InjectionToken<MatNavList>('MatNavList');\n\n@Component({\n selector: 'mat-nav-list',\n exportAs: 'matNavList',\n host: {\n 'role': 'navigation',\n 'class': 'mat-nav-list mat-list-base',\n },\n templateUrl: 'list.html',\n styleUrls: ['list.css'],\n inputs: ['disableRipple', 'disabled'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{provide: MAT_NAV_LIST, useExisting: MatNavList}],\n})\nexport class MatNavList\n extends _MatListBase\n implements CanDisable, CanDisableRipple, OnChanges, OnDestroy\n{\n /** Emits when the state of the list changes. */\n readonly _stateChanges = new Subject<void>();\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\n\n@Component({\n selector: 'mat-list, mat-action-list',\n exportAs: 'matList',\n templateUrl: 'list.html',\n host: {\n 'class': 'mat-list mat-list-base',\n },\n styleUrls: ['list.css'],\n inputs: ['disableRipple', 'disabled'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{provide: MAT_LIST, useExisting: MatList}],\n})\nexport class MatList\n extends _MatListBase\n implements CanDisable, CanDisableRipple, OnChanges, OnDestroy\n{\n /** Emits when the state of the list changes. */\n readonly _stateChanges = new Subject<void>();\n\n constructor(private _elementRef: ElementRef<HTMLElement>) {\n super();\n\n if (this._getListType() === 'action-list') {\n _elementRef.nativeElement.classList.add('mat-action-list');\n }\n }\n\n _getListType(): 'list' | 'action-list' | null {\n const nodeName = this._elementRef.nativeElement.nodeName.toLowerCase();\n\n if (nodeName === 'mat-list') {\n return 'list';\n }\n\n if (nodeName === 'mat-action-list') {\n return 'action-list';\n }\n\n return null;\n }\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-list-avatar], [matListAvatar]',\n host: {'class': 'mat-list-avatar'},\n})\nexport class MatListAvatarCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-list-icon], [matListIcon]',\n host: {'class': 'mat-list-icon'},\n})\nexport class MatListIconCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-subheader], [matSubheader]',\n host: {'class': 'mat-subheader'},\n})\nexport class MatListSubheaderCssMatStyler {}\n\n/** An item within a Material Design list. */\n@Component({\n selector: 'mat-list-item, a[mat-list-item], button[mat-list-item]',\n exportAs: 'matListItem',\n host: {\n 'class': 'mat-list-item mat-focus-indicator',\n '[class.mat-list-item-disabled]': 'disabled',\n // @breaking-change 8.0.0 Remove `mat-list-item-avatar` in favor of `mat-list-item-with-avatar`.\n '[class.mat-list-item-avatar]': '_avatar || _icon',\n '[class.mat-list-item-with-avatar]': '_avatar || _icon',\n },\n inputs: ['disableRipple'],\n templateUrl: 'list-item.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatListItem\n extends _MatListItemMixinBase\n implements AfterContentInit, CanDisableRipple, OnDestroy\n{\n private _isInteractiveList: boolean = false;\n private _list?: MatNavList | MatList;\n private readonly _destroyed = new Subject<void>();\n\n @ContentChildren(MatLine, {descendants: true}) _lines: QueryList<MatLine>;\n @ContentChild(MatListAvatarCssMatStyler) _avatar: MatListAvatarCssMatStyler;\n @ContentChild(MatListIconCssMatStyler) _icon: MatListIconCssMatStyler;\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_NAV_LIST) navList?: MatNavList,\n @Optional() @Inject(MAT_LIST) list?: MatList,\n ) {\n super();\n this._isInteractiveList = !!(navList || (list && list._getListType() === 'action-list'));\n this._list = navList || list;\n\n // If no type attribute is specified for <button>, set it to \"button\".\n // If a type attribute is already specified, do nothing.\n const element = this._getHostElement();\n\n if (element.nodeName.toLowerCase() === 'button' && !element.hasAttribute('type')) {\n element.setAttribute('type', 'button');\n }\n\n if (this._list) {\n // React to changes in the state of the parent list since\n // some of the item's properties depend on it (e.g. `disableRipple`).\n this._list._stateChanges.pipe(takeUntil(this._destroyed)).subscribe(() => {\n _changeDetectorRef.markForCheck();\n });\n }\n }\n\n /** Whether the option is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || !!(this._list && this._list.disabled);\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled = false;\n\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Whether this list item should show a ripple effect when clicked. */\n _isRippleDisabled() {\n return (\n !this._isInteractiveList || this.disableRipple || !!(this._list && this._list.disableRipple)\n );\n }\n\n /** Retrieves the DOM element of the component host. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n}\n","<ng-content></ng-content>\n\n","<div class=\"mat-list-item-content\">\n <div class=\"mat-list-item-ripple\" mat-ripple\n [matRippleTrigger]=\"_getHostElement()\"\n [matRippleDisabled]=\"_isRippleDisabled()\">\n </div>\n\n <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\n </ng-content>\n\n <div class=\"mat-list-text\"><ng-content select=\"[mat-line], [matLine]\"></ng-content></div>\n\n <ng-content></ng-content>\n</div>\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 {FocusableOption, FocusKeyManager, FocusMonitor} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {A, DOWN_ARROW, ENTER, hasModifierKey, SPACE, UP_ARROW} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanDisableRipple,\n MatLine,\n mixinDisableRipple,\n setLines,\n ThemePalette,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\nimport {MatListAvatarCssMatStyler, MatListIconCssMatStyler} from './list';\n\nconst _MatSelectionListBase = mixinDisableRipple(class {});\nconst _MatListOptionBase = mixinDisableRipple(class {});\n\n/** @docs-private */\nexport const MAT_SELECTION_LIST_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSelectionList),\n multi: true,\n};\n\n/** Change event that is being fired whenever the selected state of an option changes. */\nexport class MatSelectionListChange {\n constructor(\n /** Reference to the selection list that emitted the event. */\n public source: MatSelectionList,\n /**\n * Reference to the option that has been changed.\n * @deprecated Use `options` instead, because some events may change more than one option.\n * @breaking-change 12.0.0\n */\n public option: MatListOption,\n /** Reference to the options that have been changed. */\n public options: MatListOption[],\n ) {}\n}\n\n/**\n * Type describing possible positions of a checkbox in a list option\n * with respect to the list item's text.\n */\nexport type MatListOptionCheckboxPosition = 'before' | 'after';\n\n/**\n * Component for list-options of selection-list. Each list-option can automatically\n * generate a checkbox and can put current item into the selectionModel of selection-list\n * if the current item is selected.\n */\n@Component({\n selector: 'mat-list-option',\n exportAs: 'matListOption',\n inputs: ['disableRipple'],\n host: {\n 'role': 'option',\n 'class': 'mat-list-item mat-list-option mat-focus-indicator',\n '(focus)': '_handleFocus()',\n '(blur)': '_handleBlur()',\n '(click)': '_handleClick()',\n '[class.mat-list-item-disabled]': 'disabled',\n '[class.mat-list-item-with-avatar]': '_avatar || _icon',\n // Manually set the \"primary\" or \"warn\" class if the color has been explicitly\n // set to \"primary\" or \"warn\". The pseudo checkbox picks up these classes for\n // its theme.\n '[class.mat-primary]': 'color === \"primary\"',\n // Even though accent is the default, we need to set this class anyway, because the list might\n // be placed inside a parent that has one of the other colors with a higher specificity.\n '[class.mat-accent]': 'color !== \"primary\" && color !== \"warn\"',\n '[class.mat-warn]': 'color === \"warn\"',\n '[class.mat-list-single-selected-option]': 'selected && !selectionList.multiple',\n '[attr.aria-selected]': 'selected',\n '[attr.aria-disabled]': 'disabled',\n '[attr.tabindex]': '-1',\n },\n templateUrl: 'list-option.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatListOption\n extends _MatListOptionBase\n implements AfterContentInit, OnDestroy, OnInit, FocusableOption, CanDisableRipple\n{\n private _selected = false;\n private _disabled = false;\n private _hasFocus = false;\n\n @ContentChild(MatListAvatarCssMatStyler) _avatar: MatListAvatarCssMatStyler;\n @ContentChild(MatListIconCssMatStyler) _icon: MatListIconCssMatStyler;\n @ContentChildren(MatLine, {descendants: true}) _lines: QueryList<MatLine>;\n\n /**\n * Emits when the selected state of the option has changed.\n * Use to facilitate two-data binding to the `selected` property.\n * @docs-private\n */\n @Output()\n readonly selectedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** DOM element containing the item's text. */\n @ViewChild('text') _text: ElementRef;\n\n /** Whether the label should appear before or after the checkbox. Defaults to 'after' */\n @Input() checkboxPosition: MatListOptionCheckboxPosition = 'after';\n\n /** Theme color of the list option. This sets the color of the checkbox. */\n @Input()\n get color(): ThemePalette {\n return this._color || this.selectionList.color;\n }\n set color(newValue: ThemePalette) {\n this._color = newValue;\n }\n private _color: ThemePalette;\n\n /**\n * This is set to true after the first OnChanges cycle so we don't clear the value of `selected`\n * in the first cycle.\n */\n private _inputsInitialized = false;\n /** Value of the option */\n @Input()\n get value(): any {\n return this._value;\n }\n set value(newValue: any) {\n if (\n this.selected &&\n !this.selectionList.compareWith(newValue, this.value) &&\n this._inputsInitialized\n ) {\n this.selected = false;\n }\n\n this._value = newValue;\n }\n private _value: any;\n\n /** Whether the option is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this.selectionList && this.selectionList.disabled);\n }\n set disabled(value: BooleanInput) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._changeDetector.markForCheck();\n }\n }\n\n /** Whether the option is selected. */\n @Input()\n get selected(): boolean {\n return this.selectionList.selectedOptions.isSelected(this);\n }\n set selected(value: BooleanInput) {\n const isSelected = coerceBooleanProperty(value);\n\n if (isSelected !== this._selected) {\n this._setSelected(isSelected);\n\n if (isSelected || this.selectionList.multiple) {\n this.selectionList._reportValueChange();\n }\n }\n }\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n private _changeDetector: ChangeDetectorRef,\n /** @docs-private */\n @Inject(forwardRef(() => MatSelectionList)) public selectionList: MatSelectionList,\n ) {\n super();\n }\n\n ngOnInit() {\n const list = this.selectionList;\n\n if (list._value && list._value.some(value => list.compareWith(value, this._value))) {\n this._setSelected(true);\n }\n\n const wasSelected = this._selected;\n\n // List options that are selected at initialization can't be reported properly to the form\n // control. This is because it takes some time until the selection-list knows about all\n // available options. Also it can happen that the ControlValueAccessor has an initial value\n // that should be used instead. Deferring the value change report to the next tick ensures\n // that the form control value is not being overwritten.\n Promise.resolve().then(() => {\n if (this._selected || wasSelected) {\n this.selected = true;\n this._changeDetector.markForCheck();\n }\n });\n this._inputsInitialized = true;\n }\n\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n\n ngOnDestroy(): void {\n if (this.selected) {\n // We have to delay this until the next tick in order\n // to avoid changed after checked errors.\n Promise.resolve().then(() => {\n this.selected = false;\n });\n }\n\n const hadFocus = this._hasFocus;\n const newActiveItem = this.selectionList._removeOptionFromList(this);\n\n // Only move focus if this option was focused at the time it was destroyed.\n if (hadFocus && newActiveItem) {\n newActiveItem.focus();\n }\n }\n\n /** Toggles the selection state of the option. */\n toggle(): void {\n this.selected = !this.selected;\n }\n\n /** Allows for programmatic focusing of the option. */\n focus(): void {\n this._element.nativeElement.focus();\n }\n\n /**\n * Returns the list item's text label. Implemented as a part of the FocusKeyManager.\n * @docs-private\n */\n getLabel() {\n return this._text ? this._text.nativeElement.textContent || '' : '';\n }\n\n /** Whether this list item should show a ripple effect when clicked. */\n _isRippleDisabled() {\n return this.disabled || this.disableRipple || this.selectionList.disableRipple;\n }\n\n _handleClick() {\n if (!this.disabled && (this.selectionList.multiple || !this.selected)) {\n this.toggle();\n\n // Emit a change event if the selected state of the option changed through user interaction.\n this.selectionList._emitChangeEvent([this]);\n }\n }\n\n _handleFocus() {\n this.selectionList._setFocusedOption(this);\n this._hasFocus = true;\n }\n\n _handleBlur() {\n this.selectionList._onTouched();\n this._hasFocus = false;\n }\n\n /** Retrieves the DOM element of the component host. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n\n /** Sets the selected state of the option. Returns whether the value has changed. */\n _setSelected(selected: boolean): boolean {\n if (selected === this._selected) {\n return false;\n }\n\n this._selected = selected;\n\n if (selected) {\n this.selectionList.selectedOptions.select(this);\n } else {\n this.selectionList.selectedOptions.deselect(this);\n }\n\n this.selectedChange.emit(selected);\n this._changeDetector.markForCheck();\n return true;\n }\n\n /**\n * Notifies Angular that the option needs to be checked in the next change detection run. Mainly\n * used to trigger an update of the list option if the disabled state of the selection list\n * changed.\n */\n _markForCheck() {\n this._changeDetector.markForCheck();\n }\n}\n\n/**\n * Material Design list component where each item is a selectable option. Behaves as a listbox.\n */\n@Component({\n selector: 'mat-selection-list',\n exportAs: 'matSelectionList',\n inputs: ['disableRipple'],\n host: {\n 'role': 'listbox',\n 'class': 'mat-selection-list mat-list-base',\n '(keydown)': '_keydown($event)',\n '[attr.aria-multiselectable]': 'multiple',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.tabindex]': '_tabIndex',\n },\n template: '<ng-content></ng-content>',\n styleUrls: ['list.css'],\n encapsulation: ViewEncapsulation.None,\n providers: [MAT_SELECTION_LIST_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatSelectionList\n extends _MatSelectionListBase\n implements CanDisableRipple, AfterContentInit, ControlValueAccessor, OnDestroy, OnChanges\n{\n private _multiple = true;\n private _contentInitialized = false;\n\n /** The FocusKeyManager which handles focus. */\n _keyManager: FocusKeyManager<MatListOption>;\n\n /** The option components contained within this selection-list. */\n @ContentChildren(MatListOption, {descendants: true}) options: QueryList<MatListOption>;\n\n /** Emits a change event whenever the selected state of an option changes. */\n @Output() readonly selectionChange: EventEmitter<MatSelectionListChange> =\n new EventEmitter<MatSelectionListChange>();\n\n /**\n * Tabindex of the selection list.\n * @breaking-change 11.0.0 Remove `tabIndex` input.\n */\n @Input() tabIndex: number = 0;\n\n /** Theme color of the selection list. This sets the checkbox color for all list options. */\n @Input() color: ThemePalette = 'accent';\n\n /**\n * Function used for comparing an option against the selected value when determining which\n * options should appear as selected. The first argument is the value of an options. The second\n * one is a value from the selected value. A boolean must be returned.\n */\n @Input() compareWith: (o1: any, o2: any) => boolean = (a1, a2) => a1 === a2;\n\n /** Whether the selection list is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n\n // The `MatSelectionList` and `MatListOption` are using the `OnPush` change detection\n // strategy. Therefore the options will not check for any changes if the `MatSelectionList`\n // changed its state. Since we know that a change to `disabled` property of the list affects\n // the state of the options, we manually mark each option for check.\n this._markOptionsForCheck();\n }\n private _disabled: boolean = false;\n\n /** Whether selection is limited to one or multiple items (default multiple). */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: BooleanInput) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._multiple) {\n if (this._contentInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error(\n 'Cannot change `multiple` mode of mat-selection-list after initialization.',\n );\n }\n\n this._multiple = newValue;\n this.selectedOptions = new SelectionModel(this._multiple, this.selectedOptions.selected);\n }\n }\n\n /** The currently selected options. */\n selectedOptions = new SelectionModel<MatListOption>(this._multiple);\n\n /** The tabindex of the selection list. */\n _tabIndex = -1;\n\n /** View to model callback that should be called whenever the selected options change. */\n private _onChange: (value: any) => void = (_: any) => {};\n\n /** Keeps track of the currently-selected value. */\n _value: string[] | null;\n\n /** Emits when the list has been destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** View to model callback that should be called if the list or its options lost focus. */\n _onTouched: () => void = () => {};\n\n /** Whether the list has been destroyed. */\n private _isDestroyed: boolean;\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n // @breaking-change 11.0.0 Remove `tabIndex` parameter.\n @Attribute('tabindex') tabIndex: string,\n private _changeDetector: ChangeDetectorRef,\n // @breaking-change 11.0.0 `_focusMonitor` parameter to become required.\n private _focusMonitor?: FocusMonitor,\n ) {\n super();\n }\n\n ngAfterContentInit(): void {\n this._contentInitialized = true;\n\n this._keyManager = new FocusKeyManager<MatListOption>(this.options)\n .withWrap()\n .withTypeAhead()\n .withHomeAndEnd()\n // Allow disabled items to be focusable. For accessibility reasons, there must be a way for\n // screenreader users, that allows reading the different options of the list.\n .skipPredicate(() => false)\n .withAllowedModifierKeys(['shiftKey']);\n\n if (this._value) {\n this._setOptionsFromValues(this._value);\n }\n\n // If the user attempts to tab out of the selection list, allow focus to escape.\n this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._allowFocusEscape();\n });\n\n // When the number of options change, update the tabindex of the selection list.\n this.options.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n this._updateTabIndex();\n });\n\n // Sync external changes to the model back to the options.\n this.selectedOptions.changed.pipe(takeUntil(this._destroyed)).subscribe(event => {\n if (event.added) {\n for (let item of event.added) {\n item.selected = true;\n }\n }\n\n if (event.removed) {\n for (let item of event.removed) {\n item.selected = false;\n }\n }\n });\n\n // @breaking-change 11.0.0 Remove null assertion once _focusMonitor is required.\n this._focusMonitor\n ?.monitor(this._element)\n .pipe(takeUntil(this._destroyed))\n .subscribe(origin => {\n if (origin === 'keyboard' || origin === 'program') {\n let toFocus = 0;\n for (let i = 0; i < this.options.length; i++) {\n if (this.options.get(i)?.selected) {\n toFocus = i;\n break;\n }\n }\n this._keyManager.setActiveItem(toFocus);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const disableRippleChanges = changes['disableRipple'];\n const colorChanges = changes['color'];\n\n if (\n (disableRippleChanges && !disableRippleChanges.firstChange) ||\n (colorChanges && !colorChanges.firstChange)\n ) {\n this._markOptionsForCheck();\n }\n }\n\n ngOnDestroy() {\n // @breaking-change 11.0.0 Remove null assertion once _focusMonitor is required.\n this._focusMonitor?.stopMonitoring(this._element);\n this._destroyed.next();\n this._destroyed.complete();\n this._isDestroyed = true;\n }\n\n /** Focuses the selection list. */\n focus(options?: FocusOptions) {\n this._element.nativeElement.focus(options);\n }\n\n /** Selects all of the options. Returns the options that changed as a result. */\n selectAll(): MatListOption[] {\n return this._setAllOptionsSelected(true);\n }\n\n /** Deselects all of the options. Returns the options that changed as a result. */\n deselectAll(): MatListOption[] {\n return this._setAllOptionsSelected(false);\n }\n\n /** Sets the focused option of the selection-list. */\n _setFocusedOption(option: MatListOption) {\n this._keyManager.updateActiveItem(option);\n }\n\n /**\n * Removes an option from the selection list and updates the active item.\n * @returns Currently-active item.\n */\n _removeOptionFromList(option: MatListOption): MatListOption | null {\n const optionIndex = this._getOptionIndex(option);\n\n if (optionIndex > -1 && this._keyManager.activeItemIndex === optionIndex) {\n // Check whether the option is the last item\n if (optionIndex > 0) {\n this._keyManager.updateActiveItem(optionIndex - 1);\n } else if (optionIndex === 0 && this.options.length > 1) {\n this._keyManager.updateActiveItem(Math.min(optionIndex + 1, this.options.length - 1));\n }\n }\n\n return this._keyManager.activeItem;\n }\n\n /** Passes relevant key presses to our key manager. */\n _keydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n const previousFocusIndex = manager.activeItemIndex;\n const hasModifier = hasModifierKey(event);\n\n switch (keyCode) {\n case SPACE:\n case ENTER:\n if (!hasModifier && !manager.isTyping()) {\n this._toggleFocusedOption();\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n }\n break;\n default:\n // The \"A\" key gets special treatment, because it's used for the \"select all\" functionality.\n if (\n keyCode === A &&\n this.multiple &&\n hasModifierKey(event, 'ctrlKey') &&\n !manager.isTyping()\n ) {\n const shouldSelect = this.options.some(option => !option.disabled && !option.selected);\n this._setAllOptionsSelected(shouldSelect, true, true);\n event.preventDefault();\n } else {\n manager.onKeydown(event);\n }\n }\n\n if (\n this.multiple &&\n (keyCode === UP_ARROW || keyCode === DOWN_ARROW) &&\n event.shiftKey &&\n manager.activeItemIndex !== previousFocusIndex\n ) {\n this._toggleFocusedOption();\n }\n }\n\n /** Reports a value change to the ControlValueAccessor */\n _reportValueChange() {\n // Stop reporting value changes after the list has been destroyed. This avoids\n // cases where the list might wrongly reset its value once it is removed, but\n // the form control is still live.\n if (this.options && !this._isDestroyed) {\n const value = this._getSelectedOptionValues();\n this._onChange(value);\n this._value = value;\n }\n }\n\n /** Emits a change event if the selected state of an option changed. */\n _emitChangeEvent(options: MatListOption[]) {\n this.selectionChange.emit(new MatSelectionListChange(this, options[0], options));\n }\n\n /** Implemented as part of ControlValueAccessor. */\n writeValue(values: string[]): void {\n this._value = values;\n\n if (this.options) {\n this._setOptionsFromValues(values || []);\n }\n }\n\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /** Sets the selected options based on the specified values. */\n private _setOptionsFromValues(values: string[]) {\n this.options.forEach(option => option._setSelected(false));\n\n values.forEach(value => {\n const correspondingOption = this.options.find(option => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n return option.selected ? false : this.compareWith(option.value, value);\n });\n\n if (correspondingOption) {\n correspondingOption._setSelected(true);\n }\n });\n }\n\n /** Returns the values of the selected options. */\n private _getSelectedOptionValues(): string[] {\n return this.options.filter(option => option.selected).map(option => option.value);\n }\n\n /** Toggles the state of the currently focused option if enabled. */\n private _toggleFocusedOption(): void {\n let focusedIndex = this._keyManager.activeItemIndex;\n\n if (focusedIndex != null && this._isValidIndex(focusedIndex)) {\n let focusedOption: MatListOption = this.options.toArray()[focusedIndex];\n\n if (focusedOption && !focusedOption.disabled && (this._multiple || !focusedOption.selected)) {\n focusedOption.toggle();\n\n // Emit a change event because the focused option changed its state through user\n // interaction.\n this._emitChangeEvent([focusedOption]);\n }\n }\n }\n\n /**\n * Sets the selected state on all of the options\n * and emits an event if anything changed.\n */\n private _setAllOptionsSelected(\n isSelected: boolean,\n skipDisabled?: boolean,\n isUserInput?: boolean,\n ): MatListOption[] {\n // Keep track of whether anything changed, because we only want to\n // emit the changed event when something actually changed.\n const changedOptions: MatListOption[] = [];\n\n this.options.forEach(option => {\n if ((!skipDisabled || !option.disabled) && option._setSelected(isSelected)) {\n changedOptions.push(option);\n }\n });\n\n if (changedOptions.length) {\n this._reportValueChange();\n\n if (isUserInput) {\n this._emitChangeEvent(changedOptions);\n }\n }\n\n return changedOptions;\n }\n\n /**\n * Utility to ensure all indexes are valid.\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of options.\n */\n private _isValidIndex(index: number): boolean {\n return index >= 0 && index < this.options.length;\n }\n\n /** Returns the index of the specified list option. */\n private _getOptionIndex(option: MatListOption): number {\n return this.options.toArray().indexOf(option);\n }\n\n /** Marks all the options to be checked in the next change detection run. */\n private _markOptionsForCheck() {\n if (this.options) {\n this.options.forEach(option => option._markForCheck());\n }\n }\n\n /**\n * Removes the tabindex from the selection list and resets it back afterwards, allowing the user\n * to tab out of it. This prevents the list from capturing focus and redirecting it back within\n * the list, creating a focus trap if it user tries to tab away.\n */\n private _allowFocusEscape() {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = 0;\n this._changeDetector.markForCheck();\n });\n }\n\n /** Updates the tabindex based upon if the selection list is empty. */\n private _updateTabIndex(): void {\n this._tabIndex = this.options.length === 0 ? -1 : 0;\n }\n}\n","<div class=\"mat-list-item-content\"\n [class.mat-list-item-content-reverse]=\"checkboxPosition == 'after'\">\n\n <div mat-ripple\n class=\"mat-list-item-ripple\"\n [matRippleTrigger]=\"_getHostElement()\"\n [matRippleDisabled]=\"_isRippleDisabled()\"></div>\n\n <mat-pseudo-checkbox\n *ngIf=\"selectionList.multiple\"\n [state]=\"selected ? 'checked' : 'unchecked'\"\n [disabled]=\"disabled\"></mat-pseudo-checkbox>\n\n <div class=\"mat-list-text\" #text><ng-content></ng-content></div>\n\n <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\n </ng-content>\n\n</div>\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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {\n MatCommonModule,\n MatLineModule,\n MatPseudoCheckboxModule,\n MatRippleModule,\n} from '@angular/material/core';\nimport {\n MatList,\n MatNavList,\n MatListAvatarCssMatStyler,\n MatListIconCssMatStyler,\n MatListItem,\n MatListSubheaderCssMatStyler,\n} from './list';\nimport {MatListOption, MatSelectionList} from './selection-list';\nimport {MatDividerModule} from '@angular/material/divider';\n\n@NgModule({\n imports: [MatLineModule, MatRippleModule, MatCommonModule, MatPseudoCheckboxModule, CommonModule],\n exports: [\n MatList,\n MatNavList,\n MatListItem,\n MatListAvatarCssMatStyler,\n MatLineModule,\n MatCommonModule,\n MatListIconCssMatStyler,\n MatListSubheaderCssMatStyler,\n MatPseudoCheckboxModule,\n MatSelectionList,\n MatListOption,\n MatDividerModule,\n ],\n declarations: [\n MatList,\n MatNavList,\n MatListItem,\n MatListAvatarCssMatStyler,\n MatListIconCssMatStyler,\n MatListSubheaderCssMatStyler,\n MatSelectionList,\n MatListOption,\n ],\n})\nexport class MatListModule {}\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 './list-module';\nexport * from './list';\nexport * from './selection-list';\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.mjs","sources":["../../../../../../src/material/list/list.ts","../../../../../../src/material/list/list.html","../../../../../../src/material/list/list-item.html","../../../../../../src/material/list/selection-list.ts","../../../../../../src/material/list/list-option.html","../../../../../../src/material/list/list-module.ts","../../../../../../src/material/list/public-api.ts","../../../../../../src/material/list/index.ts","../../../../../../src/material/list/list_public_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 {coerceBooleanProperty, BooleanInput} from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n Optional,\n QueryList,\n ViewEncapsulation,\n OnChanges,\n OnDestroy,\n ChangeDetectorRef,\n Input,\n InjectionToken,\n Inject,\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableRipple,\n MatLine,\n setLines,\n mixinDisableRipple,\n mixinDisabled,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n// Boilerplate for applying mixins to MatList.\n/** @docs-private */\nconst _MatListBase = mixinDisabled(mixinDisableRipple(class {}));\n\n// Boilerplate for applying mixins to MatListItem.\n/** @docs-private */\nconst _MatListItemMixinBase = mixinDisableRipple(class {});\n\n/**\n * Injection token that can be used to inject instances of `MatList`. It serves as\n * alternative token to the actual `MatList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_LIST = new InjectionToken<MatList>('MatList');\n\n/**\n * Injection token that can be used to inject instances of `MatNavList`. It serves as\n * alternative token to the actual `MatNavList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_NAV_LIST = new InjectionToken<MatNavList>('MatNavList');\n\n@Component({\n selector: 'mat-nav-list',\n exportAs: 'matNavList',\n host: {\n 'role': 'navigation',\n 'class': 'mat-nav-list mat-list-base',\n },\n templateUrl: 'list.html',\n styleUrls: ['list.css'],\n inputs: ['disableRipple', 'disabled'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{provide: MAT_NAV_LIST, useExisting: MatNavList}],\n})\nexport class MatNavList\n extends _MatListBase\n implements CanDisable, CanDisableRipple, OnChanges, OnDestroy\n{\n /** Emits when the state of the list changes. */\n readonly _stateChanges = new Subject<void>();\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\n\n@Component({\n selector: 'mat-list, mat-action-list',\n exportAs: 'matList',\n templateUrl: 'list.html',\n host: {\n 'class': 'mat-list mat-list-base',\n },\n styleUrls: ['list.css'],\n inputs: ['disableRipple', 'disabled'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{provide: MAT_LIST, useExisting: MatList}],\n})\nexport class MatList\n extends _MatListBase\n implements CanDisable, CanDisableRipple, OnChanges, OnDestroy\n{\n /** Emits when the state of the list changes. */\n readonly _stateChanges = new Subject<void>();\n\n constructor(private _elementRef: ElementRef<HTMLElement>) {\n super();\n\n if (this._getListType() === 'action-list') {\n _elementRef.nativeElement.classList.add('mat-action-list');\n }\n }\n\n _getListType(): 'list' | 'action-list' | null {\n const nodeName = this._elementRef.nativeElement.nodeName.toLowerCase();\n\n if (nodeName === 'mat-list') {\n return 'list';\n }\n\n if (nodeName === 'mat-action-list') {\n return 'action-list';\n }\n\n return null;\n }\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-list-avatar], [matListAvatar]',\n host: {'class': 'mat-list-avatar'},\n})\nexport class MatListAvatarCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-list-icon], [matListIcon]',\n host: {'class': 'mat-list-icon'},\n})\nexport class MatListIconCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-subheader], [matSubheader]',\n host: {'class': 'mat-subheader'},\n})\nexport class MatListSubheaderCssMatStyler {}\n\n/** An item within a Material Design list. */\n@Component({\n selector: 'mat-list-item, a[mat-list-item], button[mat-list-item]',\n exportAs: 'matListItem',\n host: {\n 'class': 'mat-list-item mat-focus-indicator',\n '[class.mat-list-item-disabled]': 'disabled',\n // @breaking-change 8.0.0 Remove `mat-list-item-avatar` in favor of `mat-list-item-with-avatar`.\n '[class.mat-list-item-avatar]': '_avatar || _icon',\n '[class.mat-list-item-with-avatar]': '_avatar || _icon',\n },\n inputs: ['disableRipple'],\n templateUrl: 'list-item.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatListItem\n extends _MatListItemMixinBase\n implements AfterContentInit, CanDisableRipple, OnDestroy\n{\n private _isInteractiveList: boolean = false;\n private _list?: MatNavList | MatList;\n private readonly _destroyed = new Subject<void>();\n\n @ContentChildren(MatLine, {descendants: true}) _lines: QueryList<MatLine>;\n @ContentChild(MatListAvatarCssMatStyler) _avatar: MatListAvatarCssMatStyler;\n @ContentChild(MatListIconCssMatStyler) _icon: MatListIconCssMatStyler;\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_NAV_LIST) navList?: MatNavList,\n @Optional() @Inject(MAT_LIST) list?: MatList,\n ) {\n super();\n this._isInteractiveList = !!(navList || (list && list._getListType() === 'action-list'));\n this._list = navList || list;\n\n // If no type attribute is specified for <button>, set it to \"button\".\n // If a type attribute is already specified, do nothing.\n const element = this._getHostElement();\n\n if (element.nodeName.toLowerCase() === 'button' && !element.hasAttribute('type')) {\n element.setAttribute('type', 'button');\n }\n\n if (this._list) {\n // React to changes in the state of the parent list since\n // some of the item's properties depend on it (e.g. `disableRipple`).\n this._list._stateChanges.pipe(takeUntil(this._destroyed)).subscribe(() => {\n _changeDetectorRef.markForCheck();\n });\n }\n }\n\n /** Whether the option is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || !!(this._list && this._list.disabled);\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled = false;\n\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Whether this list item should show a ripple effect when clicked. */\n _isRippleDisabled() {\n return (\n !this._isInteractiveList || this.disableRipple || !!(this._list && this._list.disableRipple)\n );\n }\n\n /** Retrieves the DOM element of the component host. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n}\n","<ng-content></ng-content>\n\n","<span class=\"mat-list-item-content\">\n <span class=\"mat-list-item-ripple\" mat-ripple\n [matRippleTrigger]=\"_getHostElement()\"\n [matRippleDisabled]=\"_isRippleDisabled()\">\n </span>\n\n <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\n </ng-content>\n\n <span class=\"mat-list-text\"><ng-content select=\"[mat-line], [matLine]\"></ng-content></span>\n\n <ng-content></ng-content>\n</span>\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 {FocusableOption, FocusKeyManager, FocusMonitor} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {A, DOWN_ARROW, ENTER, hasModifierKey, SPACE, UP_ARROW} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanDisableRipple,\n MatLine,\n mixinDisableRipple,\n setLines,\n ThemePalette,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\nimport {MatListAvatarCssMatStyler, MatListIconCssMatStyler} from './list';\n\nconst _MatSelectionListBase = mixinDisableRipple(class {});\nconst _MatListOptionBase = mixinDisableRipple(class {});\n\n/** @docs-private */\nexport const MAT_SELECTION_LIST_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSelectionList),\n multi: true,\n};\n\n/** Change event that is being fired whenever the selected state of an option changes. */\nexport class MatSelectionListChange {\n constructor(\n /** Reference to the selection list that emitted the event. */\n public source: MatSelectionList,\n /**\n * Reference to the option that has been changed.\n * @deprecated Use `options` instead, because some events may change more than one option.\n * @breaking-change 12.0.0\n */\n public option: MatListOption,\n /** Reference to the options that have been changed. */\n public options: MatListOption[],\n ) {}\n}\n\n/**\n * Type describing possible positions of a checkbox in a list option\n * with respect to the list item's text.\n */\nexport type MatListOptionCheckboxPosition = 'before' | 'after';\n\n/**\n * Component for list-options of selection-list. Each list-option can automatically\n * generate a checkbox and can put current item into the selectionModel of selection-list\n * if the current item is selected.\n */\n@Component({\n selector: 'mat-list-option',\n exportAs: 'matListOption',\n inputs: ['disableRipple'],\n host: {\n 'role': 'option',\n 'class': 'mat-list-item mat-list-option mat-focus-indicator',\n '(focus)': '_handleFocus()',\n '(blur)': '_handleBlur()',\n '(click)': '_handleClick()',\n '[class.mat-list-item-disabled]': 'disabled',\n '[class.mat-list-item-with-avatar]': '_avatar || _icon',\n // Manually set the \"primary\" or \"warn\" class if the color has been explicitly\n // set to \"primary\" or \"warn\". The pseudo checkbox picks up these classes for\n // its theme.\n '[class.mat-primary]': 'color === \"primary\"',\n // Even though accent is the default, we need to set this class anyway, because the list might\n // be placed inside a parent that has one of the other colors with a higher specificity.\n '[class.mat-accent]': 'color !== \"primary\" && color !== \"warn\"',\n '[class.mat-warn]': 'color === \"warn\"',\n '[class.mat-list-single-selected-option]': 'selected && !selectionList.multiple',\n '[attr.aria-selected]': 'selected',\n '[attr.aria-disabled]': 'disabled',\n '[attr.tabindex]': '-1',\n },\n templateUrl: 'list-option.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatListOption\n extends _MatListOptionBase\n implements AfterContentInit, OnDestroy, OnInit, FocusableOption, CanDisableRipple\n{\n private _selected = false;\n private _disabled = false;\n private _hasFocus = false;\n\n @ContentChild(MatListAvatarCssMatStyler) _avatar: MatListAvatarCssMatStyler;\n @ContentChild(MatListIconCssMatStyler) _icon: MatListIconCssMatStyler;\n @ContentChildren(MatLine, {descendants: true}) _lines: QueryList<MatLine>;\n\n /**\n * Emits when the selected state of the option has changed.\n * Use to facilitate two-data binding to the `selected` property.\n * @docs-private\n */\n @Output()\n readonly selectedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** DOM element containing the item's text. */\n @ViewChild('text') _text: ElementRef;\n\n /** Whether the label should appear before or after the checkbox. Defaults to 'after' */\n @Input() checkboxPosition: MatListOptionCheckboxPosition = 'after';\n\n /** Theme color of the list option. This sets the color of the checkbox. */\n @Input()\n get color(): ThemePalette {\n return this._color || this.selectionList.color;\n }\n set color(newValue: ThemePalette) {\n this._color = newValue;\n }\n private _color: ThemePalette;\n\n /**\n * This is set to true after the first OnChanges cycle so we don't clear the value of `selected`\n * in the first cycle.\n */\n private _inputsInitialized = false;\n /** Value of the option */\n @Input()\n get value(): any {\n return this._value;\n }\n set value(newValue: any) {\n if (\n this.selected &&\n !this.selectionList.compareWith(newValue, this.value) &&\n this._inputsInitialized\n ) {\n this.selected = false;\n }\n\n this._value = newValue;\n }\n private _value: any;\n\n /** Whether the option is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this.selectionList && this.selectionList.disabled);\n }\n set disabled(value: BooleanInput) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._changeDetector.markForCheck();\n }\n }\n\n /** Whether the option is selected. */\n @Input()\n get selected(): boolean {\n return this.selectionList.selectedOptions.isSelected(this);\n }\n set selected(value: BooleanInput) {\n const isSelected = coerceBooleanProperty(value);\n\n if (isSelected !== this._selected) {\n this._setSelected(isSelected);\n\n if (isSelected || this.selectionList.multiple) {\n this.selectionList._reportValueChange();\n }\n }\n }\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n private _changeDetector: ChangeDetectorRef,\n /** @docs-private */\n @Inject(forwardRef(() => MatSelectionList)) public selectionList: MatSelectionList,\n ) {\n super();\n }\n\n ngOnInit() {\n const list = this.selectionList;\n\n if (list._value && list._value.some(value => list.compareWith(value, this._value))) {\n this._setSelected(true);\n }\n\n const wasSelected = this._selected;\n\n // List options that are selected at initialization can't be reported properly to the form\n // control. This is because it takes some time until the selection-list knows about all\n // available options. Also it can happen that the ControlValueAccessor has an initial value\n // that should be used instead. Deferring the value change report to the next tick ensures\n // that the form control value is not being overwritten.\n Promise.resolve().then(() => {\n if (this._selected || wasSelected) {\n this.selected = true;\n this._changeDetector.markForCheck();\n }\n });\n this._inputsInitialized = true;\n }\n\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n\n ngOnDestroy(): void {\n if (this.selected) {\n // We have to delay this until the next tick in order\n // to avoid changed after checked errors.\n Promise.resolve().then(() => {\n this.selected = false;\n });\n }\n\n const hadFocus = this._hasFocus;\n const newActiveItem = this.selectionList._removeOptionFromList(this);\n\n // Only move focus if this option was focused at the time it was destroyed.\n if (hadFocus && newActiveItem) {\n newActiveItem.focus();\n }\n }\n\n /** Toggles the selection state of the option. */\n toggle(): void {\n this.selected = !this.selected;\n }\n\n /** Allows for programmatic focusing of the option. */\n focus(): void {\n this._element.nativeElement.focus();\n }\n\n /**\n * Returns the list item's text label. Implemented as a part of the FocusKeyManager.\n * @docs-private\n */\n getLabel() {\n return this._text ? this._text.nativeElement.textContent || '' : '';\n }\n\n /** Whether this list item should show a ripple effect when clicked. */\n _isRippleDisabled() {\n return this.disabled || this.disableRipple || this.selectionList.disableRipple;\n }\n\n _handleClick() {\n if (!this.disabled && (this.selectionList.multiple || !this.selected)) {\n this.toggle();\n\n // Emit a change event if the selected state of the option changed through user interaction.\n this.selectionList._emitChangeEvent([this]);\n }\n }\n\n _handleFocus() {\n this.selectionList._setFocusedOption(this);\n this._hasFocus = true;\n }\n\n _handleBlur() {\n this.selectionList._onTouched();\n this._hasFocus = false;\n }\n\n /** Retrieves the DOM element of the component host. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n\n /** Sets the selected state of the option. Returns whether the value has changed. */\n _setSelected(selected: boolean): boolean {\n if (selected === this._selected) {\n return false;\n }\n\n this._selected = selected;\n\n if (selected) {\n this.selectionList.selectedOptions.select(this);\n } else {\n this.selectionList.selectedOptions.deselect(this);\n }\n\n this.selectedChange.emit(selected);\n this._changeDetector.markForCheck();\n return true;\n }\n\n /**\n * Notifies Angular that the option needs to be checked in the next change detection run. Mainly\n * used to trigger an update of the list option if the disabled state of the selection list\n * changed.\n */\n _markForCheck() {\n this._changeDetector.markForCheck();\n }\n}\n\n/**\n * Material Design list component where each item is a selectable option. Behaves as a listbox.\n */\n@Component({\n selector: 'mat-selection-list',\n exportAs: 'matSelectionList',\n inputs: ['disableRipple'],\n host: {\n 'role': 'listbox',\n 'class': 'mat-selection-list mat-list-base',\n '(keydown)': '_keydown($event)',\n '[attr.aria-multiselectable]': 'multiple',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.tabindex]': '_tabIndex',\n },\n template: '<ng-content></ng-content>',\n styleUrls: ['list.css'],\n encapsulation: ViewEncapsulation.None,\n providers: [MAT_SELECTION_LIST_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatSelectionList\n extends _MatSelectionListBase\n implements CanDisableRipple, AfterContentInit, ControlValueAccessor, OnDestroy, OnChanges\n{\n private _multiple = true;\n private _contentInitialized = false;\n\n /** The FocusKeyManager which handles focus. */\n _keyManager: FocusKeyManager<MatListOption>;\n\n /** The option components contained within this selection-list. */\n @ContentChildren(MatListOption, {descendants: true}) options: QueryList<MatListOption>;\n\n /** Emits a change event whenever the selected state of an option changes. */\n @Output() readonly selectionChange: EventEmitter<MatSelectionListChange> =\n new EventEmitter<MatSelectionListChange>();\n\n /**\n * Tabindex of the selection list.\n * @breaking-change 11.0.0 Remove `tabIndex` input.\n */\n @Input() tabIndex: number = 0;\n\n /** Theme color of the selection list. This sets the checkbox color for all list options. */\n @Input() color: ThemePalette = 'accent';\n\n /**\n * Function used for comparing an option against the selected value when determining which\n * options should appear as selected. The first argument is the value of an options. The second\n * one is a value from the selected value. A boolean must be returned.\n */\n @Input() compareWith: (o1: any, o2: any) => boolean = (a1, a2) => a1 === a2;\n\n /** Whether the selection list is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n\n // The `MatSelectionList` and `MatListOption` are using the `OnPush` change detection\n // strategy. Therefore the options will not check for any changes if the `MatSelectionList`\n // changed its state. Since we know that a change to `disabled` property of the list affects\n // the state of the options, we manually mark each option for check.\n this._markOptionsForCheck();\n }\n private _disabled: boolean = false;\n\n /** Whether selection is limited to one or multiple items (default multiple). */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: BooleanInput) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._multiple) {\n if (this._contentInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error(\n 'Cannot change `multiple` mode of mat-selection-list after initialization.',\n );\n }\n\n this._multiple = newValue;\n this.selectedOptions = new SelectionModel(this._multiple, this.selectedOptions.selected);\n }\n }\n\n /** The currently selected options. */\n selectedOptions = new SelectionModel<MatListOption>(this._multiple);\n\n /** The tabindex of the selection list. */\n _tabIndex = -1;\n\n /** View to model callback that should be called whenever the selected options change. */\n private _onChange: (value: any) => void = (_: any) => {};\n\n /** Keeps track of the currently-selected value. */\n _value: string[] | null;\n\n /** Emits when the list has been destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** View to model callback that should be called if the list or its options lost focus. */\n _onTouched: () => void = () => {};\n\n /** Whether the list has been destroyed. */\n private _isDestroyed: boolean;\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n // @breaking-change 11.0.0 Remove `tabIndex` parameter.\n @Attribute('tabindex') tabIndex: string,\n private _changeDetector: ChangeDetectorRef,\n // @breaking-change 11.0.0 `_focusMonitor` parameter to become required.\n private _focusMonitor?: FocusMonitor,\n ) {\n super();\n }\n\n ngAfterContentInit(): void {\n this._contentInitialized = true;\n\n this._keyManager = new FocusKeyManager<MatListOption>(this.options)\n .withWrap()\n .withTypeAhead()\n .withHomeAndEnd()\n // Allow disabled items to be focusable. For accessibility reasons, there must be a way for\n // screenreader users, that allows reading the different options of the list.\n .skipPredicate(() => false)\n .withAllowedModifierKeys(['shiftKey']);\n\n if (this._value) {\n this._setOptionsFromValues(this._value);\n }\n\n // If the user attempts to tab out of the selection list, allow focus to escape.\n this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._allowFocusEscape();\n });\n\n // When the number of options change, update the tabindex of the selection list.\n this.options.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n this._updateTabIndex();\n });\n\n // Sync external changes to the model back to the options.\n this.selectedOptions.changed.pipe(takeUntil(this._destroyed)).subscribe(event => {\n if (event.added) {\n for (let item of event.added) {\n item.selected = true;\n }\n }\n\n if (event.removed) {\n for (let item of event.removed) {\n item.selected = false;\n }\n }\n });\n\n // @breaking-change 11.0.0 Remove null assertion once _focusMonitor is required.\n this._focusMonitor\n ?.monitor(this._element)\n .pipe(takeUntil(this._destroyed))\n .subscribe(origin => {\n if (origin === 'keyboard' || origin === 'program') {\n let toFocus = 0;\n for (let i = 0; i < this.options.length; i++) {\n if (this.options.get(i)?.selected) {\n toFocus = i;\n break;\n }\n }\n this._keyManager.setActiveItem(toFocus);\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const disableRippleChanges = changes['disableRipple'];\n const colorChanges = changes['color'];\n\n if (\n (disableRippleChanges && !disableRippleChanges.firstChange) ||\n (colorChanges && !colorChanges.firstChange)\n ) {\n this._markOptionsForCheck();\n }\n }\n\n ngOnDestroy() {\n // @breaking-change 11.0.0 Remove null assertion once _focusMonitor is required.\n this._focusMonitor?.stopMonitoring(this._element);\n this._destroyed.next();\n this._destroyed.complete();\n this._isDestroyed = true;\n }\n\n /** Focuses the selection list. */\n focus(options?: FocusOptions) {\n this._element.nativeElement.focus(options);\n }\n\n /** Selects all of the options. Returns the options that changed as a result. */\n selectAll(): MatListOption[] {\n return this._setAllOptionsSelected(true);\n }\n\n /** Deselects all of the options. Returns the options that changed as a result. */\n deselectAll(): MatListOption[] {\n return this._setAllOptionsSelected(false);\n }\n\n /** Sets the focused option of the selection-list. */\n _setFocusedOption(option: MatListOption) {\n this._keyManager.updateActiveItem(option);\n }\n\n /**\n * Removes an option from the selection list and updates the active item.\n * @returns Currently-active item.\n */\n _removeOptionFromList(option: MatListOption): MatListOption | null {\n const optionIndex = this._getOptionIndex(option);\n\n if (optionIndex > -1 && this._keyManager.activeItemIndex === optionIndex) {\n // Check whether the option is the last item\n if (optionIndex > 0) {\n this._keyManager.updateActiveItem(optionIndex - 1);\n } else if (optionIndex === 0 && this.options.length > 1) {\n this._keyManager.updateActiveItem(Math.min(optionIndex + 1, this.options.length - 1));\n }\n }\n\n return this._keyManager.activeItem;\n }\n\n /** Passes relevant key presses to our key manager. */\n _keydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n const previousFocusIndex = manager.activeItemIndex;\n const hasModifier = hasModifierKey(event);\n\n switch (keyCode) {\n case SPACE:\n case ENTER:\n if (!hasModifier && !manager.isTyping()) {\n this._toggleFocusedOption();\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n }\n break;\n default:\n // The \"A\" key gets special treatment, because it's used for the \"select all\" functionality.\n if (\n keyCode === A &&\n this.multiple &&\n hasModifierKey(event, 'ctrlKey') &&\n !manager.isTyping()\n ) {\n const shouldSelect = this.options.some(option => !option.disabled && !option.selected);\n this._setAllOptionsSelected(shouldSelect, true, true);\n event.preventDefault();\n } else {\n manager.onKeydown(event);\n }\n }\n\n if (\n this.multiple &&\n (keyCode === UP_ARROW || keyCode === DOWN_ARROW) &&\n event.shiftKey &&\n manager.activeItemIndex !== previousFocusIndex\n ) {\n this._toggleFocusedOption();\n }\n }\n\n /** Reports a value change to the ControlValueAccessor */\n _reportValueChange() {\n // Stop reporting value changes after the list has been destroyed. This avoids\n // cases where the list might wrongly reset its value once it is removed, but\n // the form control is still live.\n if (this.options && !this._isDestroyed) {\n const value = this._getSelectedOptionValues();\n this._onChange(value);\n this._value = value;\n }\n }\n\n /** Emits a change event if the selected state of an option changed. */\n _emitChangeEvent(options: MatListOption[]) {\n this.selectionChange.emit(new MatSelectionListChange(this, options[0], options));\n }\n\n /** Implemented as part of ControlValueAccessor. */\n writeValue(values: string[]): void {\n this._value = values;\n\n if (this.options) {\n this._setOptionsFromValues(values || []);\n }\n }\n\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /** Sets the selected options based on the specified values. */\n private _setOptionsFromValues(values: string[]) {\n this.options.forEach(option => option._setSelected(false));\n\n values.forEach(value => {\n const correspondingOption = this.options.find(option => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n return option.selected ? false : this.compareWith(option.value, value);\n });\n\n if (correspondingOption) {\n correspondingOption._setSelected(true);\n }\n });\n }\n\n /** Returns the values of the selected options. */\n private _getSelectedOptionValues(): string[] {\n return this.options.filter(option => option.selected).map(option => option.value);\n }\n\n /** Toggles the state of the currently focused option if enabled. */\n private _toggleFocusedOption(): void {\n let focusedIndex = this._keyManager.activeItemIndex;\n\n if (focusedIndex != null && this._isValidIndex(focusedIndex)) {\n let focusedOption: MatListOption = this.options.toArray()[focusedIndex];\n\n if (focusedOption && !focusedOption.disabled && (this._multiple || !focusedOption.selected)) {\n focusedOption.toggle();\n\n // Emit a change event because the focused option changed its state through user\n // interaction.\n this._emitChangeEvent([focusedOption]);\n }\n }\n }\n\n /**\n * Sets the selected state on all of the options\n * and emits an event if anything changed.\n */\n private _setAllOptionsSelected(\n isSelected: boolean,\n skipDisabled?: boolean,\n isUserInput?: boolean,\n ): MatListOption[] {\n // Keep track of whether anything changed, because we only want to\n // emit the changed event when something actually changed.\n const changedOptions: MatListOption[] = [];\n\n this.options.forEach(option => {\n if ((!skipDisabled || !option.disabled) && option._setSelected(isSelected)) {\n changedOptions.push(option);\n }\n });\n\n if (changedOptions.length) {\n this._reportValueChange();\n\n if (isUserInput) {\n this._emitChangeEvent(changedOptions);\n }\n }\n\n return changedOptions;\n }\n\n /**\n * Utility to ensure all indexes are valid.\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of options.\n */\n private _isValidIndex(index: number): boolean {\n return index >= 0 && index < this.options.length;\n }\n\n /** Returns the index of the specified list option. */\n private _getOptionIndex(option: MatListOption): number {\n return this.options.toArray().indexOf(option);\n }\n\n /** Marks all the options to be checked in the next change detection run. */\n private _markOptionsForCheck() {\n if (this.options) {\n this.options.forEach(option => option._markForCheck());\n }\n }\n\n /**\n * Removes the tabindex from the selection list and resets it back afterwards, allowing the user\n * to tab out of it. This prevents the list from capturing focus and redirecting it back within\n * the list, creating a focus trap if it user tries to tab away.\n */\n private _allowFocusEscape() {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = 0;\n this._changeDetector.markForCheck();\n });\n }\n\n /** Updates the tabindex based upon if the selection list is empty. */\n private _updateTabIndex(): void {\n this._tabIndex = this.options.length === 0 ? -1 : 0;\n }\n}\n","<div class=\"mat-list-item-content\"\n [class.mat-list-item-content-reverse]=\"checkboxPosition == 'after'\">\n\n <div mat-ripple\n class=\"mat-list-item-ripple\"\n [matRippleTrigger]=\"_getHostElement()\"\n [matRippleDisabled]=\"_isRippleDisabled()\"></div>\n\n <mat-pseudo-checkbox\n *ngIf=\"selectionList.multiple\"\n [state]=\"selected ? 'checked' : 'unchecked'\"\n [disabled]=\"disabled\"></mat-pseudo-checkbox>\n\n <div class=\"mat-list-text\" #text><ng-content></ng-content></div>\n\n <ng-content select=\"[mat-list-avatar], [mat-list-icon], [matListAvatar], [matListIcon]\">\n </ng-content>\n\n</div>\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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {\n MatCommonModule,\n MatLineModule,\n MatPseudoCheckboxModule,\n MatRippleModule,\n} from '@angular/material/core';\nimport {\n MatList,\n MatNavList,\n MatListAvatarCssMatStyler,\n MatListIconCssMatStyler,\n MatListItem,\n MatListSubheaderCssMatStyler,\n} from './list';\nimport {MatListOption, MatSelectionList} from './selection-list';\nimport {MatDividerModule} from '@angular/material/divider';\n\n@NgModule({\n imports: [MatLineModule, MatRippleModule, MatCommonModule, MatPseudoCheckboxModule, CommonModule],\n exports: [\n MatList,\n MatNavList,\n MatListItem,\n MatListAvatarCssMatStyler,\n MatLineModule,\n MatCommonModule,\n MatListIconCssMatStyler,\n MatListSubheaderCssMatStyler,\n MatPseudoCheckboxModule,\n MatSelectionList,\n MatListOption,\n MatDividerModule,\n ],\n declarations: [\n MatList,\n MatNavList,\n MatListItem,\n MatListAvatarCssMatStyler,\n MatListIconCssMatStyler,\n MatListSubheaderCssMatStyler,\n MatSelectionList,\n MatListOption,\n ],\n})\nexport class MatListModule {}\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 './list-module';\nexport * from './list';\nexport * from './selection-list';\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/fesm2015/menu.mjs CHANGED
@@ -5,7 +5,7 @@ import { UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW, ESCAPE, hasModifierKey,
5
5
  import * as i0 from '@angular/core';
6
6
  import { InjectionToken, Directive, Inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Input, QueryList, EventEmitter, TemplateRef, ContentChildren, ViewChild, ContentChild, Output, Self, NgModule } from '@angular/core';
7
7
  import { Subject, Subscription, merge, of, asapScheduler } from 'rxjs';
8
- import { startWith, switchMap, take, filter, takeUntil, delay } from 'rxjs/operators';
8
+ import { startWith, switchMap, take, takeUntil, filter, delay } from 'rxjs/operators';
9
9
  import { trigger, state, style, transition, animate } from '@angular/animations';
10
10
  import { TemplatePortal, DomPortalOutlet } from '@angular/cdk/portal';
11
11
  import * as i3 from '@angular/common';
@@ -146,9 +146,9 @@ class _MatMenuContentBase {
146
146
  }
147
147
  }
148
148
  }
149
- _MatMenuContentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: _MatMenuContentBase, deps: [{ token: i0.TemplateRef }, { token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
150
- _MatMenuContentBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0-next.2", type: _MatMenuContentBase, ngImport: i0 });
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: _MatMenuContentBase, decorators: [{
149
+ _MatMenuContentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: _MatMenuContentBase, deps: [{ token: i0.TemplateRef }, { token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
150
+ _MatMenuContentBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0", type: _MatMenuContentBase, ngImport: i0 });
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: _MatMenuContentBase, decorators: [{
152
152
  type: Directive
153
153
  }], ctorParameters: function () {
154
154
  return [{ type: i0.TemplateRef }, { type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
@@ -161,9 +161,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2",
161
161
  */
162
162
  class MatMenuContent extends _MatMenuContentBase {
163
163
  }
164
- MatMenuContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuContent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
165
- MatMenuContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0-next.2", type: MatMenuContent, selector: "ng-template[matMenuContent]", providers: [{ provide: MAT_MENU_CONTENT, useExisting: MatMenuContent }], usesInheritance: true, ngImport: i0 });
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuContent, decorators: [{
164
+ MatMenuContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuContent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
165
+ MatMenuContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0", type: MatMenuContent, selector: "ng-template[matMenuContent]", providers: [{ provide: MAT_MENU_CONTENT, useExisting: MatMenuContent }], usesInheritance: true, ngImport: i0 });
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuContent, decorators: [{
167
167
  type: Directive,
168
168
  args: [{
169
169
  selector: 'ng-template[matMenuContent]',
@@ -325,9 +325,9 @@ class MatMenuItem extends _MatMenuItemBase {
325
325
  (_a = this._changeDetectorRef) === null || _a === void 0 ? void 0 : _a.markForCheck();
326
326
  }
327
327
  }
328
- MatMenuItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuItem, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }, { token: i1.FocusMonitor }, { token: MAT_MENU_PANEL, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
329
- MatMenuItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0-next.2", type: MatMenuItem, selector: "[mat-menu-item]", inputs: { disabled: "disabled", disableRipple: "disableRipple", role: "role" }, host: { listeners: { "click": "_checkDisabled($event)", "mouseenter": "_handleMouseEnter()" }, properties: { "attr.role": "role", "class.mat-menu-item": "true", "class.mat-menu-item-highlighted": "_highlighted", "class.mat-menu-item-submenu-trigger": "_triggersSubmenu", "attr.tabindex": "_getTabIndex()", "attr.aria-disabled": "disabled.toString()", "attr.disabled": "disabled || null" }, classAttribute: "mat-focus-indicator" }, exportAs: ["matMenuItem"], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<div class=\"mat-menu-ripple\" matRipple\n [matRippleDisabled]=\"disableRipple || disabled\"\n [matRippleTrigger]=\"_getHostElement()\">\n</div>\n\n<svg\n *ngIf=\"_triggersSubmenu\"\n class=\"mat-menu-submenu-icon\"\n viewBox=\"0 0 5 10\"\n focusable=\"false\"><polygon points=\"0,0 5,5 0,10\"/></svg>\n", directives: [{ type: i2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
330
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuItem, decorators: [{
328
+ MatMenuItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuItem, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }, { token: i1.FocusMonitor }, { token: MAT_MENU_PANEL, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
329
+ MatMenuItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: MatMenuItem, selector: "[mat-menu-item]", inputs: { disabled: "disabled", disableRipple: "disableRipple", role: "role" }, host: { listeners: { "click": "_checkDisabled($event)", "mouseenter": "_handleMouseEnter()" }, properties: { "attr.role": "role", "class.mat-menu-item": "true", "class.mat-menu-item-highlighted": "_highlighted", "class.mat-menu-item-submenu-trigger": "_triggersSubmenu", "attr.tabindex": "_getTabIndex()", "attr.aria-disabled": "disabled.toString()", "attr.disabled": "disabled || null" }, classAttribute: "mat-focus-indicator" }, exportAs: ["matMenuItem"], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<div class=\"mat-menu-ripple\" matRipple\n [matRippleDisabled]=\"disableRipple || disabled\"\n [matRippleTrigger]=\"_getHostElement()\">\n</div>\n\n<svg\n *ngIf=\"_triggersSubmenu\"\n class=\"mat-menu-submenu-icon\"\n viewBox=\"0 0 5 10\"\n focusable=\"false\"><polygon points=\"0,0 5,5 0,10\"/></svg>\n", directives: [{ type: i2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuItem, decorators: [{
331
331
  type: Component,
332
332
  args: [{ selector: '[mat-menu-item]', exportAs: 'matMenuItem', inputs: ['disabled', 'disableRipple'], host: {
333
333
  '[attr.role]': 'role',
@@ -379,10 +379,13 @@ function MAT_MENU_DEFAULT_OPTIONS_FACTORY() {
379
379
  let menuPanelUid = 0;
380
380
  /** Base class with all of the `MatMenu` functionality. */
381
381
  class _MatMenuBase {
382
- constructor(_elementRef, _ngZone, _defaultOptions) {
382
+ constructor(_elementRef, _ngZone, _defaultOptions,
383
+ // @breaking-change 15.0.0 `_changeDetectorRef` to become a required parameter.
384
+ _changeDetectorRef) {
383
385
  this._elementRef = _elementRef;
384
386
  this._ngZone = _ngZone;
385
387
  this._defaultOptions = _defaultOptions;
388
+ this._changeDetectorRef = _changeDetectorRef;
386
389
  this._xPosition = this._defaultOptions.xPosition;
387
390
  this._yPosition = this._defaultOptions.yPosition;
388
391
  /** Only the direct descendant menu items. */
@@ -632,11 +635,14 @@ class _MatMenuBase {
632
635
  * @docs-private
633
636
  */
634
637
  setPositionClasses(posX = this.xPosition, posY = this.yPosition) {
638
+ var _a;
635
639
  const classes = this._classList;
636
640
  classes['mat-menu-before'] = posX === 'before';
637
641
  classes['mat-menu-after'] = posX === 'after';
638
642
  classes['mat-menu-above'] = posY === 'above';
639
643
  classes['mat-menu-below'] = posY === 'below';
644
+ // @breaking-change 15.0.0 Remove null check for `_changeDetectorRef`.
645
+ (_a = this._changeDetectorRef) === null || _a === void 0 ? void 0 : _a.markForCheck();
640
646
  }
641
647
  /** Starts the enter animation. */
642
648
  _startAnimation() {
@@ -680,15 +686,15 @@ class _MatMenuBase {
680
686
  });
681
687
  }
682
688
  }
683
- _MatMenuBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: _MatMenuBase, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: MAT_MENU_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Directive });
684
- _MatMenuBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0-next.2", type: _MatMenuBase, inputs: { backdropClass: "backdropClass", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], xPosition: "xPosition", yPosition: "yPosition", overlapTrigger: "overlapTrigger", hasBackdrop: "hasBackdrop", panelClass: ["class", "panelClass"], classList: "classList" }, outputs: { closed: "closed", close: "close" }, queries: [{ propertyName: "lazyContent", first: true, predicate: MAT_MENU_CONTENT, descendants: true }, { propertyName: "_allItems", predicate: MatMenuItem, descendants: true }, { propertyName: "items", predicate: MatMenuItem }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
685
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: _MatMenuBase, decorators: [{
689
+ _MatMenuBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: _MatMenuBase, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: MAT_MENU_DEFAULT_OPTIONS }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
690
+ _MatMenuBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0", type: _MatMenuBase, inputs: { backdropClass: "backdropClass", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], xPosition: "xPosition", yPosition: "yPosition", overlapTrigger: "overlapTrigger", hasBackdrop: "hasBackdrop", panelClass: ["class", "panelClass"], classList: "classList" }, outputs: { closed: "closed", close: "close" }, queries: [{ propertyName: "lazyContent", first: true, predicate: MAT_MENU_CONTENT, descendants: true }, { propertyName: "_allItems", predicate: MatMenuItem, descendants: true }, { propertyName: "items", predicate: MatMenuItem }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: _MatMenuBase, decorators: [{
686
692
  type: Directive
687
693
  }], ctorParameters: function () {
688
694
  return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
689
695
  type: Inject,
690
696
  args: [MAT_MENU_DEFAULT_OPTIONS]
691
- }] }];
697
+ }] }, { type: i0.ChangeDetectorRef }];
692
698
  }, propDecorators: { _allItems: [{
693
699
  type: ContentChildren,
694
700
  args: [MatMenuItem, { descendants: true }]
@@ -732,15 +738,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2",
732
738
  }] } });
733
739
  /** @docs-public MatMenu */
734
740
  class MatMenu extends _MatMenuBase {
735
- constructor(elementRef, ngZone, defaultOptions) {
736
- super(elementRef, ngZone, defaultOptions);
741
+ constructor(elementRef, ngZone, defaultOptions, changeDetectorRef) {
742
+ super(elementRef, ngZone, defaultOptions, changeDetectorRef);
737
743
  this._elevationPrefix = 'mat-elevation-z';
738
744
  this._baseElevation = 4;
739
745
  }
740
746
  }
741
- MatMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenu, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: MAT_MENU_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Component });
742
- MatMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0-next.2", type: MatMenu, selector: "mat-menu", host: { properties: { "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null" } }, providers: [{ provide: MAT_MENU_PANEL, useExisting: MatMenu }], exportAs: ["matMenu"], usesInheritance: true, ngImport: i0, template: "<ng-template>\n <div\n class=\"mat-menu-panel\"\n [id]=\"panelId\"\n [ngClass]=\"_classList\"\n (keydown)=\"_handleKeydown($event)\"\n (click)=\"closed.emit('click')\"\n [@transformMenu]=\"_panelAnimationState\"\n (@transformMenu.start)=\"_onAnimationStart($event)\"\n (@transformMenu.done)=\"_onAnimationDone($event)\"\n tabindex=\"-1\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.aria-describedby]=\"ariaDescribedby || null\">\n <div class=\"mat-menu-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["mat-menu{display:none}.mat-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 48px);border-radius:4px;outline:0;min-height:64px}.mat-menu-panel.ng-animating{pointer-events:none}.cdk-high-contrast-active .mat-menu-panel{outline:solid 1px}.mat-menu-content:not(:empty){padding-top:8px;padding-bottom:8px}.mat-menu-item{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative}.mat-menu-item::-moz-focus-inner{border:0}.mat-menu-item[disabled]{cursor:default}[dir=rtl] .mat-menu-item{text-align:right}.mat-menu-item .mat-icon{margin-right:16px;vertical-align:middle}.mat-menu-item .mat-icon svg{vertical-align:top}[dir=rtl] .mat-menu-item .mat-icon{margin-left:16px;margin-right:0}.mat-menu-item[disabled]{pointer-events:none}.cdk-high-contrast-active .mat-menu-item{margin-top:1px}.cdk-high-contrast-active .mat-menu-item.cdk-program-focused,.cdk-high-contrast-active .mat-menu-item.cdk-keyboard-focused,.cdk-high-contrast-active .mat-menu-item-highlighted{outline:dotted 1px}.mat-menu-item-submenu-trigger{padding-right:32px}[dir=rtl] .mat-menu-item-submenu-trigger{padding-right:16px;padding-left:32px}.mat-menu-submenu-icon{position:absolute;top:50%;right:16px;transform:translateY(-50%);width:5px;height:10px;fill:currentColor}[dir=rtl] .mat-menu-submenu-icon{right:auto;left:16px;transform:translateY(-50%) scaleX(-1)}.cdk-high-contrast-active .mat-menu-submenu-icon{fill:CanvasText}button.mat-menu-item{width:100%}.mat-menu-item .mat-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\n"], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [matMenuAnimations.transformMenu, matMenuAnimations.fadeInItems], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
743
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenu, decorators: [{
747
+ MatMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenu, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: MAT_MENU_DEFAULT_OPTIONS }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
748
+ MatMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.0", type: MatMenu, selector: "mat-menu", host: { properties: { "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null" } }, providers: [{ provide: MAT_MENU_PANEL, useExisting: MatMenu }], exportAs: ["matMenu"], usesInheritance: true, ngImport: i0, template: "<ng-template>\n <div\n class=\"mat-menu-panel\"\n [id]=\"panelId\"\n [ngClass]=\"_classList\"\n (keydown)=\"_handleKeydown($event)\"\n (click)=\"closed.emit('click')\"\n [@transformMenu]=\"_panelAnimationState\"\n (@transformMenu.start)=\"_onAnimationStart($event)\"\n (@transformMenu.done)=\"_onAnimationDone($event)\"\n tabindex=\"-1\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.aria-describedby]=\"ariaDescribedby || null\">\n <div class=\"mat-menu-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["mat-menu{display:none}.mat-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 48px);border-radius:4px;outline:0;min-height:64px}.mat-menu-panel.ng-animating{pointer-events:none}.cdk-high-contrast-active .mat-menu-panel{outline:solid 1px}.mat-menu-content:not(:empty){padding-top:8px;padding-bottom:8px}.mat-menu-item{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative}.mat-menu-item::-moz-focus-inner{border:0}.mat-menu-item[disabled]{cursor:default}[dir=rtl] .mat-menu-item{text-align:right}.mat-menu-item .mat-icon{margin-right:16px;vertical-align:middle}.mat-menu-item .mat-icon svg{vertical-align:top}[dir=rtl] .mat-menu-item .mat-icon{margin-left:16px;margin-right:0}.mat-menu-item[disabled]{pointer-events:none}.cdk-high-contrast-active .mat-menu-item{margin-top:1px}.cdk-high-contrast-active .mat-menu-item.cdk-program-focused,.cdk-high-contrast-active .mat-menu-item.cdk-keyboard-focused,.cdk-high-contrast-active .mat-menu-item-highlighted{outline:dotted 1px}.mat-menu-item-submenu-trigger{padding-right:32px}[dir=rtl] .mat-menu-item-submenu-trigger{padding-right:16px;padding-left:32px}.mat-menu-submenu-icon{position:absolute;top:50%;right:16px;transform:translateY(-50%);width:5px;height:10px;fill:currentColor}[dir=rtl] .mat-menu-submenu-icon{right:auto;left:16px;transform:translateY(-50%) scaleX(-1)}.cdk-high-contrast-active .mat-menu-submenu-icon{fill:CanvasText}button.mat-menu-item{width:100%}.mat-menu-item .mat-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\n"], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [matMenuAnimations.transformMenu, matMenuAnimations.fadeInItems], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
749
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenu, decorators: [{
744
750
  type: Component,
745
751
  args: [{ selector: 'mat-menu', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'matMenu', host: {
746
752
  '[attr.aria-label]': 'null',
@@ -751,7 +757,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2",
751
757
  return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
752
758
  type: Inject,
753
759
  args: [MAT_MENU_DEFAULT_OPTIONS]
754
- }] }];
760
+ }] }, { type: i0.ChangeDetectorRef }];
755
761
  } });
756
762
 
757
763
  /**
@@ -782,13 +788,14 @@ class _MatMenuTriggerBase {
782
788
  constructor(_overlay, _element, _viewContainerRef, scrollStrategy, parentMenu,
783
789
  // `MatMenuTrigger` is commonly used in combination with a `MatMenuItem`.
784
790
  // tslint:disable-next-line: lightweight-tokens
785
- _menuItemInstance, _dir, _focusMonitor) {
791
+ _menuItemInstance, _dir, _focusMonitor, _ngZone) {
786
792
  this._overlay = _overlay;
787
793
  this._element = _element;
788
794
  this._viewContainerRef = _viewContainerRef;
789
795
  this._menuItemInstance = _menuItemInstance;
790
796
  this._dir = _dir;
791
797
  this._focusMonitor = _focusMonitor;
798
+ this._ngZone = _ngZone;
792
799
  this._overlayRef = null;
793
800
  this._menuOpen = false;
794
801
  this._closingActionsSubscription = Subscription.EMPTY;
@@ -908,7 +915,8 @@ class _MatMenuTriggerBase {
908
915
  this._checkMenu();
909
916
  const overlayRef = this._createOverlay();
910
917
  const overlayConfig = overlayRef.getConfig();
911
- this._setPosition(overlayConfig.positionStrategy);
918
+ const positionStrategy = overlayConfig.positionStrategy;
919
+ this._setPosition(positionStrategy);
912
920
  overlayConfig.hasBackdrop =
913
921
  this.menu.hasBackdrop == null ? !this.triggersSubmenu() : this.menu.hasBackdrop;
914
922
  overlayRef.attach(this._getPortal());
@@ -919,6 +927,12 @@ class _MatMenuTriggerBase {
919
927
  this._initMenu();
920
928
  if (this.menu instanceof _MatMenuBase) {
921
929
  this.menu._startAnimation();
930
+ this.menu._directDescendantItems.changes.pipe(takeUntil(this.menu.close)).subscribe(() => {
931
+ // Re-adjust the position without locking when the amount of items
932
+ // changes so that the overlay is allowed to pick a new optimal position.
933
+ positionStrategy.withLockedPosition(false).reapplyLastPosition();
934
+ positionStrategy.withLockedPosition(true);
935
+ });
922
936
  }
923
937
  }
924
938
  /** Closes the menu. */
@@ -1069,7 +1083,15 @@ class _MatMenuTriggerBase {
1069
1083
  position.positionChanges.subscribe(change => {
1070
1084
  const posX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';
1071
1085
  const posY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';
1072
- this.menu.setPositionClasses(posX, posY);
1086
+ // @breaking-change 15.0.0 Remove null check for `ngZone`.
1087
+ // `positionChanges` fires outside of the `ngZone` and `setPositionClasses` might be
1088
+ // updating something in the view so we need to bring it back in.
1089
+ if (this._ngZone) {
1090
+ this._ngZone.run(() => this.menu.setPositionClasses(posX, posY));
1091
+ }
1092
+ else {
1093
+ this.menu.setPositionClasses(posX, posY);
1094
+ }
1073
1095
  });
1074
1096
  }
1075
1097
  }
@@ -1203,9 +1225,9 @@ class _MatMenuTriggerBase {
1203
1225
  return this._portal;
1204
1226
  }
1205
1227
  }
1206
- _MatMenuTriggerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: _MatMenuTriggerBase, deps: [{ token: i1$1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: MAT_MENU_SCROLL_STRATEGY }, { token: MAT_MENU_PANEL, optional: true }, { token: MatMenuItem, optional: true, self: true }, { token: i3$1.Directionality, optional: true }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Directive });
1207
- _MatMenuTriggerBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0-next.2", type: _MatMenuTriggerBase, inputs: { _deprecatedMatMenuTriggerFor: ["mat-menu-trigger-for", "_deprecatedMatMenuTriggerFor"], menu: ["matMenuTriggerFor", "menu"], menuData: ["matMenuTriggerData", "menuData"], restoreFocus: ["matMenuTriggerRestoreFocus", "restoreFocus"] }, outputs: { menuOpened: "menuOpened", onMenuOpen: "onMenuOpen", menuClosed: "menuClosed", onMenuClose: "onMenuClose" }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "click": "_handleClick($event)", "mousedown": "_handleMousedown($event)", "keydown": "_handleKeydown($event)" }, properties: { "attr.aria-expanded": "menuOpen || null", "attr.aria-controls": "menuOpen ? menu.panelId : null" } }, ngImport: i0 });
1208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: _MatMenuTriggerBase, decorators: [{
1228
+ _MatMenuTriggerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: _MatMenuTriggerBase, deps: [{ token: i1$1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: MAT_MENU_SCROLL_STRATEGY }, { token: MAT_MENU_PANEL, optional: true }, { token: MatMenuItem, optional: true, self: true }, { token: i3$1.Directionality, optional: true }, { token: i1.FocusMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
1229
+ _MatMenuTriggerBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0", type: _MatMenuTriggerBase, inputs: { _deprecatedMatMenuTriggerFor: ["mat-menu-trigger-for", "_deprecatedMatMenuTriggerFor"], menu: ["matMenuTriggerFor", "menu"], menuData: ["matMenuTriggerData", "menuData"], restoreFocus: ["matMenuTriggerRestoreFocus", "restoreFocus"] }, outputs: { menuOpened: "menuOpened", onMenuOpen: "onMenuOpen", menuClosed: "menuClosed", onMenuClose: "onMenuClose" }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "click": "_handleClick($event)", "mousedown": "_handleMousedown($event)", "keydown": "_handleKeydown($event)" }, properties: { "attr.aria-expanded": "menuOpen || null", "attr.aria-controls": "menuOpen ? menu.panelId : null" } }, ngImport: i0 });
1230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: _MatMenuTriggerBase, decorators: [{
1209
1231
  type: Directive,
1210
1232
  args: [{
1211
1233
  host: {
@@ -1232,7 +1254,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2",
1232
1254
  type: Self
1233
1255
  }] }, { type: i3$1.Directionality, decorators: [{
1234
1256
  type: Optional
1235
- }] }, { type: i1.FocusMonitor }];
1257
+ }] }, { type: i1.FocusMonitor }, { type: i0.NgZone }];
1236
1258
  }, propDecorators: { _deprecatedMatMenuTriggerFor: [{
1237
1259
  type: Input,
1238
1260
  args: ['mat-menu-trigger-for']
@@ -1257,9 +1279,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2",
1257
1279
  /** Directive applied to an element that should trigger a `mat-menu`. */
1258
1280
  class MatMenuTrigger extends _MatMenuTriggerBase {
1259
1281
  }
1260
- MatMenuTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1261
- MatMenuTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0-next.2", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", host: { classAttribute: "mat-menu-trigger" }, exportAs: ["matMenuTrigger"], usesInheritance: true, ngImport: i0 });
1262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuTrigger, decorators: [{
1282
+ MatMenuTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1283
+ MatMenuTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.0", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", host: { classAttribute: "mat-menu-trigger" }, exportAs: ["matMenuTrigger"], usesInheritance: true, ngImport: i0 });
1284
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuTrigger, decorators: [{
1263
1285
  type: Directive,
1264
1286
  args: [{
1265
1287
  selector: `[mat-menu-trigger-for], [matMenuTriggerFor]`,
@@ -1279,16 +1301,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2",
1279
1301
  */
1280
1302
  class MatMenuModule {
1281
1303
  }
1282
- MatMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1283
- MatMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuModule, declarations: [MatMenu, MatMenuItem, MatMenuTrigger, MatMenuContent], imports: [CommonModule, MatCommonModule, MatRippleModule, OverlayModule], exports: [CdkScrollableModule,
1304
+ MatMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1305
+ MatMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuModule, declarations: [MatMenu, MatMenuItem, MatMenuTrigger, MatMenuContent], imports: [CommonModule, MatCommonModule, MatRippleModule, OverlayModule], exports: [CdkScrollableModule,
1284
1306
  MatCommonModule,
1285
1307
  MatMenu,
1286
1308
  MatMenuItem,
1287
1309
  MatMenuTrigger,
1288
1310
  MatMenuContent] });
1289
- MatMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuModule, providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [[CommonModule, MatCommonModule, MatRippleModule, OverlayModule], CdkScrollableModule,
1311
+ MatMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuModule, providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [[CommonModule, MatCommonModule, MatRippleModule, OverlayModule], CdkScrollableModule,
1290
1312
  MatCommonModule] });
1291
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0-next.2", ngImport: i0, type: MatMenuModule, decorators: [{
1313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: MatMenuModule, decorators: [{
1292
1314
  type: NgModule,
1293
1315
  args: [{
1294
1316
  imports: [CommonModule, MatCommonModule, MatRippleModule, OverlayModule],