@angular/material 8.1.4 → 8.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/_theming.scss +13 -11
  2. package/autocomplete/typings/autocomplete-trigger.d.ts +5 -2
  3. package/autocomplete/typings/index.metadata.json +1 -1
  4. package/bundles/material-autocomplete.umd.js +48 -20
  5. package/bundles/material-autocomplete.umd.js.map +1 -1
  6. package/bundles/material-autocomplete.umd.min.js +1 -1
  7. package/bundles/material-autocomplete.umd.min.js.map +1 -1
  8. package/bundles/material-button.umd.js +5 -6
  9. package/bundles/material-button.umd.js.map +1 -1
  10. package/bundles/material-button.umd.min.js +1 -1
  11. package/bundles/material-button.umd.min.js.map +1 -1
  12. package/bundles/material-card.umd.js +1 -1
  13. package/bundles/material-card.umd.js.map +1 -1
  14. package/bundles/material-card.umd.min.js +1 -1
  15. package/bundles/material-card.umd.min.js.map +1 -1
  16. package/bundles/material-checkbox.umd.js +1 -1
  17. package/bundles/material-checkbox.umd.js.map +1 -1
  18. package/bundles/material-checkbox.umd.min.js.map +1 -1
  19. package/bundles/material-chips.umd.js +24 -4
  20. package/bundles/material-chips.umd.js.map +1 -1
  21. package/bundles/material-chips.umd.min.js +1 -1
  22. package/bundles/material-chips.umd.min.js.map +1 -1
  23. package/bundles/material-core.umd.js +20 -18
  24. package/bundles/material-core.umd.js.map +1 -1
  25. package/bundles/material-core.umd.min.js +2 -2
  26. package/bundles/material-core.umd.min.js.map +1 -1
  27. package/bundles/material-datepicker.umd.js +22 -2
  28. package/bundles/material-datepicker.umd.js.map +1 -1
  29. package/bundles/material-datepicker.umd.min.js +2 -2
  30. package/bundles/material-datepicker.umd.min.js.map +1 -1
  31. package/bundles/material-dialog.umd.js +28 -5
  32. package/bundles/material-dialog.umd.js.map +1 -1
  33. package/bundles/material-dialog.umd.min.js +1 -1
  34. package/bundles/material-dialog.umd.min.js.map +1 -1
  35. package/bundles/material-form-field.umd.js +15 -2
  36. package/bundles/material-form-field.umd.js.map +1 -1
  37. package/bundles/material-form-field.umd.min.js +1 -1
  38. package/bundles/material-form-field.umd.min.js.map +1 -1
  39. package/bundles/material-grid-list.umd.js +1 -1
  40. package/bundles/material-grid-list.umd.min.js +1 -1
  41. package/bundles/material-icon.umd.js +103 -42
  42. package/bundles/material-icon.umd.js.map +1 -1
  43. package/bundles/material-icon.umd.min.js +1 -1
  44. package/bundles/material-icon.umd.min.js.map +1 -1
  45. package/bundles/material-list.umd.js +4 -1
  46. package/bundles/material-list.umd.js.map +1 -1
  47. package/bundles/material-list.umd.min.js +1 -1
  48. package/bundles/material-list.umd.min.js.map +1 -1
  49. package/bundles/material-menu.umd.js +35 -19
  50. package/bundles/material-menu.umd.js.map +1 -1
  51. package/bundles/material-menu.umd.min.js +1 -1
  52. package/bundles/material-menu.umd.min.js.map +1 -1
  53. package/bundles/material-paginator.umd.js +1 -1
  54. package/bundles/material-paginator.umd.js.map +1 -1
  55. package/bundles/material-paginator.umd.min.js +1 -1
  56. package/bundles/material-paginator.umd.min.js.map +1 -1
  57. package/bundles/material-progress-spinner.umd.js +34 -23
  58. package/bundles/material-progress-spinner.umd.js.map +1 -1
  59. package/bundles/material-progress-spinner.umd.min.js +1 -1
  60. package/bundles/material-progress-spinner.umd.min.js.map +1 -1
  61. package/bundles/material-radio.umd.js +3 -0
  62. package/bundles/material-radio.umd.js.map +1 -1
  63. package/bundles/material-radio.umd.min.js +1 -1
  64. package/bundles/material-radio.umd.min.js.map +1 -1
  65. package/bundles/material-select.umd.js +14 -2
  66. package/bundles/material-select.umd.js.map +1 -1
  67. package/bundles/material-select.umd.min.js +1 -1
  68. package/bundles/material-select.umd.min.js.map +1 -1
  69. package/bundles/material-slide-toggle.umd.js +3 -1
  70. package/bundles/material-slide-toggle.umd.js.map +1 -1
  71. package/bundles/material-slide-toggle.umd.min.js +1 -1
  72. package/bundles/material-slide-toggle.umd.min.js.map +1 -1
  73. package/bundles/material-slider.umd.js +6 -3
  74. package/bundles/material-slider.umd.js.map +1 -1
  75. package/bundles/material-slider.umd.min.js +1 -1
  76. package/bundles/material-slider.umd.min.js.map +1 -1
  77. package/bundles/material-snack-bar.umd.js +7 -8
  78. package/bundles/material-snack-bar.umd.js.map +1 -1
  79. package/bundles/material-snack-bar.umd.min.js +1 -1
  80. package/bundles/material-snack-bar.umd.min.js.map +1 -1
  81. package/bundles/material-sort.umd.js +0 -1
  82. package/bundles/material-sort.umd.js.map +1 -1
  83. package/bundles/material-sort.umd.min.js +1 -1
  84. package/bundles/material-sort.umd.min.js.map +1 -1
  85. package/bundles/material-table.umd.js +14 -4
  86. package/bundles/material-table.umd.js.map +1 -1
  87. package/bundles/material-table.umd.min.js +1 -1
  88. package/bundles/material-table.umd.min.js.map +1 -1
  89. package/bundles/material-tabs.umd.js +1390 -1208
  90. package/bundles/material-tabs.umd.js.map +1 -1
  91. package/bundles/material-tabs.umd.min.js +2 -2
  92. package/bundles/material-tabs.umd.min.js.map +1 -1
  93. package/bundles/material-tooltip.umd.js +16 -1
  94. package/bundles/material-tooltip.umd.js.map +1 -1
  95. package/bundles/material-tooltip.umd.min.js +1 -1
  96. package/bundles/material-tooltip.umd.min.js.map +1 -1
  97. package/bundles/material.umd.js +1767 -1346
  98. package/bundles/material.umd.js.map +1 -1
  99. package/bundles/material.umd.min.js +19 -19
  100. package/bundles/material.umd.min.js.map +1 -1
  101. package/button/typings/button.d.ts +1 -1
  102. package/button/typings/index.metadata.json +1 -1
  103. package/card/typings/index.metadata.json +1 -1
  104. package/chips/typings/chip.d.ts +4 -2
  105. package/chips/typings/index.metadata.json +1 -1
  106. package/core/typings/common-behaviors/common-module.d.ts +2 -2
  107. package/core/typings/datetime/date-adapter.d.ts +1 -1
  108. package/core/typings/datetime/native-date-adapter.d.ts +1 -1
  109. package/core/typings/index.metadata.json +1 -1
  110. package/core/typings/ripple/ripple-renderer.d.ts +2 -2
  111. package/core/typings/ripple/ripple.d.ts +1 -1
  112. package/datepicker/typings/datepicker-intl.d.ts +2 -0
  113. package/datepicker/typings/index.metadata.json +1 -1
  114. package/dialog/typings/dialog-config.d.ts +9 -7
  115. package/dialog/typings/dialog-content-directives.d.ts +2 -0
  116. package/dialog/typings/dialog-ref.d.ts +10 -0
  117. package/dialog/typings/index.metadata.json +1 -1
  118. package/esm2015/autocomplete.js +44 -19
  119. package/esm2015/autocomplete.js.map +1 -1
  120. package/esm2015/button.js +3 -5
  121. package/esm2015/button.js.map +1 -1
  122. package/esm2015/card.js +1 -1
  123. package/esm2015/card.js.map +1 -1
  124. package/esm2015/checkbox.js +1 -1
  125. package/esm2015/checkbox.js.map +1 -1
  126. package/esm2015/chips.js +22 -5
  127. package/esm2015/chips.js.map +1 -1
  128. package/esm2015/core.js +19 -17
  129. package/esm2015/core.js.map +1 -1
  130. package/esm2015/datepicker.js +15 -2
  131. package/esm2015/datepicker.js.map +1 -1
  132. package/esm2015/dialog.js +23 -5
  133. package/esm2015/dialog.js.map +1 -1
  134. package/esm2015/form-field.js +15 -2
  135. package/esm2015/form-field.js.map +1 -1
  136. package/esm2015/grid-list.js +1 -1
  137. package/esm2015/icon.js +93 -40
  138. package/esm2015/icon.js.map +1 -1
  139. package/esm2015/list.js +4 -1
  140. package/esm2015/list.js.map +1 -1
  141. package/esm2015/material.js +3 -3
  142. package/esm2015/menu.js +31 -10
  143. package/esm2015/menu.js.map +1 -1
  144. package/esm2015/paginator.js +1 -1
  145. package/esm2015/paginator.js.map +1 -1
  146. package/esm2015/progress-spinner.js +31 -23
  147. package/esm2015/progress-spinner.js.map +1 -1
  148. package/esm2015/radio.js +3 -0
  149. package/esm2015/radio.js.map +1 -1
  150. package/esm2015/select.js +14 -2
  151. package/esm2015/select.js.map +1 -1
  152. package/esm2015/slide-toggle.js +3 -1
  153. package/esm2015/slide-toggle.js.map +1 -1
  154. package/esm2015/slider.js +6 -2
  155. package/esm2015/slider.js.map +1 -1
  156. package/esm2015/snack-bar.js +7 -8
  157. package/esm2015/snack-bar.js.map +1 -1
  158. package/esm2015/sort.js +0 -1
  159. package/esm2015/sort.js.map +1 -1
  160. package/esm2015/table.js +9 -4
  161. package/esm2015/table.js.map +1 -1
  162. package/esm2015/tabs.js +1094 -890
  163. package/esm2015/tabs.js.map +1 -1
  164. package/esm2015/tooltip.js +15 -1
  165. package/esm2015/tooltip.js.map +1 -1
  166. package/esm5/autocomplete.es5.js +48 -19
  167. package/esm5/autocomplete.es5.js.map +1 -1
  168. package/esm5/button.es5.js +5 -6
  169. package/esm5/button.es5.js.map +1 -1
  170. package/esm5/card.es5.js +1 -1
  171. package/esm5/card.es5.js.map +1 -1
  172. package/esm5/checkbox.es5.js +1 -1
  173. package/esm5/checkbox.es5.js.map +1 -1
  174. package/esm5/chips.es5.js +25 -5
  175. package/esm5/chips.es5.js.map +1 -1
  176. package/esm5/core.es5.js +21 -19
  177. package/esm5/core.es5.js.map +1 -1
  178. package/esm5/datepicker.es5.js +22 -2
  179. package/esm5/datepicker.es5.js.map +1 -1
  180. package/esm5/dialog.es5.js +28 -5
  181. package/esm5/dialog.es5.js.map +1 -1
  182. package/esm5/form-field.es5.js +15 -2
  183. package/esm5/form-field.es5.js.map +1 -1
  184. package/esm5/grid-list.es5.js +1 -1
  185. package/esm5/icon.es5.js +101 -40
  186. package/esm5/icon.es5.js.map +1 -1
  187. package/esm5/list.es5.js +4 -1
  188. package/esm5/list.es5.js.map +1 -1
  189. package/esm5/material.es5.js +3 -3
  190. package/esm5/menu.es5.js +33 -17
  191. package/esm5/menu.es5.js.map +1 -1
  192. package/esm5/paginator.es5.js +1 -1
  193. package/esm5/paginator.es5.js.map +1 -1
  194. package/esm5/progress-spinner.es5.js +34 -23
  195. package/esm5/progress-spinner.es5.js.map +1 -1
  196. package/esm5/radio.es5.js +3 -0
  197. package/esm5/radio.es5.js.map +1 -1
  198. package/esm5/select.es5.js +14 -2
  199. package/esm5/select.es5.js.map +1 -1
  200. package/esm5/slide-toggle.es5.js +3 -1
  201. package/esm5/slide-toggle.es5.js.map +1 -1
  202. package/esm5/slider.es5.js +6 -3
  203. package/esm5/slider.es5.js.map +1 -1
  204. package/esm5/snack-bar.es5.js +7 -8
  205. package/esm5/snack-bar.es5.js.map +1 -1
  206. package/esm5/sort.es5.js +0 -1
  207. package/esm5/sort.es5.js.map +1 -1
  208. package/esm5/table.es5.js +14 -4
  209. package/esm5/table.es5.js.map +1 -1
  210. package/esm5/tabs.es5.js +1384 -1207
  211. package/esm5/tabs.es5.js.map +1 -1
  212. package/esm5/tooltip.es5.js +16 -1
  213. package/esm5/tooltip.es5.js.map +1 -1
  214. package/form-field/typings/form-field.d.ts +2 -0
  215. package/form-field/typings/index.metadata.json +1 -1
  216. package/grid-list/typings/index.d.ts +1 -1
  217. package/grid-list/typings/index.metadata.json +1 -1
  218. package/icon/typings/icon-registry.d.ts +17 -11
  219. package/icon/typings/icon.d.ts +3 -2
  220. package/icon/typings/index.metadata.json +1 -1
  221. package/list/typings/index.metadata.json +1 -1
  222. package/menu/typings/index.d.ts +2 -2
  223. package/menu/typings/index.metadata.json +1 -1
  224. package/menu/typings/menu-trigger.d.ts +2 -5
  225. package/package.json +5 -5
  226. package/prebuilt-themes/deeppurple-amber.css +1 -1
  227. package/prebuilt-themes/indigo-pink.css +1 -1
  228. package/prebuilt-themes/pink-bluegrey.css +1 -1
  229. package/prebuilt-themes/purple-green.css +1 -1
  230. package/progress-spinner/typings/index.metadata.json +1 -1
  231. package/progress-spinner/typings/progress-spinner.d.ts +3 -2
  232. package/radio/typings/index.metadata.json +1 -1
  233. package/schematics/ng-add/setup-project.js +8 -8
  234. package/schematics/ng-add/setup-project.js.map +1 -1
  235. package/schematics/ng-add/theming/theming.js +6 -6
  236. package/schematics/ng-add/theming/theming.js.map +1 -1
  237. package/schematics/ng-update/index.js +2 -2
  238. package/schematics/ng-update/index.js.map +1 -1
  239. package/select/typings/index.metadata.json +1 -1
  240. package/select/typings/select.d.ts +2 -0
  241. package/slide-toggle/typings/index.metadata.json +1 -1
  242. package/slider/typings/index.metadata.json +1 -1
  243. package/slider/typings/slider.d.ts +2 -2
  244. package/snack-bar/typings/index.metadata.json +1 -1
  245. package/sort/typings/index.metadata.json +1 -1
  246. package/table/typings/index.metadata.json +1 -1
  247. package/table/typings/table-data-source.d.ts +5 -0
  248. package/tabs/typings/index.d.ts +2 -2
  249. package/tabs/typings/index.metadata.json +1 -1
  250. package/tabs/typings/paginated-tab-header.d.ts +8 -5
  251. package/tabs/typings/public-api.d.ts +4 -4
  252. package/tabs/typings/tab-body.d.ts +11 -3
  253. package/tabs/typings/tab-group.d.ts +24 -11
  254. package/tabs/typings/tab-header.d.ts +12 -5
  255. package/tabs/typings/tab-nav-bar/tab-nav-bar.d.ts +38 -19
  256. package/tooltip/typings/index.metadata.json +1 -1
  257. package/typings/autocomplete/autocomplete-trigger.d.ts +5 -2
  258. package/typings/autocomplete/index.metadata.json +1 -1
  259. package/typings/button/button.d.ts +1 -1
  260. package/typings/button/index.metadata.json +1 -1
  261. package/typings/card/index.metadata.json +1 -1
  262. package/typings/chips/chip.d.ts +4 -2
  263. package/typings/chips/index.metadata.json +1 -1
  264. package/typings/core/common-behaviors/common-module.d.ts +2 -2
  265. package/typings/core/datetime/date-adapter.d.ts +1 -1
  266. package/typings/core/datetime/native-date-adapter.d.ts +1 -1
  267. package/typings/core/index.metadata.json +1 -1
  268. package/typings/core/ripple/ripple-renderer.d.ts +2 -2
  269. package/typings/core/ripple/ripple.d.ts +1 -1
  270. package/typings/datepicker/datepicker-intl.d.ts +2 -0
  271. package/typings/datepicker/index.metadata.json +1 -1
  272. package/typings/dialog/dialog-config.d.ts +9 -7
  273. package/typings/dialog/dialog-content-directives.d.ts +2 -0
  274. package/typings/dialog/dialog-ref.d.ts +10 -0
  275. package/typings/dialog/index.metadata.json +1 -1
  276. package/typings/esm5/autocomplete/autocomplete-trigger.d.ts +5 -2
  277. package/typings/esm5/autocomplete/index.metadata.json +1 -1
  278. package/typings/esm5/button/button.d.ts +1 -1
  279. package/typings/esm5/button/index.metadata.json +1 -1
  280. package/typings/esm5/card/index.metadata.json +1 -1
  281. package/typings/esm5/chips/chip.d.ts +4 -2
  282. package/typings/esm5/chips/index.metadata.json +1 -1
  283. package/typings/esm5/core/common-behaviors/common-module.d.ts +2 -2
  284. package/typings/esm5/core/datetime/date-adapter.d.ts +1 -1
  285. package/typings/esm5/core/datetime/native-date-adapter.d.ts +1 -1
  286. package/typings/esm5/core/index.metadata.json +1 -1
  287. package/typings/esm5/core/ripple/ripple-renderer.d.ts +2 -2
  288. package/typings/esm5/core/ripple/ripple.d.ts +1 -1
  289. package/typings/esm5/datepicker/datepicker-intl.d.ts +2 -0
  290. package/typings/esm5/datepicker/index.metadata.json +1 -1
  291. package/typings/esm5/dialog/dialog-config.d.ts +9 -7
  292. package/typings/esm5/dialog/dialog-content-directives.d.ts +2 -0
  293. package/typings/esm5/dialog/dialog-ref.d.ts +10 -0
  294. package/typings/esm5/dialog/index.metadata.json +1 -1
  295. package/typings/esm5/form-field/form-field.d.ts +2 -0
  296. package/typings/esm5/form-field/index.metadata.json +1 -1
  297. package/typings/esm5/grid-list/index.d.ts +1 -1
  298. package/typings/esm5/grid-list/index.metadata.json +1 -1
  299. package/typings/esm5/icon/icon-registry.d.ts +17 -11
  300. package/typings/esm5/icon/icon.d.ts +3 -2
  301. package/typings/esm5/icon/index.metadata.json +1 -1
  302. package/typings/esm5/list/index.metadata.json +1 -1
  303. package/typings/esm5/menu/index.d.ts +2 -2
  304. package/typings/esm5/menu/index.metadata.json +1 -1
  305. package/typings/esm5/menu/menu-trigger.d.ts +2 -5
  306. package/typings/esm5/progress-spinner/index.metadata.json +1 -1
  307. package/typings/esm5/progress-spinner/progress-spinner.d.ts +3 -2
  308. package/typings/esm5/radio/index.metadata.json +1 -1
  309. package/typings/esm5/select/index.metadata.json +1 -1
  310. package/typings/esm5/select/select.d.ts +2 -0
  311. package/typings/esm5/slide-toggle/index.metadata.json +1 -1
  312. package/typings/esm5/slider/index.metadata.json +1 -1
  313. package/typings/esm5/slider/slider.d.ts +2 -2
  314. package/typings/esm5/snack-bar/index.metadata.json +1 -1
  315. package/typings/esm5/sort/index.metadata.json +1 -1
  316. package/typings/esm5/table/index.metadata.json +1 -1
  317. package/typings/esm5/table/table-data-source.d.ts +5 -0
  318. package/typings/esm5/tabs/index.d.ts +2 -2
  319. package/typings/esm5/tabs/index.metadata.json +1 -1
  320. package/typings/esm5/tabs/paginated-tab-header.d.ts +8 -5
  321. package/typings/esm5/tabs/public-api.d.ts +4 -4
  322. package/typings/esm5/tabs/tab-body.d.ts +11 -3
  323. package/typings/esm5/tabs/tab-group.d.ts +24 -11
  324. package/typings/esm5/tabs/tab-header.d.ts +12 -5
  325. package/typings/esm5/tabs/tab-nav-bar/tab-nav-bar.d.ts +38 -19
  326. package/typings/esm5/tooltip/index.metadata.json +1 -1
  327. package/typings/form-field/form-field.d.ts +2 -0
  328. package/typings/form-field/index.metadata.json +1 -1
  329. package/typings/grid-list/index.d.ts +1 -1
  330. package/typings/grid-list/index.metadata.json +1 -1
  331. package/typings/icon/icon-registry.d.ts +17 -11
  332. package/typings/icon/icon.d.ts +3 -2
  333. package/typings/icon/index.metadata.json +1 -1
  334. package/typings/list/index.metadata.json +1 -1
  335. package/typings/menu/index.d.ts +2 -2
  336. package/typings/menu/index.metadata.json +1 -1
  337. package/typings/menu/menu-trigger.d.ts +2 -5
  338. package/typings/progress-spinner/index.metadata.json +1 -1
  339. package/typings/progress-spinner/progress-spinner.d.ts +3 -2
  340. package/typings/radio/index.metadata.json +1 -1
  341. package/typings/select/index.metadata.json +1 -1
  342. package/typings/select/select.d.ts +2 -0
  343. package/typings/slide-toggle/index.metadata.json +1 -1
  344. package/typings/slider/index.metadata.json +1 -1
  345. package/typings/slider/slider.d.ts +2 -2
  346. package/typings/snack-bar/index.metadata.json +1 -1
  347. package/typings/sort/index.metadata.json +1 -1
  348. package/typings/table/index.metadata.json +1 -1
  349. package/typings/table/table-data-source.d.ts +5 -0
  350. package/typings/tabs/index.d.ts +2 -2
  351. package/typings/tabs/index.metadata.json +1 -1
  352. package/typings/tabs/paginated-tab-header.d.ts +8 -5
  353. package/typings/tabs/public-api.d.ts +4 -4
  354. package/typings/tabs/tab-body.d.ts +11 -3
  355. package/typings/tabs/tab-group.d.ts +24 -11
  356. package/typings/tabs/tab-header.d.ts +12 -5
  357. package/typings/tabs/tab-nav-bar/tab-nav-bar.d.ts +38 -19
  358. package/typings/tooltip/index.metadata.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"form-field.js","sources":["../../../src/material/form-field/form-field-module.ts","../../../src/material/form-field/form-field.ts","../../../src/material/form-field/suffix.ts","../../../src/material/form-field/prefix.ts","../../../src/material/form-field/placeholder.ts","../../../src/material/form-field/label.ts","../../../src/material/form-field/hint.ts","../../../src/material/form-field/form-field-errors.ts","../../../src/material/form-field/form-field-control.ts","../../../src/material/form-field/form-field-animations.ts","../../../src/material/form-field/error.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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {MatError} from './error';\nimport {MatFormField} from './form-field';\nimport {MatHint} from './hint';\nimport {MatLabel} from './label';\nimport {MatPlaceholder} from './placeholder';\nimport {MatPrefix} from './prefix';\nimport {MatSuffix} from './suffix';\n\n\n@NgModule({\n declarations: [\n MatError,\n MatFormField,\n MatHint,\n MatLabel,\n MatPlaceholder,\n MatPrefix,\n MatSuffix,\n ],\n imports: [\n CommonModule,\n ObserversModule,\n ],\n exports: [\n MatError,\n MatFormField,\n MatHint,\n MatLabel,\n MatPlaceholder,\n MatPrefix,\n MatSuffix,\n ],\n})\nexport class MatFormFieldModule {}\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 {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n OnDestroy,\n} from '@angular/core';\nimport {\n CanColor, CanColorCtor,\n FloatLabelType,\n LabelOptions,\n MAT_LABEL_GLOBAL_OPTIONS,\n mixinColor,\n} from '@angular/material/core';\nimport {fromEvent, merge, Subject} from 'rxjs';\nimport {startWith, take, takeUntil} from 'rxjs/operators';\nimport {MatError} from './error';\nimport {matFormFieldAnimations} from './form-field-animations';\nimport {MatFormFieldControl} from './form-field-control';\nimport {\n getMatFormFieldDuplicatedHintError,\n getMatFormFieldMissingControlError,\n getMatFormFieldPlaceholderConflictError,\n} from './form-field-errors';\nimport {MatHint} from './hint';\nimport {MatLabel} from './label';\nimport {MatPlaceholder} from './placeholder';\nimport {MatPrefix} from './prefix';\nimport {MatSuffix} from './suffix';\nimport {Platform} from '@angular/cdk/platform';\nimport {NgControl} from '@angular/forms';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextUniqueId = 0;\nconst floatingLabelScale = 0.75;\nconst outlineGapPadding = 5;\n\n\n/**\n * Boilerplate for applying mixins to MatFormField.\n * @docs-private\n */\nclass MatFormFieldBase {\n constructor(public _elementRef: ElementRef) { }\n}\n\n/**\n * Base class to which we're applying the form field mixins.\n * @docs-private\n */\nconst _MatFormFieldMixinBase: CanColorCtor & typeof MatFormFieldBase =\n mixinColor(MatFormFieldBase, 'primary');\n\n/** Possible appearance styles for the form field. */\nexport type MatFormFieldAppearance = 'legacy' | 'standard' | 'fill' | 'outline';\n\n/**\n * Represents the default options for the form field that can be configured\n * using the `MAT_FORM_FIELD_DEFAULT_OPTIONS` injection token.\n */\nexport interface MatFormFieldDefaultOptions {\n appearance?: MatFormFieldAppearance;\n}\n\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nexport const MAT_FORM_FIELD_DEFAULT_OPTIONS =\n new InjectionToken<MatFormFieldDefaultOptions>('MAT_FORM_FIELD_DEFAULT_OPTIONS');\n\n\n/** Container for form controls that applies Material Design styling and behavior. */\n@Component({\n moduleId: module.id,\n selector: 'mat-form-field',\n exportAs: 'matFormField',\n templateUrl: 'form-field.html',\n // MatInput is a directive and can't have styles, so we need to include its styles here\n // in form-field-input.css. The MatInput styles are fairly minimal so it shouldn't be a\n // big deal for people who aren't using MatInput.\n styleUrls: [\n 'form-field.css',\n 'form-field-fill.css',\n 'form-field-input.css',\n 'form-field-legacy.css',\n 'form-field-outline.css',\n 'form-field-standard.css',\n ],\n animations: [matFormFieldAnimations.transitionMessages],\n host: {\n 'class': 'mat-form-field',\n '[class.mat-form-field-appearance-standard]': 'appearance == \"standard\"',\n '[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n '[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n '[class.mat-form-field-appearance-legacy]': 'appearance == \"legacy\"',\n '[class.mat-form-field-invalid]': '_control.errorState',\n '[class.mat-form-field-can-float]': '_canLabelFloat',\n '[class.mat-form-field-should-float]': '_shouldLabelFloat()',\n '[class.mat-form-field-has-label]': '_hasFloatingLabel()',\n '[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',\n '[class.mat-form-field-disabled]': '_control.disabled',\n '[class.mat-form-field-autofilled]': '_control.autofilled',\n '[class.mat-focused]': '_control.focused',\n '[class.mat-accent]': 'color == \"accent\"',\n '[class.mat-warn]': 'color == \"warn\"',\n '[class.ng-untouched]': '_shouldForward(\"untouched\")',\n '[class.ng-touched]': '_shouldForward(\"touched\")',\n '[class.ng-pristine]': '_shouldForward(\"pristine\")',\n '[class.ng-dirty]': '_shouldForward(\"dirty\")',\n '[class.ng-valid]': '_shouldForward(\"valid\")',\n '[class.ng-invalid]': '_shouldForward(\"invalid\")',\n '[class.ng-pending]': '_shouldForward(\"pending\")',\n '[class._mat-animation-noopable]': '!_animationsEnabled',\n },\n inputs: ['color'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class MatFormField extends _MatFormFieldMixinBase\n implements AfterContentInit, AfterContentChecked, AfterViewInit, OnDestroy, CanColor {\n private _labelOptions: LabelOptions;\n\n /**\n * Whether the outline gap needs to be calculated\n * immediately on the next change detection run.\n */\n private _outlineGapCalculationNeededImmediately = false;\n\n /** Whether the outline gap needs to be calculated next time the zone has stabilized. */\n private _outlineGapCalculationNeededOnStable = false;\n\n private _destroyed = new Subject<void>();\n\n /** The form-field appearance style. */\n @Input()\n get appearance(): MatFormFieldAppearance { return this._appearance; }\n set appearance(value: MatFormFieldAppearance) {\n const oldValue = this._appearance;\n\n this._appearance = value || (this._defaults && this._defaults.appearance) || 'legacy';\n\n if (this._appearance === 'outline' && oldValue !== value) {\n this._outlineGapCalculationNeededOnStable = true;\n }\n }\n _appearance: MatFormFieldAppearance;\n\n /** Whether the required marker should be hidden. */\n @Input()\n get hideRequiredMarker(): boolean { return this._hideRequiredMarker; }\n set hideRequiredMarker(value: boolean) {\n this._hideRequiredMarker = coerceBooleanProperty(value);\n }\n private _hideRequiredMarker: boolean;\n\n /** Override for the logic that disables the label animation in certain cases. */\n private _showAlwaysAnimate = false;\n\n /** Whether the floating label should always float or not. */\n get _shouldAlwaysFloat(): boolean {\n return this.floatLabel === 'always' && !this._showAlwaysAnimate;\n }\n\n /** Whether the label can float or not. */\n get _canLabelFloat(): boolean { return this.floatLabel !== 'never'; }\n\n /** State of the mat-hint and mat-error animations. */\n _subscriptAnimationState: string = '';\n\n /** Text for the form field hint. */\n @Input()\n get hintLabel(): string { return this._hintLabel; }\n set hintLabel(value: string) {\n this._hintLabel = value;\n this._processHints();\n }\n private _hintLabel = '';\n\n // Unique id for the hint label.\n _hintLabelId: string = `mat-hint-${nextUniqueId++}`;\n\n // Unique id for the internal form field label.\n _labelId = `mat-form-field-label-${nextUniqueId++}`;\n\n /**\n * Whether the label should always float, never float or float as the user types.\n *\n * Note: only the legacy appearance supports the `never` option. `never` was originally added as a\n * way to make the floating label emulate the behavior of a standard input placeholder. However\n * the form field now supports both floating labels and placeholders. Therefore in the non-legacy\n * appearances the `never` option has been disabled in favor of just using the placeholder.\n */\n @Input()\n get floatLabel(): FloatLabelType {\n return this.appearance !== 'legacy' && this._floatLabel === 'never' ? 'auto' : this._floatLabel;\n }\n set floatLabel(value: FloatLabelType) {\n if (value !== this._floatLabel) {\n this._floatLabel = value || this._labelOptions.float || 'auto';\n this._changeDetectorRef.markForCheck();\n }\n }\n private _floatLabel: FloatLabelType;\n\n /** Whether the Angular animations are enabled. */\n _animationsEnabled: boolean;\n\n /**\n * @deprecated\n * @breaking-change 8.0.0\n */\n @ViewChild('underline', {static: false}) underlineRef: ElementRef;\n\n @ViewChild('connectionContainer', {static: true}) _connectionContainerRef: ElementRef;\n @ViewChild('inputContainer', {static: false}) _inputContainerRef: ElementRef;\n @ViewChild('label', {static: false}) private _label: ElementRef;\n\n @ContentChild(MatFormFieldControl, {static: false}) _controlNonStatic: MatFormFieldControl<any>;\n @ContentChild(MatFormFieldControl, {static: true}) _controlStatic: MatFormFieldControl<any>;\n get _control() {\n // TODO(crisbeto): we need this hacky workaround in order to support both Ivy\n // and ViewEngine. We should clean this up once Ivy is the default renderer.\n return this._explicitFormFieldControl || this._controlNonStatic || this._controlStatic;\n }\n set _control(value) {\n this._explicitFormFieldControl = value;\n }\n private _explicitFormFieldControl: MatFormFieldControl<any>;\n\n @ContentChild(MatLabel, {static: false}) _labelChildNonStatic: MatLabel;\n @ContentChild(MatLabel, {static: true}) _labelChildStatic: MatLabel;\n get _labelChild() {\n return this._labelChildNonStatic || this._labelChildStatic;\n }\n\n @ContentChild(MatPlaceholder, {static: false}) _placeholderChild: MatPlaceholder;\n @ContentChildren(MatError) _errorChildren: QueryList<MatError>;\n @ContentChildren(MatHint) _hintChildren: QueryList<MatHint>;\n @ContentChildren(MatPrefix) _prefixChildren: QueryList<MatPrefix>;\n @ContentChildren(MatSuffix) _suffixChildren: QueryList<MatSuffix>;\n\n constructor(\n public _elementRef: ElementRef, private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_LABEL_GLOBAL_OPTIONS) labelOptions: LabelOptions,\n @Optional() private _dir: Directionality,\n @Optional() @Inject(MAT_FORM_FIELD_DEFAULT_OPTIONS) private _defaults:\n MatFormFieldDefaultOptions, private _platform: Platform, private _ngZone: NgZone,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) _animationMode: string) {\n super(_elementRef);\n\n this._labelOptions = labelOptions ? labelOptions : {};\n this.floatLabel = this._labelOptions.float || 'auto';\n this._animationsEnabled = _animationMode !== 'NoopAnimations';\n\n // Set the default through here so we invoke the setter on the first run.\n this.appearance = (_defaults && _defaults.appearance) ? _defaults.appearance : 'legacy';\n }\n\n /**\n * Gets an ElementRef for the element that a overlay attached to the form-field should be\n * positioned relative to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this._connectionContainerRef || this._elementRef;\n }\n\n ngAfterContentInit() {\n this._validateControlChild();\n\n const control = this._control;\n\n if (control.controlType) {\n this._elementRef.nativeElement.classList.add(`mat-form-field-type-${control.controlType}`);\n }\n\n // Subscribe to changes in the child control state in order to update the form field UI.\n control.stateChanges.pipe(startWith(null!)).subscribe(() => {\n this._validatePlaceholders();\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n\n // Run change detection if the value changes.\n if (control.ngControl && control.ngControl.valueChanges) {\n control.ngControl.valueChanges\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n }\n\n // Note that we have to run outside of the `NgZone` explicitly,\n // in order to avoid throwing users into an infinite loop\n // if `zone-patch-rxjs` is included.\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.asObservable().pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._outlineGapCalculationNeededOnStable) {\n this.updateOutlineGap();\n }\n });\n });\n\n // Run change detection and update the outline if the suffix or prefix changes.\n merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n this._outlineGapCalculationNeededOnStable = true;\n this._changeDetectorRef.markForCheck();\n });\n\n // Re-validate when the number of hints changes.\n this._hintChildren.changes.pipe(startWith(null)).subscribe(() => {\n this._processHints();\n this._changeDetectorRef.markForCheck();\n });\n\n // Update the aria-described by when the number of errors changes.\n this._errorChildren.changes.pipe(startWith(null)).subscribe(() => {\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n\n if (this._dir) {\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this.updateOutlineGap());\n }\n }\n\n ngAfterContentChecked() {\n this._validateControlChild();\n if (this._outlineGapCalculationNeededImmediately) {\n this.updateOutlineGap();\n }\n }\n\n ngAfterViewInit() {\n // Avoid animations on load.\n this._subscriptAnimationState = 'enter';\n this._changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Determines whether a class from the NgControl should be forwarded to the host element. */\n _shouldForward(prop: keyof NgControl): boolean {\n const ngControl = this._control ? this._control.ngControl : null;\n return ngControl && ngControl[prop];\n }\n\n _hasPlaceholder() {\n return !!(this._control && this._control.placeholder || this._placeholderChild);\n }\n\n _hasLabel() {\n return !!this._labelChild;\n }\n\n _shouldLabelFloat() {\n return this._canLabelFloat && (this._control.shouldLabelFloat || this._shouldAlwaysFloat);\n }\n\n _hideControlPlaceholder() {\n // In the legacy appearance the placeholder is promoted to a label if no label is given.\n return this.appearance === 'legacy' && !this._hasLabel() ||\n this._hasLabel() && !this._shouldLabelFloat();\n }\n\n _hasFloatingLabel() {\n // In the legacy appearance the placeholder is promoted to a label if no label is given.\n return this._hasLabel() || this.appearance === 'legacy' && this._hasPlaceholder();\n }\n\n /** Determines whether to display hints or errors. */\n _getDisplayedMessages(): 'error' | 'hint' {\n return (this._errorChildren && this._errorChildren.length > 0 &&\n this._control.errorState) ? 'error' : 'hint';\n }\n\n /** Animates the placeholder up and locks it in position. */\n _animateAndLockLabel(): void {\n if (this._hasFloatingLabel() && this._canLabelFloat) {\n // If animations are disabled, we shouldn't go in here,\n // because the `transitionend` will never fire.\n if (this._animationsEnabled) {\n this._showAlwaysAnimate = true;\n\n fromEvent(this._label.nativeElement, 'transitionend').pipe(take(1)).subscribe(() => {\n this._showAlwaysAnimate = false;\n });\n }\n\n this.floatLabel = 'always';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Ensure that there is only one placeholder (either `placeholder` attribute on the child control\n * or child element with the `mat-placeholder` directive).\n */\n private _validatePlaceholders() {\n if (this._control.placeholder && this._placeholderChild) {\n throw getMatFormFieldPlaceholderConflictError();\n }\n }\n\n /** Does any extra processing that is required when handling the hints. */\n private _processHints() {\n this._validateHints();\n this._syncDescribedByIds();\n }\n\n /**\n * Ensure that there is a maximum of one of each `<mat-hint>` alignment specified, with the\n * attribute being considered as `align=\"start\"`.\n */\n private _validateHints() {\n if (this._hintChildren) {\n let startHint: MatHint;\n let endHint: MatHint;\n this._hintChildren.forEach((hint: MatHint) => {\n if (hint.align === 'start') {\n if (startHint || this.hintLabel) {\n throw getMatFormFieldDuplicatedHintError('start');\n }\n startHint = hint;\n } else if (hint.align === 'end') {\n if (endHint) {\n throw getMatFormFieldDuplicatedHintError('end');\n }\n endHint = hint;\n }\n });\n }\n }\n\n /**\n * Sets the list of element IDs that describe the child control. This allows the control to update\n * its `aria-describedby` attribute accordingly.\n */\n private _syncDescribedByIds() {\n if (this._control) {\n let ids: string[] = [];\n\n if (this._getDisplayedMessages() === 'hint') {\n const startHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'start') : null;\n const endHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'end') : null;\n\n if (startHint) {\n ids.push(startHint.id);\n } else if (this._hintLabel) {\n ids.push(this._hintLabelId);\n }\n\n if (endHint) {\n ids.push(endHint.id);\n }\n } else if (this._errorChildren) {\n ids = this._errorChildren.map(error => error.id);\n }\n\n this._control.setDescribedByIds(ids);\n }\n }\n\n /** Throws an error if the form field's control is missing. */\n protected _validateControlChild() {\n if (!this._control) {\n throw getMatFormFieldMissingControlError();\n }\n }\n\n /**\n * Updates the width and position of the gap in the outline. Only relevant for the outline\n * appearance.\n */\n updateOutlineGap() {\n const labelEl = this._label ? this._label.nativeElement : null;\n\n if (this.appearance !== 'outline' || !labelEl || !labelEl.children.length ||\n !labelEl.textContent.trim()) {\n return;\n }\n\n if (!this._platform.isBrowser) {\n // getBoundingClientRect isn't available on the server.\n return;\n }\n // If the element is not present in the DOM, the outline gap will need to be calculated\n // the next time it is checked and in the DOM.\n if (!document.documentElement!.contains(this._elementRef.nativeElement)) {\n this._outlineGapCalculationNeededImmediately = true;\n return;\n }\n\n let startWidth = 0;\n let gapWidth = 0;\n\n const container = this._connectionContainerRef.nativeElement;\n const startEls = container.querySelectorAll('.mat-form-field-outline-start');\n const gapEls = container.querySelectorAll('.mat-form-field-outline-gap');\n\n if (this._label && this._label.nativeElement.children.length) {\n const containerRect = container.getBoundingClientRect();\n\n // If the container's width and height are zero, it means that the element is\n // invisible and we can't calculate the outline gap. Mark the element as needing\n // to be checked the next time the zone stabilizes. We can't do this immediately\n // on the next change detection, because even if the element becomes visible,\n // the `ClientRect` won't be reclaculated immediately. We reset the\n // `_outlineGapCalculationNeededImmediately` flag some we don't run the checks twice.\n if (containerRect.width === 0 && containerRect.height === 0) {\n this._outlineGapCalculationNeededOnStable = true;\n this._outlineGapCalculationNeededImmediately = false;\n return;\n }\n\n const containerStart = this._getStartEnd(containerRect);\n const labelStart = this._getStartEnd(labelEl.children[0].getBoundingClientRect());\n let labelWidth = 0;\n\n for (const child of labelEl.children) {\n labelWidth += child.offsetWidth;\n }\n startWidth = labelStart - containerStart - outlineGapPadding;\n gapWidth = labelWidth > 0 ? labelWidth * floatingLabelScale + outlineGapPadding * 2 : 0;\n }\n\n for (let i = 0; i < startEls.length; i++) {\n startEls.item(i).style.width = `${startWidth}px`;\n }\n for (let i = 0; i < gapEls.length; i++) {\n gapEls.item(i).style.width = `${gapWidth}px`;\n }\n\n this._outlineGapCalculationNeededOnStable =\n this._outlineGapCalculationNeededImmediately = false;\n }\n\n /** Gets the start end of the rect considering the current directionality. */\n private _getStartEnd(rect: ClientRect): number {\n return this._dir && this._dir.value === 'rtl' ? rect.right : rect.left;\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 {Directive} from '@angular/core';\n\n\n/** Suffix to be placed at the end of the form field. */\n@Directive({\n selector: '[matSuffix]',\n})\nexport class MatSuffix {}\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 {Directive} from '@angular/core';\n\n\n/** Prefix to be placed in front of the form field. */\n@Directive({\n selector: '[matPrefix]',\n})\nexport class MatPrefix {}\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 {Directive} from '@angular/core';\n\n\n/**\n * The placeholder text for an `MatFormField`.\n * @deprecated Use `<mat-label>` to specify the label and the `placeholder` attribute to specify the\n * placeholder.\n * @breaking-change 8.0.0\n */\n@Directive({\n selector: 'mat-placeholder'\n})\nexport class MatPlaceholder {}\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 {Directive} from '@angular/core';\n\n\n/** The floating label for a `mat-form-field`. */\n@Directive({\n selector: 'mat-label'\n})\nexport class MatLabel {}\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 {Directive, Input} from '@angular/core';\n\n\nlet nextUniqueId = 0;\n\n\n/** Hint text to be shown underneath the form field control. */\n@Directive({\n selector: 'mat-hint',\n host: {\n 'class': 'mat-hint',\n '[class.mat-right]': 'align == \"end\"',\n '[attr.id]': 'id',\n // Remove align attribute to prevent it from interfering with layout.\n '[attr.align]': 'null',\n }\n})\nexport class MatHint {\n /** Whether to align the hint label at the start or end of the line. */\n @Input() align: 'start' | 'end' = 'start';\n\n /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n @Input() id: string = `mat-hint-${nextUniqueId++}`;\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\n/** @docs-private */\nexport function getMatFormFieldPlaceholderConflictError(): Error {\n return Error('Placeholder attribute and child element were both specified.');\n}\n\n/** @docs-private */\nexport function getMatFormFieldDuplicatedHintError(align: string): Error {\n return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n\n/** @docs-private */\nexport function getMatFormFieldMissingControlError(): Error {\n return Error('mat-form-field must contain a MatFormFieldControl.');\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 {Observable} from 'rxjs';\nimport {NgControl} from '@angular/forms';\n\n\n/** An interface which allows a control to work inside of a `MatFormField`. */\nexport abstract class MatFormFieldControl<T> {\n /** The value of the control. */\n value: T | null;\n\n /**\n * Stream that emits whenever the state of the control changes such that the parent `MatFormField`\n * needs to run change detection.\n */\n readonly stateChanges: Observable<void>;\n\n /** The element ID for this control. */\n readonly id: string;\n\n /** The placeholder for this control. */\n readonly placeholder: string;\n\n /** Gets the NgControl for this control. */\n readonly ngControl: NgControl | null;\n\n /** Whether the control is focused. */\n readonly focused: boolean;\n\n /** Whether the control is empty. */\n readonly empty: boolean;\n\n /** Whether the `MatFormField` label should try to float. */\n readonly shouldLabelFloat: boolean;\n\n /** Whether the control is required. */\n readonly required: boolean;\n\n /** Whether the control is disabled. */\n readonly disabled: boolean;\n\n /** Whether the control is in an error state. */\n readonly errorState: boolean;\n\n /**\n * An optional name for the control type that can be used to distinguish `mat-form-field` elements\n * based on their control type. The form field will add a class,\n * `mat-form-field-type-{{controlType}}` to its root element.\n */\n readonly controlType?: string;\n\n /**\n * Whether the input is currently in an autofilled state. If property is not present on the\n * control it is assumed to be false.\n */\n readonly autofilled?: boolean;\n\n /** Sets the list of element IDs that currently describe this control. */\n abstract setDescribedByIds(ids: string[]): void;\n\n /** Handles a click on the control's container. */\n abstract onContainerClick(event: MouseEvent): void;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the MatFormField.\n * @docs-private\n */\nexport const matFormFieldAnimations: {\n readonly transitionMessages: AnimationTriggerMetadata\n} = {\n /** Animation that transitions the form field's error and hint messages. */\n transitionMessages: trigger('transitionMessages', [\n // TODO(mmalerba): Use angular animations for label animation as well.\n state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),\n transition('void => enter', [\n style({ opacity: 0, transform: 'translateY(-100%)' }),\n animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\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\nimport {Directive, Input} from '@angular/core';\n\n\nlet nextUniqueId = 0;\n\n\n/** Single error message to be shown underneath the form field. */\n@Directive({\n selector: 'mat-error',\n host: {\n 'class': 'mat-error',\n 'role': 'alert',\n '[attr.id]': 'id',\n }\n})\nexport class MatError {\n @Input() id: string = `mat-error-${nextUniqueId++}`;\n}\n"],"names":["nextUniqueId"],"mappings":"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"}
1
+ {"version":3,"file":"form-field.js","sources":["../../../src/material/form-field/form-field-module.ts","../../../src/material/form-field/form-field.ts","../../../src/material/form-field/suffix.ts","../../../src/material/form-field/prefix.ts","../../../src/material/form-field/placeholder.ts","../../../src/material/form-field/label.ts","../../../src/material/form-field/hint.ts","../../../src/material/form-field/form-field-errors.ts","../../../src/material/form-field/form-field-control.ts","../../../src/material/form-field/form-field-animations.ts","../../../src/material/form-field/error.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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {MatError} from './error';\nimport {MatFormField} from './form-field';\nimport {MatHint} from './hint';\nimport {MatLabel} from './label';\nimport {MatPlaceholder} from './placeholder';\nimport {MatPrefix} from './prefix';\nimport {MatSuffix} from './suffix';\n\n\n@NgModule({\n declarations: [\n MatError,\n MatFormField,\n MatHint,\n MatLabel,\n MatPlaceholder,\n MatPrefix,\n MatSuffix,\n ],\n imports: [\n CommonModule,\n ObserversModule,\n ],\n exports: [\n MatError,\n MatFormField,\n MatHint,\n MatLabel,\n MatPlaceholder,\n MatPrefix,\n MatSuffix,\n ],\n})\nexport class MatFormFieldModule {}\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 {Direction, Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n OnDestroy,\n} from '@angular/core';\nimport {\n CanColor, CanColorCtor,\n FloatLabelType,\n LabelOptions,\n MAT_LABEL_GLOBAL_OPTIONS,\n mixinColor,\n} from '@angular/material/core';\nimport {fromEvent, merge, Subject} from 'rxjs';\nimport {startWith, take, takeUntil} from 'rxjs/operators';\nimport {MatError} from './error';\nimport {matFormFieldAnimations} from './form-field-animations';\nimport {MatFormFieldControl} from './form-field-control';\nimport {\n getMatFormFieldDuplicatedHintError,\n getMatFormFieldMissingControlError,\n getMatFormFieldPlaceholderConflictError,\n} from './form-field-errors';\nimport {MatHint} from './hint';\nimport {MatLabel} from './label';\nimport {MatPlaceholder} from './placeholder';\nimport {MatPrefix} from './prefix';\nimport {MatSuffix} from './suffix';\nimport {Platform} from '@angular/cdk/platform';\nimport {NgControl} from '@angular/forms';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextUniqueId = 0;\nconst floatingLabelScale = 0.75;\nconst outlineGapPadding = 5;\n\n\n/**\n * Boilerplate for applying mixins to MatFormField.\n * @docs-private\n */\nclass MatFormFieldBase {\n constructor(public _elementRef: ElementRef) { }\n}\n\n/**\n * Base class to which we're applying the form field mixins.\n * @docs-private\n */\nconst _MatFormFieldMixinBase: CanColorCtor & typeof MatFormFieldBase =\n mixinColor(MatFormFieldBase, 'primary');\n\n/** Possible appearance styles for the form field. */\nexport type MatFormFieldAppearance = 'legacy' | 'standard' | 'fill' | 'outline';\n\n/**\n * Represents the default options for the form field that can be configured\n * using the `MAT_FORM_FIELD_DEFAULT_OPTIONS` injection token.\n */\nexport interface MatFormFieldDefaultOptions {\n appearance?: MatFormFieldAppearance;\n hideRequiredMarker?: boolean;\n}\n\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nexport const MAT_FORM_FIELD_DEFAULT_OPTIONS =\n new InjectionToken<MatFormFieldDefaultOptions>('MAT_FORM_FIELD_DEFAULT_OPTIONS');\n\n\n/** Container for form controls that applies Material Design styling and behavior. */\n@Component({\n moduleId: module.id,\n selector: 'mat-form-field',\n exportAs: 'matFormField',\n templateUrl: 'form-field.html',\n // MatInput is a directive and can't have styles, so we need to include its styles here\n // in form-field-input.css. The MatInput styles are fairly minimal so it shouldn't be a\n // big deal for people who aren't using MatInput.\n styleUrls: [\n 'form-field.css',\n 'form-field-fill.css',\n 'form-field-input.css',\n 'form-field-legacy.css',\n 'form-field-outline.css',\n 'form-field-standard.css',\n ],\n animations: [matFormFieldAnimations.transitionMessages],\n host: {\n 'class': 'mat-form-field',\n '[class.mat-form-field-appearance-standard]': 'appearance == \"standard\"',\n '[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n '[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n '[class.mat-form-field-appearance-legacy]': 'appearance == \"legacy\"',\n '[class.mat-form-field-invalid]': '_control.errorState',\n '[class.mat-form-field-can-float]': '_canLabelFloat',\n '[class.mat-form-field-should-float]': '_shouldLabelFloat()',\n '[class.mat-form-field-has-label]': '_hasFloatingLabel()',\n '[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',\n '[class.mat-form-field-disabled]': '_control.disabled',\n '[class.mat-form-field-autofilled]': '_control.autofilled',\n '[class.mat-focused]': '_control.focused',\n '[class.mat-accent]': 'color == \"accent\"',\n '[class.mat-warn]': 'color == \"warn\"',\n '[class.ng-untouched]': '_shouldForward(\"untouched\")',\n '[class.ng-touched]': '_shouldForward(\"touched\")',\n '[class.ng-pristine]': '_shouldForward(\"pristine\")',\n '[class.ng-dirty]': '_shouldForward(\"dirty\")',\n '[class.ng-valid]': '_shouldForward(\"valid\")',\n '[class.ng-invalid]': '_shouldForward(\"invalid\")',\n '[class.ng-pending]': '_shouldForward(\"pending\")',\n '[class._mat-animation-noopable]': '!_animationsEnabled',\n },\n inputs: ['color'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class MatFormField extends _MatFormFieldMixinBase\n implements AfterContentInit, AfterContentChecked, AfterViewInit, OnDestroy, CanColor {\n private _labelOptions: LabelOptions;\n\n /**\n * Whether the outline gap needs to be calculated\n * immediately on the next change detection run.\n */\n private _outlineGapCalculationNeededImmediately = false;\n\n /** Whether the outline gap needs to be calculated next time the zone has stabilized. */\n private _outlineGapCalculationNeededOnStable = false;\n\n private _destroyed = new Subject<void>();\n\n /** The form-field appearance style. */\n @Input()\n get appearance(): MatFormFieldAppearance { return this._appearance; }\n set appearance(value: MatFormFieldAppearance) {\n const oldValue = this._appearance;\n\n this._appearance = value || (this._defaults && this._defaults.appearance) || 'legacy';\n\n if (this._appearance === 'outline' && oldValue !== value) {\n this._outlineGapCalculationNeededOnStable = true;\n }\n }\n _appearance: MatFormFieldAppearance;\n\n /** Whether the required marker should be hidden. */\n @Input()\n get hideRequiredMarker(): boolean { return this._hideRequiredMarker; }\n set hideRequiredMarker(value: boolean) {\n this._hideRequiredMarker = coerceBooleanProperty(value);\n }\n private _hideRequiredMarker: boolean;\n\n /** Override for the logic that disables the label animation in certain cases. */\n private _showAlwaysAnimate = false;\n\n /** Whether the floating label should always float or not. */\n get _shouldAlwaysFloat(): boolean {\n return this.floatLabel === 'always' && !this._showAlwaysAnimate;\n }\n\n /** Whether the label can float or not. */\n get _canLabelFloat(): boolean { return this.floatLabel !== 'never'; }\n\n /** State of the mat-hint and mat-error animations. */\n _subscriptAnimationState: string = '';\n\n /** Text for the form field hint. */\n @Input()\n get hintLabel(): string { return this._hintLabel; }\n set hintLabel(value: string) {\n this._hintLabel = value;\n this._processHints();\n }\n private _hintLabel = '';\n\n // Unique id for the hint label.\n _hintLabelId: string = `mat-hint-${nextUniqueId++}`;\n\n // Unique id for the internal form field label.\n _labelId = `mat-form-field-label-${nextUniqueId++}`;\n\n /**\n * Whether the label should always float, never float or float as the user types.\n *\n * Note: only the legacy appearance supports the `never` option. `never` was originally added as a\n * way to make the floating label emulate the behavior of a standard input placeholder. However\n * the form field now supports both floating labels and placeholders. Therefore in the non-legacy\n * appearances the `never` option has been disabled in favor of just using the placeholder.\n */\n @Input()\n get floatLabel(): FloatLabelType {\n return this.appearance !== 'legacy' && this._floatLabel === 'never' ? 'auto' : this._floatLabel;\n }\n set floatLabel(value: FloatLabelType) {\n if (value !== this._floatLabel) {\n this._floatLabel = value || this._labelOptions.float || 'auto';\n this._changeDetectorRef.markForCheck();\n }\n }\n private _floatLabel: FloatLabelType;\n\n /** Whether the Angular animations are enabled. */\n _animationsEnabled: boolean;\n\n /* Holds the previous direction emitted by directionality service change emitter.\n This is used in updateOutlineGap() method to update the width and position of the gap in the\n outline. Only relevant for the outline appearance. The direction is getting updated in the\n UI after directionality service change emission. So the outlines gaps are getting\n updated in updateOutlineGap() method before connectionContainer child direction change\n in UI. We may get wrong calculations. So we are storing the previous direction to get the\n correct outline calculations*/\n private _previousDirection: Direction = 'ltr';\n\n /**\n * @deprecated\n * @breaking-change 8.0.0\n */\n @ViewChild('underline', {static: false}) underlineRef: ElementRef;\n\n @ViewChild('connectionContainer', {static: true}) _connectionContainerRef: ElementRef;\n @ViewChild('inputContainer', {static: false}) _inputContainerRef: ElementRef;\n @ViewChild('label', {static: false}) private _label: ElementRef;\n\n @ContentChild(MatFormFieldControl, {static: false}) _controlNonStatic: MatFormFieldControl<any>;\n @ContentChild(MatFormFieldControl, {static: true}) _controlStatic: MatFormFieldControl<any>;\n get _control() {\n // TODO(crisbeto): we need this hacky workaround in order to support both Ivy\n // and ViewEngine. We should clean this up once Ivy is the default renderer.\n return this._explicitFormFieldControl || this._controlNonStatic || this._controlStatic;\n }\n set _control(value) {\n this._explicitFormFieldControl = value;\n }\n private _explicitFormFieldControl: MatFormFieldControl<any>;\n\n @ContentChild(MatLabel, {static: false}) _labelChildNonStatic: MatLabel;\n @ContentChild(MatLabel, {static: true}) _labelChildStatic: MatLabel;\n get _labelChild() {\n return this._labelChildNonStatic || this._labelChildStatic;\n }\n\n @ContentChild(MatPlaceholder, {static: false}) _placeholderChild: MatPlaceholder;\n @ContentChildren(MatError) _errorChildren: QueryList<MatError>;\n @ContentChildren(MatHint) _hintChildren: QueryList<MatHint>;\n @ContentChildren(MatPrefix) _prefixChildren: QueryList<MatPrefix>;\n @ContentChildren(MatSuffix) _suffixChildren: QueryList<MatSuffix>;\n\n constructor(\n public _elementRef: ElementRef, private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_LABEL_GLOBAL_OPTIONS) labelOptions: LabelOptions,\n @Optional() private _dir: Directionality,\n @Optional() @Inject(MAT_FORM_FIELD_DEFAULT_OPTIONS) private _defaults:\n MatFormFieldDefaultOptions, private _platform: Platform, private _ngZone: NgZone,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) _animationMode: string) {\n super(_elementRef);\n\n this._labelOptions = labelOptions ? labelOptions : {};\n this.floatLabel = this._labelOptions.float || 'auto';\n this._animationsEnabled = _animationMode !== 'NoopAnimations';\n\n // Set the default through here so we invoke the setter on the first run.\n this.appearance = (_defaults && _defaults.appearance) ? _defaults.appearance : 'legacy';\n this._hideRequiredMarker = (_defaults && _defaults.hideRequiredMarker != null) ?\n _defaults.hideRequiredMarker : false;\n }\n\n /**\n * Gets an ElementRef for the element that a overlay attached to the form-field should be\n * positioned relative to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this._connectionContainerRef || this._elementRef;\n }\n\n ngAfterContentInit() {\n this._validateControlChild();\n\n const control = this._control;\n\n if (control.controlType) {\n this._elementRef.nativeElement.classList.add(`mat-form-field-type-${control.controlType}`);\n }\n\n // Subscribe to changes in the child control state in order to update the form field UI.\n control.stateChanges.pipe(startWith(null!)).subscribe(() => {\n this._validatePlaceholders();\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n\n // Run change detection if the value changes.\n if (control.ngControl && control.ngControl.valueChanges) {\n control.ngControl.valueChanges\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n }\n\n // Note that we have to run outside of the `NgZone` explicitly,\n // in order to avoid throwing users into an infinite loop\n // if `zone-patch-rxjs` is included.\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.asObservable().pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._outlineGapCalculationNeededOnStable) {\n this.updateOutlineGap();\n }\n });\n });\n\n // Run change detection and update the outline if the suffix or prefix changes.\n merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n this._outlineGapCalculationNeededOnStable = true;\n this._changeDetectorRef.markForCheck();\n });\n\n // Re-validate when the number of hints changes.\n this._hintChildren.changes.pipe(startWith(null)).subscribe(() => {\n this._processHints();\n this._changeDetectorRef.markForCheck();\n });\n\n // Update the aria-described by when the number of errors changes.\n this._errorChildren.changes.pipe(startWith(null)).subscribe(() => {\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n\n if (this._dir) {\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this.updateOutlineGap();\n this._previousDirection = this._dir.value;\n });\n }\n }\n\n ngAfterContentChecked() {\n this._validateControlChild();\n if (this._outlineGapCalculationNeededImmediately) {\n this.updateOutlineGap();\n }\n }\n\n ngAfterViewInit() {\n // Avoid animations on load.\n this._subscriptAnimationState = 'enter';\n this._changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Determines whether a class from the NgControl should be forwarded to the host element. */\n _shouldForward(prop: keyof NgControl): boolean {\n const ngControl = this._control ? this._control.ngControl : null;\n return ngControl && ngControl[prop];\n }\n\n _hasPlaceholder() {\n return !!(this._control && this._control.placeholder || this._placeholderChild);\n }\n\n _hasLabel() {\n return !!this._labelChild;\n }\n\n _shouldLabelFloat() {\n return this._canLabelFloat && (this._control.shouldLabelFloat || this._shouldAlwaysFloat);\n }\n\n _hideControlPlaceholder() {\n // In the legacy appearance the placeholder is promoted to a label if no label is given.\n return this.appearance === 'legacy' && !this._hasLabel() ||\n this._hasLabel() && !this._shouldLabelFloat();\n }\n\n _hasFloatingLabel() {\n // In the legacy appearance the placeholder is promoted to a label if no label is given.\n return this._hasLabel() || this.appearance === 'legacy' && this._hasPlaceholder();\n }\n\n /** Determines whether to display hints or errors. */\n _getDisplayedMessages(): 'error' | 'hint' {\n return (this._errorChildren && this._errorChildren.length > 0 &&\n this._control.errorState) ? 'error' : 'hint';\n }\n\n /** Animates the placeholder up and locks it in position. */\n _animateAndLockLabel(): void {\n if (this._hasFloatingLabel() && this._canLabelFloat) {\n // If animations are disabled, we shouldn't go in here,\n // because the `transitionend` will never fire.\n if (this._animationsEnabled) {\n this._showAlwaysAnimate = true;\n\n fromEvent(this._label.nativeElement, 'transitionend').pipe(take(1)).subscribe(() => {\n this._showAlwaysAnimate = false;\n });\n }\n\n this.floatLabel = 'always';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Ensure that there is only one placeholder (either `placeholder` attribute on the child control\n * or child element with the `mat-placeholder` directive).\n */\n private _validatePlaceholders() {\n if (this._control.placeholder && this._placeholderChild) {\n throw getMatFormFieldPlaceholderConflictError();\n }\n }\n\n /** Does any extra processing that is required when handling the hints. */\n private _processHints() {\n this._validateHints();\n this._syncDescribedByIds();\n }\n\n /**\n * Ensure that there is a maximum of one of each `<mat-hint>` alignment specified, with the\n * attribute being considered as `align=\"start\"`.\n */\n private _validateHints() {\n if (this._hintChildren) {\n let startHint: MatHint;\n let endHint: MatHint;\n this._hintChildren.forEach((hint: MatHint) => {\n if (hint.align === 'start') {\n if (startHint || this.hintLabel) {\n throw getMatFormFieldDuplicatedHintError('start');\n }\n startHint = hint;\n } else if (hint.align === 'end') {\n if (endHint) {\n throw getMatFormFieldDuplicatedHintError('end');\n }\n endHint = hint;\n }\n });\n }\n }\n\n /**\n * Sets the list of element IDs that describe the child control. This allows the control to update\n * its `aria-describedby` attribute accordingly.\n */\n private _syncDescribedByIds() {\n if (this._control) {\n let ids: string[] = [];\n\n if (this._getDisplayedMessages() === 'hint') {\n const startHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'start') : null;\n const endHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'end') : null;\n\n if (startHint) {\n ids.push(startHint.id);\n } else if (this._hintLabel) {\n ids.push(this._hintLabelId);\n }\n\n if (endHint) {\n ids.push(endHint.id);\n }\n } else if (this._errorChildren) {\n ids = this._errorChildren.map(error => error.id);\n }\n\n this._control.setDescribedByIds(ids);\n }\n }\n\n /** Throws an error if the form field's control is missing. */\n protected _validateControlChild() {\n if (!this._control) {\n throw getMatFormFieldMissingControlError();\n }\n }\n\n /**\n * Updates the width and position of the gap in the outline. Only relevant for the outline\n * appearance.\n */\n updateOutlineGap() {\n const labelEl = this._label ? this._label.nativeElement : null;\n\n if (this.appearance !== 'outline' || !labelEl || !labelEl.children.length ||\n !labelEl.textContent.trim()) {\n return;\n }\n\n if (!this._platform.isBrowser) {\n // getBoundingClientRect isn't available on the server.\n return;\n }\n // If the element is not present in the DOM, the outline gap will need to be calculated\n // the next time it is checked and in the DOM.\n if (!document.documentElement!.contains(this._elementRef.nativeElement)) {\n this._outlineGapCalculationNeededImmediately = true;\n return;\n }\n\n let startWidth = 0;\n let gapWidth = 0;\n\n const container = this._connectionContainerRef.nativeElement;\n const startEls = container.querySelectorAll('.mat-form-field-outline-start');\n const gapEls = container.querySelectorAll('.mat-form-field-outline-gap');\n\n if (this._label && this._label.nativeElement.children.length) {\n const containerRect = container.getBoundingClientRect();\n\n // If the container's width and height are zero, it means that the element is\n // invisible and we can't calculate the outline gap. Mark the element as needing\n // to be checked the next time the zone stabilizes. We can't do this immediately\n // on the next change detection, because even if the element becomes visible,\n // the `ClientRect` won't be reclaculated immediately. We reset the\n // `_outlineGapCalculationNeededImmediately` flag some we don't run the checks twice.\n if (containerRect.width === 0 && containerRect.height === 0) {\n this._outlineGapCalculationNeededOnStable = true;\n this._outlineGapCalculationNeededImmediately = false;\n return;\n }\n\n const containerStart = this._getStartEnd(containerRect);\n const labelStart = this._getStartEnd(labelEl.children[0].getBoundingClientRect());\n let labelWidth = 0;\n\n for (const child of labelEl.children) {\n labelWidth += child.offsetWidth;\n }\n startWidth = labelStart - containerStart - outlineGapPadding;\n gapWidth = labelWidth > 0 ? labelWidth * floatingLabelScale + outlineGapPadding * 2 : 0;\n }\n\n for (let i = 0; i < startEls.length; i++) {\n startEls.item(i).style.width = `${startWidth}px`;\n }\n for (let i = 0; i < gapEls.length; i++) {\n gapEls.item(i).style.width = `${gapWidth}px`;\n }\n\n this._outlineGapCalculationNeededOnStable =\n this._outlineGapCalculationNeededImmediately = false;\n }\n\n /** Gets the start end of the rect considering the current directionality. */\n private _getStartEnd(rect: ClientRect): number {\n return this._previousDirection === 'rtl' ? rect.right : rect.left;\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 {Directive} from '@angular/core';\n\n\n/** Suffix to be placed at the end of the form field. */\n@Directive({\n selector: '[matSuffix]',\n})\nexport class MatSuffix {}\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 {Directive} from '@angular/core';\n\n\n/** Prefix to be placed in front of the form field. */\n@Directive({\n selector: '[matPrefix]',\n})\nexport class MatPrefix {}\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 {Directive} from '@angular/core';\n\n\n/**\n * The placeholder text for an `MatFormField`.\n * @deprecated Use `<mat-label>` to specify the label and the `placeholder` attribute to specify the\n * placeholder.\n * @breaking-change 8.0.0\n */\n@Directive({\n selector: 'mat-placeholder'\n})\nexport class MatPlaceholder {}\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 {Directive} from '@angular/core';\n\n\n/** The floating label for a `mat-form-field`. */\n@Directive({\n selector: 'mat-label'\n})\nexport class MatLabel {}\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 {Directive, Input} from '@angular/core';\n\n\nlet nextUniqueId = 0;\n\n\n/** Hint text to be shown underneath the form field control. */\n@Directive({\n selector: 'mat-hint',\n host: {\n 'class': 'mat-hint',\n '[class.mat-right]': 'align == \"end\"',\n '[attr.id]': 'id',\n // Remove align attribute to prevent it from interfering with layout.\n '[attr.align]': 'null',\n }\n})\nexport class MatHint {\n /** Whether to align the hint label at the start or end of the line. */\n @Input() align: 'start' | 'end' = 'start';\n\n /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n @Input() id: string = `mat-hint-${nextUniqueId++}`;\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\n/** @docs-private */\nexport function getMatFormFieldPlaceholderConflictError(): Error {\n return Error('Placeholder attribute and child element were both specified.');\n}\n\n/** @docs-private */\nexport function getMatFormFieldDuplicatedHintError(align: string): Error {\n return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n\n/** @docs-private */\nexport function getMatFormFieldMissingControlError(): Error {\n return Error('mat-form-field must contain a MatFormFieldControl.');\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 {Observable} from 'rxjs';\nimport {NgControl} from '@angular/forms';\n\n\n/** An interface which allows a control to work inside of a `MatFormField`. */\nexport abstract class MatFormFieldControl<T> {\n /** The value of the control. */\n value: T | null;\n\n /**\n * Stream that emits whenever the state of the control changes such that the parent `MatFormField`\n * needs to run change detection.\n */\n readonly stateChanges: Observable<void>;\n\n /** The element ID for this control. */\n readonly id: string;\n\n /** The placeholder for this control. */\n readonly placeholder: string;\n\n /** Gets the NgControl for this control. */\n readonly ngControl: NgControl | null;\n\n /** Whether the control is focused. */\n readonly focused: boolean;\n\n /** Whether the control is empty. */\n readonly empty: boolean;\n\n /** Whether the `MatFormField` label should try to float. */\n readonly shouldLabelFloat: boolean;\n\n /** Whether the control is required. */\n readonly required: boolean;\n\n /** Whether the control is disabled. */\n readonly disabled: boolean;\n\n /** Whether the control is in an error state. */\n readonly errorState: boolean;\n\n /**\n * An optional name for the control type that can be used to distinguish `mat-form-field` elements\n * based on their control type. The form field will add a class,\n * `mat-form-field-type-{{controlType}}` to its root element.\n */\n readonly controlType?: string;\n\n /**\n * Whether the input is currently in an autofilled state. If property is not present on the\n * control it is assumed to be false.\n */\n readonly autofilled?: boolean;\n\n /** Sets the list of element IDs that currently describe this control. */\n abstract setDescribedByIds(ids: string[]): void;\n\n /** Handles a click on the control's container. */\n abstract onContainerClick(event: MouseEvent): void;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the MatFormField.\n * @docs-private\n */\nexport const matFormFieldAnimations: {\n readonly transitionMessages: AnimationTriggerMetadata\n} = {\n /** Animation that transitions the form field's error and hint messages. */\n transitionMessages: trigger('transitionMessages', [\n // TODO(mmalerba): Use angular animations for label animation as well.\n state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),\n transition('void => enter', [\n style({ opacity: 0, transform: 'translateY(-100%)' }),\n animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\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\nimport {Directive, Input} from '@angular/core';\n\n\nlet nextUniqueId = 0;\n\n\n/** Single error message to be shown underneath the form field. */\n@Directive({\n selector: 'mat-error',\n host: {\n 'class': 'mat-error',\n 'role': 'alert',\n '[attr.id]': 'id',\n }\n})\nexport class MatError {\n @Input() id: string = `mat-error-${nextUniqueId++}`;\n}\n"],"names":["nextUniqueId"],"mappings":"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"}
@@ -890,5 +890,5 @@ MatGridListModule.decorators = [
890
890
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
891
891
  */
892
892
 
893
- export { MatGridListModule, MatGridList, MatGridTile, MatGridTileText, MatGridAvatarCssMatStyler, MatGridTileHeaderCssMatStyler, MatGridTileFooterCssMatStyler, MAT_GRID_LIST as ɵa6 };
893
+ export { MatGridListModule, MatGridList, MatGridTile, MatGridTileText, MatGridAvatarCssMatStyler, MatGridTileHeaderCssMatStyler, MatGridTileFooterCssMatStyler, MAT_GRID_LIST as ɵa11 };
894
894
  //# sourceMappingURL=grid-list.js.map
package/esm2015/icon.js CHANGED
@@ -7,12 +7,12 @@
7
7
  */
8
8
  import { DOCUMENT } from '@angular/common';
9
9
  import { HttpClient } from '@angular/common/http';
10
- import { Inject, Injectable, Optional, SecurityContext, SkipSelf, NgModule, Attribute, ChangeDetectionStrategy, Component, ElementRef, Input, ViewEncapsulation, InjectionToken, inject, ɵɵdefineInjectable, ɵɵinject } from '@angular/core';
10
+ import { ErrorHandler, Inject, Injectable, Optional, SecurityContext, SkipSelf, NgModule, Attribute, ChangeDetectionStrategy, Component, ElementRef, inject, InjectionToken, Input, ViewEncapsulation, ɵɵdefineInjectable, ɵɵinject } from '@angular/core';
11
11
  import { DomSanitizer } from '@angular/platform-browser';
12
12
  import { forkJoin, of, throwError } from 'rxjs';
13
13
  import { catchError, finalize, map, share, tap, take } from 'rxjs/operators';
14
- import { mixinColor, MatCommonModule } from '@angular/material/core';
15
14
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
15
+ import { mixinColor, MatCommonModule } from '@angular/material/core';
16
16
 
17
17
  /**
18
18
  * @fileoverview added by tsickle
@@ -66,8 +66,10 @@ function getMatIconFailedToSanitizeLiteralError(literal) {
66
66
  class SvgIconConfig {
67
67
  /**
68
68
  * @param {?} data
69
+ * @param {?=} options
69
70
  */
70
- constructor(data) {
71
+ constructor(data, options) {
72
+ this.options = options;
71
73
  // Note that we can't use `instanceof SVGElement` here,
72
74
  // because it'll break during server-side rendering.
73
75
  if (!!((/** @type {?} */ (data))).nodeName) {
@@ -90,10 +92,12 @@ class MatIconRegistry {
90
92
  * @param {?} _httpClient
91
93
  * @param {?} _sanitizer
92
94
  * @param {?} document
95
+ * @param {?=} _errorHandler
93
96
  */
94
- constructor(_httpClient, _sanitizer, document) {
97
+ constructor(_httpClient, _sanitizer, document, _errorHandler) {
95
98
  this._httpClient = _httpClient;
96
99
  this._sanitizer = _sanitizer;
100
+ this._errorHandler = _errorHandler;
97
101
  /**
98
102
  * URLs and cached SVG elements for individual icons. Keys are of the format "[namespace]:[icon]".
99
103
  */
@@ -129,10 +133,11 @@ class MatIconRegistry {
129
133
  * @this {THIS}
130
134
  * @param {?} iconName Name under which the icon should be registered.
131
135
  * @param {?} url
136
+ * @param {?=} options
132
137
  * @return {THIS}
133
138
  */
134
- addSvgIcon(iconName, url) {
135
- return (/** @type {?} */ (this)).addSvgIconInNamespace('', iconName, url);
139
+ addSvgIcon(iconName, url, options) {
140
+ return (/** @type {?} */ (this)).addSvgIconInNamespace('', iconName, url, options);
136
141
  }
137
142
  /**
138
143
  * Registers an icon using an HTML string in the default namespace.
@@ -140,10 +145,11 @@ class MatIconRegistry {
140
145
  * @this {THIS}
141
146
  * @param {?} iconName Name under which the icon should be registered.
142
147
  * @param {?} literal SVG source of the icon.
148
+ * @param {?=} options
143
149
  * @return {THIS}
144
150
  */
145
- addSvgIconLiteral(iconName, literal) {
146
- return (/** @type {?} */ (this)).addSvgIconLiteralInNamespace('', iconName, literal);
151
+ addSvgIconLiteral(iconName, literal, options) {
152
+ return (/** @type {?} */ (this)).addSvgIconLiteralInNamespace('', iconName, literal, options);
147
153
  }
148
154
  /**
149
155
  * Registers an icon by URL in the specified namespace.
@@ -152,10 +158,11 @@ class MatIconRegistry {
152
158
  * @param {?} namespace Namespace in which the icon should be registered.
153
159
  * @param {?} iconName Name under which the icon should be registered.
154
160
  * @param {?} url
161
+ * @param {?=} options
155
162
  * @return {THIS}
156
163
  */
157
- addSvgIconInNamespace(namespace, iconName, url) {
158
- return (/** @type {?} */ (this))._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url));
164
+ addSvgIconInNamespace(namespace, iconName, url, options) {
165
+ return (/** @type {?} */ (this))._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url, options));
159
166
  }
160
167
  /**
161
168
  * Registers an icon using an HTML string in the specified namespace.
@@ -164,37 +171,40 @@ class MatIconRegistry {
164
171
  * @param {?} namespace Namespace in which the icon should be registered.
165
172
  * @param {?} iconName Name under which the icon should be registered.
166
173
  * @param {?} literal SVG source of the icon.
174
+ * @param {?=} options
167
175
  * @return {THIS}
168
176
  */
169
- addSvgIconLiteralInNamespace(namespace, iconName, literal) {
177
+ addSvgIconLiteralInNamespace(namespace, iconName, literal, options) {
170
178
  /** @type {?} */
171
179
  const sanitizedLiteral = (/** @type {?} */ (this))._sanitizer.sanitize(SecurityContext.HTML, literal);
172
180
  if (!sanitizedLiteral) {
173
181
  throw getMatIconFailedToSanitizeLiteralError(literal);
174
182
  }
175
183
  /** @type {?} */
176
- const svgElement = (/** @type {?} */ (this))._createSvgElementForSingleIcon(sanitizedLiteral);
177
- return (/** @type {?} */ (this))._addSvgIconConfig(namespace, iconName, new SvgIconConfig(svgElement));
184
+ const svgElement = (/** @type {?} */ (this))._createSvgElementForSingleIcon(sanitizedLiteral, options);
185
+ return (/** @type {?} */ (this))._addSvgIconConfig(namespace, iconName, new SvgIconConfig(svgElement, options));
178
186
  }
179
187
  /**
180
188
  * Registers an icon set by URL in the default namespace.
181
189
  * @template THIS
182
190
  * @this {THIS}
183
191
  * @param {?} url
192
+ * @param {?=} options
184
193
  * @return {THIS}
185
194
  */
186
- addSvgIconSet(url) {
187
- return (/** @type {?} */ (this)).addSvgIconSetInNamespace('', url);
195
+ addSvgIconSet(url, options) {
196
+ return (/** @type {?} */ (this)).addSvgIconSetInNamespace('', url, options);
188
197
  }
189
198
  /**
190
199
  * Registers an icon set using an HTML string in the default namespace.
191
200
  * @template THIS
192
201
  * @this {THIS}
193
202
  * @param {?} literal SVG source of the icon set.
203
+ * @param {?=} options
194
204
  * @return {THIS}
195
205
  */
196
- addSvgIconSetLiteral(literal) {
197
- return (/** @type {?} */ (this)).addSvgIconSetLiteralInNamespace('', literal);
206
+ addSvgIconSetLiteral(literal, options) {
207
+ return (/** @type {?} */ (this)).addSvgIconSetLiteralInNamespace('', literal, options);
198
208
  }
199
209
  /**
200
210
  * Registers an icon set by URL in the specified namespace.
@@ -202,10 +212,11 @@ class MatIconRegistry {
202
212
  * @this {THIS}
203
213
  * @param {?} namespace Namespace in which to register the icon set.
204
214
  * @param {?} url
215
+ * @param {?=} options
205
216
  * @return {THIS}
206
217
  */
207
- addSvgIconSetInNamespace(namespace, url) {
208
- return (/** @type {?} */ (this))._addSvgIconSetConfig(namespace, new SvgIconConfig(url));
218
+ addSvgIconSetInNamespace(namespace, url, options) {
219
+ return (/** @type {?} */ (this))._addSvgIconSetConfig(namespace, new SvgIconConfig(url, options));
209
220
  }
210
221
  /**
211
222
  * Registers an icon set using an HTML string in the specified namespace.
@@ -213,9 +224,10 @@ class MatIconRegistry {
213
224
  * @this {THIS}
214
225
  * @param {?} namespace Namespace in which to register the icon set.
215
226
  * @param {?} literal SVG source of the icon set.
227
+ * @param {?=} options
216
228
  * @return {THIS}
217
229
  */
218
- addSvgIconSetLiteralInNamespace(namespace, literal) {
230
+ addSvgIconSetLiteralInNamespace(namespace, literal, options) {
219
231
  /** @type {?} */
220
232
  const sanitizedLiteral = (/** @type {?} */ (this))._sanitizer.sanitize(SecurityContext.HTML, literal);
221
233
  if (!sanitizedLiteral) {
@@ -223,7 +235,7 @@ class MatIconRegistry {
223
235
  }
224
236
  /** @type {?} */
225
237
  const svgElement = (/** @type {?} */ (this))._svgElementFromString(sanitizedLiteral);
226
- return (/** @type {?} */ (this))._addSvgIconSetConfig(namespace, new SvgIconConfig(svgElement));
238
+ return (/** @type {?} */ (this))._addSvgIconSetConfig(namespace, new SvgIconConfig(svgElement, options));
227
239
  }
228
240
  /**
229
241
  * Defines an alias for a CSS class name to be used for icon fonts. Creating an matIcon
@@ -404,7 +416,15 @@ class MatIconRegistry {
404
416
  const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);
405
417
  // Swallow errors fetching individual URLs so the
406
418
  // combined Observable won't necessarily fail.
407
- console.error(`Loading icon set URL: ${url} failed: ${err.message}`);
419
+ /** @type {?} */
420
+ const errorMessage = `Loading icon set URL: ${url} failed: ${err.message}`;
421
+ // @breaking-change 9.0.0 _errorHandler parameter to be made required
422
+ if (this._errorHandler) {
423
+ this._errorHandler.handleError(new Error(errorMessage));
424
+ }
425
+ else {
426
+ console.error(errorMessage);
427
+ }
408
428
  return of(null);
409
429
  })));
410
430
  }));
@@ -438,7 +458,7 @@ class MatIconRegistry {
438
458
  const config = iconSetConfigs[i];
439
459
  if (config.svgElement) {
440
460
  /** @type {?} */
441
- const foundIcon = this._extractSvgIconFromSet(config.svgElement, iconName);
461
+ const foundIcon = this._extractSvgIconFromSet(config.svgElement, iconName, config.options);
442
462
  if (foundIcon) {
443
463
  return foundIcon;
444
464
  }
@@ -459,7 +479,7 @@ class MatIconRegistry {
459
479
  * @param {?} svgText
460
480
  * @return {?}
461
481
  */
462
- svgText => this._createSvgElementForSingleIcon(svgText))));
482
+ svgText => this._createSvgElementForSingleIcon(svgText, config.options))));
463
483
  }
464
484
  /**
465
485
  * Loads the content of the icon set URL specified in the SvgIconConfig and creates an SVG element
@@ -490,12 +510,13 @@ class MatIconRegistry {
490
510
  * Creates a DOM element from the given SVG string, and adds default attributes.
491
511
  * @private
492
512
  * @param {?} responseText
513
+ * @param {?=} options
493
514
  * @return {?}
494
515
  */
495
- _createSvgElementForSingleIcon(responseText) {
516
+ _createSvgElementForSingleIcon(responseText, options) {
496
517
  /** @type {?} */
497
518
  const svg = this._svgElementFromString(responseText);
498
- this._setSvgAttributes(svg);
519
+ this._setSvgAttributes(svg, options);
499
520
  return svg;
500
521
  }
501
522
  /**
@@ -505,9 +526,10 @@ class MatIconRegistry {
505
526
  * @private
506
527
  * @param {?} iconSet
507
528
  * @param {?} iconName
529
+ * @param {?=} options
508
530
  * @return {?}
509
531
  */
510
- _extractSvgIconFromSet(iconSet, iconName) {
532
+ _extractSvgIconFromSet(iconSet, iconName, options) {
511
533
  // Use the `id="iconName"` syntax in order to escape special
512
534
  // characters in the ID (versus using the #iconName syntax).
513
535
  /** @type {?} */
@@ -523,13 +545,13 @@ class MatIconRegistry {
523
545
  // If the icon node is itself an <svg> node, clone and return it directly. If not, set it as
524
546
  // the content of a new <svg> node.
525
547
  if (iconElement.nodeName.toLowerCase() === 'svg') {
526
- return this._setSvgAttributes((/** @type {?} */ (iconElement)));
548
+ return this._setSvgAttributes((/** @type {?} */ (iconElement)), options);
527
549
  }
528
550
  // If the node is a <symbol>, it won't be rendered so we have to convert it into <svg>. Note
529
551
  // that the same could be achieved by referring to it via <use href="#id">, however the <use>
530
552
  // tag is problematic on Firefox, because it needs to include the current page path.
531
553
  if (iconElement.nodeName.toLowerCase() === 'symbol') {
532
- return this._setSvgAttributes(this._toSvgElement(iconElement));
554
+ return this._setSvgAttributes(this._toSvgElement(iconElement), options);
533
555
  }
534
556
  // createElement('SVG') doesn't work as expected; the DOM ends up with
535
557
  // the correct nodes, but the SVG content doesn't render. Instead we
@@ -540,7 +562,7 @@ class MatIconRegistry {
540
562
  const svg = this._svgElementFromString('<svg></svg>');
541
563
  // Clone the node so we don't remove it from the parent icon set element.
542
564
  svg.appendChild(iconElement);
543
- return this._setSvgAttributes(svg);
565
+ return this._setSvgAttributes(svg, options);
544
566
  }
545
567
  /**
546
568
  * Creates a DOM element from the given SVG string.
@@ -567,7 +589,16 @@ class MatIconRegistry {
567
589
  */
568
590
  _toSvgElement(element) {
569
591
  /** @type {?} */
570
- let svg = this._svgElementFromString('<svg></svg>');
592
+ const svg = this._svgElementFromString('<svg></svg>');
593
+ /** @type {?} */
594
+ const attributes = element.attributes;
595
+ // Copy over all the attributes from the `symbol` to the new SVG, except the id.
596
+ for (let i = 0; i < attributes.length; i++) {
597
+ const { name, value } = attributes[i];
598
+ if (name !== 'id') {
599
+ svg.setAttribute(name, value);
600
+ }
601
+ }
571
602
  for (let i = 0; i < element.childNodes.length; i++) {
572
603
  if (element.childNodes[i].nodeType === this._document.ELEMENT_NODE) {
573
604
  svg.appendChild(element.childNodes[i].cloneNode(true));
@@ -579,14 +610,18 @@ class MatIconRegistry {
579
610
  * Sets the default attributes for an SVG element to be used as an icon.
580
611
  * @private
581
612
  * @param {?} svg
613
+ * @param {?=} options
582
614
  * @return {?}
583
615
  */
584
- _setSvgAttributes(svg) {
616
+ _setSvgAttributes(svg, options) {
585
617
  svg.setAttribute('fit', '');
586
618
  svg.setAttribute('height', '100%');
587
619
  svg.setAttribute('width', '100%');
588
620
  svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');
589
621
  svg.setAttribute('focusable', 'false'); // Disable IE11 default behavior to make SVGs focusable.
622
+ if (options && options.viewBox) {
623
+ svg.setAttribute('viewBox', options.viewBox);
624
+ }
590
625
  return svg;
591
626
  }
592
627
  /**
@@ -668,19 +703,21 @@ MatIconRegistry.decorators = [
668
703
  MatIconRegistry.ctorParameters = () => [
669
704
  { type: HttpClient, decorators: [{ type: Optional }] },
670
705
  { type: DomSanitizer },
671
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] }
706
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },
707
+ { type: ErrorHandler, decorators: [{ type: Optional }] }
672
708
  ];
673
- /** @nocollapse */ MatIconRegistry.ngInjectableDef = ɵɵdefineInjectable({ factory: function MatIconRegistry_Factory() { return new MatIconRegistry(ɵɵinject(HttpClient, 8), ɵɵinject(DomSanitizer), ɵɵinject(DOCUMENT, 8)); }, token: MatIconRegistry, providedIn: "root" });
709
+ /** @nocollapse */ MatIconRegistry.ngInjectableDef = ɵɵdefineInjectable({ factory: function MatIconRegistry_Factory() { return new MatIconRegistry(ɵɵinject(HttpClient, 8), ɵɵinject(DomSanitizer), ɵɵinject(DOCUMENT, 8), ɵɵinject(ErrorHandler, 8)); }, token: MatIconRegistry, providedIn: "root" });
674
710
  /**
675
711
  * \@docs-private
676
712
  * @param {?} parentRegistry
677
713
  * @param {?} httpClient
678
714
  * @param {?} sanitizer
679
715
  * @param {?=} document
716
+ * @param {?=} errorHandler
680
717
  * @return {?}
681
718
  */
682
- function ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, httpClient, sanitizer, document) {
683
- return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document);
719
+ function ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, httpClient, sanitizer, document, errorHandler) {
720
+ return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document, errorHandler);
684
721
  }
685
722
  /**
686
723
  * \@docs-private
@@ -693,6 +730,7 @@ const ICON_REGISTRY_PROVIDER = {
693
730
  [new Optional(), new SkipSelf(), MatIconRegistry],
694
731
  [new Optional(), HttpClient],
695
732
  DomSanitizer,
733
+ [new Optional(), ErrorHandler],
696
734
  [new Optional(), (/** @type {?} */ (DOCUMENT))],
697
735
  ],
698
736
  useFactory: ICON_REGISTRY_PROVIDER_FACTORY,
@@ -827,11 +865,13 @@ class MatIcon extends _MatIconMixinBase {
827
865
  * @param {?} _iconRegistry
828
866
  * @param {?} ariaHidden
829
867
  * @param {?=} _location
868
+ * @param {?=} _errorHandler
830
869
  */
831
- constructor(elementRef, _iconRegistry, ariaHidden, _location) {
870
+ constructor(elementRef, _iconRegistry, ariaHidden, _location, _errorHandler) {
832
871
  super(elementRef);
833
872
  this._iconRegistry = _iconRegistry;
834
873
  this._location = _location;
874
+ this._errorHandler = _errorHandler;
835
875
  this._inline = false;
836
876
  // If the user has not explicitly set aria-hidden, mark the icon as hidden, as this is
837
877
  // the right thing to do for the majority of icon use-cases.
@@ -917,7 +957,9 @@ class MatIcon extends _MatIconMixinBase {
917
957
  if (svgIconChanges) {
918
958
  if (this.svgIcon) {
919
959
  const [namespace, iconName] = this._splitIconName(this.svgIcon);
920
- this._iconRegistry.getNamedSvgIcon(iconName, namespace).pipe(take(1)).subscribe((/**
960
+ this._iconRegistry.getNamedSvgIcon(iconName, namespace)
961
+ .pipe(take(1))
962
+ .subscribe((/**
921
963
  * @param {?} svg
922
964
  * @return {?}
923
965
  */
@@ -925,7 +967,17 @@ class MatIcon extends _MatIconMixinBase {
925
967
  * @param {?} err
926
968
  * @return {?}
927
969
  */
928
- (err) => console.log(`Error retrieving icon: ${err.message}`)));
970
+ (err) => {
971
+ /** @type {?} */
972
+ const errorMessage = `Error retrieving icon ${namespace}:${iconName}! ${err.message}`;
973
+ // @breaking-change 9.0.0 _errorHandler parameter to be made required.
974
+ if (this._errorHandler) {
975
+ this._errorHandler.handleError(new Error(errorMessage));
976
+ }
977
+ else {
978
+ console.error(errorMessage);
979
+ }
980
+ }));
929
981
  }
930
982
  else if (svgIconChanges.previousValue) {
931
983
  this._clearSvgElement();
@@ -1162,7 +1214,8 @@ MatIcon.ctorParameters = () => [
1162
1214
  { type: ElementRef },
1163
1215
  { type: MatIconRegistry },
1164
1216
  { type: String, decorators: [{ type: Attribute, args: ['aria-hidden',] }] },
1165
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_ICON_LOCATION,] }] }
1217
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_ICON_LOCATION,] }] },
1218
+ { type: ErrorHandler, decorators: [{ type: Optional }] }
1166
1219
  ];
1167
1220
  MatIcon.propDecorators = {
1168
1221
  inline: [{ type: Input }],