@angular/material 11.0.4 → 11.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. package/_theming.scss +354 -337
  2. package/autocomplete/_autocomplete-theme.scss +4 -5
  3. package/autocomplete/autocomplete.d.ts +7 -1
  4. package/autocomplete/index.metadata.json +1 -1
  5. package/autocomplete/testing/autocomplete-harness.d.ts +29 -15
  6. package/badge/_badge-theme.scss +2 -3
  7. package/bottom-sheet/_bottom-sheet-theme.scss +4 -5
  8. package/bundles/material-autocomplete-testing.umd.js +54 -36
  9. package/bundles/material-autocomplete-testing.umd.js.map +1 -1
  10. package/bundles/material-autocomplete-testing.umd.min.js +2 -2
  11. package/bundles/material-autocomplete-testing.umd.min.js.map +1 -1
  12. package/bundles/material-autocomplete.umd.js +31 -9
  13. package/bundles/material-autocomplete.umd.js.map +1 -1
  14. package/bundles/material-autocomplete.umd.min.js +3 -3
  15. package/bundles/material-autocomplete.umd.min.js.map +1 -1
  16. package/bundles/material-badge-testing.umd.js +9 -1
  17. package/bundles/material-badge-testing.umd.js.map +1 -1
  18. package/bundles/material-badge-testing.umd.min.js +1 -1
  19. package/bundles/material-badge-testing.umd.min.js.map +1 -1
  20. package/bundles/material-badge.umd.js +9 -1
  21. package/bundles/material-badge.umd.js.map +1 -1
  22. package/bundles/material-badge.umd.min.js +3 -3
  23. package/bundles/material-badge.umd.min.js.map +1 -1
  24. package/bundles/material-bottom-sheet-testing.umd.js +9 -1
  25. package/bundles/material-bottom-sheet-testing.umd.js.map +1 -1
  26. package/bundles/material-bottom-sheet-testing.umd.min.js +1 -1
  27. package/bundles/material-bottom-sheet-testing.umd.min.js.map +1 -1
  28. package/bundles/material-bottom-sheet.umd.js +9 -1
  29. package/bundles/material-bottom-sheet.umd.js.map +1 -1
  30. package/bundles/material-bottom-sheet.umd.min.js +1 -1
  31. package/bundles/material-bottom-sheet.umd.min.js.map +1 -1
  32. package/bundles/material-button-testing.umd.js +9 -1
  33. package/bundles/material-button-testing.umd.js.map +1 -1
  34. package/bundles/material-button-testing.umd.min.js +1 -1
  35. package/bundles/material-button-testing.umd.min.js.map +1 -1
  36. package/bundles/material-button-toggle-testing.umd.js +9 -1
  37. package/bundles/material-button-toggle-testing.umd.js.map +1 -1
  38. package/bundles/material-button-toggle-testing.umd.min.js +1 -1
  39. package/bundles/material-button-toggle-testing.umd.min.js.map +1 -1
  40. package/bundles/material-button-toggle.umd.js +9 -1
  41. package/bundles/material-button-toggle.umd.js.map +1 -1
  42. package/bundles/material-button-toggle.umd.min.js +1 -1
  43. package/bundles/material-button-toggle.umd.min.js.map +1 -1
  44. package/bundles/material-button.umd.js +17 -5
  45. package/bundles/material-button.umd.js.map +1 -1
  46. package/bundles/material-button.umd.min.js +1 -1
  47. package/bundles/material-button.umd.min.js.map +1 -1
  48. package/bundles/material-card-testing.umd.js +9 -1
  49. package/bundles/material-card-testing.umd.js.map +1 -1
  50. package/bundles/material-card-testing.umd.min.js +1 -1
  51. package/bundles/material-card-testing.umd.min.js.map +1 -1
  52. package/bundles/material-checkbox-testing.umd.js +73 -64
  53. package/bundles/material-checkbox-testing.umd.js.map +1 -1
  54. package/bundles/material-checkbox-testing.umd.min.js +2 -2
  55. package/bundles/material-checkbox-testing.umd.min.js.map +1 -1
  56. package/bundles/material-checkbox.umd.js +15 -3
  57. package/bundles/material-checkbox.umd.js.map +1 -1
  58. package/bundles/material-checkbox.umd.min.js +2 -2
  59. package/bundles/material-checkbox.umd.min.js.map +1 -1
  60. package/bundles/material-chips-testing.umd.js +189 -29
  61. package/bundles/material-chips-testing.umd.js.map +1 -1
  62. package/bundles/material-chips-testing.umd.min.js +2 -2
  63. package/bundles/material-chips-testing.umd.min.js.map +1 -1
  64. package/bundles/material-chips.umd.js +9 -1
  65. package/bundles/material-chips.umd.js.map +1 -1
  66. package/bundles/material-chips.umd.min.js +4 -4
  67. package/bundles/material-chips.umd.min.js.map +1 -1
  68. package/bundles/material-core-testing.umd.js +14 -3
  69. package/bundles/material-core-testing.umd.js.map +1 -1
  70. package/bundles/material-core-testing.umd.min.js +1 -1
  71. package/bundles/material-core-testing.umd.min.js.map +1 -1
  72. package/bundles/material-core.umd.js +55 -14
  73. package/bundles/material-core.umd.js.map +1 -1
  74. package/bundles/material-core.umd.min.js +16 -8
  75. package/bundles/material-core.umd.min.js.map +1 -1
  76. package/bundles/material-datepicker-testing.umd.js +24 -12
  77. package/bundles/material-datepicker-testing.umd.js.map +1 -1
  78. package/bundles/material-datepicker-testing.umd.min.js +1 -1
  79. package/bundles/material-datepicker-testing.umd.min.js.map +1 -1
  80. package/bundles/material-datepicker.umd.js +250 -80
  81. package/bundles/material-datepicker.umd.js.map +1 -1
  82. package/bundles/material-datepicker.umd.min.js +20 -12
  83. package/bundles/material-datepicker.umd.min.js.map +1 -1
  84. package/bundles/material-dialog-testing.umd.js +9 -1
  85. package/bundles/material-dialog-testing.umd.js.map +1 -1
  86. package/bundles/material-dialog-testing.umd.min.js +1 -1
  87. package/bundles/material-dialog-testing.umd.min.js.map +1 -1
  88. package/bundles/material-dialog.umd.js +10 -2
  89. package/bundles/material-dialog.umd.js.map +1 -1
  90. package/bundles/material-dialog.umd.min.js +8 -8
  91. package/bundles/material-dialog.umd.min.js.map +1 -1
  92. package/bundles/material-divider-testing.umd.js +9 -1
  93. package/bundles/material-divider-testing.umd.js.map +1 -1
  94. package/bundles/material-divider-testing.umd.min.js +2 -2
  95. package/bundles/material-divider-testing.umd.min.js.map +1 -1
  96. package/bundles/material-expansion-testing.umd.js +9 -1
  97. package/bundles/material-expansion-testing.umd.js.map +1 -1
  98. package/bundles/material-expansion-testing.umd.min.js +1 -1
  99. package/bundles/material-expansion-testing.umd.min.js.map +1 -1
  100. package/bundles/material-expansion.umd.js +16 -4
  101. package/bundles/material-expansion.umd.js.map +1 -1
  102. package/bundles/material-expansion.umd.min.js +6 -6
  103. package/bundles/material-expansion.umd.min.js.map +1 -1
  104. package/bundles/material-form-field-testing-control.umd.js +9 -1
  105. package/bundles/material-form-field-testing-control.umd.js.map +1 -1
  106. package/bundles/material-form-field-testing-control.umd.min.js +1 -1
  107. package/bundles/material-form-field-testing-control.umd.min.js.map +1 -1
  108. package/bundles/material-form-field-testing.umd.js +41 -30
  109. package/bundles/material-form-field-testing.umd.js.map +1 -1
  110. package/bundles/material-form-field-testing.umd.min.js +3 -3
  111. package/bundles/material-form-field-testing.umd.min.js.map +1 -1
  112. package/bundles/material-form-field.umd.js +11 -3
  113. package/bundles/material-form-field.umd.js.map +1 -1
  114. package/bundles/material-form-field.umd.min.js +2 -2
  115. package/bundles/material-form-field.umd.min.js.map +1 -1
  116. package/bundles/material-grid-list-testing.umd.js +15 -5
  117. package/bundles/material-grid-list-testing.umd.js.map +1 -1
  118. package/bundles/material-grid-list-testing.umd.min.js +2 -2
  119. package/bundles/material-grid-list-testing.umd.min.js.map +1 -1
  120. package/bundles/material-grid-list.umd.js +156 -146
  121. package/bundles/material-grid-list.umd.js.map +1 -1
  122. package/bundles/material-grid-list.umd.min.js +12 -19
  123. package/bundles/material-grid-list.umd.min.js.map +1 -1
  124. package/bundles/material-icon-testing.umd.js +12 -2
  125. package/bundles/material-icon-testing.umd.js.map +1 -1
  126. package/bundles/material-icon-testing.umd.min.js +2 -2
  127. package/bundles/material-icon-testing.umd.min.js.map +1 -1
  128. package/bundles/material-icon.umd.js +46 -2
  129. package/bundles/material-icon.umd.js.map +1 -1
  130. package/bundles/material-icon.umd.min.js +3 -3
  131. package/bundles/material-icon.umd.min.js.map +1 -1
  132. package/bundles/material-input-testing.umd.js +19 -8
  133. package/bundles/material-input-testing.umd.js.map +1 -1
  134. package/bundles/material-input-testing.umd.min.js +1 -1
  135. package/bundles/material-input-testing.umd.min.js.map +1 -1
  136. package/bundles/material-input.umd.js +9 -1
  137. package/bundles/material-input.umd.js.map +1 -1
  138. package/bundles/material-input.umd.min.js +1 -1
  139. package/bundles/material-input.umd.min.js.map +1 -1
  140. package/bundles/material-list-testing.umd.js +62 -57
  141. package/bundles/material-list-testing.umd.js.map +1 -1
  142. package/bundles/material-list-testing.umd.min.js +1 -1
  143. package/bundles/material-list-testing.umd.min.js.map +1 -1
  144. package/bundles/material-list.umd.js +9 -1
  145. package/bundles/material-list.umd.js.map +1 -1
  146. package/bundles/material-list.umd.min.js +1 -1
  147. package/bundles/material-list.umd.min.js.map +1 -1
  148. package/bundles/material-menu-testing.umd.js +94 -67
  149. package/bundles/material-menu-testing.umd.js.map +1 -1
  150. package/bundles/material-menu-testing.umd.min.js +2 -2
  151. package/bundles/material-menu-testing.umd.min.js.map +1 -1
  152. package/bundles/material-menu.umd.js +24 -28
  153. package/bundles/material-menu.umd.js.map +1 -1
  154. package/bundles/material-menu.umd.min.js +3 -3
  155. package/bundles/material-menu.umd.min.js.map +1 -1
  156. package/bundles/material-paginator-testing.umd.js +50 -34
  157. package/bundles/material-paginator-testing.umd.js.map +1 -1
  158. package/bundles/material-paginator-testing.umd.min.js +2 -2
  159. package/bundles/material-paginator-testing.umd.min.js.map +1 -1
  160. package/bundles/material-paginator.umd.js +9 -1
  161. package/bundles/material-paginator.umd.js.map +1 -1
  162. package/bundles/material-paginator.umd.min.js +1 -1
  163. package/bundles/material-paginator.umd.min.js.map +1 -1
  164. package/bundles/material-progress-bar-testing.umd.js +9 -1
  165. package/bundles/material-progress-bar-testing.umd.js.map +1 -1
  166. package/bundles/material-progress-bar-testing.umd.min.js +1 -1
  167. package/bundles/material-progress-bar-testing.umd.min.js.map +1 -1
  168. package/bundles/material-progress-bar.umd.js +9 -1
  169. package/bundles/material-progress-bar.umd.js.map +1 -1
  170. package/bundles/material-progress-bar.umd.min.js +1 -1
  171. package/bundles/material-progress-bar.umd.min.js.map +1 -1
  172. package/bundles/material-progress-spinner-testing.umd.js +9 -1
  173. package/bundles/material-progress-spinner-testing.umd.js.map +1 -1
  174. package/bundles/material-progress-spinner-testing.umd.min.js +1 -1
  175. package/bundles/material-progress-spinner-testing.umd.min.js.map +1 -1
  176. package/bundles/material-progress-spinner.umd.js +9 -1
  177. package/bundles/material-progress-spinner.umd.js.map +1 -1
  178. package/bundles/material-progress-spinner.umd.min.js +2 -2
  179. package/bundles/material-progress-spinner.umd.min.js.map +1 -1
  180. package/bundles/material-radio-testing.umd.js +88 -63
  181. package/bundles/material-radio-testing.umd.js.map +1 -1
  182. package/bundles/material-radio-testing.umd.min.js +2 -2
  183. package/bundles/material-radio-testing.umd.min.js.map +1 -1
  184. package/bundles/material-radio.umd.js +18 -5
  185. package/bundles/material-radio.umd.js.map +1 -1
  186. package/bundles/material-radio.umd.min.js +1 -1
  187. package/bundles/material-radio.umd.min.js.map +1 -1
  188. package/bundles/material-select-testing.umd.js +73 -51
  189. package/bundles/material-select-testing.umd.js.map +1 -1
  190. package/bundles/material-select-testing.umd.min.js +2 -2
  191. package/bundles/material-select-testing.umd.min.js.map +1 -1
  192. package/bundles/material-select.umd.js +14 -3
  193. package/bundles/material-select.umd.js.map +1 -1
  194. package/bundles/material-select.umd.min.js +5 -5
  195. package/bundles/material-select.umd.min.js.map +1 -1
  196. package/bundles/material-sidenav-testing.umd.js +175 -28
  197. package/bundles/material-sidenav-testing.umd.js.map +1 -1
  198. package/bundles/material-sidenav-testing.umd.min.js +2 -2
  199. package/bundles/material-sidenav-testing.umd.min.js.map +1 -1
  200. package/bundles/material-sidenav.umd.js +9 -1
  201. package/bundles/material-sidenav.umd.js.map +1 -1
  202. package/bundles/material-sidenav.umd.min.js +1 -1
  203. package/bundles/material-sidenav.umd.min.js.map +1 -1
  204. package/bundles/material-slide-toggle-testing.umd.js +9 -1
  205. package/bundles/material-slide-toggle-testing.umd.js.map +1 -1
  206. package/bundles/material-slide-toggle-testing.umd.min.js +1 -1
  207. package/bundles/material-slide-toggle-testing.umd.min.js.map +1 -1
  208. package/bundles/material-slide-toggle.umd.js +16 -3
  209. package/bundles/material-slide-toggle.umd.js.map +1 -1
  210. package/bundles/material-slide-toggle.umd.min.js +3 -3
  211. package/bundles/material-slide-toggle.umd.min.js.map +1 -1
  212. package/bundles/material-slider-testing.umd.js +15 -4
  213. package/bundles/material-slider-testing.umd.js.map +1 -1
  214. package/bundles/material-slider-testing.umd.min.js +2 -2
  215. package/bundles/material-slider-testing.umd.min.js.map +1 -1
  216. package/bundles/material-slider.umd.js +9 -1
  217. package/bundles/material-slider.umd.js.map +1 -1
  218. package/bundles/material-slider.umd.min.js +1 -1
  219. package/bundles/material-slider.umd.min.js.map +1 -1
  220. package/bundles/material-snack-bar-testing.umd.js +29 -12
  221. package/bundles/material-snack-bar-testing.umd.js.map +1 -1
  222. package/bundles/material-snack-bar-testing.umd.min.js +2 -2
  223. package/bundles/material-snack-bar-testing.umd.min.js.map +1 -1
  224. package/bundles/material-snack-bar.umd.js +20 -2
  225. package/bundles/material-snack-bar.umd.js.map +1 -1
  226. package/bundles/material-snack-bar.umd.min.js +1 -1
  227. package/bundles/material-snack-bar.umd.min.js.map +1 -1
  228. package/bundles/material-sort-testing.umd.js +9 -1
  229. package/bundles/material-sort-testing.umd.js.map +1 -1
  230. package/bundles/material-sort-testing.umd.min.js +1 -1
  231. package/bundles/material-sort-testing.umd.min.js.map +1 -1
  232. package/bundles/material-sort.umd.js +9 -1
  233. package/bundles/material-sort.umd.js.map +1 -1
  234. package/bundles/material-sort.umd.min.js +3 -3
  235. package/bundles/material-sort.umd.min.js.map +1 -1
  236. package/bundles/material-stepper-testing.umd.js +9 -1
  237. package/bundles/material-stepper-testing.umd.js.map +1 -1
  238. package/bundles/material-stepper-testing.umd.min.js +2 -2
  239. package/bundles/material-stepper-testing.umd.min.js.map +1 -1
  240. package/bundles/material-stepper.umd.js +16 -3
  241. package/bundles/material-stepper.umd.js.map +1 -1
  242. package/bundles/material-stepper.umd.min.js +3 -3
  243. package/bundles/material-stepper.umd.min.js.map +1 -1
  244. package/bundles/material-table-testing.umd.js +26 -17
  245. package/bundles/material-table-testing.umd.js.map +1 -1
  246. package/bundles/material-table-testing.umd.min.js +2 -2
  247. package/bundles/material-table-testing.umd.min.js.map +1 -1
  248. package/bundles/material-table.umd.js +65 -38
  249. package/bundles/material-table.umd.js.map +1 -1
  250. package/bundles/material-table.umd.min.js +3 -3
  251. package/bundles/material-table.umd.min.js.map +1 -1
  252. package/bundles/material-tabs-testing.umd.js +11 -3
  253. package/bundles/material-tabs-testing.umd.js.map +1 -1
  254. package/bundles/material-tabs-testing.umd.min.js +1 -1
  255. package/bundles/material-tabs-testing.umd.min.js.map +1 -1
  256. package/bundles/material-tabs.umd.js +10 -2
  257. package/bundles/material-tabs.umd.js.map +1 -1
  258. package/bundles/material-tabs.umd.min.js +5 -5
  259. package/bundles/material-tabs.umd.min.js.map +1 -1
  260. package/bundles/material-toolbar-testing.umd.js +11 -2
  261. package/bundles/material-toolbar-testing.umd.js.map +1 -1
  262. package/bundles/material-toolbar-testing.umd.min.js +2 -2
  263. package/bundles/material-toolbar-testing.umd.min.js.map +1 -1
  264. package/bundles/material-toolbar.umd.js +9 -1
  265. package/bundles/material-toolbar.umd.js.map +1 -1
  266. package/bundles/material-toolbar.umd.min.js +2 -2
  267. package/bundles/material-toolbar.umd.min.js.map +1 -1
  268. package/bundles/material-tooltip-testing.umd.js +9 -1
  269. package/bundles/material-tooltip-testing.umd.js.map +1 -1
  270. package/bundles/material-tooltip-testing.umd.min.js +1 -1
  271. package/bundles/material-tooltip-testing.umd.min.js.map +1 -1
  272. package/bundles/material-tooltip.umd.js +35 -7
  273. package/bundles/material-tooltip.umd.js.map +1 -1
  274. package/bundles/material-tooltip.umd.min.js +3 -3
  275. package/bundles/material-tooltip.umd.min.js.map +1 -1
  276. package/bundles/material-tree-testing.umd.js +10 -2
  277. package/bundles/material-tree-testing.umd.js.map +1 -1
  278. package/bundles/material-tree-testing.umd.min.js +1 -1
  279. package/bundles/material-tree-testing.umd.min.js.map +1 -1
  280. package/bundles/material-tree.umd.js +9 -1
  281. package/bundles/material-tree.umd.js.map +1 -1
  282. package/bundles/material-tree.umd.min.js +3 -3
  283. package/bundles/material-tree.umd.min.js.map +1 -1
  284. package/button/_button-base.scss +2 -2
  285. package/button/_button-theme.scss +10 -11
  286. package/button/index.metadata.json +1 -1
  287. package/button-toggle/_button-toggle-theme.scss +9 -10
  288. package/card/_card-theme.scss +5 -6
  289. package/checkbox/_checkbox-theme.scss +2 -3
  290. package/checkbox/testing/checkbox-harness.d.ts +21 -16
  291. package/chips/_chips-theme.scss +4 -5
  292. package/chips/testing/chip-harness-filters.d.ts +11 -3
  293. package/chips/testing/chip-harness.d.ts +5 -5
  294. package/chips/testing/chip-list-harness.d.ts +15 -12
  295. package/chips/testing/chip-listbox-harness.d.ts +34 -0
  296. package/chips/testing/chip-option-harness.d.ts +29 -0
  297. package/chips/testing/public-api.d.ts +3 -1
  298. package/core/_core.scss +6 -6
  299. package/core/color/_all-color.scss +2 -1
  300. package/core/datetime/date-formats.d.ts +1 -0
  301. package/core/density/private/_all-density.scss +34 -0
  302. package/core/density/{_index.scss → private/_compatibility.scss} +11 -8
  303. package/core/focus-indicators/_focus-indicators.scss +3 -4
  304. package/core/index.metadata.json +1 -1
  305. package/core/option/_optgroup-theme.scss +2 -3
  306. package/core/option/_option-theme.scss +2 -3
  307. package/core/option/index.d.ts +1 -0
  308. package/core/option/optgroup.d.ts +4 -0
  309. package/core/option/option-parent.d.ts +22 -0
  310. package/core/option/option.d.ts +2 -14
  311. package/core/ripple/_ripple.scss +2 -3
  312. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +2 -3
  313. package/core/style/_elevation.scss +2 -18
  314. package/core/style/_form-common.scss +2 -2
  315. package/core/style/_private.scss +40 -0
  316. package/core/testing/option-harness.d.ts +2 -0
  317. package/core/theming/_all-theme.scss +3 -2
  318. package/core/theming/_theming.scss +148 -38
  319. package/core/typography/_all-typography.scss +1 -1
  320. package/datepicker/_datepicker-theme.scss +5 -6
  321. package/datepicker/date-range-input-parts.d.ts +2 -3
  322. package/datepicker/date-range-input.d.ts +5 -4
  323. package/datepicker/date-selection-model.d.ts +10 -0
  324. package/datepicker/datepicker-actions.d.ts +33 -0
  325. package/datepicker/datepicker-base.d.ts +52 -9
  326. package/datepicker/datepicker-input-base.d.ts +5 -10
  327. package/datepicker/datepicker-input.d.ts +9 -8
  328. package/datepicker/datepicker-toggle.d.ts +4 -2
  329. package/datepicker/index.metadata.json +1 -1
  330. package/datepicker/public-api.d.ts +1 -0
  331. package/dialog/_dialog-theme.scss +4 -5
  332. package/divider/_divider-theme.scss +2 -3
  333. package/esm2015/autocomplete/autocomplete-trigger.js +10 -2
  334. package/esm2015/autocomplete/autocomplete.js +11 -4
  335. package/esm2015/autocomplete/testing/autocomplete-harness.js +27 -19
  336. package/esm2015/button/button.js +10 -5
  337. package/esm2015/checkbox/checkbox.js +8 -3
  338. package/esm2015/checkbox/testing/checkbox-harness.js +31 -36
  339. package/esm2015/chips/testing/chip-harness-filters.js +1 -1
  340. package/esm2015/chips/testing/chip-harness.js +6 -6
  341. package/esm2015/chips/testing/chip-list-harness.js +19 -16
  342. package/esm2015/chips/testing/chip-listbox-harness.js +49 -0
  343. package/esm2015/chips/testing/chip-option-harness.js +54 -0
  344. package/esm2015/chips/testing/public-api.js +4 -2
  345. package/esm2015/core/common-behaviors/common-module.js +1 -1
  346. package/esm2015/core/datetime/date-formats.js +1 -1
  347. package/esm2015/core/option/index.js +2 -1
  348. package/esm2015/core/option/optgroup.js +32 -7
  349. package/esm2015/core/option/option-parent.js +13 -0
  350. package/esm2015/core/option/option.js +5 -8
  351. package/esm2015/core/testing/option-harness.js +7 -2
  352. package/esm2015/core/version.js +1 -1
  353. package/esm2015/datepicker/date-range-input-parts.js +10 -14
  354. package/esm2015/datepicker/date-range-input.js +11 -4
  355. package/esm2015/datepicker/date-range-picker.js +3 -2
  356. package/esm2015/datepicker/date-selection-model.js +24 -1
  357. package/esm2015/datepicker/datepicker-actions.js +89 -0
  358. package/esm2015/datepicker/datepicker-base.js +66 -25
  359. package/esm2015/datepicker/datepicker-input-base.js +15 -27
  360. package/esm2015/datepicker/datepicker-input.js +11 -5
  361. package/esm2015/datepicker/datepicker-module.js +8 -1
  362. package/esm2015/datepicker/datepicker-toggle.js +7 -10
  363. package/esm2015/datepicker/datepicker.js +5 -2
  364. package/esm2015/datepicker/month-view.js +6 -3
  365. package/esm2015/datepicker/public-api.js +2 -1
  366. package/esm2015/datepicker/testing/date-range-input-harness.js +4 -4
  367. package/esm2015/datepicker/testing/datepicker-input-harness.js +3 -3
  368. package/esm2015/datepicker/testing/datepicker-trigger-harness-base.js +3 -3
  369. package/esm2015/dialog/dialog-ref.js +2 -2
  370. package/esm2015/expansion/expansion-panel-header.js +9 -4
  371. package/esm2015/expansion/expansion-panel.js +1 -1
  372. package/esm2015/form-field/form-field-animations.js +2 -2
  373. package/esm2015/form-field/form-field.js +2 -2
  374. package/esm2015/form-field/testing/form-field-harness.js +14 -9
  375. package/esm2015/grid-list/public-api.js +3 -2
  376. package/esm2015/grid-list/testing/grid-list-harness.js +6 -5
  377. package/esm2015/icon/icon-registry.js +39 -3
  378. package/esm2015/icon/testing/fake-icon-registry.js +4 -2
  379. package/esm2015/input/testing/input-harness.js +3 -3
  380. package/esm2015/input/testing/native-select-harness.js +7 -5
  381. package/esm2015/list/selection-list.js +1 -1
  382. package/esm2015/list/testing/list-harness-base.js +5 -4
  383. package/esm2015/list/testing/list-item-harness-base.js +5 -4
  384. package/esm2015/list/testing/selection-list-harness.js +8 -5
  385. package/esm2015/menu/menu-item.js +3 -3
  386. package/esm2015/menu/menu-trigger.js +15 -25
  387. package/esm2015/menu/menu.js +2 -2
  388. package/esm2015/menu/testing/menu-harness.js +44 -32
  389. package/esm2015/paginator/testing/paginator-harness.js +27 -25
  390. package/esm2015/radio/radio.js +10 -5
  391. package/esm2015/radio/testing/radio-harness.js +40 -29
  392. package/esm2015/select/select.js +6 -3
  393. package/esm2015/select/testing/select-harness.js +36 -28
  394. package/esm2015/sidenav/testing/drawer-container-harness.js +41 -0
  395. package/esm2015/sidenav/testing/drawer-content-harness.js +23 -0
  396. package/esm2015/sidenav/testing/drawer-harness-filters.js +1 -1
  397. package/esm2015/sidenav/testing/drawer-harness.js +19 -13
  398. package/esm2015/sidenav/testing/public-api.js +6 -2
  399. package/esm2015/sidenav/testing/sidenav-container-harness.js +41 -0
  400. package/esm2015/sidenav/testing/sidenav-content-harness.js +23 -0
  401. package/esm2015/sidenav/testing/sidenav-harness.js +4 -4
  402. package/esm2015/slide-toggle/slide-toggle.js +8 -3
  403. package/esm2015/slider/testing/slider-harness.js +5 -5
  404. package/esm2015/snack-bar/snack-bar-container.js +12 -2
  405. package/esm2015/snack-bar/testing/snack-bar-harness.js +19 -12
  406. package/esm2015/stepper/step-header.js +8 -3
  407. package/esm2015/table/table-data-source.js +34 -21
  408. package/esm2015/table/testing/cell-harness.js +3 -3
  409. package/esm2015/table/testing/row-harness.js +5 -5
  410. package/esm2015/table/testing/table-harness.js +8 -8
  411. package/esm2015/tabs/tab-body.js +3 -3
  412. package/esm2015/tabs/testing/tab-group-harness.js +3 -3
  413. package/esm2015/tabs/testing/tab-nav-bar-harness.js +3 -3
  414. package/esm2015/toolbar/testing/toolbar-harness.js +3 -3
  415. package/esm2015/tooltip/tooltip.js +28 -7
  416. package/esm2015/tree/testing/tree-harness.js +2 -2
  417. package/expansion/_expansion-mixins.scss +11 -0
  418. package/expansion/_expansion-theme.scss +13 -19
  419. package/expansion/index.metadata.json +1 -1
  420. package/fesm2015/autocomplete/testing.js +26 -18
  421. package/fesm2015/autocomplete/testing.js.map +1 -1
  422. package/fesm2015/autocomplete.js +19 -5
  423. package/fesm2015/autocomplete.js.map +1 -1
  424. package/fesm2015/button.js +9 -4
  425. package/fesm2015/button.js.map +1 -1
  426. package/fesm2015/checkbox/testing.js +30 -35
  427. package/fesm2015/checkbox/testing.js.map +1 -1
  428. package/fesm2015/checkbox.js +7 -2
  429. package/fesm2015/checkbox.js.map +1 -1
  430. package/fesm2015/chips/testing.js +120 -21
  431. package/fesm2015/chips/testing.js.map +1 -1
  432. package/fesm2015/core/testing.js +6 -1
  433. package/fesm2015/core/testing.js.map +1 -1
  434. package/fesm2015/core.js +45 -13
  435. package/fesm2015/core.js.map +1 -1
  436. package/fesm2015/datepicker/testing.js +5 -5
  437. package/fesm2015/datepicker/testing.js.map +1 -1
  438. package/fesm2015/datepicker.js +275 -116
  439. package/fesm2015/datepicker.js.map +1 -1
  440. package/fesm2015/dialog.js +1 -1
  441. package/fesm2015/dialog.js.map +1 -1
  442. package/fesm2015/expansion.js +8 -3
  443. package/fesm2015/expansion.js.map +1 -1
  444. package/fesm2015/form-field/testing.js +13 -8
  445. package/fesm2015/form-field/testing.js.map +1 -1
  446. package/fesm2015/form-field.js +2 -2
  447. package/fesm2015/form-field.js.map +1 -1
  448. package/fesm2015/grid-list/testing.js +5 -4
  449. package/fesm2015/grid-list/testing.js.map +1 -1
  450. package/fesm2015/grid-list.js +128 -126
  451. package/fesm2015/grid-list.js.map +1 -1
  452. package/fesm2015/icon/testing.js +3 -1
  453. package/fesm2015/icon/testing.js.map +1 -1
  454. package/fesm2015/icon.js +38 -2
  455. package/fesm2015/icon.js.map +1 -1
  456. package/fesm2015/input/testing.js +7 -5
  457. package/fesm2015/input/testing.js.map +1 -1
  458. package/fesm2015/list/testing.js +13 -8
  459. package/fesm2015/list/testing.js.map +1 -1
  460. package/fesm2015/list.js.map +1 -1
  461. package/fesm2015/menu/testing.js +45 -33
  462. package/fesm2015/menu/testing.js.map +1 -1
  463. package/fesm2015/menu.js +17 -27
  464. package/fesm2015/menu.js.map +1 -1
  465. package/fesm2015/paginator/testing.js +26 -24
  466. package/fesm2015/paginator/testing.js.map +1 -1
  467. package/fesm2015/paginator.js.map +1 -1
  468. package/fesm2015/progress-spinner.js.map +1 -1
  469. package/fesm2015/radio/testing.js +39 -28
  470. package/fesm2015/radio/testing.js.map +1 -1
  471. package/fesm2015/radio.js +9 -4
  472. package/fesm2015/radio.js.map +1 -1
  473. package/fesm2015/select/testing.js +36 -28
  474. package/fesm2015/select/testing.js.map +1 -1
  475. package/fesm2015/select.js +5 -2
  476. package/fesm2015/select.js.map +1 -1
  477. package/fesm2015/sidenav/testing.js +139 -15
  478. package/fesm2015/sidenav/testing.js.map +1 -1
  479. package/fesm2015/sidenav.js.map +1 -1
  480. package/fesm2015/slide-toggle.js +7 -2
  481. package/fesm2015/slide-toggle.js.map +1 -1
  482. package/fesm2015/slider/testing.js +4 -4
  483. package/fesm2015/slider/testing.js.map +1 -1
  484. package/fesm2015/snack-bar/testing.js +18 -11
  485. package/fesm2015/snack-bar/testing.js.map +1 -1
  486. package/fesm2015/snack-bar.js +11 -1
  487. package/fesm2015/snack-bar.js.map +1 -1
  488. package/fesm2015/stepper.js +7 -2
  489. package/fesm2015/stepper.js.map +1 -1
  490. package/fesm2015/table/testing.js +11 -11
  491. package/fesm2015/table/testing.js.map +1 -1
  492. package/fesm2015/table.js +34 -21
  493. package/fesm2015/table.js.map +1 -1
  494. package/fesm2015/tabs/testing.js +3 -3
  495. package/fesm2015/tabs/testing.js.map +1 -1
  496. package/fesm2015/tabs.js +2 -2
  497. package/fesm2015/tabs.js.map +1 -1
  498. package/fesm2015/toolbar/testing.js +2 -2
  499. package/fesm2015/toolbar/testing.js.map +1 -1
  500. package/fesm2015/tooltip.js +27 -7
  501. package/fesm2015/tooltip.js.map +1 -1
  502. package/fesm2015/tree/testing.js +1 -1
  503. package/fesm2015/tree/testing.js.map +1 -1
  504. package/form-field/_form-field-fill-theme.scss +4 -5
  505. package/form-field/_form-field-legacy-theme.scss +5 -6
  506. package/form-field/_form-field-outline-theme.scss +4 -5
  507. package/form-field/_form-field-standard-theme.scss +5 -6
  508. package/form-field/_form-field-theme.scss +8 -9
  509. package/form-field/index.metadata.json +1 -1
  510. package/grid-list/_grid-list-theme.scss +2 -3
  511. package/grid-list/index.metadata.json +1 -1
  512. package/grid-list/public-api.d.ts +2 -1
  513. package/icon/_icon-theme.scss +2 -3
  514. package/icon/icon-registry.d.ts +23 -0
  515. package/icon/index.metadata.json +1 -1
  516. package/icon/testing/fake-icon-registry.d.ts +1 -0
  517. package/icon/testing/index.metadata.json +1 -1
  518. package/input/_input-theme.scss +3 -4
  519. package/list/_list-theme.scss +2 -3
  520. package/list/index.metadata.json +1 -1
  521. package/list/selection-list.d.ts +6 -1
  522. package/list/testing/list-harness-base.d.ts +1 -1
  523. package/list/testing/list-item-harness-base.d.ts +2 -2
  524. package/list/testing/selection-list-harness.d.ts +2 -1
  525. package/menu/_menu-theme.scss +4 -5
  526. package/menu/index.metadata.json +1 -1
  527. package/menu/menu-trigger.d.ts +1 -3
  528. package/menu/menu.d.ts +4 -2
  529. package/menu/testing/menu-harness.d.ts +39 -26
  530. package/package.json +2 -2
  531. package/paginator/_paginator-theme.scss +7 -8
  532. package/paginator/testing/paginator-harness.d.ts +32 -19
  533. package/prebuilt-themes/deeppurple-amber.css +1 -1
  534. package/prebuilt-themes/indigo-pink.css +1 -1
  535. package/prebuilt-themes/pink-bluegrey.css +1 -1
  536. package/prebuilt-themes/purple-green.css +1 -1
  537. package/progress-bar/_progress-bar-theme.scss +2 -3
  538. package/progress-spinner/_progress-spinner-theme.scss +2 -3
  539. package/radio/_radio-theme.scss +2 -3
  540. package/radio/index.metadata.json +1 -1
  541. package/radio/radio.d.ts +2 -2
  542. package/radio/testing/radio-harness.d.ts +39 -24
  543. package/schematics/ng-add/fonts/material-fonts.js +7 -5
  544. package/schematics/ng-add/index.js +1 -1
  545. package/schematics/ng-add/setup-project.js +4 -3
  546. package/select/_select-theme.scss +5 -6
  547. package/select/index.metadata.json +1 -1
  548. package/select/testing/select-harness.d.ts +28 -16
  549. package/sidenav/_sidenav-theme.scss +4 -5
  550. package/sidenav/testing/drawer-container-harness.d.ts +30 -0
  551. package/sidenav/testing/drawer-content-harness.d.ts +21 -0
  552. package/sidenav/testing/drawer-harness-filters.d.ts +6 -0
  553. package/sidenav/testing/drawer-harness.d.ts +13 -7
  554. package/sidenav/testing/public-api.d.ts +5 -1
  555. package/sidenav/testing/sidenav-container-harness.d.ts +30 -0
  556. package/sidenav/testing/sidenav-content-harness.d.ts +21 -0
  557. package/sidenav/testing/sidenav-harness.d.ts +3 -3
  558. package/slide-toggle/_slide-toggle-theme.scss +4 -5
  559. package/slide-toggle/slide-toggle.d.ts +2 -2
  560. package/slider/_slider-theme.scss +2 -3
  561. package/snack-bar/_snack-bar-theme.scss +4 -5
  562. package/snack-bar/index.metadata.json +1 -1
  563. package/snack-bar/snack-bar-container.d.ts +5 -0
  564. package/snack-bar/testing/snack-bar-harness.d.ts +7 -4
  565. package/sort/_sort-theme.scss +2 -3
  566. package/stepper/_stepper-theme.scss +7 -8
  567. package/stepper/step-header.d.ts +2 -2
  568. package/table/_table-theme.scss +2 -3
  569. package/table/index.metadata.json +1 -1
  570. package/table/table-data-source.d.ts +31 -20
  571. package/table/testing/cell-harness.d.ts +2 -2
  572. package/tabs/_tabs-common.scss +2 -2
  573. package/tabs/_tabs-theme.scss +14 -9
  574. package/tabs/index.metadata.json +1 -1
  575. package/tabs/tab-body.d.ts +3 -3
  576. package/toolbar/_toolbar-theme.scss +8 -9
  577. package/tooltip/_tooltip-theme.scss +2 -3
  578. package/tooltip/index.metadata.json +1 -1
  579. package/tooltip/tooltip.d.ts +10 -1
  580. package/tree/_tree-theme.scss +7 -8
  581. package/core/density/_all-density.scss +0 -19
  582. package/core/style/_noop-animation.scss +0 -22
  583. package/core/theming/_check-duplicate-styles.scss +0 -106
@@ -1 +1 @@
1
- {"version":3,"file":"list__testing.js","sources":["../../../../../../src/material/list/testing/list-item-harness-base.ts","../../../../../../src/material/list/testing/list-harness-base.ts","../../../../../../src/material/list/testing/action-list-harness.ts","../../../../../../src/material/list/testing/list-harness.ts","../../../../../../src/material/list/testing/list-harness-filters.ts","../../../../../../src/material/list/testing/nav-list-harness.ts","../../../../../../src/material/list/testing/selection-list-harness.ts","../../../../../../src/material/list/testing/public-api.ts","../../../../../../src/material/list/testing/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessLoader,\n HarnessPredicate,\n ContentContainerComponentHarness,\n} from '@angular/cdk/testing';\nimport {BaseListItemHarnessFilters, SubheaderHarnessFilters} from './list-harness-filters';\n\nconst iconSelector = '.mat-list-icon';\nconst avatarSelector = '.mat-list-avatar';\n\n/**\n * Gets a `HarnessPredicate` that applies the given `BaseListItemHarnessFilters` to the given\n * list item harness.\n * @template H The type of list item harness to create a predicate for.\n * @param harnessType A constructor for a list item harness.\n * @param options An instance of `BaseListItemHarnessFilters` to apply.\n * @return A `HarnessPredicate` for the given harness type with the given options applied.\n */\nexport function getListItemPredicate<H extends MatListItemHarnessBase>(\n harnessType: ComponentHarnessConstructor<H>,\n options: BaseListItemHarnessFilters): HarnessPredicate<H> {\n return new HarnessPredicate(harnessType, options)\n .addOption('text', options.text,\n (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));\n}\n\n/** Harness for interacting with a list subheader. */\nexport class MatSubheaderHarness extends ComponentHarness {\n static hostSelector = '.mat-subheader';\n\n static with(options: SubheaderHarnessFilters = {}): HarnessPredicate<MatSubheaderHarness> {\n return new HarnessPredicate(MatSubheaderHarness, options)\n .addOption('text', options.text,\n (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));\n }\n\n /** Gets the full text content of the list item (including text from any font icons). */\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n}\n\n/** Selectors for the various list item sections that may contain user content. */\nexport const enum MatListItemSection {\n CONTENT = '.mat-list-item-content'\n}\n\n/**\n * Shared behavior among the harnesses for the various `MatListItem` flavors.\n * @docs-private\n */\nexport class MatListItemHarnessBase extends ContentContainerComponentHarness<MatListItemSection> {\n private _lines = this.locatorForAll('.mat-line');\n private _avatar = this.locatorForOptional(avatarSelector);\n private _icon = this.locatorForOptional(iconSelector);\n\n /** Gets the full text content of the list item (including text from any font icons). */\n async getText(): Promise<string> {\n return (await this.host()).text({exclude: `${iconSelector}, ${avatarSelector}`});\n }\n\n /** Gets the lines of text (`mat-line` elements) in this nav list item. */\n async getLinesText(): Promise<string[]> {\n return Promise.all((await this._lines()).map(l => l.text()));\n }\n\n /** Whether this list item has an avatar. */\n async hasAvatar(): Promise<boolean> {\n return !!await this._avatar();\n }\n\n /** Whether this list item has an icon. */\n async hasIcon(): Promise<boolean> {\n return !!await this._icon();\n }\n\n /**\n * Gets a `HarnessLoader` used to get harnesses within the list item's content.\n * @deprecated Use `getChildLoader(MatListItemSection.CONTENT)` or `getHarness` instead.\n * @breaking-change 12.0.0\n */\n async getHarnessLoaderForContent(): Promise<HarnessLoader> {\n return this.getChildLoader(MatListItemSection.CONTENT);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessPredicate\n} from '@angular/cdk/testing';\nimport {DividerHarnessFilters, MatDividerHarness} from '@angular/material/divider/testing';\nimport {BaseListItemHarnessFilters, SubheaderHarnessFilters} from './list-harness-filters';\nimport {MatSubheaderHarness} from './list-item-harness-base';\n\n/** Represents a section of a list falling under a specific header. */\nexport interface ListSection<I> {\n /** The heading for this list section. `undefined` if there is no heading. */\n heading?: string;\n\n /** The items in this list section. */\n items: I[];\n}\n\n/**\n * Shared behavior among the harnesses for the various `MatList` flavors.\n * @template T A constructor type for a list item harness type used by this list harness.\n * @template C The list item harness type that `T` constructs.\n * @template F The filter type used filter list item harness of type `C`.\n * @docs-private\n */\nexport class MatListHarnessBase\n <\n T extends (ComponentHarnessConstructor<C> & {with: (options?: F) => HarnessPredicate<C>}),\n C extends ComponentHarness,\n F extends BaseListItemHarnessFilters\n > extends ComponentHarness {\n protected _itemHarness: T;\n\n /**\n * Gets a list of harnesses representing the items in this list.\n * @param filters Optional filters used to narrow which harnesses are included\n * @return The list of items matching the given filters.\n */\n async getItems(filters?: F): Promise<C[]> {\n return this.locatorForAll(this._itemHarness.with(filters))();\n }\n\n /**\n * Gets a list of `ListSection` representing the list items grouped by subheaders. If the list has\n * no subheaders it is represented as a single `ListSection` with an undefined `heading` property.\n * @param filters Optional filters used to narrow which list item harnesses are included\n * @return The list of items matching the given filters, grouped into sections by subheader.\n */\n async getItemsGroupedBySubheader(filters?: F): Promise<ListSection<C>[]> {\n const listSections = [];\n let currentSection: ListSection<C> = {items: []};\n const itemsAndSubheaders =\n await this.getItemsWithSubheadersAndDividers({item: filters, divider: false});\n for (const itemOrSubheader of itemsAndSubheaders) {\n if (itemOrSubheader instanceof MatSubheaderHarness) {\n if (currentSection.heading !== undefined || currentSection.items.length) {\n listSections.push(currentSection);\n }\n currentSection = {heading: await itemOrSubheader.getText(), items: []};\n } else {\n currentSection.items.push(itemOrSubheader);\n }\n }\n if (currentSection.heading !== undefined || currentSection.items.length ||\n !listSections.length) {\n listSections.push(currentSection);\n }\n return listSections;\n }\n\n /**\n * Gets a list of sub-lists representing the list items grouped by dividers. If the list has no\n * dividers it is represented as a list with a single sub-list.\n * @param filters Optional filters used to narrow which list item harnesses are included\n * @return The list of items matching the given filters, grouped into sub-lists by divider.\n */\n async getItemsGroupedByDividers(filters?: F): Promise<C[][]> {\n const listSections: C[][] = [[]];\n const itemsAndDividers =\n await this.getItemsWithSubheadersAndDividers({item: filters, subheader: false});\n for (const itemOrDivider of itemsAndDividers) {\n if (itemOrDivider instanceof MatDividerHarness) {\n listSections.push([]);\n } else {\n listSections[listSections.length - 1].push(itemOrDivider);\n }\n }\n return listSections;\n }\n\n /**\n * Gets a list of harnesses representing all of the items, subheaders, and dividers\n * (in the order they appear in the list). Use `instanceof` to check which type of harness a given\n * item is.\n * @param filters Optional filters used to narrow which list items, subheaders, and dividers are\n * included. A value of `false` for the `item`, `subheader`, or `divider` properties indicates\n * that the respective harness type should be omitted completely.\n * @return The list of harnesses representing the items, subheaders, and dividers matching the\n * given filters.\n */\n getItemsWithSubheadersAndDividers(filters: {\n item: false,\n subheader: false,\n divider: false\n }): Promise<[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item?: F | false,\n subheader: false,\n divider: false\n }): Promise<C[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item: false,\n subheader?: SubheaderHarnessFilters | false,\n divider: false\n }): Promise<MatSubheaderHarness[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item: false,\n subheader: false,\n divider?: DividerHarnessFilters | false\n }): Promise<MatDividerHarness[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item?: F | false,\n subheader?: SubheaderHarnessFilters | false,\n divider: false\n }): Promise<(C | MatSubheaderHarness)[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item?: F | false,\n subheader: false,\n divider?: false | DividerHarnessFilters\n }): Promise<(C | MatDividerHarness)[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item: false,\n subheader?: false | SubheaderHarnessFilters,\n divider?: false | DividerHarnessFilters\n }): Promise<(MatSubheaderHarness | MatDividerHarness)[]>;\n getItemsWithSubheadersAndDividers(filters?: {\n item?: F | false,\n subheader?: SubheaderHarnessFilters | false,\n divider?: DividerHarnessFilters | false\n }): Promise<(C | MatSubheaderHarness | MatDividerHarness)[]>;\n async getItemsWithSubheadersAndDividers(filters: {\n item?: F | false,\n subheader?: SubheaderHarnessFilters | false,\n divider?: DividerHarnessFilters | false\n } = {}): Promise<(C | MatSubheaderHarness | MatDividerHarness)[]> {\n const query = [];\n if (filters.item !== false) {\n query.push(this._itemHarness.with(filters.item || {} as F));\n }\n if (filters.subheader !== false) {\n query.push(MatSubheaderHarness.with(filters.subheader));\n }\n if (filters.divider !== false) {\n query.push(MatDividerHarness.with(filters.divider));\n }\n return this.locatorForAll(...query)();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {ActionListHarnessFilters, ActionListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a standard mat-action-list in tests. */\nexport class MatActionListHarness extends MatListHarnessBase<\n typeof MatActionListItemHarness, MatActionListItemHarness, ActionListItemHarnessFilters> {\n /** The selector for the host element of a `MatActionList` instance. */\n static hostSelector = 'mat-action-list.mat-list';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatActionListHarness` that meets\n * certain criteria.\n * @param options Options for filtering which action list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ActionListHarnessFilters = {}): HarnessPredicate<MatActionListHarness> {\n return new HarnessPredicate(MatActionListHarness, options);\n }\n\n _itemHarness = MatActionListItemHarness;\n}\n\n/** Harness for interacting with an action list item. */\nexport class MatActionListItemHarness extends MatListItemHarnessBase {\n /** The selector for the host element of a `MatListItem` instance. */\n static hostSelector = `${MatActionListHarness.hostSelector} .mat-list-item`;\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatActionListItemHarness` that\n * meets certain criteria.\n * @param options Options for filtering which action list item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ActionListItemHarnessFilters = {}):\n HarnessPredicate<MatActionListItemHarness> {\n return getListItemPredicate(MatActionListItemHarness, options);\n }\n\n /** Clicks on the action list item. */\n async click(): Promise<void> {\n return (await this.host()).click();\n }\n\n /** Focuses the action list item. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Blurs the action list item. */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the action list item is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {ListHarnessFilters, ListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a standard mat-list in tests. */\nexport class MatListHarness extends\n MatListHarnessBase<typeof MatListItemHarness, MatListItemHarness, ListItemHarnessFilters> {\n /** The selector for the host element of a `MatList` instance. */\n static hostSelector = '.mat-list:not(mat-action-list)';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatListHarness` that meets certain\n * criteria.\n * @param options Options for filtering which list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ListHarnessFilters = {}): HarnessPredicate<MatListHarness> {\n return new HarnessPredicate(MatListHarness, options);\n }\n\n _itemHarness = MatListItemHarness;\n}\n\n/** Harness for interacting with a list item. */\nexport class MatListItemHarness extends MatListItemHarnessBase {\n /** The selector for the host element of a `MatListItem` instance. */\n static hostSelector = `${MatListHarness.hostSelector} .mat-list-item`;\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatListItemHarness` that meets\n * certain criteria.\n * @param options Options for filtering which list item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ListItemHarnessFilters = {}): HarnessPredicate<MatListItemHarness> {\n return getListItemPredicate(MatListItemHarness, options);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BaseHarnessFilters} from '@angular/cdk/testing';\n\nexport interface ListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface ActionListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface NavListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface SelectionListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface BaseListItemHarnessFilters extends BaseHarnessFilters {\n text?: string | RegExp;\n}\n\nexport interface ListItemHarnessFilters extends BaseListItemHarnessFilters {}\n\nexport interface ActionListItemHarnessFilters extends BaseListItemHarnessFilters {}\n\nexport interface NavListItemHarnessFilters extends BaseListItemHarnessFilters {\n href?: string | RegExp | null;\n}\n\nexport interface ListOptionHarnessFilters extends BaseListItemHarnessFilters {\n selected?: boolean;\n}\n\nexport interface SubheaderHarnessFilters extends BaseHarnessFilters {\n text?: string | RegExp;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {NavListHarnessFilters, NavListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a standard mat-nav-list in tests. */\nexport class MatNavListHarness extends MatListHarnessBase<\n typeof MatNavListItemHarness, MatNavListItemHarness, NavListItemHarnessFilters> {\n /** The selector for the host element of a `MatNavList` instance. */\n static hostSelector = '.mat-nav-list';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatNavListHarness` that meets\n * certain criteria.\n * @param options Options for filtering which nav list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: NavListHarnessFilters = {}): HarnessPredicate<MatNavListHarness> {\n return new HarnessPredicate(MatNavListHarness, options);\n }\n\n _itemHarness = MatNavListItemHarness;\n}\n\n/** Harness for interacting with a nav list item. */\nexport class MatNavListItemHarness extends MatListItemHarnessBase {\n /** The selector for the host element of a `MatListItem` instance. */\n static hostSelector = `${MatNavListHarness.hostSelector} .mat-list-item`;\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatNavListItemHarness` that\n * meets certain criteria.\n * @param options Options for filtering which nav list item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: NavListItemHarnessFilters = {}): HarnessPredicate<MatNavListItemHarness> {\n return getListItemPredicate(MatNavListItemHarness, options)\n .addOption('href', options.href,\n async (harness, href) => HarnessPredicate.stringMatches(harness.getHref(), href));\n }\n\n /** Gets the href for this nav list item. */\n async getHref(): Promise<string | null> {\n return (await this.host()).getAttribute('href');\n }\n\n /** Clicks on the nav list item. */\n async click(): Promise<void> {\n return (await this.host()).click();\n }\n\n /** Focuses the nav list item. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Blurs the nav list item. */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the nav list item is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {\n ListItemHarnessFilters,\n ListOptionHarnessFilters,\n SelectionListHarnessFilters\n} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a standard mat-selection-list in tests. */\nexport class MatSelectionListHarness extends MatListHarnessBase<\n typeof MatListOptionHarness, MatListOptionHarness, ListOptionHarnessFilters> {\n /** The selector for the host element of a `MatSelectionList` instance. */\n static hostSelector = '.mat-selection-list';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatSelectionListHarness` that meets\n * certain criteria.\n * @param options Options for filtering which selection list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: SelectionListHarnessFilters = {}):\n HarnessPredicate<MatSelectionListHarness> {\n return new HarnessPredicate(MatSelectionListHarness, options);\n }\n\n _itemHarness = MatListOptionHarness;\n\n /** Whether the selection list is disabled. */\n async isDisabled(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-disabled') === 'true';\n }\n\n /**\n * Selects all items matching any of the given filters.\n * @param filters Filters that specify which items should be selected.\n */\n async selectItems(...filters: ListOptionHarnessFilters[]): Promise<void> {\n const items = await this._getItems(filters);\n await Promise.all(items.map(item => item.select()));\n }\n\n /**\n * Deselects all items matching any of the given filters.\n * @param filters Filters that specify which items should be deselected.\n */\n async deselectItems(...filters: ListItemHarnessFilters[]): Promise<void> {\n const items = await this._getItems(filters);\n await Promise.all(items.map(item => item.deselect()));\n }\n\n /** Gets all items matching the given list of filters. */\n private async _getItems(filters: ListOptionHarnessFilters[]): Promise<MatListOptionHarness[]> {\n if (!filters.length) {\n return this.getItems();\n }\n return ([] as MatListOptionHarness[]).concat(...await Promise.all(\n filters.map(filter => this.locatorForAll(MatListOptionHarness.with(filter))())));\n }\n}\n\n/** Harness for interacting with a list option. */\nexport class MatListOptionHarness extends MatListItemHarnessBase {\n /** The selector for the host element of a `MatListOption` instance. */\n static hostSelector = '.mat-list-option';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatListOptionHarness` that\n * meets certain criteria.\n * @param options Options for filtering which list option instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ListOptionHarnessFilters = {}): HarnessPredicate<MatListOptionHarness> {\n return getListItemPredicate(MatListOptionHarness, options)\n .addOption('is selected', options.selected,\n async (harness, selected) => await harness.isSelected() === selected);\n }\n\n private _itemContent = this.locatorFor('.mat-list-item-content');\n\n /** Gets the position of the checkbox relative to the list option content. */\n async getCheckboxPosition(): Promise<'before' | 'after'> {\n return await (await this._itemContent()).hasClass('mat-list-item-content-reverse') ?\n 'after' : 'before';\n }\n\n /** Whether the list option is selected. */\n async isSelected(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-selected') === 'true';\n }\n\n /** Whether the list option is disabled. */\n async isDisabled(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-disabled') === 'true';\n }\n\n /** Focuses the list option. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Blurs the list option. */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the list option is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n\n /** Toggles the checked state of the checkbox. */\n async toggle() {\n return (await this.host()).click();\n }\n\n /**\n * Puts the list option in a checked state by toggling it if it is currently unchecked, or doing\n * nothing if it is already checked.\n */\n async select() {\n if (!await this.isSelected()) {\n return this.toggle();\n }\n }\n\n /**\n * Puts the list option in an unchecked state by toggling it if it is currently checked, or doing\n * nothing if it is already unchecked.\n */\n async deselect() {\n if (await this.isSelected()) {\n return this.toggle();\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './action-list-harness';\nexport * from './list-harness';\nexport * from './list-harness-filters';\nexport * from './nav-list-harness';\nexport * from './selection-list-harness';\nexport {MatListItemSection} from './list-item-harness-base';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list__testing.js","sources":["../../../../../../src/material/list/testing/list-item-harness-base.ts","../../../../../../src/material/list/testing/list-harness-base.ts","../../../../../../src/material/list/testing/action-list-harness.ts","../../../../../../src/material/list/testing/list-harness.ts","../../../../../../src/material/list/testing/list-harness-filters.ts","../../../../../../src/material/list/testing/nav-list-harness.ts","../../../../../../src/material/list/testing/selection-list-harness.ts","../../../../../../src/material/list/testing/public-api.ts","../../../../../../src/material/list/testing/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessLoader,\n HarnessPredicate,\n ContentContainerComponentHarness,\n parallel,\n} from '@angular/cdk/testing';\nimport {BaseListItemHarnessFilters, SubheaderHarnessFilters} from './list-harness-filters';\n\nconst iconSelector = '.mat-list-icon';\nconst avatarSelector = '.mat-list-avatar';\n\n/**\n * Gets a `HarnessPredicate` that applies the given `BaseListItemHarnessFilters` to the given\n * list item harness.\n * @template H The type of list item harness to create a predicate for.\n * @param harnessType A constructor for a list item harness.\n * @param options An instance of `BaseListItemHarnessFilters` to apply.\n * @return A `HarnessPredicate` for the given harness type with the given options applied.\n */\nexport function getListItemPredicate<H extends MatListItemHarnessBase>(\n harnessType: ComponentHarnessConstructor<H>,\n options: BaseListItemHarnessFilters): HarnessPredicate<H> {\n return new HarnessPredicate(harnessType, options)\n .addOption('text', options.text,\n (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));\n}\n\n/** Harness for interacting with a list subheader. */\nexport class MatSubheaderHarness extends ComponentHarness {\n static hostSelector = '.mat-subheader';\n\n static with(options: SubheaderHarnessFilters = {}): HarnessPredicate<MatSubheaderHarness> {\n return new HarnessPredicate(MatSubheaderHarness, options)\n .addOption('text', options.text,\n (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));\n }\n\n /** Gets the full text content of the list item (including text from any font icons). */\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n}\n\n/** Selectors for the various list item sections that may contain user content. */\nexport const enum MatListItemSection {\n CONTENT = '.mat-list-item-content'\n // TODO(mmalerba): consider adding sections for leading/trailing icons.\n}\n\n/**\n * Shared behavior among the harnesses for the various `MatListItem` flavors.\n * @docs-private\n */\nexport abstract class MatListItemHarnessBase\n extends ContentContainerComponentHarness<MatListItemSection> {\n\n private _lines = this.locatorForAll('.mat-line');\n private _avatar = this.locatorForOptional(avatarSelector);\n private _icon = this.locatorForOptional(iconSelector);\n\n /** Gets the full text content of the list item. */\n async getText(): Promise<string> {\n return (await this.host()).text({exclude: `${iconSelector}, ${avatarSelector}`});\n }\n\n /** Gets the lines of text (`mat-line` elements) in this nav list item. */\n async getLinesText(): Promise<string[]> {\n const lines = await this._lines();\n return parallel(() => lines.map(l => l.text()));\n }\n\n /** Whether this list item has an avatar. */\n async hasAvatar(): Promise<boolean> {\n return !!await this._avatar();\n }\n\n /** Whether this list item has an icon. */\n async hasIcon(): Promise<boolean> {\n return !!await this._icon();\n }\n\n /**\n * Gets a `HarnessLoader` used to get harnesses within the list item's content.\n * @deprecated Use `getChildLoader(MatListItemSection.CONTENT)` or `getHarness` instead.\n * @breaking-change 12.0.0\n */\n async getHarnessLoaderForContent(): Promise<HarnessLoader> {\n return this.getChildLoader(MatListItemSection.CONTENT);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessPredicate,\n parallel\n} from '@angular/cdk/testing';\nimport {DividerHarnessFilters, MatDividerHarness} from '@angular/material/divider/testing';\nimport {BaseListItemHarnessFilters, SubheaderHarnessFilters} from './list-harness-filters';\nimport {MatSubheaderHarness} from './list-item-harness-base';\n\n/** Represents a section of a list falling under a specific header. */\nexport interface ListSection<I> {\n /** The heading for this list section. `undefined` if there is no heading. */\n heading?: string;\n\n /** The items in this list section. */\n items: I[];\n}\n\n/**\n * Shared behavior among the harnesses for the various `MatList` flavors.\n * @template T A constructor type for a list item harness type used by this list harness.\n * @template C The list item harness type that `T` constructs.\n * @template F The filter type used filter list item harness of type `C`.\n * @docs-private\n */\nexport abstract class MatListHarnessBase\n <\n T extends (ComponentHarnessConstructor<C> & {with: (options?: F) => HarnessPredicate<C>}),\n C extends ComponentHarness,\n F extends BaseListItemHarnessFilters\n > extends ComponentHarness {\n protected _itemHarness: T;\n\n /**\n * Gets a list of harnesses representing the items in this list.\n * @param filters Optional filters used to narrow which harnesses are included\n * @return The list of items matching the given filters.\n */\n async getItems(filters?: F): Promise<C[]> {\n return this.locatorForAll(this._itemHarness.with(filters))();\n }\n\n /**\n * Gets a list of `ListSection` representing the list items grouped by subheaders. If the list has\n * no subheaders it is represented as a single `ListSection` with an undefined `heading` property.\n * @param filters Optional filters used to narrow which list item harnesses are included\n * @return The list of items matching the given filters, grouped into sections by subheader.\n */\n async getItemsGroupedBySubheader(filters?: F): Promise<ListSection<C>[]> {\n type Section = {items: C[], heading?: Promise<string>};\n const listSections: Section[] = [];\n let currentSection: Section = {items: []};\n const itemsAndSubheaders =\n await this.getItemsWithSubheadersAndDividers({item: filters, divider: false});\n for (const itemOrSubheader of itemsAndSubheaders) {\n if (itemOrSubheader instanceof MatSubheaderHarness) {\n if (currentSection.heading !== undefined || currentSection.items.length) {\n listSections.push(currentSection);\n }\n currentSection = {heading: itemOrSubheader.getText(), items: []};\n } else {\n currentSection.items.push(itemOrSubheader);\n }\n }\n if (currentSection.heading !== undefined || currentSection.items.length ||\n !listSections.length) {\n listSections.push(currentSection);\n }\n\n // Concurrently wait for all sections to resolve their heading if present.\n return parallel(() => listSections.map(async (s) =>\n ({items: s.items, heading: await s.heading})));\n }\n\n /**\n * Gets a list of sub-lists representing the list items grouped by dividers. If the list has no\n * dividers it is represented as a list with a single sub-list.\n * @param filters Optional filters used to narrow which list item harnesses are included\n * @return The list of items matching the given filters, grouped into sub-lists by divider.\n */\n async getItemsGroupedByDividers(filters?: F): Promise<C[][]> {\n const listSections: C[][] = [[]];\n const itemsAndDividers =\n await this.getItemsWithSubheadersAndDividers({item: filters, subheader: false});\n for (const itemOrDivider of itemsAndDividers) {\n if (itemOrDivider instanceof MatDividerHarness) {\n listSections.push([]);\n } else {\n listSections[listSections.length - 1].push(itemOrDivider);\n }\n }\n return listSections;\n }\n\n /**\n * Gets a list of harnesses representing all of the items, subheaders, and dividers\n * (in the order they appear in the list). Use `instanceof` to check which type of harness a given\n * item is.\n * @param filters Optional filters used to narrow which list items, subheaders, and dividers are\n * included. A value of `false` for the `item`, `subheader`, or `divider` properties indicates\n * that the respective harness type should be omitted completely.\n * @return The list of harnesses representing the items, subheaders, and dividers matching the\n * given filters.\n */\n getItemsWithSubheadersAndDividers(filters: {\n item: false,\n subheader: false,\n divider: false\n }): Promise<[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item?: F | false,\n subheader: false,\n divider: false\n }): Promise<C[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item: false,\n subheader?: SubheaderHarnessFilters | false,\n divider: false\n }): Promise<MatSubheaderHarness[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item: false,\n subheader: false,\n divider?: DividerHarnessFilters | false\n }): Promise<MatDividerHarness[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item?: F | false,\n subheader?: SubheaderHarnessFilters | false,\n divider: false\n }): Promise<(C | MatSubheaderHarness)[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item?: F | false,\n subheader: false,\n divider?: false | DividerHarnessFilters\n }): Promise<(C | MatDividerHarness)[]>;\n getItemsWithSubheadersAndDividers(filters: {\n item: false,\n subheader?: false | SubheaderHarnessFilters,\n divider?: false | DividerHarnessFilters\n }): Promise<(MatSubheaderHarness | MatDividerHarness)[]>;\n getItemsWithSubheadersAndDividers(filters?: {\n item?: F | false,\n subheader?: SubheaderHarnessFilters | false,\n divider?: DividerHarnessFilters | false\n }): Promise<(C | MatSubheaderHarness | MatDividerHarness)[]>;\n async getItemsWithSubheadersAndDividers(filters: {\n item?: F | false,\n subheader?: SubheaderHarnessFilters | false,\n divider?: DividerHarnessFilters | false\n } = {}): Promise<(C | MatSubheaderHarness | MatDividerHarness)[]> {\n const query = [];\n if (filters.item !== false) {\n query.push(this._itemHarness.with(filters.item || {} as F));\n }\n if (filters.subheader !== false) {\n query.push(MatSubheaderHarness.with(filters.subheader));\n }\n if (filters.divider !== false) {\n query.push(MatDividerHarness.with(filters.divider));\n }\n return this.locatorForAll(...query)();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {ActionListHarnessFilters, ActionListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a standard mat-action-list in tests. */\nexport class MatActionListHarness extends MatListHarnessBase<\n typeof MatActionListItemHarness, MatActionListItemHarness, ActionListItemHarnessFilters> {\n /** The selector for the host element of a `MatActionList` instance. */\n static hostSelector = 'mat-action-list.mat-list';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatActionListHarness` that meets\n * certain criteria.\n * @param options Options for filtering which action list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ActionListHarnessFilters = {}): HarnessPredicate<MatActionListHarness> {\n return new HarnessPredicate(MatActionListHarness, options);\n }\n\n _itemHarness = MatActionListItemHarness;\n}\n\n/** Harness for interacting with an action list item. */\nexport class MatActionListItemHarness extends MatListItemHarnessBase {\n /** The selector for the host element of a `MatListItem` instance. */\n static hostSelector = `${MatActionListHarness.hostSelector} .mat-list-item`;\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatActionListItemHarness` that\n * meets certain criteria.\n * @param options Options for filtering which action list item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ActionListItemHarnessFilters = {}):\n HarnessPredicate<MatActionListItemHarness> {\n return getListItemPredicate(MatActionListItemHarness, options);\n }\n\n /** Clicks on the action list item. */\n async click(): Promise<void> {\n return (await this.host()).click();\n }\n\n /** Focuses the action list item. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Blurs the action list item. */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the action list item is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {ListHarnessFilters, ListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a standard mat-list in tests. */\nexport class MatListHarness extends\n MatListHarnessBase<typeof MatListItemHarness, MatListItemHarness, ListItemHarnessFilters> {\n /** The selector for the host element of a `MatList` instance. */\n static hostSelector = '.mat-list:not(mat-action-list)';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatListHarness` that meets certain\n * criteria.\n * @param options Options for filtering which list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ListHarnessFilters = {}): HarnessPredicate<MatListHarness> {\n return new HarnessPredicate(MatListHarness, options);\n }\n\n _itemHarness = MatListItemHarness;\n}\n\n/** Harness for interacting with a list item. */\nexport class MatListItemHarness extends MatListItemHarnessBase {\n /** The selector for the host element of a `MatListItem` instance. */\n static hostSelector = `${MatListHarness.hostSelector} .mat-list-item`;\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatListItemHarness` that meets\n * certain criteria.\n * @param options Options for filtering which list item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ListItemHarnessFilters = {}): HarnessPredicate<MatListItemHarness> {\n return getListItemPredicate(MatListItemHarness, options);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BaseHarnessFilters} from '@angular/cdk/testing';\n\nexport interface ListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface ActionListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface NavListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface SelectionListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface BaseListItemHarnessFilters extends BaseHarnessFilters {\n text?: string | RegExp;\n}\n\nexport interface ListItemHarnessFilters extends BaseListItemHarnessFilters {}\n\nexport interface ActionListItemHarnessFilters extends BaseListItemHarnessFilters {}\n\nexport interface NavListItemHarnessFilters extends BaseListItemHarnessFilters {\n href?: string | RegExp | null;\n}\n\nexport interface ListOptionHarnessFilters extends BaseListItemHarnessFilters {\n selected?: boolean;\n}\n\nexport interface SubheaderHarnessFilters extends BaseHarnessFilters {\n text?: string | RegExp;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {NavListHarnessFilters, NavListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a standard mat-nav-list in tests. */\nexport class MatNavListHarness extends MatListHarnessBase<\n typeof MatNavListItemHarness, MatNavListItemHarness, NavListItemHarnessFilters> {\n /** The selector for the host element of a `MatNavList` instance. */\n static hostSelector = '.mat-nav-list';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatNavListHarness` that meets\n * certain criteria.\n * @param options Options for filtering which nav list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: NavListHarnessFilters = {}): HarnessPredicate<MatNavListHarness> {\n return new HarnessPredicate(MatNavListHarness, options);\n }\n\n _itemHarness = MatNavListItemHarness;\n}\n\n/** Harness for interacting with a nav list item. */\nexport class MatNavListItemHarness extends MatListItemHarnessBase {\n /** The selector for the host element of a `MatListItem` instance. */\n static hostSelector = `${MatNavListHarness.hostSelector} .mat-list-item`;\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatNavListItemHarness` that\n * meets certain criteria.\n * @param options Options for filtering which nav list item instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: NavListItemHarnessFilters = {}): HarnessPredicate<MatNavListItemHarness> {\n return getListItemPredicate(MatNavListItemHarness, options)\n .addOption('href', options.href,\n async (harness, href) => HarnessPredicate.stringMatches(harness.getHref(), href));\n }\n\n /** Gets the href for this nav list item. */\n async getHref(): Promise<string | null> {\n return (await this.host()).getAttribute('href');\n }\n\n /** Clicks on the nav list item. */\n async click(): Promise<void> {\n return (await this.host()).click();\n }\n\n /** Focuses the nav list item. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Blurs the nav list item. */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the nav list item is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {MatListOptionCheckboxPosition} from '@angular/material/list';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {\n ListItemHarnessFilters,\n ListOptionHarnessFilters,\n SelectionListHarnessFilters\n} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a standard mat-selection-list in tests. */\nexport class MatSelectionListHarness extends MatListHarnessBase<\n typeof MatListOptionHarness, MatListOptionHarness, ListOptionHarnessFilters> {\n /** The selector for the host element of a `MatSelectionList` instance. */\n static hostSelector = '.mat-selection-list';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatSelectionListHarness` that meets\n * certain criteria.\n * @param options Options for filtering which selection list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: SelectionListHarnessFilters = {}):\n HarnessPredicate<MatSelectionListHarness> {\n return new HarnessPredicate(MatSelectionListHarness, options);\n }\n\n _itemHarness = MatListOptionHarness;\n\n /** Whether the selection list is disabled. */\n async isDisabled(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-disabled') === 'true';\n }\n\n /**\n * Selects all items matching any of the given filters.\n * @param filters Filters that specify which items should be selected.\n */\n async selectItems(...filters: ListOptionHarnessFilters[]): Promise<void> {\n const items = await this._getItems(filters);\n await parallel(() => items.map(item => item.select()));\n }\n\n /**\n * Deselects all items matching any of the given filters.\n * @param filters Filters that specify which items should be deselected.\n */\n async deselectItems(...filters: ListItemHarnessFilters[]): Promise<void> {\n const items = await this._getItems(filters);\n await parallel(() => items.map(item => item.deselect()));\n }\n\n /** Gets all items matching the given list of filters. */\n private async _getItems(filters: ListOptionHarnessFilters[]): Promise<MatListOptionHarness[]> {\n if (!filters.length) {\n return this.getItems();\n }\n const matches = await parallel(() => {\n return filters.map(filter => this.locatorForAll(MatListOptionHarness.with(filter))());\n });\n return matches.reduce((result, current) => [...result, ...current], []);\n }\n}\n\n/** Harness for interacting with a list option. */\nexport class MatListOptionHarness extends MatListItemHarnessBase {\n /** The selector for the host element of a `MatListOption` instance. */\n static hostSelector = '.mat-list-option';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatListOptionHarness` that\n * meets certain criteria.\n * @param options Options for filtering which list option instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ListOptionHarnessFilters = {}): HarnessPredicate<MatListOptionHarness> {\n return getListItemPredicate(MatListOptionHarness, options)\n .addOption('is selected', options.selected,\n async (harness, selected) => await harness.isSelected() === selected);\n }\n\n private _itemContent = this.locatorFor('.mat-list-item-content');\n\n /** Gets the position of the checkbox relative to the list option content. */\n async getCheckboxPosition(): Promise<MatListOptionCheckboxPosition> {\n return await (await this._itemContent()).hasClass('mat-list-item-content-reverse') ?\n 'after' : 'before';\n }\n\n /** Whether the list option is selected. */\n async isSelected(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-selected') === 'true';\n }\n\n /** Whether the list option is disabled. */\n async isDisabled(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-disabled') === 'true';\n }\n\n /** Focuses the list option. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Blurs the list option. */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the list option is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n\n /** Toggles the checked state of the checkbox. */\n async toggle() {\n return (await this.host()).click();\n }\n\n /**\n * Puts the list option in a checked state by toggling it if it is currently unchecked, or doing\n * nothing if it is already checked.\n */\n async select() {\n if (!await this.isSelected()) {\n return this.toggle();\n }\n }\n\n /**\n * Puts the list option in an unchecked state by toggling it if it is currently checked, or doing\n * nothing if it is already unchecked.\n */\n async deselect() {\n if (await this.isSelected()) {\n return this.toggle();\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './action-list-harness';\nexport * from './list-harness';\nexport * from './list-harness-filters';\nexport * from './nav-list-harness';\nexport * from './selection-list-harness';\nexport {MatListItemSection} from './list-item-harness-base';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sources":["../../../../../../src/material/list/list.ts","../../../../../../src/material/list/selection-list.ts","../../../../../../src/material/list/list-module.ts","../../../../../../src/material/list/public-api.ts","../../../../../../src/material/list/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 CanDisableCtor,\n CanDisableRipple,\n CanDisableRippleCtor,\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 */\nclass MatListBase {}\nconst _MatListMixinBase: CanDisableRippleCtor & CanDisableCtor & typeof MatListBase =\n mixinDisabled(mixinDisableRipple(MatListBase));\n\n// Boilerplate for applying mixins to MatListItem.\n/** @docs-private */\nclass MatListItemBase {}\nconst _MatListItemMixinBase: CanDisableRippleCtor & typeof MatListItemBase =\n mixinDisableRipple(MatListItemBase);\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 extends _MatListMixinBase implements CanDisable, CanDisableRipple,\n OnChanges, OnDestroy {\n /** Emits when the state of the list changes. */\n _stateChanges = new Subject<void>();\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n\n static ngAcceptInputType_disableRipple: BooleanInput;\n static ngAcceptInputType_disabled: BooleanInput;\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 extends _MatListMixinBase implements CanDisable, CanDisableRipple, OnChanges,\n OnDestroy {\n /** Emits when the state of the list changes. */\n _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 static ngAcceptInputType_disableRipple: BooleanInput;\n static ngAcceptInputType_disabled: BooleanInput;\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 extends _MatListItemMixinBase implements AfterContentInit,\n CanDisableRipple, OnDestroy {\n private _isInteractiveList: boolean = false;\n private _list?: MatNavList | MatList;\n private _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(private _element: ElementRef<HTMLElement>,\n _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_NAV_LIST) navList?: MatNavList,\n @Optional() @Inject(MAT_LIST) list?: MatList) {\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() { return this._disabled || !!(this._list && this._list.disabled); }\n set disabled(value: boolean) {\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 !this._isInteractiveList || this.disableRipple ||\n !!(this._list && this._list.disableRipple);\n }\n\n /** Retrieves the DOM element of the component host. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n\n static ngAcceptInputType_disableRipple: BooleanInput;\n static ngAcceptInputType_disabled: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FocusableOption, FocusKeyManager, FocusMonitor} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n A,\n DOWN_ARROW,\n ENTER,\n hasModifierKey,\n SPACE,\n UP_ARROW,\n} 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 CanDisableRippleCtor,\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\nclass MatSelectionListBase {}\nconst _MatSelectionListMixinBase: CanDisableRippleCtor & typeof MatSelectionListBase =\n mixinDisableRipple(MatSelectionListBase);\n\nclass MatListOptionBase {}\nconst _MatListOptionMixinBase: CanDisableRippleCtor & typeof MatListOptionBase =\n mixinDisableRipple(MatListOptionBase);\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 * 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 extends _MatListOptionMixinBase implements AfterContentInit, OnDestroy,\n OnInit, FocusableOption,\n CanDisableRipple {\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 /** 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: 'before' | 'after' = 'after';\n\n /** Theme color of the list option. This sets the color of the checkbox. */\n @Input()\n get color(): ThemePalette { return this._color || this.selectionList.color; }\n set color(newValue: ThemePalette) { this._color = newValue; }\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 { return this._value; }\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() { return this._disabled || (this.selectionList && this.selectionList.disabled); }\n set disabled(value: any) {\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 { return this.selectionList.selectedOptions.isSelected(this); }\n set selected(value: boolean) {\n const isSelected = coerceBooleanProperty(value);\n\n if (isSelected !== this._selected) {\n this._setSelected(isSelected);\n this.selectionList._reportValueChange();\n }\n }\n\n constructor(private _element: ElementRef<HTMLElement>,\n private _changeDetector: ChangeDetectorRef,\n /** @docs-private */\n @Inject(forwardRef(() => MatSelectionList)) public selectionList: MatSelectionList) {\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._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 static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_selected: BooleanInput;\n static ngAcceptInputType_disableRipple: BooleanInput;\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 extends _MatSelectionListMixinBase implements CanDisableRipple,\n AfterContentInit, ControlValueAccessor, OnDestroy, OnChanges {\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 { return this._disabled; }\n set disabled(value: boolean) {\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 { return this._multiple; }\n set multiple(value: boolean) {\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 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 _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(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 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?.monitor(this._element)\n .pipe(takeUntil(this._destroyed))\n .subscribe(origin => {\n if (origin === 'keyboard' || origin === 'program') {\n const activeIndex = this._keyManager.activeItemIndex;\n\n if (!activeIndex || activeIndex === -1) {\n // If there is no active index, set focus to the first option.\n this._keyManager.setFirstItemActive();\n } else {\n // Otherwise, set focus to the active option.\n this._keyManager.setActiveItem(activeIndex);\n }\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const disableRippleChanges = changes['disableRipple'];\n const colorChanges = changes['color'];\n\n if ((disableRippleChanges && !disableRippleChanges.firstChange) ||\n (colorChanges && !colorChanges.firstChange)) {\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. */\n selectAll() {\n this._setAllOptionsSelected(true);\n }\n\n /** Deselects all of the options. */\n deselectAll() {\n 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 (keyCode === A && this.multiple && hasModifierKey(event, 'ctrlKey') &&\n !manager.isTyping()) {\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 (this.multiple && (keyCode === UP_ARROW || keyCode === DOWN_ARROW) && event.shiftKey &&\n manager.activeItemIndex !== previousFocusIndex) {\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 // 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\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 static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_disableRipple: BooleanInput;\n static ngAcceptInputType_multiple: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {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\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sources":["../../../../../../src/material/list/list.ts","../../../../../../src/material/list/selection-list.ts","../../../../../../src/material/list/list-module.ts","../../../../../../src/material/list/public-api.ts","../../../../../../src/material/list/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 CanDisableCtor,\n CanDisableRipple,\n CanDisableRippleCtor,\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 */\nclass MatListBase {}\nconst _MatListMixinBase: CanDisableRippleCtor & CanDisableCtor & typeof MatListBase =\n mixinDisabled(mixinDisableRipple(MatListBase));\n\n// Boilerplate for applying mixins to MatListItem.\n/** @docs-private */\nclass MatListItemBase {}\nconst _MatListItemMixinBase: CanDisableRippleCtor & typeof MatListItemBase =\n mixinDisableRipple(MatListItemBase);\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 extends _MatListMixinBase implements CanDisable, CanDisableRipple,\n OnChanges, OnDestroy {\n /** Emits when the state of the list changes. */\n _stateChanges = new Subject<void>();\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n\n static ngAcceptInputType_disableRipple: BooleanInput;\n static ngAcceptInputType_disabled: BooleanInput;\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 extends _MatListMixinBase implements CanDisable, CanDisableRipple, OnChanges,\n OnDestroy {\n /** Emits when the state of the list changes. */\n _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 static ngAcceptInputType_disableRipple: BooleanInput;\n static ngAcceptInputType_disabled: BooleanInput;\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 extends _MatListItemMixinBase implements AfterContentInit,\n CanDisableRipple, OnDestroy {\n private _isInteractiveList: boolean = false;\n private _list?: MatNavList | MatList;\n private _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(private _element: ElementRef<HTMLElement>,\n _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_NAV_LIST) navList?: MatNavList,\n @Optional() @Inject(MAT_LIST) list?: MatList) {\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() { return this._disabled || !!(this._list && this._list.disabled); }\n set disabled(value: boolean) {\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 !this._isInteractiveList || this.disableRipple ||\n !!(this._list && this._list.disableRipple);\n }\n\n /** Retrieves the DOM element of the component host. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n\n static ngAcceptInputType_disableRipple: BooleanInput;\n static ngAcceptInputType_disabled: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FocusableOption, FocusKeyManager, FocusMonitor} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n A,\n DOWN_ARROW,\n ENTER,\n hasModifierKey,\n SPACE,\n UP_ARROW,\n} 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 CanDisableRippleCtor,\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\nclass MatSelectionListBase {}\nconst _MatSelectionListMixinBase: CanDisableRippleCtor & typeof MatSelectionListBase =\n mixinDisableRipple(MatSelectionListBase);\n\nclass MatListOptionBase {}\nconst _MatListOptionMixinBase: CanDisableRippleCtor & typeof MatListOptionBase =\n mixinDisableRipple(MatListOptionBase);\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 * 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 extends _MatListOptionMixinBase implements AfterContentInit, OnDestroy,\n OnInit, FocusableOption,\n CanDisableRipple {\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 /** 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 { return this._color || this.selectionList.color; }\n set color(newValue: ThemePalette) { this._color = newValue; }\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 { return this._value; }\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() { return this._disabled || (this.selectionList && this.selectionList.disabled); }\n set disabled(value: any) {\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 { return this.selectionList.selectedOptions.isSelected(this); }\n set selected(value: boolean) {\n const isSelected = coerceBooleanProperty(value);\n\n if (isSelected !== this._selected) {\n this._setSelected(isSelected);\n this.selectionList._reportValueChange();\n }\n }\n\n constructor(private _element: ElementRef<HTMLElement>,\n private _changeDetector: ChangeDetectorRef,\n /** @docs-private */\n @Inject(forwardRef(() => MatSelectionList)) public selectionList: MatSelectionList) {\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._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 static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_selected: BooleanInput;\n static ngAcceptInputType_disableRipple: BooleanInput;\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 extends _MatSelectionListMixinBase implements CanDisableRipple,\n AfterContentInit, ControlValueAccessor, OnDestroy, OnChanges {\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 { return this._disabled; }\n set disabled(value: boolean) {\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 { return this._multiple; }\n set multiple(value: boolean) {\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 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 _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(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 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?.monitor(this._element)\n .pipe(takeUntil(this._destroyed))\n .subscribe(origin => {\n if (origin === 'keyboard' || origin === 'program') {\n const activeIndex = this._keyManager.activeItemIndex;\n\n if (!activeIndex || activeIndex === -1) {\n // If there is no active index, set focus to the first option.\n this._keyManager.setFirstItemActive();\n } else {\n // Otherwise, set focus to the active option.\n this._keyManager.setActiveItem(activeIndex);\n }\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const disableRippleChanges = changes['disableRipple'];\n const colorChanges = changes['color'];\n\n if ((disableRippleChanges && !disableRippleChanges.firstChange) ||\n (colorChanges && !colorChanges.firstChange)) {\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. */\n selectAll() {\n this._setAllOptionsSelected(true);\n }\n\n /** Deselects all of the options. */\n deselectAll() {\n 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 (keyCode === A && this.multiple && hasModifierKey(event, 'ctrlKey') &&\n !manager.isTyping()) {\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 (this.multiple && (keyCode === UP_ARROW || keyCode === DOWN_ARROW) && event.shiftKey &&\n manager.activeItemIndex !== previousFocusIndex) {\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 // 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\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 static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_disableRipple: BooleanInput;\n static ngAcceptInputType_multiple: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {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\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { ContentContainerComponentHarness, HarnessPredicate, TestKey } from '@angular/cdk/testing';
2
+ import { ContentContainerComponentHarness, TestKey, HarnessPredicate } from '@angular/cdk/testing';
3
3
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
4
 
5
5
  /**
@@ -9,23 +9,12 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion';
9
9
  * Use of this source code is governed by an MIT-style license that can be
10
10
  * found in the LICENSE file at https://angular.io/license
11
11
  */
12
- /** Harness for interacting with a standard mat-menu in tests. */
13
- class MatMenuHarness extends ContentContainerComponentHarness {
12
+ class _MatMenuHarnessBase extends ContentContainerComponentHarness {
14
13
  constructor() {
15
14
  super(...arguments);
16
15
  this._documentRootLocator = this.documentRootLocatorFactory();
17
16
  }
18
17
  // TODO: potentially extend MatButtonHarness
19
- /**
20
- * Gets a `HarnessPredicate` that can be used to search for a `MatMenuHarness` that meets certain
21
- * criteria.
22
- * @param options Options for filtering which menu instances are considered a match.
23
- * @return a `HarnessPredicate` configured with the given options.
24
- */
25
- static with(options = {}) {
26
- return new HarnessPredicate(MatMenuHarness, options)
27
- .addOption('triggerText', options.triggerText, (harness, text) => HarnessPredicate.stringMatches(harness.getTriggerText(), text));
28
- }
29
18
  /** Whether the menu is disabled. */
30
19
  isDisabled() {
31
20
  return __awaiter(this, void 0, void 0, function* () {
@@ -84,11 +73,11 @@ class MatMenuHarness extends ContentContainerComponentHarness {
84
73
  * Gets a list of `MatMenuItemHarness` representing the items in the menu.
85
74
  * @param filters Optionally filters which menu items are included.
86
75
  */
87
- getItems(filters = {}) {
76
+ getItems(filters) {
88
77
  return __awaiter(this, void 0, void 0, function* () {
89
78
  const panelId = yield this._getPanelId();
90
79
  if (panelId) {
91
- return this._documentRootLocator.locatorForAll(MatMenuItemHarness.with(Object.assign(Object.assign({}, filters), { ancestor: `#${panelId}` })))();
80
+ return this._documentRootLocator.locatorForAll(this._itemClass.with(Object.assign(Object.assign({}, (filters || {})), { ancestor: `#${panelId}` })))();
92
81
  }
93
82
  return [];
94
83
  });
@@ -139,21 +128,7 @@ class MatMenuHarness extends ContentContainerComponentHarness {
139
128
  });
140
129
  }
141
130
  }
142
- /** The selector for the host element of a `MatMenu` instance. */
143
- MatMenuHarness.hostSelector = '.mat-menu-trigger';
144
- /** Harness for interacting with a standard mat-menu-item in tests. */
145
- class MatMenuItemHarness extends ContentContainerComponentHarness {
146
- /**
147
- * Gets a `HarnessPredicate` that can be used to search for a `MatMenuItemHarness` that meets
148
- * certain criteria.
149
- * @param options Options for filtering which menu item instances are considered a match.
150
- * @return a `HarnessPredicate` configured with the given options.
151
- */
152
- static with(options = {}) {
153
- return new HarnessPredicate(MatMenuItemHarness, options)
154
- .addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text))
155
- .addOption('hasSubmenu', options.hasSubmenu, (harness, hasSubmenu) => __awaiter(this, void 0, void 0, function* () { return (yield harness.hasSubmenu()) === hasSubmenu; }));
156
- }
131
+ class _MatMenuItemHarnessBase extends ContentContainerComponentHarness {
157
132
  /** Whether the menu is disabled. */
158
133
  isDisabled() {
159
134
  return __awaiter(this, void 0, void 0, function* () {
@@ -194,19 +169,56 @@ class MatMenuItemHarness extends ContentContainerComponentHarness {
194
169
  /** Whether this item has a submenu. */
195
170
  hasSubmenu() {
196
171
  return __awaiter(this, void 0, void 0, function* () {
197
- return (yield this.host()).matchesSelector(MatMenuHarness.hostSelector);
172
+ return (yield this.host()).matchesSelector(this._menuClass.hostSelector);
198
173
  });
199
174
  }
200
175
  /** Gets the submenu associated with this menu item, or null if none. */
201
176
  getSubmenu() {
202
177
  return __awaiter(this, void 0, void 0, function* () {
203
178
  if (yield this.hasSubmenu()) {
204
- return new MatMenuHarness(this.locatorFactory);
179
+ return new this._menuClass(this.locatorFactory);
205
180
  }
206
181
  return null;
207
182
  });
208
183
  }
209
184
  }
185
+ /** Harness for interacting with a standard mat-menu in tests. */
186
+ class MatMenuHarness extends _MatMenuHarnessBase {
187
+ constructor() {
188
+ super(...arguments);
189
+ this._itemClass = MatMenuItemHarness;
190
+ }
191
+ /**
192
+ * Gets a `HarnessPredicate` that can be used to search for a `MatMenuHarness` that meets certain
193
+ * criteria.
194
+ * @param options Options for filtering which menu instances are considered a match.
195
+ * @return a `HarnessPredicate` configured with the given options.
196
+ */
197
+ static with(options = {}) {
198
+ return new HarnessPredicate(MatMenuHarness, options)
199
+ .addOption('triggerText', options.triggerText, (harness, text) => HarnessPredicate.stringMatches(harness.getTriggerText(), text));
200
+ }
201
+ }
202
+ /** The selector for the host element of a `MatMenu` instance. */
203
+ MatMenuHarness.hostSelector = '.mat-menu-trigger';
204
+ /** Harness for interacting with a standard mat-menu-item in tests. */
205
+ class MatMenuItemHarness extends _MatMenuItemHarnessBase {
206
+ constructor() {
207
+ super(...arguments);
208
+ this._menuClass = MatMenuHarness;
209
+ }
210
+ /**
211
+ * Gets a `HarnessPredicate` that can be used to search for a `MatMenuItemHarness` that meets
212
+ * certain criteria.
213
+ * @param options Options for filtering which menu item instances are considered a match.
214
+ * @return a `HarnessPredicate` configured with the given options.
215
+ */
216
+ static with(options = {}) {
217
+ return new HarnessPredicate(MatMenuItemHarness, options)
218
+ .addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text))
219
+ .addOption('hasSubmenu', options.hasSubmenu, (harness, hasSubmenu) => __awaiter(this, void 0, void 0, function* () { return (yield harness.hasSubmenu()) === hasSubmenu; }));
220
+ }
221
+ }
210
222
  /** The selector for the host element of a `MatMenuItem` instance. */
211
223
  MatMenuItemHarness.hostSelector = '.mat-menu-item';
212
224
 
@@ -234,5 +246,5 @@ MatMenuItemHarness.hostSelector = '.mat-menu-item';
234
246
  * found in the LICENSE file at https://angular.io/license
235
247
  */
236
248
 
237
- export { MatMenuHarness, MatMenuItemHarness };
249
+ export { MatMenuHarness, MatMenuItemHarness, _MatMenuHarnessBase, _MatMenuItemHarnessBase };
238
250
  //# sourceMappingURL=testing.js.map