@angular/material 13.0.0-rc.0 → 13.0.0-rc.1

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 (642) hide show
  1. package/autocomplete/testing/autocomplete-harness.d.ts +4 -4
  2. package/core/common-behaviors/index.d.ts +1 -1
  3. package/esm2020/autocomplete/autocomplete-module.mjs +4 -17
  4. package/esm2020/autocomplete/autocomplete-origin.mjs +1 -1
  5. package/esm2020/autocomplete/autocomplete-trigger.mjs +30 -25
  6. package/esm2020/autocomplete/autocomplete.mjs +10 -10
  7. package/esm2020/autocomplete/testing/autocomplete-harness.mjs +7 -8
  8. package/esm2020/badge/badge-module.mjs +4 -11
  9. package/esm2020/badge/badge.mjs +13 -5
  10. package/esm2020/badge/testing/badge-harness.mjs +2 -3
  11. package/esm2020/bottom-sheet/bottom-sheet-animations.mjs +2 -2
  12. package/esm2020/bottom-sheet/bottom-sheet-container.mjs +5 -3
  13. package/esm2020/bottom-sheet/bottom-sheet-module.mjs +4 -14
  14. package/esm2020/bottom-sheet/bottom-sheet-ref.mjs +10 -4
  15. package/esm2020/bottom-sheet/bottom-sheet.mjs +9 -8
  16. package/esm2020/bottom-sheet/testing/bottom-sheet-harness.mjs +1 -1
  17. package/esm2020/button/button-module.mjs +6 -23
  18. package/esm2020/button/button.mjs +1 -1
  19. package/esm2020/button/public-api.mjs +1 -1
  20. package/esm2020/button/testing/button-harness.mjs +2 -3
  21. package/esm2020/button-toggle/button-toggle-module.mjs +1 -1
  22. package/esm2020/button-toggle/button-toggle.mjs +25 -13
  23. package/esm2020/button-toggle/public-api.mjs +1 -1
  24. package/esm2020/button-toggle/testing/button-toggle-group-harness-filters.mjs +1 -1
  25. package/esm2020/button-toggle/testing/button-toggle-group-harness.mjs +3 -3
  26. package/esm2020/button-toggle/testing/button-toggle-harness.mjs +2 -2
  27. package/esm2020/card/card-module.mjs +29 -7
  28. package/esm2020/card/card.mjs +14 -14
  29. package/esm2020/card/public-api.mjs +1 -1
  30. package/esm2020/card/testing/card-harness.mjs +1 -1
  31. package/esm2020/checkbox/checkbox-config.mjs +2 -2
  32. package/esm2020/checkbox/checkbox-module.mjs +3 -9
  33. package/esm2020/checkbox/checkbox-required-validator.mjs +4 -4
  34. package/esm2020/checkbox/checkbox.mjs +32 -14
  35. package/esm2020/checkbox/public-api.mjs +1 -1
  36. package/esm2020/checkbox/testing/checkbox-harness.mjs +3 -3
  37. package/esm2020/chips/chip-default-options.mjs +1 -1
  38. package/esm2020/chips/chip-input.mjs +18 -8
  39. package/esm2020/chips/chip-list.mjs +29 -14
  40. package/esm2020/chips/chip-text-control.mjs +1 -1
  41. package/esm2020/chips/chip.mjs +28 -19
  42. package/esm2020/chips/chips-module.mjs +8 -8
  43. package/esm2020/chips/testing/chip-harness.mjs +2 -2
  44. package/esm2020/chips/testing/chip-input-harness.mjs +2 -2
  45. package/esm2020/chips/testing/chip-list-harness.mjs +5 -5
  46. package/esm2020/chips/testing/chip-listbox-harness.mjs +1 -1
  47. package/esm2020/chips/testing/chip-option-harness.mjs +1 -1
  48. package/esm2020/core/animation/animation.mjs +1 -1
  49. package/esm2020/core/common-behaviors/color.mjs +4 -2
  50. package/esm2020/core/common-behaviors/common-module.mjs +10 -5
  51. package/esm2020/core/common-behaviors/constructor.mjs +1 -1
  52. package/esm2020/core/common-behaviors/disable-ripple.mjs +7 -3
  53. package/esm2020/core/common-behaviors/disabled.mjs +7 -3
  54. package/esm2020/core/common-behaviors/error-state.mjs +1 -1
  55. package/esm2020/core/common-behaviors/index.mjs +1 -1
  56. package/esm2020/core/common-behaviors/initialized.mjs +1 -1
  57. package/esm2020/core/common-behaviors/tabindex.mjs +4 -2
  58. package/esm2020/core/datetime/date-adapter.mjs +4 -4
  59. package/esm2020/core/datetime/date-formats.mjs +1 -1
  60. package/esm2020/core/datetime/index.mjs +3 -7
  61. package/esm2020/core/datetime/native-date-adapter.mjs +3 -3
  62. package/esm2020/core/datetime/native-date-formats.mjs +2 -2
  63. package/esm2020/core/line/line.mjs +3 -3
  64. package/esm2020/core/option/index.mjs +2 -2
  65. package/esm2020/core/option/optgroup.mjs +2 -2
  66. package/esm2020/core/option/option-parent.mjs +1 -1
  67. package/esm2020/core/option/option.mjs +16 -6
  68. package/esm2020/core/ripple/ripple-ref.mjs +1 -1
  69. package/esm2020/core/ripple/ripple-renderer.mjs +8 -8
  70. package/esm2020/core/ripple/ripple.mjs +10 -6
  71. package/esm2020/core/selection/index.mjs +2 -2
  72. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +1 -1
  73. package/esm2020/core/testing/optgroup-harness.mjs +2 -3
  74. package/esm2020/core/testing/option-harness.mjs +2 -2
  75. package/esm2020/core/version.mjs +1 -1
  76. package/esm2020/datepicker/calendar-body.mjs +8 -4
  77. package/esm2020/datepicker/calendar.mjs +40 -26
  78. package/esm2020/datepicker/date-range-input-parts.mjs +22 -19
  79. package/esm2020/datepicker/date-range-input.mjs +23 -12
  80. package/esm2020/datepicker/date-range-picker.mjs +2 -2
  81. package/esm2020/datepicker/date-range-selection-strategy.mjs +1 -1
  82. package/esm2020/datepicker/date-selection-model.mjs +6 -5
  83. package/esm2020/datepicker/datepicker-actions.mjs +4 -4
  84. package/esm2020/datepicker/datepicker-animations.mjs +6 -6
  85. package/esm2020/datepicker/datepicker-base.mjs +37 -34
  86. package/esm2020/datepicker/datepicker-errors.mjs +1 -1
  87. package/esm2020/datepicker/datepicker-input-base.mjs +20 -15
  88. package/esm2020/datepicker/datepicker-input.mjs +15 -9
  89. package/esm2020/datepicker/datepicker-intl.mjs +1 -1
  90. package/esm2020/datepicker/datepicker-module.mjs +6 -15
  91. package/esm2020/datepicker/datepicker-toggle.mjs +9 -8
  92. package/esm2020/datepicker/datepicker.mjs +2 -2
  93. package/esm2020/datepicker/month-view.mjs +37 -23
  94. package/esm2020/datepicker/multi-year-view.mjs +26 -16
  95. package/esm2020/datepicker/testing/calendar-cell-harness.mjs +1 -1
  96. package/esm2020/datepicker/testing/calendar-harness.mjs +1 -1
  97. package/esm2020/datepicker/testing/date-range-input-harness.mjs +4 -5
  98. package/esm2020/datepicker/testing/datepicker-input-harness-base.mjs +4 -4
  99. package/esm2020/datepicker/testing/datepicker-input-harness.mjs +1 -1
  100. package/esm2020/datepicker/testing/datepicker-toggle-harness.mjs +1 -1
  101. package/esm2020/datepicker/testing/datepicker-trigger-harness-base.mjs +2 -2
  102. package/esm2020/datepicker/year-view.mjs +29 -16
  103. package/esm2020/dialog/dialog-animations.mjs +2 -2
  104. package/esm2020/dialog/dialog-config.mjs +1 -1
  105. package/esm2020/dialog/dialog-container.mjs +8 -5
  106. package/esm2020/dialog/dialog-content-directives.mjs +4 -4
  107. package/esm2020/dialog/dialog-module.mjs +5 -21
  108. package/esm2020/dialog/dialog-ref.mjs +10 -5
  109. package/esm2020/dialog/dialog.mjs +19 -16
  110. package/esm2020/dialog/testing/dialog-harness.mjs +3 -3
  111. package/esm2020/divider/divider-module.mjs +1 -1
  112. package/esm2020/divider/divider.mjs +14 -6
  113. package/esm2020/divider/testing/divider-harness-filters.mjs +1 -1
  114. package/esm2020/divider/testing/divider-harness.mjs +1 -1
  115. package/esm2020/expansion/accordion-base.mjs +1 -1
  116. package/esm2020/expansion/accordion.mjs +19 -11
  117. package/esm2020/expansion/expansion-animations.mjs +2 -2
  118. package/esm2020/expansion/expansion-module.mjs +1 -1
  119. package/esm2020/expansion/expansion-panel-content.mjs +2 -2
  120. package/esm2020/expansion/expansion-panel-header.mjs +13 -21
  121. package/esm2020/expansion/expansion-panel.mjs +10 -6
  122. package/esm2020/expansion/testing/accordion-harness.mjs +1 -1
  123. package/esm2020/expansion/testing/expansion-harness-filters.mjs +1 -1
  124. package/esm2020/expansion/testing/expansion-harness.mjs +3 -3
  125. package/esm2020/form-field/form-field-animations.mjs +2 -2
  126. package/esm2020/form-field/form-field-control.mjs +1 -1
  127. package/esm2020/form-field/form-field-module.mjs +5 -29
  128. package/esm2020/form-field/form-field.mjs +45 -33
  129. package/esm2020/form-field/label.mjs +2 -2
  130. package/esm2020/form-field/placeholder.mjs +2 -2
  131. package/esm2020/form-field/testing/form-field-harness.mjs +12 -9
  132. package/esm2020/grid-list/grid-list-module.mjs +4 -4
  133. package/esm2020/grid-list/grid-list.mjs +24 -13
  134. package/esm2020/grid-list/grid-tile.mjs +17 -9
  135. package/esm2020/grid-list/testing/grid-list-harness-filters.mjs +1 -1
  136. package/esm2020/grid-list/testing/grid-list-harness.mjs +9 -5
  137. package/esm2020/grid-list/testing/grid-tile-harness.mjs +1 -1
  138. package/esm2020/grid-list/tile-coordinator.mjs +5 -3
  139. package/esm2020/grid-list/tile-styler.mjs +7 -6
  140. package/esm2020/icon/fake-svgs.mjs +2 -2
  141. package/esm2020/icon/icon-module.mjs +1 -1
  142. package/esm2020/icon/icon-registry.mjs +6 -6
  143. package/esm2020/icon/icon.mjs +26 -16
  144. package/esm2020/icon/public-api.mjs +1 -1
  145. package/esm2020/icon/testing/fake-icon-registry.mjs +2 -2
  146. package/esm2020/icon/testing/icon-harness-filters.mjs +1 -1
  147. package/esm2020/icon/testing/icon-harness.mjs +2 -2
  148. package/esm2020/icon/trusted-types.mjs +1 -1
  149. package/esm2020/input/input-module.mjs +4 -14
  150. package/esm2020/input/input-value-accessor.mjs +1 -1
  151. package/esm2020/input/input.mjs +46 -20
  152. package/esm2020/input/public-api.mjs +1 -1
  153. package/esm2020/input/testing/input-harness.mjs +6 -6
  154. package/esm2020/input/testing/native-option-harness.mjs +3 -3
  155. package/esm2020/input/testing/native-select-harness.mjs +4 -4
  156. package/esm2020/list/list-module.mjs +3 -3
  157. package/esm2020/list/list.mjs +10 -9
  158. package/esm2020/list/public-api.mjs +1 -1
  159. package/esm2020/list/selection-list.mjs +34 -15
  160. package/esm2020/list/testing/action-list-harness.mjs +1 -1
  161. package/esm2020/list/testing/list-harness-base.mjs +12 -5
  162. package/esm2020/list/testing/list-harness.mjs +1 -1
  163. package/esm2020/list/testing/list-item-harness-base.mjs +5 -7
  164. package/esm2020/list/testing/nav-list-harness.mjs +2 -3
  165. package/esm2020/list/testing/selection-list-harness.mjs +9 -9
  166. package/esm2020/menu/menu-animations.mjs +7 -7
  167. package/esm2020/menu/menu-content.mjs +1 -1
  168. package/esm2020/menu/menu-errors.mjs +1 -1
  169. package/esm2020/menu/menu-item.mjs +1 -1
  170. package/esm2020/menu/menu-module.mjs +6 -19
  171. package/esm2020/menu/menu-panel.mjs +1 -1
  172. package/esm2020/menu/menu-trigger.mjs +25 -16
  173. package/esm2020/menu/menu.mjs +28 -25
  174. package/esm2020/menu/public-api.mjs +2 -2
  175. package/esm2020/menu/testing/menu-harness.mjs +4 -5
  176. package/esm2020/paginator/paginator-intl.mjs +3 -5
  177. package/esm2020/paginator/paginator-module.mjs +4 -20
  178. package/esm2020/paginator/paginator.mjs +24 -13
  179. package/esm2020/paginator/public-api.mjs +1 -1
  180. package/esm2020/paginator/testing/paginator-harness-filters.mjs +1 -1
  181. package/esm2020/paginator/testing/paginator-harness.mjs +2 -2
  182. package/esm2020/progress-bar/progress-bar-module.mjs +1 -1
  183. package/esm2020/progress-bar/progress-bar.mjs +20 -15
  184. package/esm2020/progress-bar/public-api.mjs +1 -1
  185. package/esm2020/progress-bar/testing/progress-bar-harness.mjs +1 -1
  186. package/esm2020/progress-spinner/progress-spinner-module.mjs +4 -14
  187. package/esm2020/progress-spinner/progress-spinner.mjs +10 -8
  188. package/esm2020/progress-spinner/testing/progress-spinner-harness.mjs +2 -2
  189. package/esm2020/radio/public-api.mjs +1 -1
  190. package/esm2020/radio/radio-module.mjs +1 -1
  191. package/esm2020/radio/radio.mjs +40 -24
  192. package/esm2020/radio/testing/radio-harness.mjs +3 -4
  193. package/esm2020/select/public-api.mjs +2 -2
  194. package/esm2020/select/select-animations.mjs +7 -7
  195. package/esm2020/select/select-module.mjs +6 -19
  196. package/esm2020/select/select.mjs +61 -44
  197. package/esm2020/select/testing/select-harness.mjs +9 -6
  198. package/esm2020/sidenav/drawer-animations.mjs +3 -3
  199. package/esm2020/sidenav/drawer.mjs +71 -35
  200. package/esm2020/sidenav/sidenav-module.mjs +4 -17
  201. package/esm2020/sidenav/sidenav.mjs +31 -15
  202. package/esm2020/sidenav/testing/drawer-container-harness.mjs +1 -1
  203. package/esm2020/sidenav/testing/drawer-content-harness.mjs +1 -1
  204. package/esm2020/sidenav/testing/drawer-harness.mjs +2 -3
  205. package/esm2020/sidenav/testing/sidenav-container-harness.mjs +1 -1
  206. package/esm2020/sidenav/testing/sidenav-content-harness.mjs +1 -1
  207. package/esm2020/sidenav/testing/sidenav-harness.mjs +2 -3
  208. package/esm2020/slide-toggle/slide-toggle-config.mjs +2 -2
  209. package/esm2020/slide-toggle/slide-toggle-module.mjs +3 -8
  210. package/esm2020/slide-toggle/slide-toggle-required-validator.mjs +4 -4
  211. package/esm2020/slide-toggle/slide-toggle.mjs +16 -10
  212. package/esm2020/slide-toggle/testing/slide-toggle-harness.mjs +3 -3
  213. package/esm2020/slider/public-api.mjs +1 -1
  214. package/esm2020/slider/slider-module.mjs +1 -1
  215. package/esm2020/slider/slider.mjs +49 -30
  216. package/esm2020/slider/testing/slider-harness.mjs +6 -2
  217. package/esm2020/snack-bar/simple-snack-bar.mjs +1 -1
  218. package/esm2020/snack-bar/snack-bar-animations.mjs +3 -3
  219. package/esm2020/snack-bar/snack-bar-container.mjs +2 -2
  220. package/esm2020/snack-bar/snack-bar-module.mjs +4 -20
  221. package/esm2020/snack-bar/snack-bar-ref.mjs +1 -1
  222. package/esm2020/snack-bar/snack-bar.mjs +11 -8
  223. package/esm2020/snack-bar/testing/snack-bar-harness.mjs +5 -6
  224. package/esm2020/sort/sort-animations.mjs +11 -26
  225. package/esm2020/sort/sort-header-intl.mjs +2 -2
  226. package/esm2020/sort/sort-header.mjs +29 -26
  227. package/esm2020/sort/sort-module.mjs +2 -2
  228. package/esm2020/sort/sort.mjs +16 -9
  229. package/esm2020/sort/testing/sort-harness-filters.mjs +1 -1
  230. package/esm2020/sort/testing/sort-harness.mjs +1 -1
  231. package/esm2020/sort/testing/sort-header-harness.mjs +1 -1
  232. package/esm2020/stepper/step-content.mjs +2 -2
  233. package/esm2020/stepper/step-header.mjs +2 -2
  234. package/esm2020/stepper/stepper-animations.mjs +4 -4
  235. package/esm2020/stepper/stepper-button.mjs +3 -3
  236. package/esm2020/stepper/stepper-intl.mjs +2 -2
  237. package/esm2020/stepper/stepper-module.mjs +1 -1
  238. package/esm2020/stepper/stepper.mjs +10 -6
  239. package/esm2020/stepper/testing/step-harness-filters.mjs +1 -1
  240. package/esm2020/stepper/testing/step-harness.mjs +1 -1
  241. package/esm2020/stepper/testing/stepper-button-harnesses.mjs +3 -5
  242. package/esm2020/stepper/testing/stepper-harness.mjs +5 -5
  243. package/esm2020/table/cell.mjs +12 -8
  244. package/esm2020/table/row.mjs +2 -2
  245. package/esm2020/table/table-data-source.mjs +30 -21
  246. package/esm2020/table/table-module.mjs +5 -12
  247. package/esm2020/table/table.mjs +5 -9
  248. package/esm2020/table/testing/cell-harness.mjs +6 -3
  249. package/esm2020/table/testing/row-harness.mjs +2 -2
  250. package/esm2020/table/testing/table-harness-filters.mjs +1 -1
  251. package/esm2020/table/testing/table-harness.mjs +3 -3
  252. package/esm2020/table/text-column.mjs +1 -1
  253. package/esm2020/tabs/ink-bar.mjs +2 -2
  254. package/esm2020/tabs/paginated-tab-header.mjs +16 -9
  255. package/esm2020/tabs/public-api.mjs +2 -2
  256. package/esm2020/tabs/tab-body.mjs +7 -7
  257. package/esm2020/tabs/tab-content.mjs +2 -3
  258. package/esm2020/tabs/tab-group.mjs +43 -28
  259. package/esm2020/tabs/tab-header.mjs +7 -3
  260. package/esm2020/tabs/tab-label-wrapper.mjs +2 -2
  261. package/esm2020/tabs/tab-label.mjs +1 -1
  262. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +19 -9
  263. package/esm2020/tabs/tab.mjs +7 -3
  264. package/esm2020/tabs/tabs-animations.mjs +5 -5
  265. package/esm2020/tabs/tabs-module.mjs +1 -1
  266. package/esm2020/tabs/testing/tab-group-harness.mjs +2 -3
  267. package/esm2020/tabs/testing/tab-harness.mjs +2 -3
  268. package/esm2020/tabs/testing/tab-link-harness.mjs +2 -3
  269. package/esm2020/toolbar/public-api.mjs +1 -1
  270. package/esm2020/toolbar/testing/toolbar-harness.mjs +3 -4
  271. package/esm2020/toolbar/toolbar-module.mjs +1 -1
  272. package/esm2020/toolbar/toolbar.mjs +1 -1
  273. package/esm2020/tooltip/tooltip-animations.mjs +3 -3
  274. package/esm2020/tooltip/tooltip-module.mjs +5 -18
  275. package/esm2020/tooltip/tooltip.mjs +55 -30
  276. package/esm2020/tree/data-source/flat-data-source.mjs +4 -2
  277. package/esm2020/tree/data-source/nested-data-source.mjs +8 -5
  278. package/esm2020/tree/node.mjs +17 -13
  279. package/esm2020/tree/outlet.mjs +12 -8
  280. package/esm2020/tree/padding.mjs +14 -6
  281. package/esm2020/tree/public-api.mjs +1 -1
  282. package/esm2020/tree/testing/node-harness.mjs +1 -1
  283. package/esm2020/tree/testing/tree-harness-filters.mjs +1 -1
  284. package/esm2020/tree/testing/tree-harness.mjs +2 -2
  285. package/esm2020/tree/toggle.mjs +5 -3
  286. package/esm2020/tree/tree-module.mjs +2 -2
  287. package/esm2020/tree/tree.mjs +1 -1
  288. package/fesm2015/autocomplete/testing.mjs +2 -3
  289. package/fesm2015/autocomplete/testing.mjs.map +1 -1
  290. package/fesm2015/autocomplete.mjs +40 -48
  291. package/fesm2015/autocomplete.mjs.map +1 -1
  292. package/fesm2015/badge/testing.mjs +1 -2
  293. package/fesm2015/badge/testing.mjs.map +1 -1
  294. package/fesm2015/badge.mjs +15 -14
  295. package/fesm2015/badge.mjs.map +1 -1
  296. package/fesm2015/bottom-sheet/testing.mjs.map +1 -1
  297. package/fesm2015/bottom-sheet.mjs +25 -26
  298. package/fesm2015/bottom-sheet.mjs.map +1 -1
  299. package/fesm2015/button/testing.mjs +1 -2
  300. package/fesm2015/button/testing.mjs.map +1 -1
  301. package/fesm2015/button-toggle/testing.mjs.map +1 -1
  302. package/fesm2015/button-toggle.mjs +23 -11
  303. package/fesm2015/button-toggle.mjs.map +1 -1
  304. package/fesm2015/button.mjs +5 -22
  305. package/fesm2015/button.mjs.map +1 -1
  306. package/fesm2015/card/testing.mjs.map +1 -1
  307. package/fesm2015/card.mjs +41 -19
  308. package/fesm2015/card.mjs.map +1 -1
  309. package/fesm2015/checkbox/testing.mjs +2 -2
  310. package/fesm2015/checkbox/testing.mjs.map +1 -1
  311. package/fesm2015/checkbox.mjs +35 -23
  312. package/fesm2015/checkbox.mjs.map +1 -1
  313. package/fesm2015/chips/testing.mjs +2 -2
  314. package/fesm2015/chips/testing.mjs.map +1 -1
  315. package/fesm2015/chips.mjs +77 -43
  316. package/fesm2015/chips.mjs.map +1 -1
  317. package/fesm2015/core/testing.mjs +1 -2
  318. package/fesm2015/core/testing.mjs.map +1 -1
  319. package/fesm2015/core.mjs +69 -42
  320. package/fesm2015/core.mjs.map +1 -1
  321. package/fesm2015/datepicker/testing.mjs +5 -6
  322. package/fesm2015/datepicker/testing.mjs.map +1 -1
  323. package/fesm2015/datepicker.mjs +267 -191
  324. package/fesm2015/datepicker.mjs.map +1 -1
  325. package/fesm2015/dialog/testing.mjs +2 -2
  326. package/fesm2015/dialog/testing.mjs.map +1 -1
  327. package/fesm2015/dialog.mjs +40 -45
  328. package/fesm2015/dialog.mjs.map +1 -1
  329. package/fesm2015/divider/testing.mjs.map +1 -1
  330. package/fesm2015/divider.mjs +13 -5
  331. package/fesm2015/divider.mjs.map +1 -1
  332. package/fesm2015/expansion/testing.mjs.map +1 -1
  333. package/fesm2015/expansion.mjs +40 -36
  334. package/fesm2015/expansion.mjs.map +1 -1
  335. package/fesm2015/form-field/testing.mjs +5 -2
  336. package/fesm2015/form-field/testing.mjs.map +1 -1
  337. package/fesm2015/form-field.mjs +50 -62
  338. package/fesm2015/form-field.mjs.map +1 -1
  339. package/fesm2015/grid-list/testing.mjs +8 -4
  340. package/fesm2015/grid-list/testing.mjs.map +1 -1
  341. package/fesm2015/grid-list.mjs +51 -29
  342. package/fesm2015/grid-list.mjs.map +1 -1
  343. package/fesm2015/icon/testing.mjs +1 -1
  344. package/fesm2015/icon/testing.mjs.map +1 -1
  345. package/fesm2015/icon.mjs +30 -20
  346. package/fesm2015/icon.mjs.map +1 -1
  347. package/fesm2015/input/testing.mjs +8 -8
  348. package/fesm2015/input/testing.mjs.map +1 -1
  349. package/fesm2015/input.mjs +47 -31
  350. package/fesm2015/input.mjs.map +1 -1
  351. package/fesm2015/list/testing.mjs +17 -13
  352. package/fesm2015/list/testing.mjs.map +1 -1
  353. package/fesm2015/list.mjs +41 -22
  354. package/fesm2015/list.mjs.map +1 -1
  355. package/fesm2015/menu/testing.mjs +1 -2
  356. package/fesm2015/menu/testing.mjs.map +1 -1
  357. package/fesm2015/menu.mjs +62 -63
  358. package/fesm2015/menu.mjs.map +1 -1
  359. package/fesm2015/paginator/testing.mjs +1 -1
  360. package/fesm2015/paginator/testing.mjs.map +1 -1
  361. package/fesm2015/paginator.mjs +27 -34
  362. package/fesm2015/paginator.mjs.map +1 -1
  363. package/fesm2015/progress-bar/testing.mjs.map +1 -1
  364. package/fesm2015/progress-bar.mjs +19 -14
  365. package/fesm2015/progress-bar.mjs.map +1 -1
  366. package/fesm2015/progress-spinner/testing.mjs +1 -1
  367. package/fesm2015/progress-spinner/testing.mjs.map +1 -1
  368. package/fesm2015/progress-spinner.mjs +12 -20
  369. package/fesm2015/progress-spinner.mjs.map +1 -1
  370. package/fesm2015/radio/testing.mjs +1 -2
  371. package/fesm2015/radio/testing.mjs.map +1 -1
  372. package/fesm2015/radio.mjs +39 -23
  373. package/fesm2015/radio.mjs.map +1 -1
  374. package/fesm2015/select/testing.mjs +4 -1
  375. package/fesm2015/select/testing.mjs.map +1 -1
  376. package/fesm2015/select.mjs +70 -66
  377. package/fesm2015/select.mjs.map +1 -1
  378. package/fesm2015/sidenav/testing.mjs +2 -4
  379. package/fesm2015/sidenav/testing.mjs.map +1 -1
  380. package/fesm2015/sidenav.mjs +103 -64
  381. package/fesm2015/sidenav.mjs.map +1 -1
  382. package/fesm2015/slide-toggle/testing.mjs +2 -2
  383. package/fesm2015/slide-toggle/testing.mjs.map +1 -1
  384. package/fesm2015/slide-toggle.mjs +18 -17
  385. package/fesm2015/slide-toggle.mjs.map +1 -1
  386. package/fesm2015/slider/testing.mjs +5 -1
  387. package/fesm2015/slider/testing.mjs.map +1 -1
  388. package/fesm2015/slider.mjs +47 -28
  389. package/fesm2015/slider.mjs.map +1 -1
  390. package/fesm2015/snack-bar/testing.mjs +1 -2
  391. package/fesm2015/snack-bar/testing.mjs.map +1 -1
  392. package/fesm2015/snack-bar.mjs +16 -29
  393. package/fesm2015/snack-bar.mjs.map +1 -1
  394. package/fesm2015/sort/testing.mjs.map +1 -1
  395. package/fesm2015/sort.mjs +53 -57
  396. package/fesm2015/sort.mjs.map +1 -1
  397. package/fesm2015/stepper/testing.mjs +6 -8
  398. package/fesm2015/stepper/testing.mjs.map +1 -1
  399. package/fesm2015/stepper.mjs +17 -13
  400. package/fesm2015/stepper.mjs.map +1 -1
  401. package/fesm2015/table/testing.mjs +7 -4
  402. package/fesm2015/table/testing.mjs.map +1 -1
  403. package/fesm2015/table.mjs +45 -43
  404. package/fesm2015/table.mjs.map +1 -1
  405. package/fesm2015/tabs/testing.mjs +3 -6
  406. package/fesm2015/tabs/testing.mjs.map +1 -1
  407. package/fesm2015/tabs.mjs +99 -60
  408. package/fesm2015/tabs.mjs.map +1 -1
  409. package/fesm2015/toolbar/testing.mjs +2 -3
  410. package/fesm2015/toolbar/testing.mjs.map +1 -1
  411. package/fesm2015/toolbar.mjs.map +1 -1
  412. package/fesm2015/tooltip.mjs +60 -48
  413. package/fesm2015/tooltip.mjs.map +1 -1
  414. package/fesm2015/tree/testing.mjs +1 -1
  415. package/fesm2015/tree/testing.mjs.map +1 -1
  416. package/fesm2015/tree.mjs +53 -30
  417. package/fesm2015/tree.mjs.map +1 -1
  418. package/fesm2020/autocomplete/testing.mjs +5 -6
  419. package/fesm2020/autocomplete/testing.mjs.map +1 -1
  420. package/fesm2020/autocomplete.mjs +40 -48
  421. package/fesm2020/autocomplete.mjs.map +1 -1
  422. package/fesm2020/badge/testing.mjs +1 -2
  423. package/fesm2020/badge/testing.mjs.map +1 -1
  424. package/fesm2020/badge.mjs +15 -14
  425. package/fesm2020/badge.mjs.map +1 -1
  426. package/fesm2020/bottom-sheet/testing.mjs.map +1 -1
  427. package/fesm2020/bottom-sheet.mjs +25 -26
  428. package/fesm2020/bottom-sheet.mjs.map +1 -1
  429. package/fesm2020/button/testing.mjs +1 -2
  430. package/fesm2020/button/testing.mjs.map +1 -1
  431. package/fesm2020/button-toggle/testing.mjs +3 -3
  432. package/fesm2020/button-toggle/testing.mjs.map +1 -1
  433. package/fesm2020/button-toggle.mjs +23 -11
  434. package/fesm2020/button-toggle.mjs.map +1 -1
  435. package/fesm2020/button.mjs +5 -22
  436. package/fesm2020/button.mjs.map +1 -1
  437. package/fesm2020/card/testing.mjs.map +1 -1
  438. package/fesm2020/card.mjs +41 -19
  439. package/fesm2020/card.mjs.map +1 -1
  440. package/fesm2020/checkbox/testing.mjs +2 -2
  441. package/fesm2020/checkbox/testing.mjs.map +1 -1
  442. package/fesm2020/checkbox.mjs +35 -23
  443. package/fesm2020/checkbox.mjs.map +1 -1
  444. package/fesm2020/chips/testing.mjs +6 -6
  445. package/fesm2020/chips/testing.mjs.map +1 -1
  446. package/fesm2020/chips.mjs +77 -43
  447. package/fesm2020/chips.mjs.map +1 -1
  448. package/fesm2020/core/testing.mjs +2 -3
  449. package/fesm2020/core/testing.mjs.map +1 -1
  450. package/fesm2020/core.mjs +70 -43
  451. package/fesm2020/core.mjs.map +1 -1
  452. package/fesm2020/datepicker/testing.mjs +6 -7
  453. package/fesm2020/datepicker/testing.mjs.map +1 -1
  454. package/fesm2020/datepicker.mjs +267 -191
  455. package/fesm2020/datepicker.mjs.map +1 -1
  456. package/fesm2020/dialog/testing.mjs +2 -2
  457. package/fesm2020/dialog/testing.mjs.map +1 -1
  458. package/fesm2020/dialog.mjs +40 -45
  459. package/fesm2020/dialog.mjs.map +1 -1
  460. package/fesm2020/divider/testing.mjs.map +1 -1
  461. package/fesm2020/divider.mjs +13 -5
  462. package/fesm2020/divider.mjs.map +1 -1
  463. package/fesm2020/expansion/testing.mjs +2 -2
  464. package/fesm2020/expansion/testing.mjs.map +1 -1
  465. package/fesm2020/expansion.mjs +40 -36
  466. package/fesm2020/expansion.mjs.map +1 -1
  467. package/fesm2020/form-field/testing.mjs +10 -7
  468. package/fesm2020/form-field/testing.mjs.map +1 -1
  469. package/fesm2020/form-field.mjs +50 -62
  470. package/fesm2020/form-field.mjs.map +1 -1
  471. package/fesm2020/grid-list/testing.mjs +8 -4
  472. package/fesm2020/grid-list/testing.mjs.map +1 -1
  473. package/fesm2020/grid-list.mjs +51 -29
  474. package/fesm2020/grid-list.mjs.map +1 -1
  475. package/fesm2020/icon/testing.mjs +2 -2
  476. package/fesm2020/icon/testing.mjs.map +1 -1
  477. package/fesm2020/icon.mjs +30 -20
  478. package/fesm2020/icon.mjs.map +1 -1
  479. package/fesm2020/input/testing.mjs +10 -10
  480. package/fesm2020/input/testing.mjs.map +1 -1
  481. package/fesm2020/input.mjs +47 -31
  482. package/fesm2020/input.mjs.map +1 -1
  483. package/fesm2020/list/testing.mjs +23 -19
  484. package/fesm2020/list/testing.mjs.map +1 -1
  485. package/fesm2020/list.mjs +43 -23
  486. package/fesm2020/list.mjs.map +1 -1
  487. package/fesm2020/menu/testing.mjs +3 -4
  488. package/fesm2020/menu/testing.mjs.map +1 -1
  489. package/fesm2020/menu.mjs +62 -63
  490. package/fesm2020/menu.mjs.map +1 -1
  491. package/fesm2020/paginator/testing.mjs +1 -1
  492. package/fesm2020/paginator/testing.mjs.map +1 -1
  493. package/fesm2020/paginator.mjs +27 -34
  494. package/fesm2020/paginator.mjs.map +1 -1
  495. package/fesm2020/progress-bar/testing.mjs.map +1 -1
  496. package/fesm2020/progress-bar.mjs +19 -14
  497. package/fesm2020/progress-bar.mjs.map +1 -1
  498. package/fesm2020/progress-spinner/testing.mjs +1 -1
  499. package/fesm2020/progress-spinner/testing.mjs.map +1 -1
  500. package/fesm2020/progress-spinner.mjs +12 -20
  501. package/fesm2020/progress-spinner.mjs.map +1 -1
  502. package/fesm2020/radio/testing.mjs +2 -3
  503. package/fesm2020/radio/testing.mjs.map +1 -1
  504. package/fesm2020/radio.mjs +39 -23
  505. package/fesm2020/radio.mjs.map +1 -1
  506. package/fesm2020/select/testing.mjs +8 -5
  507. package/fesm2020/select/testing.mjs.map +1 -1
  508. package/fesm2020/select.mjs +70 -66
  509. package/fesm2020/select.mjs.map +1 -1
  510. package/fesm2020/sidenav/testing.mjs +2 -4
  511. package/fesm2020/sidenav/testing.mjs.map +1 -1
  512. package/fesm2020/sidenav.mjs +103 -64
  513. package/fesm2020/sidenav.mjs.map +1 -1
  514. package/fesm2020/slide-toggle/testing.mjs +2 -2
  515. package/fesm2020/slide-toggle/testing.mjs.map +1 -1
  516. package/fesm2020/slide-toggle.mjs +18 -17
  517. package/fesm2020/slide-toggle.mjs.map +1 -1
  518. package/fesm2020/slider/testing.mjs +5 -1
  519. package/fesm2020/slider/testing.mjs.map +1 -1
  520. package/fesm2020/slider.mjs +47 -28
  521. package/fesm2020/slider.mjs.map +1 -1
  522. package/fesm2020/snack-bar/testing.mjs +4 -5
  523. package/fesm2020/snack-bar/testing.mjs.map +1 -1
  524. package/fesm2020/snack-bar.mjs +16 -29
  525. package/fesm2020/snack-bar.mjs.map +1 -1
  526. package/fesm2020/sort/testing.mjs.map +1 -1
  527. package/fesm2020/sort.mjs +54 -59
  528. package/fesm2020/sort.mjs.map +1 -1
  529. package/fesm2020/stepper/testing.mjs +6 -8
  530. package/fesm2020/stepper/testing.mjs.map +1 -1
  531. package/fesm2020/stepper.mjs +17 -13
  532. package/fesm2020/stepper.mjs.map +1 -1
  533. package/fesm2020/table/testing.mjs +7 -4
  534. package/fesm2020/table/testing.mjs.map +1 -1
  535. package/fesm2020/table.mjs +45 -43
  536. package/fesm2020/table.mjs.map +1 -1
  537. package/fesm2020/tabs/testing.mjs +3 -6
  538. package/fesm2020/tabs/testing.mjs.map +1 -1
  539. package/fesm2020/tabs.mjs +99 -60
  540. package/fesm2020/tabs.mjs.map +1 -1
  541. package/fesm2020/toolbar/testing.mjs +2 -3
  542. package/fesm2020/toolbar/testing.mjs.map +1 -1
  543. package/fesm2020/toolbar.mjs.map +1 -1
  544. package/fesm2020/tooltip.mjs +60 -48
  545. package/fesm2020/tooltip.mjs.map +1 -1
  546. package/fesm2020/tree/testing.mjs +1 -1
  547. package/fesm2020/tree/testing.mjs.map +1 -1
  548. package/fesm2020/tree.mjs +53 -30
  549. package/fesm2020/tree.mjs.map +1 -1
  550. package/grid-list/testing/grid-list-harness.d.ts +1 -1
  551. package/icon/icon-registry.d.ts +1 -1
  552. package/input/_input-theme.scss +8 -6
  553. package/input/input.d.ts +2 -0
  554. package/list/testing/list-harness-base.d.ts +2 -2
  555. package/menu/public-api.d.ts +1 -1
  556. package/menu/testing/menu-harness.d.ts +2 -2
  557. package/package.json +2 -2
  558. package/prebuilt-themes/deeppurple-amber.css +1 -1
  559. package/prebuilt-themes/indigo-pink.css +1 -1
  560. package/prebuilt-themes/pink-bluegrey.css +1 -1
  561. package/prebuilt-themes/purple-green.css +1 -1
  562. package/radio/testing/radio-harness.d.ts +2 -2
  563. package/schematics/ng-add/index.js +2 -2
  564. package/schematics/ng-add/index.mjs +2 -2
  565. package/schematics/ng-add/package-config.js +4 -2
  566. package/schematics/ng-add/package-config.mjs +4 -2
  567. package/schematics/ng-add/setup-project.js +2 -3
  568. package/schematics/ng-add/setup-project.mjs +2 -3
  569. package/schematics/ng-add/theming/create-custom-theme.js +1 -1
  570. package/schematics/ng-add/theming/create-custom-theme.mjs +1 -1
  571. package/schematics/ng-add/theming/theming.js +6 -6
  572. package/schematics/ng-add/theming/theming.mjs +6 -6
  573. package/schematics/ng-generate/address-form/index.js +2 -2
  574. package/schematics/ng-generate/address-form/index.mjs +2 -2
  575. package/schematics/ng-generate/dashboard/index.js +2 -2
  576. package/schematics/ng-generate/dashboard/index.mjs +2 -2
  577. package/schematics/ng-generate/navigation/index.js +2 -2
  578. package/schematics/ng-generate/navigation/index.mjs +2 -2
  579. package/schematics/ng-generate/table/index.js +3 -3
  580. package/schematics/ng-generate/table/index.mjs +3 -3
  581. package/schematics/ng-generate/tree/index.js +2 -2
  582. package/schematics/ng-generate/tree/index.mjs +2 -2
  583. package/schematics/ng-update/data/class-names.js +6 -8
  584. package/schematics/ng-update/data/class-names.mjs +6 -8
  585. package/schematics/ng-update/data/constructor-checks.js +33 -32
  586. package/schematics/ng-update/data/constructor-checks.mjs +33 -32
  587. package/schematics/ng-update/data/css-selectors.js +11 -9
  588. package/schematics/ng-update/data/css-selectors.mjs +11 -9
  589. package/schematics/ng-update/data/element-selectors.js +6 -4
  590. package/schematics/ng-update/data/element-selectors.mjs +6 -4
  591. package/schematics/ng-update/data/input-names.js +31 -23
  592. package/schematics/ng-update/data/input-names.mjs +31 -23
  593. package/schematics/ng-update/data/method-call-checks.js +10 -6
  594. package/schematics/ng-update/data/method-call-checks.mjs +10 -6
  595. package/schematics/ng-update/data/property-names.js +62 -50
  596. package/schematics/ng-update/data/property-names.mjs +62 -50
  597. package/schematics/ng-update/data/symbol-removal.js +6 -6
  598. package/schematics/ng-update/data/symbol-removal.mjs +6 -6
  599. package/schematics/ng-update/index.js +1 -1
  600. package/schematics/ng-update/index.mjs +1 -1
  601. package/schematics/ng-update/migrations/hammer-gestures-v9/find-main-module.js +5 -3
  602. package/schematics/ng-update/migrations/hammer-gestures-v9/find-main-module.mjs +5 -3
  603. package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.js +53 -27
  604. package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.mjs +53 -27
  605. package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-template-check.js +38 -7
  606. package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-template-check.mjs +38 -7
  607. package/schematics/ng-update/migrations/hammer-gestures-v9/import-manager.js +28 -14
  608. package/schematics/ng-update/migrations/hammer-gestures-v9/import-manager.mjs +28 -14
  609. package/schematics/ng-update/migrations/hammer-gestures-v9/remove-array-element.js +1 -1
  610. package/schematics/ng-update/migrations/hammer-gestures-v9/remove-array-element.mjs +1 -1
  611. package/schematics/ng-update/migrations/hammer-gestures-v9/remove-element-from-html.js +1 -1
  612. package/schematics/ng-update/migrations/hammer-gestures-v9/remove-element-from-html.mjs +1 -1
  613. package/schematics/ng-update/migrations/misc-checks/misc-class-inheritance.js +3 -2
  614. package/schematics/ng-update/migrations/misc-checks/misc-class-inheritance.mjs +3 -2
  615. package/schematics/ng-update/migrations/misc-checks/misc-class-names.js +1 -1
  616. package/schematics/ng-update/migrations/misc-checks/misc-class-names.mjs +1 -1
  617. package/schematics/ng-update/migrations/misc-checks/misc-imports.js +6 -3
  618. package/schematics/ng-update/migrations/misc-checks/misc-imports.mjs +6 -3
  619. package/schematics/ng-update/migrations/misc-checks/misc-property-names.js +1 -1
  620. package/schematics/ng-update/migrations/misc-checks/misc-property-names.mjs +1 -1
  621. package/schematics/ng-update/migrations/misc-checks/misc-template.js +7 -13
  622. package/schematics/ng-update/migrations/misc-checks/misc-template.mjs +7 -13
  623. package/schematics/ng-update/migrations/misc-ripples-v7/ripple-speed-factor-migration.js +1 -1
  624. package/schematics/ng-update/migrations/misc-ripples-v7/ripple-speed-factor-migration.mjs +1 -1
  625. package/schematics/ng-update/migrations/package-imports-v8/secondary-entry-points-migration.js +3 -2
  626. package/schematics/ng-update/migrations/package-imports-v8/secondary-entry-points-migration.mjs +3 -2
  627. package/schematics/ng-update/migrations/theming-api-v12/config.js +59 -10
  628. package/schematics/ng-update/migrations/theming-api-v12/config.mjs +59 -10
  629. package/schematics/ng-update/migrations/theming-api-v12/migration.js +19 -11
  630. package/schematics/ng-update/migrations/theming-api-v12/migration.mjs +19 -11
  631. package/schematics/ng-update/migrations/theming-api-v12/theming-api-migration.js +6 -3
  632. package/schematics/ng-update/migrations/theming-api-v12/theming-api-migration.mjs +6 -3
  633. package/schematics/ng-update/typescript/module-specifiers.js +3 -3
  634. package/schematics/ng-update/typescript/module-specifiers.mjs +3 -3
  635. package/select/public-api.d.ts +1 -1
  636. package/select/testing/select-harness.d.ts +4 -4
  637. package/table/table-data-source.d.ts +3 -3
  638. package/table/testing/row-harness.d.ts +2 -2
  639. package/table/testing/table-harness.d.ts +4 -4
  640. package/tabs/_tabs-theme.scss +6 -2
  641. package/tabs/public-api.d.ts +1 -1
  642. package/tabs/tab-content.d.ts +2 -3
@@ -57,7 +57,7 @@ const MAT_INPUT_INVALID_TYPES = [
57
57
  'radio',
58
58
  'range',
59
59
  'reset',
60
- 'submit'
60
+ 'submit',
61
61
  ];
62
62
  let nextUniqueId = 0;
63
63
  // Boilerplate for applying mixins to MatInput.
@@ -113,7 +113,7 @@ class MatInput extends _MatInputBase {
113
113
  'datetime-local',
114
114
  'month',
115
115
  'time',
116
- 'week'
116
+ 'week',
117
117
  ].filter(t => getSupportedInputTypes().has(t));
118
118
  const element = this._elementRef.nativeElement;
119
119
  const nodeName = element.nodeName.toLowerCase();
@@ -152,8 +152,9 @@ class MatInput extends _MatInputBase {
152
152
  this._isTextarea = nodeName === 'textarea';
153
153
  this._isInFormField = !!_formField;
154
154
  if (this._isNativeSelect) {
155
- this.controlType = element.multiple ? 'mat-native-select-multiple' :
156
- 'mat-native-select';
155
+ this.controlType = element.multiple
156
+ ? 'mat-native-select-multiple'
157
+ : 'mat-native-select';
157
158
  }
158
159
  }
159
160
  /**
@@ -179,8 +180,12 @@ class MatInput extends _MatInputBase {
179
180
  * Implemented as part of MatFormFieldControl.
180
181
  * @docs-private
181
182
  */
182
- get id() { return this._id; }
183
- set id(value) { this._id = value || this._uid; }
183
+ get id() {
184
+ return this._id;
185
+ }
186
+ set id(value) {
187
+ this._id = value || this._uid;
188
+ }
184
189
  /**
185
190
  * Implemented as part of MatFormFieldControl.
186
191
  * @docs-private
@@ -189,9 +194,13 @@ class MatInput extends _MatInputBase {
189
194
  var _a, _b, _c, _d;
190
195
  return (_d = (_a = this._required) !== null && _a !== void 0 ? _a : (_c = (_b = this.ngControl) === null || _b === void 0 ? void 0 : _b.control) === null || _c === void 0 ? void 0 : _c.hasValidator(Validators.required)) !== null && _d !== void 0 ? _d : false;
191
196
  }
192
- set required(value) { this._required = coerceBooleanProperty(value); }
197
+ set required(value) {
198
+ this._required = coerceBooleanProperty(value);
199
+ }
193
200
  /** Input type of the element. */
194
- get type() { return this._type; }
201
+ get type() {
202
+ return this._type;
203
+ }
195
204
  set type(value) {
196
205
  this._type = value || 'text';
197
206
  this._validateType();
@@ -206,7 +215,9 @@ class MatInput extends _MatInputBase {
206
215
  * Implemented as part of MatFormFieldControl.
207
216
  * @docs-private
208
217
  */
209
- get value() { return this._inputValueAccessor.value; }
218
+ get value() {
219
+ return this._inputValueAccessor.value;
220
+ }
210
221
  set value(value) {
211
222
  if (value !== this.value) {
212
223
  this._inputValueAccessor.value = value;
@@ -214,8 +225,12 @@ class MatInput extends _MatInputBase {
214
225
  }
215
226
  }
216
227
  /** Whether the element is readonly. */
217
- get readonly() { return this._readonly; }
218
- set readonly(value) { this._readonly = coerceBooleanProperty(value); }
228
+ get readonly() {
229
+ return this._readonly;
230
+ }
231
+ set readonly(value) {
232
+ this._readonly = coerceBooleanProperty(value);
233
+ }
219
234
  ngAfterViewInit() {
220
235
  if (this._platform.isBrowser) {
221
236
  this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {
@@ -290,8 +305,9 @@ class MatInput extends _MatInputBase {
290
305
  if (placeholder !== this._previousPlaceholder) {
291
306
  const element = this._elementRef.nativeElement;
292
307
  this._previousPlaceholder = placeholder;
293
- placeholder ?
294
- element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');
308
+ placeholder
309
+ ? element.setAttribute('placeholder', placeholder)
310
+ : element.removeAttribute('placeholder');
295
311
  }
296
312
  }
297
313
  /** Does some manual dirty checking on the native input `value` property. */
@@ -324,8 +340,10 @@ class MatInput extends _MatInputBase {
324
340
  * @docs-private
325
341
  */
326
342
  get empty() {
327
- return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() &&
328
- !this.autofilled;
343
+ return (!this._isNeverEmpty() &&
344
+ !this._elementRef.nativeElement.value &&
345
+ !this._isBadInput() &&
346
+ !this.autofilled);
329
347
  }
330
348
  /**
331
349
  * Implemented as part of MatFormFieldControl.
@@ -340,8 +358,10 @@ class MatInput extends _MatInputBase {
340
358
  const firstOption = selectElement.options[0];
341
359
  // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be
342
360
  // -1 if the `value` is set to something, that isn't in the list of options, at a later point.
343
- return this.focused || selectElement.multiple || !this.empty ||
344
- !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);
361
+ return (this.focused ||
362
+ selectElement.multiple ||
363
+ !this.empty ||
364
+ !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label));
345
365
  }
346
366
  else {
347
367
  return this.focused || !this.empty;
@@ -371,9 +391,14 @@ class MatInput extends _MatInputBase {
371
391
  this.focus();
372
392
  }
373
393
  }
394
+ /** Whether the form control is a native select that is displayed inline. */
395
+ _isInlineSelect() {
396
+ const element = this._elementRef.nativeElement;
397
+ return this._isNativeSelect && (element.multiple || element.size > 1);
398
+ }
374
399
  }
375
400
  MatInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatInput, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: i2.NgControl, optional: true, self: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i3.ErrorStateMatcher }, { token: MAT_INPUT_VALUE_ACCESSOR, optional: true, self: true }, { token: i4.AutofillMonitor }, { token: i0.NgZone }, { token: MAT_FORM_FIELD, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
376
- MatInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0-next.15", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]", inputs: { disabled: "disabled", id: "id", placeholder: "placeholder", required: "required", type: "type", errorStateMatcher: "errorStateMatcher", userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], value: "value", readonly: "readonly" }, host: { listeners: { "focus": "_focusChanged(true)", "blur": "_focusChanged(false)", "input": "_onInput()" }, properties: { "class.mat-input-server": "_isServer", "attr.id": "id", "attr.data-placeholder": "placeholder", "disabled": "disabled", "required": "required", "attr.readonly": "readonly && !_isNativeSelect || null", "attr.aria-invalid": "(empty && required) ? null : errorState", "attr.aria-required": "required" }, classAttribute: "mat-input-element mat-form-field-autofill-control" }, providers: [{ provide: MatFormFieldControl, useExisting: MatInput }], exportAs: ["matInput"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
401
+ MatInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0-next.15", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]", inputs: { disabled: "disabled", id: "id", placeholder: "placeholder", required: "required", type: "type", errorStateMatcher: "errorStateMatcher", userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], value: "value", readonly: "readonly" }, host: { listeners: { "focus": "_focusChanged(true)", "blur": "_focusChanged(false)", "input": "_onInput()" }, properties: { "class.mat-input-server": "_isServer", "attr.id": "id", "attr.data-placeholder": "placeholder", "disabled": "disabled", "required": "required", "attr.readonly": "readonly && !_isNativeSelect || null", "class.mat-native-select-inline": "_isInlineSelect()", "attr.aria-invalid": "(empty && required) ? null : errorState", "attr.aria-required": "required" }, classAttribute: "mat-input-element mat-form-field-autofill-control" }, providers: [{ provide: MatFormFieldControl, useExisting: MatInput }], exportAs: ["matInput"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
377
402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatInput, decorators: [{
378
403
  type: Directive,
379
404
  args: [{
@@ -396,6 +421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15",
396
421
  '[disabled]': 'disabled',
397
422
  '[required]': 'required',
398
423
  '[attr.readonly]': 'readonly && !_isNativeSelect || null',
424
+ '[class.mat-native-select-inline]': '_isInlineSelect()',
399
425
  // Only mark the input as invalid for assistive technology if it has a value since the
400
426
  // state usually overlaps with `aria-required` when the input is empty and can be redundant.
401
427
  '[attr.aria-invalid]': '(empty && required) ? null : errorState',
@@ -467,18 +493,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15",
467
493
  class MatInputModule {
468
494
  }
469
495
  MatInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
470
- MatInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatInputModule, declarations: [MatInput], imports: [TextFieldModule,
471
- MatFormFieldModule,
472
- MatCommonModule], exports: [TextFieldModule,
496
+ MatInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatInputModule, declarations: [MatInput], imports: [TextFieldModule, MatFormFieldModule, MatCommonModule], exports: [TextFieldModule,
473
497
  // We re-export the `MatFormFieldModule` since `MatInput` will almost always
474
498
  // be used together with `MatFormField`.
475
499
  MatFormFieldModule,
476
500
  MatInput] });
477
- MatInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatInputModule, providers: [ErrorStateMatcher], imports: [[
478
- TextFieldModule,
479
- MatFormFieldModule,
480
- MatCommonModule,
481
- ], TextFieldModule,
501
+ MatInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: MatInputModule, providers: [ErrorStateMatcher], imports: [[TextFieldModule, MatFormFieldModule, MatCommonModule], TextFieldModule,
482
502
  // We re-export the `MatFormFieldModule` since `MatInput` will almost always
483
503
  // be used together with `MatFormField`.
484
504
  MatFormFieldModule] });
@@ -486,11 +506,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15",
486
506
  type: NgModule,
487
507
  args: [{
488
508
  declarations: [MatInput],
489
- imports: [
490
- TextFieldModule,
491
- MatFormFieldModule,
492
- MatCommonModule,
493
- ],
509
+ imports: [TextFieldModule, MatFormFieldModule, MatCommonModule],
494
510
  exports: [
495
511
  TextFieldModule,
496
512
  // We re-export the `MatFormFieldModule` since `MatInput` will almost always
@@ -1 +1 @@
1
- {"version":3,"file":"input.mjs","sources":["../../../../../../src/material/input/input-errors.ts","../../../../../../src/material/input/input-value-accessor.ts","../../../../../../src/material/input/input.ts","../../../../../../src/material/input/input-module.ts","../../../../../../src/material/input/public-api.ts","../../../../../../src/material/input/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\n/** @docs-private */\nexport function getMatInputUnsupportedTypeError(type: string): Error {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\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 {InjectionToken} from '@angular/core';\n\n\n/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nexport const MAT_INPUT_VALUE_ACCESSOR =\n new InjectionToken<{value: any}>('MAT_INPUT_VALUE_ACCESSOR');\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {getSupportedInputTypes, Platform} from '@angular/cdk/platform';\nimport {AutofillMonitor} from '@angular/cdk/text-field';\nimport {\n AfterViewInit,\n Directive,\n DoCheck,\n ElementRef,\n HostListener,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Optional,\n Self,\n} from '@angular/core';\nimport {FormGroupDirective, NgControl, NgForm, Validators} from '@angular/forms';\nimport {\n CanUpdateErrorState,\n ErrorStateMatcher,\n mixinErrorState,\n} from '@angular/material/core';\nimport {MatFormFieldControl, MatFormField, MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {Subject} from 'rxjs';\nimport {getMatInputUnsupportedTypeError} from './input-errors';\nimport {MAT_INPUT_VALUE_ACCESSOR} from './input-value-accessor';\n\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = [\n 'button',\n 'checkbox',\n 'file',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit'\n];\n\nlet nextUniqueId = 0;\n\n// Boilerplate for applying mixins to MatInput.\n/** @docs-private */\nconst _MatInputBase = mixinErrorState(class {\n constructor(public _defaultErrorStateMatcher: ErrorStateMatcher,\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n /** @docs-private */\n public ngControl: NgControl) {}\n});\n\n/** Directive that allows a native input to work inside a `MatFormField`. */\n@Directive({\n selector: `input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]`,\n exportAs: 'matInput',\n host: {\n /**\n * @breaking-change 8.0.0 remove .mat-form-field-autofill-control in favor of AutofillMonitor.\n */\n 'class': 'mat-input-element mat-form-field-autofill-control',\n '[class.mat-input-server]': '_isServer',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n // At the time of writing, we have a lot of customer tests that look up the input based on its\n // placeholder. Since we sometimes omit the placeholder attribute from the DOM to prevent screen\n // readers from reading it twice, we have to keep it somewhere in the DOM for the lookup.\n '[attr.data-placeholder]': 'placeholder',\n '[disabled]': 'disabled',\n '[required]': 'required',\n '[attr.readonly]': 'readonly && !_isNativeSelect || null',\n // Only mark the input as invalid for assistive technology if it has a value since the\n // state usually overlaps with `aria-required` when the input is empty and can be redundant.\n '[attr.aria-invalid]': '(empty && required) ? null : errorState',\n '[attr.aria-required]': 'required',\n },\n providers: [{provide: MatFormFieldControl, useExisting: MatInput}],\n})\nexport class MatInput extends _MatInputBase implements MatFormFieldControl<any>, OnChanges,\n OnDestroy, AfterViewInit, DoCheck, CanUpdateErrorState {\n protected _uid = `mat-input-${nextUniqueId++}`;\n protected _previousNativeValue: any;\n private _inputValueAccessor: {value: any};\n private _previousPlaceholder: string | null;\n\n /** Whether the component is being rendered on the server. */\n readonly _isServer: boolean;\n\n /** Whether the component is a native html select. */\n readonly _isNativeSelect: boolean;\n\n /** Whether the component is a textarea. */\n readonly _isTextarea: boolean;\n\n /** Whether the input is inside of a form field. */\n readonly _isInFormField: boolean;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n override readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n controlType: string = 'mat-input';\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n autofilled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n protected _disabled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get id(): string { return this._id; }\n set id(value: string) { this._id = value || this._uid; }\n protected _id: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input() placeholder: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: boolean) { this._required = coerceBooleanProperty(value); }\n protected _required: boolean | undefined;\n\n /** Input type of the element. */\n @Input()\n get type(): string { return this._type; }\n set type(value: string) {\n this._type = value || 'text';\n this._validateType();\n\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n (this._elementRef.nativeElement as HTMLInputElement).type = this._type;\n }\n }\n protected _type = 'text';\n\n /** An object used to control when error messages are shown. */\n @Input() override errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input('aria-describedby') userAriaDescribedBy: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): string { return this._inputValueAccessor.value; }\n set value(value: string) {\n if (value !== this.value) {\n this._inputValueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n\n /** Whether the element is readonly. */\n @Input()\n get readonly(): boolean { return this._readonly; }\n set readonly(value: boolean) { this._readonly = coerceBooleanProperty(value); }\n private _readonly = false;\n\n protected _neverEmptyInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'month',\n 'time',\n 'week'\n ].filter(t => getSupportedInputTypes().has(t));\n\n constructor(\n protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,\n protected _platform: Platform,\n @Optional() @Self() ngControl: NgControl,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n _defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any,\n private _autofillMonitor: AutofillMonitor,\n ngZone: NgZone,\n // TODO: Remove this once the legacy appearance has been removed. We only need\n // to inject the form-field for determining whether the placeholder has been promoted.\n @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField) {\n\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n\n const element = this._elementRef.nativeElement;\n const nodeName = element.nodeName.toLowerCase();\n\n // If no input value accessor was explicitly specified, use the element as the input value\n // accessor.\n this._inputValueAccessor = inputValueAccessor || element;\n\n this._previousNativeValue = this.value;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (_platform.IOS) {\n ngZone.runOutsideAngular(() => {\n _elementRef.nativeElement.addEventListener('keyup', (event: Event) => {\n const el = event.target as HTMLInputElement;\n\n // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n // indicate different things. If the value is 0, it means that the caret is at the start\n // of the input, whereas a value of `null` means that the input doesn't support\n // manipulating the selection range. Inputs that don't support setting the selection range\n // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting\n // `1, 1` fixes it for the first time that you type text and\n // then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n });\n });\n }\n\n this._isServer = !this._platform.isBrowser;\n this._isNativeSelect = nodeName === 'select';\n this._isTextarea = nodeName === 'textarea';\n this._isInFormField = !!_formField;\n\n if (this._isNativeSelect) {\n this.controlType = (element as HTMLSelectElement).multiple ? 'mat-native-select-multiple' :\n 'mat-native-select';\n }\n }\n\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n this.autofilled = event.isAutofilled;\n this.stateChanges.next();\n });\n }\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n\n if (this._platform.isBrowser) {\n this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this._dirtyCheckNativeValue();\n\n // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n // present or not depends on a query which is prone to \"changed after checked\" errors.\n this._dirtyCheckPlaceholder();\n }\n\n /** Focuses the input. */\n focus(options?: FocusOptions): void {\n this._elementRef.nativeElement.focus(options);\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n /** Callback for the cases where the focused state of the input changes. */\n // tslint:disable:no-host-decorator-in-concrete\n @HostListener('focus', ['true'])\n @HostListener('blur', ['false'])\n // tslint:enable:no-host-decorator-in-concrete\n _focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('input')\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n\n /** Does some manual dirty checking on the native input `placeholder` attribute. */\n private _dirtyCheckPlaceholder() {\n // If we're hiding the native placeholder, it should also be cleared from the DOM, otherwise\n // screen readers will read it out twice: once from the label and once from the attribute.\n // TODO: can be removed once we get rid of the `legacy` style for the form field, because it's\n // the only one that supports promoting the placeholder to a label.\n const placeholder = this._formField?._hideControlPlaceholder?.() ? null : this.placeholder;\n if (placeholder !== this._previousPlaceholder) {\n const element = this._elementRef.nativeElement;\n this._previousPlaceholder = placeholder;\n placeholder ?\n element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');\n }\n }\n\n /** Does some manual dirty checking on the native input `value` property. */\n protected _dirtyCheckNativeValue() {\n const newValue = this._elementRef.nativeElement.value;\n\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /** Make sure the input is a supported type. */\n protected _validateType() {\n if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n\n /** Checks whether the input type is one of the types that are never empty. */\n protected _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n\n /** Checks whether the input is invalid based on the native validation. */\n protected _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let validity = (this._elementRef.nativeElement as HTMLInputElement).validity;\n return validity && validity.badInput;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() &&\n !this.autofilled;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n if (this._isNativeSelect) {\n // For a single-selection `<select>`, the label should float when the selected option has\n // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n // overlapping the label with the options.\n const selectElement = this._elementRef.nativeElement as HTMLSelectElement;\n const firstOption: HTMLOptionElement | undefined = selectElement.options[0];\n\n // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n return this.focused || selectElement.multiple || !this.empty ||\n !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n } else {\n return this.focused || !this.empty;\n }\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids: string[]) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n } else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n if (!this.focused) {\n this.focus();\n }\n }\n\n static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_readonly: BooleanInput;\n static ngAcceptInputType_required: BooleanInput;\n\n // Accept `any` to avoid conflicts with other directives on `<input>` that may\n // accept different types.\n static ngAcceptInputType_value: any;\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 {TextFieldModule} from '@angular/cdk/text-field';\nimport {NgModule} from '@angular/core';\nimport {ErrorStateMatcher, MatCommonModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInput} from './input';\n\n@NgModule({\n declarations: [MatInput],\n imports: [\n TextFieldModule,\n MatFormFieldModule,\n MatCommonModule,\n ],\n exports: [\n TextFieldModule,\n // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n // be used together with `MatFormField`.\n MatFormFieldModule,\n MatInput,\n ],\n providers: [ErrorStateMatcher],\n})\nexport class MatInputModule {}\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 './input';\nexport * from './input-errors';\nexport * from './input-module';\nexport * from './input-value-accessor';\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":"input.mjs","sources":["../../../../../../src/material/input/input-errors.ts","../../../../../../src/material/input/input-value-accessor.ts","../../../../../../src/material/input/input.ts","../../../../../../src/material/input/input-module.ts","../../../../../../src/material/input/public-api.ts","../../../../../../src/material/input/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\n/** @docs-private */\nexport function getMatInputUnsupportedTypeError(type: string): Error {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\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 {InjectionToken} from '@angular/core';\n\n/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nexport const MAT_INPUT_VALUE_ACCESSOR = new InjectionToken<{value: any}>(\n 'MAT_INPUT_VALUE_ACCESSOR',\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {getSupportedInputTypes, Platform} from '@angular/cdk/platform';\nimport {AutofillMonitor} from '@angular/cdk/text-field';\nimport {\n AfterViewInit,\n Directive,\n DoCheck,\n ElementRef,\n HostListener,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Optional,\n Self,\n} from '@angular/core';\nimport {FormGroupDirective, NgControl, NgForm, Validators} from '@angular/forms';\nimport {CanUpdateErrorState, ErrorStateMatcher, mixinErrorState} from '@angular/material/core';\nimport {MatFormFieldControl, MatFormField, MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {Subject} from 'rxjs';\nimport {getMatInputUnsupportedTypeError} from './input-errors';\nimport {MAT_INPUT_VALUE_ACCESSOR} from './input-value-accessor';\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = [\n 'button',\n 'checkbox',\n 'file',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit',\n];\n\nlet nextUniqueId = 0;\n\n// Boilerplate for applying mixins to MatInput.\n/** @docs-private */\nconst _MatInputBase = mixinErrorState(\n class {\n constructor(\n public _defaultErrorStateMatcher: ErrorStateMatcher,\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n /** @docs-private */\n public ngControl: NgControl,\n ) {}\n },\n);\n\n/** Directive that allows a native input to work inside a `MatFormField`. */\n@Directive({\n selector: `input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]`,\n exportAs: 'matInput',\n host: {\n /**\n * @breaking-change 8.0.0 remove .mat-form-field-autofill-control in favor of AutofillMonitor.\n */\n 'class': 'mat-input-element mat-form-field-autofill-control',\n '[class.mat-input-server]': '_isServer',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n // At the time of writing, we have a lot of customer tests that look up the input based on its\n // placeholder. Since we sometimes omit the placeholder attribute from the DOM to prevent screen\n // readers from reading it twice, we have to keep it somewhere in the DOM for the lookup.\n '[attr.data-placeholder]': 'placeholder',\n '[disabled]': 'disabled',\n '[required]': 'required',\n '[attr.readonly]': 'readonly && !_isNativeSelect || null',\n '[class.mat-native-select-inline]': '_isInlineSelect()',\n // Only mark the input as invalid for assistive technology if it has a value since the\n // state usually overlaps with `aria-required` when the input is empty and can be redundant.\n '[attr.aria-invalid]': '(empty && required) ? null : errorState',\n '[attr.aria-required]': 'required',\n },\n providers: [{provide: MatFormFieldControl, useExisting: MatInput}],\n})\nexport class MatInput\n extends _MatInputBase\n implements\n MatFormFieldControl<any>,\n OnChanges,\n OnDestroy,\n AfterViewInit,\n DoCheck,\n CanUpdateErrorState\n{\n protected _uid = `mat-input-${nextUniqueId++}`;\n protected _previousNativeValue: any;\n private _inputValueAccessor: {value: any};\n private _previousPlaceholder: string | null;\n\n /** Whether the component is being rendered on the server. */\n readonly _isServer: boolean;\n\n /** Whether the component is a native html select. */\n readonly _isNativeSelect: boolean;\n\n /** Whether the component is a textarea. */\n readonly _isTextarea: boolean;\n\n /** Whether the input is inside of a form field. */\n readonly _isInFormField: boolean;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n override readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n controlType: string = 'mat-input';\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n autofilled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n protected _disabled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get id(): string {\n return this._id;\n }\n set id(value: string) {\n this._id = value || this._uid;\n }\n protected _id: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input() placeholder: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n protected _required: boolean | undefined;\n\n /** Input type of the element. */\n @Input()\n get type(): string {\n return this._type;\n }\n set type(value: string) {\n this._type = value || 'text';\n this._validateType();\n\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n (this._elementRef.nativeElement as HTMLInputElement).type = this._type;\n }\n }\n protected _type = 'text';\n\n /** An object used to control when error messages are shown. */\n @Input() override errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input('aria-describedby') userAriaDescribedBy: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): string {\n return this._inputValueAccessor.value;\n }\n set value(value: string) {\n if (value !== this.value) {\n this._inputValueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n\n /** Whether the element is readonly. */\n @Input()\n get readonly(): boolean {\n return this._readonly;\n }\n set readonly(value: boolean) {\n this._readonly = coerceBooleanProperty(value);\n }\n private _readonly = false;\n\n protected _neverEmptyInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'month',\n 'time',\n 'week',\n ].filter(t => getSupportedInputTypes().has(t));\n\n constructor(\n protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,\n protected _platform: Platform,\n @Optional() @Self() ngControl: NgControl,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n _defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any,\n private _autofillMonitor: AutofillMonitor,\n ngZone: NgZone,\n // TODO: Remove this once the legacy appearance has been removed. We only need\n // to inject the form-field for determining whether the placeholder has been promoted.\n @Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField,\n ) {\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n\n const element = this._elementRef.nativeElement;\n const nodeName = element.nodeName.toLowerCase();\n\n // If no input value accessor was explicitly specified, use the element as the input value\n // accessor.\n this._inputValueAccessor = inputValueAccessor || element;\n\n this._previousNativeValue = this.value;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (_platform.IOS) {\n ngZone.runOutsideAngular(() => {\n _elementRef.nativeElement.addEventListener('keyup', (event: Event) => {\n const el = event.target as HTMLInputElement;\n\n // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n // indicate different things. If the value is 0, it means that the caret is at the start\n // of the input, whereas a value of `null` means that the input doesn't support\n // manipulating the selection range. Inputs that don't support setting the selection range\n // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting\n // `1, 1` fixes it for the first time that you type text and\n // then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n });\n });\n }\n\n this._isServer = !this._platform.isBrowser;\n this._isNativeSelect = nodeName === 'select';\n this._isTextarea = nodeName === 'textarea';\n this._isInFormField = !!_formField;\n\n if (this._isNativeSelect) {\n this.controlType = (element as HTMLSelectElement).multiple\n ? 'mat-native-select-multiple'\n : 'mat-native-select';\n }\n }\n\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n this.autofilled = event.isAutofilled;\n this.stateChanges.next();\n });\n }\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n\n if (this._platform.isBrowser) {\n this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this._dirtyCheckNativeValue();\n\n // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n // present or not depends on a query which is prone to \"changed after checked\" errors.\n this._dirtyCheckPlaceholder();\n }\n\n /** Focuses the input. */\n focus(options?: FocusOptions): void {\n this._elementRef.nativeElement.focus(options);\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n /** Callback for the cases where the focused state of the input changes. */\n // tslint:disable:no-host-decorator-in-concrete\n @HostListener('focus', ['true'])\n @HostListener('blur', ['false'])\n // tslint:enable:no-host-decorator-in-concrete\n _focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('input')\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n\n /** Does some manual dirty checking on the native input `placeholder` attribute. */\n private _dirtyCheckPlaceholder() {\n // If we're hiding the native placeholder, it should also be cleared from the DOM, otherwise\n // screen readers will read it out twice: once from the label and once from the attribute.\n // TODO: can be removed once we get rid of the `legacy` style for the form field, because it's\n // the only one that supports promoting the placeholder to a label.\n const placeholder = this._formField?._hideControlPlaceholder?.() ? null : this.placeholder;\n if (placeholder !== this._previousPlaceholder) {\n const element = this._elementRef.nativeElement;\n this._previousPlaceholder = placeholder;\n placeholder\n ? element.setAttribute('placeholder', placeholder)\n : element.removeAttribute('placeholder');\n }\n }\n\n /** Does some manual dirty checking on the native input `value` property. */\n protected _dirtyCheckNativeValue() {\n const newValue = this._elementRef.nativeElement.value;\n\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /** Make sure the input is a supported type. */\n protected _validateType() {\n if (\n MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n\n /** Checks whether the input type is one of the types that are never empty. */\n protected _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n\n /** Checks whether the input is invalid based on the native validation. */\n protected _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let validity = (this._elementRef.nativeElement as HTMLInputElement).validity;\n return validity && validity.badInput;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return (\n !this._isNeverEmpty() &&\n !this._elementRef.nativeElement.value &&\n !this._isBadInput() &&\n !this.autofilled\n );\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n if (this._isNativeSelect) {\n // For a single-selection `<select>`, the label should float when the selected option has\n // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n // overlapping the label with the options.\n const selectElement = this._elementRef.nativeElement as HTMLSelectElement;\n const firstOption: HTMLOptionElement | undefined = selectElement.options[0];\n\n // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n return (\n this.focused ||\n selectElement.multiple ||\n !this.empty ||\n !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label)\n );\n } else {\n return this.focused || !this.empty;\n }\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids: string[]) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n } else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n if (!this.focused) {\n this.focus();\n }\n }\n\n /** Whether the form control is a native select that is displayed inline. */\n _isInlineSelect(): boolean {\n const element = this._elementRef.nativeElement as HTMLSelectElement;\n return this._isNativeSelect && (element.multiple || element.size > 1);\n }\n\n static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_readonly: BooleanInput;\n static ngAcceptInputType_required: BooleanInput;\n\n // Accept `any` to avoid conflicts with other directives on `<input>` that may\n // accept different types.\n static ngAcceptInputType_value: any;\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 {TextFieldModule} from '@angular/cdk/text-field';\nimport {NgModule} from '@angular/core';\nimport {ErrorStateMatcher, MatCommonModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInput} from './input';\n\n@NgModule({\n declarations: [MatInput],\n imports: [TextFieldModule, MatFormFieldModule, MatCommonModule],\n exports: [\n TextFieldModule,\n // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n // be used together with `MatFormField`.\n MatFormFieldModule,\n MatInput,\n ],\n providers: [ErrorStateMatcher],\n})\nexport class MatInputModule {}\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 './input';\nexport * from './input-errors';\nexport * from './input-module';\nexport * from './input-value-accessor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -13,14 +13,12 @@ const avatarSelector = '.mat-list-avatar';
13
13
  * @return A `HarnessPredicate` for the given harness type with the given options applied.
14
14
  */
15
15
  function getListItemPredicate(harnessType, options) {
16
- return new HarnessPredicate(harnessType, options)
17
- .addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));
16
+ return new HarnessPredicate(harnessType, options).addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));
18
17
  }
19
18
  /** Harness for interacting with a list subheader. */
20
19
  class MatSubheaderHarness extends ComponentHarness {
21
20
  static with(options = {}) {
22
- return new HarnessPredicate(MatSubheaderHarness, options)
23
- .addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));
21
+ return new HarnessPredicate(MatSubheaderHarness, options).addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));
24
22
  }
25
23
  /** Gets the full text content of the list item (including text from any font icons). */
26
24
  getText() {
@@ -106,7 +104,10 @@ class MatListHarnessBase extends ComponentHarness {
106
104
  return __awaiter(this, void 0, void 0, function* () {
107
105
  const listSections = [];
108
106
  let currentSection = { items: [] };
109
- const itemsAndSubheaders = yield this.getItemsWithSubheadersAndDividers({ item: filters, divider: false });
107
+ const itemsAndSubheaders = yield this.getItemsWithSubheadersAndDividers({
108
+ item: filters,
109
+ divider: false,
110
+ });
110
111
  for (const itemOrSubheader of itemsAndSubheaders) {
111
112
  if (itemOrSubheader instanceof MatSubheaderHarness) {
112
113
  if (currentSection.heading !== undefined || currentSection.items.length) {
@@ -118,7 +119,8 @@ class MatListHarnessBase extends ComponentHarness {
118
119
  currentSection.items.push(itemOrSubheader);
119
120
  }
120
121
  }
121
- if (currentSection.heading !== undefined || currentSection.items.length ||
122
+ if (currentSection.heading !== undefined ||
123
+ currentSection.items.length ||
122
124
  !listSections.length) {
123
125
  listSections.push(currentSection);
124
126
  }
@@ -135,7 +137,10 @@ class MatListHarnessBase extends ComponentHarness {
135
137
  getItemsGroupedByDividers(filters) {
136
138
  return __awaiter(this, void 0, void 0, function* () {
137
139
  const listSections = [[]];
138
- const itemsAndDividers = yield this.getItemsWithSubheadersAndDividers({ item: filters, subheader: false });
140
+ const itemsAndDividers = yield this.getItemsWithSubheadersAndDividers({
141
+ item: filters,
142
+ subheader: false,
143
+ });
139
144
  for (const itemOrDivider of itemsAndDividers) {
140
145
  if (itemOrDivider instanceof MatDividerHarness) {
141
146
  listSections.push([]);
@@ -288,8 +293,7 @@ class MatNavListItemHarness extends MatListItemHarnessBase {
288
293
  * @return a `HarnessPredicate` configured with the given options.
289
294
  */
290
295
  static with(options = {}) {
291
- return getListItemPredicate(MatNavListItemHarness, options)
292
- .addOption('href', options.href, (harness, href) => __awaiter(this, void 0, void 0, function* () { return HarnessPredicate.stringMatches(harness.getHref(), href); }));
296
+ return getListItemPredicate(MatNavListItemHarness, options).addOption('href', options.href, (harness, href) => __awaiter(this, void 0, void 0, function* () { return HarnessPredicate.stringMatches(harness.getHref(), href); }));
293
297
  }
294
298
  /** Gets the href for this nav list item. */
295
299
  getHref() {
@@ -394,14 +398,14 @@ class MatListOptionHarness extends MatListItemHarnessBase {
394
398
  * @return a `HarnessPredicate` configured with the given options.
395
399
  */
396
400
  static with(options = {}) {
397
- return getListItemPredicate(MatListOptionHarness, options)
398
- .addOption('is selected', options.selected, (harness, selected) => __awaiter(this, void 0, void 0, function* () { return (yield harness.isSelected()) === selected; }));
401
+ return getListItemPredicate(MatListOptionHarness, options).addOption('is selected', options.selected, (harness, selected) => __awaiter(this, void 0, void 0, function* () { return (yield harness.isSelected()) === selected; }));
399
402
  }
400
403
  /** Gets the position of the checkbox relative to the list option content. */
401
404
  getCheckboxPosition() {
402
405
  return __awaiter(this, void 0, void 0, function* () {
403
- return (yield (yield this._itemContent()).hasClass('mat-list-item-content-reverse')) ?
404
- 'after' : 'before';
406
+ return (yield (yield this._itemContent()).hasClass('mat-list-item-content-reverse'))
407
+ ? 'after'
408
+ : 'before';
405
409
  });
406
410
  }
407
411
  /** Whether the list option is selected. */
@@ -1 +1 @@
1
- {"version":3,"file":"testing.mjs","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/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 override _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 override _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 {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 override _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 override _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
+ {"version":3,"file":"testing.mjs","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/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,\n): HarnessPredicate<H> {\n return new HarnessPredicate(harnessType, options).addOption(\n 'text',\n options.text,\n (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text),\n );\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).addOption(\n 'text',\n options.text,\n (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text),\n );\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 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. */\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 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 = await this.getItemsWithSubheadersAndDividers({\n item: filters,\n divider: false,\n });\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 (\n currentSection.heading !== undefined ||\n currentSection.items.length ||\n !listSections.length\n ) {\n listSections.push(currentSection);\n }\n\n // Concurrently wait for all sections to resolve their heading if present.\n return parallel(() =>\n listSections.map(async s => ({items: s.items, heading: await s.heading})),\n );\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 = await this.getItemsWithSubheadersAndDividers({\n item: filters,\n subheader: false,\n });\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(\n filters: {\n item?: F | false;\n subheader?: SubheaderHarnessFilters | false;\n divider?: DividerHarnessFilters | false;\n } = {},\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,\n MatActionListItemHarness,\n ActionListItemHarnessFilters\n> {\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 override _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(\n 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 MatListHarnessBase<\n typeof MatListItemHarness,\n MatListItemHarness,\n ListItemHarnessFilters\n> {\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 override _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 {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,\n MatNavListItemHarness,\n NavListItemHarnessFilters\n> {\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 override _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).addOption(\n 'href',\n options.href,\n async (harness, href) => HarnessPredicate.stringMatches(harness.getHref(), href),\n );\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,\n MatListOptionHarness,\n ListOptionHarnessFilters\n> {\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(\n options: SelectionListHarnessFilters = {},\n ): HarnessPredicate<MatSelectionListHarness> {\n return new HarnessPredicate(MatSelectionListHarness, options);\n }\n\n override _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).addOption(\n 'is selected',\n options.selected,\n async (harness, selected) => (await harness.isSelected()) === selected,\n );\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'\n : '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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"}