@angular/material 10.0.0-rc.3 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (627) hide show
  1. package/_theming.scss +17 -17
  2. package/autocomplete/index.metadata.json +1 -1
  3. package/autocomplete/testing/autocomplete-harness.d.ts +2 -0
  4. package/bundles/material-autocomplete-testing.umd.js +11 -0
  5. package/bundles/material-autocomplete-testing.umd.js.map +1 -1
  6. package/bundles/material-autocomplete-testing.umd.min.js +2 -2
  7. package/bundles/material-autocomplete-testing.umd.min.js.map +1 -1
  8. package/bundles/material-autocomplete.umd.js +3 -1
  9. package/bundles/material-autocomplete.umd.js.map +1 -1
  10. package/bundles/material-autocomplete.umd.min.js +5 -5
  11. package/bundles/material-autocomplete.umd.min.js.map +1 -1
  12. package/bundles/material-badge-testing.umd.min.js +1 -1
  13. package/bundles/material-badge-testing.umd.min.js.map +1 -1
  14. package/bundles/material-bottom-sheet-testing.umd.min.js +1 -1
  15. package/bundles/material-bottom-sheet-testing.umd.min.js.map +1 -1
  16. package/bundles/material-button-testing.umd.js +11 -0
  17. package/bundles/material-button-testing.umd.js.map +1 -1
  18. package/bundles/material-button-testing.umd.min.js +2 -2
  19. package/bundles/material-button-testing.umd.min.js.map +1 -1
  20. package/bundles/material-button-toggle-testing.umd.js +11 -0
  21. package/bundles/material-button-toggle-testing.umd.js.map +1 -1
  22. package/bundles/material-button-toggle-testing.umd.min.js +3 -3
  23. package/bundles/material-button-toggle-testing.umd.min.js.map +1 -1
  24. package/bundles/material-button-toggle.umd.js +12 -3
  25. package/bundles/material-button-toggle.umd.js.map +1 -1
  26. package/bundles/material-button-toggle.umd.min.js +2 -2
  27. package/bundles/material-button-toggle.umd.min.js.map +1 -1
  28. package/bundles/material-button.umd.js +7 -2
  29. package/bundles/material-button.umd.js.map +1 -1
  30. package/bundles/material-button.umd.min.js +4 -4
  31. package/bundles/material-button.umd.min.js.map +1 -1
  32. package/bundles/material-card-testing.umd.js +335 -0
  33. package/bundles/material-card-testing.umd.js.map +1 -0
  34. package/bundles/material-card-testing.umd.min.js +44 -0
  35. package/bundles/material-card-testing.umd.min.js.map +1 -0
  36. package/bundles/material-checkbox-testing.umd.js +11 -0
  37. package/bundles/material-checkbox-testing.umd.js.map +1 -1
  38. package/bundles/material-checkbox-testing.umd.min.js +3 -3
  39. package/bundles/material-checkbox-testing.umd.min.js.map +1 -1
  40. package/bundles/material-checkbox.umd.js.map +1 -1
  41. package/bundles/material-chips.umd.js +36 -12
  42. package/bundles/material-chips.umd.js.map +1 -1
  43. package/bundles/material-chips.umd.min.js +4 -4
  44. package/bundles/material-chips.umd.min.js.map +1 -1
  45. package/bundles/material-core-testing.umd.min.js +1 -1
  46. package/bundles/material-core-testing.umd.min.js.map +1 -1
  47. package/bundles/material-core.umd.js +11 -3
  48. package/bundles/material-core.umd.js.map +1 -1
  49. package/bundles/material-core.umd.min.js +11 -11
  50. package/bundles/material-core.umd.min.js.map +1 -1
  51. package/bundles/material-datepicker.umd.js +20 -11
  52. package/bundles/material-datepicker.umd.js.map +1 -1
  53. package/bundles/material-datepicker.umd.min.js +5 -5
  54. package/bundles/material-datepicker.umd.min.js.map +1 -1
  55. package/bundles/material-dialog-testing.umd.min.js +1 -1
  56. package/bundles/material-dialog-testing.umd.min.js.map +1 -1
  57. package/bundles/material-dialog.umd.js +45 -8
  58. package/bundles/material-dialog.umd.js.map +1 -1
  59. package/bundles/material-dialog.umd.min.js +14 -7
  60. package/bundles/material-dialog.umd.min.js.map +1 -1
  61. package/bundles/material-divider-testing.umd.min.js +1 -1
  62. package/bundles/material-divider-testing.umd.min.js.map +1 -1
  63. package/bundles/material-expansion-testing.umd.js +11 -0
  64. package/bundles/material-expansion-testing.umd.js.map +1 -1
  65. package/bundles/material-expansion-testing.umd.min.js +3 -3
  66. package/bundles/material-expansion-testing.umd.min.js.map +1 -1
  67. package/bundles/material-form-field-testing.umd.js +32 -0
  68. package/bundles/material-form-field-testing.umd.js.map +1 -1
  69. package/bundles/material-form-field-testing.umd.min.js +4 -4
  70. package/bundles/material-form-field-testing.umd.min.js.map +1 -1
  71. package/bundles/material-form-field.umd.js +47 -21
  72. package/bundles/material-form-field.umd.js.map +1 -1
  73. package/bundles/material-form-field.umd.min.js +5 -5
  74. package/bundles/material-form-field.umd.min.js.map +1 -1
  75. package/bundles/material-grid-list-testing.umd.min.js +1 -1
  76. package/bundles/material-grid-list-testing.umd.min.js.map +1 -1
  77. package/bundles/material-grid-list.umd.js +2 -2
  78. package/bundles/material-grid-list.umd.js.map +1 -1
  79. package/bundles/material-grid-list.umd.min.js +2 -2
  80. package/bundles/material-grid-list.umd.min.js.map +1 -1
  81. package/bundles/material-input-testing.umd.js +23 -6
  82. package/bundles/material-input-testing.umd.js.map +1 -1
  83. package/bundles/material-input-testing.umd.min.js +3 -3
  84. package/bundles/material-input-testing.umd.min.js.map +1 -1
  85. package/bundles/material-input.umd.js +28 -3
  86. package/bundles/material-input.umd.js.map +1 -1
  87. package/bundles/material-input.umd.min.js +3 -3
  88. package/bundles/material-input.umd.min.js.map +1 -1
  89. package/bundles/material-list-testing.umd.js +33 -0
  90. package/bundles/material-list-testing.umd.js.map +1 -1
  91. package/bundles/material-list-testing.umd.min.js +2 -2
  92. package/bundles/material-list-testing.umd.min.js.map +1 -1
  93. package/bundles/material-list.umd.js +3 -3
  94. package/bundles/material-list.umd.min.js +1 -1
  95. package/bundles/material-list.umd.min.js.map +1 -1
  96. package/bundles/material-menu-testing.umd.js +22 -0
  97. package/bundles/material-menu-testing.umd.js.map +1 -1
  98. package/bundles/material-menu-testing.umd.min.js +2 -2
  99. package/bundles/material-menu-testing.umd.min.js.map +1 -1
  100. package/bundles/material-menu.umd.js +13 -2
  101. package/bundles/material-menu.umd.js.map +1 -1
  102. package/bundles/material-menu.umd.min.js +4 -4
  103. package/bundles/material-menu.umd.min.js.map +1 -1
  104. package/bundles/material-paginator-testing.umd.min.js +1 -1
  105. package/bundles/material-paginator-testing.umd.min.js.map +1 -1
  106. package/bundles/material-progress-bar-testing.umd.min.js +1 -1
  107. package/bundles/material-progress-bar-testing.umd.min.js.map +1 -1
  108. package/bundles/material-progress-spinner-testing.umd.js +1 -1
  109. package/bundles/material-progress-spinner-testing.umd.js.map +1 -1
  110. package/bundles/material-progress-spinner-testing.umd.min.js +2 -2
  111. package/bundles/material-progress-spinner-testing.umd.min.js.map +1 -1
  112. package/bundles/material-progress-spinner.umd.js +2 -2
  113. package/bundles/material-progress-spinner.umd.min.js +3 -3
  114. package/bundles/material-progress-spinner.umd.min.js.map +1 -1
  115. package/bundles/material-radio-testing.umd.js +11 -0
  116. package/bundles/material-radio-testing.umd.js.map +1 -1
  117. package/bundles/material-radio-testing.umd.min.js +3 -3
  118. package/bundles/material-radio-testing.umd.min.js.map +1 -1
  119. package/bundles/material-radio.umd.js +15 -5
  120. package/bundles/material-radio.umd.js.map +1 -1
  121. package/bundles/material-radio.umd.min.js +2 -2
  122. package/bundles/material-radio.umd.min.js.map +1 -1
  123. package/bundles/material-select-testing.umd.js +11 -0
  124. package/bundles/material-select-testing.umd.js.map +1 -1
  125. package/bundles/material-select-testing.umd.min.js +2 -2
  126. package/bundles/material-select-testing.umd.min.js.map +1 -1
  127. package/bundles/material-select.umd.js +11 -3
  128. package/bundles/material-select.umd.js.map +1 -1
  129. package/bundles/material-select.umd.min.js +4 -4
  130. package/bundles/material-select.umd.min.js.map +1 -1
  131. package/bundles/material-sidenav-testing.umd.min.js +1 -1
  132. package/bundles/material-sidenav-testing.umd.min.js.map +1 -1
  133. package/bundles/material-sidenav.umd.js +41 -17
  134. package/bundles/material-sidenav.umd.js.map +1 -1
  135. package/bundles/material-sidenav.umd.min.js +2 -2
  136. package/bundles/material-sidenav.umd.min.js.map +1 -1
  137. package/bundles/material-slide-toggle-testing.umd.js +11 -0
  138. package/bundles/material-slide-toggle-testing.umd.js.map +1 -1
  139. package/bundles/material-slide-toggle-testing.umd.min.js +2 -2
  140. package/bundles/material-slide-toggle-testing.umd.min.js.map +1 -1
  141. package/bundles/material-slide-toggle.umd.js.map +1 -1
  142. package/bundles/material-slider-testing.umd.js +11 -0
  143. package/bundles/material-slider-testing.umd.js.map +1 -1
  144. package/bundles/material-slider-testing.umd.min.js +2 -2
  145. package/bundles/material-slider-testing.umd.min.js.map +1 -1
  146. package/bundles/material-snack-bar-testing.umd.min.js +1 -1
  147. package/bundles/material-snack-bar-testing.umd.min.js.map +1 -1
  148. package/bundles/material-snack-bar.umd.js +47 -39
  149. package/bundles/material-snack-bar.umd.js.map +1 -1
  150. package/bundles/material-snack-bar.umd.min.js +2 -2
  151. package/bundles/material-snack-bar.umd.min.js.map +1 -1
  152. package/bundles/material-sort-testing.umd.js +10 -10
  153. package/bundles/material-sort-testing.umd.js.map +1 -1
  154. package/bundles/material-sort-testing.umd.min.js +3 -3
  155. package/bundles/material-sort-testing.umd.min.js.map +1 -1
  156. package/bundles/material-sort.umd.js +25 -12
  157. package/bundles/material-sort.umd.js.map +1 -1
  158. package/bundles/material-sort.umd.min.js +5 -5
  159. package/bundles/material-sort.umd.min.js.map +1 -1
  160. package/bundles/material-table-testing.umd.min.js +1 -1
  161. package/bundles/material-table-testing.umd.min.js.map +1 -1
  162. package/bundles/material-table.umd.min.js +2 -2
  163. package/bundles/material-table.umd.min.js.map +1 -1
  164. package/bundles/material-tabs-testing.umd.min.js +1 -1
  165. package/bundles/material-tabs-testing.umd.min.js.map +1 -1
  166. package/bundles/material-tabs.umd.js +23 -4
  167. package/bundles/material-tabs.umd.js.map +1 -1
  168. package/bundles/material-tabs.umd.min.js +5 -12
  169. package/bundles/material-tabs.umd.min.js.map +1 -1
  170. package/bundles/material-toolbar-testing.umd.js +330 -0
  171. package/bundles/material-toolbar-testing.umd.js.map +1 -0
  172. package/bundles/material-toolbar-testing.umd.min.js +44 -0
  173. package/bundles/material-toolbar-testing.umd.min.js.map +1 -0
  174. package/bundles/material-tooltip-testing.umd.min.js +1 -1
  175. package/bundles/material-tooltip-testing.umd.min.js.map +1 -1
  176. package/bundles/material-tooltip.umd.js +14 -1
  177. package/bundles/material-tooltip.umd.js.map +1 -1
  178. package/bundles/material-tooltip.umd.min.js +3 -3
  179. package/bundles/material-tooltip.umd.min.js.map +1 -1
  180. package/bundles/material-tree.umd.js.map +1 -1
  181. package/button/_button-base.scss +1 -1
  182. package/button/_button-theme.scss +8 -8
  183. package/button/index.metadata.json +1 -1
  184. package/button/testing/button-harness.d.ts +2 -0
  185. package/button-toggle/button-toggle.d.ts +10 -3
  186. package/button-toggle/index.metadata.json +1 -1
  187. package/button-toggle/testing/button-toggle-harness.d.ts +2 -0
  188. package/card/testing/card-harness-filters.d.ts +17 -0
  189. package/card/testing/card-harness.d.ts +36 -0
  190. package/card/testing/index.d.ts +8 -0
  191. package/card/testing/package.json +9 -0
  192. package/card/testing/public-api.d.ts +9 -0
  193. package/checkbox/index.metadata.json +1 -1
  194. package/checkbox/testing/checkbox-harness.d.ts +2 -0
  195. package/chips/chip.d.ts +19 -1
  196. package/chips/index.metadata.json +1 -1
  197. package/core/focus-indicators/_focus-indicators.scss +6 -6
  198. package/core/index.metadata.json +1 -1
  199. package/core/option/optgroup.d.ts +7 -0
  200. package/core/ripple/ripple-ref.d.ts +21 -2
  201. package/core/ripple/ripple-renderer.d.ts +1 -19
  202. package/core/ripple/ripple.d.ts +2 -2
  203. package/core/style/_list-common.scss +1 -1
  204. package/datepicker/date-range-input-parts.d.ts +2 -4
  205. package/datepicker/date-range-input.d.ts +4 -4
  206. package/datepicker/date-range-picker.d.ts +10 -3
  207. package/datepicker/datepicker.d.ts +2 -3
  208. package/datepicker/index.metadata.json +1 -1
  209. package/datepicker/public-api.d.ts +1 -1
  210. package/dialog/dialog-container.d.ts +9 -2
  211. package/dialog/dialog-content-directives.d.ts +1 -0
  212. package/dialog/dialog-ref.d.ts +7 -0
  213. package/dialog/index.metadata.json +1 -1
  214. package/esm2015/autocomplete/autocomplete-module.js +18 -22
  215. package/esm2015/autocomplete/autocomplete-origin.js +16 -20
  216. package/esm2015/autocomplete/autocomplete-trigger.js +519 -521
  217. package/esm2015/autocomplete/autocomplete.js +126 -130
  218. package/esm2015/autocomplete/testing/autocomplete-harness.js +99 -97
  219. package/esm2015/badge/badge-module.js +13 -17
  220. package/esm2015/badge/badge.js +184 -188
  221. package/esm2015/badge/testing/badge-harness.js +74 -78
  222. package/esm2015/bottom-sheet/bottom-sheet-container.js +161 -165
  223. package/esm2015/bottom-sheet/bottom-sheet-module.js +15 -19
  224. package/esm2015/bottom-sheet/bottom-sheet.js +124 -128
  225. package/esm2015/bottom-sheet/testing/bottom-sheet-harness.js +29 -33
  226. package/esm2015/button/button-module.js +20 -24
  227. package/esm2015/button/button.js +111 -114
  228. package/esm2015/button/testing/button-harness.js +60 -58
  229. package/esm2015/button-toggle/button-toggle-module.js +10 -14
  230. package/esm2015/button-toggle/button-toggle.js +368 -368
  231. package/esm2015/button-toggle/testing/button-toggle-group-harness.js +42 -46
  232. package/esm2015/button-toggle/testing/button-toggle-harness.js +113 -111
  233. package/esm2015/card/card-module.js +30 -34
  234. package/esm2015/card/card.js +147 -203
  235. package/esm2015/card/testing/card-harness-filters.js +8 -0
  236. package/esm2015/card/testing/card-harness.js +52 -0
  237. package/esm2015/card/testing/index.js +9 -0
  238. package/esm2015/card/testing/public-api.js +10 -0
  239. package/esm2015/card/testing/testing.externs.js +0 -0
  240. package/esm2015/checkbox/checkbox-module.js +21 -29
  241. package/esm2015/checkbox/checkbox-required-validator.js +9 -13
  242. package/esm2015/checkbox/checkbox.js +315 -319
  243. package/esm2015/checkbox/testing/checkbox-harness.js +150 -148
  244. package/esm2015/chips/chip-input.js +119 -123
  245. package/esm2015/chips/chip-list.js +572 -576
  246. package/esm2015/chips/chip.js +333 -328
  247. package/esm2015/chips/chips-module.js +16 -20
  248. package/esm2015/core/animation/animation.js +12 -20
  249. package/esm2015/core/common-behaviors/common-module.js +91 -95
  250. package/esm2015/core/datetime/index.js +19 -27
  251. package/esm2015/core/datetime/native-date-adapter.js +202 -206
  252. package/esm2015/core/error/error-options.js +16 -24
  253. package/esm2015/core/line/line.js +18 -26
  254. package/esm2015/core/option/index.js +10 -14
  255. package/esm2015/core/option/optgroup.js +36 -33
  256. package/esm2015/core/option/option.js +181 -185
  257. package/esm2015/core/ripple/index.js +10 -14
  258. package/esm2015/core/ripple/ripple-ref.js +1 -1
  259. package/esm2015/core/ripple/ripple-renderer.js +1 -1
  260. package/esm2015/core/ripple/ripple.js +102 -106
  261. package/esm2015/core/selection/index.js +9 -13
  262. package/esm2015/core/selection/pseudo-checkbox/pseudo-checkbox.js +32 -36
  263. package/esm2015/core/testing/optgroup-harness.js +39 -43
  264. package/esm2015/core/testing/option-harness.js +51 -55
  265. package/esm2015/core/version.js +1 -1
  266. package/esm2015/datepicker/calendar-body.js +214 -218
  267. package/esm2015/datepicker/calendar.js +295 -303
  268. package/esm2015/datepicker/date-range-input-parts.js +214 -229
  269. package/esm2015/datepicker/date-range-input.js +244 -242
  270. package/esm2015/datepicker/date-range-picker.js +19 -23
  271. package/esm2015/datepicker/date-range-selection-strategy.js +31 -35
  272. package/esm2015/datepicker/date-selection-model.js +110 -122
  273. package/esm2015/datepicker/datepicker-base.js +418 -426
  274. package/esm2015/datepicker/datepicker-input-base.js +227 -224
  275. package/esm2015/datepicker/datepicker-input.js +111 -115
  276. package/esm2015/datepicker/datepicker-intl.js +37 -41
  277. package/esm2015/datepicker/datepicker-module.js +62 -66
  278. package/esm2015/datepicker/datepicker-toggle.js +81 -89
  279. package/esm2015/datepicker/datepicker.js +13 -17
  280. package/esm2015/datepicker/month-view.js +283 -287
  281. package/esm2015/datepicker/multi-year-view.js +198 -202
  282. package/esm2015/datepicker/public-api.js +2 -2
  283. package/esm2015/datepicker/year-view.js +220 -224
  284. package/esm2015/dialog/dialog-container.js +175 -164
  285. package/esm2015/dialog/dialog-content-directives.js +105 -114
  286. package/esm2015/dialog/dialog-module.js +32 -36
  287. package/esm2015/dialog/dialog-ref.js +17 -3
  288. package/esm2015/dialog/dialog.js +236 -240
  289. package/esm2015/dialog/testing/dialog-harness.js +58 -62
  290. package/esm2015/divider/divider-module.js +10 -14
  291. package/esm2015/divider/divider.js +33 -37
  292. package/esm2015/divider/testing/divider-harness.js +16 -20
  293. package/esm2015/expansion/accordion.js +73 -77
  294. package/esm2015/expansion/expansion-module.js +26 -30
  295. package/esm2015/expansion/expansion-panel-content.js +13 -17
  296. package/esm2015/expansion/expansion-panel-header.js +168 -180
  297. package/esm2015/expansion/expansion-panel.js +144 -152
  298. package/esm2015/expansion/testing/accordion-harness.js +24 -28
  299. package/esm2015/expansion/testing/expansion-harness.js +136 -134
  300. package/esm2015/form-field/error.js +26 -23
  301. package/esm2015/form-field/form-field-control.js +6 -10
  302. package/esm2015/form-field/form-field-module.js +31 -35
  303. package/esm2015/form-field/form-field.js +407 -409
  304. package/esm2015/form-field/hint.js +35 -29
  305. package/esm2015/form-field/label.js +8 -12
  306. package/esm2015/form-field/placeholder.js +8 -12
  307. package/esm2015/form-field/prefix.js +16 -13
  308. package/esm2015/form-field/suffix.js +16 -13
  309. package/esm2015/form-field/testing/form-field-harness.js +220 -206
  310. package/esm2015/grid-list/grid-list-module.js +26 -30
  311. package/esm2015/grid-list/grid-list.js +108 -112
  312. package/esm2015/grid-list/grid-tile.js +91 -111
  313. package/esm2015/grid-list/testing/grid-list-harness.js +62 -66
  314. package/esm2015/grid-list/testing/grid-tile-harness.js +69 -73
  315. package/esm2015/grid-list/tile-styler.js +1 -1
  316. package/esm2015/icon/icon-module.js +10 -14
  317. package/esm2015/icon/icon-registry.js +406 -410
  318. package/esm2015/icon/icon.js +228 -232
  319. package/esm2015/icon/testing/fake-icon-registry.js +66 -74
  320. package/esm2015/input/autosize.js +30 -34
  321. package/esm2015/input/input-module.js +21 -25
  322. package/esm2015/input/input.js +305 -284
  323. package/esm2015/input/testing/input-harness.js +129 -123
  324. package/esm2015/list/list-module.js +32 -36
  325. package/esm2015/list/list.js +165 -189
  326. package/esm2015/list/selection-list.js +503 -511
  327. package/esm2015/list/testing/action-list-harness.js +55 -57
  328. package/esm2015/list/testing/list-harness.js +31 -39
  329. package/esm2015/list/testing/list-item-harness-base.js +13 -17
  330. package/esm2015/list/testing/nav-list-harness.js +62 -64
  331. package/esm2015/list/testing/selection-list-harness.js +136 -138
  332. package/esm2015/menu/menu-content.js +74 -71
  333. package/esm2015/menu/menu-item.js +119 -123
  334. package/esm2015/menu/menu-module.js +29 -37
  335. package/esm2015/menu/menu-panel.js +1 -1
  336. package/esm2015/menu/menu-trigger.js +402 -405
  337. package/esm2015/menu/menu.js +329 -339
  338. package/esm2015/menu/testing/menu-harness.js +193 -189
  339. package/esm2015/paginator/paginator-intl.js +36 -40
  340. package/esm2015/paginator/paginator-module.js +16 -20
  341. package/esm2015/paginator/paginator.js +205 -209
  342. package/esm2015/paginator/testing/paginator-harness.js +91 -95
  343. package/esm2015/progress-bar/progress-bar-module.js +10 -14
  344. package/esm2015/progress-bar/progress-bar.js +114 -118
  345. package/esm2015/progress-bar/testing/progress-bar-harness.js +27 -31
  346. package/esm2015/progress-spinner/progress-spinner-module.js +17 -21
  347. package/esm2015/progress-spinner/progress-spinner.js +181 -189
  348. package/esm2015/progress-spinner/testing/progress-spinner-harness.js +28 -32
  349. package/esm2015/radio/radio-module.js +10 -14
  350. package/esm2015/radio/radio.js +437 -444
  351. package/esm2015/radio/testing/radio-harness.js +241 -243
  352. package/esm2015/select/select-module.js +23 -27
  353. package/esm2015/select/select.js +917 -918
  354. package/esm2015/select/testing/select-harness.js +138 -136
  355. package/esm2015/sidenav/drawer.js +632 -620
  356. package/esm2015/sidenav/sidenav-module.js +31 -35
  357. package/esm2015/sidenav/sidenav.js +104 -116
  358. package/esm2015/sidenav/testing/drawer-harness.js +40 -44
  359. package/esm2015/sidenav/testing/sidenav-harness.js +20 -24
  360. package/esm2015/slide-toggle/slide-toggle-module.js +27 -35
  361. package/esm2015/slide-toggle/slide-toggle-required-validator.js +9 -13
  362. package/esm2015/slide-toggle/slide-toggle.js +184 -188
  363. package/esm2015/slide-toggle/testing/slide-toggle-harness.js +123 -121
  364. package/esm2015/slider/slider-module.js +10 -14
  365. package/esm2015/slider/slider.js +640 -644
  366. package/esm2015/slider/testing/slider-harness.js +129 -127
  367. package/esm2015/snack-bar/simple-snack-bar.js +32 -36
  368. package/esm2015/snack-bar/snack-bar-container.js +144 -148
  369. package/esm2015/snack-bar/snack-bar-module.js +17 -21
  370. package/esm2015/snack-bar/snack-bar-ref.js +1 -1
  371. package/esm2015/snack-bar/snack-bar.js +208 -205
  372. package/esm2015/snack-bar/testing/snack-bar-harness.js +112 -116
  373. package/esm2015/sort/sort-header-intl.js +21 -21
  374. package/esm2015/sort/sort-header.js +200 -194
  375. package/esm2015/sort/sort-module.js +11 -15
  376. package/esm2015/sort/sort.js +92 -96
  377. package/esm2015/sort/testing/sort-harness.js +28 -32
  378. package/esm2015/sort/testing/sort-header-harness.js +66 -67
  379. package/esm2015/stepper/step-header.js +78 -82
  380. package/esm2015/stepper/step-label.js +8 -12
  381. package/esm2015/stepper/stepper-button.js +23 -31
  382. package/esm2015/stepper/stepper-icon.js +16 -20
  383. package/esm2015/stepper/stepper-intl.js +15 -19
  384. package/esm2015/stepper/stepper-module.js +40 -44
  385. package/esm2015/stepper/stepper.js +139 -155
  386. package/esm2015/table/cell.js +94 -122
  387. package/esm2015/table/row.js +90 -118
  388. package/esm2015/table/table-module.js +13 -17
  389. package/esm2015/table/table.js +26 -30
  390. package/esm2015/table/testing/cell-harness.js +56 -68
  391. package/esm2015/table/testing/row-harness.js +90 -102
  392. package/esm2015/table/testing/table-harness.js +65 -69
  393. package/esm2015/table/text-column.js +17 -21
  394. package/esm2015/tabs/index.js +4 -2
  395. package/esm2015/tabs/ink-bar.js +55 -59
  396. package/esm2015/tabs/paginated-tab-header.js +415 -419
  397. package/esm2015/tabs/tab-body.js +179 -191
  398. package/esm2015/tabs/tab-content.js +21 -16
  399. package/esm2015/tabs/tab-group.js +263 -271
  400. package/esm2015/tabs/tab-header.js +69 -77
  401. package/esm2015/tabs/tab-label-wrapper.js +29 -33
  402. package/esm2015/tabs/tab-label.js +16 -13
  403. package/esm2015/tabs/tab-nav-bar/tab-nav-bar.js +199 -215
  404. package/esm2015/tabs/tab.js +80 -83
  405. package/esm2015/tabs/tabs-module.js +38 -42
  406. package/esm2015/tabs/testing/tab-group-harness.js +52 -56
  407. package/esm2015/tabs/testing/tab-harness.js +78 -82
  408. package/esm2015/toolbar/testing/index.js +9 -0
  409. package/esm2015/toolbar/testing/public-api.js +10 -0
  410. package/esm2015/toolbar/testing/testing.externs.js +0 -0
  411. package/esm2015/toolbar/testing/toolbar-harness-filters.js +8 -0
  412. package/esm2015/toolbar/testing/toolbar-harness.js +47 -0
  413. package/esm2015/toolbar/toolbar-module.js +10 -14
  414. package/esm2015/toolbar/toolbar.js +61 -69
  415. package/esm2015/tooltip/testing/tooltip-harness.js +43 -47
  416. package/esm2015/tooltip/tooltip-module.js +17 -21
  417. package/esm2015/tooltip/tooltip.js +502 -497
  418. package/esm2015/tree/data-source/flat-data-source.js +1 -1
  419. package/esm2015/tree/node.js +99 -111
  420. package/esm2015/tree/outlet.js +19 -23
  421. package/esm2015/tree/padding.js +13 -17
  422. package/esm2015/tree/toggle.js +15 -19
  423. package/esm2015/tree/tree-module.js +10 -14
  424. package/esm2015/tree/tree.js +23 -27
  425. package/expansion/testing/expansion-harness.d.ts +2 -0
  426. package/fesm2015/autocomplete/testing.js +98 -95
  427. package/fesm2015/autocomplete/testing.js.map +1 -1
  428. package/fesm2015/autocomplete.js +677 -687
  429. package/fesm2015/autocomplete.js.map +1 -1
  430. package/fesm2015/badge/testing.js +73 -76
  431. package/fesm2015/badge/testing.js.map +1 -1
  432. package/fesm2015/badge.js +195 -201
  433. package/fesm2015/badge.js.map +1 -1
  434. package/fesm2015/bottom-sheet/testing.js +28 -31
  435. package/fesm2015/bottom-sheet/testing.js.map +1 -1
  436. package/fesm2015/bottom-sheet.js +297 -306
  437. package/fesm2015/bottom-sheet.js.map +1 -1
  438. package/fesm2015/button/testing.js +59 -56
  439. package/fesm2015/button/testing.js.map +1 -1
  440. package/fesm2015/button-toggle/testing.js +155 -155
  441. package/fesm2015/button-toggle/testing.js.map +1 -1
  442. package/fesm2015/button-toggle.js +377 -378
  443. package/fesm2015/button-toggle.js.map +1 -1
  444. package/fesm2015/button.js +129 -133
  445. package/fesm2015/button.js.map +1 -1
  446. package/fesm2015/card/testing.js +79 -0
  447. package/fesm2015/card/testing.js.map +1 -0
  448. package/fesm2015/card.js +175 -220
  449. package/fesm2015/card.js.map +1 -1
  450. package/fesm2015/checkbox/testing.js +149 -146
  451. package/fesm2015/checkbox/testing.js.map +1 -1
  452. package/fesm2015/checkbox.js +342 -354
  453. package/fesm2015/checkbox.js.map +1 -1
  454. package/fesm2015/chips.js +1039 -1039
  455. package/fesm2015/chips.js.map +1 -1
  456. package/fesm2015/core/testing.js +88 -94
  457. package/fesm2015/core/testing.js.map +1 -1
  458. package/fesm2015/core.js +729 -773
  459. package/fesm2015/core.js.map +1 -1
  460. package/fesm2015/datepicker.js +2821 -2884
  461. package/fesm2015/datepicker.js.map +1 -1
  462. package/fesm2015/dialog/testing.js +57 -60
  463. package/fesm2015/dialog/testing.js.map +1 -1
  464. package/fesm2015/dialog.js +564 -549
  465. package/fesm2015/dialog.js.map +1 -1
  466. package/fesm2015/divider/testing.js +15 -18
  467. package/fesm2015/divider/testing.js.map +1 -1
  468. package/fesm2015/divider.js +41 -47
  469. package/fesm2015/divider.js.map +1 -1
  470. package/fesm2015/expansion/testing.js +159 -159
  471. package/fesm2015/expansion/testing.js.map +1 -1
  472. package/fesm2015/expansion.js +422 -446
  473. package/fesm2015/expansion.js.map +1 -1
  474. package/fesm2015/form-field/testing.js +219 -204
  475. package/fesm2015/form-field/testing.js.map +1 -1
  476. package/fesm2015/form-field.js +538 -532
  477. package/fesm2015/form-field.js.map +1 -1
  478. package/fesm2015/grid-list/testing.js +129 -135
  479. package/fesm2015/grid-list/testing.js.map +1 -1
  480. package/fesm2015/grid-list.js +221 -242
  481. package/fesm2015/grid-list.js.map +1 -1
  482. package/fesm2015/icon/testing.js +65 -71
  483. package/fesm2015/icon/testing.js.map +1 -1
  484. package/fesm2015/icon.js +660 -669
  485. package/fesm2015/icon.js.map +1 -1
  486. package/fesm2015/input/testing.js +128 -121
  487. package/fesm2015/input/testing.js.map +1 -1
  488. package/fesm2015/input.js +353 -337
  489. package/fesm2015/input.js.map +1 -1
  490. package/fesm2015/list/testing.js +298 -307
  491. package/fesm2015/list/testing.js.map +1 -1
  492. package/fesm2015/list.js +698 -725
  493. package/fesm2015/list.js.map +1 -1
  494. package/fesm2015/menu/testing.js +192 -186
  495. package/fesm2015/menu/testing.js.map +1 -1
  496. package/fesm2015/menu.js +948 -962
  497. package/fesm2015/menu.js.map +1 -1
  498. package/fesm2015/paginator/testing.js +90 -93
  499. package/fesm2015/paginator/testing.js.map +1 -1
  500. package/fesm2015/paginator.js +247 -256
  501. package/fesm2015/paginator.js.map +1 -1
  502. package/fesm2015/progress-bar/testing.js +26 -29
  503. package/fesm2015/progress-bar/testing.js.map +1 -1
  504. package/fesm2015/progress-bar.js +122 -128
  505. package/fesm2015/progress-bar.js.map +1 -1
  506. package/fesm2015/progress-spinner/testing.js +27 -30
  507. package/fesm2015/progress-spinner/testing.js.map +1 -1
  508. package/fesm2015/progress-spinner.js +196 -205
  509. package/fesm2015/progress-spinner.js.map +1 -1
  510. package/fesm2015/radio/testing.js +240 -240
  511. package/fesm2015/radio/testing.js.map +1 -1
  512. package/fesm2015/radio.js +447 -453
  513. package/fesm2015/radio.js.map +1 -1
  514. package/fesm2015/select/testing.js +137 -134
  515. package/fesm2015/select/testing.js.map +1 -1
  516. package/fesm2015/select.js +939 -941
  517. package/fesm2015/select.js.map +1 -1
  518. package/fesm2015/sidenav/testing.js +58 -64
  519. package/fesm2015/sidenav/testing.js.map +1 -1
  520. package/fesm2015/sidenav.js +765 -762
  521. package/fesm2015/sidenav.js.map +1 -1
  522. package/fesm2015/slide-toggle/testing.js +122 -119
  523. package/fesm2015/slide-toggle/testing.js.map +1 -1
  524. package/fesm2015/slide-toggle.js +217 -229
  525. package/fesm2015/slide-toggle.js.map +1 -1
  526. package/fesm2015/slider/testing.js +128 -125
  527. package/fesm2015/slider/testing.js.map +1 -1
  528. package/fesm2015/slider.js +648 -654
  529. package/fesm2015/slider.js.map +1 -1
  530. package/fesm2015/snack-bar/testing.js +111 -114
  531. package/fesm2015/snack-bar/testing.js.map +1 -1
  532. package/fesm2015/snack-bar.js +426 -431
  533. package/fesm2015/snack-bar.js.map +1 -1
  534. package/fesm2015/sort/testing.js +92 -95
  535. package/fesm2015/sort/testing.js.map +1 -1
  536. package/fesm2015/sort.js +320 -318
  537. package/fesm2015/sort.js.map +1 -1
  538. package/fesm2015/stepper.js +312 -345
  539. package/fesm2015/stepper.js.map +1 -1
  540. package/fesm2015/table/testing.js +208 -229
  541. package/fesm2015/table/testing.js.map +1 -1
  542. package/fesm2015/table.js +235 -286
  543. package/fesm2015/table.js.map +1 -1
  544. package/fesm2015/tabs/testing.js +128 -134
  545. package/fesm2015/tabs/testing.js.map +1 -1
  546. package/fesm2015/tabs.js +1362 -1399
  547. package/fesm2015/tabs.js.map +1 -1
  548. package/fesm2015/toolbar/testing.js +74 -0
  549. package/fesm2015/toolbar/testing.js.map +1 -0
  550. package/fesm2015/toolbar.js +69 -78
  551. package/fesm2015/toolbar.js.map +1 -1
  552. package/fesm2015/tooltip/testing.js +42 -45
  553. package/fesm2015/tooltip/testing.js.map +1 -1
  554. package/fesm2015/tooltip.js +517 -513
  555. package/fesm2015/tooltip.js.map +1 -1
  556. package/fesm2015/tree.js +173 -197
  557. package/fesm2015/tree.js.map +1 -1
  558. package/form-field/error.d.ts +7 -0
  559. package/form-field/hint.d.ts +10 -0
  560. package/form-field/index.metadata.json +1 -1
  561. package/form-field/prefix.d.ts +7 -0
  562. package/form-field/suffix.d.ts +7 -0
  563. package/form-field/testing/form-field-harness.d.ts +8 -0
  564. package/grid-list/grid-list.d.ts +2 -1
  565. package/grid-list/index.metadata.json +1 -1
  566. package/grid-list/tile-styler.d.ts +10 -5
  567. package/input/_input-theme.scss +2 -2
  568. package/input/index.metadata.json +1 -1
  569. package/input/input.d.ts +6 -2
  570. package/input/testing/input-harness.d.ts +2 -0
  571. package/list/index.metadata.json +1 -1
  572. package/list/testing/action-list-harness.d.ts +2 -0
  573. package/list/testing/nav-list-harness.d.ts +2 -0
  574. package/list/testing/selection-list-harness.d.ts +2 -0
  575. package/menu/index.metadata.json +1 -1
  576. package/menu/menu-content.d.ts +7 -1
  577. package/menu/menu-panel.d.ts +1 -0
  578. package/menu/menu.d.ts +4 -0
  579. package/menu/testing/menu-harness.d.ts +4 -0
  580. package/package.json +6 -6
  581. package/prebuilt-themes/deeppurple-amber.css +1 -1
  582. package/prebuilt-themes/indigo-pink.css +1 -1
  583. package/prebuilt-themes/pink-bluegrey.css +1 -1
  584. package/prebuilt-themes/purple-green.css +1 -1
  585. package/progress-spinner/index.metadata.json +1 -1
  586. package/radio/index.metadata.json +1 -1
  587. package/radio/radio.d.ts +6 -0
  588. package/radio/testing/radio-harness.d.ts +2 -0
  589. package/schematics/migration.json +5 -0
  590. package/schematics/ng-add/index.js +2 -2
  591. package/schematics/ng-generate/navigation/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +3 -3
  592. package/schematics/ng-generate/navigation/schema.json +5 -0
  593. package/schematics/ng-update/data/index.js +1 -1
  594. package/schematics/ng-update/index.d.ts +2 -0
  595. package/schematics/ng-update/index.js +7 -2
  596. package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.js +639 -639
  597. package/schematics/ng-update/migrations/misc-ripples-v7/ripple-speed-factor-migration.js +1 -1
  598. package/select/index.metadata.json +1 -1
  599. package/select/select.d.ts +6 -0
  600. package/select/testing/select-harness.d.ts +2 -0
  601. package/sidenav/drawer.d.ts +15 -3
  602. package/sidenav/index.metadata.json +1 -1
  603. package/slide-toggle/index.metadata.json +1 -1
  604. package/slide-toggle/testing/slide-toggle-harness.d.ts +2 -0
  605. package/slider/testing/slider-harness.d.ts +2 -0
  606. package/snack-bar/index.metadata.json +1 -1
  607. package/snack-bar/simple-snack-bar.d.ts +13 -1
  608. package/snack-bar/snack-bar-container.d.ts +16 -3
  609. package/snack-bar/snack-bar-ref.d.ts +3 -3
  610. package/snack-bar/snack-bar.d.ts +10 -3
  611. package/sort/index.metadata.json +1 -1
  612. package/sort/sort-header-intl.d.ts +5 -1
  613. package/sort/sort-header.d.ts +3 -1
  614. package/sort/testing/sort-header-harness.d.ts +6 -2
  615. package/tabs/index.d.ts +3 -1
  616. package/tabs/index.metadata.json +1 -1
  617. package/tabs/tab-content.d.ts +7 -1
  618. package/tabs/tab-label.d.ts +7 -0
  619. package/toolbar/testing/index.d.ts +8 -0
  620. package/toolbar/testing/package.json +9 -0
  621. package/toolbar/testing/public-api.d.ts +9 -0
  622. package/toolbar/testing/toolbar-harness-filters.d.ts +13 -0
  623. package/toolbar/testing/toolbar-harness.d.ts +31 -0
  624. package/tooltip/index.metadata.json +1 -1
  625. package/tooltip/tooltip.d.ts +1 -0
  626. package/tree/data-source/flat-data-source.d.ts +4 -4
  627. package/tree/index.metadata.json +1 -1
@@ -88,546 +88,553 @@ function MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY() {
88
88
  *
89
89
  * https://material.io/design/components/tooltips.html
90
90
  */
91
- let MatTooltip = /** @class */ (() => {
92
- class MatTooltip {
93
- constructor(_overlay, _elementRef, _scrollDispatcher, _viewContainerRef, _ngZone, _platform, _ariaDescriber, _focusMonitor, scrollStrategy, _dir, _defaultOptions) {
94
- this._overlay = _overlay;
95
- this._elementRef = _elementRef;
96
- this._scrollDispatcher = _scrollDispatcher;
97
- this._viewContainerRef = _viewContainerRef;
98
- this._ngZone = _ngZone;
99
- this._platform = _platform;
100
- this._ariaDescriber = _ariaDescriber;
101
- this._focusMonitor = _focusMonitor;
102
- this._dir = _dir;
103
- this._defaultOptions = _defaultOptions;
104
- this._position = 'below';
105
- this._disabled = false;
106
- /** The default delay in ms before showing the tooltip after show is called */
107
- this.showDelay = this._defaultOptions.showDelay;
108
- /** The default delay in ms before hiding the tooltip after hide is called */
109
- this.hideDelay = this._defaultOptions.hideDelay;
110
- /**
111
- * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive
112
- * uses a long press gesture to show and hide, however it can conflict with the native browser
113
- * gestures. To work around the conflict, Angular Material disables native gestures on the
114
- * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable
115
- * elements). The different values for this option configure the touch event handling as follows:
116
- * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native
117
- * browser gestures on particular elements. In particular, it allows text selection on inputs
118
- * and textareas, and preserves the native browser dragging on elements marked as `draggable`.
119
- * - `on` - Enables touch gestures for all elements and disables native
120
- * browser gestures with no exceptions.
121
- * - `off` - Disables touch gestures. Note that this will prevent the tooltip from
122
- * showing on touch devices.
123
- */
124
- this.touchGestures = 'auto';
125
- this._message = '';
126
- /** Manually-bound passive event listeners. */
127
- this._passiveListeners = new Map();
128
- /** Emits when the component is destroyed. */
129
- this._destroyed = new Subject();
130
- /**
131
- * Handles the keydown events on the host element.
132
- * Needs to be an arrow function so that we can use it in addEventListener.
133
- */
134
- this._handleKeydown = (event) => {
135
- if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {
136
- event.preventDefault();
137
- event.stopPropagation();
138
- this._ngZone.run(() => this.hide(0));
139
- }
140
- };
141
- this._scrollStrategy = scrollStrategy;
142
- if (_defaultOptions) {
143
- if (_defaultOptions.position) {
144
- this.position = _defaultOptions.position;
145
- }
146
- if (_defaultOptions.touchGestures) {
147
- this.touchGestures = _defaultOptions.touchGestures;
148
- }
91
+ class MatTooltip {
92
+ constructor(_overlay, _elementRef, _scrollDispatcher, _viewContainerRef, _ngZone, _platform, _ariaDescriber, _focusMonitor, scrollStrategy, _dir, _defaultOptions) {
93
+ this._overlay = _overlay;
94
+ this._elementRef = _elementRef;
95
+ this._scrollDispatcher = _scrollDispatcher;
96
+ this._viewContainerRef = _viewContainerRef;
97
+ this._ngZone = _ngZone;
98
+ this._platform = _platform;
99
+ this._ariaDescriber = _ariaDescriber;
100
+ this._focusMonitor = _focusMonitor;
101
+ this._dir = _dir;
102
+ this._defaultOptions = _defaultOptions;
103
+ this._position = 'below';
104
+ this._disabled = false;
105
+ this._viewInitialized = false;
106
+ /** The default delay in ms before showing the tooltip after show is called */
107
+ this.showDelay = this._defaultOptions.showDelay;
108
+ /** The default delay in ms before hiding the tooltip after hide is called */
109
+ this.hideDelay = this._defaultOptions.hideDelay;
110
+ /**
111
+ * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive
112
+ * uses a long press gesture to show and hide, however it can conflict with the native browser
113
+ * gestures. To work around the conflict, Angular Material disables native gestures on the
114
+ * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable
115
+ * elements). The different values for this option configure the touch event handling as follows:
116
+ * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native
117
+ * browser gestures on particular elements. In particular, it allows text selection on inputs
118
+ * and textareas, and preserves the native browser dragging on elements marked as `draggable`.
119
+ * - `on` - Enables touch gestures for all elements and disables native
120
+ * browser gestures with no exceptions.
121
+ * - `off` - Disables touch gestures. Note that this will prevent the tooltip from
122
+ * showing on touch devices.
123
+ */
124
+ this.touchGestures = 'auto';
125
+ this._message = '';
126
+ /** Manually-bound passive event listeners. */
127
+ this._passiveListeners = new Map();
128
+ /** Emits when the component is destroyed. */
129
+ this._destroyed = new Subject();
130
+ /**
131
+ * Handles the keydown events on the host element.
132
+ * Needs to be an arrow function so that we can use it in addEventListener.
133
+ */
134
+ this._handleKeydown = (event) => {
135
+ if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {
136
+ event.preventDefault();
137
+ event.stopPropagation();
138
+ this._ngZone.run(() => this.hide(0));
139
+ }
140
+ };
141
+ this._scrollStrategy = scrollStrategy;
142
+ if (_defaultOptions) {
143
+ if (_defaultOptions.position) {
144
+ this.position = _defaultOptions.position;
145
+ }
146
+ if (_defaultOptions.touchGestures) {
147
+ this.touchGestures = _defaultOptions.touchGestures;
149
148
  }
150
- _ngZone.runOutsideAngular(() => {
151
- _elementRef.nativeElement.addEventListener('keydown', this._handleKeydown);
152
- });
153
149
  }
154
- /** Allows the user to define the position of the tooltip relative to the parent element */
155
- get position() { return this._position; }
156
- set position(value) {
157
- if (value !== this._position) {
158
- this._position = value;
159
- if (this._overlayRef) {
160
- this._updatePosition();
161
- if (this._tooltipInstance) {
162
- this._tooltipInstance.show(0);
163
- }
164
- this._overlayRef.updatePosition();
150
+ _ngZone.runOutsideAngular(() => {
151
+ _elementRef.nativeElement.addEventListener('keydown', this._handleKeydown);
152
+ });
153
+ }
154
+ /** Allows the user to define the position of the tooltip relative to the parent element */
155
+ get position() { return this._position; }
156
+ set position(value) {
157
+ if (value !== this._position) {
158
+ this._position = value;
159
+ if (this._overlayRef) {
160
+ this._updatePosition();
161
+ if (this._tooltipInstance) {
162
+ this._tooltipInstance.show(0);
165
163
  }
164
+ this._overlayRef.updatePosition();
166
165
  }
167
166
  }
168
- /** Disables the display of the tooltip. */
169
- get disabled() { return this._disabled; }
170
- set disabled(value) {
171
- this._disabled = coerceBooleanProperty(value);
172
- // If tooltip is disabled, hide immediately.
173
- if (this._disabled) {
174
- this.hide(0);
175
- }
167
+ }
168
+ /** Disables the display of the tooltip. */
169
+ get disabled() { return this._disabled; }
170
+ set disabled(value) {
171
+ this._disabled = coerceBooleanProperty(value);
172
+ // If tooltip is disabled, hide immediately.
173
+ if (this._disabled) {
174
+ this.hide(0);
175
+ }
176
+ else {
177
+ this._setupPointerEvents();
176
178
  }
177
- /** The message to be displayed in the tooltip */
178
- get message() { return this._message; }
179
- set message(value) {
179
+ }
180
+ /** The message to be displayed in the tooltip */
181
+ get message() { return this._message; }
182
+ set message(value) {
183
+ if (this._message) {
180
184
  this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message);
181
- // If the message is not a string (e.g. number), convert it to a string and trim it.
182
- this._message = value != null ? `${value}`.trim() : '';
183
- if (!this._message && this._isTooltipVisible()) {
184
- this.hide(0);
185
- }
186
- else {
187
- this._updateTooltipMessage();
188
- this._ngZone.runOutsideAngular(() => {
189
- // The `AriaDescriber` has some functionality that avoids adding a description if it's the
190
- // same as the `aria-label` of an element, however we can't know whether the tooltip trigger
191
- // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the
192
- // issue by deferring the description by a tick so Angular has time to set the `aria-label`.
193
- Promise.resolve().then(() => {
194
- this._ariaDescriber.describe(this._elementRef.nativeElement, this.message);
195
- });
196
- });
197
- }
198
185
  }
199
- /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */
200
- get tooltipClass() { return this._tooltipClass; }
201
- set tooltipClass(value) {
202
- this._tooltipClass = value;
203
- if (this._tooltipInstance) {
204
- this._setTooltipClass(this._tooltipClass);
205
- }
186
+ // If the message is not a string (e.g. number), convert it to a string and trim it.
187
+ this._message = value != null ? `${value}`.trim() : '';
188
+ if (!this._message && this._isTooltipVisible()) {
189
+ this.hide(0);
206
190
  }
207
- ngAfterViewInit() {
208
- // This needs to happen after view init so the initial values for all inputs have been set.
191
+ else {
209
192
  this._setupPointerEvents();
210
- this._focusMonitor.monitor(this._elementRef)
211
- .pipe(takeUntil(this._destroyed))
212
- .subscribe(origin => {
213
- // Note that the focus monitor runs outside the Angular zone.
214
- if (!origin) {
215
- this._ngZone.run(() => this.hide(0));
216
- }
217
- else if (origin === 'keyboard') {
218
- this._ngZone.run(() => this.show());
219
- }
193
+ this._updateTooltipMessage();
194
+ this._ngZone.runOutsideAngular(() => {
195
+ // The `AriaDescriber` has some functionality that avoids adding a description if it's the
196
+ // same as the `aria-label` of an element, however we can't know whether the tooltip trigger
197
+ // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the
198
+ // issue by deferring the description by a tick so Angular has time to set the `aria-label`.
199
+ Promise.resolve().then(() => {
200
+ this._ariaDescriber.describe(this._elementRef.nativeElement, this.message);
201
+ });
220
202
  });
221
203
  }
222
- /**
223
- * Dispose the tooltip when destroyed.
224
- */
225
- ngOnDestroy() {
226
- const nativeElement = this._elementRef.nativeElement;
227
- clearTimeout(this._touchstartTimeout);
228
- if (this._overlayRef) {
229
- this._overlayRef.dispose();
230
- this._tooltipInstance = null;
231
- }
232
- // Clean up the event listeners set in the constructor
233
- nativeElement.removeEventListener('keydown', this._handleKeydown);
234
- this._passiveListeners.forEach((listener, event) => {
235
- nativeElement.removeEventListener(event, listener, passiveListenerOptions);
236
- });
237
- this._passiveListeners.clear();
238
- this._destroyed.next();
239
- this._destroyed.complete();
240
- this._ariaDescriber.removeDescription(nativeElement, this.message);
241
- this._focusMonitor.stopMonitoring(nativeElement);
242
- }
243
- /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */
244
- show(delay = this.showDelay) {
245
- if (this.disabled || !this.message || (this._isTooltipVisible() &&
246
- !this._tooltipInstance._showTimeoutId && !this._tooltipInstance._hideTimeoutId)) {
247
- return;
248
- }
249
- const overlayRef = this._createOverlay();
250
- this._detach();
251
- this._portal = this._portal || new ComponentPortal(TooltipComponent, this._viewContainerRef);
252
- this._tooltipInstance = overlayRef.attach(this._portal).instance;
253
- this._tooltipInstance.afterHidden()
254
- .pipe(takeUntil(this._destroyed))
255
- .subscribe(() => this._detach());
204
+ }
205
+ /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */
206
+ get tooltipClass() { return this._tooltipClass; }
207
+ set tooltipClass(value) {
208
+ this._tooltipClass = value;
209
+ if (this._tooltipInstance) {
256
210
  this._setTooltipClass(this._tooltipClass);
257
- this._updateTooltipMessage();
258
- this._tooltipInstance.show(delay);
259
211
  }
260
- /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */
261
- hide(delay = this.hideDelay) {
212
+ }
213
+ ngAfterViewInit() {
214
+ // This needs to happen after view init so the initial values for all inputs have been set.
215
+ this._viewInitialized = true;
216
+ this._setupPointerEvents();
217
+ this._focusMonitor.monitor(this._elementRef)
218
+ .pipe(takeUntil(this._destroyed))
219
+ .subscribe(origin => {
220
+ // Note that the focus monitor runs outside the Angular zone.
221
+ if (!origin) {
222
+ this._ngZone.run(() => this.hide(0));
223
+ }
224
+ else if (origin === 'keyboard') {
225
+ this._ngZone.run(() => this.show());
226
+ }
227
+ });
228
+ }
229
+ /**
230
+ * Dispose the tooltip when destroyed.
231
+ */
232
+ ngOnDestroy() {
233
+ const nativeElement = this._elementRef.nativeElement;
234
+ clearTimeout(this._touchstartTimeout);
235
+ if (this._overlayRef) {
236
+ this._overlayRef.dispose();
237
+ this._tooltipInstance = null;
238
+ }
239
+ // Clean up the event listeners set in the constructor
240
+ nativeElement.removeEventListener('keydown', this._handleKeydown);
241
+ this._passiveListeners.forEach((listener, event) => {
242
+ nativeElement.removeEventListener(event, listener, passiveListenerOptions);
243
+ });
244
+ this._passiveListeners.clear();
245
+ this._destroyed.next();
246
+ this._destroyed.complete();
247
+ this._ariaDescriber.removeDescription(nativeElement, this.message);
248
+ this._focusMonitor.stopMonitoring(nativeElement);
249
+ }
250
+ /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */
251
+ show(delay = this.showDelay) {
252
+ if (this.disabled || !this.message || (this._isTooltipVisible() &&
253
+ !this._tooltipInstance._showTimeoutId && !this._tooltipInstance._hideTimeoutId)) {
254
+ return;
255
+ }
256
+ const overlayRef = this._createOverlay();
257
+ this._detach();
258
+ this._portal = this._portal || new ComponentPortal(TooltipComponent, this._viewContainerRef);
259
+ this._tooltipInstance = overlayRef.attach(this._portal).instance;
260
+ this._tooltipInstance.afterHidden()
261
+ .pipe(takeUntil(this._destroyed))
262
+ .subscribe(() => this._detach());
263
+ this._setTooltipClass(this._tooltipClass);
264
+ this._updateTooltipMessage();
265
+ this._tooltipInstance.show(delay);
266
+ }
267
+ /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */
268
+ hide(delay = this.hideDelay) {
269
+ if (this._tooltipInstance) {
270
+ this._tooltipInstance.hide(delay);
271
+ }
272
+ }
273
+ /** Shows/hides the tooltip */
274
+ toggle() {
275
+ this._isTooltipVisible() ? this.hide() : this.show();
276
+ }
277
+ /** Returns true if the tooltip is currently visible to the user */
278
+ _isTooltipVisible() {
279
+ return !!this._tooltipInstance && this._tooltipInstance.isVisible();
280
+ }
281
+ /** Create the overlay config and position strategy */
282
+ _createOverlay() {
283
+ if (this._overlayRef) {
284
+ return this._overlayRef;
285
+ }
286
+ const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);
287
+ // Create connected position strategy that listens for scroll events to reposition.
288
+ const strategy = this._overlay.position()
289
+ .flexibleConnectedTo(this._elementRef)
290
+ .withTransformOriginOn('.mat-tooltip')
291
+ .withFlexibleDimensions(false)
292
+ .withViewportMargin(8)
293
+ .withScrollableContainers(scrollableAncestors);
294
+ strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {
262
295
  if (this._tooltipInstance) {
263
- this._tooltipInstance.hide(delay);
296
+ if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {
297
+ // After position changes occur and the overlay is clipped by
298
+ // a parent scrollable then close the tooltip.
299
+ this._ngZone.run(() => this.hide(0));
300
+ }
264
301
  }
302
+ });
303
+ this._overlayRef = this._overlay.create({
304
+ direction: this._dir,
305
+ positionStrategy: strategy,
306
+ panelClass: TOOLTIP_PANEL_CLASS,
307
+ scrollStrategy: this._scrollStrategy()
308
+ });
309
+ this._updatePosition();
310
+ this._overlayRef.detachments()
311
+ .pipe(takeUntil(this._destroyed))
312
+ .subscribe(() => this._detach());
313
+ return this._overlayRef;
314
+ }
315
+ /** Detaches the currently-attached tooltip. */
316
+ _detach() {
317
+ if (this._overlayRef && this._overlayRef.hasAttached()) {
318
+ this._overlayRef.detach();
265
319
  }
266
- /** Shows/hides the tooltip */
267
- toggle() {
268
- this._isTooltipVisible() ? this.hide() : this.show();
320
+ this._tooltipInstance = null;
321
+ }
322
+ /** Updates the position of the current tooltip. */
323
+ _updatePosition() {
324
+ const position = this._overlayRef.getConfig().positionStrategy;
325
+ const origin = this._getOrigin();
326
+ const overlay = this._getOverlayPosition();
327
+ position.withPositions([
328
+ Object.assign(Object.assign({}, origin.main), overlay.main),
329
+ Object.assign(Object.assign({}, origin.fallback), overlay.fallback)
330
+ ]);
331
+ }
332
+ /**
333
+ * Returns the origin position and a fallback position based on the user's position preference.
334
+ * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).
335
+ */
336
+ _getOrigin() {
337
+ const isLtr = !this._dir || this._dir.value == 'ltr';
338
+ const position = this.position;
339
+ let originPosition;
340
+ if (position == 'above' || position == 'below') {
341
+ originPosition = { originX: 'center', originY: position == 'above' ? 'top' : 'bottom' };
269
342
  }
270
- /** Returns true if the tooltip is currently visible to the user */
271
- _isTooltipVisible() {
272
- return !!this._tooltipInstance && this._tooltipInstance.isVisible();
343
+ else if (position == 'before' ||
344
+ (position == 'left' && isLtr) ||
345
+ (position == 'right' && !isLtr)) {
346
+ originPosition = { originX: 'start', originY: 'center' };
273
347
  }
274
- /** Create the overlay config and position strategy */
275
- _createOverlay() {
276
- if (this._overlayRef) {
277
- return this._overlayRef;
278
- }
279
- const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);
280
- // Create connected position strategy that listens for scroll events to reposition.
281
- const strategy = this._overlay.position()
282
- .flexibleConnectedTo(this._elementRef)
283
- .withTransformOriginOn('.mat-tooltip')
284
- .withFlexibleDimensions(false)
285
- .withViewportMargin(8)
286
- .withScrollableContainers(scrollableAncestors);
287
- strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {
348
+ else if (position == 'after' ||
349
+ (position == 'right' && isLtr) ||
350
+ (position == 'left' && !isLtr)) {
351
+ originPosition = { originX: 'end', originY: 'center' };
352
+ }
353
+ else {
354
+ throw getMatTooltipInvalidPositionError(position);
355
+ }
356
+ const { x, y } = this._invertPosition(originPosition.originX, originPosition.originY);
357
+ return {
358
+ main: originPosition,
359
+ fallback: { originX: x, originY: y }
360
+ };
361
+ }
362
+ /** Returns the overlay position and a fallback position based on the user's preference */
363
+ _getOverlayPosition() {
364
+ const isLtr = !this._dir || this._dir.value == 'ltr';
365
+ const position = this.position;
366
+ let overlayPosition;
367
+ if (position == 'above') {
368
+ overlayPosition = { overlayX: 'center', overlayY: 'bottom' };
369
+ }
370
+ else if (position == 'below') {
371
+ overlayPosition = { overlayX: 'center', overlayY: 'top' };
372
+ }
373
+ else if (position == 'before' ||
374
+ (position == 'left' && isLtr) ||
375
+ (position == 'right' && !isLtr)) {
376
+ overlayPosition = { overlayX: 'end', overlayY: 'center' };
377
+ }
378
+ else if (position == 'after' ||
379
+ (position == 'right' && isLtr) ||
380
+ (position == 'left' && !isLtr)) {
381
+ overlayPosition = { overlayX: 'start', overlayY: 'center' };
382
+ }
383
+ else {
384
+ throw getMatTooltipInvalidPositionError(position);
385
+ }
386
+ const { x, y } = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);
387
+ return {
388
+ main: overlayPosition,
389
+ fallback: { overlayX: x, overlayY: y }
390
+ };
391
+ }
392
+ /** Updates the tooltip message and repositions the overlay according to the new message length */
393
+ _updateTooltipMessage() {
394
+ // Must wait for the message to be painted to the tooltip so that the overlay can properly
395
+ // calculate the correct positioning based on the size of the text.
396
+ if (this._tooltipInstance) {
397
+ this._tooltipInstance.message = this.message;
398
+ this._tooltipInstance._markForCheck();
399
+ this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1), takeUntil(this._destroyed)).subscribe(() => {
288
400
  if (this._tooltipInstance) {
289
- if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {
290
- // After position changes occur and the overlay is clipped by
291
- // a parent scrollable then close the tooltip.
292
- this._ngZone.run(() => this.hide(0));
293
- }
401
+ this._overlayRef.updatePosition();
294
402
  }
295
403
  });
296
- this._overlayRef = this._overlay.create({
297
- direction: this._dir,
298
- positionStrategy: strategy,
299
- panelClass: TOOLTIP_PANEL_CLASS,
300
- scrollStrategy: this._scrollStrategy()
301
- });
302
- this._updatePosition();
303
- this._overlayRef.detachments()
304
- .pipe(takeUntil(this._destroyed))
305
- .subscribe(() => this._detach());
306
- return this._overlayRef;
307
404
  }
308
- /** Detaches the currently-attached tooltip. */
309
- _detach() {
310
- if (this._overlayRef && this._overlayRef.hasAttached()) {
311
- this._overlayRef.detach();
312
- }
313
- this._tooltipInstance = null;
314
- }
315
- /** Updates the position of the current tooltip. */
316
- _updatePosition() {
317
- const position = this._overlayRef.getConfig().positionStrategy;
318
- const origin = this._getOrigin();
319
- const overlay = this._getOverlayPosition();
320
- position.withPositions([
321
- Object.assign(Object.assign({}, origin.main), overlay.main),
322
- Object.assign(Object.assign({}, origin.fallback), overlay.fallback)
323
- ]);
405
+ }
406
+ /** Updates the tooltip class */
407
+ _setTooltipClass(tooltipClass) {
408
+ if (this._tooltipInstance) {
409
+ this._tooltipInstance.tooltipClass = tooltipClass;
410
+ this._tooltipInstance._markForCheck();
324
411
  }
325
- /**
326
- * Returns the origin position and a fallback position based on the user's position preference.
327
- * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).
328
- */
329
- _getOrigin() {
330
- const isLtr = !this._dir || this._dir.value == 'ltr';
331
- const position = this.position;
332
- let originPosition;
333
- if (position == 'above' || position == 'below') {
334
- originPosition = { originX: 'center', originY: position == 'above' ? 'top' : 'bottom' };
335
- }
336
- else if (position == 'before' ||
337
- (position == 'left' && isLtr) ||
338
- (position == 'right' && !isLtr)) {
339
- originPosition = { originX: 'start', originY: 'center' };
340
- }
341
- else if (position == 'after' ||
342
- (position == 'right' && isLtr) ||
343
- (position == 'left' && !isLtr)) {
344
- originPosition = { originX: 'end', originY: 'center' };
412
+ }
413
+ /** Inverts an overlay position. */
414
+ _invertPosition(x, y) {
415
+ if (this.position === 'above' || this.position === 'below') {
416
+ if (y === 'top') {
417
+ y = 'bottom';
345
418
  }
346
- else {
347
- throw getMatTooltipInvalidPositionError(position);
419
+ else if (y === 'bottom') {
420
+ y = 'top';
348
421
  }
349
- const { x, y } = this._invertPosition(originPosition.originX, originPosition.originY);
350
- return {
351
- main: originPosition,
352
- fallback: { originX: x, originY: y }
353
- };
354
422
  }
355
- /** Returns the overlay position and a fallback position based on the user's preference */
356
- _getOverlayPosition() {
357
- const isLtr = !this._dir || this._dir.value == 'ltr';
358
- const position = this.position;
359
- let overlayPosition;
360
- if (position == 'above') {
361
- overlayPosition = { overlayX: 'center', overlayY: 'bottom' };
423
+ else {
424
+ if (x === 'end') {
425
+ x = 'start';
362
426
  }
363
- else if (position == 'below') {
364
- overlayPosition = { overlayX: 'center', overlayY: 'top' };
427
+ else if (x === 'start') {
428
+ x = 'end';
365
429
  }
366
- else if (position == 'before' ||
367
- (position == 'left' && isLtr) ||
368
- (position == 'right' && !isLtr)) {
369
- overlayPosition = { overlayX: 'end', overlayY: 'center' };
370
- }
371
- else if (position == 'after' ||
372
- (position == 'right' && isLtr) ||
373
- (position == 'left' && !isLtr)) {
374
- overlayPosition = { overlayX: 'start', overlayY: 'center' };
375
- }
376
- else {
377
- throw getMatTooltipInvalidPositionError(position);
378
- }
379
- const { x, y } = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);
380
- return {
381
- main: overlayPosition,
382
- fallback: { overlayX: x, overlayY: y }
383
- };
384
430
  }
385
- /** Updates the tooltip message and repositions the overlay according to the new message length */
386
- _updateTooltipMessage() {
387
- // Must wait for the message to be painted to the tooltip so that the overlay can properly
388
- // calculate the correct positioning based on the size of the text.
389
- if (this._tooltipInstance) {
390
- this._tooltipInstance.message = this.message;
391
- this._tooltipInstance._markForCheck();
392
- this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1), takeUntil(this._destroyed)).subscribe(() => {
393
- if (this._tooltipInstance) {
394
- this._overlayRef.updatePosition();
395
- }
396
- });
397
- }
431
+ return { x, y };
432
+ }
433
+ /** Binds the pointer events to the tooltip trigger. */
434
+ _setupPointerEvents() {
435
+ // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.
436
+ if (this._disabled || !this.message || !this._viewInitialized ||
437
+ this._passiveListeners.size) {
438
+ return;
398
439
  }
399
- /** Updates the tooltip class */
400
- _setTooltipClass(tooltipClass) {
401
- if (this._tooltipInstance) {
402
- this._tooltipInstance.tooltipClass = tooltipClass;
403
- this._tooltipInstance._markForCheck();
404
- }
440
+ // The mouse events shouldn't be bound on mobile devices, because they can prevent the
441
+ // first tap from firing its click event or can cause the tooltip to open for clicks.
442
+ if (!this._platform.IOS && !this._platform.ANDROID) {
443
+ this._passiveListeners
444
+ .set('mouseenter', () => this.show())
445
+ .set('mouseleave', () => this.hide());
405
446
  }
406
- /** Inverts an overlay position. */
407
- _invertPosition(x, y) {
408
- if (this.position === 'above' || this.position === 'below') {
409
- if (y === 'top') {
410
- y = 'bottom';
411
- }
412
- else if (y === 'bottom') {
413
- y = 'top';
414
- }
415
- }
416
- else {
417
- if (x === 'end') {
418
- x = 'start';
419
- }
420
- else if (x === 'start') {
421
- x = 'end';
422
- }
423
- }
424
- return { x, y };
425
- }
426
- /** Binds the pointer events to the tooltip trigger. */
427
- _setupPointerEvents() {
428
- // The mouse events shouldn't be bound on mobile devices, because they can prevent the
429
- // first tap from firing its click event or can cause the tooltip to open for clicks.
430
- if (!this._platform.IOS && !this._platform.ANDROID) {
431
- this._passiveListeners
432
- .set('mouseenter', () => this.show())
433
- .set('mouseleave', () => this.hide());
434
- }
435
- else if (this.touchGestures !== 'off') {
436
- this._disableNativeGesturesIfNecessary();
437
- const touchendListener = () => {
438
- clearTimeout(this._touchstartTimeout);
439
- this.hide(this._defaultOptions.touchendHideDelay);
440
- };
441
- this._passiveListeners
442
- .set('touchend', touchendListener)
443
- .set('touchcancel', touchendListener)
444
- .set('touchstart', () => {
445
- // Note that it's important that we don't `preventDefault` here,
446
- // because it can prevent click events from firing on the element.
447
- clearTimeout(this._touchstartTimeout);
448
- this._touchstartTimeout = setTimeout(() => this.show(), LONGPRESS_DELAY);
449
- });
450
- }
451
- this._passiveListeners.forEach((listener, event) => {
452
- this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);
447
+ else if (this.touchGestures !== 'off') {
448
+ this._disableNativeGesturesIfNecessary();
449
+ const touchendListener = () => {
450
+ clearTimeout(this._touchstartTimeout);
451
+ this.hide(this._defaultOptions.touchendHideDelay);
452
+ };
453
+ this._passiveListeners
454
+ .set('touchend', touchendListener)
455
+ .set('touchcancel', touchendListener)
456
+ .set('touchstart', () => {
457
+ // Note that it's important that we don't `preventDefault` here,
458
+ // because it can prevent click events from firing on the element.
459
+ clearTimeout(this._touchstartTimeout);
460
+ this._touchstartTimeout = setTimeout(() => this.show(), LONGPRESS_DELAY);
453
461
  });
454
462
  }
455
- /** Disables the native browser gestures, based on how the tooltip has been configured. */
456
- _disableNativeGesturesIfNecessary() {
457
- const element = this._elementRef.nativeElement;
458
- const style = element.style;
459
- const gestures = this.touchGestures;
460
- if (gestures !== 'off') {
461
- // If gestures are set to `auto`, we don't disable text selection on inputs and
462
- // textareas, because it prevents the user from typing into them on iOS Safari.
463
- if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {
464
- style.userSelect = style.msUserSelect = style.webkitUserSelect =
465
- style.MozUserSelect = 'none';
466
- }
467
- // If we have `auto` gestures and the element uses native HTML dragging,
468
- // we don't set `-webkit-user-drag` because it prevents the native behavior.
469
- if (gestures === 'on' || !element.draggable) {
470
- style.webkitUserDrag = 'none';
471
- }
472
- style.touchAction = 'none';
473
- style.webkitTapHighlightColor = 'transparent';
474
- }
463
+ this._passiveListeners.forEach((listener, event) => {
464
+ this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);
465
+ });
466
+ }
467
+ /** Disables the native browser gestures, based on how the tooltip has been configured. */
468
+ _disableNativeGesturesIfNecessary() {
469
+ const element = this._elementRef.nativeElement;
470
+ const style = element.style;
471
+ const gestures = this.touchGestures;
472
+ if (gestures !== 'off') {
473
+ // If gestures are set to `auto`, we don't disable text selection on inputs and
474
+ // textareas, because it prevents the user from typing into them on iOS Safari.
475
+ if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {
476
+ style.userSelect = style.msUserSelect = style.webkitUserSelect =
477
+ style.MozUserSelect = 'none';
478
+ }
479
+ // If we have `auto` gestures and the element uses native HTML dragging,
480
+ // we don't set `-webkit-user-drag` because it prevents the native behavior.
481
+ if (gestures === 'on' || !element.draggable) {
482
+ style.webkitUserDrag = 'none';
483
+ }
484
+ style.touchAction = 'none';
485
+ style.webkitTapHighlightColor = 'transparent';
475
486
  }
476
487
  }
477
- MatTooltip.decorators = [
478
- { type: Directive, args: [{
479
- selector: '[matTooltip]',
480
- exportAs: 'matTooltip',
481
- host: {
482
- 'class': 'mat-tooltip-trigger'
483
- }
484
- },] }
485
- ];
486
- MatTooltip.ctorParameters = () => [
487
- { type: Overlay },
488
- { type: ElementRef },
489
- { type: ScrollDispatcher },
490
- { type: ViewContainerRef },
491
- { type: NgZone },
492
- { type: Platform },
493
- { type: AriaDescriber },
494
- { type: FocusMonitor },
495
- { type: undefined, decorators: [{ type: Inject, args: [MAT_TOOLTIP_SCROLL_STRATEGY,] }] },
496
- { type: Directionality, decorators: [{ type: Optional }] },
497
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_TOOLTIP_DEFAULT_OPTIONS,] }] }
498
- ];
499
- MatTooltip.propDecorators = {
500
- position: [{ type: Input, args: ['matTooltipPosition',] }],
501
- disabled: [{ type: Input, args: ['matTooltipDisabled',] }],
502
- showDelay: [{ type: Input, args: ['matTooltipShowDelay',] }],
503
- hideDelay: [{ type: Input, args: ['matTooltipHideDelay',] }],
504
- touchGestures: [{ type: Input, args: ['matTooltipTouchGestures',] }],
505
- message: [{ type: Input, args: ['matTooltip',] }],
506
- tooltipClass: [{ type: Input, args: ['matTooltipClass',] }]
507
- };
508
- return MatTooltip;
509
- })();
488
+ }
489
+ MatTooltip.decorators = [
490
+ { type: Directive, args: [{
491
+ selector: '[matTooltip]',
492
+ exportAs: 'matTooltip',
493
+ host: {
494
+ 'class': 'mat-tooltip-trigger'
495
+ }
496
+ },] }
497
+ ];
498
+ MatTooltip.ctorParameters = () => [
499
+ { type: Overlay },
500
+ { type: ElementRef },
501
+ { type: ScrollDispatcher },
502
+ { type: ViewContainerRef },
503
+ { type: NgZone },
504
+ { type: Platform },
505
+ { type: AriaDescriber },
506
+ { type: FocusMonitor },
507
+ { type: undefined, decorators: [{ type: Inject, args: [MAT_TOOLTIP_SCROLL_STRATEGY,] }] },
508
+ { type: Directionality, decorators: [{ type: Optional }] },
509
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_TOOLTIP_DEFAULT_OPTIONS,] }] }
510
+ ];
511
+ MatTooltip.propDecorators = {
512
+ position: [{ type: Input, args: ['matTooltipPosition',] }],
513
+ disabled: [{ type: Input, args: ['matTooltipDisabled',] }],
514
+ showDelay: [{ type: Input, args: ['matTooltipShowDelay',] }],
515
+ hideDelay: [{ type: Input, args: ['matTooltipHideDelay',] }],
516
+ touchGestures: [{ type: Input, args: ['matTooltipTouchGestures',] }],
517
+ message: [{ type: Input, args: ['matTooltip',] }],
518
+ tooltipClass: [{ type: Input, args: ['matTooltipClass',] }]
519
+ };
510
520
  /**
511
521
  * Internal component that wraps the tooltip's content.
512
522
  * @docs-private
513
523
  */
514
- let TooltipComponent = /** @class */ (() => {
515
- class TooltipComponent {
516
- constructor(_changeDetectorRef, _breakpointObserver) {
517
- this._changeDetectorRef = _changeDetectorRef;
518
- this._breakpointObserver = _breakpointObserver;
519
- /** Property watched by the animation framework to show or hide the tooltip */
520
- this._visibility = 'initial';
521
- /** Whether interactions on the page should close the tooltip */
522
- this._closeOnInteraction = false;
523
- /** Subject for notifying that the tooltip has been hidden from the view */
524
- this._onHide = new Subject();
525
- /** Stream that emits whether the user has a handset-sized display. */
526
- this._isHandset = this._breakpointObserver.observe(Breakpoints.Handset);
524
+ class TooltipComponent {
525
+ constructor(_changeDetectorRef, _breakpointObserver) {
526
+ this._changeDetectorRef = _changeDetectorRef;
527
+ this._breakpointObserver = _breakpointObserver;
528
+ /** Property watched by the animation framework to show or hide the tooltip */
529
+ this._visibility = 'initial';
530
+ /** Whether interactions on the page should close the tooltip */
531
+ this._closeOnInteraction = false;
532
+ /** Subject for notifying that the tooltip has been hidden from the view */
533
+ this._onHide = new Subject();
534
+ /** Stream that emits whether the user has a handset-sized display. */
535
+ this._isHandset = this._breakpointObserver.observe(Breakpoints.Handset);
536
+ }
537
+ /**
538
+ * Shows the tooltip with an animation originating from the provided origin
539
+ * @param delay Amount of milliseconds to the delay showing the tooltip.
540
+ */
541
+ show(delay) {
542
+ // Cancel the delayed hide if it is scheduled
543
+ if (this._hideTimeoutId) {
544
+ clearTimeout(this._hideTimeoutId);
545
+ this._hideTimeoutId = null;
527
546
  }
528
- /**
529
- * Shows the tooltip with an animation originating from the provided origin
530
- * @param delay Amount of milliseconds to the delay showing the tooltip.
531
- */
532
- show(delay) {
533
- // Cancel the delayed hide if it is scheduled
534
- if (this._hideTimeoutId) {
535
- clearTimeout(this._hideTimeoutId);
536
- this._hideTimeoutId = null;
537
- }
538
- // Body interactions should cancel the tooltip if there is a delay in showing.
539
- this._closeOnInteraction = true;
540
- this._showTimeoutId = setTimeout(() => {
541
- this._visibility = 'visible';
542
- this._showTimeoutId = null;
543
- // Mark for check so if any parent component has set the
544
- // ChangeDetectionStrategy to OnPush it will be checked anyways
545
- this._markForCheck();
546
- }, delay);
547
+ // Body interactions should cancel the tooltip if there is a delay in showing.
548
+ this._closeOnInteraction = true;
549
+ this._showTimeoutId = setTimeout(() => {
550
+ this._visibility = 'visible';
551
+ this._showTimeoutId = null;
552
+ // Mark for check so if any parent component has set the
553
+ // ChangeDetectionStrategy to OnPush it will be checked anyways
554
+ this._markForCheck();
555
+ }, delay);
556
+ }
557
+ /**
558
+ * Begins the animation to hide the tooltip after the provided delay in ms.
559
+ * @param delay Amount of milliseconds to delay showing the tooltip.
560
+ */
561
+ hide(delay) {
562
+ // Cancel the delayed show if it is scheduled
563
+ if (this._showTimeoutId) {
564
+ clearTimeout(this._showTimeoutId);
565
+ this._showTimeoutId = null;
547
566
  }
548
- /**
549
- * Begins the animation to hide the tooltip after the provided delay in ms.
550
- * @param delay Amount of milliseconds to delay showing the tooltip.
551
- */
552
- hide(delay) {
553
- // Cancel the delayed show if it is scheduled
554
- if (this._showTimeoutId) {
555
- clearTimeout(this._showTimeoutId);
556
- this._showTimeoutId = null;
557
- }
558
- this._hideTimeoutId = setTimeout(() => {
559
- this._visibility = 'hidden';
560
- this._hideTimeoutId = null;
561
- // Mark for check so if any parent component has set the
562
- // ChangeDetectionStrategy to OnPush it will be checked anyways
563
- this._markForCheck();
564
- }, delay);
565
- }
566
- /** Returns an observable that notifies when the tooltip has been hidden from view. */
567
- afterHidden() {
568
- return this._onHide.asObservable();
569
- }
570
- /** Whether the tooltip is being displayed. */
571
- isVisible() {
572
- return this._visibility === 'visible';
573
- }
574
- ngOnDestroy() {
575
- this._onHide.complete();
576
- }
577
- _animationStart() {
578
- this._closeOnInteraction = false;
579
- }
580
- _animationDone(event) {
581
- const toState = event.toState;
582
- if (toState === 'hidden' && !this.isVisible()) {
583
- this._onHide.next();
584
- }
585
- if (toState === 'visible' || toState === 'hidden') {
586
- this._closeOnInteraction = true;
587
- }
567
+ this._hideTimeoutId = setTimeout(() => {
568
+ this._visibility = 'hidden';
569
+ this._hideTimeoutId = null;
570
+ // Mark for check so if any parent component has set the
571
+ // ChangeDetectionStrategy to OnPush it will be checked anyways
572
+ this._markForCheck();
573
+ }, delay);
574
+ }
575
+ /** Returns an observable that notifies when the tooltip has been hidden from view. */
576
+ afterHidden() {
577
+ return this._onHide.asObservable();
578
+ }
579
+ /** Whether the tooltip is being displayed. */
580
+ isVisible() {
581
+ return this._visibility === 'visible';
582
+ }
583
+ ngOnDestroy() {
584
+ this._onHide.complete();
585
+ }
586
+ _animationStart() {
587
+ this._closeOnInteraction = false;
588
+ }
589
+ _animationDone(event) {
590
+ const toState = event.toState;
591
+ if (toState === 'hidden' && !this.isVisible()) {
592
+ this._onHide.next();
588
593
  }
589
- /**
590
- * Interactions on the HTML body should close the tooltip immediately as defined in the
591
- * material design spec.
592
- * https://material.io/design/components/tooltips.html#behavior
593
- */
594
- _handleBodyInteraction() {
595
- if (this._closeOnInteraction) {
596
- this.hide(0);
597
- }
594
+ if (toState === 'visible' || toState === 'hidden') {
595
+ this._closeOnInteraction = true;
598
596
  }
599
- /**
600
- * Marks that the tooltip needs to be checked in the next change detection run.
601
- * Mainly used for rendering the initial text before positioning a tooltip, which
602
- * can be problematic in components with OnPush change detection.
603
- */
604
- _markForCheck() {
605
- this._changeDetectorRef.markForCheck();
597
+ }
598
+ /**
599
+ * Interactions on the HTML body should close the tooltip immediately as defined in the
600
+ * material design spec.
601
+ * https://material.io/design/components/tooltips.html#behavior
602
+ */
603
+ _handleBodyInteraction() {
604
+ if (this._closeOnInteraction) {
605
+ this.hide(0);
606
606
  }
607
607
  }
608
- TooltipComponent.decorators = [
609
- { type: Component, args: [{
610
- selector: 'mat-tooltip-component',
611
- template: "<div class=\"mat-tooltip\"\n [ngClass]=\"tooltipClass\"\n [class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n [@state]=\"_visibility\"\n (@state.start)=\"_animationStart()\"\n (@state.done)=\"_animationDone($event)\">{{message}}</div>\n",
612
- encapsulation: ViewEncapsulation.None,
613
- changeDetection: ChangeDetectionStrategy.OnPush,
614
- animations: [matTooltipAnimations.tooltipState],
615
- host: {
616
- // Forces the element to have a layout in IE and Edge. This fixes issues where the element
617
- // won't be rendered if the animations are disabled or there is no web animations polyfill.
618
- '[style.zoom]': '_visibility === "visible" ? 1 : null',
619
- '(body:click)': 'this._handleBodyInteraction()',
620
- 'aria-hidden': 'true',
621
- },
622
- styles: [".mat-tooltip-panel{pointer-events:none !important}.mat-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mat-tooltip{outline:solid 1px}.mat-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"]
623
- },] }
624
- ];
625
- TooltipComponent.ctorParameters = () => [
626
- { type: ChangeDetectorRef },
627
- { type: BreakpointObserver }
628
- ];
629
- return TooltipComponent;
630
- })();
608
+ /**
609
+ * Marks that the tooltip needs to be checked in the next change detection run.
610
+ * Mainly used for rendering the initial text before positioning a tooltip, which
611
+ * can be problematic in components with OnPush change detection.
612
+ */
613
+ _markForCheck() {
614
+ this._changeDetectorRef.markForCheck();
615
+ }
616
+ }
617
+ TooltipComponent.decorators = [
618
+ { type: Component, args: [{
619
+ selector: 'mat-tooltip-component',
620
+ template: "<div class=\"mat-tooltip\"\n [ngClass]=\"tooltipClass\"\n [class.mat-tooltip-handset]=\"(_isHandset | async)?.matches\"\n [@state]=\"_visibility\"\n (@state.start)=\"_animationStart()\"\n (@state.done)=\"_animationDone($event)\">{{message}}</div>\n",
621
+ encapsulation: ViewEncapsulation.None,
622
+ changeDetection: ChangeDetectionStrategy.OnPush,
623
+ animations: [matTooltipAnimations.tooltipState],
624
+ host: {
625
+ // Forces the element to have a layout in IE and Edge. This fixes issues where the element
626
+ // won't be rendered if the animations are disabled or there is no web animations polyfill.
627
+ '[style.zoom]': '_visibility === "visible" ? 1 : null',
628
+ '(body:click)': 'this._handleBodyInteraction()',
629
+ 'aria-hidden': 'true',
630
+ },
631
+ styles: [".mat-tooltip-panel{pointer-events:none !important}.mat-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mat-tooltip{outline:solid 1px}.mat-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"]
632
+ },] }
633
+ ];
634
+ TooltipComponent.ctorParameters = () => [
635
+ { type: ChangeDetectorRef },
636
+ { type: BreakpointObserver }
637
+ ];
631
638
 
632
639
  /**
633
640
  * @license
@@ -636,25 +643,22 @@ let TooltipComponent = /** @class */ (() => {
636
643
  * Use of this source code is governed by an MIT-style license that can be
637
644
  * found in the LICENSE file at https://angular.io/license
638
645
  */
639
- let MatTooltipModule = /** @class */ (() => {
640
- class MatTooltipModule {
641
- }
642
- MatTooltipModule.decorators = [
643
- { type: NgModule, args: [{
644
- imports: [
645
- A11yModule,
646
- CommonModule,
647
- OverlayModule,
648
- MatCommonModule,
649
- ],
650
- exports: [MatTooltip, TooltipComponent, MatCommonModule, CdkScrollableModule],
651
- declarations: [MatTooltip, TooltipComponent],
652
- entryComponents: [TooltipComponent],
653
- providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER]
654
- },] }
655
- ];
656
- return MatTooltipModule;
657
- })();
646
+ class MatTooltipModule {
647
+ }
648
+ MatTooltipModule.decorators = [
649
+ { type: NgModule, args: [{
650
+ imports: [
651
+ A11yModule,
652
+ CommonModule,
653
+ OverlayModule,
654
+ MatCommonModule,
655
+ ],
656
+ exports: [MatTooltip, TooltipComponent, MatCommonModule, CdkScrollableModule],
657
+ declarations: [MatTooltip, TooltipComponent],
658
+ entryComponents: [TooltipComponent],
659
+ providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER]
660
+ },] }
661
+ ];
658
662
 
659
663
  /**
660
664
  * @license