@angular/material 2.0.0-alpha.9-3 → 2.0.0-beta.11

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 (1546) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -145
  3. package/_theming.scss +3872 -0
  4. package/autocomplete/index.d.ts +8 -0
  5. package/autocomplete/index.metadata.json +11 -0
  6. package/autocomplete/package.json +7 -0
  7. package/autocomplete/typings/autocomplete-module.d.ts +2 -0
  8. package/autocomplete/typings/autocomplete-trigger.d.ts +159 -0
  9. package/autocomplete/typings/autocomplete.d.ts +55 -0
  10. package/autocomplete/typings/index.d.ts +4 -0
  11. package/autocomplete/typings/index.metadata.json +1 -0
  12. package/autocomplete/typings/mat-exports.d.ts +17 -0
  13. package/autocomplete/typings/public_api.d.ts +11 -0
  14. package/autocomplete.d.ts +8 -0
  15. package/autocomplete.metadata.json +11 -0
  16. package/bundles/material-autocomplete.umd.js +3293 -0
  17. package/bundles/material-autocomplete.umd.js.map +1 -0
  18. package/bundles/material-autocomplete.umd.min.js +10 -0
  19. package/bundles/material-autocomplete.umd.min.js.map +1 -0
  20. package/bundles/material-button-toggle.umd.js +2689 -0
  21. package/bundles/material-button-toggle.umd.js.map +1 -0
  22. package/bundles/material-button-toggle.umd.min.js +10 -0
  23. package/bundles/material-button-toggle.umd.min.js.map +1 -0
  24. package/bundles/material-button.umd.js +2503 -0
  25. package/bundles/material-button.umd.js.map +1 -0
  26. package/bundles/material-button.umd.min.js +10 -0
  27. package/bundles/material-button.umd.min.js.map +1 -0
  28. package/bundles/material-card.umd.js +2438 -0
  29. package/bundles/material-card.umd.js.map +1 -0
  30. package/bundles/material-card.umd.min.js +10 -0
  31. package/bundles/material-card.umd.min.js.map +1 -0
  32. package/bundles/material-checkbox.umd.js +2692 -0
  33. package/bundles/material-checkbox.umd.js.map +1 -0
  34. package/bundles/material-checkbox.umd.min.js +10 -0
  35. package/bundles/material-checkbox.umd.min.js.map +1 -0
  36. package/bundles/material-chips.umd.js +4121 -0
  37. package/bundles/material-chips.umd.js.map +1 -0
  38. package/bundles/material-chips.umd.min.js +11 -0
  39. package/bundles/material-chips.umd.min.js.map +1 -0
  40. package/bundles/material-core.umd.js +2505 -0
  41. package/bundles/material-core.umd.js.map +1 -0
  42. package/bundles/material-core.umd.min.js +10 -0
  43. package/bundles/material-core.umd.min.js.map +1 -0
  44. package/bundles/material-datepicker.umd.js +6568 -0
  45. package/bundles/material-datepicker.umd.js.map +1 -0
  46. package/bundles/material-datepicker.umd.min.js +12 -0
  47. package/bundles/material-datepicker.umd.min.js.map +1 -0
  48. package/bundles/material-dialog.umd.js +2980 -0
  49. package/bundles/material-dialog.umd.js.map +1 -0
  50. package/bundles/material-dialog.umd.min.js +10 -0
  51. package/bundles/material-dialog.umd.min.js.map +1 -0
  52. package/bundles/material-examples.umd.js +3627 -0
  53. package/bundles/material-examples.umd.js.map +1 -0
  54. package/bundles/material-examples.umd.min.js +12 -0
  55. package/bundles/material-examples.umd.min.js.map +1 -0
  56. package/bundles/material-expansion.umd.js +2678 -0
  57. package/bundles/material-expansion.umd.js.map +1 -0
  58. package/bundles/material-expansion.umd.min.js +10 -0
  59. package/bundles/material-expansion.umd.min.js.map +1 -0
  60. package/bundles/material-form-field.umd.js +2629 -0
  61. package/bundles/material-form-field.umd.js.map +1 -0
  62. package/bundles/material-form-field.umd.min.js +10 -0
  63. package/bundles/material-form-field.umd.min.js.map +1 -0
  64. package/bundles/material-grid-list.umd.js +3000 -0
  65. package/bundles/material-grid-list.umd.js.map +1 -0
  66. package/bundles/material-grid-list.umd.min.js +10 -0
  67. package/bundles/material-grid-list.umd.min.js.map +1 -0
  68. package/bundles/material-icon.umd.js +2862 -0
  69. package/bundles/material-icon.umd.js.map +1 -0
  70. package/bundles/material-icon.umd.min.js +10 -0
  71. package/bundles/material-icon.umd.min.js.map +1 -0
  72. package/bundles/material-input.umd.js +3214 -0
  73. package/bundles/material-input.umd.js.map +1 -0
  74. package/bundles/material-input.umd.min.js +10 -0
  75. package/bundles/material-input.umd.min.js.map +1 -0
  76. package/bundles/material-list.umd.js +2908 -0
  77. package/bundles/material-list.umd.js.map +1 -0
  78. package/bundles/material-list.umd.min.js +11 -0
  79. package/bundles/material-list.umd.min.js.map +1 -0
  80. package/bundles/material-menu.umd.js +3016 -0
  81. package/bundles/material-menu.umd.js.map +1 -0
  82. package/bundles/material-menu.umd.min.js +10 -0
  83. package/bundles/material-menu.umd.min.js.map +1 -0
  84. package/bundles/material-paginator.umd.js +4990 -0
  85. package/bundles/material-paginator.umd.js.map +1 -0
  86. package/bundles/material-paginator.umd.min.js +11 -0
  87. package/bundles/material-paginator.umd.min.js.map +1 -0
  88. package/bundles/material-progress-bar.umd.js +2204 -0
  89. package/bundles/material-progress-bar.umd.js.map +1 -0
  90. package/bundles/material-progress-bar.umd.min.js +10 -0
  91. package/bundles/material-progress-bar.umd.min.js.map +1 -0
  92. package/bundles/material-progress-spinner.umd.js +2594 -0
  93. package/bundles/material-progress-spinner.umd.js.map +1 -0
  94. package/bundles/material-progress-spinner.umd.min.js +10 -0
  95. package/bundles/material-progress-spinner.umd.min.js.map +1 -0
  96. package/bundles/material-radio.umd.js +2936 -0
  97. package/bundles/material-radio.umd.js.map +1 -0
  98. package/bundles/material-radio.umd.min.js +10 -0
  99. package/bundles/material-radio.umd.min.js.map +1 -0
  100. package/bundles/material-select.umd.js +3611 -0
  101. package/bundles/material-select.umd.js.map +1 -0
  102. package/bundles/material-select.umd.min.js +10 -0
  103. package/bundles/material-select.umd.min.js.map +1 -0
  104. package/bundles/material-sidenav.umd.js +2781 -0
  105. package/bundles/material-sidenav.umd.js.map +1 -0
  106. package/bundles/material-sidenav.umd.min.js +10 -0
  107. package/bundles/material-sidenav.umd.min.js.map +1 -0
  108. package/bundles/material-slide-toggle.umd.js +2657 -0
  109. package/bundles/material-slide-toggle.umd.js.map +1 -0
  110. package/bundles/material-slide-toggle.umd.min.js +10 -0
  111. package/bundles/material-slide-toggle.umd.min.js.map +1 -0
  112. package/bundles/material-slider.umd.js +3043 -0
  113. package/bundles/material-slider.umd.js.map +1 -0
  114. package/bundles/material-slider.umd.min.js +10 -0
  115. package/bundles/material-slider.umd.min.js.map +1 -0
  116. package/bundles/material-snack-bar.umd.js +2717 -0
  117. package/bundles/material-snack-bar.umd.js.map +1 -0
  118. package/bundles/material-snack-bar.umd.min.js +10 -0
  119. package/bundles/material-snack-bar.umd.min.js.map +1 -0
  120. package/bundles/material-sort.umd.js +2479 -0
  121. package/bundles/material-sort.umd.js.map +1 -0
  122. package/bundles/material-sort.umd.min.js +10 -0
  123. package/bundles/material-sort.umd.min.js.map +1 -0
  124. package/bundles/material-stepper.umd.js +3598 -0
  125. package/bundles/material-stepper.umd.js.map +1 -0
  126. package/bundles/material-stepper.umd.min.js +11 -0
  127. package/bundles/material-stepper.umd.min.js.map +1 -0
  128. package/bundles/material-table.umd.js +2458 -0
  129. package/bundles/material-table.umd.js.map +1 -0
  130. package/bundles/material-table.umd.min.js +10 -0
  131. package/bundles/material-table.umd.min.js.map +1 -0
  132. package/bundles/material-tabs.umd.js +3742 -0
  133. package/bundles/material-tabs.umd.js.map +1 -0
  134. package/bundles/material-tabs.umd.min.js +10 -0
  135. package/bundles/material-tabs.umd.min.js.map +1 -0
  136. package/bundles/material-toolbar.umd.js +2211 -0
  137. package/bundles/material-toolbar.umd.js.map +1 -0
  138. package/bundles/material-toolbar.umd.min.js +9 -0
  139. package/bundles/material-toolbar.umd.min.js.map +1 -0
  140. package/bundles/material-tooltip.umd.js +2821 -0
  141. package/bundles/material-tooltip.umd.js.map +1 -0
  142. package/bundles/material-tooltip.umd.min.js +10 -0
  143. package/bundles/material-tooltip.umd.min.js.map +1 -0
  144. package/bundles/material.umd.js +23785 -0
  145. package/bundles/material.umd.js.map +1 -0
  146. package/bundles/material.umd.min.js +23 -0
  147. package/bundles/material.umd.min.js.map +1 -0
  148. package/button/index.d.ts +8 -1
  149. package/button/index.metadata.json +11 -1
  150. package/button/package.json +7 -0
  151. package/button/typings/button-module.d.ts +2 -0
  152. package/button/typings/button.d.ts +80 -0
  153. package/button/typings/index.d.ts +4 -0
  154. package/button/typings/index.metadata.json +1 -0
  155. package/button/typings/mat-exports.d.ts +18 -0
  156. package/button/typings/public_api.d.ts +10 -0
  157. package/button-toggle/index.d.ts +8 -1
  158. package/button-toggle/index.metadata.json +11 -1
  159. package/button-toggle/package.json +7 -0
  160. package/button-toggle/typings/button-toggle-module.d.ts +2 -0
  161. package/button-toggle/typings/button-toggle.d.ts +156 -0
  162. package/button-toggle/typings/index.d.ts +4 -0
  163. package/button-toggle/typings/index.metadata.json +1 -0
  164. package/button-toggle/typings/mat-exports.d.ts +16 -0
  165. package/button-toggle/typings/public_api.d.ts +10 -0
  166. package/button-toggle.d.ts +8 -0
  167. package/button-toggle.metadata.json +11 -0
  168. package/button.d.ts +8 -0
  169. package/button.metadata.json +11 -0
  170. package/card/index.d.ts +8 -1
  171. package/card/index.metadata.json +11 -1
  172. package/card/package.json +7 -0
  173. package/card/typings/card-module.d.ts +2 -0
  174. package/card/typings/card.d.ts +95 -0
  175. package/card/typings/index.d.ts +4 -0
  176. package/card/typings/index.metadata.json +1 -0
  177. package/card/typings/mat-exports.d.ts +24 -0
  178. package/card/typings/public_api.d.ts +10 -0
  179. package/card.d.ts +8 -0
  180. package/card.metadata.json +11 -0
  181. package/checkbox/index.d.ts +8 -1
  182. package/checkbox/index.metadata.json +11 -1
  183. package/checkbox/package.json +7 -0
  184. package/checkbox/typings/checkbox-module.d.ts +2 -0
  185. package/checkbox/typings/checkbox-required-validator.d.ts +18 -0
  186. package/checkbox/typings/checkbox.d.ts +159 -0
  187. package/checkbox/typings/index.d.ts +4 -0
  188. package/checkbox/typings/index.metadata.json +1 -0
  189. package/checkbox/typings/mat-exports.d.ts +17 -0
  190. package/checkbox/typings/public_api.d.ts +11 -0
  191. package/checkbox.d.ts +8 -0
  192. package/checkbox.metadata.json +11 -0
  193. package/chips/index.d.ts +8 -0
  194. package/chips/index.metadata.json +11 -0
  195. package/chips/package.json +7 -0
  196. package/chips/typings/chip-input.d.ts +54 -0
  197. package/chips/typings/chip-list.d.ts +219 -0
  198. package/chips/typings/chip.d.ts +123 -0
  199. package/chips/typings/chips-module.d.ts +2 -0
  200. package/chips/typings/index.d.ts +4 -0
  201. package/chips/typings/index.metadata.json +1 -0
  202. package/chips/typings/mat-exports.d.ts +21 -0
  203. package/chips/typings/public_api.d.ts +12 -0
  204. package/chips.d.ts +8 -0
  205. package/chips.metadata.json +11 -0
  206. package/core/index.d.ts +8 -1
  207. package/core/index.metadata.json +11 -1
  208. package/core/package.json +7 -0
  209. package/core/typings/a11y/index.d.ts +8 -0
  210. package/core/typings/animation/animation.d.ts +20 -0
  211. package/core/typings/bidi/index.d.ts +8 -0
  212. package/core/typings/common-behaviors/color.d.ts +22 -0
  213. package/core/typings/common-behaviors/common-module.d.ts +24 -0
  214. package/core/typings/common-behaviors/constructor.d.ts +9 -0
  215. package/core/typings/common-behaviors/disable-ripple.d.ts +7 -0
  216. package/core/typings/common-behaviors/disabled.d.ts +7 -0
  217. package/core/typings/common-behaviors/index.d.ts +12 -0
  218. package/core/typings/common-behaviors/tabindex.d.ts +15 -0
  219. package/core/typings/compatibility/compatibility.d.ts +40 -0
  220. package/core/typings/coordination/unique-selection-dispatcher.d.ts +40 -0
  221. package/core/typings/datetime/date-adapter.d.ts +198 -0
  222. package/core/typings/datetime/date-formats.d.ts +20 -0
  223. package/core/typings/datetime/index.d.ts +8 -0
  224. package/core/typings/datetime/native-date-adapter.d.ts +50 -0
  225. package/core/typings/datetime/native-date-formats.d.ts +9 -0
  226. package/core/typings/error/error-options.d.ts +19 -0
  227. package/core/typings/gestures/gesture-annotations.d.ts +51 -0
  228. package/core/typings/gestures/gesture-config.d.ts +23 -0
  229. package/core/typings/index.d.ts +5 -0
  230. package/core/typings/index.metadata.json +1 -0
  231. package/core/typings/keyboard/keycodes.d.ts +8 -0
  232. package/core/typings/line/line.d.ts +30 -0
  233. package/core/typings/mat-exports.d.ts +36 -0
  234. package/core/typings/option/index.d.ts +4 -0
  235. package/core/typings/option/optgroup.d.ts +14 -0
  236. package/core/typings/option/option.d.ts +97 -0
  237. package/core/typings/overlay/index.d.ts +8 -0
  238. package/core/typings/placeholder/placeholder-options.d.ts +15 -0
  239. package/core/typings/platform/features.d.ts +8 -0
  240. package/core/typings/platform/index.d.ts +10 -0
  241. package/core/typings/platform/platform.d.ts +8 -0
  242. package/core/typings/portal/dom-portal-host.d.ts +8 -0
  243. package/core/typings/portal/portal-directives.d.ts +8 -0
  244. package/core/typings/portal/portal-injector.d.ts +19 -0
  245. package/core/typings/portal/portal.d.ts +8 -0
  246. package/core/typings/public_api.d.ts +34 -0
  247. package/core/typings/ripple/index.d.ts +5 -0
  248. package/core/typings/ripple/ripple-ref.d.ts +28 -0
  249. package/core/typings/ripple/ripple-renderer.d.ts +64 -0
  250. package/core/typings/ripple/ripple.d.ts +73 -0
  251. package/core/typings/rxjs/index.d.ts +9 -0
  252. package/core/typings/rxjs/rx-chain.d.ts +8 -0
  253. package/core/typings/rxjs/rx-operators.d.ts +8 -0
  254. package/core/typings/selection/index.d.ts +3 -0
  255. package/core/typings/selection/pseudo-checkbox/pseudo-checkbox.d.ts +20 -0
  256. package/core/typings/style/apply-transform.d.ts +13 -0
  257. package/core/typings/style/index.d.ts +5 -0
  258. package/core/typings/testing/month-constants.d.ts +12 -0
  259. package/core/typings/util/object-extend.d.ts +15 -0
  260. package/core.d.ts +7 -0
  261. package/core.metadata.json +11 -1
  262. package/datepicker/index.d.ts +8 -0
  263. package/datepicker/index.metadata.json +11 -0
  264. package/datepicker/package.json +7 -0
  265. package/datepicker/typings/calendar-body.d.ts +52 -0
  266. package/datepicker/typings/calendar.d.ts +90 -0
  267. package/datepicker/typings/coerce-date-property.d.ts +19 -0
  268. package/datepicker/typings/datepicker-errors.d.ts +9 -0
  269. package/datepicker/typings/datepicker-input.d.ts +94 -0
  270. package/datepicker/typings/datepicker-intl.d.ts +25 -0
  271. package/datepicker/typings/datepicker-module.d.ts +2 -0
  272. package/datepicker/typings/datepicker-toggle.d.ts +24 -0
  273. package/datepicker/typings/datepicker.d.ts +117 -0
  274. package/datepicker/typings/index.d.ts +4 -0
  275. package/datepicker/typings/index.metadata.json +1 -0
  276. package/datepicker/typings/mat-exports.d.ts +33 -0
  277. package/datepicker/typings/month-view.d.ts +65 -0
  278. package/datepicker/typings/public_api.d.ts +18 -0
  279. package/datepicker/typings/year-view.d.ts +54 -0
  280. package/datepicker.d.ts +8 -0
  281. package/datepicker.metadata.json +11 -0
  282. package/dialog/index.d.ts +8 -4
  283. package/dialog/index.metadata.json +11 -1
  284. package/dialog/package.json +7 -0
  285. package/dialog/typings/dialog-config.d.ts +54 -0
  286. package/dialog/typings/dialog-container.d.ts +68 -0
  287. package/dialog/typings/dialog-content-directives.d.ts +45 -0
  288. package/dialog/typings/dialog-module.d.ts +2 -0
  289. package/dialog/typings/dialog-ref.d.ts +68 -0
  290. package/dialog/typings/dialog.d.ts +108 -0
  291. package/dialog/typings/index.d.ts +4 -0
  292. package/dialog/typings/index.metadata.json +1 -0
  293. package/dialog/typings/mat-exports.d.ts +26 -0
  294. package/dialog/typings/public_api.d.ts +14 -0
  295. package/dialog.d.ts +8 -0
  296. package/dialog.metadata.json +11 -0
  297. package/esm2015/autocomplete.js +661 -0
  298. package/esm2015/autocomplete.js.map +1 -0
  299. package/esm2015/button-toggle.js +567 -0
  300. package/esm2015/button-toggle.js.map +1 -0
  301. package/esm2015/button.js +323 -0
  302. package/esm2015/button.js.map +1 -0
  303. package/esm2015/card.js +312 -0
  304. package/esm2015/card.js.map +1 -0
  305. package/esm2015/checkbox.js +504 -0
  306. package/esm2015/checkbox.js.map +1 -0
  307. package/esm2015/chips.js +1332 -0
  308. package/esm2015/chips.js.map +1 -0
  309. package/esm2015/core.js +2316 -0
  310. package/esm2015/core.js.map +1 -0
  311. package/esm2015/datepicker.js +1808 -0
  312. package/esm2015/datepicker.js.map +1 -0
  313. package/esm2015/dialog.js +849 -0
  314. package/esm2015/dialog.js.map +1 -0
  315. package/esm2015/expansion.js +581 -0
  316. package/esm2015/expansion.js.map +1 -0
  317. package/esm2015/form-field.js +522 -0
  318. package/esm2015/form-field.js.map +1 -0
  319. package/esm2015/grid-list.js +825 -0
  320. package/esm2015/grid-list.js.map +1 -0
  321. package/esm2015/icon.js +733 -0
  322. package/esm2015/icon.js.map +1 -0
  323. package/esm2015/input.js +568 -0
  324. package/esm2015/input.js.map +1 -0
  325. package/esm2015/list.js +666 -0
  326. package/esm2015/list.js.map +1 -0
  327. package/esm2015/material.js +51 -0
  328. package/esm2015/material.js.map +1 -0
  329. package/esm2015/menu.js +917 -0
  330. package/esm2015/menu.js.map +1 -0
  331. package/esm2015/paginator.js +304 -0
  332. package/esm2015/paginator.js.map +1 -0
  333. package/esm2015/progress-bar.js +132 -0
  334. package/esm2015/progress-bar.js.map +1 -0
  335. package/esm2015/progress-spinner.js +438 -0
  336. package/esm2015/progress-spinner.js.map +1 -0
  337. package/esm2015/radio.js +707 -0
  338. package/esm2015/radio.js.map +1 -0
  339. package/esm2015/select.js +1378 -0
  340. package/esm2015/select.js.map +1 -0
  341. package/esm2015/sidenav.js +666 -0
  342. package/esm2015/sidenav.js.map +1 -0
  343. package/esm2015/slide-toggle.js +429 -0
  344. package/esm2015/slide-toggle.js.map +1 -0
  345. package/esm2015/slider.js +833 -0
  346. package/esm2015/slider.js.map +1 -0
  347. package/esm2015/snack-bar.js +606 -0
  348. package/esm2015/snack-bar.js.map +1 -0
  349. package/esm2015/sort.js +387 -0
  350. package/esm2015/sort.js.map +1 -0
  351. package/esm2015/stepper.js +330 -0
  352. package/esm2015/stepper.js.map +1 -0
  353. package/esm2015/table.js +312 -0
  354. package/esm2015/table.js.map +1 -0
  355. package/esm2015/tabs.js +1477 -0
  356. package/esm2015/tabs.js.map +1 -0
  357. package/esm2015/toolbar.js +88 -0
  358. package/esm2015/toolbar.js.map +1 -0
  359. package/esm2015/tooltip.js +701 -0
  360. package/esm2015/tooltip.js.map +1 -0
  361. package/esm5/autocomplete.es5.js +691 -0
  362. package/esm5/autocomplete.es5.js.map +1 -0
  363. package/esm5/button-toggle.es5.js +619 -0
  364. package/esm5/button-toggle.es5.js.map +1 -0
  365. package/esm5/button.es5.js +341 -0
  366. package/esm5/button.es5.js.map +1 -0
  367. package/esm5/card.es5.js +349 -0
  368. package/esm5/card.es5.js.map +1 -0
  369. package/esm5/checkbox.es5.js +534 -0
  370. package/esm5/checkbox.es5.js.map +1 -0
  371. package/esm5/chips.es5.js +1466 -0
  372. package/esm5/chips.es5.js.map +1 -0
  373. package/esm5/core.es5.js +2316 -0
  374. package/esm5/core.es5.js.map +1 -0
  375. package/esm5/datepicker.es5.js +1936 -0
  376. package/esm5/datepicker.es5.js.map +1 -0
  377. package/esm5/dialog.es5.js +877 -0
  378. package/esm5/dialog.es5.js.map +1 -0
  379. package/esm5/expansion.es5.js +608 -0
  380. package/esm5/expansion.es5.js.map +1 -0
  381. package/esm5/form-field.es5.js +556 -0
  382. package/esm5/form-field.es5.js.map +1 -0
  383. package/esm5/grid-list.es5.js +877 -0
  384. package/esm5/grid-list.es5.js.map +1 -0
  385. package/esm5/icon.es5.js +746 -0
  386. package/esm5/icon.es5.js.map +1 -0
  387. package/esm5/input.es5.js +606 -0
  388. package/esm5/input.es5.js.map +1 -0
  389. package/esm5/list.es5.js +726 -0
  390. package/esm5/list.es5.js.map +1 -0
  391. package/esm5/material.es5.js +48 -0
  392. package/esm5/material.es5.js.map +1 -0
  393. package/esm5/menu.es5.js +953 -0
  394. package/esm5/menu.es5.js.map +1 -0
  395. package/esm5/paginator.es5.js +324 -0
  396. package/esm5/paginator.es5.js.map +1 -0
  397. package/esm5/progress-bar.es5.js +142 -0
  398. package/esm5/progress-bar.es5.js.map +1 -0
  399. package/esm5/progress-spinner.es5.js +474 -0
  400. package/esm5/progress-spinner.es5.js.map +1 -0
  401. package/esm5/radio.es5.js +779 -0
  402. package/esm5/radio.es5.js.map +1 -0
  403. package/esm5/select.es5.js +1444 -0
  404. package/esm5/select.es5.js.map +1 -0
  405. package/esm5/sidenav.es5.js +719 -0
  406. package/esm5/sidenav.es5.js.map +1 -0
  407. package/esm5/slide-toggle.es5.js +451 -0
  408. package/esm5/slide-toggle.es5.js.map +1 -0
  409. package/esm5/slider.es5.js +932 -0
  410. package/esm5/slider.es5.js.map +1 -0
  411. package/esm5/snack-bar.es5.js +623 -0
  412. package/esm5/snack-bar.es5.js.map +1 -0
  413. package/esm5/sort.es5.js +418 -0
  414. package/esm5/sort.es5.js.map +1 -0
  415. package/esm5/stepper.es5.js +376 -0
  416. package/esm5/stepper.es5.js.map +1 -0
  417. package/esm5/table.es5.js +370 -0
  418. package/esm5/table.es5.js.map +1 -0
  419. package/esm5/tabs.es5.js +1576 -0
  420. package/esm5/tabs.es5.js.map +1 -0
  421. package/esm5/toolbar.es5.js +94 -0
  422. package/esm5/toolbar.es5.js.map +1 -0
  423. package/esm5/tooltip.es5.js +759 -0
  424. package/esm5/tooltip.es5.js.map +1 -0
  425. package/expansion/index.d.ts +8 -0
  426. package/expansion/index.metadata.json +11 -0
  427. package/expansion/package.json +7 -0
  428. package/expansion/typings/accordion-item.d.ts +41 -0
  429. package/expansion/typings/accordion.d.ts +29 -0
  430. package/expansion/typings/expansion-module.d.ts +2 -0
  431. package/expansion/typings/expansion-panel-header.d.ts +56 -0
  432. package/expansion/typings/expansion-panel.d.ts +39 -0
  433. package/expansion/typings/index.d.ts +5 -0
  434. package/expansion/typings/index.metadata.json +1 -0
  435. package/expansion/typings/mat-exports.d.ts +20 -0
  436. package/expansion/typings/public_api.d.ts +13 -0
  437. package/expansion.d.ts +8 -0
  438. package/expansion.metadata.json +11 -0
  439. package/form-field/index.d.ts +8 -0
  440. package/form-field/index.metadata.json +11 -0
  441. package/form-field/package.json +7 -0
  442. package/form-field/typings/error.d.ts +4 -0
  443. package/form-field/typings/form-field-control.d.ts +39 -0
  444. package/form-field/typings/form-field-errors.d.ts +13 -0
  445. package/form-field/typings/form-field-module.d.ts +2 -0
  446. package/form-field/typings/form-field.d.ts +77 -0
  447. package/form-field/typings/hint.d.ts +7 -0
  448. package/form-field/typings/index.d.ts +4 -0
  449. package/form-field/typings/index.metadata.json +1 -0
  450. package/form-field/typings/mat-exports.d.ts +23 -0
  451. package/form-field/typings/placeholder.d.ts +3 -0
  452. package/form-field/typings/prefix.d.ts +3 -0
  453. package/form-field/typings/public_api.d.ts +17 -0
  454. package/form-field/typings/suffix.d.ts +3 -0
  455. package/form-field.d.ts +8 -0
  456. package/form-field.metadata.json +11 -0
  457. package/grid-list/index.d.ts +8 -1
  458. package/grid-list/index.metadata.json +11 -1
  459. package/grid-list/package.json +7 -0
  460. package/grid-list/typings/grid-list-measure.d.ts +17 -0
  461. package/grid-list/typings/grid-list-module.d.ts +2 -0
  462. package/grid-list/typings/grid-list.d.ts +53 -0
  463. package/grid-list/typings/grid-tile.d.ts +55 -0
  464. package/grid-list/typings/index.d.ts +5 -0
  465. package/grid-list/typings/index.metadata.json +1 -0
  466. package/grid-list/typings/mat-exports.d.ts +13 -0
  467. package/grid-list/typings/public_api.d.ts +11 -0
  468. package/grid-list/typings/tile-coordinator.d.ts +64 -0
  469. package/grid-list/typings/tile-styler.d.ts +129 -0
  470. package/grid-list.d.ts +8 -0
  471. package/grid-list.metadata.json +11 -0
  472. package/icon/index.d.ts +8 -1
  473. package/icon/index.metadata.json +11 -1
  474. package/icon/package.json +7 -0
  475. package/icon/typings/icon-module.d.ts +2 -0
  476. package/icon/typings/icon-registry.d.ts +194 -0
  477. package/icon/typings/icon.d.ts +76 -0
  478. package/icon/typings/index.d.ts +4 -0
  479. package/icon/typings/index.metadata.json +1 -0
  480. package/icon/typings/mat-exports.d.ts +14 -0
  481. package/icon/typings/public_api.d.ts +11 -0
  482. package/icon.d.ts +8 -0
  483. package/icon.metadata.json +11 -0
  484. package/input/index.d.ts +8 -1
  485. package/input/index.metadata.json +11 -1
  486. package/input/package.json +7 -0
  487. package/input/typings/autosize.d.ts +45 -0
  488. package/input/typings/index.d.ts +4 -0
  489. package/input/typings/index.metadata.json +1 -0
  490. package/input/typings/input-errors.d.ts +9 -0
  491. package/input/typings/input-module.d.ts +2 -0
  492. package/input/typings/input.d.ts +78 -0
  493. package/input/typings/mat-exports.d.ts +13 -0
  494. package/input/typings/public_api.d.ts +12 -0
  495. package/input.d.ts +8 -0
  496. package/input.metadata.json +11 -0
  497. package/list/index.d.ts +8 -1
  498. package/list/index.metadata.json +11 -1
  499. package/list/package.json +7 -0
  500. package/list/typings/index.d.ts +4 -0
  501. package/list/typings/index.metadata.json +1 -0
  502. package/list/typings/list-module.d.ts +2 -0
  503. package/list/typings/list.d.ts +78 -0
  504. package/list/typings/mat-exports.d.ts +27 -0
  505. package/list/typings/public_api.d.ts +11 -0
  506. package/list/typings/selection-list.d.ts +112 -0
  507. package/list.d.ts +8 -0
  508. package/list.metadata.json +11 -0
  509. package/material.d.ts +39 -0
  510. package/material.metadata.json +102 -0
  511. package/menu/index.d.ts +8 -1
  512. package/menu/index.metadata.json +11 -1
  513. package/menu/package.json +7 -0
  514. package/menu/typings/index.d.ts +6 -0
  515. package/menu/typings/index.metadata.json +1 -0
  516. package/menu/typings/mat-exports.d.ts +16 -0
  517. package/menu/typings/menu-animations.d.ts +27 -0
  518. package/menu/typings/menu-directive.d.ts +86 -0
  519. package/menu/typings/menu-errors.d.ts +24 -0
  520. package/menu/typings/menu-item.d.ts +40 -0
  521. package/menu/typings/menu-module.d.ts +2 -0
  522. package/menu/typings/menu-panel.d.ts +22 -0
  523. package/menu/typings/menu-positions.d.ts +9 -0
  524. package/menu/typings/menu-trigger.d.ts +116 -0
  525. package/menu/typings/menu.d.ts +12 -0
  526. package/menu/typings/public_api.d.ts +12 -0
  527. package/menu.d.ts +8 -0
  528. package/menu.metadata.json +11 -0
  529. package/package.json +10 -8
  530. package/paginator/index.d.ts +8 -0
  531. package/paginator/index.metadata.json +11 -0
  532. package/paginator/package.json +7 -0
  533. package/paginator/typings/index.d.ts +4 -0
  534. package/paginator/typings/index.metadata.json +1 -0
  535. package/paginator/typings/mat-exports.d.ts +13 -0
  536. package/paginator/typings/paginator-intl.d.ts +20 -0
  537. package/paginator/typings/paginator-module.d.ts +2 -0
  538. package/paginator/typings/paginator.d.ts +75 -0
  539. package/paginator/typings/public_api.d.ts +11 -0
  540. package/paginator.d.ts +8 -0
  541. package/paginator.metadata.json +11 -0
  542. package/prebuilt-themes/deeppurple-amber.css +1 -0
  543. package/prebuilt-themes/indigo-pink.css +1 -0
  544. package/prebuilt-themes/pink-bluegrey.css +1 -0
  545. package/prebuilt-themes/purple-green.css +1 -0
  546. package/progress-bar/index.d.ts +8 -1
  547. package/progress-bar/index.metadata.json +11 -1
  548. package/progress-bar/package.json +7 -0
  549. package/progress-bar/typings/index.d.ts +4 -0
  550. package/progress-bar/typings/index.metadata.json +1 -0
  551. package/progress-bar/typings/mat-exports.d.ts +11 -0
  552. package/progress-bar/typings/progress-bar-module.d.ts +2 -0
  553. package/progress-bar/typings/progress-bar.d.ts +32 -0
  554. package/progress-bar/typings/public_api.d.ts +10 -0
  555. package/progress-bar.d.ts +8 -0
  556. package/progress-bar.metadata.json +11 -0
  557. package/progress-spinner/index.d.ts +8 -0
  558. package/progress-spinner/index.metadata.json +11 -0
  559. package/progress-spinner/package.json +7 -0
  560. package/progress-spinner/typings/index.d.ts +4 -0
  561. package/progress-spinner/typings/index.metadata.json +1 -0
  562. package/progress-spinner/typings/mat-exports.d.ts +14 -0
  563. package/progress-spinner/typings/progress-spinner-module.d.ts +2 -0
  564. package/progress-spinner/typings/progress-spinner.d.ts +98 -0
  565. package/progress-spinner/typings/public_api.d.ts +10 -0
  566. package/progress-spinner.d.ts +8 -0
  567. package/progress-spinner.metadata.json +11 -0
  568. package/radio/index.d.ts +8 -1
  569. package/radio/index.metadata.json +11 -1
  570. package/radio/package.json +7 -0
  571. package/radio/typings/index.d.ts +4 -0
  572. package/radio/typings/index.metadata.json +1 -0
  573. package/radio/typings/mat-exports.d.ts +16 -0
  574. package/radio/typings/public_api.d.ts +10 -0
  575. package/radio/typings/radio-module.d.ts +2 -0
  576. package/radio/typings/radio.d.ts +217 -0
  577. package/radio.d.ts +8 -0
  578. package/radio.metadata.json +11 -0
  579. package/select/index.d.ts +8 -5
  580. package/select/index.metadata.json +11 -1
  581. package/select/package.json +7 -0
  582. package/select/typings/index.d.ts +4 -0
  583. package/select/typings/index.metadata.json +1 -0
  584. package/select/typings/mat-exports.d.ts +17 -0
  585. package/select/typings/public_api.d.ts +11 -0
  586. package/select/typings/select-animations.d.ts +36 -0
  587. package/select/typings/select-errors.d.ts +26 -0
  588. package/select/typings/select-module.d.ts +2 -0
  589. package/select/typings/select.d.ts +412 -0
  590. package/select.d.ts +8 -0
  591. package/select.metadata.json +11 -0
  592. package/sidenav/index.d.ts +8 -1
  593. package/sidenav/index.metadata.json +11 -1
  594. package/sidenav/package.json +7 -0
  595. package/sidenav/typings/drawer.d.ts +178 -0
  596. package/sidenav/typings/index.d.ts +4 -0
  597. package/sidenav/typings/index.metadata.json +1 -0
  598. package/sidenav/typings/mat-exports.d.ts +16 -0
  599. package/sidenav/typings/public_api.d.ts +11 -0
  600. package/sidenav/typings/sidenav-module.d.ts +2 -0
  601. package/sidenav/typings/sidenav.d.ts +6 -0
  602. package/sidenav.d.ts +8 -0
  603. package/sidenav.metadata.json +11 -0
  604. package/slide-toggle/index.d.ts +8 -1
  605. package/slide-toggle/index.metadata.json +11 -1
  606. package/slide-toggle/package.json +7 -0
  607. package/slide-toggle/typings/index.d.ts +4 -0
  608. package/slide-toggle/typings/index.metadata.json +1 -0
  609. package/slide-toggle/typings/mat-exports.d.ts +14 -0
  610. package/slide-toggle/typings/public_api.d.ts +10 -0
  611. package/slide-toggle/typings/slide-toggle-module.d.ts +2 -0
  612. package/slide-toggle/typings/slide-toggle.d.ts +93 -0
  613. package/slide-toggle.d.ts +8 -0
  614. package/slide-toggle.metadata.json +11 -0
  615. package/slider/index.d.ts +8 -1
  616. package/slider/index.metadata.json +11 -1
  617. package/slider/package.json +7 -0
  618. package/slider/typings/index.d.ts +4 -0
  619. package/slider/typings/index.metadata.json +1 -0
  620. package/slider/typings/mat-exports.d.ts +14 -0
  621. package/slider/typings/public_api.d.ts +10 -0
  622. package/slider/typings/slider-module.d.ts +2 -0
  623. package/slider/typings/slider.d.ts +207 -0
  624. package/slider.d.ts +8 -0
  625. package/slider.metadata.json +11 -0
  626. package/snack-bar/index.d.ts +8 -4
  627. package/snack-bar/index.metadata.json +11 -1
  628. package/snack-bar/package.json +7 -0
  629. package/snack-bar/typings/index.d.ts +4 -0
  630. package/snack-bar/typings/index.metadata.json +1 -0
  631. package/snack-bar/typings/mat-exports.d.ts +18 -0
  632. package/snack-bar/typings/public_api.d.ts +14 -0
  633. package/snack-bar/typings/simple-snack-bar.d.ts +18 -0
  634. package/snack-bar/typings/snack-bar-config.d.ts +38 -0
  635. package/snack-bar/typings/snack-bar-container.d.ts +61 -0
  636. package/snack-bar/typings/snack-bar-module.d.ts +2 -0
  637. package/snack-bar/typings/snack-bar-ref.d.ts +51 -0
  638. package/snack-bar/typings/snack-bar.d.ts +70 -0
  639. package/snack-bar.d.ts +8 -0
  640. package/snack-bar.metadata.json +11 -0
  641. package/sort/index.d.ts +8 -0
  642. package/sort/index.metadata.json +11 -0
  643. package/sort/package.json +7 -0
  644. package/sort/typings/index.d.ts +4 -0
  645. package/sort/typings/index.metadata.json +1 -0
  646. package/sort/typings/mat-exports.d.ts +16 -0
  647. package/sort/typings/public_api.d.ts +13 -0
  648. package/sort/typings/sort-direction.d.ts +8 -0
  649. package/sort/typings/sort-errors.d.ts +13 -0
  650. package/sort/typings/sort-header-intl.d.ts +17 -0
  651. package/sort/typings/sort-header.d.ts +44 -0
  652. package/sort/typings/sort-module.d.ts +2 -0
  653. package/sort/typings/sort.d.ts +59 -0
  654. package/sort.d.ts +8 -0
  655. package/sort.metadata.json +11 -0
  656. package/stepper/index.d.ts +8 -0
  657. package/stepper/index.metadata.json +11 -0
  658. package/stepper/package.json +7 -0
  659. package/stepper/typings/index.d.ts +4 -0
  660. package/stepper/typings/index.metadata.json +1 -0
  661. package/stepper/typings/mat-exports.d.ts +21 -0
  662. package/stepper/typings/public_api.d.ts +13 -0
  663. package/stepper/typings/step-header.d.ts +23 -0
  664. package/stepper/typings/step-label.d.ts +14 -0
  665. package/stepper/typings/stepper-button.d.ts +10 -0
  666. package/stepper/typings/stepper-module.d.ts +2 -0
  667. package/stepper/typings/stepper.d.ts +27 -0
  668. package/stepper.d.ts +8 -0
  669. package/stepper.metadata.json +11 -0
  670. package/table/index.d.ts +8 -0
  671. package/table/index.metadata.json +11 -0
  672. package/table/package.json +7 -0
  673. package/table/typings/cell.d.ts +44 -0
  674. package/table/typings/index.d.ts +4 -0
  675. package/table/typings/index.metadata.json +1 -0
  676. package/table/typings/mat-exports.d.ts +20 -0
  677. package/table/typings/public_api.d.ts +12 -0
  678. package/table/typings/row.d.ts +30 -0
  679. package/table/typings/table-module.d.ts +2 -0
  680. package/table/typings/table.d.ts +8 -0
  681. package/table.d.ts +8 -0
  682. package/table.metadata.json +11 -0
  683. package/tabs/index.d.ts +8 -1
  684. package/tabs/index.metadata.json +11 -1
  685. package/tabs/package.json +7 -0
  686. package/tabs/typings/index.d.ts +8 -0
  687. package/tabs/typings/index.metadata.json +1 -0
  688. package/tabs/typings/ink-bar.d.ts +33 -0
  689. package/tabs/typings/mat-exports.d.ts +31 -0
  690. package/tabs/typings/public_api.d.ts +17 -0
  691. package/tabs/typings/tab-body.d.ts +69 -0
  692. package/tabs/typings/tab-group.d.ts +100 -0
  693. package/tabs/typings/tab-header.d.ts +156 -0
  694. package/tabs/typings/tab-label-wrapper.d.ts +25 -0
  695. package/tabs/typings/tab-label.d.ts +15 -0
  696. package/tabs/typings/tab-nav-bar/index.d.ts +8 -0
  697. package/tabs/typings/tab-nav-bar/tab-nav-bar.d.ts +77 -0
  698. package/tabs/typings/tab.d.ts +50 -0
  699. package/tabs/typings/tabs-module.d.ts +2 -0
  700. package/tabs.d.ts +8 -0
  701. package/tabs.metadata.json +11 -0
  702. package/toolbar/index.d.ts +8 -1
  703. package/toolbar/index.metadata.json +11 -1
  704. package/toolbar/package.json +7 -0
  705. package/toolbar/typings/index.d.ts +4 -0
  706. package/toolbar/typings/index.metadata.json +1 -0
  707. package/toolbar/typings/mat-exports.d.ts +13 -0
  708. package/toolbar/typings/public_api.d.ts +10 -0
  709. package/toolbar/typings/toolbar-module.d.ts +2 -0
  710. package/toolbar/typings/toolbar.d.ts +21 -0
  711. package/toolbar.d.ts +8 -0
  712. package/toolbar.metadata.json +11 -0
  713. package/tooltip/index.d.ts +8 -1
  714. package/tooltip/index.metadata.json +11 -1
  715. package/tooltip/package.json +7 -0
  716. package/tooltip/typings/index.d.ts +4 -0
  717. package/tooltip/typings/index.metadata.json +1 -0
  718. package/tooltip/typings/mat-exports.d.ts +14 -0
  719. package/tooltip/typings/public_api.d.ts +10 -0
  720. package/tooltip/typings/tooltip-module.d.ts +2 -0
  721. package/tooltip/typings/tooltip.d.ts +177 -0
  722. package/tooltip.d.ts +8 -0
  723. package/tooltip.metadata.json +11 -0
  724. package/typings/autocomplete/autocomplete-module.d.ts +2 -0
  725. package/typings/autocomplete/autocomplete-trigger.d.ts +159 -0
  726. package/typings/autocomplete/autocomplete.d.ts +55 -0
  727. package/typings/autocomplete/index.d.ts +4 -0
  728. package/typings/autocomplete/index.metadata.json +1 -0
  729. package/typings/autocomplete/mat-exports.d.ts +17 -0
  730. package/typings/autocomplete/public_api.d.ts +11 -0
  731. package/typings/button/button-module.d.ts +2 -0
  732. package/typings/button/button.d.ts +80 -0
  733. package/typings/button/index.d.ts +4 -0
  734. package/typings/button/index.metadata.json +1 -0
  735. package/typings/button/mat-exports.d.ts +18 -0
  736. package/typings/button/public_api.d.ts +10 -0
  737. package/typings/button-toggle/button-toggle-module.d.ts +2 -0
  738. package/typings/button-toggle/button-toggle.d.ts +156 -0
  739. package/typings/button-toggle/index.d.ts +4 -0
  740. package/typings/button-toggle/index.metadata.json +1 -0
  741. package/typings/button-toggle/mat-exports.d.ts +16 -0
  742. package/typings/button-toggle/public_api.d.ts +10 -0
  743. package/typings/card/card-module.d.ts +2 -0
  744. package/typings/card/card.d.ts +95 -0
  745. package/typings/card/index.d.ts +4 -0
  746. package/typings/card/index.metadata.json +1 -0
  747. package/typings/card/mat-exports.d.ts +24 -0
  748. package/typings/card/public_api.d.ts +10 -0
  749. package/typings/checkbox/checkbox-module.d.ts +2 -0
  750. package/typings/checkbox/checkbox-required-validator.d.ts +18 -0
  751. package/typings/checkbox/checkbox.d.ts +159 -0
  752. package/typings/checkbox/index.d.ts +4 -0
  753. package/typings/checkbox/index.metadata.json +1 -0
  754. package/typings/checkbox/mat-exports.d.ts +17 -0
  755. package/typings/checkbox/public_api.d.ts +11 -0
  756. package/typings/chips/chip-input.d.ts +54 -0
  757. package/typings/chips/chip-list.d.ts +219 -0
  758. package/typings/chips/chip.d.ts +123 -0
  759. package/typings/chips/chips-module.d.ts +2 -0
  760. package/typings/chips/index.d.ts +4 -0
  761. package/typings/chips/index.metadata.json +1 -0
  762. package/typings/chips/mat-exports.d.ts +21 -0
  763. package/typings/chips/public_api.d.ts +12 -0
  764. package/typings/core/a11y/index.d.ts +8 -0
  765. package/typings/core/animation/animation.d.ts +20 -0
  766. package/typings/core/bidi/index.d.ts +8 -0
  767. package/typings/core/common-behaviors/color.d.ts +22 -0
  768. package/typings/core/common-behaviors/common-module.d.ts +24 -0
  769. package/typings/core/common-behaviors/constructor.d.ts +9 -0
  770. package/typings/core/common-behaviors/disable-ripple.d.ts +7 -0
  771. package/typings/core/common-behaviors/disabled.d.ts +7 -0
  772. package/typings/core/common-behaviors/index.d.ts +12 -0
  773. package/typings/core/common-behaviors/tabindex.d.ts +15 -0
  774. package/typings/core/compatibility/compatibility.d.ts +40 -0
  775. package/typings/core/coordination/unique-selection-dispatcher.d.ts +40 -0
  776. package/typings/core/datetime/date-adapter.d.ts +198 -0
  777. package/typings/core/datetime/date-formats.d.ts +20 -0
  778. package/typings/core/datetime/index.d.ts +8 -0
  779. package/typings/core/datetime/native-date-adapter.d.ts +50 -0
  780. package/typings/core/datetime/native-date-formats.d.ts +9 -0
  781. package/typings/core/error/error-options.d.ts +19 -0
  782. package/typings/core/gestures/gesture-annotations.d.ts +51 -0
  783. package/typings/core/gestures/gesture-config.d.ts +23 -0
  784. package/typings/core/index.d.ts +5 -0
  785. package/typings/core/index.metadata.json +1 -0
  786. package/typings/core/keyboard/keycodes.d.ts +8 -0
  787. package/typings/core/line/line.d.ts +30 -0
  788. package/typings/core/mat-exports.d.ts +36 -0
  789. package/typings/core/option/index.d.ts +4 -0
  790. package/typings/core/option/optgroup.d.ts +14 -0
  791. package/typings/core/option/option.d.ts +97 -0
  792. package/typings/core/overlay/index.d.ts +8 -0
  793. package/typings/core/placeholder/placeholder-options.d.ts +15 -0
  794. package/typings/core/platform/features.d.ts +8 -0
  795. package/typings/core/platform/index.d.ts +10 -0
  796. package/typings/core/platform/platform.d.ts +8 -0
  797. package/typings/core/portal/dom-portal-host.d.ts +8 -0
  798. package/typings/core/portal/portal-directives.d.ts +8 -0
  799. package/typings/core/portal/portal-injector.d.ts +19 -0
  800. package/typings/core/portal/portal.d.ts +8 -0
  801. package/typings/core/public_api.d.ts +34 -0
  802. package/typings/core/ripple/index.d.ts +5 -0
  803. package/typings/core/ripple/ripple-ref.d.ts +28 -0
  804. package/typings/core/ripple/ripple-renderer.d.ts +64 -0
  805. package/typings/core/ripple/ripple.d.ts +73 -0
  806. package/typings/core/rxjs/index.d.ts +9 -0
  807. package/typings/core/rxjs/rx-chain.d.ts +8 -0
  808. package/typings/core/rxjs/rx-operators.d.ts +8 -0
  809. package/typings/core/selection/index.d.ts +3 -0
  810. package/typings/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +20 -0
  811. package/typings/core/style/apply-transform.d.ts +13 -0
  812. package/typings/core/style/index.d.ts +5 -0
  813. package/typings/core/testing/month-constants.d.ts +12 -0
  814. package/typings/core/util/object-extend.d.ts +15 -0
  815. package/typings/datepicker/calendar-body.d.ts +52 -0
  816. package/typings/datepicker/calendar.d.ts +90 -0
  817. package/typings/datepicker/coerce-date-property.d.ts +19 -0
  818. package/typings/datepicker/datepicker-errors.d.ts +9 -0
  819. package/typings/datepicker/datepicker-input.d.ts +94 -0
  820. package/typings/datepicker/datepicker-intl.d.ts +25 -0
  821. package/typings/datepicker/datepicker-module.d.ts +2 -0
  822. package/typings/datepicker/datepicker-toggle.d.ts +24 -0
  823. package/typings/datepicker/datepicker.d.ts +117 -0
  824. package/typings/datepicker/index.d.ts +4 -0
  825. package/typings/datepicker/index.metadata.json +1 -0
  826. package/typings/datepicker/mat-exports.d.ts +33 -0
  827. package/typings/datepicker/month-view.d.ts +65 -0
  828. package/typings/datepicker/public_api.d.ts +18 -0
  829. package/typings/datepicker/year-view.d.ts +54 -0
  830. package/typings/dialog/dialog-config.d.ts +54 -0
  831. package/typings/dialog/dialog-container.d.ts +68 -0
  832. package/typings/dialog/dialog-content-directives.d.ts +45 -0
  833. package/typings/dialog/dialog-module.d.ts +2 -0
  834. package/typings/dialog/dialog-ref.d.ts +68 -0
  835. package/typings/dialog/dialog.d.ts +108 -0
  836. package/typings/dialog/index.d.ts +4 -0
  837. package/typings/dialog/index.metadata.json +1 -0
  838. package/typings/dialog/mat-exports.d.ts +26 -0
  839. package/typings/dialog/public_api.d.ts +14 -0
  840. package/typings/expansion/accordion-item.d.ts +41 -0
  841. package/typings/expansion/accordion.d.ts +29 -0
  842. package/typings/expansion/expansion-module.d.ts +2 -0
  843. package/typings/expansion/expansion-panel-header.d.ts +56 -0
  844. package/typings/expansion/expansion-panel.d.ts +39 -0
  845. package/typings/expansion/index.d.ts +5 -0
  846. package/typings/expansion/index.metadata.json +1 -0
  847. package/typings/expansion/mat-exports.d.ts +20 -0
  848. package/typings/expansion/public_api.d.ts +13 -0
  849. package/typings/form-field/error.d.ts +4 -0
  850. package/typings/form-field/form-field-control.d.ts +39 -0
  851. package/typings/form-field/form-field-errors.d.ts +13 -0
  852. package/typings/form-field/form-field-module.d.ts +2 -0
  853. package/typings/form-field/form-field.d.ts +77 -0
  854. package/typings/form-field/hint.d.ts +7 -0
  855. package/typings/form-field/index.d.ts +4 -0
  856. package/typings/form-field/index.metadata.json +1 -0
  857. package/typings/form-field/mat-exports.d.ts +23 -0
  858. package/typings/form-field/placeholder.d.ts +3 -0
  859. package/typings/form-field/prefix.d.ts +3 -0
  860. package/typings/form-field/public_api.d.ts +17 -0
  861. package/typings/form-field/suffix.d.ts +3 -0
  862. package/typings/grid-list/grid-list-measure.d.ts +17 -0
  863. package/typings/grid-list/grid-list-module.d.ts +2 -0
  864. package/typings/grid-list/grid-list.d.ts +53 -0
  865. package/typings/grid-list/grid-tile.d.ts +55 -0
  866. package/typings/grid-list/index.d.ts +5 -0
  867. package/typings/grid-list/index.metadata.json +1 -0
  868. package/typings/grid-list/mat-exports.d.ts +13 -0
  869. package/typings/grid-list/public_api.d.ts +11 -0
  870. package/typings/grid-list/tile-coordinator.d.ts +64 -0
  871. package/typings/grid-list/tile-styler.d.ts +129 -0
  872. package/typings/icon/icon-module.d.ts +2 -0
  873. package/typings/icon/icon-registry.d.ts +194 -0
  874. package/typings/icon/icon.d.ts +76 -0
  875. package/typings/icon/index.d.ts +4 -0
  876. package/typings/icon/index.metadata.json +1 -0
  877. package/typings/icon/mat-exports.d.ts +14 -0
  878. package/typings/icon/public_api.d.ts +11 -0
  879. package/typings/index.d.ts +4 -0
  880. package/typings/index.metadata.json +26 -0
  881. package/typings/input/autosize.d.ts +45 -0
  882. package/typings/input/index.d.ts +4 -0
  883. package/typings/input/index.metadata.json +1 -0
  884. package/typings/input/input-errors.d.ts +9 -0
  885. package/typings/input/input-module.d.ts +2 -0
  886. package/typings/input/input.d.ts +78 -0
  887. package/typings/input/mat-exports.d.ts +13 -0
  888. package/typings/input/public_api.d.ts +12 -0
  889. package/typings/list/index.d.ts +4 -0
  890. package/typings/list/index.metadata.json +1 -0
  891. package/typings/list/list-module.d.ts +2 -0
  892. package/typings/list/list.d.ts +78 -0
  893. package/typings/list/mat-exports.d.ts +27 -0
  894. package/typings/list/public_api.d.ts +11 -0
  895. package/typings/list/selection-list.d.ts +112 -0
  896. package/typings/menu/index.d.ts +6 -0
  897. package/typings/menu/index.metadata.json +1 -0
  898. package/typings/menu/mat-exports.d.ts +16 -0
  899. package/typings/menu/menu-animations.d.ts +27 -0
  900. package/typings/menu/menu-directive.d.ts +86 -0
  901. package/typings/menu/menu-errors.d.ts +24 -0
  902. package/typings/menu/menu-item.d.ts +40 -0
  903. package/typings/menu/menu-module.d.ts +2 -0
  904. package/typings/menu/menu-panel.d.ts +22 -0
  905. package/typings/menu/menu-positions.d.ts +9 -0
  906. package/typings/menu/menu-trigger.d.ts +116 -0
  907. package/typings/menu/menu.d.ts +12 -0
  908. package/typings/menu/public_api.d.ts +12 -0
  909. package/typings/paginator/index.d.ts +4 -0
  910. package/typings/paginator/index.metadata.json +1 -0
  911. package/typings/paginator/mat-exports.d.ts +13 -0
  912. package/typings/paginator/paginator-intl.d.ts +20 -0
  913. package/typings/paginator/paginator-module.d.ts +2 -0
  914. package/typings/paginator/paginator.d.ts +75 -0
  915. package/typings/paginator/public_api.d.ts +11 -0
  916. package/typings/progress-bar/index.d.ts +4 -0
  917. package/typings/progress-bar/index.metadata.json +1 -0
  918. package/typings/progress-bar/mat-exports.d.ts +11 -0
  919. package/typings/progress-bar/progress-bar-module.d.ts +2 -0
  920. package/typings/progress-bar/progress-bar.d.ts +32 -0
  921. package/typings/progress-bar/public_api.d.ts +10 -0
  922. package/typings/progress-spinner/index.d.ts +4 -0
  923. package/typings/progress-spinner/index.metadata.json +1 -0
  924. package/typings/progress-spinner/mat-exports.d.ts +14 -0
  925. package/typings/progress-spinner/progress-spinner-module.d.ts +2 -0
  926. package/typings/progress-spinner/progress-spinner.d.ts +98 -0
  927. package/typings/progress-spinner/public_api.d.ts +10 -0
  928. package/typings/public_api.d.ts +39 -0
  929. package/typings/radio/index.d.ts +4 -0
  930. package/typings/radio/index.metadata.json +1 -0
  931. package/typings/radio/mat-exports.d.ts +16 -0
  932. package/typings/radio/public_api.d.ts +10 -0
  933. package/typings/radio/radio-module.d.ts +2 -0
  934. package/typings/radio/radio.d.ts +217 -0
  935. package/typings/select/index.d.ts +4 -0
  936. package/typings/select/index.metadata.json +1 -0
  937. package/typings/select/mat-exports.d.ts +17 -0
  938. package/typings/select/public_api.d.ts +11 -0
  939. package/typings/select/select-animations.d.ts +36 -0
  940. package/typings/select/select-errors.d.ts +26 -0
  941. package/typings/select/select-module.d.ts +2 -0
  942. package/typings/select/select.d.ts +412 -0
  943. package/typings/sidenav/drawer.d.ts +178 -0
  944. package/typings/sidenav/index.d.ts +4 -0
  945. package/typings/sidenav/index.metadata.json +1 -0
  946. package/typings/sidenav/mat-exports.d.ts +16 -0
  947. package/typings/sidenav/public_api.d.ts +11 -0
  948. package/typings/sidenav/sidenav-module.d.ts +2 -0
  949. package/typings/sidenav/sidenav.d.ts +6 -0
  950. package/typings/slide-toggle/index.d.ts +4 -0
  951. package/typings/slide-toggle/index.metadata.json +1 -0
  952. package/typings/slide-toggle/mat-exports.d.ts +14 -0
  953. package/typings/slide-toggle/public_api.d.ts +10 -0
  954. package/typings/slide-toggle/slide-toggle-module.d.ts +2 -0
  955. package/typings/slide-toggle/slide-toggle.d.ts +93 -0
  956. package/typings/slider/index.d.ts +4 -0
  957. package/typings/slider/index.metadata.json +1 -0
  958. package/typings/slider/mat-exports.d.ts +14 -0
  959. package/typings/slider/public_api.d.ts +10 -0
  960. package/typings/slider/slider-module.d.ts +2 -0
  961. package/typings/slider/slider.d.ts +207 -0
  962. package/typings/snack-bar/index.d.ts +4 -0
  963. package/typings/snack-bar/index.metadata.json +1 -0
  964. package/typings/snack-bar/mat-exports.d.ts +18 -0
  965. package/typings/snack-bar/public_api.d.ts +14 -0
  966. package/typings/snack-bar/simple-snack-bar.d.ts +18 -0
  967. package/typings/snack-bar/snack-bar-config.d.ts +38 -0
  968. package/typings/snack-bar/snack-bar-container.d.ts +61 -0
  969. package/typings/snack-bar/snack-bar-module.d.ts +2 -0
  970. package/typings/snack-bar/snack-bar-ref.d.ts +51 -0
  971. package/typings/snack-bar/snack-bar.d.ts +70 -0
  972. package/typings/sort/index.d.ts +4 -0
  973. package/typings/sort/index.metadata.json +1 -0
  974. package/typings/sort/mat-exports.d.ts +16 -0
  975. package/typings/sort/public_api.d.ts +13 -0
  976. package/typings/sort/sort-direction.d.ts +8 -0
  977. package/typings/sort/sort-errors.d.ts +13 -0
  978. package/typings/sort/sort-header-intl.d.ts +17 -0
  979. package/typings/sort/sort-header.d.ts +44 -0
  980. package/typings/sort/sort-module.d.ts +2 -0
  981. package/typings/sort/sort.d.ts +59 -0
  982. package/typings/stepper/index.d.ts +4 -0
  983. package/typings/stepper/index.metadata.json +1 -0
  984. package/typings/stepper/mat-exports.d.ts +21 -0
  985. package/typings/stepper/public_api.d.ts +13 -0
  986. package/typings/stepper/step-header.d.ts +23 -0
  987. package/typings/stepper/step-label.d.ts +14 -0
  988. package/typings/stepper/stepper-button.d.ts +10 -0
  989. package/typings/stepper/stepper-module.d.ts +2 -0
  990. package/typings/stepper/stepper.d.ts +27 -0
  991. package/typings/table/cell.d.ts +44 -0
  992. package/typings/table/index.d.ts +4 -0
  993. package/typings/table/index.metadata.json +1 -0
  994. package/typings/table/mat-exports.d.ts +20 -0
  995. package/typings/table/public_api.d.ts +12 -0
  996. package/typings/table/row.d.ts +30 -0
  997. package/typings/table/table-module.d.ts +2 -0
  998. package/typings/table/table.d.ts +8 -0
  999. package/typings/tabs/index.d.ts +8 -0
  1000. package/typings/tabs/index.metadata.json +1 -0
  1001. package/typings/tabs/ink-bar.d.ts +33 -0
  1002. package/typings/tabs/mat-exports.d.ts +31 -0
  1003. package/typings/tabs/public_api.d.ts +17 -0
  1004. package/typings/tabs/tab-body.d.ts +69 -0
  1005. package/typings/tabs/tab-group.d.ts +100 -0
  1006. package/typings/tabs/tab-header.d.ts +156 -0
  1007. package/typings/tabs/tab-label-wrapper.d.ts +25 -0
  1008. package/typings/tabs/tab-label.d.ts +15 -0
  1009. package/typings/tabs/tab-nav-bar/index.d.ts +8 -0
  1010. package/typings/tabs/tab-nav-bar/tab-nav-bar.d.ts +77 -0
  1011. package/typings/tabs/tab.d.ts +50 -0
  1012. package/typings/tabs/tabs-module.d.ts +2 -0
  1013. package/typings/toolbar/index.d.ts +4 -0
  1014. package/typings/toolbar/index.metadata.json +1 -0
  1015. package/typings/toolbar/mat-exports.d.ts +13 -0
  1016. package/typings/toolbar/public_api.d.ts +10 -0
  1017. package/typings/toolbar/toolbar-module.d.ts +2 -0
  1018. package/typings/toolbar/toolbar.d.ts +21 -0
  1019. package/typings/tooltip/index.d.ts +4 -0
  1020. package/typings/tooltip/index.metadata.json +1 -0
  1021. package/typings/tooltip/mat-exports.d.ts +14 -0
  1022. package/typings/tooltip/public_api.d.ts +10 -0
  1023. package/typings/tooltip/tooltip-module.d.ts +2 -0
  1024. package/typings/tooltip/tooltip.d.ts +177 -0
  1025. package/typings/version.d.ts +10 -0
  1026. package/button/README.md +0 -115
  1027. package/button/_button-base.scss +0 -116
  1028. package/button/_button-theme.scss +0 -85
  1029. package/button/button.css +0 -101
  1030. package/button/button.css.map +0 -1
  1031. package/button/button.d.ts +0 -35
  1032. package/button/button.html +0 -6
  1033. package/button/button.js +0 -196
  1034. package/button/button.js.map +0 -1
  1035. package/button/button.metadata.json +0 -1
  1036. package/button/button.scss +0 -72
  1037. package/button/index.js +0 -3
  1038. package/button/index.js.map +0 -1
  1039. package/button-toggle/README.md +0 -149
  1040. package/button-toggle/_button-toggle-theme.scss +0 -14
  1041. package/button-toggle/button-toggle.css +0 -24
  1042. package/button-toggle/button-toggle.css.map +0 -1
  1043. package/button-toggle/button-toggle.d.ts +0 -110
  1044. package/button-toggle/button-toggle.html +0 -14
  1045. package/button-toggle/button-toggle.js +0 -436
  1046. package/button-toggle/button-toggle.js.map +0 -1
  1047. package/button-toggle/button-toggle.metadata.json +0 -1
  1048. package/button-toggle/button-toggle.scss +0 -34
  1049. package/button-toggle/index.js +0 -3
  1050. package/button-toggle/index.js.map +0 -1
  1051. package/card/README.md +0 -116
  1052. package/card/_card-theme.scss +0 -17
  1053. package/card/card-header.html +0 -5
  1054. package/card/card-title-group.html +0 -5
  1055. package/card/card.css +0 -140
  1056. package/card/card.css.map +0 -1
  1057. package/card/card.d.ts +0 -35
  1058. package/card/card.html +0 -1
  1059. package/card/card.js +0 -187
  1060. package/card/card.js.map +0 -1
  1061. package/card/card.metadata.json +0 -1
  1062. package/card/card.scss +0 -226
  1063. package/card/index.js +0 -3
  1064. package/card/index.js.map +0 -1
  1065. package/checkbox/README.md +0 -79
  1066. package/checkbox/_checkbox-theme.scss +0 -69
  1067. package/checkbox/checkbox.css +0 -241
  1068. package/checkbox/checkbox.css.map +0 -1
  1069. package/checkbox/checkbox.d.ts +0 -127
  1070. package/checkbox/checkbox.html +0 -37
  1071. package/checkbox/checkbox.js +0 -344
  1072. package/checkbox/checkbox.js.map +0 -1
  1073. package/checkbox/checkbox.metadata.json +0 -1
  1074. package/checkbox/checkbox.scss +0 -412
  1075. package/checkbox/index.js +0 -3
  1076. package/checkbox/index.js.map +0 -1
  1077. package/core/README.md +0 -2
  1078. package/core/_core.scss +0 -27
  1079. package/core/a11y/README.md +0 -30
  1080. package/core/a11y/_a11y.scss +0 -13
  1081. package/core/a11y/focus-trap.d.ts +0 -23
  1082. package/core/a11y/focus-trap.js +0 -82
  1083. package/core/a11y/focus-trap.js.map +0 -1
  1084. package/core/a11y/focus-trap.metadata.json +0 -1
  1085. package/core/a11y/index.d.ts +0 -10
  1086. package/core/a11y/index.js +0 -37
  1087. package/core/a11y/index.js.map +0 -1
  1088. package/core/a11y/index.metadata.json +0 -1
  1089. package/core/a11y/interactivity-checker.d.ts +0 -31
  1090. package/core/a11y/interactivity-checker.js +0 -122
  1091. package/core/a11y/interactivity-checker.js.map +0 -1
  1092. package/core/a11y/interactivity-checker.metadata.json +0 -1
  1093. package/core/a11y/live-announcer.d.ts +0 -13
  1094. package/core/a11y/live-announcer.js +0 -56
  1095. package/core/a11y/live-announcer.js.map +0 -1
  1096. package/core/a11y/live-announcer.metadata.json +0 -1
  1097. package/core/annotations/field-value.d.ts +0 -16
  1098. package/core/annotations/field-value.js +0 -30
  1099. package/core/annotations/field-value.js.map +0 -1
  1100. package/core/async/promise-completer.d.ts +0 -6
  1101. package/core/async/promise-completer.js +0 -12
  1102. package/core/async/promise-completer.js.map +0 -1
  1103. package/core/coordination/unique-selection-dispatcher.d.ts +0 -17
  1104. package/core/coordination/unique-selection-dispatcher.js +0 -42
  1105. package/core/coordination/unique-selection-dispatcher.js.map +0 -1
  1106. package/core/coordination/unique-selection-dispatcher.metadata.json +0 -1
  1107. package/core/core.d.ts +0 -28
  1108. package/core/core.js +0 -71
  1109. package/core/core.js.map +0 -1
  1110. package/core/core.metadata.json +0 -1
  1111. package/core/errors/error.d.ts +0 -6
  1112. package/core/errors/error.js +0 -19
  1113. package/core/errors/error.js.map +0 -1
  1114. package/core/gestures/MdGestureConfig.d.ts +0 -7
  1115. package/core/gestures/MdGestureConfig.js +0 -84
  1116. package/core/gestures/MdGestureConfig.js.map +0 -1
  1117. package/core/gestures/MdGestureConfig.metadata.json +0 -1
  1118. package/core/index.js +0 -3
  1119. package/core/index.js.map +0 -1
  1120. package/core/keyboard/keycodes.d.ts +0 -6
  1121. package/core/keyboard/keycodes.js +0 -12
  1122. package/core/keyboard/keycodes.js.map +0 -1
  1123. package/core/keyboard/keycodes.metadata.json +0 -1
  1124. package/core/line/line.d.ts +0 -19
  1125. package/core/line/line.js +0 -65
  1126. package/core/line/line.js.map +0 -1
  1127. package/core/line/line.metadata.json +0 -1
  1128. package/core/overlay/generic-component-type.d.ts +0 -3
  1129. package/core/overlay/generic-component-type.js +0 -3
  1130. package/core/overlay/generic-component-type.js.map +0 -1
  1131. package/core/overlay/overlay-container.d.ts +0 -19
  1132. package/core/overlay/overlay-container.js +0 -33
  1133. package/core/overlay/overlay-container.js.map +0 -1
  1134. package/core/overlay/overlay-directives.d.ts +0 -36
  1135. package/core/overlay/overlay-directives.js +0 -120
  1136. package/core/overlay/overlay-directives.js.map +0 -1
  1137. package/core/overlay/overlay-directives.metadata.json +0 -1
  1138. package/core/overlay/overlay-ref.d.ts +0 -28
  1139. package/core/overlay/overlay-ref.js +0 -82
  1140. package/core/overlay/overlay-ref.js.map +0 -1
  1141. package/core/overlay/overlay-state.d.ts +0 -11
  1142. package/core/overlay/overlay-state.js +0 -13
  1143. package/core/overlay/overlay-state.js.map +0 -1
  1144. package/core/overlay/overlay.css +0 -2
  1145. package/core/overlay/overlay.css.map +0 -1
  1146. package/core/overlay/overlay.d.ts +0 -51
  1147. package/core/overlay/overlay.js +0 -93
  1148. package/core/overlay/overlay.js.map +0 -1
  1149. package/core/overlay/overlay.metadata.json +0 -1
  1150. package/core/overlay/overlay.scss +0 -55
  1151. package/core/overlay/position/connected-position-strategy.d.ts +0 -69
  1152. package/core/overlay/position/connected-position-strategy.js +0 -164
  1153. package/core/overlay/position/connected-position-strategy.js.map +0 -1
  1154. package/core/overlay/position/connected-position.d.ts +0 -22
  1155. package/core/overlay/position/connected-position.js +0 -12
  1156. package/core/overlay/position/connected-position.js.map +0 -1
  1157. package/core/overlay/position/global-position-strategy.d.ts +0 -45
  1158. package/core/overlay/position/global-position-strategy.js +0 -102
  1159. package/core/overlay/position/global-position-strategy.js.map +0 -1
  1160. package/core/overlay/position/overlay-position-builder.d.ts +0 -14
  1161. package/core/overlay/position/overlay-position-builder.js +0 -34
  1162. package/core/overlay/position/overlay-position-builder.js.map +0 -1
  1163. package/core/overlay/position/overlay-position-builder.metadata.json +0 -1
  1164. package/core/overlay/position/position-strategy.d.ts +0 -5
  1165. package/core/overlay/position/position-strategy.js +0 -3
  1166. package/core/overlay/position/position-strategy.js.map +0 -1
  1167. package/core/overlay/position/relative-position-strategy.d.ts +0 -7
  1168. package/core/overlay/position/relative-position-strategy.js +0 -12
  1169. package/core/overlay/position/relative-position-strategy.js.map +0 -1
  1170. package/core/overlay/position/viewport-ruler.d.ts +0 -16
  1171. package/core/overlay/position/viewport-ruler.js +0 -71
  1172. package/core/overlay/position/viewport-ruler.js.map +0 -1
  1173. package/core/overlay/position/viewport-ruler.metadata.json +0 -1
  1174. package/core/portal/README.md +0 -72
  1175. package/core/portal/dom-portal-host.d.ts +0 -17
  1176. package/core/portal/dom-portal-host.js +0 -56
  1177. package/core/portal/dom-portal-host.js.map +0 -1
  1178. package/core/portal/portal-directives.d.ts +0 -38
  1179. package/core/portal/portal-directives.js +0 -124
  1180. package/core/portal/portal-directives.js.map +0 -1
  1181. package/core/portal/portal-directives.metadata.json +0 -1
  1182. package/core/portal/portal-errors.d.ts +0 -29
  1183. package/core/portal/portal-errors.js +0 -66
  1184. package/core/portal/portal-errors.js.map +0 -1
  1185. package/core/portal/portal.d.ts +0 -85
  1186. package/core/portal/portal.js +0 -155
  1187. package/core/portal/portal.js.map +0 -1
  1188. package/core/ripple/README.md +0 -27
  1189. package/core/ripple/_ripple.scss +0 -106
  1190. package/core/ripple/ripple-renderer.d.ts +0 -65
  1191. package/core/ripple/ripple-renderer.js +0 -149
  1192. package/core/ripple/ripple-renderer.js.map +0 -1
  1193. package/core/ripple/ripple-renderer.metadata.json +0 -1
  1194. package/core/ripple/ripple.d.ts +0 -75
  1195. package/core/ripple/ripple.js +0 -179
  1196. package/core/ripple/ripple.js.map +0 -1
  1197. package/core/ripple/ripple.metadata.json +0 -1
  1198. package/core/rtl/dir.d.ts +0 -17
  1199. package/core/rtl/dir.js +0 -83
  1200. package/core/rtl/dir.js.map +0 -1
  1201. package/core/rtl/dir.metadata.json +0 -1
  1202. package/core/style/_button-common.scss +0 -7
  1203. package/core/style/_elevation.scss +0 -174
  1204. package/core/style/_list-common.scss +0 -49
  1205. package/core/style/_sidenav-common.scss +0 -8
  1206. package/core/style/_variables.scss +0 -55
  1207. package/core/style/apply-transform.d.ts +0 -6
  1208. package/core/style/apply-transform.js +0 -14
  1209. package/core/style/apply-transform.js.map +0 -1
  1210. package/core/theming/_all-theme.scss +0 -46
  1211. package/core/theming/_palette.scss +0 -694
  1212. package/core/theming/_theming.scss +0 -84
  1213. package/core/theming/prebuilt/deeppurple-amber.css +0 -446
  1214. package/core/theming/prebuilt/deeppurple-amber.css.map +0 -1
  1215. package/core/theming/prebuilt/deeppurple-amber.scss +0 -14
  1216. package/core/theming/prebuilt/indigo-pink.css +0 -446
  1217. package/core/theming/prebuilt/indigo-pink.css.map +0 -1
  1218. package/core/theming/prebuilt/indigo-pink.scss +0 -14
  1219. package/core/theming/prebuilt/pink-bluegrey.css +0 -446
  1220. package/core/theming/prebuilt/pink-bluegrey.css.map +0 -1
  1221. package/core/theming/prebuilt/pink-bluegrey.scss +0 -14
  1222. package/core/theming/prebuilt/purple-green.css +0 -446
  1223. package/core/theming/prebuilt/purple-green.css.map +0 -1
  1224. package/core/theming/prebuilt/purple-green.scss +0 -14
  1225. package/core/typography/_typography.scss +0 -6
  1226. package/core.js +0 -3
  1227. package/core.js.map +0 -1
  1228. package/dialog/README.md +0 -0
  1229. package/dialog/_dialog-theme.scss +0 -11
  1230. package/dialog/dialog-config.d.ts +0 -11
  1231. package/dialog/dialog-config.js +0 -12
  1232. package/dialog/dialog-config.js.map +0 -1
  1233. package/dialog/dialog-container.css +0 -7
  1234. package/dialog/dialog-container.css.map +0 -1
  1235. package/dialog/dialog-container.d.ts +0 -29
  1236. package/dialog/dialog-container.html +0 -3
  1237. package/dialog/dialog-container.js +0 -88
  1238. package/dialog/dialog-container.js.map +0 -1
  1239. package/dialog/dialog-container.metadata.json +0 -1
  1240. package/dialog/dialog-container.scss +0 -12
  1241. package/dialog/dialog-errors.d.ts +0 -5
  1242. package/dialog/dialog-errors.js +0 -16
  1243. package/dialog/dialog-errors.js.map +0 -1
  1244. package/dialog/dialog-injector.d.ts +0 -9
  1245. package/dialog/dialog-injector.js +0 -17
  1246. package/dialog/dialog-injector.js.map +0 -1
  1247. package/dialog/dialog-ref.d.ts +0 -20
  1248. package/dialog/dialog-ref.js +0 -29
  1249. package/dialog/dialog-ref.js.map +0 -1
  1250. package/dialog/dialog.d.ts +0 -51
  1251. package/dialog/dialog.js +0 -128
  1252. package/dialog/dialog.js.map +0 -1
  1253. package/dialog/dialog.metadata.json +0 -1
  1254. package/dialog/index.js +0 -6
  1255. package/dialog/index.js.map +0 -1
  1256. package/grid-list/README.md +0 -118
  1257. package/grid-list/_grid-list-theme.scss +0 -6
  1258. package/grid-list/grid-list-errors.d.ts +0 -19
  1259. package/grid-list/grid-list-errors.js +0 -38
  1260. package/grid-list/grid-list-errors.js.map +0 -1
  1261. package/grid-list/grid-list-measure.d.ts +0 -10
  1262. package/grid-list/grid-list-measure.js +0 -16
  1263. package/grid-list/grid-list-measure.js.map +0 -1
  1264. package/grid-list/grid-list-measure.metadata.json +0 -1
  1265. package/grid-list/grid-list.css +0 -78
  1266. package/grid-list/grid-list.css.map +0 -1
  1267. package/grid-list/grid-list.d.ts +0 -49
  1268. package/grid-list/grid-list.html +0 -3
  1269. package/grid-list/grid-list.js +0 -165
  1270. package/grid-list/grid-list.js.map +0 -1
  1271. package/grid-list/grid-list.metadata.json +0 -1
  1272. package/grid-list/grid-list.scss +0 -91
  1273. package/grid-list/grid-tile-text.html +0 -3
  1274. package/grid-list/grid-tile.d.ts +0 -28
  1275. package/grid-list/grid-tile.html +0 -4
  1276. package/grid-list/grid-tile.js +0 -87
  1277. package/grid-list/grid-tile.js.map +0 -1
  1278. package/grid-list/grid-tile.metadata.json +0 -1
  1279. package/grid-list/index.js +0 -3
  1280. package/grid-list/index.js.map +0 -1
  1281. package/grid-list/tile-coordinator.d.ts +0 -51
  1282. package/grid-list/tile-coordinator.js +0 -124
  1283. package/grid-list/tile-coordinator.js.map +0 -1
  1284. package/grid-list/tile-styler.d.ts +0 -88
  1285. package/grid-list/tile-styler.js +0 -190
  1286. package/grid-list/tile-styler.js.map +0 -1
  1287. package/icon/README.md +0 -116
  1288. package/icon/_icon-theme.scss +0 -6
  1289. package/icon/fake-svgs.d.ts +0 -5
  1290. package/icon/fake-svgs.js +0 -29
  1291. package/icon/fake-svgs.js.map +0 -1
  1292. package/icon/icon-registry.d.ts +0 -148
  1293. package/icon/icon-registry.js +0 -375
  1294. package/icon/icon-registry.js.map +0 -1
  1295. package/icon/icon-registry.metadata.json +0 -1
  1296. package/icon/icon.css +0 -8
  1297. package/icon/icon.css.map +0 -1
  1298. package/icon/icon.d.ts +0 -85
  1299. package/icon/icon.js +0 -252
  1300. package/icon/icon.js.map +0 -1
  1301. package/icon/icon.metadata.json +0 -1
  1302. package/icon/icon.scss +0 -13
  1303. package/icon/index.js +0 -3
  1304. package/icon/index.js.map +0 -1
  1305. package/index.d.ts +0 -23
  1306. package/index.js +0 -25
  1307. package/index.js.map +0 -1
  1308. package/index.metadata.json +0 -1
  1309. package/input/README.md +0 -121
  1310. package/input/_input-theme.scss +0 -64
  1311. package/input/index.js +0 -3
  1312. package/input/index.js.map +0 -1
  1313. package/input/input.css +0 -109
  1314. package/input/input.css.map +0 -1
  1315. package/input/input.d.ts +0 -134
  1316. package/input/input.html +0 -65
  1317. package/input/input.js +0 -471
  1318. package/input/input.js.map +0 -1
  1319. package/input/input.metadata.json +0 -1
  1320. package/input/input.scss +0 -198
  1321. package/list/README.md +0 -167
  1322. package/list/_list-theme.scss +0 -28
  1323. package/list/index.js +0 -3
  1324. package/list/index.js.map +0 -1
  1325. package/list/list-item.html +0 -5
  1326. package/list/list.css +0 -139
  1327. package/list/list.css.map +0 -1
  1328. package/list/list.d.ts +0 -24
  1329. package/list/list.js +0 -113
  1330. package/list/list.js.map +0 -1
  1331. package/list/list.metadata.json +0 -1
  1332. package/list/list.scss +0 -168
  1333. package/material.umd.js +0 -9017
  1334. package/material.umd.js.map +0 -1
  1335. package/menu/README.md +0 -164
  1336. package/menu/_menu-theme.scss +0 -25
  1337. package/menu/index.js +0 -3
  1338. package/menu/index.js.map +0 -1
  1339. package/menu/menu-directive.d.ts +0 -54
  1340. package/menu/menu-directive.js +0 -158
  1341. package/menu/menu-directive.js.map +0 -1
  1342. package/menu/menu-directive.metadata.json +0 -1
  1343. package/menu/menu-errors.d.ts +0 -21
  1344. package/menu/menu-errors.js +0 -40
  1345. package/menu/menu-errors.js.map +0 -1
  1346. package/menu/menu-item.d.ts +0 -18
  1347. package/menu/menu-item.js +0 -74
  1348. package/menu/menu-item.js.map +0 -1
  1349. package/menu/menu-item.metadata.json +0 -1
  1350. package/menu/menu-positions.d.ts +0 -2
  1351. package/menu/menu-positions.js +0 -3
  1352. package/menu/menu-positions.js.map +0 -1
  1353. package/menu/menu-trigger.d.ts +0 -62
  1354. package/menu/menu-trigger.js +0 -169
  1355. package/menu/menu-trigger.js.map +0 -1
  1356. package/menu/menu-trigger.metadata.json +0 -1
  1357. package/menu/menu.css +0 -41
  1358. package/menu/menu.css.map +0 -1
  1359. package/menu/menu.d.ts +0 -7
  1360. package/menu/menu.html +0 -6
  1361. package/menu/menu.js +0 -39
  1362. package/menu/menu.js.map +0 -1
  1363. package/menu/menu.metadata.json +0 -1
  1364. package/menu/menu.scss +0 -59
  1365. package/module.d.ts +0 -6
  1366. package/module.js +0 -117
  1367. package/module.js.map +0 -1
  1368. package/module.metadata.json +0 -1
  1369. package/progress-bar/README.md +0 -54
  1370. package/progress-bar/_progress-bar-theme.scss +0 -78
  1371. package/progress-bar/index.js +0 -3
  1372. package/progress-bar/index.js.map +0 -1
  1373. package/progress-bar/progress-bar.css +0 -114
  1374. package/progress-bar/progress-bar.css.map +0 -1
  1375. package/progress-bar/progress-bar.d.ts +0 -34
  1376. package/progress-bar/progress-bar.html +0 -5
  1377. package/progress-bar/progress-bar.js +0 -122
  1378. package/progress-bar/progress-bar.js.map +0 -1
  1379. package/progress-bar/progress-bar.metadata.json +0 -1
  1380. package/progress-bar/progress-bar.scss +0 -229
  1381. package/progress-circle/README.md +0 -51
  1382. package/progress-circle/_progress-circle-theme.scss +0 -23
  1383. package/progress-circle/index.d.ts +0 -1
  1384. package/progress-circle/index.js +0 -3
  1385. package/progress-circle/index.js.map +0 -1
  1386. package/progress-circle/index.metadata.json +0 -1
  1387. package/progress-circle/progress-circle.css +0 -43
  1388. package/progress-circle/progress-circle.css.map +0 -1
  1389. package/progress-circle/progress-circle.d.ts +0 -76
  1390. package/progress-circle/progress-circle.html +0 -9
  1391. package/progress-circle/progress-circle.js +0 -315
  1392. package/progress-circle/progress-circle.js.map +0 -1
  1393. package/progress-circle/progress-circle.metadata.json +0 -1
  1394. package/progress-circle/progress-circle.scss +0 -67
  1395. package/radio/README.md +0 -79
  1396. package/radio/_radio-theme.scss +0 -36
  1397. package/radio/index.js +0 -3
  1398. package/radio/index.js.map +0 -1
  1399. package/radio/radio.css +0 -82
  1400. package/radio/radio.css.map +0 -1
  1401. package/radio/radio.d.ts +0 -127
  1402. package/radio/radio.html +0 -27
  1403. package/radio/radio.js +0 -445
  1404. package/radio/radio.js.map +0 -1
  1405. package/radio/radio.metadata.json +0 -1
  1406. package/radio/radio.scss +0 -92
  1407. package/select/index.js +0 -33
  1408. package/select/index.js.map +0 -1
  1409. package/select/select.css +0 -2
  1410. package/select/select.css.map +0 -1
  1411. package/select/select.d.ts +0 -2
  1412. package/select/select.html +0 -1
  1413. package/select/select.js +0 -25
  1414. package/select/select.js.map +0 -1
  1415. package/select/select.metadata.json +0 -1
  1416. package/select/select.scss +0 -0
  1417. package/sidenav/README.md +0 -83
  1418. package/sidenav/_sidenav-theme.scss +0 -37
  1419. package/sidenav/index.js +0 -3
  1420. package/sidenav/index.js.map +0 -1
  1421. package/sidenav/sidenav-transitions.css +0 -10
  1422. package/sidenav/sidenav-transitions.css.map +0 -1
  1423. package/sidenav/sidenav-transitions.scss +0 -14
  1424. package/sidenav/sidenav.css +0 -111
  1425. package/sidenav/sidenav.css.map +0 -1
  1426. package/sidenav/sidenav.d.ts +0 -141
  1427. package/sidenav/sidenav.html +0 -8
  1428. package/sidenav/sidenav.js +0 -479
  1429. package/sidenav/sidenav.js.map +0 -1
  1430. package/sidenav/sidenav.metadata.json +0 -1
  1431. package/sidenav/sidenav.scss +0 -133
  1432. package/slide-toggle/README.md +0 -66
  1433. package/slide-toggle/_slide-toggle-theme.scss +0 -77
  1434. package/slide-toggle/index.js +0 -3
  1435. package/slide-toggle/index.js.map +0 -1
  1436. package/slide-toggle/slide-toggle.css +0 -88
  1437. package/slide-toggle/slide-toggle.css.map +0 -1
  1438. package/slide-toggle/slide-toggle.d.ts +0 -74
  1439. package/slide-toggle/slide-toggle.html +0 -33
  1440. package/slide-toggle/slide-toggle.js +0 -317
  1441. package/slide-toggle/slide-toggle.js.map +0 -1
  1442. package/slide-toggle/slide-toggle.metadata.json +0 -1
  1443. package/slide-toggle/slide-toggle.scss +0 -140
  1444. package/slider/README.md +0 -97
  1445. package/slider/_slider-theme.scss +0 -33
  1446. package/slider/index.js +0 -3
  1447. package/slider/index.js.map +0 -1
  1448. package/slider/slider.css +0 -122
  1449. package/slider/slider.css.map +0 -1
  1450. package/slider/slider.d.ts +0 -155
  1451. package/slider/slider.html +0 -21
  1452. package/slider/slider.js +0 -433
  1453. package/slider/slider.js.map +0 -1
  1454. package/slider/slider.metadata.json +0 -1
  1455. package/slider/slider.scss +0 -186
  1456. package/slider/test-gesture-config.d.ts +0 -21
  1457. package/slider/test-gesture-config.js +0 -59
  1458. package/slider/test-gesture-config.js.map +0 -1
  1459. package/slider/test-gesture-config.metadata.json +0 -1
  1460. package/snack-bar/README.md +0 -38
  1461. package/snack-bar/index.js +0 -6
  1462. package/snack-bar/index.js.map +0 -1
  1463. package/snack-bar/simple-snack-bar.css +0 -27
  1464. package/snack-bar/simple-snack-bar.css.map +0 -1
  1465. package/snack-bar/simple-snack-bar.d.ts +0 -17
  1466. package/snack-bar/simple-snack-bar.html +0 -3
  1467. package/snack-bar/simple-snack-bar.js +0 -38
  1468. package/snack-bar/simple-snack-bar.js.map +0 -1
  1469. package/snack-bar/simple-snack-bar.metadata.json +0 -1
  1470. package/snack-bar/simple-snack-bar.scss +0 -28
  1471. package/snack-bar/snack-bar-config.d.ts +0 -11
  1472. package/snack-bar/snack-bar-config.js +0 -10
  1473. package/snack-bar/snack-bar-config.js.map +0 -1
  1474. package/snack-bar/snack-bar-container.css +0 -12
  1475. package/snack-bar/snack-bar-container.css.map +0 -1
  1476. package/snack-bar/snack-bar-container.d.ts +0 -15
  1477. package/snack-bar/snack-bar-container.html +0 -1
  1478. package/snack-bar/snack-bar-container.js +0 -53
  1479. package/snack-bar/snack-bar-container.js.map +0 -1
  1480. package/snack-bar/snack-bar-container.metadata.json +0 -1
  1481. package/snack-bar/snack-bar-container.scss +0 -19
  1482. package/snack-bar/snack-bar-errors.d.ts +0 -4
  1483. package/snack-bar/snack-bar-errors.js +0 -15
  1484. package/snack-bar/snack-bar-errors.js.map +0 -1
  1485. package/snack-bar/snack-bar-ref.d.ts +0 -17
  1486. package/snack-bar/snack-bar-ref.js +0 -28
  1487. package/snack-bar/snack-bar-ref.js.map +0 -1
  1488. package/snack-bar/snack-bar.d.ts +0 -41
  1489. package/snack-bar/snack-bar.js +0 -110
  1490. package/snack-bar/snack-bar.js.map +0 -1
  1491. package/snack-bar/snack-bar.metadata.json +0 -1
  1492. package/tabs/README.md +0 -47
  1493. package/tabs/_tabs-theme.scss +0 -23
  1494. package/tabs/index.js +0 -3
  1495. package/tabs/index.js.map +0 -1
  1496. package/tabs/ink-bar.d.ts +0 -24
  1497. package/tabs/ink-bar.js +0 -50
  1498. package/tabs/ink-bar.js.map +0 -1
  1499. package/tabs/ink-bar.metadata.json +0 -1
  1500. package/tabs/tab-content.d.ts +0 -6
  1501. package/tabs/tab-content.js +0 -32
  1502. package/tabs/tab-content.js.map +0 -1
  1503. package/tabs/tab-content.metadata.json +0 -1
  1504. package/tabs/tab-group.css +0 -55
  1505. package/tabs/tab-group.css.map +0 -1
  1506. package/tabs/tab-group.html +0 -27
  1507. package/tabs/tab-group.scss +0 -72
  1508. package/tabs/tab-label-wrapper.d.ts +0 -10
  1509. package/tabs/tab-label-wrapper.js +0 -31
  1510. package/tabs/tab-label-wrapper.js.map +0 -1
  1511. package/tabs/tab-label-wrapper.metadata.json +0 -1
  1512. package/tabs/tab-label.d.ts +0 -6
  1513. package/tabs/tab-label.js +0 -32
  1514. package/tabs/tab-label.js.map +0 -1
  1515. package/tabs/tab-label.metadata.json +0 -1
  1516. package/tabs/tabs.d.ts +0 -79
  1517. package/tabs/tabs.js +0 -290
  1518. package/tabs/tabs.js.map +0 -1
  1519. package/tabs/tabs.metadata.json +0 -1
  1520. package/toolbar/README.md +0 -68
  1521. package/toolbar/_toolbar-theme.scss +0 -33
  1522. package/toolbar/index.js +0 -3
  1523. package/toolbar/index.js.map +0 -1
  1524. package/toolbar/toolbar.css +0 -19
  1525. package/toolbar/toolbar.css.map +0 -1
  1526. package/toolbar/toolbar.d.ts +0 -17
  1527. package/toolbar/toolbar.html +0 -6
  1528. package/toolbar/toolbar.js +0 -83
  1529. package/toolbar/toolbar.js.map +0 -1
  1530. package/toolbar/toolbar.metadata.json +0 -1
  1531. package/toolbar/toolbar.scss +0 -36
  1532. package/tooltip/README.md +0 -32
  1533. package/tooltip/_tooltip-theme.scss +0 -9
  1534. package/tooltip/index.js +0 -3
  1535. package/tooltip/index.js.map +0 -1
  1536. package/tooltip/tooltip.css +0 -14
  1537. package/tooltip/tooltip.css.map +0 -1
  1538. package/tooltip/tooltip.d.ts +0 -67
  1539. package/tooltip/tooltip.html +0 -0
  1540. package/tooltip/tooltip.js +0 -210
  1541. package/tooltip/tooltip.js.map +0 -1
  1542. package/tooltip/tooltip.metadata.json +0 -1
  1543. package/tooltip/tooltip.scss +0 -21
  1544. package/tsconfig-spec.json +0 -33
  1545. package/tsconfig.json +0 -33
  1546. package/typings.d.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material.umd.min.js","sources":["../../src/lib/tabs/tab-nav-bar/tab-nav-bar.ts","../../src/lib/tabs/tabs-module.ts","../../src/lib/toolbar/toolbar.ts","../../src/lib/toolbar/toolbar-module.ts","../../src/lib/toolbar/index.ts","../../src/lib/version.ts","../../src/lib/core/line/line.ts","../../src/lib/core/testing/month-constants.ts","../../src/lib/core/index.ts","../../src/lib/stepper/stepper-button.ts","../../src/lib/stepper/stepper-module.ts","../../src/lib/stepper/index.ts","../../src/lib/table/table.ts","../../src/lib/table/cell.ts","../../src/lib/table/row.ts","../../src/lib/table/table-module.ts","../../src/lib/table/index.ts","../../src/lib/tabs/ink-bar.ts","../../src/lib/tabs/tab-label.ts","../../src/lib/tabs/tab.ts","../../src/lib/tabs/tab-body.ts","../../src/lib/tabs/tab-group.ts","../../src/lib/tabs/tab-label-wrapper.ts","../../src/lib/tabs/tab-header.ts","../../src/lib/snack-bar/snack-bar-config.ts","../../src/lib/snack-bar/snack-bar-ref.ts","../../src/lib/snack-bar/snack-bar-container.ts","../../src/lib/snack-bar/simple-snack-bar.ts","../../src/lib/snack-bar/snack-bar.ts","../../src/lib/snack-bar/snack-bar-module.ts","../../src/lib/snack-bar/index.ts","../../src/lib/sort/sort.ts","../../src/lib/sort/sort-header-intl.ts","../../src/lib/sort/sort-header.ts","../../src/lib/sort/sort-module.ts","../../src/lib/sort/index.ts","../../src/lib/stepper/step-label.ts","../../src/lib/stepper/step-header.ts","../../src/lib/stepper/stepper.ts","../../src/lib/sidenav/drawer.ts","../../src/lib/sidenav/sidenav.ts","../../src/lib/sidenav/sidenav-module.ts","../../src/lib/sidenav/index.ts","../../src/lib/slide-toggle/slide-toggle.ts","../../src/lib/slide-toggle/index.ts","../../src/lib/slide-toggle/slide-toggle-module.ts","../../src/lib/slider/slider.ts","../../src/lib/slider/slider-module.ts","../../src/lib/paginator/paginator.ts","../../src/lib/paginator/paginator-module.ts","../../src/lib/paginator/index.ts","../../src/lib/progress-bar/progress-bar.ts","../../src/lib/progress-bar/progress-bar-module.ts","../../src/lib/progress-bar/index.ts","../../src/lib/progress-spinner/progress-spinner.ts","../../src/lib/radio/radio.ts","../../src/lib/radio/radio-module.ts","../../src/lib/radio/index.ts","../../src/lib/select/select.ts","../../src/lib/select/select-module.ts","../../src/lib/select/index.ts","../../src/lib/tooltip/tooltip.ts","../../src/lib/tooltip/index.ts","../../src/lib/tooltip/tooltip-module.ts","../../src/lib/paginator/paginator-intl.ts","../../src/lib/menu/menu-errors.ts","../../src/lib/menu/menu-item.ts","../../src/lib/menu/menu-animations.ts","../../src/lib/menu/menu-directive.ts","../../src/lib/menu/menu-trigger.ts","../../src/lib/menu/menu-module.ts","../../src/lib/menu/index.ts","../../src/lib/select/select-animations.ts","../../src/lib/list/list.ts","../../src/lib/list/selection-list.ts","../../src/lib/list/list-module.ts","../../src/lib/list/index.ts","../../src/lib/grid-list/grid-tile.ts","../../src/lib/grid-list/tile-coordinator.ts","../../src/lib/grid-list/tile-styler.ts","../../src/lib/grid-list/grid-list.ts","../../src/lib/grid-list/grid-list-module.ts","../../src/lib/grid-list/index.ts","../../src/lib/input/input.ts","../../src/lib/input/autosize.ts","../../src/lib/input/input-module.ts","../../src/lib/input/index.ts","../../src/lib/datepicker/datepicker.ts","../../src/lib/datepicker/datepicker-input.ts","../../src/lib/datepicker/datepicker-toggle.ts","../../src/lib/datepicker/month-view.ts","../../src/lib/datepicker/year-view.ts","../../src/lib/datepicker/datepicker-module.ts","../../src/lib/expansion/accordion.ts","../../src/lib/expansion/accordion-item.ts","../../src/lib/expansion/expansion-panel.ts","../../src/lib/expansion/expansion-panel-header.ts","../../src/lib/expansion/expansion-module.ts","../../src/lib/expansion/index.ts","../../src/lib/dialog/dialog-ref.ts","../../src/lib/dialog/dialog.ts","../../src/lib/dialog/dialog-content-directives.ts","../../src/lib/dialog/dialog-module.ts","../../src/lib/dialog/index.ts","../../src/lib/icon/icon-registry.ts","../../src/lib/icon/icon.ts","../../src/lib/icon/icon-module.ts","../../src/lib/icon/index.ts","../../src/lib/datepicker/datepicker-intl.ts","../../src/lib/datepicker/calendar.ts","../../src/lib/datepicker/calendar-body.ts","../../src/lib/checkbox/checkbox.ts","../../src/lib/checkbox/checkbox-required-validator.ts","../../src/lib/checkbox/checkbox-module.ts","../../src/lib/checkbox/index.ts","../../src/lib/chips/chip.ts","../../src/lib/chips/chip-list.ts","../../src/lib/chips/chip-input.ts","../../src/lib/chips/chips-module.ts","../../src/lib/chips/index.ts","../../src/lib/dialog/dialog-config.ts","../../src/lib/dialog/dialog-container.ts","../../src/lib/button/button.ts","../../src/lib/button/button-module.ts","../../src/lib/button/index.ts","../../src/lib/button-toggle/button-toggle.ts","../../src/lib/button-toggle/button-toggle-module.ts","../../src/lib/button-toggle/index.ts","../../src/lib/card/card.ts","../../src/lib/card/card-module.ts","../../src/lib/card/index.ts","../../src/lib/core/selection/index.ts","../../src/lib/core/option/optgroup.ts","../../src/lib/core/option/option.ts","../../src/lib/core/option/index.ts","../../src/lib/core/portal/portal-injector.ts","../../src/lib/core/style/index.ts","../../src/lib/form-field/error.ts","../../src/lib/form-field/form-field-control.ts","../../src/lib/form-field/hint.ts","../../src/lib/form-field/placeholder.ts","../../src/lib/form-field/prefix.ts","../../src/lib/form-field/suffix.ts","../../src/lib/form-field/form-field.ts","../../src/lib/form-field/form-field-module.ts","../../src/lib/form-field/index.ts","../../src/lib/autocomplete/autocomplete.ts","../../src/lib/autocomplete/autocomplete-trigger.ts","../../src/lib/autocomplete/autocomplete-module.ts","../../src/lib/autocomplete/index.ts","../../node_modules/tslib/tslib.es6.js","../../src/lib/core/compatibility/compatibility.ts","../../src/lib/core/common-behaviors/common-module.ts","../../src/lib/core/common-behaviors/disabled.ts","../../src/lib/core/common-behaviors/disable-ripple.ts","../../src/lib/core/datetime/date-adapter.ts","../../src/lib/core/datetime/native-date-adapter.ts","../../src/lib/core/ripple/ripple-renderer.ts","../../src/lib/core/style/apply-transform.ts","../../src/lib/form-field/form-field-errors.ts","../../src/lib/datepicker/coerce-date-property.ts","../../src/lib/grid-list/grid-list-measure.ts","../../src/lib/input/input-errors.ts","../../src/lib/select/select-errors.ts","../../src/lib/progress-spinner/progress-spinner-module.ts","../../src/lib/progress-spinner/index.ts","../../src/lib/sort/sort-errors.ts","../../src/lib/core/animation/animation.ts","../../src/lib/core/common-behaviors/color.ts","../../src/lib/core/common-behaviors/tabindex.ts","../../src/lib/core/coordination/unique-selection-dispatcher.ts","../../src/lib/core/util/object-extend.ts","../../src/lib/core/datetime/native-date-formats.ts","../../src/lib/core/datetime/index.ts","../../src/lib/core/error/error-options.ts","../../src/lib/core/gestures/gesture-config.ts","../../src/lib/core/ripple/ripple-ref.ts","../../src/lib/core/ripple/ripple.ts","../../src/lib/core/ripple/index.ts","../../src/lib/core/selection/pseudo-checkbox/pseudo-checkbox.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. 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\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {auditTime, takeUntil} from '@angular/cdk/rxjs';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n QueryList,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CanColor,\n CanDisable,\n CanDisableRipple, MATERIAL_COMPATIBILITY_MODE,\n MD_RIPPLE_GLOBAL_OPTIONS,\n MdRipple,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n RippleGlobalOptions,\n ThemePalette,\n} from '@angular/material/core';\nimport {fromEvent} from 'rxjs/observable/fromEvent';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {Subject} from 'rxjs/Subject';\nimport {MdInkBar} from '../ink-bar';\n/**\n * \\@docs-private\n */\nexport class MdTabNavBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdTabNavBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabNavBase.prototype._renderer;\n/** @type {?} */\nMdTabNavBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdTabNavMixinBase = mixinDisableRipple(mixinColor(MdTabNavBase, 'primary'));\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\nexport class MdTabNav extends _MdTabNavMixinBase implements AfterContentInit, CanColor,\n CanDisableRipple, OnDestroy {\n/**\n * Subject that emits when the component has been destroyed.\n */\nprivate _onDestroy = new Subject<void>();\n\n _activeLinkChanged: boolean;\n _activeLinkElement: ElementRef;\n\n _inkBar: MdInkBar;\n/**\n * Query list of all tab links of the tab navigation.\n */\n_tabLinks: QueryList<MdTabLink>;\n/**\n * Background color of the tab nav.\n * @return {?}\n */\nget backgroundColor(): ThemePalette { return this._backgroundColor; }\n/**\n * @param {?} value\n * @return {?}\n */\nset backgroundColor(value: ThemePalette) {\n let /** @type {?} */ nativeElement = this._elementRef.nativeElement;\n\n this._renderer.removeClass(nativeElement, `mat-background-${this.backgroundColor}`);\n\n if (value) {\n this._renderer.addClass(nativeElement, `mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\nprivate _backgroundColor: ThemePalette;\n/**\n * Whether ripples should be disabled for all links or not.\n * @return {?}\n */\nget disableRipple() { return this._disableRipple; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disableRipple(value: boolean) {\n this._disableRipple = coerceBooleanProperty(value);\n this._setLinkDisableRipple();\n }\nprivate _disableRipple: boolean = false;\n/**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _dir\n * @param {?} _ngZone\n * @param {?} _changeDetectorRef\n */\nconstructor(renderer: Renderer2,\n elementRef: ElementRef,\nprivate _dir: Directionality,\nprivate _ngZone: NgZone,\nprivate _changeDetectorRef: ChangeDetectorRef) {\n super(renderer, elementRef);\n }\n/**\n * Notifies the component that the active link has been changed.\n * @param {?} element\n * @return {?}\n */\nupdateActiveLink(element: ElementRef) {\n this._activeLinkChanged = this._activeLinkElement != element;\n this._activeLinkElement = element;\n\n if (this._activeLinkChanged) {\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * @return {?}\n */\nngAfterContentInit(): void {\n this._ngZone.runOutsideAngular(() => {\n let /** @type {?} */ dirChange = this._dir ? this._dir.change : observableOf(null);\n let /** @type {?} */ resize = typeof window !== 'undefined' ?\n auditTime.call(fromEvent(window, 'resize'), 10) :\n observableOf(null);\n\n return takeUntil.call(merge(dirChange, resize), this._onDestroy).subscribe(() => {\n this._alignInkBar();\n });\n });\n\n this._setLinkDisableRipple();\n }\n/**\n * Checks if the active link has been changed and, if so, will update the ink bar.\n * @return {?}\n */\nngAfterContentChecked(): void {\n if (this._activeLinkChanged) {\n this._alignInkBar();\n this._activeLinkChanged = false;\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n/**\n * Aligns the ink bar to the active link.\n * @return {?}\n */\n_alignInkBar(): void {\n if (this._activeLinkElement) {\n this._inkBar.alignToElement(this._activeLinkElement.nativeElement);\n }\n }\n/**\n * Sets the `disableRipple` property on each link of the navigation bar.\n * @return {?}\n */\nprivate _setLinkDisableRipple() {\n if (this._tabLinks) {\n this._tabLinks.forEach(link => link.disableRipple = this.disableRipple);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: '[md-tab-nav-bar], [mat-tab-nav-bar]',\n inputs: ['color', 'disableRipple'],\n templateUrl: 'tab-nav-bar.html',\n styleUrls: ['tab-nav-bar.css'],\n host: {'class': 'mat-tab-nav-bar'},\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: Directionality, decorators: [{ type: Optional }, ]},\n{type: NgZone, },\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_inkBar': [{ type: ViewChild, args: [MdInkBar, ] },],\n'_tabLinks': [{ type: ContentChildren, args: [forwardRef(() => MdTabLink), {descendants: true}, ] },],\n'backgroundColor': [{ type: Input },],\n};\n}\n\nfunction MdTabNav_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabNav.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTabNav.ctorParameters;\n/** @type {?} */\nMdTabNav.propDecorators;\n/**\n * Subject that emits when the component has been destroyed.\n * @type {?}\n */\nMdTabNav.prototype._onDestroy;\n/** @type {?} */\nMdTabNav.prototype._activeLinkChanged;\n/** @type {?} */\nMdTabNav.prototype._activeLinkElement;\n/** @type {?} */\nMdTabNav.prototype._inkBar;\n/**\n * Query list of all tab links of the tab navigation.\n * @type {?}\n */\nMdTabNav.prototype._tabLinks;\n/** @type {?} */\nMdTabNav.prototype._backgroundColor;\n/** @type {?} */\nMdTabNav.prototype._disableRipple;\n/** @type {?} */\nMdTabNav.prototype._dir;\n/** @type {?} */\nMdTabNav.prototype._ngZone;\n/** @type {?} */\nMdTabNav.prototype._changeDetectorRef;\n}\n\nexport class MdTabLinkBase {}\nexport const /** @type {?} */ _MdTabLinkMixinBase = mixinDisabled(MdTabLinkBase);\n/**\n * Link inside of a `md-tab-nav-bar`.\n */\nexport class MdTabLink extends _MdTabLinkMixinBase implements OnDestroy, CanDisable {\n/**\n * Whether the tab link is active or not.\n */\nprivate _isActive: boolean = false;\n/**\n * Whether the ripples for this tab should be disabled or not.\n */\nprivate _disableRipple: boolean = false;\n/**\n * Reference to the instance of the ripple for the tab link.\n */\nprivate _tabLinkRipple: MdRipple;\n/**\n * Whether the link is active.\n * @return {?}\n */\nget active(): boolean { return this._isActive; }\n/**\n * @param {?} value\n * @return {?}\n */\nset active(value: boolean) {\n this._isActive = value;\n if (value) {\n this._mdTabNavBar.updateActiveLink(this._elementRef);\n }\n }\n/**\n * Whether ripples should be disabled or not.\n * @return {?}\n */\nget disableRipple(): boolean { return this._disableRipple; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disableRipple(value: boolean) {\n this._disableRipple = value;\n this._tabLinkRipple.disabled = this.disableRipple;\n this._tabLinkRipple._updateRippleRenderer();\n }\n/**\n * \\@docs-private\n * @return {?}\n */\nget tabIndex(): number {\n return this.disabled ? -1 : 0;\n }\n/**\n * @param {?} _mdTabNavBar\n * @param {?} _elementRef\n * @param {?} ngZone\n * @param {?} ruler\n * @param {?} platform\n * @param {?} globalOptions\n */\nconstructor(private _mdTabNavBar: MdTabNav,\nprivate _elementRef: ElementRef,\n ngZone: NgZone,\n ruler: ViewportRuler,\n platform: Platform,\n globalOptions: RippleGlobalOptions) {\n super();\n\n // Manually create a ripple instance that uses the tab link element as trigger element.\n // Notice that the lifecycle hooks for the ripple config won't be called anymore.\n this._tabLinkRipple = new MdRipple(_elementRef, ngZone, ruler, platform, globalOptions);\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n // Manually call the ngOnDestroy lifecycle hook of the ripple instance because it won't be\n // called automatically since its instance is not created by Angular.\n this._tabLinkRipple.ngOnDestroy();\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-tab-link], [mat-tab-link], [mdTabLink], [matTabLink]',\n inputs: ['disabled'],\n host: {\n 'class': 'mat-tab-link',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.tabindex]': 'tabIndex',\n '[class.mat-tab-disabled]': 'disabled'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdTabNav, },\n{type: ElementRef, },\n{type: NgZone, },\n{type: ViewportRuler, },\n{type: Platform, },\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_RIPPLE_GLOBAL_OPTIONS, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'active': [{ type: Input },],\n};\n}\n\nfunction MdTabLink_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabLink.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTabLink.ctorParameters;\n/** @type {?} */\nMdTabLink.propDecorators;\n/**\n * Whether the tab link is active or not.\n * @type {?}\n */\nMdTabLink.prototype._isActive;\n/**\n * Whether the ripples for this tab should be disabled or not.\n * @type {?}\n */\nMdTabLink.prototype._disableRipple;\n/**\n * Reference to the instance of the ripple for the tab link.\n * @type {?}\n */\nMdTabLink.prototype._tabLinkRipple;\n/** @type {?} */\nMdTabLink.prototype._mdTabNavBar;\n/** @type {?} */\nMdTabLink.prototype._elementRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {ScrollDispatchModule, VIEWPORT_RULER_PROVIDER} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MdCommonModule, MdRippleModule} from '@angular/material/core';\nimport {MdInkBar} from './ink-bar';\nimport {MdTab} from './tab';\nimport {MdTabBody} from './tab-body';\nimport {MdTabGroup} from './tab-group';\nimport {MdTabHeader} from './tab-header';\nimport {MdTabLabel} from './tab-label';\nimport {MdTabLabelWrapper} from './tab-label-wrapper';\nimport {MdTabLink, MdTabNav} from './tab-nav-bar/tab-nav-bar';\nexport class MdTabsModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n CommonModule,\n MdCommonModule,\n PortalModule,\n MdRippleModule,\n ObserversModule,\n ScrollDispatchModule,\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n MdCommonModule,\n MdTabGroup,\n MdTabLabel,\n MdTab,\n MdTabNav,\n MdTabLink,\n ],\n declarations: [\n MdTabGroup,\n MdTabLabel,\n MdTab,\n MdInkBar,\n MdTabLabelWrapper,\n MdTabNav,\n MdTabLink,\n MdTabBody,\n MdTabHeader\n ],\n providers: [VIEWPORT_RULER_PROVIDER],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdTabsModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabsModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTabsModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n Directive,\n ElementRef,\n Renderer2,\n} from '@angular/core';\nimport {CanColor, MATERIAL_COMPATIBILITY_MODE, mixinColor} from '@angular/material/core';\nexport class MdToolbarRow {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-toolbar-row, mat-toolbar-row',\n host: {'class': 'mat-toolbar-row'},\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdToolbarRow_tsickle_Closure_declarations() {\n/** @type {?} */\nMdToolbarRow.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdToolbarRow.ctorParameters;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdToolbarBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdToolbarBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdToolbarBase.prototype._renderer;\n/** @type {?} */\nMdToolbarBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdToolbarMixinBase = mixinColor(MdToolbarBase);\nexport class MdToolbar extends _MdToolbarMixinBase implements CanColor {\n/**\n * @param {?} renderer\n * @param {?} elementRef\n */\nconstructor(renderer: Renderer2, elementRef: ElementRef) {\n super(renderer, elementRef);\n }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-toolbar, mat-toolbar',\n templateUrl: 'toolbar.html',\n styleUrls: ['toolbar.css'],\n inputs: ['color'],\n host: {\n 'class': 'mat-toolbar',\n 'role': 'toolbar'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n];\n}\n\nfunction MdToolbar_tsickle_Closure_declarations() {\n/** @type {?} */\nMdToolbar.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdToolbar.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdCommonModule} from '@angular/material/core';\nimport {MdToolbar, MdToolbarRow} from './toolbar';\nexport class MdToolbarModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdCommonModule],\n exports: [MdToolbar, MdToolbarRow, MdCommonModule],\n declarations: [MdToolbar, MdToolbarRow],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdToolbarModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdToolbarModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdToolbarModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdToolbarModule,MdToolbarRow,MdToolbarBase,_MdToolbarMixinBase,MdToolbar,MatToolbar,MatToolbarBase,MatToolbarModule,MatToolbarRow} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Version} from '@angular/core';\n/**\n * Current version of Angular Material.\n */\nexport const VERSION = new Version('2.0.0-beta.11');\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n NgModule,\n Directive,\n Renderer2,\n ElementRef,\n QueryList,\n} from '@angular/core';\nimport {MdCommonModule} from '../common-behaviors/common-module';\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a \\@ContentChildren(MdLine) query, then\n * counted by checking the query list's length.\n */\nexport class MdLine {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-line], [mat-line], [mdLine], [matLine]',\n host: {'class': 'mat-line'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdLine_tsickle_Closure_declarations() {\n/** @type {?} */\nMdLine.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdLine.ctorParameters;\n}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * \\@docs-private\n */\nexport class MdLineSetter {\n/**\n * @param {?} _lines\n * @param {?} _renderer\n * @param {?} _element\n */\nconstructor(private _lines: QueryList<MdLine>,\nprivate _renderer: Renderer2,\nprivate _element: ElementRef) {\n this._setLineClass(this._lines.length);\n\n this._lines.changes.subscribe(() => {\n this._setLineClass(this._lines.length);\n });\n }\n/**\n * @param {?} count\n * @return {?}\n */\nprivate _setLineClass(count: number): void {\n this._resetClasses();\n if (count === 2 || count === 3) {\n this._setClass(`mat-${count}-line`, true);\n } else if (count > 3) {\n this._setClass(`mat-multi-line`, true);\n }\n }\n/**\n * @return {?}\n */\nprivate _resetClasses(): void {\n this._setClass('mat-2-line', false);\n this._setClass('mat-3-line', false);\n this._setClass('mat-multi-line', false);\n }\n/**\n * @param {?} className\n * @param {?} isAdd\n * @return {?}\n */\nprivate _setClass(className: string, isAdd: boolean): void {\n if (isAdd) {\n this._renderer.addClass(this._element.nativeElement, className);\n } else {\n this._renderer.removeClass(this._element.nativeElement, className);\n }\n }\n\n}\n\nfunction MdLineSetter_tsickle_Closure_declarations() {\n/** @type {?} */\nMdLineSetter.prototype._lines;\n/** @type {?} */\nMdLineSetter.prototype._renderer;\n/** @type {?} */\nMdLineSetter.prototype._element;\n}\n\nexport class MdLineModule { static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdCommonModule],\n exports: [MdLine, MdCommonModule],\n declarations: [MdLine],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdLineModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdLineModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdLineModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","\n/**\n * When constructing a Date, the month is zero-based. This can be confusing, since people are\n * used to seeing them one-based. So we create these aliases to make writing the tests easier.\n */\nexport const JAN = 0, FEB = 1, MAR = 2, APR = 3, MAY = 4, JUN = 5, JUL = 6, AUG = 7, SEP = 8,\n OCT = 9, NOV = 10, DEC = 11;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {A11yModule,AnimationCurves,AnimationDurations,Directionality,DIRECTIONALITY_PROVIDER,DIR_DOCUMENT,Direction,Dir,BidiModule,MdCommonModule,MATERIAL_SANITY_CHECKS,CanDisable,mixinDisabled,CanColor,mixinColor,ThemePalette,CanDisableRipple,mixinDisableRipple,HasTabIndex,mixinTabIndex,MATERIAL_COMPATIBILITY_MODE,getMdCompatibilityInvalidPrefixError,MAT_ELEMENTS_SELECTOR,MD_ELEMENTS_SELECTOR,MatPrefixRejector,MdPrefixRejector,CompatibilityModule,NoConflictStyleCompatibilityMode,UniqueSelectionDispatcherListener,UniqueSelectionDispatcher,UNIQUE_SELECTION_DISPATCHER_PROVIDER_FACTORY,UNIQUE_SELECTION_DISPATCHER_PROVIDER,NativeDateModule,MdNativeDateModule,MAT_DATE_LOCALE,MAT_DATE_LOCALE_PROVIDER,DateAdapter,MdDateFormats,MD_DATE_FORMATS,NativeDateAdapter,MD_NATIVE_DATE_FORMATS,MD_ERROR_GLOBAL_OPTIONS,ErrorStateMatcher,ErrorOptions,defaultErrorStateMatcher,showOnDirtyErrorStateMatcher,HammerInput,HammerStatic,Recognizer,RecognizerStatic,HammerInstance,HammerManager,GestureConfig,UP_ARROW,DOWN_ARROW,RIGHT_ARROW,LEFT_ARROW,PAGE_UP,PAGE_DOWN,HOME,END,ENTER,SPACE,TAB,ESCAPE,BACKSPACE,DELETE,A,Z,MdLine,MdLineSetter,MdLineModule,MdOptionModule,MdOptionSelectionChange,MdOption,MdOptgroupBase,_MdOptgroupMixinBase,MdOptgroup,OVERLAY_PROVIDERS,OverlayModule,Overlay,OverlayContainer,FullscreenOverlayContainer,OverlayRef,ConnectedOverlayDirective,OverlayOrigin,ViewportRuler,ComponentType,PositionStrategy,GlobalPositionStrategy,ConnectedPositionStrategy,VIEWPORT_RULER_PROVIDER,OverlayConfig,HorizontalConnectionPos,VerticalConnectionPos,OriginConnectionPosition,OverlayConnectionPosition,ConnectionPositionPair,ScrollingVisibility,ConnectedOverlayPositionChange,Scrollable,ScrollDispatcher,ScrollStrategy,ScrollStrategyOptions,RepositionScrollStrategy,CloseScrollStrategy,NoopScrollStrategy,BlockScrollStrategy,MD_PLACEHOLDER_GLOBAL_OPTIONS,FloatPlaceholderType,PlaceholderOptions,PlatformModule,Platform,getSupportedInputTypes,Portal,PortalHost,BasePortalHost,ComponentPortal,TemplatePortal,DomPortalHost,TemplatePortalDirective,PortalHostDirective,PortalModule,PortalInjector,MdRipple,RippleGlobalOptions,MD_RIPPLE_GLOBAL_OPTIONS,RippleRef,RippleState,RippleConfig,RIPPLE_FADE_IN_DURATION,RIPPLE_FADE_OUT_DURATION,MdRippleModule,RxChain,StrictRxChain,FinallyBrand,CatchBrand,DoBrand,MapBrand,FilterBrand,ShareBrand,FirstBrand,SwitchMapBrand,StartWithBrand,DebounceTimeBrand,AuditTimeBrand,TakeUntilBrand,finallyOperatorType,catchOperatorType,doOperatorType,mapOperatorType,filterOperatorType,shareOperatorType,firstOperatorType,switchMapOperatorType,startWithOperatorType,debounceTimeOperatorType,auditTimeOperatorType,takeUntilOperatorType,finallyOperator,catchOperator,doOperator,map,filter,share,first,switchMap,startWith,debounceTime,auditTime,takeUntil,MdPseudoCheckboxModule,MdPseudoCheckboxState,MdPseudoCheckbox,StyleModule,CdkMonitorFocus,FocusMonitor,FOCUS_MONITOR_PROVIDER,FocusOrigin,applyCssTransform,extendObject,MAT_DATE_FORMATS,MAT_RIPPLE_GLOBAL_OPTIONS,MAT_NATIVE_DATE_FORMATS,MAT_PLACEHOLDER_GLOBAL_OPTIONS,MAT_ERROR_GLOBAL_OPTIONS,MatCommonModule,MatDateFormats,MatLine,MatLineModule,MatLineSetter,MatOptgroup,MatOptgroupBase,MatOption,MatOptionModule,MatOptionSelectionChange,MatNativeDateModule,MatPseudoCheckbox,MatPseudoCheckboxModule,MatPseudoCheckboxState,MatRipple,MatRippleModule,JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC} from './public_api';\n\nexport {RippleRenderer as ɵa} from './ripple/ripple-renderer';","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive} from '@angular/core';\nimport {CdkStepper, CdkStepperNext, CdkStepperPrevious} from '@angular/cdk/stepper';\nimport {MdStepper} from './stepper';\n/**\n * Workaround for https://github.com/angular/angular/issues/17849\n */\nexport const _MdStepperNext = CdkStepperNext;\nexport const /** @type {?} */ _MdStepperPrevious = CdkStepperPrevious;\n/**\n * Button that moves to the next step in a stepper workflow.\n */\nexport class MdStepperNext extends _MdStepperNext { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'button[mdStepperNext], button[matStepperNext]',\n host: {'(click)': '_stepper.next()'},\n providers: [{provide: CdkStepper, useExisting: MdStepper}]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdStepperNext_tsickle_Closure_declarations() {\n/** @type {?} */\nMdStepperNext.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdStepperNext.ctorParameters;\n}\n\n/**\n * Button that moves to the previous step in a stepper workflow.\n */\nexport class MdStepperPrevious extends _MdStepperPrevious { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'button[mdStepperPrevious], button[matStepperPrevious]',\n host: {'(click)': '_stepper.previous()'},\n providers: [{provide: CdkStepper, useExisting: MdStepper}]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdStepperPrevious_tsickle_Closure_declarations() {\n/** @type {?} */\nMdStepperPrevious.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdStepperPrevious.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CdkStepperModule} from '@angular/cdk/stepper';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MdButtonModule} from '@angular/material/button';\nimport {MdCommonModule} from '@angular/material/core';\nimport {MdIconModule} from '@angular/material/icon';\nimport {MdStepHeader} from './step-header';\nimport {MdStepLabel} from './step-label';\nimport {MdHorizontalStepper, MdStep, MdStepper, MdVerticalStepper} from './stepper';\nimport {MdStepperNext, MdStepperPrevious} from './stepper-button';\nexport class MdStepperModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n MdCommonModule,\n CommonModule,\n PortalModule,\n MdButtonModule,\n CdkStepperModule,\n MdIconModule\n ],\n exports: [\n MdCommonModule,\n MdHorizontalStepper,\n MdVerticalStepper,\n MdStep,\n MdStepLabel,\n MdStepper,\n MdStepperNext,\n MdStepperPrevious,\n MdStepHeader\n ],\n declarations: [MdHorizontalStepper, MdVerticalStepper, MdStep, MdStepLabel, MdStepper,\n MdStepperNext, MdStepperPrevious, MdStepHeader],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdStepperModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdStepperModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdStepperModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdStepperModule,_MdStepLabel,MdStepLabel,_MdStep,_MdStepper,MdStep,MdStepper,MdHorizontalStepper,MdVerticalStepper,_MdStepperNext,_MdStepperPrevious,MdStepperNext,MdStepperPrevious,MdStepHeader,MatStep,MatStepHeader,MatStepLabel,MatStepper,MatHorizontalStepper,MatStepperModule,MatVerticalStepper,MatStepperPrevious,MatStepperNext} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\nimport {CDK_TABLE_TEMPLATE, CdkTable} from '@angular/cdk/table';\n/**\n * Workaround for https://github.com/angular/angular/issues/17849\n */\nexport const _MdTable = CdkTable;\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\nexport class MdTable<T> extends _MdTable<T> { static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-table, mat-table',\n template: CDK_TABLE_TEMPLATE,\n styleUrls: ['table.css'],\n host: {\n 'class': 'mat-table',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdTable_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTable.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTable.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, ElementRef, Input, Renderer2} from '@angular/core';\nimport {\n CdkCell,\n CdkCellDef,\n CdkColumnDef,\n CdkHeaderCell,\n CdkHeaderCellDef,\n} from '@angular/cdk/table';\n/**\n * Workaround for https://github.com/angular/angular/issues/17849\n */\nexport const _MdCellDef = CdkCellDef;\nexport const /** @type {?} */ _MdHeaderCellDef = CdkHeaderCellDef;\nexport const /** @type {?} */ _MdColumnDef = CdkColumnDef;\nexport const /** @type {?} */ _MdHeaderCell = CdkHeaderCell;\nexport const /** @type {?} */ _MdCell = CdkCell;\n/**\n * Cell definition for the md-table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nexport class MdCellDef extends _MdCellDef { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdCellDef], [matCellDef]',\n providers: [{provide: CdkCellDef, useExisting: MdCellDef}]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCellDef_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCellDef.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCellDef.ctorParameters;\n}\n\n/**\n * Header cell definition for the md-table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nexport class MdHeaderCellDef extends _MdHeaderCellDef { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdHeaderCellDef], [matHeaderCellDef]',\n providers: [{provide: CdkHeaderCellDef, useExisting: MdHeaderCellDef}]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdHeaderCellDef_tsickle_Closure_declarations() {\n/** @type {?} */\nMdHeaderCellDef.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdHeaderCellDef.ctorParameters;\n}\n\n/**\n * Column definition for the md-table.\n * Defines a set of cells available for a table column.\n */\nexport class MdColumnDef extends _MdColumnDef {\n/**\n * Unique name for this column.\n */\nname: string;\n/**\n * @return {?}\n */\nget _matColumnDefName() { return this.name; }\n/**\n * @param {?} name\n * @return {?}\n */\nset _matColumnDefName(name) { this.name = name; }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdColumnDef], [matColumnDef]',\n providers: [{provide: CdkColumnDef, useExisting: MdColumnDef}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'name': [{ type: Input, args: ['mdColumnDef', ] },],\n'_matColumnDefName': [{ type: Input, args: ['matColumnDef', ] },],\n};\n}\n\nfunction MdColumnDef_tsickle_Closure_declarations() {\n/** @type {?} */\nMdColumnDef.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdColumnDef.ctorParameters;\n/** @type {?} */\nMdColumnDef.propDecorators;\n/**\n * Unique name for this column.\n * @type {?}\n */\nMdColumnDef.prototype.name;\n}\n\n/**\n * Header cell template container that adds the right classes and role.\n */\nexport class MdHeaderCell extends _MdHeaderCell {\n/**\n * @param {?} columnDef\n * @param {?} elementRef\n * @param {?} renderer\n */\nconstructor(columnDef: CdkColumnDef,\n elementRef: ElementRef,\n renderer: Renderer2) {\n super(columnDef, elementRef, renderer);\n renderer.addClass(elementRef.nativeElement, `mat-column-${columnDef.cssClassFriendlyName}`);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-header-cell, mat-header-cell',\n host: {\n 'class': 'mat-header-cell',\n 'role': 'columnheader',\n },\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: CdkColumnDef, },\n{type: ElementRef, },\n{type: Renderer2, },\n];\n}\n\nfunction MdHeaderCell_tsickle_Closure_declarations() {\n/** @type {?} */\nMdHeaderCell.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdHeaderCell.ctorParameters;\n}\n\n/**\n * Cell template container that adds the right classes and role.\n */\nexport class MdCell extends _MdCell {\n/**\n * @param {?} columnDef\n * @param {?} elementRef\n * @param {?} renderer\n */\nconstructor(columnDef: CdkColumnDef,\n elementRef: ElementRef,\n renderer: Renderer2) {\n super(columnDef, elementRef, renderer);\n renderer.addClass(elementRef.nativeElement, `mat-column-${columnDef.cssClassFriendlyName}`);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-cell, mat-cell',\n host: {\n 'class': 'mat-cell',\n 'role': 'gridcell',\n },\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: CdkColumnDef, },\n{type: ElementRef, },\n{type: Renderer2, },\n];\n}\n\nfunction MdCell_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCell.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCell.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ChangeDetectionStrategy, Component, Directive, ViewEncapsulation} from '@angular/core';\nimport {\n CdkHeaderRow,\n CdkRow,\n CDK_ROW_TEMPLATE,\n CdkRowDef,\n CdkHeaderRowDef,\n} from '@angular/cdk/table';\n/**\n * Workaround for https://github.com/angular/angular/issues/17849\n */\nexport const _MdHeaderRowDef = CdkHeaderRowDef;\nexport const /** @type {?} */ _MdCdkRowDef = CdkRowDef;\nexport const /** @type {?} */ _MdHeaderRow = CdkHeaderRow;\nexport const /** @type {?} */ _MdRow = CdkRow;\n/**\n * Header row definition for the md-table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nexport class MdHeaderRowDef extends _MdHeaderRowDef { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdHeaderRowDef]',\n providers: [{provide: CdkHeaderRowDef, useExisting: MdHeaderRowDef}],\n inputs: ['columns: mdHeaderRowDef'],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdHeaderRowDef_tsickle_Closure_declarations() {\n/** @type {?} */\nMdHeaderRowDef.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdHeaderRowDef.ctorParameters;\n}\n\n/**\n * Mat-compatible version of MdHeaderRowDef\n */\nexport class MatHeaderRowDef extends _MdHeaderRowDef { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[matHeaderRowDef]',\n providers: [{provide: CdkHeaderRowDef, useExisting: MatHeaderRowDef}],\n inputs: ['columns: matHeaderRowDef'],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MatHeaderRowDef_tsickle_Closure_declarations() {\n/** @type {?} */\nMatHeaderRowDef.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMatHeaderRowDef.ctorParameters;\n}\n\n/**\n * Data row definition for the md-table.\n * Captures the header row's template and other row properties such as the columns to display.\n */\nexport class MdRowDef extends _MdCdkRowDef { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdRowDef]',\n providers: [{provide: CdkRowDef, useExisting: MdRowDef}],\n inputs: ['columns: mdRowDefColumns'],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdRowDef_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRowDef.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdRowDef.ctorParameters;\n}\n\n/**\n * Mat-compatible version of MdRowDef\n */\nexport class MatRowDef extends _MdCdkRowDef { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[matRowDef]',\n providers: [{provide: CdkRowDef, useExisting: MatRowDef}],\n inputs: ['columns: matRowDefColumns'],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MatRowDef_tsickle_Closure_declarations() {\n/** @type {?} */\nMatRowDef.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMatRowDef.ctorParameters;\n}\n\n/**\n * Header template container that contains the cell outlet. Adds the right class and role.\n */\nexport class MdHeaderRow extends _MdHeaderRow { static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-header-row, mat-header-row',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-header-row',\n 'role': 'row',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdHeaderRow_tsickle_Closure_declarations() {\n/** @type {?} */\nMdHeaderRow.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdHeaderRow.ctorParameters;\n}\n\n/**\n * Data row template container that contains the cell outlet. Adds the right class and role.\n */\nexport class MdRow extends _MdRow { static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-row, mat-row',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-row',\n 'role': 'row',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdRow_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRow.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdRow.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdTable} from './table';\nimport {CdkTableModule} from '@angular/cdk/table';\nimport {MdCell, MdHeaderCell, MdCellDef, MdHeaderCellDef, MdColumnDef} from './cell';\nimport {MdHeaderRow, MdRow, MdHeaderRowDef, MdRowDef, MatHeaderRowDef, MatRowDef} from './row';\nimport {CommonModule} from '@angular/common';\nimport {MdCommonModule} from '@angular/material/core';\nexport class MdTableModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CdkTableModule, CommonModule, MdCommonModule],\n exports: [MdTable, MdCellDef, MdHeaderCellDef, MdColumnDef,\n MdHeaderRowDef, MdRowDef,\n MdHeaderCell, MdCell, MdHeaderRow, MdRow,\n MatHeaderRowDef, MatRowDef],\n declarations: [MdTable, MdCellDef, MdHeaderCellDef, MdColumnDef,\n MdHeaderRowDef, MdRowDef,\n MdHeaderCell, MdCell, MdHeaderRow, MdRow,\n MatHeaderRowDef, MatRowDef],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdTableModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTableModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTableModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdTableModule,_MdCellDef,_MdHeaderCellDef,_MdColumnDef,_MdHeaderCell,_MdCell,MdCellDef,MdHeaderCellDef,MdColumnDef,MdHeaderCell,MdCell,_MdTable,MdTable,_MdHeaderRowDef,_MdCdkRowDef,_MdHeaderRow,_MdRow,MdHeaderRowDef,MatHeaderRowDef,MdRowDef,MatRowDef,MdHeaderRow,MdRow,MatCell,MatCellDef,MatColumnDef,MatHeaderCell,MatHeaderCellDef,MatHeaderRow,MatRow,MatTable,MatTableModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, Renderer2, ElementRef, NgZone} from '@angular/core';\n/**\n * The ink-bar is used to display and animate the line underneath the current active tab label.\n * \\@docs-private\n */\nexport class MdInkBar {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _ngZone\n */\nconstructor(\nprivate _renderer: Renderer2,\nprivate _elementRef: ElementRef,\nprivate _ngZone: NgZone) {}\n/**\n * Calculates the styles from the provided element in order to align the ink-bar to that element.\n * Shows the ink bar if previously set as hidden.\n * @param {?} element\n * @return {?}\n */\nalignToElement(element: HTMLElement) {\n this.show();\n\n if (typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => this._setStyles(element));\n });\n } else {\n this._setStyles(element);\n }\n }\n/**\n * Shows the ink bar.\n * @return {?}\n */\nshow(): void {\n this._renderer.setStyle(this._elementRef.nativeElement, 'visibility', 'visible');\n }\n/**\n * Hides the ink bar.\n * @return {?}\n */\nhide(): void {\n this._renderer.setStyle(this._elementRef.nativeElement, 'visibility', 'hidden');\n }\n/**\n * Sets the proper styles to the ink bar element.\n * @param {?} element\n * @return {?}\n */\nprivate _setStyles(element: HTMLElement) {\n const /** @type {?} */ left = element ? (element.offsetLeft || 0) + 'px' : '0';\n const /** @type {?} */ width = element ? (element.offsetWidth || 0) + 'px' : '0';\n\n this._renderer.setStyle(this._elementRef.nativeElement, 'left', left);\n this._renderer.setStyle(this._elementRef.nativeElement, 'width', width);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-ink-bar, mat-ink-bar',\n host: {\n 'class': 'mat-ink-bar',\n },\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: NgZone, },\n];\n}\n\nfunction MdInkBar_tsickle_Closure_declarations() {\n/** @type {?} */\nMdInkBar.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdInkBar.ctorParameters;\n/** @type {?} */\nMdInkBar.prototype._renderer;\n/** @type {?} */\nMdInkBar.prototype._elementRef;\n/** @type {?} */\nMdInkBar.prototype._ngZone;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {TemplatePortalDirective} from '@angular/cdk/portal';\n/**\n * Workaround for https://github.com/angular/angular/issues/17849\n */\nexport const _MdTabLabelBaseClass = TemplatePortalDirective;\n/**\n * Used to flag tab labels for use with the portal directive\n */\nexport class MdTabLabel extends _MdTabLabelBaseClass {\n/**\n * @param {?} templateRef\n * @param {?} viewContainerRef\n */\nconstructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\n super(templateRef, viewContainerRef);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-tab-label], [mat-tab-label], [mdTabLabel], [matTabLabel]',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: TemplateRef, },\n{type: ViewContainerRef, },\n];\n}\n\nfunction MdTabLabel_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabLabel.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTabLabel.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {TemplatePortal} from '@angular/material/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\nimport {MdTabLabel} from './tab-label';\nimport {Subject} from 'rxjs/Subject';\n/**\n * \\@docs-private\n */\nexport class MdTabBase {}\nexport const /** @type {?} */ _MdTabMixinBase = mixinDisabled(MdTabBase);\nexport class MdTab extends _MdTabMixinBase implements OnInit, CanDisable, OnChanges, OnDestroy {\n/**\n * Content for the tab label given by <ng-template md-tab-label>.\n */\ntemplateLabel: MdTabLabel;\n/**\n * Template inside the MdTab view that contains an <ng-content>.\n */\n_content: TemplateRef<any>;\n/**\n * The plain text label for the tab, used when there is no template label.\n */\ntextLabel: string = '';\n/**\n * The portal that will be the hosted content of the tab\n */\nprivate _contentPortal: TemplatePortal<any> | null = null;\n/**\n * @return {?}\n */\nget content(): TemplatePortal<any> | null { return this._contentPortal; }\n/**\n * Emits whenever the label changes.\n */\n_labelChange = new Subject<void>();\n/**\n * Emits whenevfer the disable changes\n */\n_disableChange = new Subject<void>();\n/**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\nposition: number | null = null;\n/**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\norigin: number | null = null;\n/**\n * Whether the tab is currently active.\n */\nisActive = false;\n/**\n * @param {?} _viewContainerRef\n */\nconstructor(private _viewContainerRef: ViewContainerRef) {\n super();\n }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('textLabel')) {\n this._labelChange.next();\n }\n\n if (changes.hasOwnProperty('disabled')) {\n this._disableChange.next();\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void {\n this._disableChange.complete();\n this._labelChange.complete();\n }\n/**\n * @return {?}\n */\nngOnInit(): void {\n this._contentPortal = new TemplatePortal(this._content, this._viewContainerRef);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-tab, mat-tab',\n templateUrl: 'tab.html',\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n exportAs: 'mdTab, matTab',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ViewContainerRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'templateLabel': [{ type: ContentChild, args: [MdTabLabel, ] },],\n'_content': [{ type: ViewChild, args: [TemplateRef, ] },],\n'textLabel': [{ type: Input, args: ['label', ] },],\n};\n}\n\nfunction MdTab_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTab.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTab.ctorParameters;\n/** @type {?} */\nMdTab.propDecorators;\n/**\n * Content for the tab label given by <ng-template md-tab-label>.\n * @type {?}\n */\nMdTab.prototype.templateLabel;\n/**\n * Template inside the MdTab view that contains an <ng-content>.\n * @type {?}\n */\nMdTab.prototype._content;\n/**\n * The plain text label for the tab, used when there is no template label.\n * @type {?}\n */\nMdTab.prototype.textLabel;\n/**\n * The portal that will be the hosted content of the tab\n * @type {?}\n */\nMdTab.prototype._contentPortal;\n/**\n * Emits whenever the label changes.\n * @type {?}\n */\nMdTab.prototype._labelChange;\n/**\n * Emits whenevfer the disable changes\n * @type {?}\n */\nMdTab.prototype._disableChange;\n/**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n * @type {?}\n */\nMdTab.prototype.position;\n/**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n * @type {?}\n */\nMdTab.prototype.origin;\n/**\n * Whether the tab is currently active.\n * @type {?}\n */\nMdTab.prototype.isActive;\n/** @type {?} */\nMdTab.prototype._viewContainerRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ViewChild,\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n Optional,\n AfterViewChecked,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {\n trigger,\n state,\n style,\n animate,\n transition,\n AnimationEvent,\n} from '@angular/animations';\nimport {TemplatePortal, PortalHostDirective} from '@angular/cdk/portal';\nimport {Directionality, Direction} from '@angular/cdk/bidi';\n\n\n/**\n * These position states are used internally as animation states for the tab body. Setting the\n * position state to left, right, or center will transition the tab body from its current\n * position to its respective state. If there is not current position (void, in the case of a new\n * tab body), then there will be no transition animation to its state.\n *\n * In the case of a new tab body that should immediately be centered with an animating transition,\n * then left-origin-center or right-origin-center can be used, which will use left or right as its\n * psuedo-prior state.\n */\nexport type MdTabBodyPositionState =\n 'left' | 'center' | 'right' | 'left-origin-center' | 'right-origin-center';\n\n/**\n * The origin state is an internally used state that is set on a new tab body indicating if it\n * began to the left or right of the prior selected index. For example, if the selected index was\n * set to 1, and a new tab is created and selected at index 2, then the tab body would have an\n * origin of right because its index was greater than the prior selected index.\n */\nexport type MdTabBodyOriginState = 'left' | 'right';\n/**\n * Wrapper for the contents of a tab.\n * \\@docs-private\n */\nexport class MdTabBody implements OnInit, AfterViewChecked {\n/**\n * The portal host inside of this container into which the tab body content will be loaded.\n */\n_portalHost: PortalHostDirective;\n/**\n * Event emitted when the tab begins to animate towards the center as the active tab.\n */\nonCentering: EventEmitter<number> = new EventEmitter<number>();\n/**\n * Event emitted when the tab completes its animation towards the center.\n */\nonCentered: EventEmitter<void> = new EventEmitter<void>(true);\n/**\n * The tab body content to display.\n */\n_content: TemplatePortal<any>;\n/**\n * The shifted index position of the tab body, where zero represents the active center tab.\n */\n_position: MdTabBodyPositionState;\n/**\n * @param {?} position\n * @return {?}\n */\nset position(position: number) {\n if (position < 0) {\n this._position = this._getLayoutDirection() == 'ltr' ? 'left' : 'right';\n } else if (position > 0) {\n this._position = this._getLayoutDirection() == 'ltr' ? 'right' : 'left';\n } else {\n this._position = 'center';\n }\n }\n/**\n * The origin position from which this tab should appear when it is centered into view.\n */\n_origin: MdTabBodyOriginState;\n/**\n * The origin position from which this tab should appear when it is centered into view.\n * @param {?} origin\n * @return {?}\n */\nset origin(origin: number) {\n if (origin == null) { return; }\n\n const /** @type {?} */ dir = this._getLayoutDirection();\n if ((dir == 'ltr' && origin <= 0) || (dir == 'rtl' && origin > 0)) {\n this._origin = 'left';\n } else {\n this._origin = 'right';\n }\n }\n/**\n * @param {?} _elementRef\n * @param {?} _dir\n */\nconstructor(private _elementRef: ElementRef,\nprivate _dir: Directionality) { }\n/**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n * @return {?}\n */\nngOnInit() {\n if (this._position == 'center' && this._origin) {\n this._position = this._origin == 'left' ? 'left-origin-center' : 'right-origin-center';\n }\n }\n/**\n * After the view has been set, check if the tab content is set to the center and attach the\n * content if it is not already attached.\n * @return {?}\n */\nngAfterViewChecked() {\n if (this._isCenterPosition(this._position) && !this._portalHost.hasAttached()) {\n this._portalHost.attach(this._content);\n }\n }\n/**\n * @param {?} e\n * @return {?}\n */\n_onTranslateTabStarted(e: AnimationEvent) {\n if (this._isCenterPosition(e.toState)) {\n this.onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n/**\n * @param {?} e\n * @return {?}\n */\n_onTranslateTabComplete(e: AnimationEvent) {\n // If the end state is that the tab is not centered, then detach the content.\n if (!this._isCenterPosition(e.toState) && !this._isCenterPosition(this._position)) {\n this._portalHost.detach();\n }\n\n // If the transition to the center is complete, emit an event.\n if (this._isCenterPosition(e.toState) && this._isCenterPosition(this._position)) {\n this.onCentered.emit();\n }\n }\n/**\n * The text direction of the containing app.\n * @return {?}\n */\n_getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n/**\n * Whether the provided position state is considered center, regardless of origin.\n * @param {?} position\n * @return {?}\n */\nprivate _isCenterPosition(position: MdTabBodyPositionState|string): boolean {\n return position == 'center' ||\n position == 'left-origin-center' ||\n position == 'right-origin-center';\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-tab-body, mat-tab-body',\n templateUrl: 'tab-body.html',\n styleUrls: ['tab-body.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-tab-body',\n },\n animations: [\n trigger('translateTab', [\n state('void', style({transform: 'translate3d(0%, 0, 0)'})),\n state('left', style({transform: 'translate3d(-100%, 0, 0)'})),\n state('left-origin-center', style({transform: 'translate3d(0%, 0, 0)'})),\n state('right-origin-center', style({transform: 'translate3d(0%, 0, 0)'})),\n state('center', style({transform: 'translate3d(0%, 0, 0)'})),\n state('right', style({transform: 'translate3d(100%, 0, 0)'})),\n transition('* => left, * => right, left => center, right => center',\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')),\n transition('void => left-origin-center', [\n style({transform: 'translate3d(-100%, 0, 0)'}),\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')\n ]),\n transition('void => right-origin-center', [\n style({transform: 'translate3d(100%, 0, 0)'}),\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')\n ])\n ])\n ]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: Directionality, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_portalHost': [{ type: ViewChild, args: [PortalHostDirective, ] },],\n'onCentering': [{ type: Output },],\n'onCentered': [{ type: Output },],\n'_content': [{ type: Input, args: ['content', ] },],\n'position': [{ type: Input, args: ['position', ] },],\n'origin': [{ type: Input, args: ['origin', ] },],\n};\n}\n\nfunction MdTabBody_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabBody.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTabBody.ctorParameters;\n/** @type {?} */\nMdTabBody.propDecorators;\n/**\n * The portal host inside of this container into which the tab body content will be loaded.\n * @type {?}\n */\nMdTabBody.prototype._portalHost;\n/**\n * Event emitted when the tab begins to animate towards the center as the active tab.\n * @type {?}\n */\nMdTabBody.prototype.onCentering;\n/**\n * Event emitted when the tab completes its animation towards the center.\n * @type {?}\n */\nMdTabBody.prototype.onCentered;\n/**\n * The tab body content to display.\n * @type {?}\n */\nMdTabBody.prototype._content;\n/**\n * The shifted index position of the tab body, where zero represents the active center tab.\n * @type {?}\n */\nMdTabBody.prototype._position;\n/**\n * The origin position from which this tab should appear when it is centered into view.\n * @type {?}\n */\nMdTabBody.prototype._origin;\n/** @type {?} */\nMdTabBody.prototype._elementRef;\n/** @type {?} */\nMdTabBody.prototype._dir;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ViewChild,\n Component,\n Input,\n Output,\n EventEmitter,\n QueryList,\n ContentChildren,\n ElementRef,\n Renderer2,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n AfterViewChecked,\n AfterContentInit,\n AfterContentChecked,\n OnDestroy,\n ViewEncapsulation,\n} from '@angular/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MdTab} from './tab';\nimport {merge} from 'rxjs/observable/merge';\nimport {\n CanDisableRipple, MATERIAL_COMPATIBILITY_MODE,\n mixinDisableRipple\n} from '@angular/material/core';\nimport {CanColor, mixinColor, ThemePalette} from '@angular/material/core';\n/**\n * Used to generate unique ID's for each tab component\n */\nlet nextId = 0;\n/**\n * A simple change event emitted on focus or selection changes.\n */\nexport class MdTabChangeEvent {\n index: number;\n tab: MdTab;\n}\n\nfunction MdTabChangeEvent_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabChangeEvent.prototype.index;\n/** @type {?} */\nMdTabChangeEvent.prototype.tab;\n}\n\n\n/** Possible positions for the tab header. */\nexport type MdTabHeaderPosition = 'above' | 'below';\n/**\n * \\@docs-private\n */\nexport class MdTabGroupBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdTabGroupBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabGroupBase.prototype._renderer;\n/** @type {?} */\nMdTabGroupBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdTabGroupMixinBase = mixinColor(mixinDisableRipple(MdTabGroupBase), 'primary');\n/**\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\n * animated ink-bar, keyboard navigation, and screen reader.\n * See: https://www.google.com/design/spec/components/tabs.html\n */\nexport class MdTabGroup extends _MdTabGroupMixinBase implements AfterContentInit,\n AfterContentChecked, AfterViewChecked, OnDestroy, CanColor, CanDisableRipple {\n\n _tabs: QueryList<MdTab>;\n\n _tabBodyWrapper: ElementRef;\n/**\n * Whether this component has been initialized.\n */\nprivate _isInitialized: boolean = false;\n/**\n * The tab index that should be selected after the content has been checked.\n */\nprivate _indexToSelect: number | null = 0;\n/**\n * Snapshot of the height of the tab body wrapper before another tab is activated.\n */\nprivate _tabBodyWrapperHeight: number = 0;\n/**\n * Subscription to tabs being added/removed.\n */\nprivate _tabsSubscription = Subscription.EMPTY;\n/**\n * Subscription to changes in the tab labels.\n */\nprivate _tabLabelSubscription = Subscription.EMPTY;\n/**\n * Whether the tab group should grow to the size of the active tab.\n * @return {?}\n */\nget dynamicHeight(): boolean { return this._dynamicHeight; }\n/**\n * @param {?} value\n * @return {?}\n */\nset dynamicHeight(value: boolean) { this._dynamicHeight = coerceBooleanProperty(value); }\nprivate _dynamicHeight: boolean = false;\n/**\n * @deprecated\n * @return {?}\n */\nget _dynamicHeightDeprecated(): boolean { return this._dynamicHeight; }\n/**\n * @param {?} value\n * @return {?}\n */\nset _dynamicHeightDeprecated(value: boolean) { this._dynamicHeight = value; }\n/**\n * The index of the active tab.\n * @param {?} value\n * @return {?}\n */\nset selectedIndex(value: number | null) { this._indexToSelect = value; }\n/**\n * @return {?}\n */\nget selectedIndex(): number | null { return this._selectedIndex; }\nprivate _selectedIndex: number | null = null;\n/**\n * Position of the tab header.\n */\nheaderPosition: MdTabHeaderPosition = 'above';\n/**\n * Background color of the tab group.\n * @return {?}\n */\nget backgroundColor(): ThemePalette { return this._backgroundColor; }\n/**\n * @param {?} value\n * @return {?}\n */\nset backgroundColor(value: ThemePalette) {\n let /** @type {?} */ nativeElement = this._elementRef.nativeElement;\n\n this._renderer.removeClass(nativeElement, `mat-background-${this.backgroundColor}`);\n\n if (value) {\n this._renderer.addClass(nativeElement, `mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\nprivate _backgroundColor: ThemePalette;\n/**\n * Output to enable support for two-way binding on `[(selectedIndex)]`\n */\nselectedIndexChange: EventEmitter<number> = new EventEmitter();\n/**\n * Event emitted when focus has changed within a tab group.\n */\nfocusChange: EventEmitter<MdTabChangeEvent> = new EventEmitter<MdTabChangeEvent>();\n/**\n * Event emitted when the tab selection has changed.\n */\nselectChange: EventEmitter<MdTabChangeEvent> = new EventEmitter<MdTabChangeEvent>(true);\nprivate _groupId: number;\n/**\n * @param {?} _renderer\n * @param {?} elementRef\n * @param {?} _changeDetectorRef\n */\nconstructor(_renderer: Renderer2,\n elementRef: ElementRef,\nprivate _changeDetectorRef: ChangeDetectorRef) {\n super(_renderer, elementRef);\n this._groupId = nextId++;\n }\n/**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n * @return {?}\n */\nngAfterContentChecked(): void {\n // Clamp the next selected index to the boundsof 0 and the tabs length.\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Math.max(NaN, 0) === NaN).\n let /** @type {?} */ indexToSelect = this._indexToSelect =\n Math.min(this._tabs.length - 1, Math.max(this._indexToSelect || 0, 0));\n\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex != indexToSelect && this._selectedIndex != null) {\n this.selectChange.emit(this._createChangeEvent(indexToSelect));\n // Emitting this value after change detection has run\n // since the checked content may contain this variable'\n Promise.resolve().then(() => this.selectedIndexChange.emit(indexToSelect));\n }\n\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab: MdTab, index: number) => {\n tab.position = index - indexToSelect;\n tab.isActive = index === indexToSelect;\n\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._subscribeToTabLabels();\n\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this._tabsSubscription = this._tabs.changes.subscribe(() => {\n this._subscribeToTabLabels();\n this._changeDetectorRef.markForCheck();\n });\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n }\n/**\n * Waits one frame for the view to update, then updates the ink bar\n * Note: This must be run outside of the zone or it will create an infinite change detection loop.\n * @return {?}\n */\nngAfterViewChecked(): void {\n this._isInitialized = true;\n }\n/**\n * @param {?} index\n * @return {?}\n */\n_focusChanged(index: number) {\n this.focusChange.emit(this._createChangeEvent(index));\n }\n/**\n * @param {?} index\n * @return {?}\n */\nprivate _createChangeEvent(index: number): MdTabChangeEvent {\n const /** @type {?} */ event = new MdTabChangeEvent;\n event.index = index;\n if (this._tabs && this._tabs.length) {\n event.tab = this._tabs.toArray()[index];\n }\n return event;\n }\n/**\n * Subscribes to changes in the tab labels. This is needed, because the \\@Input for the label is\n * on the MdTab component, whereas the data binding is inside the MdTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n * @return {?}\n */\nprivate _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n\n this._tabLabelSubscription = merge(\n ...this._tabs.map(tab => tab._disableChange),\n ...this._tabs.map(tab => tab._labelChange)).subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n/**\n * Returns a unique id for each tab label element\n * @param {?} i\n * @return {?}\n */\n_getTabLabelId(i: number): string {\n return `md-tab-label-${this._groupId}-${i}`;\n }\n/**\n * Returns a unique id for each tab content element\n * @param {?} i\n * @return {?}\n */\n_getTabContentId(i: number): string {\n return `md-tab-content-${this._groupId}-${i}`;\n }\n/**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n * @param {?} tabHeight\n * @return {?}\n */\n_setTabBodyWrapperHeight(tabHeight: number): void {\n if (!this._dynamicHeight || !this._tabBodyWrapperHeight) { return; }\n\n this._renderer.setStyle(this._tabBodyWrapper.nativeElement, 'height',\n this._tabBodyWrapperHeight + 'px');\n\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this._tabBodyWrapper.nativeElement.offsetHeight) {\n this._renderer.setStyle(this._tabBodyWrapper.nativeElement, 'height',\n tabHeight + 'px');\n }\n }\n/**\n * Removes the height of the tab body wrapper.\n * @return {?}\n */\n_removeTabBodyWrapperHeight(): void {\n this._tabBodyWrapperHeight = this._tabBodyWrapper.nativeElement.clientHeight;\n this._renderer.setStyle(this._tabBodyWrapper.nativeElement, 'height', '');\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-tab-group, mat-tab-group',\n templateUrl: 'tab-group.html',\n styleUrls: ['tab-group.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['color', 'disableRipple'],\n host: {\n 'class': 'mat-tab-group',\n '[class.mat-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-tab-group-inverted-header]': 'headerPosition === \"below\"',\n },\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_tabs': [{ type: ContentChildren, args: [MdTab, ] },],\n'_tabBodyWrapper': [{ type: ViewChild, args: ['tabBodyWrapper', ] },],\n'dynamicHeight': [{ type: Input },],\n'_dynamicHeightDeprecated': [{ type: Input, args: ['md-dynamic-height', ] },],\n'selectedIndex': [{ type: Input },],\n'headerPosition': [{ type: Input },],\n'backgroundColor': [{ type: Input },],\n'selectedIndexChange': [{ type: Output },],\n'focusChange': [{ type: Output },],\n'selectChange': [{ type: Output },],\n};\n}\n\nfunction MdTabGroup_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabGroup.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTabGroup.ctorParameters;\n/** @type {?} */\nMdTabGroup.propDecorators;\n/** @type {?} */\nMdTabGroup.prototype._tabs;\n/** @type {?} */\nMdTabGroup.prototype._tabBodyWrapper;\n/**\n * Whether this component has been initialized.\n * @type {?}\n */\nMdTabGroup.prototype._isInitialized;\n/**\n * The tab index that should be selected after the content has been checked.\n * @type {?}\n */\nMdTabGroup.prototype._indexToSelect;\n/**\n * Snapshot of the height of the tab body wrapper before another tab is activated.\n * @type {?}\n */\nMdTabGroup.prototype._tabBodyWrapperHeight;\n/**\n * Subscription to tabs being added/removed.\n * @type {?}\n */\nMdTabGroup.prototype._tabsSubscription;\n/**\n * Subscription to changes in the tab labels.\n * @type {?}\n */\nMdTabGroup.prototype._tabLabelSubscription;\n/** @type {?} */\nMdTabGroup.prototype._dynamicHeight;\n/** @type {?} */\nMdTabGroup.prototype._selectedIndex;\n/**\n * Position of the tab header.\n * @type {?}\n */\nMdTabGroup.prototype.headerPosition;\n/** @type {?} */\nMdTabGroup.prototype._backgroundColor;\n/**\n * Output to enable support for two-way binding on `[(selectedIndex)]`\n * @type {?}\n */\nMdTabGroup.prototype.selectedIndexChange;\n/**\n * Event emitted when focus has changed within a tab group.\n * @type {?}\n */\nMdTabGroup.prototype.focusChange;\n/**\n * Event emitted when the tab selection has changed.\n * @type {?}\n */\nMdTabGroup.prototype.selectChange;\n/** @type {?} */\nMdTabGroup.prototype._groupId;\n/** @type {?} */\nMdTabGroup.prototype._changeDetectorRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, ElementRef} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\n/**\n * \\@docs-private\n */\nexport class MdTabLabelWrapperBase {}\nexport const /** @type {?} */ _MdTabLabelWrapperMixinBase = mixinDisabled(MdTabLabelWrapperBase);\n/**\n * Used in the `md-tab-group` view to display tab labels.\n * \\@docs-private\n */\nexport class MdTabLabelWrapper extends _MdTabLabelWrapperMixinBase implements CanDisable {\n/**\n * @param {?} elementRef\n */\nconstructor(public elementRef: ElementRef) {\n super();\n }\n/**\n * Sets focus on the wrapper element\n * @return {?}\n */\nfocus(): void {\n this.elementRef.nativeElement.focus();\n }\n/**\n * @return {?}\n */\ngetOffsetLeft(): number {\n return this.elementRef.nativeElement.offsetLeft;\n }\n/**\n * @return {?}\n */\ngetOffsetWidth(): number {\n return this.elementRef.nativeElement.offsetWidth;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdTabLabelWrapper], [matTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[class.mat-tab-disabled]': 'disabled'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n];\n}\n\nfunction MdTabLabelWrapper_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabLabelWrapper.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTabLabelWrapper.ctorParameters;\n/** @type {?} */\nMdTabLabelWrapper.prototype.elementRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE} from '@angular/cdk/keycodes';\nimport {auditTime, startWith} from '@angular/cdk/rxjs';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CanDisableRipple, MATERIAL_COMPATIBILITY_MODE,\n mixinDisableRipple\n} from '@angular/material/core';\nimport {fromEvent} from 'rxjs/observable/fromEvent';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MdInkBar} from './ink-bar';\nimport {MdTabLabelWrapper} from './tab-label-wrapper';\n\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n/**\n * \\@docs-private\n */\nexport class MdTabHeaderBase {}\nexport const /** @type {?} */ _MdTabHeaderMixinBase = mixinDisableRipple(MdTabHeaderBase);\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\n * width of the header container, then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * \\@docs-private\n */\nexport class MdTabHeader extends _MdTabHeaderMixinBase\n implements AfterContentChecked, AfterContentInit, OnDestroy, CanDisableRipple {\n\n _labelWrappers: QueryList<MdTabLabelWrapper>;\n _inkBar: MdInkBar;\n _tabListContainer: ElementRef;\n _tabList: ElementRef;\n/**\n * The tab index that is focused.\n */\nprivate _focusIndex: number = 0;\n/**\n * The distance in pixels that the tab labels should be translated to the left.\n */\nprivate _scrollDistance = 0;\n/**\n * Whether the header should scroll to the selected index after the view has been checked.\n */\nprivate _selectedIndexChanged = false;\n/**\n * Combines listeners that will re-align the ink bar whenever they're invoked.\n */\nprivate _realignInkBar = Subscription.EMPTY;\n/**\n * Whether the controls for pagination should be displayed\n */\n_showPaginationControls = false;\n/**\n * Whether the tab list can be scrolled more towards the end of the tab label list.\n */\n_disableScrollAfter = true;\n/**\n * Whether the tab list can be scrolled more towards the beginning of the tab label list.\n */\n_disableScrollBefore = true;\n/**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\nprivate _tabLabelCount: number;\n/**\n * Whether the scroll distance has changed and should be applied after the view is checked.\n */\nprivate _scrollDistanceChanged: boolean;\nprivate _selectedIndex: number = 0;\n/**\n * The index of the active tab.\n * @return {?}\n */\nget selectedIndex(): number { return this._selectedIndex; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selectedIndex(value: number) {\n this._selectedIndexChanged = this._selectedIndex != value;\n this._selectedIndex = value;\n this._focusIndex = value;\n }\n/**\n * Event emitted when the option is selected.\n */\nselectFocusedIndex = new EventEmitter();\n/**\n * Event emitted when a label is focused.\n */\nindexFocused = new EventEmitter();\n/**\n * @param {?} _elementRef\n * @param {?} _renderer\n * @param {?} _changeDetectorRef\n * @param {?} _dir\n */\nconstructor(private _elementRef: ElementRef,\nprivate _renderer: Renderer2,\nprivate _changeDetectorRef: ChangeDetectorRef,\nprivate _dir: Directionality) {\n super();\n }\n/**\n * @return {?}\n */\nngAfterContentChecked(): void {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount != this._labelWrappers.length) {\n this._updatePagination();\n this._tabLabelCount = this._labelWrappers.length;\n this._changeDetectorRef.markForCheck();\n }\n\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex);\n this._checkScrollingControls();\n this._alignInkBarToSelectedTab();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_handleKeydown(event: KeyboardEvent) {\n switch (event.keyCode) {\n case RIGHT_ARROW:\n this._focusNextTab();\n break;\n case LEFT_ARROW:\n this._focusPreviousTab();\n break;\n case ENTER:\n case SPACE:\n this.selectFocusedIndex.emit(this.focusIndex);\n event.preventDefault();\n break;\n }\n }\n/**\n * Aligns the ink bar to the selected tab on load.\n * @return {?}\n */\nngAfterContentInit() {\n const /** @type {?} */ dirChange = this._dir ? this._dir.change : observableOf(null);\n const /** @type {?} */ resize = typeof window !== 'undefined' ?\n auditTime.call(fromEvent(window, 'resize'), 150) :\n observableOf(null);\n\n this._realignInkBar = startWith.call(merge(dirChange, resize), null).subscribe(() => {\n this._updatePagination();\n this._alignInkBarToSelectedTab();\n });\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._realignInkBar.unsubscribe();\n }\n/**\n * Callback for when the MutationObserver detects that the content has changed.\n * @return {?}\n */\n_onContentChanges() {\n this._updatePagination();\n this._alignInkBarToSelectedTab();\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Updating the view whether pagination should be enabled or not\n * @return {?}\n */\n_updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n/**\n * When the focus index is set, we must manually send focus to the correct label\n * @param {?} value\n * @return {?}\n */\nset focusIndex(value: number) {\n if (!this._isValidIndex(value) || this._focusIndex == value) { return; }\n\n this._focusIndex = value;\n this.indexFocused.emit(value);\n this._setTabFocus(value);\n }\n/**\n * Tracks which element has focus; used for keyboard navigation\n * @return {?}\n */\nget focusIndex(): number { return this._focusIndex; }\n/**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n * @param {?} index\n * @return {?}\n */\n_isValidIndex(index: number): boolean {\n if (!this._labelWrappers) { return true; }\n\n const /** @type {?} */ tab = this._labelWrappers ? this._labelWrappers.toArray()[index] : null;\n return !!tab && !tab.disabled;\n }\n/**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n * @param {?} tabIndex\n * @return {?}\n */\n_setTabFocus(tabIndex: number) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n\n if (this._labelWrappers && this._labelWrappers.length) {\n this._labelWrappers.toArray()[tabIndex].focus();\n\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const /** @type {?} */ containerEl = this._tabListContainer.nativeElement;\n const /** @type {?} */ dir = this._getLayoutDirection();\n\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n } else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n/**\n * Moves the focus towards the beginning or the end of the list depending on the offset provided.\n * Valid offsets are 1 and -1.\n * @param {?} offset\n * @return {?}\n */\n_moveFocus(offset: number) {\n if (this._labelWrappers) {\n const /** @type {?} */ tabs: MdTabLabelWrapper[] = this._labelWrappers.toArray();\n\n for (let /** @type {?} */ i = this.focusIndex + offset; i < tabs.length && i >= 0; i += offset) {\n if (this._isValidIndex(i)) {\n this.focusIndex = i;\n return;\n }\n }\n }\n }\n/**\n * Increment the focus index by 1 until a valid tab is found.\n * @return {?}\n */\n_focusNextTab(): void {\n this._moveFocus(this._getLayoutDirection() == 'ltr' ? 1 : -1);\n }\n/**\n * Decrement the focus index by 1 until a valid tab is found.\n * @return {?}\n */\n_focusPreviousTab(): void {\n this._moveFocus(this._getLayoutDirection() == 'ltr' ? -1 : 1);\n }\n/**\n * The layout direction of the containing app.\n * @return {?}\n */\n_getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n/**\n * Performs the CSS transformation on the tab list that will cause the list to scroll.\n * @return {?}\n */\n_updateTabScrollPosition() {\n const /** @type {?} */ scrollDistance = this.scrollDistance;\n const /** @type {?} */ translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n\n this._renderer.setStyle(this._tabList.nativeElement, 'transform',\n `translate3d(${translateX}px, 0, 0)`);\n }\n/**\n * Sets the distance in pixels that the tab header should be transformed in the X-axis.\n * @param {?} v\n * @return {?}\n */\nset scrollDistance(v: number) {\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), v));\n\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n }\n/**\n * @return {?}\n */\nget scrollDistance(): number { return this._scrollDistance; }\n/**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n * \n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @param {?} scrollDir\n * @return {?}\n */\n_scrollHeader(scrollDir: ScrollDirection) {\n const /** @type {?} */ viewLength = this._tabListContainer.nativeElement.offsetWidth;\n\n // Move the scroll distance one-third the length of the tab list's viewport.\n this.scrollDistance += (scrollDir == 'before' ? -1 : 1) * viewLength / 3;\n }\n/**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n * \n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @param {?} labelIndex\n * @return {?}\n */\n_scrollToLabel(labelIndex: number) {\n const /** @type {?} */ selectedLabel = this._labelWrappers ? this._labelWrappers.toArray()[labelIndex] : null;\n\n if (!selectedLabel) { return; }\n\n // The view length is the visible width of the tab labels.\n const /** @type {?} */ viewLength = this._tabListContainer.nativeElement.offsetWidth;\n\n let /** @type {?} */ labelBeforePos: number, /** @type {?} */ labelAfterPos: number;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = selectedLabel.getOffsetLeft();\n labelAfterPos = labelBeforePos + selectedLabel.getOffsetWidth();\n } else {\n labelAfterPos = this._tabList.nativeElement.offsetWidth - selectedLabel.getOffsetLeft();\n labelBeforePos = labelAfterPos - selectedLabel.getOffsetWidth();\n }\n\n const /** @type {?} */ beforeVisiblePos = this.scrollDistance;\n const /** @type {?} */ afterVisiblePos = this.scrollDistance + viewLength;\n\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n } else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n/**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n * \n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @return {?}\n */\n_checkPaginationEnabled() {\n const /** @type {?} */ isEnabled =\n this._tabList.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n\n this._showPaginationControls = isEnabled;\n }\n/**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n * \n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @return {?}\n */\n_checkScrollingControls() {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance == 0;\n this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n * \n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @return {?}\n */\n_getMaxScrollDistance(): number {\n const /** @type {?} */ lengthOfTabList = this._tabList.nativeElement.scrollWidth;\n const /** @type {?} */ viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return (lengthOfTabList - viewLength) || 0;\n }\n/**\n * Tells the ink-bar to align itself to the current label wrapper\n * @return {?}\n */\nprivate _alignInkBarToSelectedTab(): void {\n const /** @type {?} */ selectedLabelWrapper = this._labelWrappers && this._labelWrappers.length ?\n this._labelWrappers.toArray()[this.selectedIndex].elementRef.nativeElement :\n null;\n\n this._inkBar.alignToElement(selectedLabelWrapper);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-tab-header, mat-tab-header',\n templateUrl: 'tab-header.html',\n styleUrls: ['tab-header.css'],\n inputs: ['disableRipple'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n },\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: Renderer2, },\n{type: ChangeDetectorRef, },\n{type: Directionality, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_labelWrappers': [{ type: ContentChildren, args: [MdTabLabelWrapper, ] },],\n'_inkBar': [{ type: ViewChild, args: [MdInkBar, ] },],\n'_tabListContainer': [{ type: ViewChild, args: ['tabListContainer', ] },],\n'_tabList': [{ type: ViewChild, args: ['tabList', ] },],\n'selectedIndex': [{ type: Input },],\n'selectFocusedIndex': [{ type: Output },],\n'indexFocused': [{ type: Output },],\n};\n}\n\nfunction MdTabHeader_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTabHeader.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTabHeader.ctorParameters;\n/** @type {?} */\nMdTabHeader.propDecorators;\n/** @type {?} */\nMdTabHeader.prototype._labelWrappers;\n/** @type {?} */\nMdTabHeader.prototype._inkBar;\n/** @type {?} */\nMdTabHeader.prototype._tabListContainer;\n/** @type {?} */\nMdTabHeader.prototype._tabList;\n/**\n * The tab index that is focused.\n * @type {?}\n */\nMdTabHeader.prototype._focusIndex;\n/**\n * The distance in pixels that the tab labels should be translated to the left.\n * @type {?}\n */\nMdTabHeader.prototype._scrollDistance;\n/**\n * Whether the header should scroll to the selected index after the view has been checked.\n * @type {?}\n */\nMdTabHeader.prototype._selectedIndexChanged;\n/**\n * Combines listeners that will re-align the ink bar whenever they're invoked.\n * @type {?}\n */\nMdTabHeader.prototype._realignInkBar;\n/**\n * Whether the controls for pagination should be displayed\n * @type {?}\n */\nMdTabHeader.prototype._showPaginationControls;\n/**\n * Whether the tab list can be scrolled more towards the end of the tab label list.\n * @type {?}\n */\nMdTabHeader.prototype._disableScrollAfter;\n/**\n * Whether the tab list can be scrolled more towards the beginning of the tab label list.\n * @type {?}\n */\nMdTabHeader.prototype._disableScrollBefore;\n/**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n * @type {?}\n */\nMdTabHeader.prototype._tabLabelCount;\n/**\n * Whether the scroll distance has changed and should be applied after the view is checked.\n * @type {?}\n */\nMdTabHeader.prototype._scrollDistanceChanged;\n/** @type {?} */\nMdTabHeader.prototype._selectedIndex;\n/**\n * Event emitted when the option is selected.\n * @type {?}\n */\nMdTabHeader.prototype.selectFocusedIndex;\n/**\n * Event emitted when a label is focused.\n * @type {?}\n */\nMdTabHeader.prototype.indexFocused;\n/** @type {?} */\nMdTabHeader.prototype._elementRef;\n/** @type {?} */\nMdTabHeader.prototype._renderer;\n/** @type {?} */\nMdTabHeader.prototype._changeDetectorRef;\n/** @type {?} */\nMdTabHeader.prototype._dir;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ViewContainerRef, InjectionToken} from '@angular/core';\nimport {AriaLivePoliteness} from '@angular/cdk/a11y';\nimport {Direction} from '@angular/cdk/bidi';\n\nexport const /** @type {?} */ MD_SNACK_BAR_DATA = new InjectionToken<any>('MdSnackBarData');\n\n/** Possible values for horizontalPosition on MdSnackBarConfig. */\nexport type MdSnackBarHorizontalPosition = 'start' | 'center' | 'end' | 'left' | 'right';\n\n/** Possible values for verticalPosition on MdSnackBarConfig. */\nexport type MdSnackBarVerticalPosition = 'top' | 'bottom';\n/**\n * Configuration used when opening a snack-bar.\n */\nexport class MdSnackBarConfig {\n/**\n * The politeness level for the MdAriaLiveAnnouncer announcement.\n */\npoliteness?: AriaLivePoliteness = 'assertive';\n/**\n * Message to be announced by the MdAriaLiveAnnouncer\n */\nannouncementMessage?: string = '';\n/**\n * The view container to place the overlay for the snack bar into.\n */\nviewContainerRef?: ViewContainerRef;\n/**\n * The length of time in milliseconds to wait before automatically dismissing the snack bar.\n */\nduration?: number = 0;\n/**\n * Extra CSS classes to be added to the snack bar container.\n */\nextraClasses?: string[];\n/**\n * Text layout direction for the snack bar.\n */\ndirection?: Direction = 'ltr';\n/**\n * Data being injected into the child component.\n */\ndata?: any = null;\n/**\n * The horizontal position to place the snack bar.\n */\nhorizontalPosition?: MdSnackBarHorizontalPosition = 'center';\n/**\n * The vertical position to place the snack bar.\n */\nverticalPosition?: MdSnackBarVerticalPosition = 'bottom';\n}\n\nfunction MdSnackBarConfig_tsickle_Closure_declarations() {\n/**\n * The politeness level for the MdAriaLiveAnnouncer announcement.\n * @type {?}\n */\nMdSnackBarConfig.prototype.politeness;\n/**\n * Message to be announced by the MdAriaLiveAnnouncer\n * @type {?}\n */\nMdSnackBarConfig.prototype.announcementMessage;\n/**\n * The view container to place the overlay for the snack bar into.\n * @type {?}\n */\nMdSnackBarConfig.prototype.viewContainerRef;\n/**\n * The length of time in milliseconds to wait before automatically dismissing the snack bar.\n * @type {?}\n */\nMdSnackBarConfig.prototype.duration;\n/**\n * Extra CSS classes to be added to the snack bar container.\n * @type {?}\n */\nMdSnackBarConfig.prototype.extraClasses;\n/**\n * Text layout direction for the snack bar.\n * @type {?}\n */\nMdSnackBarConfig.prototype.direction;\n/**\n * Data being injected into the child component.\n * @type {?}\n */\nMdSnackBarConfig.prototype.data;\n/**\n * The horizontal position to place the snack bar.\n * @type {?}\n */\nMdSnackBarConfig.prototype.horizontalPosition;\n/**\n * The vertical position to place the snack bar.\n * @type {?}\n */\nMdSnackBarConfig.prototype.verticalPosition;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {OverlayRef} from '@angular/cdk/overlay';\nimport {Observable} from 'rxjs/Observable';\nimport {Subject} from 'rxjs/Subject';\nimport {MdSnackBarContainer} from './snack-bar-container';\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\nexport class MdSnackBarRef<T> {\n/**\n * The instance of the component making up the content of the snack bar.\n */\ninstance: T;\n/**\n * The instance of the component making up the content of the snack bar.\n * \\@docs-private\n */\ncontainerInstance: MdSnackBarContainer;\n/**\n * Subject for notifying the user that the snack bar has closed.\n */\nprivate _afterClosed = new Subject<void>();\n/**\n * Subject for notifying the user that the snack bar has opened and appeared.\n */\nprivate _afterOpened = new Subject<void>();\n/**\n * Subject for notifying the user that the snack bar action was called.\n */\nprivate _onAction = new Subject<void>();\n/**\n * Timeout ID for the duration setTimeout call. Used to clear the timeout if the snackbar is\n * dismissed before the duration passes.\n */\nprivate _durationTimeoutId: number;\n/**\n * @param {?} containerInstance\n * @param {?} _overlayRef\n */\nconstructor(containerInstance: MdSnackBarContainer,\nprivate _overlayRef: OverlayRef) {\n this.containerInstance = containerInstance;\n // Dismiss snackbar on action.\n this.onAction().subscribe(() => this.dismiss());\n containerInstance._onExit.subscribe(() => this._finishDismiss());\n }\n/**\n * Dismisses the snack bar.\n * @return {?}\n */\ndismiss(): void {\n if (!this._afterClosed.closed) {\n this.containerInstance.exit();\n }\n clearTimeout(this._durationTimeoutId);\n }\n/**\n * Marks the snackbar action clicked.\n * @return {?}\n */\ncloseWithAction(): void {\n if (!this._onAction.closed) {\n this._onAction.next();\n this._onAction.complete();\n }\n }\n/**\n * Dismisses the snack bar after some duration\n * @param {?} duration\n * @return {?}\n */\n_dismissAfter(duration: number): void {\n this._durationTimeoutId = setTimeout(() => this.dismiss(), duration);\n }\n/**\n * Marks the snackbar as opened\n * @return {?}\n */\n_open(): void {\n if (!this._afterOpened.closed) {\n this._afterOpened.next();\n this._afterOpened.complete();\n }\n }\n/**\n * Cleans up the DOM after closing.\n * @return {?}\n */\nprivate _finishDismiss(): void {\n this._overlayRef.dispose();\n this._afterClosed.next();\n this._afterClosed.complete();\n }\n/**\n * Gets an observable that is notified when the snack bar is finished closing.\n * @return {?}\n */\nafterDismissed(): Observable<void> {\n return this._afterClosed.asObservable();\n }\n/**\n * Gets an observable that is notified when the snack bar has opened and appeared.\n * @return {?}\n */\nafterOpened(): Observable<void> {\n return this.containerInstance._onEnter;\n }\n/**\n * Gets an observable that is notified when the snack bar action is called.\n * @return {?}\n */\nonAction(): Observable<void> {\n return this._onAction.asObservable();\n }\n}\n\nfunction MdSnackBarRef_tsickle_Closure_declarations() {\n/**\n * The instance of the component making up the content of the snack bar.\n * @type {?}\n */\nMdSnackBarRef.prototype.instance;\n/**\n * The instance of the component making up the content of the snack bar.\n * \\@docs-private\n * @type {?}\n */\nMdSnackBarRef.prototype.containerInstance;\n/**\n * Subject for notifying the user that the snack bar has closed.\n * @type {?}\n */\nMdSnackBarRef.prototype._afterClosed;\n/**\n * Subject for notifying the user that the snack bar has opened and appeared.\n * @type {?}\n */\nMdSnackBarRef.prototype._afterOpened;\n/**\n * Subject for notifying the user that the snack bar action was called.\n * @type {?}\n */\nMdSnackBarRef.prototype._onAction;\n/**\n * Timeout ID for the duration setTimeout call. Used to clear the timeout if the snackbar is\n * dismissed before the duration passes.\n * @type {?}\n */\nMdSnackBarRef.prototype._durationTimeoutId;\n/** @type {?} */\nMdSnackBarRef.prototype._overlayRef;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ComponentRef,\n EmbeddedViewRef,\n ViewChild,\n NgZone,\n OnDestroy,\n Renderer2,\n ElementRef,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n trigger,\n state,\n style,\n transition,\n animate,\n AnimationEvent,\n} from '@angular/animations';\nimport {\n BasePortalHost,\n ComponentPortal,\n PortalHostDirective,\n} from '@angular/cdk/portal';\nimport {first} from '@angular/cdk/rxjs';\nimport {Observable} from 'rxjs/Observable';\nimport {Subject} from 'rxjs/Subject';\nimport {MdSnackBarConfig} from './snack-bar-config';\n\n\nexport type SnackBarState = 'visible' | 'hidden' | 'void';\n\n// TODO(jelbourn): we can't use constants from animation.ts here because you can't use\n// a text interpolation in anything that is analyzed statically with ngc (for AoT compile).\nexport const /** @type {?} */ SHOW_ANIMATION = '225ms cubic-bezier(0.4,0.0,1,1)';\nexport const /** @type {?} */ HIDE_ANIMATION = '195ms cubic-bezier(0.0,0.0,0.2,1)';\n/**\n * Internal component that wraps user-provided snack bar content.\n * \\@docs-private\n */\nexport class MdSnackBarContainer extends BasePortalHost implements OnDestroy {\n/**\n * Whether the component has been destroyed.\n */\nprivate _destroyed = false;\n/**\n * The portal host inside of this container into which the snack bar content will be loaded.\n */\n_portalHost: PortalHostDirective;\n/**\n * Subject for notifying that the snack bar has exited from view.\n */\n_onExit: Subject<any> = new Subject();\n/**\n * Subject for notifying that the snack bar has finished entering the view.\n */\n_onEnter: Subject<any> = new Subject();\n/**\n * The state of the snack bar animations.\n */\nprivate _animationState: SnackBarState;\n/**\n * The snack bar configuration.\n */\nsnackBarConfig: MdSnackBarConfig;\n/**\n * @param {?} _ngZone\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _changeDetectorRef\n */\nconstructor(\nprivate _ngZone: NgZone,\nprivate _renderer: Renderer2,\nprivate _elementRef: ElementRef,\nprivate _changeDetectorRef: ChangeDetectorRef) {\n super();\n }\n/**\n * Gets the current animation state both combining one of the possibilities from\n * SnackBarState and the vertical location.\n * @return {?}\n */\ngetAnimationState(): string {\n return `${this._animationState}-${this.snackBarConfig.verticalPosition}`;\n }\n/**\n * Attach a component portal as content to this snack bar container.\n * @template T\n * @param {?} portal\n * @return {?}\n */\nattachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n if (this._portalHost.hasAttached()) {\n throw Error('Attempting to attach snack bar content after content is already attached');\n }\n\n if (this.snackBarConfig.extraClasses) {\n // Not the most efficient way of adding classes, but the renderer doesn't allow us\n // to pass in an array or a space-separated list.\n for (let /** @type {?} */ cssClass of this.snackBarConfig.extraClasses) {\n this._renderer.addClass(this._elementRef.nativeElement, cssClass);\n }\n }\n\n if (this.snackBarConfig.horizontalPosition === 'center') {\n this._renderer.addClass(this._elementRef.nativeElement, 'mat-snack-bar-center');\n }\n\n if (this.snackBarConfig.verticalPosition === 'top') {\n this._renderer.addClass(this._elementRef.nativeElement, 'mat-snack-bar-top');\n }\n\n return this._portalHost.attachComponentPortal(portal);\n }\n/**\n * Attach a template portal as content to this snack bar container.\n * @return {?}\n */\nattachTemplatePortal(): EmbeddedViewRef<any> {\n throw Error('Not yet implemented');\n }\n/**\n * Handle end of animations, updating the state of the snackbar.\n * @param {?} event\n * @return {?}\n */\nonAnimationEnd(event: AnimationEvent) {\n if (event.toState === 'void' || event.toState.startsWith('hidden')) {\n this._completeExit();\n }\n\n if (event.toState.startsWith('visible')) {\n // Note: we shouldn't use `this` inside the zone callback,\n // because it can cause a memory leak.\n const /** @type {?} */ onEnter = this._onEnter;\n\n this._ngZone.run(() => {\n onEnter.next();\n onEnter.complete();\n });\n }\n }\n/**\n * Begin animation of snack bar entrance into view.\n * @return {?}\n */\nenter(): void {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.detectChanges();\n }\n }\n/**\n * Begin animation of the snack bar exiting from view.\n * @return {?}\n */\nexit(): Observable<void> {\n this._animationState = 'hidden';\n return this._onExit;\n }\n/**\n * Makes sure the exit callbacks have been invoked when the element is destroyed.\n * @return {?}\n */\nngOnDestroy() {\n this._destroyed = true;\n this._completeExit();\n }\n/**\n * Waits for the zone to settle before removing the element. Helps prevent\n * errors where we end up removing an element which is in the middle of an animation.\n * @return {?}\n */\nprivate _completeExit() {\n first.call(this._ngZone.onMicrotaskEmpty.asObservable()).subscribe(() => {\n this._onExit.next();\n this._onExit.complete();\n });\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'snack-bar-container',\n templateUrl: 'snack-bar-container.html',\n styleUrls: ['snack-bar-container.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n host: {\n 'role': 'alert',\n 'class': 'mat-snack-bar-container',\n '[@state]': 'getAnimationState()',\n '(@state.done)': 'onAnimationEnd($event)'\n },\n animations: [\n trigger('state', [\n // Animation from top.\n state('visible-top', style({transform: 'translateY(0%)'})),\n state('hidden-top', style({transform: 'translateY(-100%)'})),\n transition('visible-top => hidden-top', animate(HIDE_ANIMATION)),\n transition('void => visible-top', animate(SHOW_ANIMATION)),\n // Animation from bottom.\n state('visible-bottom', style({transform: 'translateY(0%)'})),\n state('hidden-bottom', style({transform: 'translateY(100%)'})),\n transition('visible-bottom => hidden-bottom', animate(HIDE_ANIMATION)),\n transition('void => visible-bottom',\n animate(SHOW_ANIMATION)),\n ])\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: NgZone, },\n{type: Renderer2, },\n{type: ElementRef, },\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_portalHost': [{ type: ViewChild, args: [PortalHostDirective, ] },],\n};\n}\n\nfunction MdSnackBarContainer_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSnackBarContainer.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSnackBarContainer.ctorParameters;\n/** @type {?} */\nMdSnackBarContainer.propDecorators;\n/**\n * Whether the component has been destroyed.\n * @type {?}\n */\nMdSnackBarContainer.prototype._destroyed;\n/**\n * The portal host inside of this container into which the snack bar content will be loaded.\n * @type {?}\n */\nMdSnackBarContainer.prototype._portalHost;\n/**\n * Subject for notifying that the snack bar has exited from view.\n * @type {?}\n */\nMdSnackBarContainer.prototype._onExit;\n/**\n * Subject for notifying that the snack bar has finished entering the view.\n * @type {?}\n */\nMdSnackBarContainer.prototype._onEnter;\n/**\n * The state of the snack bar animations.\n * @type {?}\n */\nMdSnackBarContainer.prototype._animationState;\n/**\n * The snack bar configuration.\n * @type {?}\n */\nMdSnackBarContainer.prototype.snackBarConfig;\n/** @type {?} */\nMdSnackBarContainer.prototype._ngZone;\n/** @type {?} */\nMdSnackBarContainer.prototype._renderer;\n/** @type {?} */\nMdSnackBarContainer.prototype._elementRef;\n/** @type {?} */\nMdSnackBarContainer.prototype._changeDetectorRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Component, ViewEncapsulation, Inject, ChangeDetectionStrategy} from '@angular/core';\nimport {MdSnackBarRef} from './snack-bar-ref';\nimport {MD_SNACK_BAR_DATA} from './snack-bar-config';\n/**\n * A component used to open as the default snack bar, matching material spec.\n * This should only be used internally by the snack bar service.\n */\nexport class SimpleSnackBar {\n/**\n * Data that was injected into the snack bar.\n */\ndata: { message: string, action: string };\n/**\n * @param {?} snackBarRef\n * @param {?} data\n */\nconstructor(\npublic snackBarRef: MdSnackBarRef<SimpleSnackBar>,\n data: any) {\n this.data = data;\n }\n/**\n * Performs the action on the snack bar.\n * @return {?}\n */\naction(): void {\n this.snackBarRef.closeWithAction();\n }\n/**\n * If the action button should be shown.\n * @return {?}\n */\nget hasAction(): boolean {\n return !!this.data.action;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'simple-snack-bar',\n templateUrl: 'simple-snack-bar.html',\n styleUrls: ['simple-snack-bar.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-simple-snackbar',\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdSnackBarRef, },\n{type: undefined, decorators: [{ type: Inject, args: [MD_SNACK_BAR_DATA, ] }, ]},\n];\n}\n\nfunction SimpleSnackBar_tsickle_Closure_declarations() {\n/** @type {?} */\nSimpleSnackBar.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nSimpleSnackBar.ctorParameters;\n/**\n * Data that was injected into the snack bar.\n * @type {?}\n */\nSimpleSnackBar.prototype.data;\n/** @type {?} */\nSimpleSnackBar.prototype.snackBarRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ComponentRef, Injectable, Injector, Optional, SkipSelf } from '@angular/core';\nimport {Overlay, OverlayRef, OverlayConfig} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {LiveAnnouncer} from '@angular/cdk/a11y';\nimport {PortalInjector} from '@angular/material/core';\nimport {extendObject} from '@angular/material/core';\nimport {MD_SNACK_BAR_DATA, MdSnackBarConfig} from './snack-bar-config';\nimport {MdSnackBarRef} from './snack-bar-ref';\nimport {MdSnackBarContainer} from './snack-bar-container';\nimport {SimpleSnackBar} from './simple-snack-bar';\n/**\n * Service to dispatch Material Design snack bar messages.\n */\nexport class MdSnackBar {\n/**\n * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n * If there is a parent snack-bar service, all operations should delegate to that parent\n * via `_openedSnackBarRef`.\n */\nprivate _snackBarRefAtThisLevel: MdSnackBarRef<any> | null = null;\n/**\n * Reference to the currently opened snackbar at *any* level.\n * @return {?}\n */\nget _openedSnackBarRef(): MdSnackBarRef<any> | null {\n const /** @type {?} */ parent = this._parentSnackBar;\n return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset _openedSnackBarRef(value: MdSnackBarRef<any> | null) {\n if (this._parentSnackBar) {\n this._parentSnackBar._openedSnackBarRef = value;\n } else {\n this._snackBarRefAtThisLevel = value;\n }\n }\n/**\n * @param {?} _overlay\n * @param {?} _live\n * @param {?} _injector\n * @param {?} _parentSnackBar\n */\nconstructor(\nprivate _overlay: Overlay,\nprivate _live: LiveAnnouncer,\nprivate _injector: Injector,\nprivate _parentSnackBar: MdSnackBar) {}\n/**\n * Creates and dispatches a snack bar with a custom component for the content, removing any\n * currently opened snack bars.\n * \n * @template T\n * @param {?} component Component to be instantiated.\n * @param {?=} config Extra configuration for the snack bar.\n * @return {?}\n */\nopenFromComponent<T>(component: ComponentType<T>, config?: MdSnackBarConfig): MdSnackBarRef<T> {\n const /** @type {?} */ _config = _applyConfigDefaults(config);\n const /** @type {?} */ snackBarRef = this._attach(component, _config);\n\n // When the snackbar is dismissed, clear the reference to it.\n snackBarRef.afterDismissed().subscribe(() => {\n // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n if (this._openedSnackBarRef == snackBarRef) {\n this._openedSnackBarRef = null;\n }\n });\n\n if (this._openedSnackBarRef) {\n // If a snack bar is already in view, dismiss it and enter the\n // new snack bar after exit animation is complete.\n this._openedSnackBarRef.afterDismissed().subscribe(() => {\n snackBarRef.containerInstance.enter();\n });\n this._openedSnackBarRef.dismiss();\n } else {\n // If no snack bar is in view, enter the new snack bar.\n snackBarRef.containerInstance.enter();\n }\n\n // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n if (_config.duration && _config.duration > 0) {\n snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter( /** @type {?} */(( /** @type {?} */((_config)).duration))));\n }\n\n if (_config.announcementMessage) {\n this._live.announce(_config.announcementMessage, _config.politeness);\n }\n\n this._openedSnackBarRef = snackBarRef;\n return this._openedSnackBarRef;\n }\n/**\n * Opens a snackbar with a message and an optional action.\n * @param {?} message The message to show in the snackbar.\n * @param {?=} action The label for the snackbar action.\n * @param {?=} config Additional configuration options for the snackbar.\n * @return {?}\n */\nopen(message: string, action = '', config?: MdSnackBarConfig): MdSnackBarRef<SimpleSnackBar> {\n const /** @type {?} */ _config = _applyConfigDefaults(config);\n\n // Since the user doesn't have access to the component, we can\n // override the data to pass in our own message and action.\n _config.data = {message, action};\n _config.announcementMessage = message;\n\n return this.openFromComponent(SimpleSnackBar, _config);\n }\n/**\n * Dismisses the currently-visible snack bar.\n * @return {?}\n */\ndismiss(): void {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n }\n/**\n * Attaches the snack bar container component to the overlay.\n * @param {?} overlayRef\n * @param {?} config\n * @return {?}\n */\nprivate _attachSnackBarContainer(overlayRef: OverlayRef,\n config: MdSnackBarConfig): MdSnackBarContainer {\n const /** @type {?} */ containerPortal = new ComponentPortal(MdSnackBarContainer, config.viewContainerRef);\n const /** @type {?} */ containerRef: ComponentRef<MdSnackBarContainer> = overlayRef.attach(containerPortal);\n containerRef.instance.snackBarConfig = config;\n return containerRef.instance;\n }\n/**\n * Places a new component as the content of the snack bar container.\n * @template T\n * @param {?} component\n * @param {?} config\n * @return {?}\n */\nprivate _attach<T>(component: ComponentType<T>, config: MdSnackBarConfig): MdSnackBarRef<T> {\n const /** @type {?} */ overlayRef = this._createOverlay(config);\n const /** @type {?} */ container = this._attachSnackBarContainer(overlayRef, config);\n const /** @type {?} */ snackBarRef = new MdSnackBarRef<T>(container, overlayRef);\n const /** @type {?} */ injector = this._createInjector(config, snackBarRef);\n const /** @type {?} */ portal = new ComponentPortal(component, undefined, injector);\n const /** @type {?} */ contentRef = container.attachComponentPortal(portal);\n\n // We can't pass this via the injector, because the injector is created earlier.\n snackBarRef.instance = contentRef.instance;\n\n return snackBarRef;\n }\n/**\n * Creates a new overlay and places it in the correct location.\n * @param {?} config The user-specified snack bar config.\n * @return {?}\n */\nprivate _createOverlay(config: MdSnackBarConfig): OverlayRef {\n const /** @type {?} */ state = new OverlayConfig();\n state.direction = config.direction;\n\n let /** @type {?} */ positionStrategy = this._overlay.position().global();\n // Set horizontal position.\n const /** @type {?} */ isRtl = config.direction === 'rtl';\n const /** @type {?} */ isLeft = (\n config.horizontalPosition === 'left' ||\n (config.horizontalPosition === 'start' && !isRtl) ||\n (config.horizontalPosition === 'end' && isRtl));\n const /** @type {?} */ isRight = !isLeft && config.horizontalPosition !== 'center';\n if (isLeft) {\n positionStrategy.left('0');\n } else if (isRight) {\n positionStrategy.right('0');\n } else {\n positionStrategy.centerHorizontally();\n }\n // Set horizontal position.\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n } else {\n positionStrategy.bottom('0');\n }\n\n state.positionStrategy = positionStrategy;\n return this._overlay.create(state);\n }\n/**\n * Creates an injector to be used inside of a snack bar component.\n * @template T\n * @param {?} config Config that was used to create the snack bar.\n * @param {?} snackBarRef Reference to the snack bar.\n * @return {?}\n */\nprivate _createInjector<T>(\n config: MdSnackBarConfig,\n snackBarRef: MdSnackBarRef<T>): PortalInjector {\n\n const /** @type {?} */ userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const /** @type {?} */ injectionTokens = new WeakMap();\n\n injectionTokens.set(MdSnackBarRef, snackBarRef);\n injectionTokens.set(MD_SNACK_BAR_DATA, config.data);\n\n return new PortalInjector(userInjector || this._injector, injectionTokens);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Overlay, },\n{type: LiveAnnouncer, },\n{type: Injector, },\n{type: MdSnackBar, decorators: [{ type: Optional }, { type: SkipSelf }, ]},\n];\n}\n\nfunction MdSnackBar_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSnackBar.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSnackBar.ctorParameters;\n/**\n * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n * If there is a parent snack-bar service, all operations should delegate to that parent\n * via `_openedSnackBarRef`.\n * @type {?}\n */\nMdSnackBar.prototype._snackBarRefAtThisLevel;\n/** @type {?} */\nMdSnackBar.prototype._overlay;\n/** @type {?} */\nMdSnackBar.prototype._live;\n/** @type {?} */\nMdSnackBar.prototype._injector;\n/** @type {?} */\nMdSnackBar.prototype._parentSnackBar;\n}\n\n/**\n * Applies default options to the snackbar config.\n * @param {?=} config The configuration to which the defaults will be applied.\n * @return {?} The new configuration object with defaults applied.\n */\nfunction _applyConfigDefaults(config?: MdSnackBarConfig): MdSnackBarConfig {\n return extendObject(new MdSnackBarConfig(), config);\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {LIVE_ANNOUNCER_PROVIDER} from '@angular/cdk/a11y';\nimport {MdCommonModule} from '@angular/material/core';\nimport {MdSnackBar} from './snack-bar';\nimport {MdSnackBarContainer} from './snack-bar-container';\nimport {SimpleSnackBar} from './simple-snack-bar';\nexport class MdSnackBarModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n OverlayModule,\n PortalModule,\n CommonModule,\n MdCommonModule,\n ],\n exports: [MdSnackBarContainer, MdCommonModule],\n declarations: [MdSnackBarContainer, SimpleSnackBar],\n entryComponents: [MdSnackBarContainer, SimpleSnackBar],\n providers: [MdSnackBar, LIVE_ANNOUNCER_PROVIDER]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSnackBarModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSnackBarModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSnackBarModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdSnackBarModule,MdSnackBar,SnackBarState,SHOW_ANIMATION,HIDE_ANIMATION,MdSnackBarContainer,MD_SNACK_BAR_DATA,MdSnackBarHorizontalPosition,MdSnackBarVerticalPosition,MdSnackBarConfig,MdSnackBarRef,SimpleSnackBar,MAT_SNACK_BAR_DATA,MatSnackBar,MatSnackBarConfig,MatSnackBarContainer,MatSnackBarModule,MatSnackBarRef} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, EventEmitter, Input, Output} from '@angular/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SortDirection} from './sort-direction';\nimport {getMdSortDuplicateMdSortableIdError, getMdSortHeaderMissingIdError} from './sort-errors';\n\nexport interface MdSortable {\n id: string;\n start: 'asc' | 'desc';\n disableClear: boolean;\n}\n\nexport interface Sort {\n active: string;\n direction: SortDirection;\n}\n/**\n * Container for MdSortables to manage the sort state and provide default sort parameters.\n */\nexport class MdSort {\n/**\n * Collection of all registered sortables that this directive manages.\n */\nsortables = new Map<string, MdSortable>();\n/**\n * The id of the most recently sorted MdSortable.\n */\nactive: string;\n/**\n * The direction to set when an MdSortable is initially sorted.\n * May be overriden by the MdSortable's sort start.\n */\nstart: 'asc' | 'desc' = 'asc';\n/**\n * The sort direction of the currently active MdSortable.\n */\ndirection: SortDirection = '';\n/**\n * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n * May be overriden by the MdSortable's disable clear input.\n * @return {?}\n */\nget disableClear() { return this._disableClear; }\n/**\n * @param {?} v\n * @return {?}\n */\nset disableClear(v) { this._disableClear = coerceBooleanProperty(v); }\nprivate _disableClear: boolean;\n/**\n * @return {?}\n */\nget _matSortActive() { return this.active; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matSortActive(v) { this.active = v; }\n/**\n * @return {?}\n */\nget _matSortStart() { return this.start; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matSortStart(v) { this.start = v; }\n/**\n * @return {?}\n */\nget _matSortDirection() { return this.direction; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matSortDirection(v) { this.direction = v; }\n/**\n * @return {?}\n */\nget _matSortDisableClear() { return this.disableClear; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matSortDisableClear(v) { this.disableClear = v; }\n/**\n * Event emitted when the user changes either the active sort or sort direction.\n */\nreadonly sortChange = new EventEmitter<Sort>();\n/**\n * @return {?}\n */\nget _matSortChange(): EventEmitter<Sort> { return this.sortChange; }\n/**\n * Register function to be used by the contained MdSortables. Adds the MdSortable to the\n * collection of MdSortables.\n * @param {?} sortable\n * @return {?}\n */\nregister(sortable: MdSortable) {\n if (!sortable.id) {\n throw getMdSortHeaderMissingIdError();\n }\n\n if (this.sortables.has(sortable.id)) {\n throw getMdSortDuplicateMdSortableIdError(sortable.id);\n }\n this.sortables.set(sortable.id, sortable);\n }\n/**\n * Unregister function to be used by the contained MdSortables. Removes the MdSortable from the\n * collection of contained MdSortables.\n * @param {?} sortable\n * @return {?}\n */\nderegister(sortable: MdSortable) {\n this.sortables.delete(sortable.id);\n }\n/**\n * Sets the active sort id and determines the new sort direction.\n * @param {?} sortable\n * @return {?}\n */\nsort(sortable: MdSortable) {\n if (this.active != sortable.id) {\n this.active = sortable.id;\n this.direction = sortable.start ? sortable.start : this.start;\n } else {\n this.direction = this.getNextSortDirection(sortable);\n }\n\n this.sortChange.next({active: this.active, direction: this.direction});\n }\n/**\n * Returns the next sort direction of the active sortable, checking for potential overrides.\n * @param {?} sortable\n * @return {?}\n */\ngetNextSortDirection(sortable: MdSortable): SortDirection {\n if (!sortable) { return ''; }\n\n // Get the sort direction cycle with the potential sortable overrides.\n const /** @type {?} */ disableClear = sortable.disableClear != null ? sortable.disableClear : this.disableClear;\n let /** @type {?} */ sortDirectionCycle = getSortDirectionCycle(sortable.start || this.start, disableClear);\n\n // Get and return the next direction in the cycle\n let /** @type {?} */ nextDirectionIndex = sortDirectionCycle.indexOf(this.direction) + 1;\n if (nextDirectionIndex >= sortDirectionCycle.length) { nextDirectionIndex = 0; }\n return sortDirectionCycle[nextDirectionIndex];\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdSort], [matSort]',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'active': [{ type: Input, args: ['mdSortActive', ] },],\n'start': [{ type: Input, args: ['mdSortStart', ] },],\n'direction': [{ type: Input, args: ['mdSortDirection', ] },],\n'disableClear': [{ type: Input, args: ['mdSortDisableClear', ] },],\n'_matSortActive': [{ type: Input, args: ['matSortActive', ] },],\n'_matSortStart': [{ type: Input, args: ['matSortStart', ] },],\n'_matSortDirection': [{ type: Input, args: ['matSortDirection', ] },],\n'_matSortDisableClear': [{ type: Input, args: ['matSortDisableClear', ] },],\n'sortChange': [{ type: Output, args: ['mdSortChange', ] },],\n'_matSortChange': [{ type: Output, args: ['matSortChange', ] },],\n};\n}\n\nfunction MdSort_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSort.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSort.ctorParameters;\n/** @type {?} */\nMdSort.propDecorators;\n/**\n * Collection of all registered sortables that this directive manages.\n * @type {?}\n */\nMdSort.prototype.sortables;\n/**\n * The id of the most recently sorted MdSortable.\n * @type {?}\n */\nMdSort.prototype.active;\n/**\n * The direction to set when an MdSortable is initially sorted.\n * May be overriden by the MdSortable's sort start.\n * @type {?}\n */\nMdSort.prototype.start;\n/**\n * The sort direction of the currently active MdSortable.\n * @type {?}\n */\nMdSort.prototype.direction;\n/** @type {?} */\nMdSort.prototype._disableClear;\n/**\n * Event emitted when the user changes either the active sort or sort direction.\n * @type {?}\n */\nMdSort.prototype.sortChange;\n}\n\n/**\n * Returns the sort direction cycle to use given the provided parameters of order and clear.\n * @param {?} start\n * @param {?} disableClear\n * @return {?}\n */\nfunction getSortDirectionCycle(start: 'asc' | 'desc',\n disableClear: boolean): SortDirection[] {\n let /** @type {?} */ sortOrder: SortDirection[] = ['asc', 'desc'];\n if (start == 'desc') { sortOrder.reverse(); }\n if (!disableClear) { sortOrder.push(''); }\n\n return sortOrder;\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs/Subject';\nimport {SortDirection} from './sort-direction';\n/**\n * To modify the labels and text displayed, create a new instance of MdSortHeaderIntl and\n * include it in a custom provider.\n */\nexport class MdSortHeaderIntl {\n/**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\nchanges: Subject<void> = new Subject<void>();\n/**\n * ARIA label for the sorting button.\n */\nsortButtonLabel = (id: string) => {\n return `Change sorting for ${id}`;\n }\n/**\n * A label to describe the current sort (visible only to screenreaders).\n */\nsortDescriptionLabel = (id: string, direction: SortDirection) => {\n return `Sorted by ${id} ${direction == 'asc' ? 'ascending' : 'descending'}`;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSortHeaderIntl_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSortHeaderIntl.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSortHeaderIntl.ctorParameters;\n/**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n * @type {?}\n */\nMdSortHeaderIntl.prototype.changes;\n/**\n * ARIA label for the sorting button.\n * @type {?}\n */\nMdSortHeaderIntl.prototype.sortButtonLabel;\n/**\n * A label to describe the current sort (visible only to screenreaders).\n * @type {?}\n */\nMdSortHeaderIntl.prototype.sortDescriptionLabel;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n Optional,\n ViewEncapsulation\n} from '@angular/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n trigger,\n state,\n style,\n animate,\n transition\n} from '@angular/animations';\nimport {CdkColumnDef} from '@angular/cdk/table';\nimport {Subscription} from 'rxjs/Subscription';\nimport {merge} from 'rxjs/observable/merge';\nimport {MdSort, MdSortable} from './sort';\nimport {MdSortHeaderIntl} from './sort-header-intl';\nimport {getMdSortHeaderNotContainedWithinMdSortError} from './sort-errors';\nimport {AnimationCurves, AnimationDurations} from '@angular/material/core';\n\nconst /** @type {?} */ SORT_ANIMATION_TRANSITION =\n AnimationDurations.ENTERING + ' ' + AnimationCurves.STANDARD_CURVE;\n/**\n * Applies sorting behavior (click to change sort) and styles to an element, including an\n * arrow to display the current sort direction.\n * \n * Must be provided with an id and contained within a parent MdSort directive.\n * \n * If used on header cells in a CdkTable, it will automatically default its id from its containing\n * column definition.\n */\nexport class MdSortHeader implements MdSortable {\nprivate _rerenderSubscription: Subscription;\n/**\n * ID of this sort header. If used within the context of a CdkColumnDef, this will default to\n * the column's name.\n */\nid: string;\n/**\n * Sets the position of the arrow that displays when sorted.\n */\narrowPosition: 'before' | 'after' = 'after';\n/**\n * Overrides the sort start value of the containing MdSort for this MdSortable.\n */\nstart: 'asc' | 'desc';\n/**\n * Overrides the disable clear value of the containing MdSort for this MdSortable.\n * @return {?}\n */\nget disableClear() { return this._disableClear; }\n/**\n * @param {?} v\n * @return {?}\n */\nset disableClear(v) { this._disableClear = coerceBooleanProperty(v); }\nprivate _disableClear: boolean;\n/**\n * @return {?}\n */\nget _id() { return this.id; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _id(v: string) { this.id = v; }\n/**\n * @param {?} _intl\n * @param {?} changeDetectorRef\n * @param {?} _sort\n * @param {?} _cdkColumnDef\n */\nconstructor(public _intl: MdSortHeaderIntl,\n changeDetectorRef: ChangeDetectorRef,\npublic _sort: MdSort,\npublic _cdkColumnDef: CdkColumnDef) {\n if (!_sort) {\n throw getMdSortHeaderNotContainedWithinMdSortError();\n }\n\n this._rerenderSubscription = merge(_sort.sortChange, _intl.changes).subscribe(() => {\n changeDetectorRef.markForCheck();\n });\n }\n/**\n * @return {?}\n */\nngOnInit() {\n if (!this.id && this._cdkColumnDef) {\n this.id = this._cdkColumnDef.name;\n }\n\n this._sort.register(this);\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._sort.deregister(this);\n this._rerenderSubscription.unsubscribe();\n }\n/**\n * Whether this MdSortHeader is currently sorted in either ascending or descending order.\n * @return {?}\n */\n_isSorted() {\n return this._sort.active == this.id && this._sort.direction;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: '[md-sort-header], [mat-sort-header]',\n templateUrl: 'sort-header.html',\n styleUrls: ['sort-header.css'],\n host: {\n '(click)': '_sort.sort(this)',\n '[class.mat-sort-header-sorted]': '_isSorted()',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('indicator', [\n state('asc', style({transform: 'translateY(0px)'})),\n // 10px is the height of the sort indicator, minus the width of the pointers\n state('desc', style({transform: 'translateY(10px)'})),\n transition('asc <=> desc', animate(SORT_ANIMATION_TRANSITION))\n ]),\n trigger('leftPointer', [\n state('asc', style({transform: 'rotate(-45deg)'})),\n state('desc', style({transform: 'rotate(45deg)'})),\n transition('asc <=> desc', animate(SORT_ANIMATION_TRANSITION))\n ]),\n trigger('rightPointer', [\n state('asc', style({transform: 'rotate(45deg)'})),\n state('desc', style({transform: 'rotate(-45deg)'})),\n transition('asc <=> desc', animate(SORT_ANIMATION_TRANSITION))\n ])\n ]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdSortHeaderIntl, },\n{type: ChangeDetectorRef, },\n{type: MdSort, decorators: [{ type: Optional }, ]},\n{type: CdkColumnDef, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'id': [{ type: Input, args: ['md-sort-header', ] },],\n'arrowPosition': [{ type: Input },],\n'start': [{ type: Input, args: ['start', ] },],\n'disableClear': [{ type: Input },],\n'_id': [{ type: Input, args: ['mat-sort-header', ] },],\n};\n}\n\nfunction MdSortHeader_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSortHeader.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSortHeader.ctorParameters;\n/** @type {?} */\nMdSortHeader.propDecorators;\n/** @type {?} */\nMdSortHeader.prototype._rerenderSubscription;\n/**\n * ID of this sort header. If used within the context of a CdkColumnDef, this will default to\n * the column's name.\n * @type {?}\n */\nMdSortHeader.prototype.id;\n/**\n * Sets the position of the arrow that displays when sorted.\n * @type {?}\n */\nMdSortHeader.prototype.arrowPosition;\n/**\n * Overrides the sort start value of the containing MdSort for this MdSortable.\n * @type {?}\n */\nMdSortHeader.prototype.start;\n/** @type {?} */\nMdSortHeader.prototype._disableClear;\n/** @type {?} */\nMdSortHeader.prototype._intl;\n/** @type {?} */\nMdSortHeader.prototype._sort;\n/** @type {?} */\nMdSortHeader.prototype._cdkColumnDef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdSortHeader} from './sort-header';\nimport {MdSort} from './sort';\nimport {MdSortHeaderIntl} from './sort-header-intl';\nimport {CommonModule} from '@angular/common';\nexport class MdSortModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CommonModule],\n exports: [MdSort, MdSortHeader],\n declarations: [MdSort, MdSortHeader],\n providers: [MdSortHeaderIntl]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSortModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSortModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSortModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdSortModule,SortDirection,MdSortHeader,MdSortHeaderIntl,MdSortable,Sort,MdSort,MatSort,MatSortable,MatSortHeader,MatSortHeaderIntl,MatSortModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, TemplateRef} from '@angular/core';\nimport {CdkStepLabel} from '@angular/cdk/stepper';\n/**\n * Workaround for https://github.com/angular/angular/issues/17849\n */\nexport const _MdStepLabel = CdkStepLabel;\nexport class MdStepLabel extends _MdStepLabel {\n/**\n * @param {?} template\n */\nconstructor(template: TemplateRef<any>) {\n super(template);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdStepLabel], [matStepLabel]',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: TemplateRef, },\n];\n}\n\nfunction MdStepLabel_tsickle_Closure_declarations() {\n/** @type {?} */\nMdStepLabel.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdStepLabel.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Component, Input, ViewEncapsulation} from '@angular/core';\nimport {MATERIAL_COMPATIBILITY_MODE} from '@angular/material/core';\nimport {MdStepLabel} from './step-label';\nexport class MdStepHeader {\n/**\n * Icon for the given step.\n */\nicon: string;\n/**\n * Label of the given step.\n */\nlabel: MdStepLabel | string;\n/**\n * Index of the given step.\n * @return {?}\n */\nget index() { return this._index; }\n/**\n * @param {?} value\n * @return {?}\n */\nset index(value: any) {\n this._index = coerceNumberProperty(value);\n }\nprivate _index: number;\n/**\n * Whether the given step is selected.\n * @return {?}\n */\nget selected() { return this._selected; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selected(value: any) {\n this._selected = coerceBooleanProperty(value);\n }\nprivate _selected: boolean;\n/**\n * Whether the given step label is active.\n * @return {?}\n */\nget active() { return this._active; }\n/**\n * @param {?} value\n * @return {?}\n */\nset active(value: any) {\n this._active = coerceBooleanProperty(value);\n }\nprivate _active: boolean;\n/**\n * Whether the given step is optional.\n * @return {?}\n */\nget optional() { return this._optional; }\n/**\n * @param {?} value\n * @return {?}\n */\nset optional(value: any) {\n this._optional = coerceBooleanProperty(value);\n }\nprivate _optional: boolean;\n/**\n * Returns string label of given step if it is a text label.\n * @return {?}\n */\n_stringLabel(): string | null {\n return this.label instanceof MdStepLabel ? null : this.label;\n }\n/**\n * Returns MdStepLabel if the label of given step is a template label.\n * @return {?}\n */\n_templateLabel(): MdStepLabel | null {\n return this.label instanceof MdStepLabel ? this.label : null;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-step-header, mat-step-header',\n templateUrl: 'step-header.html',\n styleUrls: ['step-header.css'],\n host: {\n 'class': 'mat-step-header',\n 'role': 'tab',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'icon': [{ type: Input },],\n'label': [{ type: Input },],\n'index': [{ type: Input },],\n'selected': [{ type: Input },],\n'active': [{ type: Input },],\n'optional': [{ type: Input },],\n};\n}\n\nfunction MdStepHeader_tsickle_Closure_declarations() {\n/** @type {?} */\nMdStepHeader.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdStepHeader.ctorParameters;\n/** @type {?} */\nMdStepHeader.propDecorators;\n/**\n * Icon for the given step.\n * @type {?}\n */\nMdStepHeader.prototype.icon;\n/**\n * Label of the given step.\n * @type {?}\n */\nMdStepHeader.prototype.label;\n/** @type {?} */\nMdStepHeader.prototype._index;\n/** @type {?} */\nMdStepHeader.prototype._selected;\n/** @type {?} */\nMdStepHeader.prototype._active;\n/** @type {?} */\nMdStepHeader.prototype._optional;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {animate, state, style, transition, trigger} from '@angular/animations';\nimport {CdkStep, CdkStepper} from '@angular/cdk/stepper';\nimport {\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n Optional,\n QueryList,\n SkipSelf,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport {FormControl, FormGroupDirective, NgForm} from '@angular/forms';\nimport {\n defaultErrorStateMatcher,\n ErrorOptions,\n ErrorStateMatcher, MATERIAL_COMPATIBILITY_MODE,\n MD_ERROR_GLOBAL_OPTIONS,\n} from '@angular/material/core';\nimport {MdStepHeader} from './step-header';\nimport {MdStepLabel} from './step-label';\n/**\n * Workaround for https://github.com/angular/angular/issues/17849\n */\nexport const _MdStep = CdkStep;\nexport const /** @type {?} */ _MdStepper = CdkStepper;\nexport class MdStep extends _MdStep implements ErrorOptions {\n/**\n * Content for step label given by <ng-template matStepLabel> or <ng-template mdStepLabel>.\n */\nstepLabel: MdStepLabel;\n/**\n * Original ErrorStateMatcher that checks the validity of form control.\n */\nprivate _originalErrorStateMatcher: ErrorStateMatcher;\n/**\n * @param {?} mdStepper\n * @param {?} errorOptions\n */\nconstructor( mdStepper: MdStepper,\n errorOptions: ErrorOptions) {\n super(mdStepper);\n if (errorOptions && errorOptions.errorStateMatcher) {\n this._originalErrorStateMatcher = errorOptions.errorStateMatcher;\n } else {\n this._originalErrorStateMatcher = defaultErrorStateMatcher;\n }\n }\n/**\n * Custom error state matcher that additionally checks for validity of interacted form.\n */\nerrorStateMatcher = (control: FormControl, form: FormGroupDirective | NgForm) => {\n let originalErrorState = this._originalErrorStateMatcher(control, form);\n\n // Custom error state checks for the validity of form that is not submitted or touched\n // since user can trigger a form change by calling for another step without directly\n // interacting with the current form.\n let customErrorState = control.invalid && this.interacted;\n\n return originalErrorState || customErrorState;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-step, mat-step',\n templateUrl: 'step.html',\n providers: [{provide: MD_ERROR_GLOBAL_OPTIONS, useExisting: MdStep}],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdStepper, decorators: [{ type: Inject, args: [forwardRef(() => MdStepper), ] }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: SkipSelf }, { type: Inject, args: [MD_ERROR_GLOBAL_OPTIONS, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'stepLabel': [{ type: ContentChild, args: [MdStepLabel, ] },],\n};\n}\n\nfunction MdStep_tsickle_Closure_declarations() {\n/** @type {?} */\nMdStep.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdStep.ctorParameters;\n/** @type {?} */\nMdStep.propDecorators;\n/**\n * Content for step label given by <ng-template matStepLabel> or <ng-template mdStepLabel>.\n * @type {?}\n */\nMdStep.prototype.stepLabel;\n/**\n * Original ErrorStateMatcher that checks the validity of form control.\n * @type {?}\n */\nMdStep.prototype._originalErrorStateMatcher;\n/**\n * Custom error state matcher that additionally checks for validity of interacted form.\n * @type {?}\n */\nMdStep.prototype.errorStateMatcher;\n}\n\nexport class MdStepper extends _MdStepper {\n/**\n * The list of step headers of the steps in the stepper.\n */\n_stepHeader: QueryList<ElementRef>;\n/**\n * Steps that the stepper holds.\n */\n_steps: QueryList<MdStep>;\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdStepper]'\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_stepHeader': [{ type: ViewChildren, args: [MdStepHeader, {read: ElementRef}, ] },],\n'_steps': [{ type: ContentChildren, args: [MdStep, ] },],\n};\n}\n\nfunction MdStepper_tsickle_Closure_declarations() {\n/** @type {?} */\nMdStepper.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdStepper.ctorParameters;\n/** @type {?} */\nMdStepper.propDecorators;\n/**\n * The list of step headers of the steps in the stepper.\n * @type {?}\n */\nMdStepper.prototype._stepHeader;\n/**\n * Steps that the stepper holds.\n * @type {?}\n */\nMdStepper.prototype._steps;\n}\n\nexport class MdHorizontalStepper extends MdStepper { static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-horizontal-stepper, mat-horizontal-stepper',\n templateUrl: 'stepper-horizontal.html',\n styleUrls: ['stepper.css'],\n inputs: ['selectedIndex'],\n host: {\n 'class': 'mat-stepper-horizontal',\n 'role': 'tablist',\n },\n animations: [\n trigger('stepTransition', [\n state('previous', style({transform: 'translate3d(-100%, 0, 0)', visibility: 'hidden'})),\n state('current', style({transform: 'translate3d(0%, 0, 0)', visibility: 'visible'})),\n state('next', style({transform: 'translate3d(100%, 0, 0)', visibility: 'hidden'})),\n transition('* => *',\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)'))\n ])\n ],\n providers: [{provide: MdStepper, useExisting: MdHorizontalStepper}],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdHorizontalStepper_tsickle_Closure_declarations() {\n/** @type {?} */\nMdHorizontalStepper.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdHorizontalStepper.ctorParameters;\n}\n\nexport class MdVerticalStepper extends MdStepper { static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-vertical-stepper, mat-vertical-stepper',\n templateUrl: 'stepper-vertical.html',\n styleUrls: ['stepper.css'],\n inputs: ['selectedIndex'],\n host: {\n 'class': 'mat-stepper-vertical',\n 'role': 'tablist',\n },\n animations: [\n trigger('stepTransition', [\n state('previous', style({height: '0px', visibility: 'hidden'})),\n state('next', style({height: '0px', visibility: 'hidden'})),\n state('current', style({height: '*', visibility: 'visible'})),\n transition('* <=> current', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)'))\n ])\n ],\n providers: [{provide: MdStepper, useExisting: MdVerticalStepper}],\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdVerticalStepper_tsickle_Closure_declarations() {\n/** @type {?} */\nMdVerticalStepper.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdVerticalStepper.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {animate, AnimationEvent, state, style, transition, trigger} from '@angular/animations';\nimport {FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ESCAPE, first, startWith, takeUntil} from '@angular/material/core';\nimport {DOCUMENT} from '@angular/platform-browser';\nimport {merge} from 'rxjs/observable/merge';\nimport {Subscription} from 'rxjs/Subscription';\n/**\n * Throws an exception when two MdDrawer are matching the same position.\n * @param {?} position\n * @return {?}\n */\nexport function throwMdDuplicatedDrawerError(position: string) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/**\n * Drawer toggle promise result.\n * @deprecated\n */\nexport class MdDrawerToggleResult {\n/**\n * @param {?} type\n * @param {?} animationFinished\n */\nconstructor(public type: 'open' | 'close',\npublic animationFinished: boolean) {}\n}\n\nfunction MdDrawerToggleResult_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDrawerToggleResult.prototype.type;\n/** @type {?} */\nMdDrawerToggleResult.prototype.animationFinished;\n}\n\n/**\n * <md-drawer> component.\n * \n * This component corresponds to a drawer that can be opened on the drawer container.\n * \n * Please refer to README.md for examples on how to use it.\n */\nexport class MdDrawer implements AfterContentInit, OnDestroy {\nprivate _focusTrap: FocusTrap;\nprivate _elementFocusedBeforeDrawerWasOpened: HTMLElement | null = null;\n/**\n * Whether the drawer is initialized. Used for disabling the initial animation.\n */\nprivate _enableAnimations = false;\n/**\n * The side that the drawer is attached to.\n * @return {?}\n */\nget position() { return this._position; }\n/**\n * @param {?} value\n * @return {?}\n */\nset position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onAlignChanged.emit();\n this.onPositionChanged.emit();\n }\n }\nprivate _position: 'start' | 'end' = 'start';\n/**\n * @deprecated\n * @return {?}\n */\nget align() { return this.position; }\n/**\n * @param {?} value\n * @return {?}\n */\nset align(value) { this.position = value; }\n/**\n * Mode of the drawer; one of 'over', 'push' or 'side'.\n */\nmode: 'over' | 'push' | 'side' = 'over';\n/**\n * Whether the drawer can be closed with the escape key or by clicking on the backdrop.\n * @return {?}\n */\nget disableClose(): boolean { return this._disableClose; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disableClose(value: boolean) { this._disableClose = coerceBooleanProperty(value); }\nprivate _disableClose: boolean = false;\n/**\n * Whether the drawer is opened.\n */\nprivate _opened: boolean = false;\n/**\n * Emits whenever the drawer has started animating.\n */\n_animationStarted = new EventEmitter<void>();\n/**\n * Whether the drawer is animating. Used to prevent overlapping animations.\n */\n_isAnimating = false;\n/**\n * Current state of the sidenav animation.\n */\n_animationState: 'open-instant' | 'open' | 'void' = 'void';\n/**\n * Promise that resolves when the open/close animation completes. It is here for backwards\n * compatibility and should be removed next time we do drawer breaking changes.\n * @deprecated\n */\nprivate _currentTogglePromise: Promise<MdDrawerToggleResult> | null;\n/**\n * Event emitted when the drawer is fully opened.\n */\nonOpen = new EventEmitter<MdDrawerToggleResult | void>();\n/**\n * Event emitted when the drawer is fully closed.\n */\nonClose = new EventEmitter<MdDrawerToggleResult | void>();\n/**\n * Event emitted when the drawer's position changes.\n */\nonPositionChanged = new EventEmitter<void>();\n/**\n * @deprecated\n */\nonAlignChanged = new EventEmitter<void>();\n/**\n * @return {?}\n */\nget isFocusTrapEnabled() {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n return this.opened && this.mode !== 'side';\n }\n/**\n * @param {?} _elementRef\n * @param {?} _focusTrapFactory\n * @param {?} _doc\n */\nconstructor(private _elementRef: ElementRef,\nprivate _focusTrapFactory: FocusTrapFactory,\nprivate _doc: any) {\n this.onOpen.subscribe(() => {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement as HTMLElement;\n }\n\n if (this.isFocusTrapEnabled && this._focusTrap) {\n this._focusTrap.focusInitialElementWhenReady();\n }\n });\n\n this.onClose.subscribe(() => this._restoreFocus());\n }\n/**\n * If focus is currently inside the drawer, restores it to where it was before the drawer\n * opened.\n * @return {?}\n */\nprivate _restoreFocus() {\n let /** @type {?} */ activeEl = this._doc && this._doc.activeElement;\n if (activeEl && this._elementRef.nativeElement.contains(activeEl)) {\n if (this._elementFocusedBeforeDrawerWasOpened instanceof HTMLElement) {\n this._elementFocusedBeforeDrawerWasOpened.focus();\n } else {\n this._elementRef.nativeElement.blur();\n }\n }\n\n this._elementFocusedBeforeDrawerWasOpened = null;\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._focusTrap.enabled = this.isFocusTrapEnabled;\n this._enableAnimations = true;\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n/**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n * @return {?}\n */\nget opened(): boolean { return this._opened; }\n/**\n * @param {?} v\n * @return {?}\n */\nset opened(v: boolean) {\n this.toggle(coerceBooleanProperty(v));\n }\n/**\n * Open the drawer.\n * @return {?}\n */\nopen(): Promise<MdDrawerToggleResult> {\n return this.toggle(true);\n }\n/**\n * Close the drawer.\n * @return {?}\n */\nclose(): Promise<MdDrawerToggleResult> {\n return this.toggle(false);\n }\n/**\n * Toggle this drawer.\n * @param {?=} isOpen Whether the drawer should be open.\n * @return {?}\n */\ntoggle(isOpen: boolean = !this.opened): Promise<MdDrawerToggleResult> {\n if (!this._isAnimating) {\n this._opened = isOpen;\n\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n } else {\n this._animationState = 'void';\n }\n\n this._currentTogglePromise = new Promise(resolve => {\n first.call(isOpen ? this.onOpen : this.onClose).subscribe(resolve);\n });\n\n if (this._focusTrap) {\n this._focusTrap.enabled = this.isFocusTrapEnabled;\n }\n }\n\n // TODO(crisbeto): This promise is here for backwards-compatibility.\n // It should be removed next time we do breaking changes in the drawer.\n return /** @type {?} */(( this._currentTogglePromise));\n }\n/**\n * Handles the keyboard events.\n * \\@docs-private\n * @param {?} event\n * @return {?}\n */\nhandleKeydown(event: KeyboardEvent) {\n if (event.keyCode === ESCAPE && !this.disableClose) {\n this.close();\n event.stopPropagation();\n }\n }\n/**\n * @return {?}\n */\n_onAnimationStart() {\n this._isAnimating = true;\n this._animationStarted.emit();\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onAnimationEnd(event: AnimationEvent) {\n const {fromState, toState} = event;\n\n if (toState === 'open' && fromState === 'void') {\n this.onOpen.emit(new MdDrawerToggleResult('open', true));\n } else if (toState === 'void' && fromState === 'open') {\n this.onClose.emit(new MdDrawerToggleResult('close', true));\n }\n\n // Note: as of Angular 4.3, the animations module seems to fire the `start` callback before\n // the end if animations are disabled. Make this call async to ensure that it still fires\n // at the appropriate time.\n Promise.resolve().then(() => {\n this._isAnimating = false;\n this._currentTogglePromise = null;\n });\n }\n/**\n * @return {?}\n */\nget _width() {\n return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-drawer, mat-drawer',\n templateUrl: 'drawer.html',\n animations: [\n trigger('transform', [\n state('open, open-instant', style({\n transform: 'translate3d(0, 0, 0)',\n visibility: 'visible',\n })),\n state('void', style({\n visibility: 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void',\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n ])\n ],\n host: {\n 'class': 'mat-drawer',\n '[@transform]': '_animationState',\n '(@transform.start)': '_onAnimationStart()',\n '(@transform.done)': '_onAnimationEnd($event)',\n '(keydown)': 'handleKeydown($event)',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n 'tabIndex': '-1',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: FocusTrapFactory, },\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'position': [{ type: Input },],\n'align': [{ type: Input },],\n'mode': [{ type: Input },],\n'disableClose': [{ type: Input },],\n'onOpen': [{ type: Output, args: ['open', ] },],\n'onClose': [{ type: Output, args: ['close', ] },],\n'onPositionChanged': [{ type: Output, args: ['positionChanged', ] },],\n'onAlignChanged': [{ type: Output, args: ['align-changed', ] },],\n'opened': [{ type: Input },],\n};\n}\n\nfunction MdDrawer_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDrawer.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDrawer.ctorParameters;\n/** @type {?} */\nMdDrawer.propDecorators;\n/** @type {?} */\nMdDrawer.prototype._focusTrap;\n/** @type {?} */\nMdDrawer.prototype._elementFocusedBeforeDrawerWasOpened;\n/**\n * Whether the drawer is initialized. Used for disabling the initial animation.\n * @type {?}\n */\nMdDrawer.prototype._enableAnimations;\n/** @type {?} */\nMdDrawer.prototype._position;\n/**\n * Mode of the drawer; one of 'over', 'push' or 'side'.\n * @type {?}\n */\nMdDrawer.prototype.mode;\n/** @type {?} */\nMdDrawer.prototype._disableClose;\n/**\n * Whether the drawer is opened.\n * @type {?}\n */\nMdDrawer.prototype._opened;\n/**\n * Emits whenever the drawer has started animating.\n * @type {?}\n */\nMdDrawer.prototype._animationStarted;\n/**\n * Whether the drawer is animating. Used to prevent overlapping animations.\n * @type {?}\n */\nMdDrawer.prototype._isAnimating;\n/**\n * Current state of the sidenav animation.\n * @type {?}\n */\nMdDrawer.prototype._animationState;\n/**\n * Promise that resolves when the open/close animation completes. It is here for backwards\n * compatibility and should be removed next time we do drawer breaking changes.\n * @deprecated\n * @type {?}\n */\nMdDrawer.prototype._currentTogglePromise;\n/**\n * Event emitted when the drawer is fully opened.\n * @type {?}\n */\nMdDrawer.prototype.onOpen;\n/**\n * Event emitted when the drawer is fully closed.\n * @type {?}\n */\nMdDrawer.prototype.onClose;\n/**\n * Event emitted when the drawer's position changes.\n * @type {?}\n */\nMdDrawer.prototype.onPositionChanged;\n/**\n * @deprecated\n * @type {?}\n */\nMdDrawer.prototype.onAlignChanged;\n/** @type {?} */\nMdDrawer.prototype._elementRef;\n/** @type {?} */\nMdDrawer.prototype._focusTrapFactory;\n/** @type {?} */\nMdDrawer.prototype._doc;\n}\n\n/**\n * <md-drawer-container> component.\n * \n * This is the parent component to one or two <md-drawer>s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nexport class MdDrawerContainer implements AfterContentInit, OnDestroy {\n _drawers: QueryList<MdDrawer>;\n/**\n * The drawer child with the `start` position.\n * @return {?}\n */\nget start() { return this._start; }\n/**\n * The drawer child with the `end` position.\n * @return {?}\n */\nget end() { return this._end; }\n/**\n * Event emitted when the drawer backdrop is clicked.\n */\nbackdropClick = new EventEmitter<void>();\n/**\n * The drawer at the start/end position, independent of direction.\n */\nprivate _start: MdDrawer | null;\nprivate _end: MdDrawer | null;\n/**\n * The drawer at the left/right. When direction changes, these will change as well.\n * They're used as aliases for the above to set the left/right style properly.\n * In LTR, _left == _start and _right == _end.\n * In RTL, _left == _end and _right == _start.\n */\nprivate _left: MdDrawer | null;\nprivate _right: MdDrawer | null;\n/**\n * Subscription to the Directionality change EventEmitter.\n */\nprivate _dirChangeSubscription = Subscription.EMPTY;\n/**\n * Inline styles to be applied to the container.\n */\n_styles: { marginLeft: string; marginRight: string; transform: string; };\n/**\n * @param {?} _dir\n * @param {?} _element\n * @param {?} _renderer\n * @param {?} _ngZone\n * @param {?} _changeDetectorRef\n */\nconstructor(\nprivate _dir: Directionality,\nprivate _element: ElementRef,\nprivate _renderer: Renderer2,\nprivate _ngZone: NgZone,\nprivate _changeDetectorRef: ChangeDetectorRef) {\n // If a `Dir` directive exists up the tree, listen direction changes and update the left/right\n // properties to point to the proper start/end.\n if (_dir != null) {\n this._dirChangeSubscription = _dir.change.subscribe(() => this._validateDrawers());\n }\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n startWith.call(this._drawers.changes, null).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach((drawer: MdDrawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n });\n });\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._dirChangeSubscription.unsubscribe();\n }\n/**\n * Calls `open` of both start and end drawers\n * @return {?}\n */\nopen(): void {\n this._drawers.forEach(drawer => drawer.open());\n }\n/**\n * Calls `close` of both start and end drawers\n * @return {?}\n */\nclose(): void {\n this._drawers.forEach(drawer => drawer.close());\n }\n/**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n * @param {?} drawer\n * @return {?}\n */\nprivate _watchDrawerToggle(drawer: MdDrawer): void {\n takeUntil.call(drawer._animationStarted, this._drawers.changes).subscribe(() => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n this._renderer.addClass(this._element.nativeElement, 'mat-drawer-transition');\n this._updateStyles();\n this._changeDetectorRef.markForCheck();\n });\n\n if (drawer.mode !== 'side') {\n takeUntil.call(merge(drawer.onOpen, drawer.onClose), this._drawers.changes).subscribe(() =>\n this._setContainerClass(drawer.opened));\n }\n }\n/**\n * Subscribes to drawer onPositionChanged event in order to re-validate drawers when the position\n * changes.\n * @param {?} drawer\n * @return {?}\n */\nprivate _watchDrawerPosition(drawer: MdDrawer): void {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n takeUntil.call(drawer.onPositionChanged, this._drawers.changes).subscribe(() => {\n first.call(this._ngZone.onMicrotaskEmpty.asObservable()).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n/**\n * Toggles the 'mat-drawer-opened' class on the main 'md-drawer-container' element.\n * @param {?} isAdd\n * @return {?}\n */\nprivate _setContainerClass(isAdd: boolean): void {\n if (isAdd) {\n this._renderer.addClass(this._element.nativeElement, 'mat-drawer-opened');\n } else {\n this._renderer.removeClass(this._element.nativeElement, 'mat-drawer-opened');\n }\n }\n/**\n * Validate the state of the drawer children components.\n * @return {?}\n */\nprivate _validateDrawers() {\n this._start = this._end = null;\n\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null) {\n throwMdDuplicatedDrawerError('end');\n }\n this._end = drawer;\n } else {\n if (this._start != null) {\n throwMdDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n\n this._right = this._left = null;\n\n // Detect if we're LTR or RTL.\n if (this._dir == null || this._dir.value == 'ltr') {\n this._left = this._start;\n this._right = this._end;\n } else {\n this._left = this._end;\n this._right = this._start;\n }\n }\n/**\n * @return {?}\n */\n_onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawer();\n }\n/**\n * @return {?}\n */\n_closeModalDrawer() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && drawer.mode !== 'side')\n .forEach(drawer => /** @type {?} */(( drawer)).close());\n }\n/**\n * @return {?}\n */\n_isShowingBackdrop(): boolean {\n return (this._isDrawerOpen(this._start) && /** @type {?} */(( this._start)).mode != 'side')\n || (this._isDrawerOpen(this._end) && /** @type {?} */(( this._end)).mode != 'side');\n }\n/**\n * @param {?} drawer\n * @return {?}\n */\nprivate _isDrawerOpen(drawer: MdDrawer | null): boolean {\n return drawer != null && drawer.opened;\n }\n/**\n * Return the width of the drawer, if it's in the proper mode and opened.\n * This may relayout the view, so do not call this often.\n * @param {?} drawer\n * @param {?} mode\n * @return {?}\n */\nprivate _getDrawerEffectiveWidth(drawer: MdDrawer, mode: string): number {\n return (this._isDrawerOpen(drawer) && drawer.mode == mode) ? drawer._width : 0;\n }\n/**\n * Recalculates and updates the inline styles. Note that this\n * should be used sparingly, because it causes a reflow.\n * @return {?}\n */\nprivate _updateStyles() {\n const /** @type {?} */ marginLeft = this._left ? this._getDrawerEffectiveWidth(this._left, 'side') : 0;\n const /** @type {?} */ marginRight = this._right ? this._getDrawerEffectiveWidth(this._right, 'side') : 0;\n const /** @type {?} */ leftWidth = this._left ? this._getDrawerEffectiveWidth(this._left, 'push') : 0;\n const /** @type {?} */ rightWidth = this._right ? this._getDrawerEffectiveWidth(this._right, 'push') : 0;\n\n this._styles = {\n marginLeft: `${marginLeft}px`,\n marginRight: `${marginRight}px`,\n transform: `translate3d(${leftWidth - rightWidth}px, 0, 0)`\n };\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-drawer-container, mat-drawer-container',\n templateUrl: 'drawer-container.html',\n styleUrls: [\n 'drawer.css',\n 'drawer-transitions.css',\n ],\n host: {\n 'class': 'mat-drawer-container',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Directionality, decorators: [{ type: Optional }, ]},\n{type: ElementRef, },\n{type: Renderer2, },\n{type: NgZone, },\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_drawers': [{ type: ContentChildren, args: [MdDrawer, ] },],\n'backdropClick': [{ type: Output },],\n};\n}\n\nfunction MdDrawerContainer_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDrawerContainer.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDrawerContainer.ctorParameters;\n/** @type {?} */\nMdDrawerContainer.propDecorators;\n/** @type {?} */\nMdDrawerContainer.prototype._drawers;\n/**\n * Event emitted when the drawer backdrop is clicked.\n * @type {?}\n */\nMdDrawerContainer.prototype.backdropClick;\n/**\n * The drawer at the start/end position, independent of direction.\n * @type {?}\n */\nMdDrawerContainer.prototype._start;\n/** @type {?} */\nMdDrawerContainer.prototype._end;\n/**\n * The drawer at the left/right. When direction changes, these will change as well.\n * They're used as aliases for the above to set the left/right style properly.\n * In LTR, _left == _start and _right == _end.\n * In RTL, _left == _end and _right == _start.\n * @type {?}\n */\nMdDrawerContainer.prototype._left;\n/** @type {?} */\nMdDrawerContainer.prototype._right;\n/**\n * Subscription to the Directionality change EventEmitter.\n * @type {?}\n */\nMdDrawerContainer.prototype._dirChangeSubscription;\n/**\n * Inline styles to be applied to the container.\n * @type {?}\n */\nMdDrawerContainer.prototype._styles;\n/** @type {?} */\nMdDrawerContainer.prototype._dir;\n/** @type {?} */\nMdDrawerContainer.prototype._element;\n/** @type {?} */\nMdDrawerContainer.prototype._renderer;\n/** @type {?} */\nMdDrawerContainer.prototype._ngZone;\n/** @type {?} */\nMdDrawerContainer.prototype._changeDetectorRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport {MdDrawer, MdDrawerContainer} from './drawer';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\nexport class MdSidenav extends MdDrawer {static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-sidenav, mat-sidenav',\n templateUrl: 'drawer.html',\n animations: [\n trigger('transform', [\n state('open, open-instant', style({\n transform: 'translate3d(0, 0, 0)',\n visibility: 'visible',\n })),\n state('void', style({\n visibility: 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void',\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n ])\n ],\n host: {\n 'class': 'mat-drawer mat-sidenav',\n '[@transform]': '_animationState',\n '(@transform.start)': '_onAnimationStart()',\n '(@transform.done)': '_onAnimationEnd($event)',\n '(keydown)': 'handleKeydown($event)',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n 'tabIndex': '-1',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSidenav_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSidenav.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSidenav.ctorParameters;\n}\n\nexport class MdSidenavContainer extends MdDrawerContainer {\n _drawers;\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-sidenav-container, mat-sidenav-container',\n templateUrl: 'drawer-container.html',\n styleUrls: [\n 'drawer.css',\n 'drawer-transitions.css',\n ],\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_drawers': [{ type: ContentChildren, args: [MdSidenav, ] },],\n};\n}\n\nfunction MdSidenavContainer_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSidenavContainer.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSidenavContainer.ctorParameters;\n/** @type {?} */\nMdSidenavContainer.propDecorators;\n/** @type {?} */\nMdSidenavContainer.prototype._drawers;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {MdCommonModule} from '@angular/material/core';\nimport {MdDrawer, MdDrawerContainer} from './drawer';\nimport {MdSidenav, MdSidenavContainer} from './sidenav';\nexport class MdSidenavModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CommonModule, MdCommonModule, A11yModule, OverlayModule],\n exports: [MdDrawerContainer, MdDrawer, MdSidenavContainer, MdSidenav, MdCommonModule],\n declarations: [MdDrawerContainer, MdDrawer, MdSidenavContainer, MdSidenav],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSidenavModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSidenavModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSidenavModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdSidenavModule,throwMdDuplicatedDrawerError,MdDrawerToggleResult,MdDrawer,MdDrawerContainer,MdSidenav,MdSidenavContainer,MatDrawerToggleResult,MatDrawer,MatDrawerContainer,MatSidenav,MatSidenavContainer,MatSidenavModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n applyCssTransform,\n CanColor,\n CanDisable,\n CanDisableRipple,\n HammerInput,\n HasTabIndex,\n MATERIAL_COMPATIBILITY_MODE,\n MdRipple,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n mixinTabIndex,\n RippleRef,\n} from '@angular/material/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {FocusMonitor, FocusOrigin} from '@angular/cdk/a11y';\n\n// Increasing integer for generating unique ids for slide-toggle components.\nlet /** @type {?} */ nextUniqueId = 0;\n\nexport const /** @type {?} */ MD_SLIDE_TOGGLE_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MdSlideToggle),\n multi: true\n};\n/**\n * Change event object emitted by a MdSlideToggle.\n */\nexport class MdSlideToggleChange {\n source: MdSlideToggle;\n checked: boolean;\n}\n\nfunction MdSlideToggleChange_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSlideToggleChange.prototype.source;\n/** @type {?} */\nMdSlideToggleChange.prototype.checked;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdSlideToggleBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdSlideToggleBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSlideToggleBase.prototype._renderer;\n/** @type {?} */\nMdSlideToggleBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdSlideToggleMixinBase =\n mixinTabIndex(mixinColor(mixinDisableRipple(mixinDisabled(MdSlideToggleBase)), 'accent'));\n/**\n * Represents a slidable \"switch\" toggle that can be moved between on and off.\n */\nexport class MdSlideToggle extends _MdSlideToggleMixinBase implements OnDestroy, AfterContentInit,\n ControlValueAccessor, CanDisable, CanColor, HasTabIndex, CanDisableRipple {\nprivate onChange = (_: any) => {};\nprivate onTouched = () => {};\nprivate _uniqueId: string = `md-slide-toggle-${++nextUniqueId}`;\nprivate _slideRenderer: SlideToggleRenderer;\nprivate _required: boolean = false;\nprivate _checked: boolean = false;\n/**\n * Reference to the focus state ripple.\n */\nprivate _focusRipple: RippleRef | null;\n/**\n * Name value will be applied to the input element if present\n */\nname: string | null = null;\n/**\n * A unique id for the slide-toggle input. If none is supplied, it will be auto-generated.\n */\nid: string = this._uniqueId;\n/**\n * Whether the label should appear after or before the slide-toggle. Defaults to 'after'\n */\nlabelPosition: 'before' | 'after' = 'after';\n/**\n * Used to set the aria-label attribute on the underlying input element.\n */\nariaLabel: string | null = null;\n/**\n * Used to set the aria-labelledby attribute on the underlying input element.\n */\nariaLabelledby: string | null = null;\n/**\n * Whether the slide-toggle is required.\n * @return {?}\n */\nget required(): boolean { return this._required; }\n/**\n * @param {?} value\n * @return {?}\n */\nset required(value) { this._required = coerceBooleanProperty(value); }\n/**\n * Whether the slide-toggle element is checked or not\n * @return {?}\n */\nget checked(): boolean { return this._checked; }\n/**\n * @param {?} value\n * @return {?}\n */\nset checked(value) {\n this._checked = !!value;\n this._changeDetectorRef.markForCheck();\n }\n/**\n * An event will be dispatched each time the slide-toggle changes its value.\n */\nchange: EventEmitter<MdSlideToggleChange> = new EventEmitter<MdSlideToggleChange>();\n/**\n * Returns the unique id for the visual hidden input.\n * @return {?}\n */\nget inputId(): string { return `${this.id || this._uniqueId}-input`; }\n/**\n * Reference to the underlying input element.\n */\n_inputElement: ElementRef;\n/**\n * Reference to the ripple directive on the thumb container.\n */\n_ripple: MdRipple;\n/**\n * @param {?} elementRef\n * @param {?} renderer\n * @param {?} _platform\n * @param {?} _focusMonitor\n * @param {?} _changeDetectorRef\n * @param {?} tabIndex\n */\nconstructor(elementRef: ElementRef,\n renderer: Renderer2,\nprivate _platform: Platform,\nprivate _focusMonitor: FocusMonitor,\nprivate _changeDetectorRef: ChangeDetectorRef,\n tabIndex: string) {\n super(renderer, elementRef);\n\n this.tabIndex = parseInt(tabIndex) || 0;\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._slideRenderer = new SlideToggleRenderer(this._elementRef, this._platform);\n\n this._focusMonitor\n .monitor(this._inputElement.nativeElement, this._renderer, false)\n .subscribe(focusOrigin => this._onInputFocusChange(focusOrigin));\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._inputElement.nativeElement);\n }\n/**\n * This function will called if the underlying input changed its value through user interaction.\n * @param {?} event\n * @return {?}\n */\n_onChangeEvent(event: Event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the component's `change` output.\n event.stopPropagation();\n\n // Sync the value from the underlying input element with the slide-toggle component.\n this.checked = this._inputElement.nativeElement.checked;\n\n // Emit our custom change event if the native input emitted one.\n // It is important to only emit it, if the native input triggered one, because we don't want\n // to trigger a change event, when the `checked` variable changes programmatically.\n this._emitChangeEvent();\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onInputClick(event: Event) {\n // In some situations the user will release the mouse on the label element. The label element\n // redirects the click to the underlying input element and will result in a value change.\n // Prevent the default behavior if dragging, because the value will be set after drag.\n if (this._slideRenderer.dragging) {\n event.preventDefault();\n }\n\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `slide-toggle` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n/**\n * Implemented as part of ControlValueAccessor.\n * @param {?} value\n * @return {?}\n */\nwriteValue(value: any): void {\n this.checked = !!value;\n }\n/**\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn\n * @return {?}\n */\nregisterOnChange(fn: any): void {\n this.onChange = fn;\n }\n/**\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn\n * @return {?}\n */\nregisterOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n/**\n * Implemented as a part of ControlValueAccessor.\n * @param {?} isDisabled\n * @return {?}\n */\nsetDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Focuses the slide-toggle.\n * @return {?}\n */\nfocus() {\n this._focusMonitor.focusVia(this._inputElement.nativeElement, 'keyboard');\n }\n/**\n * Toggles the checked state of the slide-toggle.\n * @return {?}\n */\ntoggle() {\n this.checked = !this.checked;\n }\n/**\n * Function is called whenever the focus changes for the input element.\n * @param {?} focusOrigin\n * @return {?}\n */\nprivate _onInputFocusChange(focusOrigin: FocusOrigin) {\n if (!this._focusRipple && focusOrigin === 'keyboard') {\n // For keyboard focus show a persistent ripple as focus indicator.\n this._focusRipple = this._ripple.launch(0, 0, {persistent: true, centered: true});\n } else if (!focusOrigin) {\n this.onTouched();\n\n // Fade out and clear the focus ripple if one is currently present.\n if (this._focusRipple) {\n this._focusRipple.fadeOut();\n this._focusRipple = null;\n }\n }\n }\n/**\n * Emits a change event on the `change` output. Also notifies the FormControl about the change.\n * @return {?}\n */\nprivate _emitChangeEvent() {\n let /** @type {?} */ event = new MdSlideToggleChange();\n event.source = this;\n event.checked = this.checked;\n this.change.emit(event);\n this.onChange(this.checked);\n }\n/**\n * @return {?}\n */\n_onDragStart() {\n if (!this.disabled) {\n this._slideRenderer.startThumbDrag(this.checked);\n }\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onDrag(event: HammerInput) {\n if (this._slideRenderer.dragging) {\n this._slideRenderer.updateThumbPosition(event.deltaX);\n }\n }\n/**\n * @return {?}\n */\n_onDragEnd() {\n if (this._slideRenderer.dragging) {\n let /** @type {?} */ _previousChecked = this.checked;\n this.checked = this._slideRenderer.dragPercentage > 50;\n\n if (_previousChecked !== this.checked) {\n this._emitChangeEvent();\n }\n\n // The drag should be stopped outside of the current event handler, because otherwise the\n // click event will be fired before and will revert the drag change.\n setTimeout(() => this._slideRenderer.stopThumbDrag());\n }\n }\n/**\n * Method being called whenever the label text changes.\n * @return {?}\n */\n_onLabelTextChange() {\n // This method is getting called whenever the label of the slide-toggle changes.\n // Since the slide-toggle uses the OnPush strategy we need to notify it about the change\n // that has been recognized by the cdkObserveContent directive.\n this._changeDetectorRef.markForCheck();\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-slide-toggle, mat-slide-toggle',\n host: {\n 'class': 'mat-slide-toggle',\n '[id]': 'id',\n '[class.mat-checked]': 'checked',\n '[class.mat-disabled]': 'disabled',\n '[class.mat-slide-toggle-label-before]': 'labelPosition == \"before\"',\n },\n templateUrl: 'slide-toggle.html',\n styleUrls: ['slide-toggle.css'],\n providers: [MD_SLIDE_TOGGLE_VALUE_ACCESSOR],\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n inputs: ['disabled', 'disableRipple', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: Renderer2, },\n{type: Platform, },\n{type: FocusMonitor, },\n{type: ChangeDetectorRef, },\n{type: undefined, decorators: [{ type: Attribute, args: ['tabindex', ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'name': [{ type: Input },],\n'id': [{ type: Input },],\n'labelPosition': [{ type: Input },],\n'ariaLabel': [{ type: Input, args: ['aria-label', ] },],\n'ariaLabelledby': [{ type: Input, args: ['aria-labelledby', ] },],\n'required': [{ type: Input },],\n'checked': [{ type: Input },],\n'change': [{ type: Output },],\n'_inputElement': [{ type: ViewChild, args: ['input', ] },],\n'_ripple': [{ type: ViewChild, args: [MdRipple, ] },],\n};\n}\n\nfunction MdSlideToggle_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSlideToggle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSlideToggle.ctorParameters;\n/** @type {?} */\nMdSlideToggle.propDecorators;\n/** @type {?} */\nMdSlideToggle.prototype.onChange;\n/** @type {?} */\nMdSlideToggle.prototype.onTouched;\n/** @type {?} */\nMdSlideToggle.prototype._uniqueId;\n/** @type {?} */\nMdSlideToggle.prototype._slideRenderer;\n/** @type {?} */\nMdSlideToggle.prototype._required;\n/** @type {?} */\nMdSlideToggle.prototype._checked;\n/**\n * Reference to the focus state ripple.\n * @type {?}\n */\nMdSlideToggle.prototype._focusRipple;\n/**\n * Name value will be applied to the input element if present\n * @type {?}\n */\nMdSlideToggle.prototype.name;\n/**\n * A unique id for the slide-toggle input. If none is supplied, it will be auto-generated.\n * @type {?}\n */\nMdSlideToggle.prototype.id;\n/**\n * Whether the label should appear after or before the slide-toggle. Defaults to 'after'\n * @type {?}\n */\nMdSlideToggle.prototype.labelPosition;\n/**\n * Used to set the aria-label attribute on the underlying input element.\n * @type {?}\n */\nMdSlideToggle.prototype.ariaLabel;\n/**\n * Used to set the aria-labelledby attribute on the underlying input element.\n * @type {?}\n */\nMdSlideToggle.prototype.ariaLabelledby;\n/**\n * An event will be dispatched each time the slide-toggle changes its value.\n * @type {?}\n */\nMdSlideToggle.prototype.change;\n/**\n * Reference to the underlying input element.\n * @type {?}\n */\nMdSlideToggle.prototype._inputElement;\n/**\n * Reference to the ripple directive on the thumb container.\n * @type {?}\n */\nMdSlideToggle.prototype._ripple;\n/** @type {?} */\nMdSlideToggle.prototype._platform;\n/** @type {?} */\nMdSlideToggle.prototype._focusMonitor;\n/** @type {?} */\nMdSlideToggle.prototype._changeDetectorRef;\n}\n\n/**\n * Renderer for the Slide Toggle component, which separates DOM modification in its own class\n */\nclass SlideToggleRenderer {\n/**\n * Reference to the thumb HTMLElement.\n */\nprivate _thumbEl: HTMLElement;\n/**\n * Reference to the thumb bar HTMLElement.\n */\nprivate _thumbBarEl: HTMLElement;\n/**\n * Width of the thumb bar of the slide-toggle.\n */\nprivate _thumbBarWidth: number;\n/**\n * Previous checked state before drag started.\n */\nprivate _previousChecked: boolean;\n/**\n * Percentage of the thumb while dragging. Percentage as fraction of 100.\n */\ndragPercentage: number;\n/**\n * Whether the thumb is currently being dragged.\n */\ndragging: boolean = false;\n/**\n * @param {?} elementRef\n * @param {?} platform\n */\nconstructor(elementRef: ElementRef, platform: Platform) {\n // We only need to interact with these elements when we're on the browser, so only grab\n // the reference in that case.\n if (platform.isBrowser) {\n this._thumbEl = elementRef.nativeElement.querySelector('.mat-slide-toggle-thumb-container');\n this._thumbBarEl = elementRef.nativeElement.querySelector('.mat-slide-toggle-bar');\n }\n }\n/**\n * Initializes the drag of the slide-toggle.\n * @param {?} checked\n * @return {?}\n */\nstartThumbDrag(checked: boolean) {\n if (this.dragging) { return; }\n\n this._thumbBarWidth = this._thumbBarEl.clientWidth - this._thumbEl.clientWidth;\n this._thumbEl.classList.add('mat-dragging');\n\n this._previousChecked = checked;\n this.dragging = true;\n }\n/**\n * Resets the current drag and returns the new checked value.\n * @return {?}\n */\nstopThumbDrag(): boolean {\n if (!this.dragging) { return false; }\n\n this.dragging = false;\n this._thumbEl.classList.remove('mat-dragging');\n\n // Reset the transform because the component will take care of the thumb position after drag.\n applyCssTransform(this._thumbEl, '');\n\n return this.dragPercentage > 50;\n }\n/**\n * Updates the thumb containers position from the specified distance.\n * @param {?} distance\n * @return {?}\n */\nupdateThumbPosition(distance: number) {\n this.dragPercentage = this._getDragPercentage(distance);\n // Calculate the moved distance based on the thumb bar width.\n let /** @type {?} */ dragX = (this.dragPercentage / 100) * this._thumbBarWidth;\n applyCssTransform(this._thumbEl, `translate3d(${dragX}px, 0, 0)`);\n }\n/**\n * Retrieves the percentage of thumb from the moved distance. Percentage as fraction of 100.\n * @param {?} distance\n * @return {?}\n */\nprivate _getDragPercentage(distance: number) {\n let /** @type {?} */ percentage = (distance / this._thumbBarWidth) * 100;\n\n // When the toggle was initially checked, then we have to start the drag at the end.\n if (this._previousChecked) {\n percentage += 100;\n }\n\n return Math.max(0, Math.min(percentage, 100));\n }\n\n}\n\nfunction SlideToggleRenderer_tsickle_Closure_declarations() {\n/**\n * Reference to the thumb HTMLElement.\n * @type {?}\n */\nSlideToggleRenderer.prototype._thumbEl;\n/**\n * Reference to the thumb bar HTMLElement.\n * @type {?}\n */\nSlideToggleRenderer.prototype._thumbBarEl;\n/**\n * Width of the thumb bar of the slide-toggle.\n * @type {?}\n */\nSlideToggleRenderer.prototype._thumbBarWidth;\n/**\n * Previous checked state before drag started.\n * @type {?}\n */\nSlideToggleRenderer.prototype._previousChecked;\n/**\n * Percentage of the thumb while dragging. Percentage as fraction of 100.\n * @type {?}\n */\nSlideToggleRenderer.prototype.dragPercentage;\n/**\n * Whether the thumb is currently being dragged.\n * @type {?}\n */\nSlideToggleRenderer.prototype.dragging;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdSlideToggleModule,MD_SLIDE_TOGGLE_VALUE_ACCESSOR,MdSlideToggleChange,MdSlideToggleBase,_MdSlideToggleMixinBase,MdSlideToggle,MAT_SLIDE_TOGGLE_VALUE_ACCESSOR,MatSlideToggle,MatSlideToggleBase,MatSlideToggleChange,MatSlideToggleModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {\n GestureConfig,\n MdCommonModule,\n MdRippleModule,\n} from '@angular/material/core';\nimport {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {MdSlideToggle} from './slide-toggle';\nexport class MdSlideToggleModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdRippleModule, MdCommonModule, PlatformModule, ObserversModule, A11yModule],\n exports: [MdSlideToggle, MdCommonModule],\n declarations: [MdSlideToggle],\n providers: [\n {provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig}\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSlideToggleModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSlideToggleModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSlideToggleModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {\n DOWN_ARROW,\n END,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanColor,\n CanDisable,\n HammerInput,\n mixinColor,\n mixinDisabled,\n} from '@angular/material/core';\nimport {FocusOrigin, FocusMonitor} from '@angular/cdk/a11y';\nimport {Subscription} from 'rxjs/Subscription';\n/**\n * Visually, a 30px separation between tick marks looks best. This is very subjective but it is\n * the default separation we chose.\n */\nconst MIN_AUTO_TICK_SEPARATION = 30;\n/**\n * The thumb gap size for a disabled slider.\n */\nconst DISABLED_THUMB_GAP = 7;\n/**\n * The thumb gap size for a non-active slider at its minimum value.\n */\nconst MIN_VALUE_NONACTIVE_THUMB_GAP = 7;\n/**\n * The thumb gap size for an active slider at its minimum value.\n */\nconst MIN_VALUE_ACTIVE_THUMB_GAP = 10;\n/**\n * Provider Expression that allows md-slider to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)] and [formControl].\n */\nexport const MD_SLIDER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MdSlider),\n multi: true\n};\n/**\n * A simple change event emitted by the MdSlider component.\n */\nexport class MdSliderChange {\n/**\n * The MdSlider that changed.\n */\nsource: MdSlider;\n/**\n * The new value of the source slider.\n */\nvalue: number | null;\n}\n\nfunction MdSliderChange_tsickle_Closure_declarations() {\n/**\n * The MdSlider that changed.\n * @type {?}\n */\nMdSliderChange.prototype.source;\n/**\n * The new value of the source slider.\n * @type {?}\n */\nMdSliderChange.prototype.value;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdSliderBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdSliderBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSliderBase.prototype._renderer;\n/** @type {?} */\nMdSliderBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdSliderMixinBase = mixinColor(mixinDisabled(MdSliderBase), 'accent');\n/**\n * Allows users to select from a range of values by moving the slider thumb. It is similar in\n * behavior to the native `<input type=\"range\">` element.\n */\nexport class MdSlider extends _MdSliderMixinBase\n implements ControlValueAccessor, OnDestroy, CanDisable, CanColor, OnInit {\n/**\n * Whether the slider is inverted.\n * @return {?}\n */\nget invert() { return this._invert; }\n/**\n * @param {?} value\n * @return {?}\n */\nset invert(value: any) {\n this._invert = coerceBooleanProperty(value);\n }\nprivate _invert = false;\n/**\n * The maximum value that the slider can have.\n * @return {?}\n */\nget max() { return this._max; }\n/**\n * @param {?} v\n * @return {?}\n */\nset max(v: number) {\n this._max = coerceNumberProperty(v, this._max);\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\nprivate _max: number = 100;\n/**\n * The minimum value that the slider can have.\n * @return {?}\n */\nget min() { return this._min; }\n/**\n * @param {?} v\n * @return {?}\n */\nset min(v: number) {\n this._min = coerceNumberProperty(v, this._min);\n\n // If the value wasn't explicitly set by the user, set it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\nprivate _min: number = 0;\n/**\n * The values at which the thumb will snap.\n * @return {?}\n */\nget step() { return this._step; }\n/**\n * @param {?} v\n * @return {?}\n */\nset step(v) {\n this._step = coerceNumberProperty(v, this._step);\n\n if (this._step % 1 !== 0) {\n this._roundLabelTo = /** @type {?} */(( this._step.toString().split('.').pop())).length;\n }\n\n // Since this could modify the label, we need to notify the change detection.\n this._changeDetectorRef.markForCheck();\n }\nprivate _step: number = 1;\n/**\n * Whether or not to show the thumb label.\n * @return {?}\n */\nget thumbLabel(): boolean { return this._thumbLabel; }\n/**\n * @param {?} value\n * @return {?}\n */\nset thumbLabel(value) { this._thumbLabel = coerceBooleanProperty(value); }\nprivate _thumbLabel: boolean = false;\n/**\n * @deprecated\n * @return {?}\n */\nget _thumbLabelDeprecated(): boolean { return this._thumbLabel; }\n/**\n * @param {?} value\n * @return {?}\n */\nset _thumbLabelDeprecated(value) { this._thumbLabel = value; }\n/**\n * How often to show ticks. Relative to the step so that a tick always appears on a step.\n * Ex: Tick interval of 4 with a step of 3 will draw a tick every 4 steps (every 12 values).\n * @return {?}\n */\nget tickInterval() { return this._tickInterval; }\n/**\n * @param {?} value\n * @return {?}\n */\nset tickInterval(value) {\n if (value === 'auto') {\n this._tickInterval = 'auto';\n } else if (typeof value === 'number' || typeof value === 'string') {\n this._tickInterval = coerceNumberProperty(value, /** @type {?} */(( this._tickInterval as number)));\n } else {\n this._tickInterval = 0;\n }\n }\nprivate _tickInterval: 'auto' | number = 0;\n/**\n * @deprecated\n * @return {?}\n */\nget _tickIntervalDeprecated() { return this.tickInterval; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _tickIntervalDeprecated(v) { this.tickInterval = v; }\n/**\n * Value of the slider.\n * @return {?}\n */\nget value() {\n // If the value needs to be read and it is still uninitialized, initialize it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n return this._value;\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset value(v: number | null) {\n if (v !== this._value) {\n this._value = coerceNumberProperty(v, this._value || 0);\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n }\nprivate _value: number | null = null;\n/**\n * Whether the slider is vertical.\n * @return {?}\n */\nget vertical() { return this._vertical; }\n/**\n * @param {?} value\n * @return {?}\n */\nset vertical(value: any) {\n this._vertical = coerceBooleanProperty(value);\n }\nprivate _vertical = false;\n/**\n * Event emitted when the slider value has changed.\n */\nchange = new EventEmitter<MdSliderChange>();\n/**\n * Event emitted when the slider thumb moves.\n */\ninput = new EventEmitter<MdSliderChange>();\n/**\n * The value to be used for display purposes.\n * @return {?}\n */\nget displayValue(): string | number {\n // Note that this could be improved further by rounding something like 0.999 to 1 or\n // 0.899 to 0.9, however it is very performance sensitive, because it gets called on\n // every change detection cycle.\n if (this._roundLabelTo && this.value && this.value % 1 !== 0) {\n return this.value.toFixed(this._roundLabelTo);\n }\n\n return this.value || 0;\n }\n/**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n */\nonTouched: () => any = () => {};\n/**\n * The percentage of the slider that coincides with the value.\n * @return {?}\n */\nget percent() { return this._clamp(this._percent); }\nprivate _percent: number = 0;\n/**\n * Whether or not the thumb is sliding.\n * Used to determine if there should be a transition for the thumb and fill track.\n */\n_isSliding: boolean = false;\n/**\n * Whether or not the slider is active (clicked or sliding).\n * Used to shrink and grow the thumb as according to the Material Design spec.\n */\n_isActive: boolean = false;\n/**\n * Whether the axis of the slider is inverted.\n * (i.e. whether moving the thumb in the positive x or y direction decreases the slider's value).\n * @return {?}\n */\nget _invertAxis() {\n // Standard non-inverted mode for a vertical slider should be dragging the thumb from bottom to\n // top. However from a y-axis standpoint this is inverted.\n return this.vertical ? !this.invert : this.invert;\n }\n/**\n * Whether the slider is at its minimum value.\n * @return {?}\n */\nget _isMinValue() {\n return this.percent === 0;\n }\n/**\n * The amount of space to leave between the slider thumb and the track fill & track background\n * elements.\n * @return {?}\n */\nget _thumbGap() {\n if (this.disabled) {\n return DISABLED_THUMB_GAP;\n }\n if (this._isMinValue && !this.thumbLabel) {\n return this._isActive ? MIN_VALUE_ACTIVE_THUMB_GAP : MIN_VALUE_NONACTIVE_THUMB_GAP;\n }\n return 0;\n }\n/**\n * CSS styles for the track background element.\n * @return {?}\n */\nget _trackBackgroundStyles(): { [key: string]: string } {\n let /** @type {?} */ axis = this.vertical ? 'Y' : 'X';\n let /** @type {?} */ sign = this._invertMouseCoords ? '-' : '';\n return {\n 'transform': `translate${axis}(${sign}${this._thumbGap}px) scale${axis}(${1 - this.percent})`\n };\n }\n/**\n * CSS styles for the track fill element.\n * @return {?}\n */\nget _trackFillStyles(): { [key: string]: string } {\n let /** @type {?} */ axis = this.vertical ? 'Y' : 'X';\n let /** @type {?} */ sign = this._invertMouseCoords ? '' : '-';\n return {\n 'transform': `translate${axis}(${sign}${this._thumbGap}px) scale${axis}(${this.percent})`\n };\n }\n/**\n * CSS styles for the ticks container element.\n * @return {?}\n */\nget _ticksContainerStyles(): { [key: string]: string } {\n let /** @type {?} */ axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the ticks container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let /** @type {?} */ sign = !this.vertical && this._direction == 'rtl' ? '' : '-';\n let /** @type {?} */ offset = this._tickIntervalPercent / 2 * 100;\n return {\n 'transform': `translate${axis}(${sign}${offset}%)`\n };\n }\n/**\n * CSS styles for the ticks element.\n * @return {?}\n */\nget _ticksStyles(): { [key: string]: string } {\n let /** @type {?} */ tickSize = this._tickIntervalPercent * 100;\n let /** @type {?} */ backgroundSize = this.vertical ? `2px ${tickSize}%` : `${tickSize}% 2px`;\n let /** @type {?} */ axis = this.vertical ? 'Y' : 'X';\n // Depending on the direction we pushed the ticks container, push the ticks the opposite\n // direction to re-center them but clip off the end edge. In RTL languages we need to flip the\n // ticks 180 degrees so we're really cutting off the end edge abd not the start.\n let /** @type {?} */ sign = !this.vertical && this._direction == 'rtl' ? '-' : '';\n let /** @type {?} */ rotate = !this.vertical && this._direction == 'rtl' ? ' rotate(180deg)' : '';\n let /** @type {?} */ styles: { [key: string]: string } = {\n 'backgroundSize': backgroundSize,\n // Without translateZ ticks sometimes jitter as the slider moves on Chrome & Firefox.\n 'transform': `translateZ(0) translate${axis}(${sign}${tickSize / 2}%)${rotate}`\n };\n\n if (this._isMinValue && this._thumbGap) {\n let /** @type {?} */ side = this.vertical ?\n (this._invertAxis ? 'Bottom' : 'Top') :\n (this._invertAxis ? 'Right' : 'Left');\n styles[`padding${side}`] = `${this._thumbGap}px`;\n }\n\n return styles;\n }\n/**\n * @return {?}\n */\nget _thumbContainerStyles(): { [key: string]: string } {\n let /** @type {?} */ axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the thumb container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let /** @type {?} */ invertOffset =\n (this._direction == 'rtl' && !this.vertical) ? !this._invertAxis : this._invertAxis;\n let /** @type {?} */ offset = (invertOffset ? this.percent : 1 - this.percent) * 100;\n return {\n 'transform': `translate${axis}(-${offset}%)`\n };\n }\n/**\n * The size of a tick interval as a percentage of the size of the track.\n */\nprivate _tickIntervalPercent: number = 0;\n/**\n * The dimensions of the slider.\n */\nprivate _sliderDimensions: ClientRect | null = null;\nprivate _controlValueAccessorChangeFn: (value: any) => void = () => {};\n/**\n * Decimal places to round to, based on the step amount.\n */\nprivate _roundLabelTo: number;\n/**\n * Subscription to the Directionality change EventEmitter.\n */\nprivate _dirChangeSubscription = Subscription.EMPTY;\n/**\n * The value of the slider when the slide start event fires.\n */\nprivate _valueOnSlideStart: number | null;\n/**\n * Reference to the inner slider wrapper element.\n */\nprivate _sliderWrapper: ElementRef;\n/**\n * Whether mouse events should be converted to a slider position by calculating their distance\n * from the right or bottom edge of the slider as opposed to the top or left.\n * @return {?}\n */\nprivate get _invertMouseCoords() {\n return (this._direction == 'rtl' && !this.vertical) ? !this._invertAxis : this._invertAxis;\n }\n/**\n * The language direction for this slider element.\n * @return {?}\n */\nprivate get _direction() {\n return (this._dir && this._dir.value == 'rtl') ? 'rtl' : 'ltr';\n }\n/**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _focusMonitor\n * @param {?} _changeDetectorRef\n * @param {?} _dir\n */\nconstructor(renderer: Renderer2,\n elementRef: ElementRef,\nprivate _focusMonitor: FocusMonitor,\nprivate _changeDetectorRef: ChangeDetectorRef,\nprivate _dir: Directionality) {\n super(renderer, elementRef);\n }\n/**\n * @return {?}\n */\nngOnInit() {\n this._focusMonitor\n .monitor(this._elementRef.nativeElement, this._renderer, true)\n .subscribe((origin: FocusOrigin) => {\n this._isActive = !!origin && origin !== 'keyboard';\n this._changeDetectorRef.detectChanges();\n });\n if (this._dir) {\n this._dirChangeSubscription = this._dir.change.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef.nativeElement);\n this._dirChangeSubscription.unsubscribe();\n }\n/**\n * @return {?}\n */\n_onMouseenter() {\n if (this.disabled) {\n return;\n }\n\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onClick(event: MouseEvent) {\n if (this.disabled) {\n return;\n }\n\n let /** @type {?} */ oldValue = this.value;\n this._isSliding = false;\n this._focusHostElement();\n this._updateValueFromPosition({x: event.clientX, y: event.clientY});\n\n /* Emit a change and input event if the value changed. */\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onSlide(event: HammerInput) {\n if (this.disabled) {\n return;\n }\n\n // The slide start event sometimes fails to fire on iOS, so if we're not already in the sliding\n // state, call the slide start handler manually.\n if (!this._isSliding) {\n this._onSlideStart(null);\n }\n\n // Prevent the slide from selecting anything else.\n event.preventDefault();\n\n let /** @type {?} */ oldValue = this.value;\n this._updateValueFromPosition({x: event.center.x, y: event.center.y});\n\n // Native range elements always emit `input` events when the value changed while sliding.\n if (oldValue != this.value) {\n this._emitInputEvent();\n }\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onSlideStart(event: HammerInput | null) {\n if (this.disabled) {\n return;\n }\n\n // Simulate mouseenter in case this is a mobile device.\n this._onMouseenter();\n\n this._isSliding = true;\n this._focusHostElement();\n this._valueOnSlideStart = this.value;\n\n if (event) {\n this._updateValueFromPosition({x: event.center.x, y: event.center.y});\n event.preventDefault();\n }\n }\n/**\n * @return {?}\n */\n_onSlideEnd() {\n this._isSliding = false;\n\n if (this._valueOnSlideStart != this.value) {\n this._emitChangeEvent();\n }\n this._valueOnSlideStart = null;\n }\n/**\n * @return {?}\n */\n_onFocus() {\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n/**\n * @return {?}\n */\n_onBlur() {\n this.onTouched();\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onKeydown(event: KeyboardEvent) {\n if (this.disabled) { return; }\n\n let /** @type {?} */ oldValue = this.value;\n\n switch (event.keyCode) {\n case PAGE_UP:\n this._increment(10);\n break;\n case PAGE_DOWN:\n this._increment(-10);\n break;\n case END:\n this.value = this.max;\n break;\n case HOME:\n this.value = this.min;\n break;\n case LEFT_ARROW:\n // NOTE: For a sighted user it would make more sense that when they press an arrow key on an\n // inverted slider the thumb moves in that direction. However for a blind user, nothing\n // about the slider indicates that it is inverted. They will expect left to be decrement,\n // regardless of how it appears on the screen. For speakers ofRTL languages, they probably\n // expect left to mean increment. Therefore we flip the meaning of the side arrow keys for\n // RTL. For inverted sliders we prefer a good a11y experience to having it \"look right\" for\n // sighted users, therefore we do not swap the meaning.\n this._increment(this._direction == 'rtl' ? 1 : -1);\n break;\n case UP_ARROW:\n this._increment(1);\n break;\n case RIGHT_ARROW:\n // See comment on LEFT_ARROW about the conditions under which we flip the meaning.\n this._increment(this._direction == 'rtl' ? -1 : 1);\n break;\n case DOWN_ARROW:\n this._increment(-1);\n break;\n default:\n // Return if the key is not one that we explicitly handle to avoid calling preventDefault on\n // it.\n return;\n }\n\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n\n this._isSliding = true;\n event.preventDefault();\n }\n/**\n * @return {?}\n */\n_onKeyup() {\n this._isSliding = false;\n }\n/**\n * Increments the slider by the given number of steps (negative number decrements).\n * @param {?} numSteps\n * @return {?}\n */\nprivate _increment(numSteps: number) {\n this.value = this._clamp((this.value || 0) + this.step * numSteps, this.min, this.max);\n }\n/**\n * Calculate the new value from the new physical location. The value will always be snapped.\n * @param {?} pos\n * @return {?}\n */\nprivate _updateValueFromPosition(pos: {x: number, y: number}) {\n if (!this._sliderDimensions) {\n return;\n }\n\n let /** @type {?} */ offset = this.vertical ? this._sliderDimensions.top : this._sliderDimensions.left;\n let /** @type {?} */ size = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let /** @type {?} */ posComponent = this.vertical ? pos.y : pos.x;\n\n // The exact value is calculated from the event and used to find the closest snap value.\n let /** @type {?} */ percent = this._clamp((posComponent - offset) / size);\n if (this._invertMouseCoords) {\n percent = 1 - percent;\n }\n let /** @type {?} */ exactValue = this._calculateValue(percent);\n\n // This calculation finds the closest step by finding the closest whole number divisible by the\n // step relative to the min.\n let /** @type {?} */ closestValue = Math.round((exactValue - this.min) / this.step) * this.step + this.min;\n // The value needs to snap to the min and max.\n this.value = this._clamp(closestValue, this.min, this.max);\n }\n/**\n * Emits a change event if the current value is different from the last emitted value.\n * @return {?}\n */\nprivate _emitChangeEvent() {\n this._controlValueAccessorChangeFn(this.value);\n this.change.emit(this._createChangeEvent());\n }\n/**\n * Emits an input event when the current value is different from the last emitted value.\n * @return {?}\n */\nprivate _emitInputEvent() {\n this.input.emit(this._createChangeEvent());\n }\n/**\n * Updates the amount of space between ticks as a percentage of the width of the slider.\n * @return {?}\n */\nprivate _updateTickIntervalPercent() {\n if (!this.tickInterval || !this._sliderDimensions) {\n return;\n }\n\n if (this.tickInterval == 'auto') {\n let /** @type {?} */ trackSize = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let /** @type {?} */ pixelsPerStep = trackSize * this.step / (this.max - this.min);\n let /** @type {?} */ stepsPerTick = Math.ceil(MIN_AUTO_TICK_SEPARATION / pixelsPerStep);\n let /** @type {?} */ pixelsPerTick = stepsPerTick * this.step;\n this._tickIntervalPercent = pixelsPerTick / trackSize;\n } else {\n this._tickIntervalPercent = this.tickInterval * this.step / (this.max - this.min);\n }\n }\n/**\n * Creates a slider change object from the specified value.\n * @param {?=} value\n * @return {?}\n */\nprivate _createChangeEvent(value = this.value): MdSliderChange {\n let /** @type {?} */ event = new MdSliderChange();\n\n event.source = this;\n event.value = value;\n\n return event;\n }\n/**\n * Calculates the percentage of the slider that a value is.\n * @param {?} value\n * @return {?}\n */\nprivate _calculatePercentage(value: number | null) {\n return ((value || 0) - this.min) / (this.max - this.min);\n }\n/**\n * Calculates the value a percentage of the slider corresponds to.\n * @param {?} percentage\n * @return {?}\n */\nprivate _calculateValue(percentage: number) {\n return this.min + percentage * (this.max - this.min);\n }\n/**\n * Return a number between two numbers.\n * @param {?} value\n * @param {?=} min\n * @param {?=} max\n * @return {?}\n */\nprivate _clamp(value: number, min = 0, max = 1) {\n return Math.max(min, Math.min(value, max));\n }\n/**\n * Get the bounding client rect of the slider track element.\n * The track is used rather than the native element to ignore the extra space that the thumb can\n * take up.\n * @return {?}\n */\nprivate _getSliderDimensions() {\n return this._sliderWrapper ? this._sliderWrapper.nativeElement.getBoundingClientRect() : null;\n }\n/**\n * Focuses the native element.\n * Currently only used to allow a blur event to fire but will be used with keyboard input later.\n * @return {?}\n */\nprivate _focusHostElement() {\n this._elementRef.nativeElement.focus();\n }\n/**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param {?} value\n * @return {?}\n */\nwriteValue(value: any) {\n this.value = value;\n }\n/**\n * Registers a callback to eb triggered when the value has changed.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn Callback to be registered.\n * @return {?}\n */\nregisterOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n/**\n * Registers a callback to be triggered when the component is touched.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn Callback to be registered.\n * @return {?}\n */\nregisterOnTouched(fn: any) {\n this.onTouched = fn;\n }\n/**\n * Sets whether the component should be disabled.\n * Implemented as part of ControlValueAccessor.\n * @param {?} isDisabled\n * @return {?}\n */\nsetDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-slider, mat-slider',\n providers: [MD_SLIDER_VALUE_ACCESSOR],\n host: {\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n '(click)': '_onClick($event)',\n '(keydown)': '_onKeydown($event)',\n '(keyup)': '_onKeyup()',\n '(mouseenter)': '_onMouseenter()',\n '(slide)': '_onSlide($event)',\n '(slideend)': '_onSlideEnd()',\n '(slidestart)': '_onSlideStart($event)',\n 'class': 'mat-slider',\n 'role': 'slider',\n 'tabindex': '0',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuemin]': 'min',\n '[attr.aria-valuenow]': 'value',\n '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n '[class.mat-slider-disabled]': 'disabled',\n '[class.mat-slider-has-ticks]': 'tickInterval',\n '[class.mat-slider-horizontal]': '!vertical',\n '[class.mat-slider-axis-inverted]': '_invertAxis',\n '[class.mat-slider-sliding]': '_isSliding',\n '[class.mat-slider-thumb-label-showing]': 'thumbLabel',\n '[class.mat-slider-vertical]': 'vertical',\n '[class.mat-slider-min-value]': '_isMinValue',\n '[class.mat-slider-hide-last-tick]': 'disabled || _isMinValue && _thumbGap && _invertAxis',\n },\n templateUrl: 'slider.html',\n styleUrls: ['slider.css'],\n inputs: ['disabled', 'color'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: FocusMonitor, },\n{type: ChangeDetectorRef, },\n{type: Directionality, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'invert': [{ type: Input },],\n'max': [{ type: Input },],\n'min': [{ type: Input },],\n'step': [{ type: Input },],\n'thumbLabel': [{ type: Input },],\n'_thumbLabelDeprecated': [{ type: Input, args: ['thumb-label', ] },],\n'tickInterval': [{ type: Input },],\n'_tickIntervalDeprecated': [{ type: Input, args: ['tick-interval', ] },],\n'value': [{ type: Input },],\n'vertical': [{ type: Input },],\n'change': [{ type: Output },],\n'input': [{ type: Output },],\n'_sliderWrapper': [{ type: ViewChild, args: ['sliderWrapper', ] },],\n};\n}\n\nfunction MdSlider_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSlider.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSlider.ctorParameters;\n/** @type {?} */\nMdSlider.propDecorators;\n/** @type {?} */\nMdSlider.prototype._invert;\n/** @type {?} */\nMdSlider.prototype._max;\n/** @type {?} */\nMdSlider.prototype._min;\n/** @type {?} */\nMdSlider.prototype._step;\n/** @type {?} */\nMdSlider.prototype._thumbLabel;\n/** @type {?} */\nMdSlider.prototype._tickInterval;\n/** @type {?} */\nMdSlider.prototype._value;\n/** @type {?} */\nMdSlider.prototype._vertical;\n/**\n * Event emitted when the slider value has changed.\n * @type {?}\n */\nMdSlider.prototype.change;\n/**\n * Event emitted when the slider thumb moves.\n * @type {?}\n */\nMdSlider.prototype.input;\n/**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * @type {?}\n */\nMdSlider.prototype.onTouched;\n/** @type {?} */\nMdSlider.prototype._percent;\n/**\n * Whether or not the thumb is sliding.\n * Used to determine if there should be a transition for the thumb and fill track.\n * @type {?}\n */\nMdSlider.prototype._isSliding;\n/**\n * Whether or not the slider is active (clicked or sliding).\n * Used to shrink and grow the thumb as according to the Material Design spec.\n * @type {?}\n */\nMdSlider.prototype._isActive;\n/**\n * The size of a tick interval as a percentage of the size of the track.\n * @type {?}\n */\nMdSlider.prototype._tickIntervalPercent;\n/**\n * The dimensions of the slider.\n * @type {?}\n */\nMdSlider.prototype._sliderDimensions;\n/** @type {?} */\nMdSlider.prototype._controlValueAccessorChangeFn;\n/**\n * Decimal places to round to, based on the step amount.\n * @type {?}\n */\nMdSlider.prototype._roundLabelTo;\n/**\n * Subscription to the Directionality change EventEmitter.\n * @type {?}\n */\nMdSlider.prototype._dirChangeSubscription;\n/**\n * The value of the slider when the slide start event fires.\n * @type {?}\n */\nMdSlider.prototype._valueOnSlideStart;\n/**\n * Reference to the inner slider wrapper element.\n * @type {?}\n */\nMdSlider.prototype._sliderWrapper;\n/** @type {?} */\nMdSlider.prototype._focusMonitor;\n/** @type {?} */\nMdSlider.prototype._changeDetectorRef;\n/** @type {?} */\nMdSlider.prototype._dir;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';\nimport {CommonModule} from '@angular/common';\nimport {MdCommonModule, GestureConfig} from '@angular/material/core';\nimport {MdSlider} from './slider';\nimport {BidiModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nexport class MdSliderModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CommonModule, MdCommonModule, BidiModule, A11yModule],\n exports: [MdSlider, MdCommonModule],\n declarations: [MdSlider],\n providers: [{provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig}]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSliderModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSliderModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSliderModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {MATERIAL_COMPATIBILITY_MODE} from '@angular/material/core';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MdPaginatorIntl} from './paginator-intl';\n/**\n * The default page size if there is no page size and there are no provided page size options.\n */\nconst DEFAULT_PAGE_SIZE = 50;\n/**\n * Change event object that is emitted when the user selects a\n * different page size or navigates to another page.\n */\nexport class PageEvent {\n/**\n * The current page index.\n */\npageIndex: number;\n/**\n * The current page size\n */\npageSize: number;\n/**\n * The current total number of items being paged\n */\nlength: number;\n}\n\nfunction PageEvent_tsickle_Closure_declarations() {\n/**\n * The current page index.\n * @type {?}\n */\nPageEvent.prototype.pageIndex;\n/**\n * The current page size\n * @type {?}\n */\nPageEvent.prototype.pageSize;\n/**\n * The current total number of items being paged\n * @type {?}\n */\nPageEvent.prototype.length;\n}\n\n/**\n * Component to provide navigation between paged information. Displays the size of the current\n * page, user-selectable options to change that size, what items are being shown, and\n * navigational button to go to the previous or next page.\n */\nexport class MdPaginator implements OnInit, OnDestroy {\nprivate _initialized: boolean;\nprivate _intlChanges: Subscription;\n/**\n * The zero-based page index of the displayed list of items. Defaulted to 0.\n * @return {?}\n */\nget pageIndex(): number { return this._pageIndex; }\n/**\n * @param {?} pageIndex\n * @return {?}\n */\nset pageIndex(pageIndex: number) {\n this._pageIndex = pageIndex;\n this._changeDetectorRef.markForCheck();\n }\n _pageIndex: number = 0;\n/**\n * The length of the total number of items that are being paginated. Defaulted to 0.\n * @return {?}\n */\nget length(): number { return this._length; }\n/**\n * @param {?} length\n * @return {?}\n */\nset length(length: number) {\n this._length = length;\n this._changeDetectorRef.markForCheck();\n }\n _length: number = 0;\n/**\n * Number of items to display on a page. By default set to 50.\n * @return {?}\n */\nget pageSize(): number { return this._pageSize; }\n/**\n * @param {?} pageSize\n * @return {?}\n */\nset pageSize(pageSize: number) {\n this._pageSize = pageSize;\n this._updateDisplayedPageSizeOptions();\n }\nprivate _pageSize: number;\n/**\n * The set of provided page size options to display to the user.\n * @return {?}\n */\nget pageSizeOptions(): number[] { return this._pageSizeOptions; }\n/**\n * @param {?} pageSizeOptions\n * @return {?}\n */\nset pageSizeOptions(pageSizeOptions: number[]) {\n this._pageSizeOptions = pageSizeOptions;\n this._updateDisplayedPageSizeOptions();\n }\nprivate _pageSizeOptions: number[] = [];\n/**\n * Event emitted when the paginator changes the page size or page index.\n */\npage = new EventEmitter<PageEvent>();\n/**\n * Displayed set of page size options. Will be sorted and include current page size.\n */\n_displayedPageSizeOptions: number[];\n/**\n * @param {?} _intl\n * @param {?} _changeDetectorRef\n */\nconstructor(public _intl: MdPaginatorIntl,\nprivate _changeDetectorRef: ChangeDetectorRef) {\n this._intlChanges = _intl.changes.subscribe(() => this._changeDetectorRef.markForCheck());\n }\n/**\n * @return {?}\n */\nngOnInit() {\n this._initialized = true;\n this._updateDisplayedPageSizeOptions();\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._intlChanges.unsubscribe();\n }\n/**\n * Advances to the next page if it exists.\n * @return {?}\n */\nnextPage() {\n if (!this.hasNextPage()) { return; }\n this.pageIndex++;\n this._emitPageEvent();\n }\n/**\n * Move back to the previous page if it exists.\n * @return {?}\n */\npreviousPage() {\n if (!this.hasPreviousPage()) { return; }\n this.pageIndex--;\n this._emitPageEvent();\n }\n/**\n * Whether there is a previous page.\n * @return {?}\n */\nhasPreviousPage() {\n return this.pageIndex >= 1 && this.pageSize != 0;\n }\n/**\n * Whether there is a next page.\n * @return {?}\n */\nhasNextPage() {\n const /** @type {?} */ numberOfPages = Math.ceil(this.length / this.pageSize) - 1;\n return this.pageIndex < numberOfPages && this.pageSize != 0;\n }\n/**\n * Changes the page size so that the first item displayed on the page will still be\n * displayed using the new page size.\n * \n * For example, if the page size is 10 and on the second page (items indexed 10-19) then\n * switching so that the page size is 5 will set the third page as the current page so\n * that the 10th item will still be displayed.\n * @param {?} pageSize\n * @return {?}\n */\n_changePageSize(pageSize: number) {\n // Current page needs to be updated to reflect the new page size. Navigate to the page\n // containing the previous page's first item.\n const /** @type {?} */ startIndex = this.pageIndex * this.pageSize;\n this.pageIndex = Math.floor(startIndex / pageSize) || 0;\n\n this.pageSize = pageSize;\n this._emitPageEvent();\n }\n/**\n * Updates the list of page size options to display to the user. Includes making sure that\n * the page size is an option and that the list is sorted.\n * @return {?}\n */\nprivate _updateDisplayedPageSizeOptions() {\n if (!this._initialized) { return; }\n\n // If no page size is provided, use the first page size option or the default page size.\n if (!this.pageSize) {\n this._pageSize = this.pageSizeOptions.length != 0 ?\n this.pageSizeOptions[0] :\n DEFAULT_PAGE_SIZE;\n }\n\n this._displayedPageSizeOptions = this.pageSizeOptions.slice();\n if (this._displayedPageSizeOptions.indexOf(this.pageSize) == -1) {\n this._displayedPageSizeOptions.push(this.pageSize);\n }\n\n // Sort the numbers using a number-specific sort function.\n this._displayedPageSizeOptions.sort((a, b) => a - b);\n\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Emits an event notifying that a change of the paginator's properties has been triggered.\n * @return {?}\n */\nprivate _emitPageEvent() {\n this.page.next({\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n length: this.length\n });\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-paginator, mat-paginator',\n templateUrl: 'paginator.html',\n styleUrls: ['paginator.css'],\n host: {\n 'class': 'mat-paginator',\n },\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdPaginatorIntl, },\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'pageIndex': [{ type: Input },],\n'length': [{ type: Input },],\n'pageSize': [{ type: Input },],\n'pageSizeOptions': [{ type: Input },],\n'page': [{ type: Output },],\n};\n}\n\nfunction MdPaginator_tsickle_Closure_declarations() {\n/** @type {?} */\nMdPaginator.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdPaginator.ctorParameters;\n/** @type {?} */\nMdPaginator.propDecorators;\n/** @type {?} */\nMdPaginator.prototype._initialized;\n/** @type {?} */\nMdPaginator.prototype._intlChanges;\n/** @type {?} */\nMdPaginator.prototype._pageIndex;\n/** @type {?} */\nMdPaginator.prototype._length;\n/** @type {?} */\nMdPaginator.prototype._pageSize;\n/** @type {?} */\nMdPaginator.prototype._pageSizeOptions;\n/**\n * Event emitted when the paginator changes the page size or page index.\n * @type {?}\n */\nMdPaginator.prototype.page;\n/**\n * Displayed set of page size options. Will be sorted and include current page size.\n * @type {?}\n */\nMdPaginator.prototype._displayedPageSizeOptions;\n/** @type {?} */\nMdPaginator.prototype._intl;\n/** @type {?} */\nMdPaginator.prototype._changeDetectorRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MdButtonModule} from '@angular/material/button';\nimport {MdSelectModule} from '@angular/material/select';\nimport {MdTooltipModule} from '@angular/material/tooltip';\nimport {MdPaginator} from './paginator';\nimport {MdPaginatorIntl} from './paginator-intl';\nexport class MdPaginatorModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n CommonModule,\n MdButtonModule,\n MdSelectModule,\n MdTooltipModule,\n ],\n exports: [MdPaginator],\n declarations: [MdPaginator],\n providers: [MdPaginatorIntl],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdPaginatorModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdPaginatorModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdPaginatorModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdPaginatorModule,PageEvent,MdPaginator,MdPaginatorIntl,MatPaginator,MatPaginatorIntl,MatPaginatorModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Component, ChangeDetectionStrategy, Input, ViewEncapsulation} from '@angular/core';\n/**\n * <md-progress-bar> component.\n */\nexport class MdProgressBar {\n/**\n * Color of the progress bar.\n */\ncolor: 'primary' | 'accent' | 'warn' = 'primary';\nprivate _value: number = 0;\n/**\n * Value of the progressbar. Defaults to zero. Mirrored to aria-valuenow.\n * @return {?}\n */\nget value() { return this._value; }\n/**\n * @param {?} v\n * @return {?}\n */\nset value(v: number) { this._value = clamp(v || 0); }\nprivate _bufferValue: number = 0;\n/**\n * Buffer value of the progress bar. Defaults to zero.\n * @return {?}\n */\nget bufferValue() { return this._bufferValue; }\n/**\n * @param {?} v\n * @return {?}\n */\nset bufferValue(v: number) { this._bufferValue = clamp(v || 0); }\n/**\n * Mode of the progress bar.\n * \n * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n * 'determinate'.\n * Mirrored to mode attribute.\n */\nmode: 'determinate' | 'indeterminate' | 'buffer' | 'query' = 'determinate';\n/**\n * Gets the current transform value for the progress bar's primary indicator.\n * @return {?}\n */\n_primaryTransform() {\n let /** @type {?} */ scale = this.value / 100;\n return {transform: `scaleX(${scale})`};\n }\n/**\n * Gets the current transform value for the progress bar's buffer indicator. Only used if the\n * progress mode is set to buffer, otherwise returns an undefined, causing no transformation.\n * @return {?}\n */\n_bufferTransform() {\n if (this.mode == 'buffer') {\n let /** @type {?} */ scale = this.bufferValue / 100;\n return {transform: `scaleX(${scale})`};\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-progress-bar, mat-progress-bar',\n host: {\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n '[attr.aria-valuenow]': 'value',\n '[attr.mode]': 'mode',\n '[class.mat-primary]': 'color == \"primary\"',\n '[class.mat-accent]': 'color == \"accent\"',\n '[class.mat-warn]': 'color == \"warn\"',\n 'class': 'mat-progress-bar',\n },\n templateUrl: 'progress-bar.html',\n styleUrls: ['progress-bar.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'color': [{ type: Input },],\n'value': [{ type: Input },],\n'bufferValue': [{ type: Input },],\n'mode': [{ type: Input },],\n};\n}\n\nfunction MdProgressBar_tsickle_Closure_declarations() {\n/** @type {?} */\nMdProgressBar.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdProgressBar.ctorParameters;\n/** @type {?} */\nMdProgressBar.propDecorators;\n/**\n * Color of the progress bar.\n * @type {?}\n */\nMdProgressBar.prototype.color;\n/** @type {?} */\nMdProgressBar.prototype._value;\n/** @type {?} */\nMdProgressBar.prototype._bufferValue;\n/**\n * Mode of the progress bar.\n * \n * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n * 'determinate'.\n * Mirrored to mode attribute.\n * @type {?}\n */\nMdProgressBar.prototype.mode;\n}\n\n/**\n * Clamps a value to be between two numbers, by default 0 and 100.\n * @param {?} v\n * @param {?=} min\n * @param {?=} max\n * @return {?}\n */\nfunction clamp(v: number, min = 0, max = 100) {\n return Math.max(min, Math.min(max, v));\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MdCommonModule} from '@angular/material/core';\nimport {MdProgressBar} from './progress-bar';\nexport class MdProgressBarModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CommonModule, MdCommonModule],\n exports: [MdProgressBar, MdCommonModule],\n declarations: [MdProgressBar],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdProgressBarModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdProgressBarModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdProgressBarModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdProgressBarModule,MdProgressBar,MatProgressBar,MatProgressBarModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ChangeDetectionStrategy,\n OnDestroy,\n Input,\n ElementRef,\n NgZone,\n Renderer2,\n Directive,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanColor, mixinColor} from '@angular/material/core';\n/**\n * A single degree in radians.\n */\nconst DEGREE_IN_RADIANS = Math.PI / 180;\n/**\n * Duration of the indeterminate animation.\n */\nconst DURATION_INDETERMINATE = 667;\n/**\n * Duration of the indeterminate animation.\n */\nconst DURATION_DETERMINATE = 225;\n/**\n * Start animation value of the indeterminate animation\n */\nconst startIndeterminate = 3;\n/**\n * End animation value of the indeterminate animation\n */\nconst endIndeterminate = 80;\n/**\n * Maximum angle for the arc. The angle can't be exactly 360, because the arc becomes hidden.\n */\nconst MAX_ANGLE = 359.99 / 100;\n/**\n * Whether the user's browser supports requestAnimationFrame.\n */\nconst HAS_RAF = typeof requestAnimationFrame !== 'undefined';\n/**\n * Default stroke width as a percentage of the viewBox.\n */\nexport const PROGRESS_SPINNER_STROKE_WIDTH = 10;\n\nexport type ProgressSpinnerMode = 'determinate' | 'indeterminate';\n\ntype EasingFn = (currentTime: number, startValue: number,\n changeInValue: number, duration: number) => number;\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdProgressSpinnerCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-progress-spinner, mat-progress-spinner',\n host: {'class': 'mat-progress-spinner'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdProgressSpinnerCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdProgressSpinnerCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdProgressSpinnerCssMatStyler.ctorParameters;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdProgressSpinnerBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdProgressSpinnerBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdProgressSpinnerBase.prototype._renderer;\n/** @type {?} */\nMdProgressSpinnerBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdProgressSpinnerMixinBase = mixinColor(MdProgressSpinnerBase, 'primary');\n/**\n * <md-progress-spinner> component.\n */\nexport class MdProgressSpinner extends _MdProgressSpinnerMixinBase\n implements OnDestroy, CanColor {\n/**\n * The id of the last requested animation.\n */\nprivate _lastAnimationId: number = 0;\n/**\n * The id of the indeterminate interval.\n */\nprivate _interdeterminateInterval: number | null;\n/**\n * The SVG <path> node that is used to draw the circle.\n */\nprivate _path: ElementRef;\nprivate _mode: ProgressSpinnerMode = 'determinate';\nprivate _value: number;\n/**\n * Stroke width of the progress spinner. By default uses 10px as stroke width.\n */\nstrokeWidth: number = PROGRESS_SPINNER_STROKE_WIDTH;\n/**\n * Values for aria max and min are only defined as numbers when in a determinate mode. We do this\n * because voiceover does not report the progress indicator as indeterminate if the aria min\n * and/or max value are number values.\n * @return {?}\n */\nget _ariaValueMin() {\n return this.mode == 'determinate' ? 0 : null;\n }\n/**\n * @return {?}\n */\nget _ariaValueMax() {\n return this.mode == 'determinate' ? 100 : null;\n }\n/**\n * \\@docs-private\n * @return {?}\n */\nget interdeterminateInterval() {\n return this._interdeterminateInterval;\n }\n/**\n * \\@docs-private\n * @param {?} interval\n * @return {?}\n */\nset interdeterminateInterval(interval: number | null) {\n if (this._interdeterminateInterval) {\n clearInterval(this._interdeterminateInterval);\n }\n\n this._interdeterminateInterval = interval;\n }\n/**\n * Clean up any animations that were running.\n * @return {?}\n */\nngOnDestroy() {\n this._cleanupIndeterminateAnimation();\n }\n/**\n * Value of the progress circle. It is bound to the host as the attribute aria-valuenow.\n * @return {?}\n */\nget value() {\n if (this.mode == 'determinate') {\n return this._value;\n }\n\n return 0;\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset value(v: number) {\n if (v != null && this.mode == 'determinate') {\n let /** @type {?} */ newValue = clamp(v);\n this._animateCircle(this.value || 0, newValue);\n this._value = newValue;\n }\n }\n/**\n * Mode of the progress circle\n * \n * Input must be one of the values from ProgressMode, defaults to 'determinate'.\n * mode is bound to the host as the attribute host.\n * @return {?}\n */\nget mode() { return this._mode; }\n/**\n * @param {?} mode\n * @return {?}\n */\nset mode(mode: ProgressSpinnerMode) {\n if (mode !== this._mode) {\n if (mode === 'indeterminate') {\n this._startIndeterminateAnimation();\n } else {\n this._cleanupIndeterminateAnimation();\n this._animateCircle(0, this._value);\n }\n this._mode = mode;\n }\n }\n/**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _ngZone\n */\nconstructor(renderer: Renderer2,\n elementRef: ElementRef,\nprivate _ngZone: NgZone) {\n super(renderer, elementRef);\n }\n/**\n * Animates the circle from one percentage value to another.\n * \n * @param {?} animateFrom The percentage of the circle filled starting the animation.\n * @param {?} animateTo The percentage of the circle filled ending the animation.\n * @param {?=} ease The easing function to manage the pace of change in the animation.\n * @param {?=} duration The length of time to show the animation, in milliseconds.\n * @param {?=} rotation The starting angle of the circle fill, with 0° represented at the top center\n * of the circle.\n * @return {?}\n */\nprivate _animateCircle(animateFrom: number, animateTo: number, ease: EasingFn = linearEase,\n duration = DURATION_DETERMINATE, rotation = 0) {\n\n let /** @type {?} */ id = ++this._lastAnimationId;\n let /** @type {?} */ startTime = Date.now();\n let /** @type {?} */ changeInValue = animateTo - animateFrom;\n\n // No need to animate it if the values are the same\n if (animateTo === animateFrom) {\n this._renderArc(animateTo, rotation);\n } else {\n let /** @type {?} */ animation = () => {\n // If there is no requestAnimationFrame, skip ahead to the end of the animation.\n let /** @type {?} */ elapsedTime = HAS_RAF ?\n Math.max(0, Math.min(Date.now() - startTime, duration)) :\n duration;\n\n this._renderArc(\n ease(elapsedTime, animateFrom, changeInValue, duration),\n rotation\n );\n\n // Prevent overlapping animations by checking if a new animation has been called for and\n // if the animation has lasted longer than the animation duration.\n if (id === this._lastAnimationId && elapsedTime < duration) {\n requestAnimationFrame(animation);\n }\n };\n\n // Run the animation outside of Angular's zone, in order to avoid\n // hitting ZoneJS and change detection on each frame.\n this._ngZone.runOutsideAngular(animation);\n }\n }\n/**\n * Starts the indeterminate animation interval, if it is not already running.\n * @return {?}\n */\nprivate _startIndeterminateAnimation() {\n let /** @type {?} */ rotationStartPoint = 0;\n let /** @type {?} */ start = startIndeterminate;\n let /** @type {?} */ end = endIndeterminate;\n let /** @type {?} */ duration = DURATION_INDETERMINATE;\n let /** @type {?} */ animate = () => {\n this._animateCircle(start, end, materialEase, duration, rotationStartPoint);\n // Prevent rotation from reaching Number.MAX_SAFE_INTEGER.\n rotationStartPoint = (rotationStartPoint + end) % 100;\n let /** @type {?} */ temp = start;\n start = -end;\n end = -temp;\n };\n\n if (!this.interdeterminateInterval) {\n this._ngZone.runOutsideAngular(() => {\n this.interdeterminateInterval = setInterval(animate, duration + 50, 0, false);\n animate();\n });\n }\n }\n/**\n * Removes interval, ending the animation.\n * @return {?}\n */\nprivate _cleanupIndeterminateAnimation() {\n this.interdeterminateInterval = null;\n }\n/**\n * Renders the arc onto the SVG element. Proxies `getArc` while setting the proper\n * DOM attribute on the `<path>`.\n * @param {?} currentValue\n * @param {?=} rotation\n * @return {?}\n */\nprivate _renderArc(currentValue: number, rotation = 0) {\n if (this._path) {\n const /** @type {?} */ svgArc = getSvgArc(currentValue, rotation, this.strokeWidth);\n this._renderer.setAttribute(this._path.nativeElement, 'd', svgArc);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-progress-spinner, mat-progress-spinner',\n host: {\n 'role': 'progressbar',\n 'class': 'mat-progress-spinner',\n '[attr.aria-valuemin]': '_ariaValueMin',\n '[attr.aria-valuemax]': '_ariaValueMax',\n '[attr.aria-valuenow]': 'value',\n '[attr.mode]': 'mode',\n },\n inputs: ['color'],\n templateUrl: 'progress-spinner.html',\n styleUrls: ['progress-spinner.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: NgZone, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_path': [{ type: ViewChild, args: ['path', ] },],\n'strokeWidth': [{ type: Input },],\n'value': [{ type: Input },],\n'mode': [{ type: Input },],\n};\n}\n\nfunction MdProgressSpinner_tsickle_Closure_declarations() {\n/** @type {?} */\nMdProgressSpinner.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdProgressSpinner.ctorParameters;\n/** @type {?} */\nMdProgressSpinner.propDecorators;\n/**\n * The id of the last requested animation.\n * @type {?}\n */\nMdProgressSpinner.prototype._lastAnimationId;\n/**\n * The id of the indeterminate interval.\n * @type {?}\n */\nMdProgressSpinner.prototype._interdeterminateInterval;\n/**\n * The SVG <path> node that is used to draw the circle.\n * @type {?}\n */\nMdProgressSpinner.prototype._path;\n/** @type {?} */\nMdProgressSpinner.prototype._mode;\n/** @type {?} */\nMdProgressSpinner.prototype._value;\n/**\n * Stroke width of the progress spinner. By default uses 10px as stroke width.\n * @type {?}\n */\nMdProgressSpinner.prototype.strokeWidth;\n/** @type {?} */\nMdProgressSpinner.prototype._ngZone;\n}\n\n/**\n * <md-spinner> component.\n * \n * This is a component definition to be used as a convenience reference to create an\n * indeterminate <md-progress-spinner> instance.\n */\nexport class MdSpinner extends MdProgressSpinner {\n/**\n * @param {?} elementRef\n * @param {?} ngZone\n * @param {?} renderer\n */\nconstructor(elementRef: ElementRef, ngZone: NgZone, renderer: Renderer2) {\n super(renderer, elementRef, ngZone);\n this.mode = 'indeterminate';\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-spinner, mat-spinner',\n host: {\n 'role': 'progressbar',\n 'mode': 'indeterminate',\n 'class': 'mat-spinner mat-progress-spinner',\n },\n inputs: ['color'],\n templateUrl: 'progress-spinner.html',\n styleUrls: ['progress-spinner.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: NgZone, },\n{type: Renderer2, },\n];\n}\n\nfunction MdSpinner_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSpinner.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSpinner.ctorParameters;\n}\n\n/**\n * Clamps a value to be between 0 and 100.\n * @param {?} v\n * @return {?}\n */\nfunction clamp(v: number) {\n return Math.max(0, Math.min(100, v));\n}\n/**\n * Converts Polar coordinates to Cartesian.\n * @param {?} radius\n * @param {?} pathRadius\n * @param {?} angleInDegrees\n * @return {?}\n */\nfunction polarToCartesian(radius: number, pathRadius: number, angleInDegrees: number) {\n let /** @type {?} */ angleInRadians = (angleInDegrees - 90) * DEGREE_IN_RADIANS;\n\n return (radius + (pathRadius * Math.cos(angleInRadians))) +\n ',' + (radius + (pathRadius * Math.sin(angleInRadians)));\n}\n/**\n * Easing function for linear animation.\n * @param {?} currentTime\n * @param {?} startValue\n * @param {?} changeInValue\n * @param {?} duration\n * @return {?}\n */\nfunction linearEase(currentTime: number, startValue: number,\n changeInValue: number, duration: number) {\n return changeInValue * currentTime / duration + startValue;\n}\n/**\n * Easing function to match material design indeterminate animation.\n * @param {?} currentTime\n * @param {?} startValue\n * @param {?} changeInValue\n * @param {?} duration\n * @return {?}\n */\nfunction materialEase(currentTime: number, startValue: number,\n changeInValue: number, duration: number) {\n let /** @type {?} */ time = currentTime / duration;\n let /** @type {?} */ timeCubed = Math.pow(time, 3);\n let /** @type {?} */ timeQuad = Math.pow(time, 4);\n let /** @type {?} */ timeQuint = Math.pow(time, 5);\n return startValue + changeInValue * ((6 * timeQuint) + (-15 * timeQuad) + (10 * timeCubed));\n}\n/**\n * Determines the path value to define the arc. Converting percentage values to to polar\n * coordinates on the circle, and then to cartesian coordinates in the viewport.\n * \n * @param {?} currentValue The current percentage value of the progress circle, the percentage of the\n * circle to fill.\n * @param {?} rotation The starting point of the circle with 0 being the 0 degree point.\n * @param {?} strokeWidth Stroke width of the progress spinner arc.\n * @return {?} A string for an SVG path representing a circle filled from the starting point to the\n * percentage value provided.\n */\nfunction getSvgArc(currentValue: number, rotation: number, strokeWidth: number): string {\n let /** @type {?} */ startPoint = rotation || 0;\n let /** @type {?} */ radius = 50;\n let /** @type {?} */ pathRadius = radius - strokeWidth;\n\n let /** @type {?} */ startAngle = startPoint * MAX_ANGLE;\n let /** @type {?} */ endAngle = currentValue * MAX_ANGLE;\n let /** @type {?} */ start = polarToCartesian(radius, pathRadius, startAngle);\n let /** @type {?} */ end = polarToCartesian(radius, pathRadius, endAngle + startAngle);\n let /** @type {?} */ arcSweep = endAngle < 0 ? 0 : 1;\n let /** @type {?} */ largeArcFlag: number;\n\n if (endAngle < 0) {\n largeArcFlag = endAngle >= -180 ? 0 : 1;\n } else {\n largeArcFlag = endAngle <= 180 ? 0 : 1;\n }\n\n return `M${start}A${pathRadius},${pathRadius} 0 ${largeArcFlag},${arcSweep} ${end}`;\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n Renderer2,\n EventEmitter,\n Input,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewEncapsulation,\n forwardRef,\n ViewChild,\n OnDestroy,\n AfterViewInit,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport {\n RippleRef,\n UniqueSelectionDispatcher,\n MdRipple, MATERIAL_COMPATIBILITY_MODE,\n} from '@angular/material/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {mixinDisabled, CanDisable} from '@angular/material/core';\nimport {CanColor, mixinColor} from '@angular/material/core';\nimport {CanDisableRipple, mixinDisableRipple} from '@angular/material/core';\nimport {FocusMonitor, FocusOrigin} from '@angular/cdk/a11y';\n\n// Increasing integer for generating unique ids for radio components.\nlet /** @type {?} */ nextUniqueId = 0;\n/**\n * Provider Expression that allows md-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * \\@docs-private\n */\nexport const MD_RADIO_GROUP_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MdRadioGroup),\n multi: true\n};\n/**\n * Change event object emitted by MdRadio and MdRadioGroup.\n */\nexport class MdRadioChange {\n/**\n * The MdRadioButton that emits the change event.\n */\nsource: MdRadioButton | null;\n/**\n * The value of the MdRadioButton.\n */\nvalue: any;\n}\n\nfunction MdRadioChange_tsickle_Closure_declarations() {\n/**\n * The MdRadioButton that emits the change event.\n * @type {?}\n */\nMdRadioChange.prototype.source;\n/**\n * The value of the MdRadioButton.\n * @type {?}\n */\nMdRadioChange.prototype.value;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdRadioGroupBase { }\nexport const /** @type {?} */ _MdRadioGroupMixinBase = mixinDisabled(MdRadioGroupBase);\n/**\n * A group of radio buttons. May contain one or more `<md-radio-button>` elements.\n */\nexport class MdRadioGroup extends _MdRadioGroupMixinBase\n implements AfterContentInit, ControlValueAccessor, CanDisable {\n/**\n * Selected value for group. Should equal the value of the selected radio button if there *is*\n * a corresponding radio button with a matching value. If there is *not* such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n */\nprivate _value: any = null;\n/**\n * The HTML name attribute applied to radio buttons in this group.\n */\nprivate _name: string = `md-radio-group-${nextUniqueId++}`;\n/**\n * The currently selected radio button. Should match value.\n */\nprivate _selected: MdRadioButton | null = null;\n/**\n * Whether the `value` has been set to its initial value.\n */\nprivate _isInitialized: boolean = false;\n/**\n * Whether the labels should appear after or before the radio-buttons. Defaults to 'after'\n */\nprivate _labelPosition: 'before' | 'after' = 'after';\n/**\n * Whether the radio group is disabled.\n */\nprivate _disabled: boolean = false;\n/**\n * Whether the radio group is required.\n */\nprivate _required: boolean = false;\n/**\n * The method to be called in order to update ngModel\n */\n_controlValueAccessorChangeFn: (value: any) => void = () => {};\n/**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * \\@docs-private\n */\nonTouched: () => any = () => {};\n/**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as `<input type-\"radio\">`).\n */\nchange: EventEmitter<MdRadioChange> = new EventEmitter<MdRadioChange>();\n/**\n * Child radio buttons.\n */\n_radios: QueryList<MdRadioButton>;\n/**\n * Name of the radio button group. All radio buttons inside this group will use this name.\n * @return {?}\n */\nget name(): string { return this._name; }\n/**\n * @param {?} value\n * @return {?}\n */\nset name(value: string) {\n this._name = value;\n this._updateRadioButtonNames();\n }\n/**\n * Alignment of the radio-buttons relative to their labels. Can be 'before' or 'after'.\n * @deprecated\n * @return {?}\n */\nget align(): 'start' | 'end' {\n // align refers to the checkbox relative to the label, while labelPosition refers to the\n // label relative to the checkbox. As such, they are inverted.\n return this.labelPosition == 'after' ? 'start' : 'end';\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset align(v) {\n this.labelPosition = (v == 'start') ? 'after' : 'before';\n }\n/**\n * Whether the labels should appear after or before the radio-buttons. Defaults to 'after'\n * @return {?}\n */\nget labelPosition() {\n return this._labelPosition;\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset labelPosition(v) {\n this._labelPosition = (v == 'before') ? 'before' : 'after';\n this._markRadiosForCheck();\n }\n/**\n * Value of the radio button.\n * @return {?}\n */\nget value(): any { return this._value; }\n/**\n * @param {?} newValue\n * @return {?}\n */\nset value(newValue: any) {\n if (this._value != newValue) {\n // Set this before proceeding to ensure no circular loop occurs with selection.\n this._value = newValue;\n\n this._updateSelectedRadioFromValue();\n this._checkSelectedRadioButton();\n }\n }\n/**\n * @return {?}\n */\n_checkSelectedRadioButton() {\n if (this._selected && !this._selected.checked) {\n this._selected.checked = true;\n }\n }\n/**\n * Whether the radio button is selected.\n * @return {?}\n */\nget selected() { return this._selected; }\n/**\n * @param {?} selected\n * @return {?}\n */\nset selected(selected: MdRadioButton | null) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n this._checkSelectedRadioButton();\n }\n/**\n * Whether the radio group is disabled\n * @return {?}\n */\nget disabled(): boolean { return this._disabled; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n/**\n * Whether the radio group is required\n * @return {?}\n */\nget required(): boolean { return this._required; }\n/**\n * @param {?} value\n * @return {?}\n */\nset required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n/**\n * @param {?} _changeDetector\n */\nconstructor(private _changeDetector: ChangeDetectorRef) {\n super();\n }\n/**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n * @return {?}\n */\nngAfterContentInit() {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on MdRadioGroup, and it is possible that the OnInit of the\n // NgModel occurs *after* the OnInit of the MdRadioGroup.\n this._isInitialized = true;\n }\n/**\n * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n * radio buttons upon their blur.\n * @return {?}\n */\n_touch() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n/**\n * @return {?}\n */\nprivate _updateRadioButtonNames(): void {\n if (this._radios) {\n this._radios.forEach(radio => {\n radio.name = this.name;\n });\n }\n }\n/**\n * Updates the `selected` radio button from the internal _value state.\n * @return {?}\n */\nprivate _updateSelectedRadioFromValue(): void {\n // If the value already matches the selected radio, do nothing.\n const /** @type {?} */ isAlreadySelected = this._selected != null && this._selected.value == this._value;\n\n if (this._radios != null && !isAlreadySelected) {\n this._selected = null;\n this._radios.forEach(radio => {\n radio.checked = this.value == radio.value;\n if (radio.checked) {\n this._selected = radio;\n }\n });\n }\n }\n/**\n * Dispatch change event with current selection and group value.\n * @return {?}\n */\n_emitChangeEvent(): void {\n if (this._isInitialized) {\n const /** @type {?} */ event = new MdRadioChange();\n event.source = this._selected;\n event.value = this._value;\n this.change.emit(event);\n }\n }\n/**\n * @return {?}\n */\n_markRadiosForCheck() {\n if (this._radios) {\n this._radios.forEach(radio => radio._markForCheck());\n }\n }\n/**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param {?} value\n * @return {?}\n */\nwriteValue(value: any) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n/**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn Callback to be registered.\n * @return {?}\n */\nregisterOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n/**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn Callback to be registered.\n * @return {?}\n */\nregisterOnTouched(fn: any) {\n this.onTouched = fn;\n }\n/**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param {?} isDisabled Whether the control should be disabled.\n * @return {?}\n */\nsetDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._changeDetector.markForCheck();\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-radio-group, mat-radio-group',\n providers: [MD_RADIO_GROUP_CONTROL_VALUE_ACCESSOR],\n host: {\n 'role': 'radiogroup',\n 'class': 'mat-radio-group',\n },\n inputs: ['disabled'],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'change': [{ type: Output },],\n'_radios': [{ type: ContentChildren, args: [forwardRef(() => MdRadioButton), ] },],\n'name': [{ type: Input },],\n'align': [{ type: Input },],\n'labelPosition': [{ type: Input },],\n'value': [{ type: Input },],\n'selected': [{ type: Input },],\n'disabled': [{ type: Input },],\n'required': [{ type: Input },],\n};\n}\n\nfunction MdRadioGroup_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRadioGroup.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdRadioGroup.ctorParameters;\n/** @type {?} */\nMdRadioGroup.propDecorators;\n/**\n * Selected value for group. Should equal the value of the selected radio button if there *is*\n * a corresponding radio button with a matching value. If there is *not* such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n * @type {?}\n */\nMdRadioGroup.prototype._value;\n/**\n * The HTML name attribute applied to radio buttons in this group.\n * @type {?}\n */\nMdRadioGroup.prototype._name;\n/**\n * The currently selected radio button. Should match value.\n * @type {?}\n */\nMdRadioGroup.prototype._selected;\n/**\n * Whether the `value` has been set to its initial value.\n * @type {?}\n */\nMdRadioGroup.prototype._isInitialized;\n/**\n * Whether the labels should appear after or before the radio-buttons. Defaults to 'after'\n * @type {?}\n */\nMdRadioGroup.prototype._labelPosition;\n/**\n * Whether the radio group is disabled.\n * @type {?}\n */\nMdRadioGroup.prototype._disabled;\n/**\n * Whether the radio group is required.\n * @type {?}\n */\nMdRadioGroup.prototype._required;\n/**\n * The method to be called in order to update ngModel\n * @type {?}\n */\nMdRadioGroup.prototype._controlValueAccessorChangeFn;\n/**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * \\@docs-private\n * @type {?}\n */\nMdRadioGroup.prototype.onTouched;\n/**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as `<input type-\"radio\">`).\n * @type {?}\n */\nMdRadioGroup.prototype.change;\n/**\n * Child radio buttons.\n * @type {?}\n */\nMdRadioGroup.prototype._radios;\n/** @type {?} */\nMdRadioGroup.prototype._changeDetector;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdRadioButtonBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdRadioButtonBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRadioButtonBase.prototype._renderer;\n/** @type {?} */\nMdRadioButtonBase.prototype._elementRef;\n}\n\n// As per Material design specifications the selection control radio should use the accent color\n// palette by default. https://material.io/guidelines/components/selection-controls.html\nexport const /** @type {?} */ _MdRadioButtonMixinBase = mixinColor(mixinDisableRipple(MdRadioButtonBase), 'accent');\n/**\n * A radio-button. May be inside of\n */\nexport class MdRadioButton extends _MdRadioButtonMixinBase\n implements OnInit, AfterViewInit, OnDestroy, CanColor, CanDisableRipple {\nprivate _uniqueId: string = `md-radio-${++nextUniqueId}`;\n/**\n * The unique ID for the radio button.\n */\nid: string = this._uniqueId;\n/**\n * Analog to HTML 'name' attribute used to group radios for unique selection.\n */\nname: string;\n/**\n * Used to set the 'aria-label' attribute on the underlying input element.\n */\nariaLabel: string;\n/**\n * The 'aria-labelledby' attribute takes precedence as the element's text alternative.\n */\nariaLabelledby: string;\n/**\n * Whether this radio button is checked.\n * @return {?}\n */\nget checked(): boolean {\n return this._checked;\n }\n/**\n * @param {?} newCheckedState\n * @return {?}\n */\nset checked(newCheckedState: boolean) {\n if (this._checked != newCheckedState) {\n this._checked = newCheckedState;\n\n if (newCheckedState && this.radioGroup && this.radioGroup.value != this.value) {\n this.radioGroup.selected = this;\n } else if (!newCheckedState && this.radioGroup && this.radioGroup.value == this.value) {\n // When unchecking the selected radio button, update the selected radio\n // property on the group.\n this.radioGroup.selected = null;\n }\n\n if (newCheckedState) {\n // Notify all radio buttons with the same name to un-check.\n this._radioDispatcher.notify(this.id, this.name);\n }\n this._changeDetector.markForCheck();\n }\n }\n/**\n * The value of this radio button.\n * @return {?}\n */\nget value(): any {\n return this._value;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset value(value: any) {\n if (this._value != value) {\n this._value = value;\n if (this.radioGroup != null) {\n if (!this.checked) {\n // Update checked when the value changed to match the radio group's value\n this.checked = this.radioGroup.value == value;\n }\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n }\n }\n }\n/**\n * Whether or not the radio-button should appear before or after the label.\n * @deprecated\n * @return {?}\n */\nget align(): 'start' | 'end' {\n // align refers to the checkbox relative to the label, while labelPosition refers to the\n // label relative to the checkbox. As such, they are inverted.\n return this.labelPosition == 'after' ? 'start' : 'end';\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset align(v) {\n this.labelPosition = (v == 'start') ? 'after' : 'before';\n }\nprivate _labelPosition: 'before' | 'after';\n/**\n * Whether the label should appear after or before the radio button. Defaults to 'after'\n * @return {?}\n */\nget labelPosition(): 'before' | 'after' {\n return this._labelPosition || (this.radioGroup && this.radioGroup.labelPosition) || 'after';\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset labelPosition(value) {\n this._labelPosition = value;\n }\n/**\n * Whether the radio button is disabled.\n * @return {?}\n */\nget disabled(): boolean {\n return this._disabled || (this.radioGroup != null && this.radioGroup.disabled);\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n/**\n * Whether the radio button is required.\n * @return {?}\n */\nget required(): boolean {\n return this._required || (this.radioGroup && this.radioGroup.required);\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n/**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as `<input type-\"radio\">`).\n */\nchange: EventEmitter<MdRadioChange> = new EventEmitter<MdRadioChange>();\n/**\n * The parent radio group. May or may not be present.\n */\nradioGroup: MdRadioGroup;\n/**\n * ID of the native input element inside `<md-radio-button>`\n * @return {?}\n */\nget inputId(): string { return `${this.id || this._uniqueId}-input`; }\n/**\n * Whether this radio is checked.\n */\nprivate _checked: boolean = false;\n/**\n * Whether this radio is disabled.\n */\nprivate _disabled: boolean;\n/**\n * Whether this radio is required.\n */\nprivate _required: boolean;\n/**\n * Value assigned to this radio.\n */\nprivate _value: any = null;\n/**\n * The child ripple instance.\n */\n_ripple: MdRipple;\n/**\n * Reference to the current focus ripple.\n */\nprivate _focusRipple: RippleRef | null;\n/**\n * Unregister function for _radioDispatcher *\n */\nprivate _removeUniqueSelectionListener: () => void = () => {};\n/**\n * The native `<input type=radio>` element\n */\n_inputElement: ElementRef;\n/**\n * @param {?} radioGroup\n * @param {?} elementRef\n * @param {?} renderer\n * @param {?} _changeDetector\n * @param {?} _focusMonitor\n * @param {?} _radioDispatcher\n */\nconstructor( radioGroup: MdRadioGroup,\n elementRef: ElementRef,\n renderer: Renderer2,\nprivate _changeDetector: ChangeDetectorRef,\nprivate _focusMonitor: FocusMonitor,\nprivate _radioDispatcher: UniqueSelectionDispatcher) {\n super(renderer, elementRef);\n\n // Assertions. Ideally these should be stripped out by the compiler.\n // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n this.radioGroup = radioGroup;\n\n this._removeUniqueSelectionListener =\n _radioDispatcher.listen((id: string, name: string) => {\n if (id != this.id && name == this.name) {\n this.checked = false;\n }\n });\n }\n/**\n * Focuses the radio button.\n * @return {?}\n */\nfocus(): void {\n this._focusMonitor.focusVia(this._inputElement.nativeElement, 'keyboard');\n }\n/**\n * Marks the radio button as needing checking for change detection.\n * This method is exposed because the parent radio group will directly\n * update bound properties of the radio button.\n * @return {?}\n */\n_markForCheck() {\n // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n // update radio button's status\n this._changeDetector.markForCheck();\n }\n/**\n * @return {?}\n */\nngOnInit() {\n if (this.radioGroup) {\n // If the radio is inside a radio group, determine if it should be checked\n this.checked = this.radioGroup.value === this._value;\n // Copy name from parent radio group\n this.name = this.radioGroup.name;\n }\n }\n/**\n * @return {?}\n */\nngAfterViewInit() {\n this._focusMonitor\n .monitor(this._inputElement.nativeElement, this._renderer, false)\n .subscribe(focusOrigin => this._onInputFocusChange(focusOrigin));\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._inputElement.nativeElement);\n this._removeUniqueSelectionListener();\n }\n/**\n * Dispatch change event with current value.\n * @return {?}\n */\nprivate _emitChangeEvent(): void {\n const /** @type {?} */ event = new MdRadioChange();\n event.source = this;\n event.value = this._value;\n this.change.emit(event);\n }\n/**\n * @return {?}\n */\n_isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onInputClick(event: Event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `radio-button` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n/**\n * Triggered when the radio button received a click or the input recognized any change.\n * Clicking on a label element, will trigger a change event on the associated input.\n * @param {?} event\n * @return {?}\n */\n_onInputChange(event: Event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n\n const /** @type {?} */ groupValueChanged = this.radioGroup && this.value != this.radioGroup.value;\n this.checked = true;\n this._emitChangeEvent();\n\n if (this.radioGroup) {\n this.radioGroup._controlValueAccessorChangeFn(this.value);\n this.radioGroup._touch();\n if (groupValueChanged) {\n this.radioGroup._emitChangeEvent();\n }\n }\n }\n/**\n * Function is called whenever the focus changes for the input element.\n * @param {?} focusOrigin\n * @return {?}\n */\nprivate _onInputFocusChange(focusOrigin: FocusOrigin) {\n if (!this._focusRipple && focusOrigin === 'keyboard') {\n this._focusRipple = this._ripple.launch(0, 0, {persistent: true, centered: true});\n } else if (!focusOrigin) {\n if (this.radioGroup) {\n this.radioGroup._touch();\n }\n\n if (this._focusRipple) {\n this._focusRipple.fadeOut();\n this._focusRipple = null;\n }\n }\n }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-radio-button, mat-radio-button',\n templateUrl: 'radio.html',\n styleUrls: ['radio.css'],\n inputs: ['color', 'disableRipple'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n host: {\n 'class': 'mat-radio-button',\n '[class.mat-radio-checked]': 'checked',\n '[class.mat-radio-disabled]': 'disabled',\n '[attr.id]': 'id',\n // Note: under normal conditions focus shouldn't land on this element, however it may be\n // programmatically set, for example inside of a focus trap, in this case we want to forward\n // the focus to the native element.\n '(focus)': '_inputElement.nativeElement.focus()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdRadioGroup, decorators: [{ type: Optional }, ]},\n{type: ElementRef, },\n{type: Renderer2, },\n{type: ChangeDetectorRef, },\n{type: FocusMonitor, },\n{type: UniqueSelectionDispatcher, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'id': [{ type: Input },],\n'name': [{ type: Input },],\n'ariaLabel': [{ type: Input, args: ['aria-label', ] },],\n'ariaLabelledby': [{ type: Input, args: ['aria-labelledby', ] },],\n'checked': [{ type: Input },],\n'value': [{ type: Input },],\n'align': [{ type: Input },],\n'labelPosition': [{ type: Input },],\n'disabled': [{ type: Input },],\n'required': [{ type: Input },],\n'change': [{ type: Output },],\n'_ripple': [{ type: ViewChild, args: [MdRipple, ] },],\n'_inputElement': [{ type: ViewChild, args: ['input', ] },],\n};\n}\n\nfunction MdRadioButton_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRadioButton.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdRadioButton.ctorParameters;\n/** @type {?} */\nMdRadioButton.propDecorators;\n/** @type {?} */\nMdRadioButton.prototype._uniqueId;\n/**\n * The unique ID for the radio button.\n * @type {?}\n */\nMdRadioButton.prototype.id;\n/**\n * Analog to HTML 'name' attribute used to group radios for unique selection.\n * @type {?}\n */\nMdRadioButton.prototype.name;\n/**\n * Used to set the 'aria-label' attribute on the underlying input element.\n * @type {?}\n */\nMdRadioButton.prototype.ariaLabel;\n/**\n * The 'aria-labelledby' attribute takes precedence as the element's text alternative.\n * @type {?}\n */\nMdRadioButton.prototype.ariaLabelledby;\n/** @type {?} */\nMdRadioButton.prototype._labelPosition;\n/**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as `<input type-\"radio\">`).\n * @type {?}\n */\nMdRadioButton.prototype.change;\n/**\n * The parent radio group. May or may not be present.\n * @type {?}\n */\nMdRadioButton.prototype.radioGroup;\n/**\n * Whether this radio is checked.\n * @type {?}\n */\nMdRadioButton.prototype._checked;\n/**\n * Whether this radio is disabled.\n * @type {?}\n */\nMdRadioButton.prototype._disabled;\n/**\n * Whether this radio is required.\n * @type {?}\n */\nMdRadioButton.prototype._required;\n/**\n * Value assigned to this radio.\n * @type {?}\n */\nMdRadioButton.prototype._value;\n/**\n * The child ripple instance.\n * @type {?}\n */\nMdRadioButton.prototype._ripple;\n/**\n * Reference to the current focus ripple.\n * @type {?}\n */\nMdRadioButton.prototype._focusRipple;\n/**\n * Unregister function for _radioDispatcher *\n * @type {?}\n */\nMdRadioButton.prototype._removeUniqueSelectionListener;\n/**\n * The native `<input type=radio>` element\n * @type {?}\n */\nMdRadioButton.prototype._inputElement;\n/** @type {?} */\nMdRadioButton.prototype._changeDetector;\n/** @type {?} */\nMdRadioButton.prototype._focusMonitor;\n/** @type {?} */\nMdRadioButton.prototype._radioDispatcher;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {VIEWPORT_RULER_PROVIDER} from '@angular/cdk/overlay';\nimport {\n MdRippleModule,\n MdCommonModule,\n UNIQUE_SELECTION_DISPATCHER_PROVIDER,\n} from '@angular/material/core';\nimport {MdRadioGroup, MdRadioButton} from './radio';\nimport {A11yModule} from '@angular/cdk/a11y';\nexport class MdRadioModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CommonModule, MdRippleModule, MdCommonModule, A11yModule],\n exports: [MdRadioGroup, MdRadioButton, MdCommonModule],\n providers: [UNIQUE_SELECTION_DISPATCHER_PROVIDER, VIEWPORT_RULER_PROVIDER],\n declarations: [MdRadioGroup, MdRadioButton],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdRadioModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRadioModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdRadioModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdRadioModule,MD_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,MdRadioChange,MdRadioGroupBase,_MdRadioGroupMixinBase,MdRadioGroup,MdRadioButtonBase,_MdRadioButtonMixinBase,MdRadioButton,MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,MatRadioButton,MatRadioButtonBase,MatRadioChange,MatRadioGroup,MatRadioGroupBase,MatRadioModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {FocusKeyManager} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {DOWN_ARROW, END, ENTER, HOME, SPACE, UP_ARROW} from '@angular/cdk/keycodes';\nimport {\n ConnectedOverlayDirective,\n Overlay,\n RepositionScrollStrategy,\n ScrollStrategy,\n ViewportRuler,\n} from '@angular/cdk/overlay';\nimport {Platform} from '@angular/cdk/platform';\nimport {filter, startWith} from '@angular/cdk/rxjs';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n isDevMode,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {\n CanColor,\n CanDisable,\n FloatPlaceholderType,\n HasTabIndex,\n MD_PLACEHOLDER_GLOBAL_OPTIONS,\n MdOptgroup,\n MdOption,\n MdOptionSelectionChange,\n mixinColor,\n mixinDisabled,\n mixinTabIndex,\n PlaceholderOptions,\n} from '@angular/material/core';\nimport {Observable} from 'rxjs/Observable';\nimport {merge} from 'rxjs/observable/merge';\nimport {Subscription} from 'rxjs/Subscription';\nimport {fadeInContent, transformPanel, transformPlaceholder} from './select-animations';\nimport {\n getMdSelectDynamicMultipleError,\n getMdSelectNonArrayValueError,\n getMdSelectNonFunctionValueError,\n} from './select-errors';\n/**\n * The fixed height of every option element (option, group header etc.).\n */\nexport const SELECT_ITEM_HEIGHT = 48;\n/**\n * The max height of the select's overlay panel\n */\nexport const SELECT_PANEL_MAX_HEIGHT = 256;\n/**\n * The max number of options visible at once in the select panel.\n */\nexport const SELECT_MAX_OPTIONS_DISPLAYED =\n Math.floor(SELECT_PANEL_MAX_HEIGHT / SELECT_ITEM_HEIGHT);\n/**\n * The fixed height of the select's trigger element.\n */\nexport const SELECT_TRIGGER_HEIGHT = 30;\n/**\n * Must adjust for the difference in height between the option and the trigger,\n * so the text will align on the y axis.\n */\nexport const SELECT_OPTION_HEIGHT_ADJUSTMENT = (SELECT_ITEM_HEIGHT - SELECT_TRIGGER_HEIGHT) / 2;\n/**\n * The panel's padding on the x-axis\n */\nexport const SELECT_PANEL_PADDING_X = 16;\n/**\n * The panel's x axis padding if it is indented (e.g. there is an option group).\n */\nexport const SELECT_PANEL_INDENT_PADDING_X = SELECT_PANEL_PADDING_X * 2;\n/**\n * Distance between the panel edge and the option text in\n * multi-selection mode.\n * \n * (SELECT_PADDING * 1.75) + 20 = 48\n * The padding is multiplied by 1.75 because the checkbox's margin is half the padding, and\n * the browser adds ~4px, because we're using inline elements.\n * The checkbox width is 20px.\n */\nexport const SELECT_MULTIPLE_PANEL_PADDING_X = SELECT_PANEL_PADDING_X * 1.75 + 20;\n/**\n * The panel's padding on the y-axis. This padding indicates there are more\n * options available if you scroll.\n */\nexport const SELECT_PANEL_PADDING_Y = 16;\n/**\n * The select panel will only \"fit\" inside the viewport if it is positioned at\n * this value or more away from the viewport boundary.\n */\nexport const SELECT_PANEL_VIEWPORT_PADDING = 8;\n/**\n * Default minimum width of the trigger based on the CSS.\n * Used as a fallback for server-side rendering.\n * \\@docs-private\n */\nconst SELECT_TRIGGER_MIN_WIDTH = 112;\n/**\n * Injection token that determines the scroll handling while a select is open.\n */\nexport const MD_SELECT_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('md-select-scroll-strategy');\n/**\n * \\@docs-private\n * @param {?} overlay\n * @return {?}\n */\nexport function MD_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n () => RepositionScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n/**\n * \\@docs-private\n */\nexport const MD_SELECT_SCROLL_STRATEGY_PROVIDER = {\n provide: MD_SELECT_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MD_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/**\n * Change event object that is emitted when the select value has changed.\n */\nexport class MdSelectChange {\n/**\n * @param {?} source\n * @param {?} value\n */\nconstructor(public source: MdSelect,\npublic value: any) { }\n}\n\nfunction MdSelectChange_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSelectChange.prototype.source;\n/** @type {?} */\nMdSelectChange.prototype.value;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdSelectBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdSelectBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSelectBase.prototype._renderer;\n/** @type {?} */\nMdSelectBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdSelectMixinBase =\n mixinTabIndex(mixinColor(mixinDisabled(MdSelectBase), 'primary'));\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\nexport class MdSelectTrigger {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-select-trigger, mat-select-trigger'\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSelectTrigger_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSelectTrigger.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSelectTrigger.ctorParameters;\n}\n\nexport class MdSelect extends _MdSelectMixinBase implements AfterContentInit, OnDestroy, OnInit,\n ControlValueAccessor, CanColor, CanDisable, HasTabIndex {\n/**\n * Whether or not the overlay panel is open.\n */\nprivate _panelOpen = false;\n/**\n * Subscriptions to option events.\n */\nprivate _optionSubscription = Subscription.EMPTY;\n/**\n * Subscription to changes in the option list.\n */\nprivate _changeSubscription = Subscription.EMPTY;\n/**\n * Subscription to tab events while overlay is focused.\n */\nprivate _tabSubscription = Subscription.EMPTY;\n/**\n * Whether filling out the select is required in the form.\n */\nprivate _required: boolean = false;\n/**\n * The scroll position of the overlay panel, calculated to center the selected option.\n */\nprivate _scrollTop = 0;\n/**\n * The placeholder displayed in the trigger of the select.\n */\nprivate _placeholder: string;\n/**\n * Whether the component is in multiple selection mode.\n */\nprivate _multiple: boolean = false;\n/**\n * Comparison function to specify which option is displayed. Defaults to object equality.\n */\nprivate _compareWith = (o1: any, o2: any) => o1 === o2;\n/**\n * Deals with the selection logic.\n */\n_selectionModel: SelectionModel<MdOption>;\n/**\n * The animation state of the placeholder.\n */\nprivate _placeholderState = '';\n/**\n * Deals with configuring placeholder options\n */\nprivate _placeholderOptions: PlaceholderOptions;\n/**\n * The width of the trigger. Must be saved to set the min width of the overlay panel\n * and the width of the selected value.\n */\n_triggerWidth: number;\n/**\n * Manages keyboard events for options in the panel.\n */\n_keyManager: FocusKeyManager<MdOption>;\n/**\n * The width of the selected option's value. Must be set programmatically\n * to ensure its overflow is clipped, as it's absolutely positioned.\n */\n_selectedValueWidth: number;\n/**\n * View -> model callback called when value changes\n */\n_onChange: (value: any) => void = () => {};\n/**\n * View -> model callback called when select has been touched\n */\n_onTouched = () => {};\n/**\n * The IDs of child options to be passed to the aria-owns attribute.\n */\n_optionIds: string = '';\n/**\n * The value of the select panel's transform-origin property.\n */\n_transformOrigin: string = 'top';\n/**\n * Whether the panel's animation is done.\n */\n_panelDoneAnimating: boolean = false;\n/**\n * Strategy that will be used to handle scrolling while the select panel is open.\n */\n_scrollStrategy = this._scrollStrategyFactory();\n/**\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text.\n * when the panel opens. Will change based on the y-position of the selected option.\n */\n_offsetY = 0;\n/**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n_positions = [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ];\n/**\n * Trigger that opens the select.\n */\ntrigger: ElementRef;\n/**\n * Overlay pane containing the options.\n */\noverlayDir: ConnectedOverlayDirective;\n/**\n * All of the defined select options.\n */\noptions: QueryList<MdOption>;\n/**\n * All of the defined groups of options.\n */\noptionGroups: QueryList<MdOptgroup>;\n/**\n * Classes to be passed to the select panel. Supports the same syntax as `ngClass`.\n */\npanelClass: string|string[]|Set<string>|{[key: string]: any};\n/**\n * User-supplied override of the trigger element.\n */\ncustomTrigger: MdSelectTrigger;\n/**\n * Placeholder to be shown if no value has been selected.\n * @return {?}\n */\nget placeholder() { return this._placeholder; }\n/**\n * @param {?} value\n * @return {?}\n */\nset placeholder(value: string) {\n this._placeholder = value;\n\n // Must wait to record the trigger width to ensure placeholder width is included.\n Promise.resolve(null).then(() => this._setTriggerWidth());\n }\n/**\n * Whether the component is required.\n * @return {?}\n */\nget required() { return this._required; }\n/**\n * @param {?} value\n * @return {?}\n */\nset required(value: any) { this._required = coerceBooleanProperty(value); }\n/**\n * Whether the user should be allowed to select multiple options.\n * @return {?}\n */\nget multiple(): boolean { return this._multiple; }\n/**\n * @param {?} value\n * @return {?}\n */\nset multiple(value: boolean) {\n if (this._selectionModel) {\n throw getMdSelectDynamicMultipleError();\n }\n\n this._multiple = coerceBooleanProperty(value);\n }\n/**\n * A function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n * @return {?}\n */\nget compareWith() { return this._compareWith; }\n/**\n * @param {?} fn\n * @return {?}\n */\nset compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw getMdSelectNonFunctionValueError();\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n/**\n * Whether to float the placeholder text.\n * @return {?}\n */\nget floatPlaceholder(): FloatPlaceholderType { return this._floatPlaceholder; }\n/**\n * @param {?} value\n * @return {?}\n */\nset floatPlaceholder(value: FloatPlaceholderType) {\n this._floatPlaceholder = value || this._placeholderOptions.float || 'auto';\n }\nprivate _floatPlaceholder: FloatPlaceholderType;\n/**\n * Value of the select control.\n * @return {?}\n */\nget value() { return this._value; }\n/**\n * @param {?} newValue\n * @return {?}\n */\nset value(newValue: any) {\n this.writeValue(newValue);\n this._value = newValue;\n }\nprivate _value: any;\n/**\n * Whether ripples for all options in the select are disabled.\n * @return {?}\n */\nget disableRipple(): boolean { return this._disableRipple; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disableRipple(value: boolean) {\n this._disableRipple = coerceBooleanProperty(value);\n this._setOptionDisableRipple();\n }\nprivate _disableRipple: boolean = false;\n/**\n * Aria label of the select. If not specified, the placeholder will be used as label.\n */\nariaLabel: string = '';\n/**\n * Input that can be used to specify the `aria-labelledby` attribute.\n */\nariaLabelledby: string = '';\n/**\n * Combined stream of all of the child options' change events.\n * @return {?}\n */\nget optionSelectionChanges(): Observable<MdOptionSelectionChange> {\n return merge(...this.options.map(option => option.onSelectionChange));\n }\n/**\n * Event emitted when the select has been opened.\n */\nonOpen: EventEmitter<void> = new EventEmitter<void>();\n/**\n * Event emitted when the select has been closed.\n */\nonClose: EventEmitter<void> = new EventEmitter<void>();\n/**\n * Event emitted when the selected value has been changed by the user.\n */\nchange: EventEmitter<MdSelectChange> = new EventEmitter<MdSelectChange>();\n/**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * \\@docs-private\n */\nvalueChange = new EventEmitter<any>();\n/**\n * @param {?} _viewportRuler\n * @param {?} _changeDetectorRef\n * @param {?} _platform\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _dir\n * @param {?} _parentForm\n * @param {?} _parentFormGroup\n * @param {?} _control\n * @param {?} tabIndex\n * @param {?} placeholderOptions\n * @param {?} _scrollStrategyFactory\n */\nconstructor(\nprivate _viewportRuler: ViewportRuler,\nprivate _changeDetectorRef: ChangeDetectorRef,\nprivate _platform: Platform,\n renderer: Renderer2,\n elementRef: ElementRef,\nprivate _dir: Directionality,\nprivate _parentForm: NgForm,\nprivate _parentFormGroup: FormGroupDirective,\npublic _control: NgControl,\n tabIndex: string,\n placeholderOptions: PlaceholderOptions,\nprivate _scrollStrategyFactory) {\n\n super(renderer, elementRef);\n\n if (this._control) {\n this._control.valueAccessor = this;\n }\n\n this.tabIndex = parseInt(tabIndex) || 0;\n this._placeholderOptions = placeholderOptions ? placeholderOptions : {};\n this.floatPlaceholder = this._placeholderOptions.float || 'auto';\n }\n/**\n * @return {?}\n */\nngOnInit() {\n this._selectionModel = new SelectionModel<MdOption>(this.multiple, undefined, false);\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._initKeyManager();\n\n this._changeSubscription = startWith.call(this.options.changes, null).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._dropSubscriptions();\n this._changeSubscription.unsubscribe();\n this._tabSubscription.unsubscribe();\n }\n/**\n * Toggles the overlay panel open or closed.\n * @return {?}\n */\ntoggle(): void {\n this.panelOpen ? this.close() : this.open();\n }\n/**\n * Opens the overlay panel.\n * @return {?}\n */\nopen(): void {\n if (this.disabled || !this.options.length) {\n return;\n }\n\n if (!this._triggerWidth) {\n this._setTriggerWidth();\n }\n\n this._calculateOverlayPosition();\n this._placeholderState = this._floatPlaceholderState();\n this._panelOpen = true;\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Closes the overlay panel and focuses the host element.\n * @return {?}\n */\nclose(): void {\n if (this._panelOpen) {\n this._panelOpen = false;\n\n if (this._selectionModel.isEmpty()) {\n this._placeholderState = '';\n }\n\n this._changeDetectorRef.markForCheck();\n this.focus();\n }\n }\n/**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n * \n * @param {?} value New value to be written to the model.\n * @return {?}\n */\nwriteValue(value: any): void {\n if (this.options) {\n this._setSelectionByValue(value);\n }\n }\n/**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n * \n * @param {?} fn Callback to be triggered when the value changes.\n * @return {?}\n */\nregisterOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n/**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n * \n * @param {?} fn Callback to be triggered when the component has been touched.\n * @return {?}\n */\nregisterOnTouched(fn: () => {}): void {\n this._onTouched = fn;\n }\n/**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n * \n * @param {?} isDisabled Sets whether the component is disabled.\n * @return {?}\n */\nsetDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Whether or not the overlay panel is open.\n * @return {?}\n */\nget panelOpen(): boolean {\n return this._panelOpen;\n }\n/**\n * The currently selected option.\n * @return {?}\n */\nget selected(): MdOption | MdOption[] {\n return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];\n }\n/**\n * The value displayed in the trigger.\n * @return {?}\n */\nget triggerValue(): string {\n if (!this._selectionModel || this._selectionModel.isEmpty()) {\n return '';\n }\n\n if (this._multiple) {\n const /** @type {?} */ selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n\n if (this._isRtl()) {\n selectedOptions.reverse();\n }\n\n // TODO(crisbeto): delimiter should be configurable for proper localization.\n return selectedOptions.join(', ');\n }\n\n return this._selectionModel.selected[0].viewValue;\n }\n/**\n * Whether the element is in RTL mode.\n * @return {?}\n */\n_isRtl(): boolean {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n/**\n * Sets the width of the trigger element. This is necessary to match\n * the overlay width to the trigger width.\n * @return {?}\n */\nprivate _setTriggerWidth(): void {\n this._triggerWidth = this._platform.isBrowser ? this._getTriggerRect().width :\n SELECT_TRIGGER_MIN_WIDTH;\n\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Handles the keyboard interactions of a closed select.\n * @param {?} event\n * @return {?}\n */\n_handleClosedKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n if (event.keyCode === ENTER || event.keyCode === SPACE) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n } else if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) {\n this._handleArrowKey(event);\n }\n }\n }\n/**\n * Handles keypresses inside the panel.\n * @param {?} event\n * @return {?}\n */\n_handlePanelKeydown(event: KeyboardEvent): void {\n if (event.keyCode === HOME || event.keyCode === END) {\n event.preventDefault();\n event.keyCode === HOME ? this._keyManager.setFirstItemActive() :\n this._keyManager.setLastItemActive();\n } else {\n this._keyManager.onKeydown(event);\n }\n }\n/**\n * When the panel element is finished transforming in (though not fading in), it\n * emits an event and focuses an option if the panel is open.\n * @return {?}\n */\n_onPanelDone(): void {\n if (this.panelOpen) {\n this._focusCorrectOption();\n this.onOpen.emit();\n } else {\n this.onClose.emit();\n this._panelDoneAnimating = false;\n this.overlayDir.offsetX = 0;\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * When the panel content is done fading in, the _panelDoneAnimating property is\n * set so the proper class can be added to the panel.\n * @return {?}\n */\n_onFadeInDone(): void {\n this._panelDoneAnimating = this.panelOpen;\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n * @return {?}\n */\n_onBlur() {\n if (!this.disabled && !this.panelOpen) {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * Callback that is invoked when the overlay panel has been attached.\n * @return {?}\n */\n_onAttached(): void {\n this._calculateOverlayOffsetX();\n this._setScrollTop();\n }\n/**\n * Whether the select has a value.\n * @return {?}\n */\n_hasValue(): boolean {\n return this._selectionModel && this._selectionModel.hasValue();\n }\n/**\n * Whether the select is in an error state.\n * @return {?}\n */\n_isErrorState(): boolean {\n const /** @type {?} */ isInvalid = this._control && this._control.invalid;\n const /** @type {?} */ isTouched = this._control && this._control.touched;\n const /** @type {?} */ isSubmitted = (this._parentFormGroup && this._parentFormGroup.submitted) ||\n (this._parentForm && this._parentForm.submitted);\n\n return !!(isInvalid && (isTouched || isSubmitted));\n }\n/**\n * Sets the scroll position of the scroll container. This must be called after\n * the overlay pane is attached or the scroll container element will not yet be\n * present in the DOM.\n * @return {?}\n */\nprivate _setScrollTop(): void {\n const /** @type {?} */ scrollContainer =\n this.overlayDir.overlayRef.overlayElement.querySelector('.mat-select-panel'); /** @type {?} */((\n scrollContainer)).scrollTop = this._scrollTop;\n }\n/**\n * @return {?}\n */\nprivate _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this._setSelectionByValue(this._control ? this._control.value : this._value);\n });\n }\n/**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n * @param {?} value\n * @param {?=} isUserInput\n * @return {?}\n */\nprivate _setSelectionByValue(value: any | any[], isUserInput = false): void {\n const /** @type {?} */ isArray = Array.isArray(value);\n\n if (this.multiple && value && !isArray) {\n throw getMdSelectNonArrayValueError();\n }\n\n this._clearSelection();\n\n if (isArray) {\n value.forEach((currentValue: any) => this._selectValue(currentValue, isUserInput));\n this._sortValues();\n } else {\n const /** @type {?} */ correspondingOption = this._selectValue(value, isUserInput);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManager.setActiveItem(this.options.toArray().indexOf(correspondingOption));\n }\n }\n\n this._setValueWidth();\n\n if (this._selectionModel.isEmpty()) {\n this._placeholderState = '';\n }\n\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Finds and selects and option based on its value.\n * @param {?} value\n * @param {?=} isUserInput\n * @return {?} Option that has the corresponding value.\n */\nprivate _selectValue(value: any, isUserInput = false): MdOption | undefined {\n const /** @type {?} */ correspondingOption = this.options.find((option: MdOption) => {\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n } catch ( /** @type {?} */error) {\n if (isDevMode()) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n\n if (correspondingOption) {\n isUserInput ? correspondingOption._selectViaInteraction() : correspondingOption.select();\n this._selectionModel.select(correspondingOption);\n }\n\n return correspondingOption;\n }\n/**\n * Clears the select trigger and deselects every option in the list.\n * @param {?=} skip Option that should not be deselected.\n * @return {?}\n */\nprivate _clearSelection(skip?: MdOption): void {\n this._selectionModel.clear();\n this.options.forEach(option => {\n if (option !== skip) {\n option.deselect();\n }\n });\n }\n/**\n * @return {?}\n */\nprivate _getTriggerRect(): ClientRect {\n return this.trigger.nativeElement.getBoundingClientRect();\n }\n/**\n * Sets up a key manager to listen to keyboard events on the overlay panel.\n * @return {?}\n */\nprivate _initKeyManager() {\n this._keyManager = new FocusKeyManager<MdOption>(this.options).withTypeAhead();\n this._tabSubscription = this._keyManager.tabOut.subscribe(() => this.close());\n }\n/**\n * Drops current option subscriptions and IDs and resets from scratch.\n * @return {?}\n */\nprivate _resetOptions(): void {\n this._dropSubscriptions();\n this._listenToOptions();\n this._setOptionIds();\n this._setOptionMultiple();\n this._setOptionDisableRipple();\n }\n/**\n * Listens to user-generated selection events on each option.\n * @return {?}\n */\nprivate _listenToOptions(): void {\n this._optionSubscription = filter.call(this.optionSelectionChanges,\n event => event.isUserInput).subscribe(event => {\n this._onSelect(event.source);\n this._setValueWidth();\n\n if (!this.multiple) {\n this.close();\n }\n });\n }\n/**\n * Invoked when an option is clicked.\n * @param {?} option\n * @return {?}\n */\nprivate _onSelect(option: MdOption): void {\n const /** @type {?} */ wasSelected = this._selectionModel.isSelected(option);\n\n // TODO(crisbeto): handle blank/null options inside multi-select.\n if (this.multiple) {\n this._selectionModel.toggle(option);\n wasSelected ? option.deselect() : option.select();\n this._sortValues();\n } else {\n this._clearSelection(option.value == null ? undefined : option);\n\n if (option.value == null) {\n this._propagateChanges(option.value);\n } else {\n this._selectionModel.select(option);\n }\n }\n\n if (wasSelected !== this._selectionModel.isSelected(option)) {\n this._propagateChanges();\n }\n }\n/**\n * Sorts the model values, ensuring that they keep the same\n * order that they have in the panel.\n * @return {?}\n */\nprivate _sortValues(): void {\n if (this._multiple) {\n this._selectionModel.clear();\n\n this.options.forEach(option => {\n if (option.selected) {\n this._selectionModel.select(option);\n }\n });\n }\n }\n/**\n * Unsubscribes from all option subscriptions.\n * @return {?}\n */\nprivate _dropSubscriptions(): void {\n this._optionSubscription.unsubscribe();\n }\n/**\n * Emits change event to set the model value.\n * @param {?=} fallbackValue\n * @return {?}\n */\nprivate _propagateChanges(fallbackValue?: any): void {\n let /** @type {?} */ valueToEmit: any = null;\n\n if (Array.isArray(this.selected)) {\n valueToEmit = this.selected.map(option => option.value);\n } else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n\n this._value = valueToEmit;\n this._onChange(valueToEmit);\n this.change.emit(new MdSelectChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n }\n/**\n * Records option IDs to pass to the aria-owns property.\n * @return {?}\n */\nprivate _setOptionIds() {\n this._optionIds = this.options.map(option => option.id).join(' ');\n }\n/**\n * Sets the `multiple` property on each option. The promise is necessary\n * in order to avoid Angular errors when modifying the property after init.\n * @return {?}\n */\nprivate _setOptionMultiple() {\n if (this.multiple) {\n Promise.resolve(null).then(() => {\n this.options.forEach(option => option.multiple = this.multiple);\n });\n }\n }\n/**\n * Sets the `disableRipple` property on each option.\n * @return {?}\n */\nprivate _setOptionDisableRipple() {\n if (this.options) {\n this.options.forEach(option => option.disableRipple = this.disableRipple);\n }\n }\n/**\n * Must set the width of the selected option's value programmatically\n * because it is absolutely positioned and otherwise will not clip\n * overflow. The selection arrow is 9px wide, add 4px of padding = 13\n * @return {?}\n */\nprivate _setValueWidth() {\n this._selectedValueWidth = this._triggerWidth - 13;\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Focuses the selected item. If no option is selected, it will focus\n * the first item instead.\n * @return {?}\n */\nprivate _focusCorrectOption(): void {\n if (this._selectionModel.isEmpty()) {\n this._keyManager.setFirstItemActive();\n } else {\n this._keyManager.setActiveItem( /** @type {?} */((this._getOptionIndex(this._selectionModel.selected[0]))));\n }\n }\n/**\n * Focuses the select element.\n * @return {?}\n */\nfocus(): void {\n this._elementRef.nativeElement.focus();\n }\n/**\n * Gets the index of the provided option in the option list.\n * @param {?} option\n * @return {?}\n */\nprivate _getOptionIndex(option: MdOption): number | undefined {\n return this.options.reduce((result: number, current: MdOption, index: number) => {\n return result === undefined ? (option === current ? index : undefined) : result;\n }, undefined);\n }\n/**\n * Calculates the scroll position and x- and y-offsets of the overlay panel.\n * @return {?}\n */\nprivate _calculateOverlayPosition(): void {\n const /** @type {?} */ items = this._getItemCount();\n const /** @type {?} */ panelHeight = Math.min(items * SELECT_ITEM_HEIGHT, SELECT_PANEL_MAX_HEIGHT);\n const /** @type {?} */ scrollContainerHeight = items * SELECT_ITEM_HEIGHT;\n\n // The farthest the panel can be scrolled before it hits the bottom\n const /** @type {?} */ maxScroll = scrollContainerHeight - panelHeight;\n\n if (this._hasValue()) {\n let /** @type {?} */ selectedOptionOffset = /** @type {?} */(( this._getOptionIndex(this._selectionModel.selected[0])));\n\n selectedOptionOffset += MdOption.countGroupLabelsBeforeOption(selectedOptionOffset,\n this.options, this.optionGroups);\n\n // We must maintain a scroll buffer so the selected option will be scrolled to the\n // center of the overlay panel rather than the top.\n const /** @type {?} */ scrollBuffer = panelHeight / 2;\n this._scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);\n this._offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);\n } else {\n // If no option is selected, the panel centers on the first option. In this case,\n // we must only adjust for the height difference between the option element\n // and the trigger element, then multiply it by -1 to ensure the panel moves\n // in the correct direction up the page.\n let /** @type {?} */ groupLabels = MdOption.countGroupLabelsBeforeOption(0, this.options, this.optionGroups);\n\n this._offsetY = (SELECT_ITEM_HEIGHT - SELECT_TRIGGER_HEIGHT) / 2 * -1 -\n (groupLabels * SELECT_ITEM_HEIGHT);\n }\n\n this._checkOverlayWithinViewport(maxScroll);\n }\n/**\n * Calculates the scroll position of the select's overlay panel.\n * \n * Attempts to center the selected option in the panel. If the option is\n * too high or too low in the panel to be scrolled to the center, it clamps the\n * scroll position to the min or max scroll positions respectively.\n * @param {?} selectedIndex\n * @param {?} scrollBuffer\n * @param {?} maxScroll\n * @return {?}\n */\n_calculateOverlayScroll(selectedIndex: number, scrollBuffer: number,\n maxScroll: number): number {\n const /** @type {?} */ optionOffsetFromScrollTop = SELECT_ITEM_HEIGHT * selectedIndex;\n const /** @type {?} */ halfOptionHeight = SELECT_ITEM_HEIGHT / 2;\n\n // Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the\n // scroll container, then subtracts the scroll buffer to scroll the option down to\n // the center of the overlay panel. Half the option height must be re-added to the\n // scrollTop so the option is centered based on its middle, not its top edge.\n const /** @type {?} */ optimalScrollPosition = optionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;\n return clampValue(0, optimalScrollPosition, maxScroll);\n }\n/**\n * Figures out the appropriate animation state for the placeholder.\n * @return {?}\n */\n_getPlaceholderAnimationState(): string {\n if (this.floatPlaceholder === 'never') {\n return '';\n }\n\n if (this.floatPlaceholder === 'always') {\n return this._floatPlaceholderState();\n }\n\n return this._placeholderState;\n }\n/**\n * Determines the CSS `opacity` of the placeholder element.\n * @return {?}\n */\n_getPlaceholderOpacity(): string {\n return (this.floatPlaceholder !== 'never' || this._selectionModel.isEmpty()) ? '1' : '0';\n }\n/**\n * Returns the aria-label of the select component.\n * @return {?}\n */\nget _ariaLabel(): string | null {\n // If an ariaLabelledby value has been set, the select should not overwrite the\n // `aria-labelledby` value by setting the ariaLabel to the placeholder.\n return this.ariaLabelledby ? null : this.ariaLabel || this.placeholder;\n }\n/**\n * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text when\n * the panel opens. Will change based on LTR or RTL text direction. Note that the offset\n * can't be calculated until the panel has been attached, because we need to know the\n * content width in order to constrain the panel within the viewport.\n * @return {?}\n */\nprivate _calculateOverlayOffsetX(): void {\n const /** @type {?} */ overlayRect = this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();\n const /** @type {?} */ viewportRect = this._viewportRuler.getViewportRect();\n const /** @type {?} */ isRtl = this._isRtl();\n const /** @type {?} */ paddingWidth = this.multiple ? SELECT_MULTIPLE_PANEL_PADDING_X + SELECT_PANEL_PADDING_X :\n SELECT_PANEL_PADDING_X * 2;\n let /** @type {?} */ offsetX: number;\n\n // Adjust the offset, depending on the option padding.\n if (this.multiple) {\n offsetX = SELECT_MULTIPLE_PANEL_PADDING_X;\n } else {\n let /** @type {?} */ selected = this._selectionModel.selected[0] || this.options.first;\n offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;\n }\n\n // Invert the offset in LTR.\n if (!isRtl) {\n offsetX *= -1;\n }\n\n // Determine how much the select overflows on each side.\n const /** @type {?} */ leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));\n const /** @type {?} */ rightOverflow = overlayRect.right + offsetX - viewportRect.width\n + (isRtl ? 0 : paddingWidth);\n\n // If the element overflows on either side, reduce the offset to allow it to fit.\n if (leftOverflow > 0) {\n offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;\n } else if (rightOverflow > 0) {\n offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;\n }\n\n // Set the offset directly in order to avoid having to go through change detection and\n // potentially triggering \"changed after it was checked\" errors.\n this.overlayDir.offsetX = offsetX;\n this.overlayDir.overlayRef.updatePosition();\n }\n/**\n * Calculates the y-offset of the select's overlay panel in relation to the\n * top start corner of the trigger. It has to be adjusted in order for the\n * selected option to be aligned over the trigger when the panel opens.\n * @param {?} selectedIndex\n * @param {?} scrollBuffer\n * @param {?} maxScroll\n * @return {?}\n */\nprivate _calculateOverlayOffsetY(selectedIndex: number, scrollBuffer: number,\n maxScroll: number): number {\n let /** @type {?} */ optionOffsetFromPanelTop: number;\n\n if (this._scrollTop === 0) {\n optionOffsetFromPanelTop = selectedIndex * SELECT_ITEM_HEIGHT;\n } else if (this._scrollTop === maxScroll) {\n const /** @type {?} */ firstDisplayedIndex = this._getItemCount() - SELECT_MAX_OPTIONS_DISPLAYED;\n const /** @type {?} */ selectedDisplayIndex = selectedIndex - firstDisplayedIndex;\n\n // Because the panel height is longer than the height of the options alone,\n // there is always extra padding at the top or bottom of the panel. When\n // scrolled to the very bottom, this padding is at the top of the panel and\n // must be added to the offset.\n optionOffsetFromPanelTop =\n selectedDisplayIndex * SELECT_ITEM_HEIGHT + SELECT_PANEL_PADDING_Y;\n } else {\n // If the option was scrolled to the middle of the panel using a scroll buffer,\n // its offset will be the scroll buffer minus the half height that was added to\n // center it.\n optionOffsetFromPanelTop = scrollBuffer - SELECT_ITEM_HEIGHT / 2;\n }\n\n // The final offset is the option's offset from the top, adjusted for the height\n // difference, multiplied by -1 to ensure that the overlay moves in the correct\n // direction up the page.\n return optionOffsetFromPanelTop * -1 - SELECT_OPTION_HEIGHT_ADJUSTMENT;\n }\n/**\n * Checks that the attempted overlay position will fit within the viewport.\n * If it will not fit, tries to adjust the scroll position and the associated\n * y-offset so the panel can open fully on-screen. If it still won't fit,\n * sets the offset back to 0 to allow the fallback position to take over.\n * @param {?} maxScroll\n * @return {?}\n */\nprivate _checkOverlayWithinViewport(maxScroll: number): void {\n const /** @type {?} */ viewportRect = this._viewportRuler.getViewportRect();\n const /** @type {?} */ triggerRect = this._getTriggerRect();\n\n const /** @type {?} */ topSpaceAvailable = triggerRect.top - SELECT_PANEL_VIEWPORT_PADDING;\n const /** @type {?} */ bottomSpaceAvailable =\n viewportRect.height - triggerRect.bottom - SELECT_PANEL_VIEWPORT_PADDING;\n\n const /** @type {?} */ panelHeightTop = Math.abs(this._offsetY);\n const /** @type {?} */ totalPanelHeight =\n Math.min(this._getItemCount() * SELECT_ITEM_HEIGHT, SELECT_PANEL_MAX_HEIGHT);\n const /** @type {?} */ panelHeightBottom = totalPanelHeight - panelHeightTop - triggerRect.height;\n\n if (panelHeightBottom > bottomSpaceAvailable) {\n this._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);\n } else if (panelHeightTop > topSpaceAvailable) {\n this._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);\n } else {\n this._transformOrigin = this._getOriginBasedOnOption();\n }\n }\n/**\n * Adjusts the overlay panel up to fit in the viewport.\n * @param {?} panelHeightBottom\n * @param {?} bottomSpaceAvailable\n * @return {?}\n */\nprivate _adjustPanelUp(panelHeightBottom: number, bottomSpaceAvailable: number) {\n const /** @type {?} */ distanceBelowViewport = panelHeightBottom - bottomSpaceAvailable;\n\n // Scrolls the panel up by the distance it was extending past the boundary, then\n // adjusts the offset by that amount to move the panel up into the viewport.\n this._scrollTop -= distanceBelowViewport;\n this._offsetY -= distanceBelowViewport;\n this._transformOrigin = this._getOriginBasedOnOption();\n\n // If the panel is scrolled to the very top, it won't be able to fit the panel\n // by scrolling, so set the offset to 0 to allow the fallback position to take\n // effect.\n if (this._scrollTop <= 0) {\n this._scrollTop = 0;\n this._offsetY = 0;\n this._transformOrigin = `50% bottom 0px`;\n }\n }\n/**\n * Adjusts the overlay panel down to fit in the viewport.\n * @param {?} panelHeightTop\n * @param {?} topSpaceAvailable\n * @param {?} maxScroll\n * @return {?}\n */\nprivate _adjustPanelDown(panelHeightTop: number, topSpaceAvailable: number,\n maxScroll: number) {\n const /** @type {?} */ distanceAboveViewport = panelHeightTop - topSpaceAvailable;\n\n // Scrolls the panel down by the distance it was extending past the boundary, then\n // adjusts the offset by that amount to move the panel down into the viewport.\n this._scrollTop += distanceAboveViewport;\n this._offsetY += distanceAboveViewport;\n this._transformOrigin = this._getOriginBasedOnOption();\n\n // If the panel is scrolled to the very bottom, it won't be able to fit the\n // panel by scrolling, so set the offset to 0 to allow the fallback position\n // to take effect.\n if (this._scrollTop >= maxScroll) {\n this._scrollTop = maxScroll;\n this._offsetY = 0;\n this._transformOrigin = `50% top 0px`;\n return;\n }\n }\n/**\n * Sets the transform origin point based on the selected option.\n * @return {?}\n */\nprivate _getOriginBasedOnOption(): string {\n const /** @type {?} */ originY =\n Math.abs(this._offsetY) - SELECT_OPTION_HEIGHT_ADJUSTMENT + SELECT_ITEM_HEIGHT / 2;\n return `50% ${originY}px 0px`;\n }\n/**\n * Figures out the floating placeholder state value.\n * @return {?}\n */\nprivate _floatPlaceholderState(): string {\n return this._isRtl() ? 'floating-rtl' : 'floating-ltr';\n }\n/**\n * Handles the user pressing the arrow keys on a closed select.\n * @param {?} event\n * @return {?}\n */\nprivate _handleArrowKey(event: KeyboardEvent): void {\n if (this._multiple) {\n event.preventDefault();\n this.open();\n } else {\n const /** @type {?} */ prevActiveItem = this._keyManager.activeItem;\n\n // Cycle though the select options even when the select is closed,\n // matching the behavior of the native select element.\n // TODO(crisbeto): native selects also cycle through the options with left/right arrows,\n // however the key manager only supports up/down at the moment.\n this._keyManager.onKeydown(event);\n\n const /** @type {?} */ currentActiveItem = /** @type {?} */(( this._keyManager.activeItem as MdOption));\n\n if (currentActiveItem !== prevActiveItem) {\n this._clearSelection();\n this._setSelectionByValue(currentActiveItem.value, true);\n this._propagateChanges();\n }\n }\n }\n/**\n * Calculates the amount of items in the select. This includes options and group labels.\n * @return {?}\n */\nprivate _getItemCount(): number {\n return this.options.length + this.optionGroups.length;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-select, mat-select',\n templateUrl: 'select.html',\n styleUrls: ['select.css'],\n inputs: ['color', 'disabled', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'listbox',\n '[attr.tabindex]': 'tabIndex',\n '[attr.aria-label]': '_ariaLabel',\n '[attr.aria-labelledby]': 'ariaLabelledby',\n '[attr.aria-required]': 'required.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': '_isErrorState()',\n '[attr.aria-owns]': '_optionIds',\n '[attr.aria-multiselectable]': 'multiple',\n '[class.mat-select-disabled]': 'disabled',\n '[class.mat-select-invalid]': '_isErrorState()',\n '[class.mat-select-required]': 'required',\n 'class': 'mat-select',\n '(keydown)': '_handleClosedKeydown($event)',\n '(blur)': '_onBlur()',\n },\n animations: [\n transformPlaceholder,\n transformPanel,\n fadeInContent\n ],\n exportAs: 'mdSelect, matSelect',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ViewportRuler, },\n{type: ChangeDetectorRef, },\n{type: Platform, },\n{type: Renderer2, },\n{type: ElementRef, },\n{type: Directionality, decorators: [{ type: Optional }, ]},\n{type: NgForm, decorators: [{ type: Optional }, ]},\n{type: FormGroupDirective, decorators: [{ type: Optional }, ]},\n{type: NgControl, decorators: [{ type: Self }, { type: Optional }, ]},\n{type: undefined, decorators: [{ type: Attribute, args: ['tabindex', ] }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_PLACEHOLDER_GLOBAL_OPTIONS, ] }, ]},\n{type: undefined, decorators: [{ type: Inject, args: [MD_SELECT_SCROLL_STRATEGY, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'trigger': [{ type: ViewChild, args: ['trigger', ] },],\n'overlayDir': [{ type: ViewChild, args: [ConnectedOverlayDirective, ] },],\n'options': [{ type: ContentChildren, args: [MdOption, { descendants: true }, ] },],\n'optionGroups': [{ type: ContentChildren, args: [MdOptgroup, ] },],\n'panelClass': [{ type: Input },],\n'customTrigger': [{ type: ContentChild, args: [MdSelectTrigger, ] },],\n'placeholder': [{ type: Input },],\n'required': [{ type: Input },],\n'multiple': [{ type: Input },],\n'compareWith': [{ type: Input },],\n'floatPlaceholder': [{ type: Input },],\n'value': [{ type: Input },],\n'disableRipple': [{ type: Input },],\n'ariaLabel': [{ type: Input, args: ['aria-label', ] },],\n'ariaLabelledby': [{ type: Input, args: ['aria-labelledby', ] },],\n'onOpen': [{ type: Output },],\n'onClose': [{ type: Output },],\n'change': [{ type: Output },],\n'valueChange': [{ type: Output },],\n};\n}\n\nfunction MdSelect_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSelect.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSelect.ctorParameters;\n/** @type {?} */\nMdSelect.propDecorators;\n/**\n * Whether or not the overlay panel is open.\n * @type {?}\n */\nMdSelect.prototype._panelOpen;\n/**\n * Subscriptions to option events.\n * @type {?}\n */\nMdSelect.prototype._optionSubscription;\n/**\n * Subscription to changes in the option list.\n * @type {?}\n */\nMdSelect.prototype._changeSubscription;\n/**\n * Subscription to tab events while overlay is focused.\n * @type {?}\n */\nMdSelect.prototype._tabSubscription;\n/**\n * Whether filling out the select is required in the form.\n * @type {?}\n */\nMdSelect.prototype._required;\n/**\n * The scroll position of the overlay panel, calculated to center the selected option.\n * @type {?}\n */\nMdSelect.prototype._scrollTop;\n/**\n * The placeholder displayed in the trigger of the select.\n * @type {?}\n */\nMdSelect.prototype._placeholder;\n/**\n * Whether the component is in multiple selection mode.\n * @type {?}\n */\nMdSelect.prototype._multiple;\n/**\n * Comparison function to specify which option is displayed. Defaults to object equality.\n * @type {?}\n */\nMdSelect.prototype._compareWith;\n/**\n * Deals with the selection logic.\n * @type {?}\n */\nMdSelect.prototype._selectionModel;\n/**\n * The animation state of the placeholder.\n * @type {?}\n */\nMdSelect.prototype._placeholderState;\n/**\n * Deals with configuring placeholder options\n * @type {?}\n */\nMdSelect.prototype._placeholderOptions;\n/**\n * The width of the trigger. Must be saved to set the min width of the overlay panel\n * and the width of the selected value.\n * @type {?}\n */\nMdSelect.prototype._triggerWidth;\n/**\n * Manages keyboard events for options in the panel.\n * @type {?}\n */\nMdSelect.prototype._keyManager;\n/**\n * The width of the selected option's value. Must be set programmatically\n * to ensure its overflow is clipped, as it's absolutely positioned.\n * @type {?}\n */\nMdSelect.prototype._selectedValueWidth;\n/**\n * View -> model callback called when value changes\n * @type {?}\n */\nMdSelect.prototype._onChange;\n/**\n * View -> model callback called when select has been touched\n * @type {?}\n */\nMdSelect.prototype._onTouched;\n/**\n * The IDs of child options to be passed to the aria-owns attribute.\n * @type {?}\n */\nMdSelect.prototype._optionIds;\n/**\n * The value of the select panel's transform-origin property.\n * @type {?}\n */\nMdSelect.prototype._transformOrigin;\n/**\n * Whether the panel's animation is done.\n * @type {?}\n */\nMdSelect.prototype._panelDoneAnimating;\n/**\n * Strategy that will be used to handle scrolling while the select panel is open.\n * @type {?}\n */\nMdSelect.prototype._scrollStrategy;\n/**\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text.\n * when the panel opens. Will change based on the y-position of the selected option.\n * @type {?}\n */\nMdSelect.prototype._offsetY;\n/**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n * @type {?}\n */\nMdSelect.prototype._positions;\n/**\n * Trigger that opens the select.\n * @type {?}\n */\nMdSelect.prototype.trigger;\n/**\n * Overlay pane containing the options.\n * @type {?}\n */\nMdSelect.prototype.overlayDir;\n/**\n * All of the defined select options.\n * @type {?}\n */\nMdSelect.prototype.options;\n/**\n * All of the defined groups of options.\n * @type {?}\n */\nMdSelect.prototype.optionGroups;\n/**\n * Classes to be passed to the select panel. Supports the same syntax as `ngClass`.\n * @type {?}\n */\nMdSelect.prototype.panelClass;\n/**\n * User-supplied override of the trigger element.\n * @type {?}\n */\nMdSelect.prototype.customTrigger;\n/** @type {?} */\nMdSelect.prototype._floatPlaceholder;\n/** @type {?} */\nMdSelect.prototype._value;\n/** @type {?} */\nMdSelect.prototype._disableRipple;\n/**\n * Aria label of the select. If not specified, the placeholder will be used as label.\n * @type {?}\n */\nMdSelect.prototype.ariaLabel;\n/**\n * Input that can be used to specify the `aria-labelledby` attribute.\n * @type {?}\n */\nMdSelect.prototype.ariaLabelledby;\n/**\n * Event emitted when the select has been opened.\n * @type {?}\n */\nMdSelect.prototype.onOpen;\n/**\n * Event emitted when the select has been closed.\n * @type {?}\n */\nMdSelect.prototype.onClose;\n/**\n * Event emitted when the selected value has been changed by the user.\n * @type {?}\n */\nMdSelect.prototype.change;\n/**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * \\@docs-private\n * @type {?}\n */\nMdSelect.prototype.valueChange;\n/** @type {?} */\nMdSelect.prototype._viewportRuler;\n/** @type {?} */\nMdSelect.prototype._changeDetectorRef;\n/** @type {?} */\nMdSelect.prototype._platform;\n/** @type {?} */\nMdSelect.prototype._dir;\n/** @type {?} */\nMdSelect.prototype._parentForm;\n/** @type {?} */\nMdSelect.prototype._parentFormGroup;\n/** @type {?} */\nMdSelect.prototype._control;\n/** @type {?} */\nMdSelect.prototype._scrollStrategyFactory;\n}\n\n/**\n * Clamps a value n between min and max values.\n * @param {?} min\n * @param {?} n\n * @param {?} max\n * @return {?}\n */\nfunction clampValue(min: number, n: number, max: number): number {\n return Math.min(Math.max(min, n), max);\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MdSelect, MdSelectTrigger, MD_SELECT_SCROLL_STRATEGY_PROVIDER} from './select';\nimport {MdCommonModule, MdOptionModule} from '@angular/material/core';\nimport {OverlayModule} from '@angular/cdk/overlay';\nexport class MdSelectModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n CommonModule,\n OverlayModule,\n MdOptionModule,\n MdCommonModule,\n ],\n exports: [MdSelect, MdSelectTrigger, MdOptionModule, MdCommonModule],\n declarations: [MdSelect, MdSelectTrigger],\n providers: [MD_SELECT_SCROLL_STRATEGY_PROVIDER]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSelectModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSelectModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSelectModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {fadeInContent,transformPanel,transformPlaceholder,MdSelectModule,SELECT_ITEM_HEIGHT,SELECT_PANEL_MAX_HEIGHT,SELECT_MAX_OPTIONS_DISPLAYED,SELECT_TRIGGER_HEIGHT,SELECT_OPTION_HEIGHT_ADJUSTMENT,SELECT_PANEL_PADDING_X,SELECT_PANEL_INDENT_PADDING_X,SELECT_MULTIPLE_PANEL_PADDING_X,SELECT_PANEL_PADDING_Y,SELECT_PANEL_VIEWPORT_PADDING,MD_SELECT_SCROLL_STRATEGY,MD_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY,MD_SELECT_SCROLL_STRATEGY_PROVIDER,MdSelectChange,MdSelectBase,_MdSelectMixinBase,MdSelectTrigger,MdSelect,MAT_SELECT_SCROLL_STRATEGY,MAT_SELECT_SCROLL_STRATEGY_PROVIDER,MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY,MatSelect,MatSelectBase,MatSelectChange,MatSelectModule,MatSelectTrigger} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {animate, AnimationEvent, state, style, transition, trigger} from '@angular/animations';\nimport {AriaDescriber} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE} from '@angular/cdk/keycodes';\nimport {\n OriginConnectionPosition,\n Overlay,\n OverlayConnectionPosition,\n OverlayRef,\n OverlayConfig,\n RepositionScrollStrategy,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {Platform} from '@angular/cdk/platform';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {first} from '@angular/cdk/rxjs';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Renderer2,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {Subject} from 'rxjs/Subject';\n\n\nexport type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\n/**\n * Time in ms to delay before changing the tooltip visibility to hidden\n */\nexport const TOUCHEND_HIDE_DELAY = 1500;\n/**\n * Time in ms to throttle repositioning after scroll events.\n */\nexport const SCROLL_THROTTLE_MS = 20;\n/**\n * CSS class that will be attached to the overlay panel.\n */\nexport const TOOLTIP_PANEL_CLASS = 'mat-tooltip-panel';\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @param {?} position\n * @return {?}\n */\nexport function getMdTooltipInvalidPositionError(position: string) {\n return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n/**\n * Injection token that determines the scroll handling while a tooltip is visible.\n */\nexport const MD_TOOLTIP_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('md-tooltip-scroll-strategy');\n/**\n * \\@docs-private\n * @param {?} overlay\n * @return {?}\n */\nexport function MD_TOOLTIP_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n () => RepositionScrollStrategy {\n return () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS });\n}\n/**\n * \\@docs-private\n */\nexport const MD_TOOLTIP_SCROLL_STRATEGY_PROVIDER = {\n provide: MD_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MD_TOOLTIP_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n/**\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n * \n * https://material.google.com/components/tooltips.html\n */\nexport class MdTooltip implements OnDestroy {\n _overlayRef: OverlayRef | null;\n _tooltipInstance: TooltipComponent | null;\nprivate _position: TooltipPosition = 'below';\nprivate _disabled: boolean = false;\nprivate _tooltipClass: string|string[]|Set<string>|{[key: string]: any};\n/**\n * Allows the user to define the position of the tooltip relative to the parent element\n * @return {?}\n */\nget position(): TooltipPosition { return this._position; }\n/**\n * @param {?} value\n * @return {?}\n */\nset position(value: TooltipPosition) {\n if (value !== this._position) {\n this._position = value;\n\n // TODO(andrewjs): When the overlay's position can be dynamically changed, do not destroy\n // the tooltip.\n if (this._tooltipInstance) {\n this._disposeTooltip();\n }\n }\n }\n/**\n * Disables the display of the tooltip.\n * @return {?}\n */\nget disabled(): boolean { return this._disabled; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n\n // If tooltip is disabled, hide immediately.\n if (this._disabled) {\n this.hide(0);\n }\n }\n/**\n * @deprecated\n * @return {?}\n */\nget _positionDeprecated(): TooltipPosition { return this._position; }\n/**\n * @param {?} value\n * @return {?}\n */\nset _positionDeprecated(value: TooltipPosition) { this._position = value; }\n/**\n * The default delay in ms before showing the tooltip after show is called\n */\nshowDelay = 0;\n/**\n * The default delay in ms before hiding the tooltip after hide is called\n */\nhideDelay = 0;\nprivate _message = '';\n/**\n * The message to be displayed in the tooltip\n * @return {?}\n */\nget message() { return this._message; }\n/**\n * @param {?} value\n * @return {?}\n */\nset message(value: string) {\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message);\n\n // If the message is not a string (e.g. number), convert it to a string and trim it.\n this._message = value != null ? `${value}`.trim() : '';\n this._updateTooltipMessage();\n this._ariaDescriber.describe(this._elementRef.nativeElement, this.message);\n }\n/**\n * Classes to be passed to the tooltip. Supports the same syntax as `ngClass`.\n * @return {?}\n */\nget tooltipClass() { return this._tooltipClass; }\n/**\n * @param {?} value\n * @return {?}\n */\nset tooltipClass(value: string|string[]|Set<string>|{[key: string]: any}) {\n this._tooltipClass = value;\n if (this._tooltipInstance) {\n this._setTooltipClass(this._tooltipClass);\n }\n }\n/**\n * @deprecated\n * @return {?}\n */\nget _deprecatedMessage(): string { return this.message; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _deprecatedMessage(v: string) { this.message = v; }\n/**\n * @return {?}\n */\nget _matMessage() { return this.message; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matMessage(v) { this.message = v; }\n/**\n * @return {?}\n */\nget _matPosition() { return this.position; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matPosition(v) { this.position = v; }\n/**\n * @return {?}\n */\nget _matDisabled() { return this.disabled; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matDisabled(v) { this.disabled = v; }\n/**\n * @return {?}\n */\nget _matHideDelay() { return this.hideDelay; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matHideDelay(v) { this.hideDelay = v; }\n/**\n * @return {?}\n */\nget _matShowDelay() { return this.showDelay; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matShowDelay(v) { this.showDelay = v; }\n/**\n * @return {?}\n */\nget _matClass() { return this.tooltipClass; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matClass(v) { this.tooltipClass = v; }\nprivate _enterListener: Function;\nprivate _leaveListener: Function;\n/**\n * @param {?} renderer\n * @param {?} _overlay\n * @param {?} _elementRef\n * @param {?} _scrollDispatcher\n * @param {?} _viewContainerRef\n * @param {?} _ngZone\n * @param {?} _platform\n * @param {?} _ariaDescriber\n * @param {?} _scrollStrategy\n * @param {?} _dir\n */\nconstructor(\n renderer: Renderer2,\nprivate _overlay: Overlay,\nprivate _elementRef: ElementRef,\nprivate _scrollDispatcher: ScrollDispatcher,\nprivate _viewContainerRef: ViewContainerRef,\nprivate _ngZone: NgZone,\nprivate _platform: Platform,\nprivate _ariaDescriber: AriaDescriber,\nprivate _scrollStrategy,\nprivate _dir: Directionality) {\n\n // The mouse events shouldn't be bound on iOS devices, because\n // they can prevent the first tap from firing its click event.\n if (!_platform.IOS) {\n this._enterListener =\n renderer.listen(_elementRef.nativeElement, 'mouseenter', () => this.show());\n this._leaveListener =\n renderer.listen(_elementRef.nativeElement, 'mouseleave', () => this.hide());\n }\n }\n/**\n * Dispose the tooltip when destroyed.\n * @return {?}\n */\nngOnDestroy() {\n if (this._tooltipInstance) {\n this._disposeTooltip();\n }\n // Clean up the event listeners set in the constructor\n if (!this._platform.IOS) {\n this._enterListener();\n this._leaveListener();\n }\n\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.message);\n }\n/**\n * Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input\n * @param {?=} delay\n * @return {?}\n */\nshow(delay: number = this.showDelay): void {\n if (this.disabled || !this.message) { return; }\n\n if (!this._tooltipInstance) {\n this._createTooltip();\n }\n\n this._setTooltipClass(this._tooltipClass);\n this._updateTooltipMessage(); /** @type {?} */((\n this._tooltipInstance)).show(this._position, delay);\n }\n/**\n * Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input\n * @param {?=} delay\n * @return {?}\n */\nhide(delay: number = this.hideDelay): void {\n if (this._tooltipInstance) {\n this._tooltipInstance.hide(delay);\n }\n }\n/**\n * Shows/hides the tooltip\n * @return {?}\n */\ntoggle(): void {\n this._isTooltipVisible() ? this.hide() : this.show();\n }\n/**\n * Returns true if the tooltip is currently visible to the user\n * @return {?}\n */\n_isTooltipVisible(): boolean {\n return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n }\n/**\n * Handles the keydown events on the host element.\n * @param {?} e\n * @return {?}\n */\n_handleKeydown(e: KeyboardEvent) {\n if (this._isTooltipVisible() && e.keyCode === ESCAPE) {\n e.stopPropagation();\n this.hide(0);\n }\n }\n/**\n * Create the tooltip to display\n * @return {?}\n */\nprivate _createTooltip(): void {\n let /** @type {?} */ overlayRef = this._createOverlay();\n let /** @type {?} */ portal = new ComponentPortal(TooltipComponent, this._viewContainerRef);\n\n this._tooltipInstance = overlayRef.attach(portal).instance; /** @type {?} */((\n\n // Dispose the overlay when finished the shown tooltip.\n this._tooltipInstance)).afterHidden().subscribe(() => {\n // Check first if the tooltip has already been removed through this components destroy.\n if (this._tooltipInstance) {\n this._disposeTooltip();\n }\n });\n }\n/**\n * Create the overlay config and position strategy\n * @return {?}\n */\nprivate _createOverlay(): OverlayRef {\n const /** @type {?} */ origin = this._getOrigin();\n const /** @type {?} */ position = this._getOverlayPosition();\n\n // Create connected position strategy that listens for scroll events to reposition.\n // After position changes occur and the overlay is clipped by a parent scrollable then\n // close the tooltip.\n const /** @type {?} */ strategy = this._overlay.position().connectedTo(this._elementRef, origin, position);\n strategy.withScrollableContainers(this._scrollDispatcher.getScrollContainers(this._elementRef));\n strategy.onPositionChange.subscribe(change => {\n if (change.scrollableViewProperties.isOverlayClipped &&\n this._tooltipInstance && this._tooltipInstance.isVisible()) {\n this.hide(0);\n }\n });\n\n const /** @type {?} */ config = new OverlayConfig({\n direction: this._dir ? this._dir.value : 'ltr',\n positionStrategy: strategy,\n panelClass: TOOLTIP_PANEL_CLASS,\n scrollStrategy: this._scrollStrategy()\n });\n\n this._overlayRef = this._overlay.create(config);\n\n return this._overlayRef;\n }\n/**\n * Disposes the current tooltip and the overlay it is attached to\n * @return {?}\n */\nprivate _disposeTooltip(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n\n this._tooltipInstance = null;\n }\n/**\n * Returns the origin position based on the user's position preference\n * @return {?}\n */\n_getOrigin(): OriginConnectionPosition {\n if (this.position == 'above' || this.position == 'below') {\n return {originX: 'center', originY: this.position == 'above' ? 'top' : 'bottom'};\n }\n\n const /** @type {?} */ isDirectionLtr = !this._dir || this._dir.value == 'ltr';\n if (this.position == 'left' ||\n this.position == 'before' && isDirectionLtr ||\n this.position == 'after' && !isDirectionLtr) {\n return {originX: 'start', originY: 'center'};\n }\n\n if (this.position == 'right' ||\n this.position == 'after' && isDirectionLtr ||\n this.position == 'before' && !isDirectionLtr) {\n return {originX: 'end', originY: 'center'};\n }\n\n throw getMdTooltipInvalidPositionError(this.position);\n }\n/**\n * Returns the overlay position based on the user's preference\n * @return {?}\n */\n_getOverlayPosition(): OverlayConnectionPosition {\n if (this.position == 'above') {\n return {overlayX: 'center', overlayY: 'bottom'};\n }\n\n if (this.position == 'below') {\n return {overlayX: 'center', overlayY: 'top'};\n }\n\n const /** @type {?} */ isLtr = !this._dir || this._dir.value == 'ltr';\n if (this.position == 'left' ||\n this.position == 'before' && isLtr ||\n this.position == 'after' && !isLtr) {\n return {overlayX: 'end', overlayY: 'center'};\n }\n\n if (this.position == 'right' ||\n this.position == 'after' && isLtr ||\n this.position == 'before' && !isLtr) {\n return {overlayX: 'start', overlayY: 'center'};\n }\n\n throw getMdTooltipInvalidPositionError(this.position);\n }\n/**\n * Updates the tooltip message and repositions the overlay according to the new message length\n * @return {?}\n */\nprivate _updateTooltipMessage() {\n // Must wait for the message to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the text.\n if (this._tooltipInstance) {\n this._tooltipInstance.message = this.message;\n this._tooltipInstance._markForCheck();\n\n first.call(this._ngZone.onMicrotaskEmpty.asObservable()).subscribe(() => {\n if (this._tooltipInstance) { /** @type {?} */((\n this._overlayRef)).updatePosition();\n }\n });\n }\n }\n/**\n * Updates the tooltip class\n * @param {?} tooltipClass\n * @return {?}\n */\nprivate _setTooltipClass(tooltipClass: string|string[]|Set<string>|{[key: string]: any}) {\n if (this._tooltipInstance) {\n this._tooltipInstance.tooltipClass = tooltipClass;\n this._tooltipInstance._markForCheck();\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-tooltip], [mdTooltip], [mat-tooltip], [matTooltip]',\n host: {\n '(longpress)': 'show()',\n '(focus)': 'show()',\n '(blur)': 'hide(0)',\n '(keydown)': '_handleKeydown($event)',\n '(touchend)': 'hide(' + TOUCHEND_HIDE_DELAY + ')',\n },\n exportAs: 'mdTooltip, matTooltip',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: Overlay, },\n{type: ElementRef, },\n{type: ScrollDispatcher, },\n{type: ViewContainerRef, },\n{type: NgZone, },\n{type: Platform, },\n{type: AriaDescriber, },\n{type: undefined, decorators: [{ type: Inject, args: [MD_TOOLTIP_SCROLL_STRATEGY, ] }, ]},\n{type: Directionality, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'position': [{ type: Input, args: ['mdTooltipPosition', ] },],\n'disabled': [{ type: Input, args: ['mdTooltipDisabled', ] },],\n'_positionDeprecated': [{ type: Input, args: ['tooltip-position', ] },],\n'showDelay': [{ type: Input, args: ['mdTooltipShowDelay', ] },],\n'hideDelay': [{ type: Input, args: ['mdTooltipHideDelay', ] },],\n'message': [{ type: Input, args: ['mdTooltip', ] },],\n'tooltipClass': [{ type: Input, args: ['mdTooltipClass', ] },],\n'_deprecatedMessage': [{ type: Input, args: ['md-tooltip', ] },],\n'_matMessage': [{ type: Input, args: ['matTooltip', ] },],\n'_matPosition': [{ type: Input, args: ['matTooltipPosition', ] },],\n'_matDisabled': [{ type: Input, args: ['matTooltipDisabled', ] },],\n'_matHideDelay': [{ type: Input, args: ['matTooltipHideDelay', ] },],\n'_matShowDelay': [{ type: Input, args: ['matTooltipShowDelay', ] },],\n'_matClass': [{ type: Input, args: ['matTooltipClass', ] },],\n};\n}\n\nfunction MdTooltip_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTooltip.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTooltip.ctorParameters;\n/** @type {?} */\nMdTooltip.propDecorators;\n/** @type {?} */\nMdTooltip.prototype._overlayRef;\n/** @type {?} */\nMdTooltip.prototype._tooltipInstance;\n/** @type {?} */\nMdTooltip.prototype._position;\n/** @type {?} */\nMdTooltip.prototype._disabled;\n/** @type {?} */\nMdTooltip.prototype._tooltipClass;\n/**\n * The default delay in ms before showing the tooltip after show is called\n * @type {?}\n */\nMdTooltip.prototype.showDelay;\n/**\n * The default delay in ms before hiding the tooltip after hide is called\n * @type {?}\n */\nMdTooltip.prototype.hideDelay;\n/** @type {?} */\nMdTooltip.prototype._message;\n/** @type {?} */\nMdTooltip.prototype._enterListener;\n/** @type {?} */\nMdTooltip.prototype._leaveListener;\n/** @type {?} */\nMdTooltip.prototype._overlay;\n/** @type {?} */\nMdTooltip.prototype._elementRef;\n/** @type {?} */\nMdTooltip.prototype._scrollDispatcher;\n/** @type {?} */\nMdTooltip.prototype._viewContainerRef;\n/** @type {?} */\nMdTooltip.prototype._ngZone;\n/** @type {?} */\nMdTooltip.prototype._platform;\n/** @type {?} */\nMdTooltip.prototype._ariaDescriber;\n/** @type {?} */\nMdTooltip.prototype._scrollStrategy;\n/** @type {?} */\nMdTooltip.prototype._dir;\n}\n\n\nexport type TooltipVisibility = 'initial' | 'visible' | 'hidden';\n/**\n * Internal component that wraps the tooltip's content.\n * \\@docs-private\n */\nexport class TooltipComponent {\n/**\n * Message to display in the tooltip\n */\nmessage: string;\n/**\n * Classes to be added to the tooltip. Supports the same syntax as `ngClass`.\n */\ntooltipClass: string|string[]|Set<string>|{[key: string]: any};\n/**\n * The timeout ID of any current timer set to show the tooltip\n */\n_showTimeoutId: number;\n/**\n * The timeout ID of any current timer set to hide the tooltip\n */\n_hideTimeoutId: number;\n/**\n * Property watched by the animation framework to show or hide the tooltip\n */\n_visibility: TooltipVisibility = 'initial';\n/**\n * Whether interactions on the page should close the tooltip\n */\nprivate _closeOnInteraction: boolean = false;\n/**\n * The transform origin used in the animation for showing and hiding the tooltip\n */\n_transformOrigin: string = 'bottom';\n/**\n * Subject for notifying that the tooltip has been hidden from the view\n */\nprivate _onHide: Subject<any> = new Subject();\n/**\n * @param {?} _dir\n * @param {?} _changeDetectorRef\n */\nconstructor(\nprivate _dir: Directionality,\nprivate _changeDetectorRef: ChangeDetectorRef) {}\n/**\n * Shows the tooltip with an animation originating from the provided origin\n * @param {?} position Position of the tooltip.\n * @param {?} delay Amount of milliseconds to the delay showing the tooltip.\n * @return {?}\n */\nshow(position: TooltipPosition, delay: number): void {\n // Cancel the delayed hide if it is scheduled\n if (this._hideTimeoutId) {\n clearTimeout(this._hideTimeoutId);\n }\n\n this._setTransformOrigin(position);\n this._showTimeoutId = setTimeout(() => {\n this._visibility = 'visible';\n\n // Mark for check so if any parent component has set the\n // ChangeDetectionStrategy to OnPush it will be checked anyways\n this._markForCheck();\n }, delay);\n }\n/**\n * Begins the animation to hide the tooltip after the provided delay in ms.\n * @param {?} delay Amount of milliseconds to delay showing the tooltip.\n * @return {?}\n */\nhide(delay: number): void {\n // Cancel the delayed show if it is scheduled\n if (this._showTimeoutId) {\n clearTimeout(this._showTimeoutId);\n }\n\n this._hideTimeoutId = setTimeout(() => {\n this._visibility = 'hidden';\n\n // Mark for check so if any parent component has set the\n // ChangeDetectionStrategy to OnPush it will be checked anyways\n this._markForCheck();\n }, delay);\n }\n/**\n * Returns an observable that notifies when the tooltip has been hidden from view\n * @return {?}\n */\nafterHidden(): Observable<void> {\n return this._onHide.asObservable();\n }\n/**\n * Whether the tooltip is being displayed\n * @return {?}\n */\nisVisible(): boolean {\n return this._visibility === 'visible';\n }\n/**\n * Sets the tooltip transform origin according to the tooltip position\n * @param {?} value\n * @return {?}\n */\n_setTransformOrigin(value: TooltipPosition) {\n const /** @type {?} */ isLtr = !this._dir || this._dir.value == 'ltr';\n switch (value) {\n case 'before': this._transformOrigin = isLtr ? 'right' : 'left'; break;\n case 'after': this._transformOrigin = isLtr ? 'left' : 'right'; break;\n case 'left': this._transformOrigin = 'right'; break;\n case 'right': this._transformOrigin = 'left'; break;\n case 'above': this._transformOrigin = 'bottom'; break;\n case 'below': this._transformOrigin = 'top'; break;\n default: throw getMdTooltipInvalidPositionError(value);\n }\n }\n/**\n * @return {?}\n */\n_animationStart() {\n this._closeOnInteraction = false;\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_animationDone(event: AnimationEvent): void {\n const /** @type {?} */ toState = /** @type {?} */(( event.toState as TooltipVisibility));\n\n if (toState === 'hidden' && !this.isVisible()) {\n this._onHide.next();\n }\n\n if (toState === 'visible' || toState === 'hidden') {\n // Note: as of Angular 4.3, the animations module seems to fire the `start` callback before\n // the end if animations are disabled. Make this call async to ensure that it still fires\n // at the appropriate time.\n Promise.resolve().then(() => this._closeOnInteraction = true);\n }\n }\n/**\n * Interactions on the HTML body should close the tooltip immediately as defined in the\n * material design spec.\n * https://material.google.com/components/tooltips.html#tooltips-interaction\n * @return {?}\n */\n_handleBodyInteraction(): void {\n if (this._closeOnInteraction) {\n this.hide(0);\n }\n }\n/**\n * Marks that the tooltip needs to be checked in the next change detection run.\n * Mainly used for rendering the initial text before positioning a tooltip, which\n * can be problematic in components with OnPush change detection.\n * @return {?}\n */\n_markForCheck(): void {\n this._changeDetectorRef.markForCheck();\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-tooltip-component, mat-tooltip-component',\n templateUrl: 'tooltip.html',\n styleUrls: ['tooltip.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('state', [\n state('initial, void, hidden', style({transform: 'scale(0)'})),\n state('visible', style({transform: 'scale(1)'})),\n transition('* => visible', animate('150ms cubic-bezier(0.0, 0.0, 0.2, 1)')),\n transition('* => hidden', animate('150ms cubic-bezier(0.4, 0.0, 1, 1)')),\n ])\n ],\n host: {\n // Forces the element to have a layout in IE and Edge. This fixes issues where the element\n // won't be rendered if the animations are disabled or there is no web animations polyfill.\n '[style.zoom]': '_visibility === \"visible\" ? 1 : null',\n '(body:click)': 'this._handleBodyInteraction()',\n 'aria-hidden': 'true',\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Directionality, decorators: [{ type: Optional }, ]},\n{type: ChangeDetectorRef, },\n];\n}\n\nfunction TooltipComponent_tsickle_Closure_declarations() {\n/** @type {?} */\nTooltipComponent.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nTooltipComponent.ctorParameters;\n/**\n * Message to display in the tooltip\n * @type {?}\n */\nTooltipComponent.prototype.message;\n/**\n * Classes to be added to the tooltip. Supports the same syntax as `ngClass`.\n * @type {?}\n */\nTooltipComponent.prototype.tooltipClass;\n/**\n * The timeout ID of any current timer set to show the tooltip\n * @type {?}\n */\nTooltipComponent.prototype._showTimeoutId;\n/**\n * The timeout ID of any current timer set to hide the tooltip\n * @type {?}\n */\nTooltipComponent.prototype._hideTimeoutId;\n/**\n * Property watched by the animation framework to show or hide the tooltip\n * @type {?}\n */\nTooltipComponent.prototype._visibility;\n/**\n * Whether interactions on the page should close the tooltip\n * @type {?}\n */\nTooltipComponent.prototype._closeOnInteraction;\n/**\n * The transform origin used in the animation for showing and hiding the tooltip\n * @type {?}\n */\nTooltipComponent.prototype._transformOrigin;\n/**\n * Subject for notifying that the tooltip has been hidden from the view\n * @type {?}\n */\nTooltipComponent.prototype._onHide;\n/** @type {?} */\nTooltipComponent.prototype._dir;\n/** @type {?} */\nTooltipComponent.prototype._changeDetectorRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdTooltipModule,TooltipPosition,TOUCHEND_HIDE_DELAY,SCROLL_THROTTLE_MS,TOOLTIP_PANEL_CLASS,getMdTooltipInvalidPositionError,MD_TOOLTIP_SCROLL_STRATEGY,MD_TOOLTIP_SCROLL_STRATEGY_PROVIDER_FACTORY,MD_TOOLTIP_SCROLL_STRATEGY_PROVIDER,MdTooltip,TooltipVisibility,TooltipComponent,MatTooltip,MatTooltipModule,MAT_TOOLTIP_SCROLL_STRATEGY,MAT_TOOLTIP_SCROLL_STRATEGY_PROVIDER,MAT_TOOLTIP_SCROLL_STRATEGY_PROVIDER_FACTORY} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {A11yModule, ARIA_DESCRIBER_PROVIDER} from '@angular/cdk/a11y';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MdCommonModule} from '@angular/material/core';\nimport {MD_TOOLTIP_SCROLL_STRATEGY_PROVIDER, MdTooltip, TooltipComponent} from './tooltip';\nexport class MdTooltipModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n CommonModule,\n OverlayModule,\n MdCommonModule,\n PlatformModule,\n A11yModule,\n ],\n exports: [MdTooltip, TooltipComponent, MdCommonModule],\n declarations: [MdTooltip, TooltipComponent],\n entryComponents: [TooltipComponent],\n providers: [MD_TOOLTIP_SCROLL_STRATEGY_PROVIDER, ARIA_DESCRIBER_PROVIDER],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdTooltipModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTooltipModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTooltipModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs/Subject';\n/**\n * To modify the labels and text displayed, create a new instance of MdPaginatorIntl and\n * include it in a custom provider\n */\nexport class MdPaginatorIntl {\n/**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\nchanges: Subject<void> = new Subject<void>();\n/**\n * A label for the page size selector.\n */\nitemsPerPageLabel = 'Items per page:';\n/**\n * A label for the button that increments the current page.\n */\nnextPageLabel = 'Next page';\n/**\n * A label for the button that decrements the current page.\n */\npreviousPageLabel = 'Previous page';\n/**\n * A label for the range of items within the current page and the length of the whole list.\n */\ngetRangeLabel = (page: number, pageSize: number, length: number) => {\n if (length == 0 || pageSize == 0) { return `0 of ${length}`; }\n\n length = Math.max(length, 0);\n\n const startIndex = page * pageSize;\n\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ?\n Math.min(startIndex + pageSize, length) :\n startIndex + pageSize;\n\n return `${startIndex + 1} - ${endIndex} of ${length}`;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdPaginatorIntl_tsickle_Closure_declarations() {\n/** @type {?} */\nMdPaginatorIntl.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdPaginatorIntl.ctorParameters;\n/**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n * @type {?}\n */\nMdPaginatorIntl.prototype.changes;\n/**\n * A label for the page size selector.\n * @type {?}\n */\nMdPaginatorIntl.prototype.itemsPerPageLabel;\n/**\n * A label for the button that increments the current page.\n * @type {?}\n */\nMdPaginatorIntl.prototype.nextPageLabel;\n/**\n * A label for the button that decrements the current page.\n * @type {?}\n */\nMdPaginatorIntl.prototype.previousPageLabel;\n/**\n * A label for the range of items within the current page and the length of the whole list.\n * @type {?}\n */\nMdPaginatorIntl.prototype.getRangeLabel;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","\n/**\n * Throws an exception for the case when menu trigger doesn't have a valid md-menu instance\n * \\@docs-private\n * @return {?}\n */\nexport function throwMdMenuMissingError() {\n throw Error(`md-menu-trigger: must pass in an md-menu instance.\n\n Example:\n <md-menu #menu=\"mdMenu\"></md-menu>\n <button [mdMenuTriggerFor]=\"menu\"></button>`);\n}\n/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * \\@docs-private\n * @return {?}\n */\nexport function throwMdMenuInvalidPositionX() {\n throw Error(`x-position value must be either 'before' or after'.\n Example: <md-menu x-position=\"before\" #menu=\"mdMenu\"></md-menu>`);\n}\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * \\@docs-private\n * @return {?}\n */\nexport function throwMdMenuInvalidPositionY() {\n throw Error(`y-position value must be either 'above' or below'.\n Example: <md-menu y-position=\"above\" #menu=\"mdMenu\"></md-menu>`);\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {FocusableOption} from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisable, MATERIAL_COMPATIBILITY_MODE, mixinDisabled} from '@angular/material/core';\nimport {Subject} from 'rxjs/Subject';\n/**\n * \\@docs-private\n */\nexport class MdMenuItemBase {}\nexport const /** @type {?} */ _MdMenuItemMixinBase = mixinDisabled(MdMenuItemBase);\n/**\n * This directive is intended to be used inside an md-menu tag.\n * It exists mostly to set the role attribute.\n */\nexport class MdMenuItem extends _MdMenuItemMixinBase implements FocusableOption, CanDisable,\n OnDestroy {\n/**\n * Stream that emits when the menu item is hovered.\n */\nhover: Subject<MdMenuItem> = new Subject();\n/**\n * Whether the menu item is highlighted.\n */\n_highlighted: boolean = false;\n/**\n * Whether the menu item acts as a trigger for a sub-menu.\n */\n_triggersSubmenu: boolean = false;\n/**\n * @param {?} _elementRef\n */\nconstructor(private _elementRef: ElementRef) {\n super();\n }\n/**\n * Focuses the menu item.\n * @return {?}\n */\nfocus(): void {\n this._getHostElement().focus();\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this.hover.complete();\n }\n/**\n * Used to set the `tabindex`.\n * @return {?}\n */\n_getTabIndex(): string {\n return this.disabled ? '-1' : '0';\n }\n/**\n * Returns the host DOM element.\n * @return {?}\n */\n_getHostElement(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n/**\n * Prevents the default element actions if it is disabled.\n * @param {?} event\n * @return {?}\n */\n_checkDisabled(event: Event): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n/**\n * Emits to the hover stream.\n * @return {?}\n */\n_emitHoverEvent() {\n if (!this.disabled) {\n this.hover.next(this);\n }\n }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: '[md-menu-item], [mat-menu-item]',\n inputs: ['disabled'],\n host: {\n 'role': 'menuitem',\n 'class': 'mat-menu-item',\n '[class.mat-menu-item-highlighted]': '_highlighted',\n '[class.mat-menu-item-submenu-trigger]': '_triggersSubmenu',\n '[attr.tabindex]': '_getTabIndex()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n '(click)': '_checkDisabled($event)',\n '(mouseenter)': '_emitHoverEvent()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n templateUrl: 'menu-item.html',\n exportAs: 'mdMenuItem, matMenuItem',\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n];\n}\n\nfunction MdMenuItem_tsickle_Closure_declarations() {\n/** @type {?} */\nMdMenuItem.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdMenuItem.ctorParameters;\n/**\n * Stream that emits when the menu item is hovered.\n * @type {?}\n */\nMdMenuItem.prototype.hover;\n/**\n * Whether the menu item is highlighted.\n * @type {?}\n */\nMdMenuItem.prototype._highlighted;\n/**\n * Whether the menu item acts as a trigger for a sub-menu.\n * @type {?}\n */\nMdMenuItem.prototype._triggersSubmenu;\n/** @type {?} */\nMdMenuItem.prototype._elementRef;\n}\n\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport{\n trigger,\n state,\n style,\n animate,\n transition,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Below are all the animations for the md-menu component.\n * Animation duration and timing values are based on:\n * https://material.io/guidelines/components/menus.html#menus-usage\n */\n\n\n/**\n * This animation controls the menu panel's entry and exit from the page.\n *\n * When the menu panel is added to the DOM, it scales in and fades in its border.\n *\n * When the menu panel is removed from the DOM, it simply fades out after a brief\n * delay to display the ripple.\n */\n\n// TODO(kara): switch to :enter and :leave once Mobile Safari is sorted out.\nexport const /** @type {?} */ transformMenu: AnimationTriggerMetadata = trigger('transformMenu', [\n state('void', style({\n opacity: 0,\n // This starts off from 0.01, instead of 0, because there's an issue in the Angular animations\n // as of 4.2, which causes the animation to be skipped if it starts from 0.\n transform: 'scale(0.01, 0.01)'\n })),\n state('enter-start', style({\n opacity: 1,\n transform: 'scale(1, 0.5)'\n })),\n state('enter', style({\n transform: 'scale(1, 1)'\n })),\n transition('void => enter-start', animate('100ms linear')),\n transition('enter-start => enter', animate('300ms cubic-bezier(0.25, 0.8, 0.25, 1)')),\n transition('* => void', animate('150ms 50ms linear', style({opacity: 0})))\n]);\n/**\n * This animation fades in the background color and content of the menu panel\n * after its containing element is scaled in.\n */\nexport const fadeInItems: AnimationTriggerMetadata = trigger('fadeInItems', [\n state('showing', style({opacity: 1})),\n transition('void => *', [\n style({opacity: 0}),\n animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')\n ])\n]);\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n ElementRef,\n ChangeDetectionStrategy,\n InjectionToken,\n Inject,\n} from '@angular/core';\nimport {AnimationEvent} from '@angular/animations';\nimport {MenuPositionX, MenuPositionY} from './menu-positions';\nimport {throwMdMenuInvalidPositionX, throwMdMenuInvalidPositionY} from './menu-errors';\nimport {MdMenuItem} from './menu-item';\nimport {FocusKeyManager} from '@angular/cdk/a11y';\nimport {MdMenuPanel} from './menu-panel';\nimport {Subscription} from 'rxjs/Subscription';\nimport {transformMenu, fadeInItems} from './menu-animations';\nimport {ESCAPE, LEFT_ARROW, RIGHT_ARROW} from '@angular/material/core';\nimport {merge} from 'rxjs/observable/merge';\nimport {Observable} from 'rxjs/Observable';\nimport {Direction} from '@angular/cdk/bidi';\nimport {RxChain, startWith, switchMap} from '@angular/cdk/rxjs';\n\n/** Default `md-menu` options that can be overridden. */\nexport interface MdMenuDefaultOptions {\n xPosition: MenuPositionX;\n yPosition: MenuPositionY;\n overlapTrigger: boolean;\n}\n/**\n * Injection token to be used to override the default options for `md-menu`.\n */\nexport const MD_MENU_DEFAULT_OPTIONS =\n new InjectionToken<MdMenuDefaultOptions>('md-menu-default-options');\n/**\n * Start elevation for the menu panel.\n * \\@docs-private\n */\nconst MD_MENU_BASE_ELEVATION = 2;\nexport class MdMenu implements AfterContentInit, MdMenuPanel, OnDestroy {\nprivate _keyManager: FocusKeyManager<MdMenuItem>;\nprivate _xPosition: MenuPositionX = this._defaultOptions.xPosition;\nprivate _yPosition: MenuPositionY = this._defaultOptions.yPosition;\nprivate _previousElevation: string;\n/**\n * Subscription to tab events on the menu panel\n */\nprivate _tabSubscription = Subscription.EMPTY;\n/**\n * Config object to be passed into the menu's ngClass\n */\n_classList: any = {};\n/**\n * Current state of the panel animation.\n */\n_panelAnimationState: 'void' | 'enter-start' | 'enter' = 'void';\n/**\n * Parent menu of the current menu panel.\n */\nparentMenu: MdMenuPanel | undefined;\n/**\n * Layout direction of the menu.\n */\ndirection: Direction;\n/**\n * Position of the menu in the X axis.\n * @return {?}\n */\nget xPosition() { return this._xPosition; }\n/**\n * @param {?} value\n * @return {?}\n */\nset xPosition(value: MenuPositionX) {\n if (value !== 'before' && value !== 'after') {\n throwMdMenuInvalidPositionX();\n }\n this._xPosition = value;\n this.setPositionClasses();\n }\n/**\n * Position of the menu in the Y axis.\n * @return {?}\n */\nget yPosition() { return this._yPosition; }\n/**\n * @param {?} value\n * @return {?}\n */\nset yPosition(value: MenuPositionY) {\n if (value !== 'above' && value !== 'below') {\n throwMdMenuInvalidPositionY();\n }\n this._yPosition = value;\n this.setPositionClasses();\n }\n\n templateRef: TemplateRef<any>;\n/**\n * List of the items inside of a menu.\n */\nitems: QueryList<MdMenuItem>;\n/**\n * Whether the menu should overlap its trigger.\n */\noverlapTrigger = this._defaultOptions.overlapTrigger;\n/**\n * This method takes classes set on the host md-menu element and applies them on the\n * menu template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing menu from outside the component.\n * @param {?} classes list of class names\n * @return {?}\n */\nset classList(classes: string) {\n if (classes && classes.length) {\n this._classList = classes.split(' ').reduce((obj: any, className: string) => {\n obj[className] = true;\n return obj;\n }, {});\n\n this._elementRef.nativeElement.className = '';\n this.setPositionClasses();\n }\n }\n/**\n * Event emitted when the menu is closed.\n */\nclose = new EventEmitter<void | 'click' | 'keydown'>();\n/**\n * @param {?} _elementRef\n * @param {?} _defaultOptions\n */\nconstructor(\nprivate _elementRef: ElementRef,\nprivate _defaultOptions: MdMenuDefaultOptions) { }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._keyManager = new FocusKeyManager<MdMenuItem>(this.items).withWrap();\n this._tabSubscription = this._keyManager.tabOut.subscribe(() => this.close.emit('keydown'));\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._tabSubscription.unsubscribe();\n this.close.emit();\n this.close.complete();\n }\n/**\n * Stream that emits whenever the hovered menu item changes.\n * @return {?}\n */\nhover(): Observable<MdMenuItem> {\n return RxChain.from(this.items.changes)\n .call(startWith, this.items)\n .call(switchMap, (items: MdMenuItem[]) => merge(...items.map(item => item.hover)))\n .result();\n }\n/**\n * Handle a keyboard event from the menu, delegating to the appropriate action.\n * @param {?} event\n * @return {?}\n */\n_handleKeydown(event: KeyboardEvent) {\n switch (event.keyCode) {\n case ESCAPE:\n this.close.emit('keydown');\n event.stopPropagation();\n break;\n case LEFT_ARROW:\n if (this.parentMenu && this.direction === 'ltr') {\n this.close.emit('keydown');\n }\n break;\n case RIGHT_ARROW:\n if (this.parentMenu && this.direction === 'rtl') {\n this.close.emit('keydown');\n }\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n/**\n * Focus the first item in the menu. This method is used by the menu trigger\n * to focus the first item when the menu is opened by the ENTER key.\n * @return {?}\n */\nfocusFirstItem() {\n this._keyManager.setFirstItemActive();\n }\n/**\n * It's necessary to set position-based classes to ensure the menu panel animation\n * folds out from the correct direction.\n * @param {?=} posX\n * @param {?=} posY\n * @return {?}\n */\nsetPositionClasses(posX = this.xPosition, posY = this.yPosition): void {\n this._classList['mat-menu-before'] = posX === 'before';\n this._classList['mat-menu-after'] = posX === 'after';\n this._classList['mat-menu-above'] = posY === 'above';\n this._classList['mat-menu-below'] = posY === 'below';\n }\n/**\n * Sets the menu panel elevation.\n * @param {?} depth Number of parent menus that come before the menu.\n * @return {?}\n */\nsetElevation(depth: number): void {\n // The elevation starts at the base and increases by one for each level.\n const /** @type {?} */ newElevation = `mat-elevation-z${MD_MENU_BASE_ELEVATION + depth}`;\n const /** @type {?} */ customElevation = Object.keys(this._classList).find(c => c.startsWith('mat-elevation-z'));\n\n if (!customElevation || customElevation === this._previousElevation) {\n if (this._previousElevation) {\n this._classList[this._previousElevation] = false;\n }\n\n this._classList[newElevation] = true;\n this._previousElevation = newElevation;\n }\n }\n/**\n * Starts the enter animation.\n * @return {?}\n */\n_startAnimation() {\n this._panelAnimationState = 'enter-start';\n }\n/**\n * Resets the panel animation to its initial state.\n * @return {?}\n */\n_resetAnimation() {\n this._panelAnimationState = 'void';\n }\n/**\n * Callback that is invoked when the panel animation completes.\n * @param {?} event\n * @return {?}\n */\n_onAnimationDone(event: AnimationEvent) {\n // After the initial expansion is done, trigger the second phase of the enter animation.\n if (event.toState === 'enter-start') {\n this._panelAnimationState = 'enter';\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-menu, mat-menu',\n templateUrl: 'menu.html',\n styleUrls: ['menu.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n animations: [\n transformMenu,\n fadeInItems\n ],\n exportAs: 'mdMenu, matMenu'\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: undefined, decorators: [{ type: Inject, args: [MD_MENU_DEFAULT_OPTIONS, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'xPosition': [{ type: Input },],\n'yPosition': [{ type: Input },],\n'templateRef': [{ type: ViewChild, args: [TemplateRef, ] },],\n'items': [{ type: ContentChildren, args: [MdMenuItem, ] },],\n'overlapTrigger': [{ type: Input },],\n'classList': [{ type: Input, args: ['class', ] },],\n'close': [{ type: Output },],\n};\n}\n\nfunction MdMenu_tsickle_Closure_declarations() {\n/** @type {?} */\nMdMenu.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdMenu.ctorParameters;\n/** @type {?} */\nMdMenu.propDecorators;\n/** @type {?} */\nMdMenu.prototype._keyManager;\n/** @type {?} */\nMdMenu.prototype._xPosition;\n/** @type {?} */\nMdMenu.prototype._yPosition;\n/** @type {?} */\nMdMenu.prototype._previousElevation;\n/**\n * Subscription to tab events on the menu panel\n * @type {?}\n */\nMdMenu.prototype._tabSubscription;\n/**\n * Config object to be passed into the menu's ngClass\n * @type {?}\n */\nMdMenu.prototype._classList;\n/**\n * Current state of the panel animation.\n * @type {?}\n */\nMdMenu.prototype._panelAnimationState;\n/**\n * Parent menu of the current menu panel.\n * @type {?}\n */\nMdMenu.prototype.parentMenu;\n/**\n * Layout direction of the menu.\n * @type {?}\n */\nMdMenu.prototype.direction;\n/** @type {?} */\nMdMenu.prototype.templateRef;\n/**\n * List of the items inside of a menu.\n * @type {?}\n */\nMdMenu.prototype.items;\n/**\n * Whether the menu should overlap its trigger.\n * @type {?}\n */\nMdMenu.prototype.overlapTrigger;\n/**\n * Event emitted when the menu is closed.\n * @type {?}\n */\nMdMenu.prototype.close;\n/** @type {?} */\nMdMenu.prototype._elementRef;\n/** @type {?} */\nMdMenu.prototype._defaultOptions;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {isFakeMousedownFromScreenReader} from '@angular/cdk/a11y';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {LEFT_ARROW, RIGHT_ARROW} from '@angular/cdk/keycodes';\nimport {\n ConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayRef,\n OverlayConfig,\n RepositionScrollStrategy,\n ScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {filter, RxChain} from '@angular/cdk/rxjs';\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n Optional,\n Output,\n Self,\n ViewContainerRef,\n} from '@angular/core';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MdMenu} from './menu-directive';\nimport {throwMdMenuMissingError} from './menu-errors';\nimport {MdMenuItem} from './menu-item';\nimport {MdMenuPanel} from './menu-panel';\nimport {MenuPositionX, MenuPositionY} from './menu-positions';\n/**\n * Injection token that determines the scroll handling while the menu is open.\n */\nexport const MD_MENU_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('md-menu-scroll-strategy');\n/**\n * \\@docs-private\n * @param {?} overlay\n * @return {?}\n */\nexport function MD_MENU_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n () => RepositionScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n/**\n * \\@docs-private\n */\nexport const MD_MENU_SCROLL_STRATEGY_PROVIDER = {\n provide: MD_MENU_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MD_MENU_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/**\n * Default top padding of the menu panel.\n */\nexport const MENU_PANEL_TOP_PADDING = 8;\n/**\n * This directive is intended to be used in conjunction with an md-menu tag. It is\n * responsible for toggling the display of the provided menu instance.\n */\nexport class MdMenuTrigger implements AfterViewInit, OnDestroy {\nprivate _portal: TemplatePortal<any>;\nprivate _overlayRef: OverlayRef | null = null;\nprivate _menuOpen: boolean = false;\nprivate _closeSubscription = Subscription.EMPTY;\nprivate _positionSubscription = Subscription.EMPTY;\nprivate _hoverSubscription = Subscription.EMPTY;\nprivate _openedByMouse: boolean = false;\n/**\n * @deprecated\n * @return {?}\n */\nget _deprecatedMdMenuTriggerFor(): MdMenuPanel {\n return this.menu;\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset _deprecatedMdMenuTriggerFor(v: MdMenuPanel) {\n this.menu = v;\n }\n/**\n * @deprecated\n * @return {?}\n */\nget _deprecatedMatMenuTriggerFor(): MdMenuPanel {\n return this.menu;\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset _deprecatedMatMenuTriggerFor(v: MdMenuPanel) {\n this.menu = v;\n }\n/**\n * @return {?}\n */\nget _matMenuTriggerFor(): MdMenuPanel {\n return this.menu;\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matMenuTriggerFor(v: MdMenuPanel) {\n this.menu = v;\n }\n/**\n * References the menu instance that the trigger is associated with.\n */\nmenu: MdMenuPanel;\n/**\n * Event emitted when the associated menu is opened.\n */\nonMenuOpen = new EventEmitter<void>();\n/**\n * Event emitted when the associated menu is closed.\n */\nonMenuClose = new EventEmitter<void>();\n/**\n * @param {?} _overlay\n * @param {?} _element\n * @param {?} _viewContainerRef\n * @param {?} _scrollStrategy\n * @param {?} _parentMenu\n * @param {?} _menuItemInstance\n * @param {?} _dir\n */\nconstructor(private _overlay: Overlay,\nprivate _element: ElementRef,\nprivate _viewContainerRef: ViewContainerRef,\nprivate _scrollStrategy,\nprivate _parentMenu: MdMenu,\nprivate _menuItemInstance: MdMenuItem,\nprivate _dir: Directionality) {\n\n if (_menuItemInstance) {\n _menuItemInstance._triggersSubmenu = this.triggersSubmenu();\n }\n }\n/**\n * @return {?}\n */\nngAfterViewInit() {\n this._checkMenu();\n\n this.menu.close.subscribe(reason => {\n this.closeMenu();\n\n // If a click closed the menu, we should close the entire chain of nested menus.\n if (reason === 'click' && this._parentMenu) {\n this._parentMenu.close.emit(reason);\n }\n });\n\n if (this.triggersSubmenu()) {\n // Subscribe to changes in the hovered item in order to toggle the panel.\n this._hoverSubscription = filter\n .call(this._parentMenu.hover(), active => active === this._menuItemInstance)\n .subscribe(() => {\n this._openedByMouse = true;\n this.openMenu();\n });\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n\n this._cleanUpSubscriptions();\n }\n/**\n * Whether the menu is open.\n * @return {?}\n */\nget menuOpen(): boolean {\n return this._menuOpen;\n }\n/**\n * The text direction of the containing app.\n * @return {?}\n */\nget dir(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n/**\n * Whether the menu triggers a sub-menu or a top-level one.\n * @return {?}\n */\ntriggersSubmenu(): boolean {\n return !!(this._menuItemInstance && this._parentMenu);\n }\n/**\n * Toggles the menu between the open and closed states.\n * @return {?}\n */\ntoggleMenu(): void {\n return this._menuOpen ? this.closeMenu() : this.openMenu();\n }\n/**\n * Opens the menu.\n * @return {?}\n */\nopenMenu(): void {\n if (!this._menuOpen) {\n this._createOverlay().attach(this._portal);\n this._closeSubscription = this._menuClosingActions().subscribe(() => this.menu.close.emit());\n this._initMenu();\n\n if (this.menu instanceof MdMenu) {\n this.menu._startAnimation();\n }\n }\n }\n/**\n * Closes the menu.\n * @return {?}\n */\ncloseMenu(): void {\n if (this._overlayRef && this.menuOpen) {\n this._resetMenu();\n this._overlayRef.detach();\n this._closeSubscription.unsubscribe();\n this.menu.close.emit();\n\n if (this.menu instanceof MdMenu) {\n this.menu._resetAnimation();\n }\n }\n }\n/**\n * Focuses the menu trigger.\n * @return {?}\n */\nfocus() {\n this._element.nativeElement.focus();\n }\n/**\n * This method sets the menu state to open and focuses the first item if\n * the menu was opened via the keyboard.\n * @return {?}\n */\nprivate _initMenu(): void {\n this.menu.parentMenu = this.triggersSubmenu() ? this._parentMenu : undefined;\n this.menu.direction = this.dir;\n this._setMenuElevation();\n this._setIsMenuOpen(true);\n\n // Should only set focus if opened via the keyboard, so keyboard users can\n // can easily navigate menu items. According to spec, mouse users should not\n // see the focus style.\n if (!this._openedByMouse) {\n this.menu.focusFirstItem();\n }\n }\n/**\n * Updates the menu elevation based on the amount of parent menus that it has.\n * @return {?}\n */\nprivate _setMenuElevation(): void {\n if (this.menu.setElevation) {\n let /** @type {?} */ depth = 0;\n let /** @type {?} */ parentMenu = this.menu.parentMenu;\n\n while (parentMenu) {\n depth++;\n parentMenu = parentMenu.parentMenu;\n }\n\n this.menu.setElevation(depth);\n }\n }\n/**\n * This method resets the menu when it's closed, most importantly restoring\n * focus to the menu trigger if the menu was opened via the keyboard.\n * @return {?}\n */\nprivate _resetMenu(): void {\n this._setIsMenuOpen(false);\n\n // Focus only needs to be reset to the host element if the menu was opened\n // by the keyboard and manually shifted to the first menu item.\n if (!this._openedByMouse) {\n this.focus();\n }\n\n this._openedByMouse = false;\n }\n/**\n * @param {?} isOpen\n * @return {?}\n */\nprivate _setIsMenuOpen(isOpen: boolean): void {\n this._menuOpen = isOpen;\n this._menuOpen ? this.onMenuOpen.emit() : this.onMenuClose.emit();\n\n if (this.triggersSubmenu()) {\n this._menuItemInstance._highlighted = isOpen;\n }\n }\n/**\n * This method checks that a valid instance of MdMenu has been passed into\n * mdMenuTriggerFor. If not, an exception is thrown.\n * @return {?}\n */\nprivate _checkMenu() {\n if (!this.menu) {\n throwMdMenuMissingError();\n }\n }\n/**\n * This method creates the overlay from the provided menu's template and saves its\n * OverlayRef so that it can be attached to the DOM when openMenu is called.\n * @return {?}\n */\nprivate _createOverlay(): OverlayRef {\n if (!this._overlayRef) {\n this._portal = new TemplatePortal(this.menu.templateRef, this._viewContainerRef);\n const /** @type {?} */ config = this._getOverlayConfig();\n this._subscribeToPositions( /** @type {?} */((config.positionStrategy as ConnectedPositionStrategy)));\n this._overlayRef = this._overlay.create(config);\n }\n\n return this._overlayRef;\n }\n/**\n * This method builds the configuration object needed to create the overlay, the OverlayState.\n * @return {?} OverlayConfig\n */\nprivate _getOverlayConfig(): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this._getPosition(),\n hasBackdrop: !this.triggersSubmenu(),\n backdropClass: 'cdk-overlay-transparent-backdrop',\n direction: this.dir,\n scrollStrategy: this._scrollStrategy()\n });\n }\n/**\n * Listens to changes in the position of the overlay and sets the correct classes\n * on the menu based on the new position. This ensures the animation origin is always\n * correct, even if a fallback position is used for the overlay.\n * @param {?} position\n * @return {?}\n */\nprivate _subscribeToPositions(position: ConnectedPositionStrategy): void {\n this._positionSubscription = position.onPositionChange.subscribe(change => {\n const /** @type {?} */ posX: MenuPositionX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';\n const /** @type {?} */ posY: MenuPositionY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\n\n this.menu.setPositionClasses(posX, posY);\n });\n }\n/**\n * This method builds the position strategy for the overlay, so the menu is properly connected\n * to the trigger.\n * @return {?} ConnectedPositionStrategy\n */\nprivate _getPosition(): ConnectedPositionStrategy {\n let [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];\n\n let [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\n\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n let /** @type {?} */ offsetY = 0;\n\n if (this.triggersSubmenu()) {\n // When the menu is a sub-menu, it should always align itself\n // to the edges of the trigger, instead of overlapping it.\n overlayFallbackX = originX = this.menu.xPosition === 'before' ? 'start' : 'end';\n originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n\n // TODO(crisbeto): this should be a function, once the overlay supports it.\n // Right now it will be wrong for the fallback positions.\n offsetY = overlayY === 'bottom' ? MENU_PANEL_TOP_PADDING : -MENU_PANEL_TOP_PADDING;\n } else if (!this.menu.overlapTrigger) {\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n }\n\n return this._overlay.position()\n .connectedTo(this._element, {originX, originY}, {overlayX, overlayY})\n .withDirection(this.dir)\n .withOffsetY(offsetY)\n .withFallbackPosition(\n {originX: originFallbackX, originY},\n {overlayX: overlayFallbackX, overlayY})\n .withFallbackPosition(\n {originX, originY: originFallbackY},\n {overlayX, overlayY: overlayFallbackY})\n .withFallbackPosition(\n {originX: originFallbackX, originY: originFallbackY},\n {overlayX: overlayFallbackX, overlayY: overlayFallbackY});\n }\n/**\n * Cleans up the active subscriptions.\n * @return {?}\n */\nprivate _cleanUpSubscriptions(): void {\n this._closeSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n this._hoverSubscription.unsubscribe();\n }\n/**\n * Returns a stream that emits whenever an action that should close the menu occurs.\n * @return {?}\n */\nprivate _menuClosingActions() {\n const /** @type {?} */ backdrop = /** @type {?} */(( this._overlayRef)).backdropClick();\n const /** @type {?} */ parentClose = this._parentMenu ? this._parentMenu.close : observableOf(null);\n const /** @type {?} */ hover = this._parentMenu ? RxChain.from(this._parentMenu.hover())\n .call(filter, active => active !== this._menuItemInstance)\n .call(filter, () => this._menuOpen)\n .result() : observableOf(null);\n\n return merge(backdrop, parentClose, hover);\n }\n/**\n * Handles mouse presses on the trigger.\n * @param {?} event\n * @return {?}\n */\n_handleMousedown(event: MouseEvent): void {\n if (!isFakeMousedownFromScreenReader(event)) {\n this._openedByMouse = true;\n\n // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n // we should prevent focus from moving onto it via click to avoid the\n // highlight from lingering on the menu item.\n if (this.triggersSubmenu()) {\n event.preventDefault();\n }\n }\n }\n/**\n * Handles key presses on the trigger.\n * @param {?} event\n * @return {?}\n */\n_handleKeydown(event: KeyboardEvent): void {\n const /** @type {?} */ keyCode = event.keyCode;\n\n if (this.triggersSubmenu() && (\n (keyCode === RIGHT_ARROW && this.dir === 'ltr') ||\n (keyCode === LEFT_ARROW && this.dir === 'rtl'))) {\n this.openMenu();\n }\n }\n/**\n * Handles click events on the trigger.\n * @param {?} event\n * @return {?}\n */\n_handleClick(event: MouseEvent): void {\n if (this.triggersSubmenu()) {\n // Stop event propagation to avoid closing the parent menu.\n event.stopPropagation();\n this.openMenu();\n } else {\n this.toggleMenu();\n }\n }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `[md-menu-trigger-for], [mat-menu-trigger-for],\n [mdMenuTriggerFor], [matMenuTriggerFor]`,\n host: {\n 'aria-haspopup': 'true',\n '(mousedown)': '_handleMousedown($event)',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick($event)',\n },\n exportAs: 'mdMenuTrigger, matMenuTrigger'\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Overlay, },\n{type: ElementRef, },\n{type: ViewContainerRef, },\n{type: undefined, decorators: [{ type: Inject, args: [MD_MENU_SCROLL_STRATEGY, ] }, ]},\n{type: MdMenu, decorators: [{ type: Optional }, ]},\n{type: MdMenuItem, decorators: [{ type: Optional }, { type: Self }, ]},\n{type: Directionality, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_deprecatedMdMenuTriggerFor': [{ type: Input, args: ['md-menu-trigger-for', ] },],\n'_deprecatedMatMenuTriggerFor': [{ type: Input, args: ['mat-menu-trigger-for', ] },],\n'_matMenuTriggerFor': [{ type: Input, args: ['matMenuTriggerFor', ] },],\n'menu': [{ type: Input, args: ['mdMenuTriggerFor', ] },],\n'onMenuOpen': [{ type: Output },],\n'onMenuClose': [{ type: Output },],\n};\n}\n\nfunction MdMenuTrigger_tsickle_Closure_declarations() {\n/** @type {?} */\nMdMenuTrigger.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdMenuTrigger.ctorParameters;\n/** @type {?} */\nMdMenuTrigger.propDecorators;\n/** @type {?} */\nMdMenuTrigger.prototype._portal;\n/** @type {?} */\nMdMenuTrigger.prototype._overlayRef;\n/** @type {?} */\nMdMenuTrigger.prototype._menuOpen;\n/** @type {?} */\nMdMenuTrigger.prototype._closeSubscription;\n/** @type {?} */\nMdMenuTrigger.prototype._positionSubscription;\n/** @type {?} */\nMdMenuTrigger.prototype._hoverSubscription;\n/** @type {?} */\nMdMenuTrigger.prototype._openedByMouse;\n/**\n * References the menu instance that the trigger is associated with.\n * @type {?}\n */\nMdMenuTrigger.prototype.menu;\n/**\n * Event emitted when the associated menu is opened.\n * @type {?}\n */\nMdMenuTrigger.prototype.onMenuOpen;\n/**\n * Event emitted when the associated menu is closed.\n * @type {?}\n */\nMdMenuTrigger.prototype.onMenuClose;\n/** @type {?} */\nMdMenuTrigger.prototype._overlay;\n/** @type {?} */\nMdMenuTrigger.prototype._element;\n/** @type {?} */\nMdMenuTrigger.prototype._viewContainerRef;\n/** @type {?} */\nMdMenuTrigger.prototype._scrollStrategy;\n/** @type {?} */\nMdMenuTrigger.prototype._parentMenu;\n/** @type {?} */\nMdMenuTrigger.prototype._menuItemInstance;\n/** @type {?} */\nMdMenuTrigger.prototype._dir;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MdCommonModule} from '@angular/material/core';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {MdMenu, MD_MENU_DEFAULT_OPTIONS} from './menu-directive';\nimport {MdMenuItem} from './menu-item';\nimport {MdMenuTrigger, MD_MENU_SCROLL_STRATEGY_PROVIDER} from './menu-trigger';\nimport {MdRippleModule} from '@angular/material/core';\nexport class MdMenuModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n OverlayModule,\n CommonModule,\n MdRippleModule,\n MdCommonModule,\n ],\n exports: [MdMenu, MdMenuItem, MdMenuTrigger, MdCommonModule],\n declarations: [MdMenu, MdMenuItem, MdMenuTrigger],\n providers: [\n MD_MENU_SCROLL_STRATEGY_PROVIDER,\n {\n provide: MD_MENU_DEFAULT_OPTIONS,\n useValue: {\n overlapTrigger: true,\n xPosition: 'after',\n yPosition: 'below',\n },\n }\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdMenuModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdMenuModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdMenuModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MD_MENU_SCROLL_STRATEGY,fadeInItems,transformMenu,MdMenuModule,MdMenu,MdMenuDefaultOptions,MD_MENU_DEFAULT_OPTIONS,MdMenuItem,MdMenuTrigger,MdMenuPanel,MenuPositionX,MenuPositionY,MAT_MENU_DEFAULT_OPTIONS,MatMenu,MatMenuDefaultOptions,MatMenuItem,MatMenuModule,MatMenuPanel,MatMenuTrigger} from './public_api';\n\nexport {MdMenuItemBase as ɵa,_MdMenuItemMixinBase as ɵb} from './menu-item';\nexport {MD_MENU_SCROLL_STRATEGY_PROVIDER as ɵd,MD_MENU_SCROLL_STRATEGY_PROVIDER_FACTORY as ɵc} from './menu-trigger';","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n animate,\n AnimationTriggerMetadata,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\n/**\n * This animation shrinks the placeholder text to 75% of its normal size and translates\n * it to either the top left corner (ltr) or top right corner (rtl) of the trigger,\n * depending on the text direction of the application.\n */\nexport const transformPlaceholder: AnimationTriggerMetadata = trigger('transformPlaceholder', [\n state('floating-ltr', style({\n top: '-22px',\n left: '-2px',\n transform: 'scale(0.75)'\n })),\n state('floating-rtl', style({\n top: '-22px',\n left: '2px',\n transform: 'scale(0.75)'\n })),\n transition('* => *', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n]);\n/**\n * This animation transforms the select's overlay panel on and off the page.\n * \n * When the panel is attached to the DOM, it expands its width by the amount of padding, scales it\n * up to 100% on the Y axis, fades in its border, and translates slightly up and to the\n * side to ensure the option text correctly overlaps the trigger text.\n * \n * When the panel is removed from the DOM, it simply fades out linearly.\n */\nexport const transformPanel: AnimationTriggerMetadata = trigger('transformPanel', [\n state('showing', style({\n opacity: 1,\n minWidth: 'calc(100% + 32px)', // 32px = 2 * 16px padding\n transform: 'scaleY(1)'\n })),\n state('showing-multiple', style({\n opacity: 1,\n minWidth: 'calc(100% + 64px)', // 64px = 48px padding on the left + 16px padding on the right\n transform: 'scaleY(1)'\n })),\n transition('void => *', [\n style({\n opacity: 0,\n minWidth: '100%',\n transform: 'scaleY(0)'\n }),\n animate('150ms cubic-bezier(0.25, 0.8, 0.25, 1)')\n ]),\n transition('* => void', [\n animate('250ms 100ms linear', style({opacity: 0}))\n ])\n]);\n/**\n * This animation fades in the background color and text content of the\n * select's options. It is time delayed to occur 100ms after the overlay\n * panel has transformed in.\n */\nexport const fadeInContent: AnimationTriggerMetadata = trigger('fadeInContent', [\n state('showing', style({opacity: 1})),\n transition('void => showing', [\n style({opacity: 0}),\n animate('150ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')\n ])\n]);\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n AfterContentInit,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n Optional,\n QueryList,\n Renderer2,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {MATERIAL_COMPATIBILITY_MODE, MdLine, MdLineSetter} from '@angular/material/core';\nimport {CanDisableRipple, mixinDisableRipple} from '@angular/material/core';\n/**\n * \\@docs-private\n */\nexport class MdListBase {}\nexport const /** @type {?} */ _MdListMixinBase = mixinDisableRipple(MdListBase);\n/**\n * \\@docs-private\n */\nexport class MdListItemBase {}\nexport const /** @type {?} */ _MdListItemMixinBase = mixinDisableRipple(MdListItemBase);\n/**\n * Divider between items within a list.\n */\nexport class MdListDivider {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-divider, mat-divider',\n host: {\n 'role': 'separator',\n 'aria-orientation': 'horizontal'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdListDivider_tsickle_Closure_declarations() {\n/** @type {?} */\nMdListDivider.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdListDivider.ctorParameters;\n}\n\n/**\n * A Material Design list component.\n */\nexport class MdList extends _MdListMixinBase implements CanDisableRipple {static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-list, mat-list, md-nav-list, mat-nav-list',\n host: {'role': 'list'},\n template: '<ng-content></ng-content>',\n styleUrls: ['list.css'],\n inputs: ['disableRipple'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdList_tsickle_Closure_declarations() {\n/** @type {?} */\nMdList.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdList.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdListCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-list, mat-list',\n host: {'class': 'mat-list'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdListCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdListCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdListCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdNavListCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-nav-list, mat-nav-list',\n host: {'class': 'mat-nav-list'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdNavListCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdNavListCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdNavListCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdDividerCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-divider, mat-divider',\n host: {'class': 'mat-divider'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdDividerCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDividerCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDividerCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdListAvatarCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-list-avatar], [mat-list-avatar], [mdListAvatar], [matListAvatar]',\n host: {'class': 'mat-list-avatar'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdListAvatarCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdListAvatarCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdListAvatarCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdListIconCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-list-icon], [mat-list-icon], [mdListIcon], [matListIcon]',\n host: {'class': 'mat-list-icon'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdListIconCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdListIconCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdListIconCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdListSubheaderCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-subheader], [mat-subheader], [mdSubheader], [matSubheader]',\n host: {'class': 'mat-subheader'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdListSubheaderCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdListSubheaderCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdListSubheaderCssMatStyler.ctorParameters;\n}\n\n/**\n * An item within a Material Design list.\n */\nexport class MdListItem extends _MdListItemMixinBase implements AfterContentInit, CanDisableRipple {\nprivate _lineSetter: MdLineSetter;\nprivate _isNavList: boolean = false;\n\n _lines: QueryList<MdLine>;\n/**\n * @param {?} avatar\n * @return {?}\n */\nset _hasAvatar(avatar: MdListAvatarCssMatStyler) {\n if (avatar != null) {\n this._renderer.addClass(this._element.nativeElement, 'mat-list-item-avatar');\n } else {\n this._renderer.removeClass(this._element.nativeElement, 'mat-list-item-avatar');\n }\n }\n/**\n * @param {?} _renderer\n * @param {?} _element\n * @param {?} _list\n * @param {?} navList\n */\nconstructor(private _renderer: Renderer2,\nprivate _element: ElementRef,\nprivate _list: MdList,\n navList: MdNavListCssMatStyler) {\n super();\n this._isNavList = !!navList;\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._lineSetter = new MdLineSetter(this._lines, this._renderer, this._element);\n }\n/**\n * Whether this list item should show a ripple effect when clicked.\n * @return {?}\n */\n_isRippleDisabled() {\n return !this._isNavList || this.disableRipple || this._list.disableRipple;\n }\n/**\n * @return {?}\n */\n_handleFocus() {\n this._renderer.addClass(this._element.nativeElement, 'mat-list-item-focus');\n }\n/**\n * @return {?}\n */\n_handleBlur() {\n this._renderer.removeClass(this._element.nativeElement, 'mat-list-item-focus');\n }\n/**\n * Retrieves the DOM element of the component host.\n * @return {?}\n */\n_getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-list-item, mat-list-item, a[md-list-item], a[mat-list-item]',\n host: {\n 'role': 'listitem',\n 'class': 'mat-list-item',\n '(focus)': '_handleFocus()',\n '(blur)': '_handleBlur()',\n },\n inputs: ['disableRipple'],\n templateUrl: 'list-item.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: MdList, decorators: [{ type: Optional }, ]},\n{type: MdNavListCssMatStyler, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_lines': [{ type: ContentChildren, args: [MdLine, ] },],\n'_hasAvatar': [{ type: ContentChild, args: [MdListAvatarCssMatStyler, ] },],\n};\n}\n\nfunction MdListItem_tsickle_Closure_declarations() {\n/** @type {?} */\nMdListItem.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdListItem.ctorParameters;\n/** @type {?} */\nMdListItem.propDecorators;\n/** @type {?} */\nMdListItem.prototype._lineSetter;\n/** @type {?} */\nMdListItem.prototype._isNavList;\n/** @type {?} */\nMdListItem.prototype._lines;\n/** @type {?} */\nMdListItem.prototype._renderer;\n/** @type {?} */\nMdListItem.prototype._element;\n/** @type {?} */\nMdListItem.prototype._list;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {FocusableOption, FocusKeyManager} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableRipple,\n MATERIAL_COMPATIBILITY_MODE,\n MdLine,\n MdLineSetter,\n mixinDisabled,\n mixinDisableRipple,\n RxChain,\n SPACE,\n startWith,\n switchMap,\n} from '@angular/material/core';\nimport {merge} from 'rxjs/observable/merge';\nimport {Subscription} from 'rxjs/Subscription';\n/**\n * \\@docs-private\n */\nexport class MdSelectionListBase {}\nexport const /** @type {?} */ _MdSelectionListMixinBase = mixinDisableRipple(mixinDisabled(MdSelectionListBase));\n/**\n * \\@docs-private\n */\nexport class MdListOptionBase {}\nexport const /** @type {?} */ _MdListOptionMixinBase = mixinDisableRipple(MdListOptionBase);\n\n/** Event emitted by a selection-list whenever the state of an option is changed. */\nexport interface MdSelectionListOptionEvent {\n option: MdListOption;\n}\n\nconst /** @type {?} */ FOCUSED_STYLE: string = 'mat-list-item-focus';\n/**\n * Component for list-options of selection-list. Each list-option can automatically\n * generate a checkbox and can put current item into the selectionModel of selection-list\n * if the current item is checked.\n */\nexport class MdListOption extends _MdListOptionMixinBase\n implements AfterContentInit, OnDestroy, FocusableOption, CanDisableRipple {\nprivate _lineSetter: MdLineSetter;\nprivate _selected: boolean = false;\nprivate _disabled: boolean = false;\n/**\n * Whether the option has focus.\n */\n_hasFocus: boolean = false;\n\n _lines: QueryList<MdLine>;\n/**\n * Whether the label should appear before or after the checkbox. Defaults to 'after'\n */\ncheckboxPosition: 'before' | 'after' = 'after';\n/**\n * Value of the option\n */\nvalue: any;\n/**\n * Whether the option is disabled.\n * @return {?}\n */\nget disabled() { return (this.selectionList && this.selectionList.disabled) || this._disabled; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n/**\n * Whether the option is selected.\n * @return {?}\n */\nget selected() { return this._selected; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selected(value: boolean) { this._selected = coerceBooleanProperty(value); }\n/**\n * Emitted when the option is focused.\n */\nonFocus = new EventEmitter<MdSelectionListOptionEvent>();\n/**\n * Emitted when the option is selected.\n */\nselectChange = new EventEmitter<MdSelectionListOptionEvent>();\n/**\n * Emitted when the option is deselected.\n */\ndeselected = new EventEmitter<MdSelectionListOptionEvent>();\n/**\n * Emitted when the option is destroyed.\n */\ndestroyed = new EventEmitter<MdSelectionListOptionEvent>();\n/**\n * @param {?} _renderer\n * @param {?} _element\n * @param {?} _changeDetector\n * @param {?} selectionList\n */\nconstructor(private _renderer: Renderer2,\nprivate _element: ElementRef,\nprivate _changeDetector: ChangeDetectorRef,\npublic selectionList: MdSelectionList) {\n super();\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._lineSetter = new MdLineSetter(this._lines, this._renderer, this._element);\n\n if (this.selectionList.disabled) {\n this.disabled = true;\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void {\n this.destroyed.emit({option: this});\n }\n/**\n * Toggles the selection state of the option.\n * @return {?}\n */\ntoggle(): void {\n this.selected = !this.selected;\n this.selectionList.selectedOptions.toggle(this);\n this._changeDetector.markForCheck();\n }\n/**\n * Allows for programmatic focusing of the option.\n * @return {?}\n */\nfocus(): void {\n this._element.nativeElement.focus();\n this.onFocus.emit({option: this});\n }\n/**\n * Whether this list item should show a ripple effect when clicked.\n * @return {?}\n */\n_isRippleDisabled() {\n return this.disabled || this.disableRipple || this.selectionList.disableRipple;\n }\n/**\n * @return {?}\n */\n_handleClick() {\n if (!this.disabled) {\n this.toggle();\n }\n }\n/**\n * @return {?}\n */\n_handleFocus() {\n this._hasFocus = true;\n this._renderer.addClass(this._element.nativeElement, FOCUSED_STYLE);\n }\n/**\n * @return {?}\n */\n_handleBlur() {\n this._renderer.removeClass(this._element.nativeElement, FOCUSED_STYLE);\n }\n/**\n * Retrieves the DOM element of the component host.\n * @return {?}\n */\n_getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-list-option, mat-list-option',\n inputs: ['disableRipple'],\n host: {\n 'role': 'option',\n 'class': 'mat-list-item mat-list-option',\n '(focus)': '_handleFocus()',\n '(blur)': '_handleBlur()',\n '(click)': '_handleClick()',\n 'tabindex': '-1',\n '[class.mat-list-item-disabled]': 'disabled',\n '[attr.aria-selected]': 'selected.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n },\n templateUrl: 'list-option.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: ChangeDetectorRef, },\n{type: MdSelectionList, decorators: [{ type: Optional }, { type: Inject, args: [forwardRef(() => MdSelectionList), ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_lines': [{ type: ContentChildren, args: [MdLine, ] },],\n'checkboxPosition': [{ type: Input },],\n'value': [{ type: Input },],\n'disabled': [{ type: Input },],\n'selected': [{ type: Input },],\n'selectChange': [{ type: Output },],\n'deselected': [{ type: Output },],\n'destroyed': [{ type: Output },],\n};\n}\n\nfunction MdListOption_tsickle_Closure_declarations() {\n/** @type {?} */\nMdListOption.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdListOption.ctorParameters;\n/** @type {?} */\nMdListOption.propDecorators;\n/** @type {?} */\nMdListOption.prototype._lineSetter;\n/** @type {?} */\nMdListOption.prototype._selected;\n/** @type {?} */\nMdListOption.prototype._disabled;\n/**\n * Whether the option has focus.\n * @type {?}\n */\nMdListOption.prototype._hasFocus;\n/** @type {?} */\nMdListOption.prototype._lines;\n/**\n * Whether the label should appear before or after the checkbox. Defaults to 'after'\n * @type {?}\n */\nMdListOption.prototype.checkboxPosition;\n/**\n * Value of the option\n * @type {?}\n */\nMdListOption.prototype.value;\n/**\n * Emitted when the option is focused.\n * @type {?}\n */\nMdListOption.prototype.onFocus;\n/**\n * Emitted when the option is selected.\n * @type {?}\n */\nMdListOption.prototype.selectChange;\n/**\n * Emitted when the option is deselected.\n * @type {?}\n */\nMdListOption.prototype.deselected;\n/**\n * Emitted when the option is destroyed.\n * @type {?}\n */\nMdListOption.prototype.destroyed;\n/** @type {?} */\nMdListOption.prototype._renderer;\n/** @type {?} */\nMdListOption.prototype._element;\n/** @type {?} */\nMdListOption.prototype._changeDetector;\n/** @type {?} */\nMdListOption.prototype.selectionList;\n}\n\n/**\n * Material Design list component where each item is a selectable option. Behaves as a listbox.\n */\nexport class MdSelectionList extends _MdSelectionListMixinBase\n implements FocusableOption, CanDisable, CanDisableRipple, AfterContentInit, OnDestroy {\n/**\n * Tab index for the selection-list.\n */\n_tabIndex = 0;\n/**\n * Subscription to all list options' onFocus events\n */\nprivate _optionFocusSubscription = Subscription.EMPTY;\n/**\n * Subscription to all list options' destroy events\n */\nprivate _optionDestroyStream = Subscription.EMPTY;\n/**\n * The FocusKeyManager which handles focus.\n */\n_keyManager: FocusKeyManager<MdListOption>;\n/**\n * The option components contained within this selection-list.\n */\noptions: QueryList<MdListOption>;\n/**\n * The currently selected options.\n */\nselectedOptions: SelectionModel<MdListOption> = new SelectionModel<MdListOption>(true);\n/**\n * @param {?} _element\n */\nconstructor(private _element: ElementRef) {\n super();\n }\n/**\n * @return {?}\n */\nngAfterContentInit(): void {\n this._keyManager = new FocusKeyManager<MdListOption>(this.options).withWrap();\n\n if (this.disabled) {\n this._tabIndex = -1;\n }\n\n this._optionFocusSubscription = this._onFocusSubscription();\n this._optionDestroyStream = this._onDestroySubscription();\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void {\n this._optionDestroyStream.unsubscribe();\n this._optionFocusSubscription.unsubscribe();\n }\n/**\n * Focus the selection-list.\n * @return {?}\n */\nfocus() {\n this._element.nativeElement.focus();\n }\n/**\n * Selects all of the options.\n * @return {?}\n */\nselectAll() {\n this.options.forEach(option => {\n if (!option.selected) {\n option.toggle();\n }\n });\n }\n/**\n * Deselects all of the options.\n * @return {?}\n */\ndeselectAll() {\n this.options.forEach(option => {\n if (option.selected) {\n option.toggle();\n }\n });\n }\n/**\n * Map all the options' destroy event subscriptions and merge them into one stream.\n * @return {?}\n */\nprivate _onDestroySubscription(): Subscription {\n return RxChain.from(this.options.changes)\n .call(startWith, this.options)\n .call(switchMap, (options: MdListOption[]) => {\n return merge(...options.map(option => option.destroyed));\n }).subscribe((e: MdSelectionListOptionEvent) => {\n let /** @type {?} */ optionIndex: number = this.options.toArray().indexOf(e.option);\n if (e.option._hasFocus) {\n // Check whether the option is the last item\n if (optionIndex < this.options.length - 1) {\n this._keyManager.setActiveItem(optionIndex);\n } else if (optionIndex - 1 >= 0) {\n this._keyManager.setActiveItem(optionIndex - 1);\n }\n }\n e.option.destroyed.unsubscribe();\n });\n }\n/**\n * Map all the options' onFocus event subscriptions and merge them into one stream.\n * @return {?}\n */\nprivate _onFocusSubscription(): Subscription {\n return RxChain.from(this.options.changes)\n .call(startWith, this.options)\n .call(switchMap, (options: MdListOption[]) => {\n return merge(...options.map(option => option.onFocus));\n }).subscribe((e: MdSelectionListOptionEvent) => {\n let /** @type {?} */ optionIndex: number = this.options.toArray().indexOf(e.option);\n this._keyManager.updateActiveItemIndex(optionIndex);\n });\n }\n/**\n * Passes relevant key presses to our key manager.\n * @param {?} event\n * @return {?}\n */\n_keydown(event: KeyboardEvent) {\n switch (event.keyCode) {\n case SPACE:\n this._toggleSelectOnFocusedOption();\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n/**\n * Toggles the selected state of the currently focused option.\n * @return {?}\n */\nprivate _toggleSelectOnFocusedOption(): void {\n let /** @type {?} */ focusedIndex = this._keyManager.activeItemIndex;\n\n if (focusedIndex != null && this._isValidIndex(focusedIndex)) {\n let /** @type {?} */ focusedOption: MdListOption = this.options.toArray()[focusedIndex];\n\n if (focusedOption) {\n focusedOption.toggle();\n }\n }\n }\n/**\n * Utility to ensure all indexes are valid.\n * \n * @param {?} index The index to be checked.\n * @return {?} True if the index is valid for our list of options.\n */\nprivate _isValidIndex(index: number): boolean {\n return index >= 0 && index < this.options.length;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-selection-list, mat-selection-list',\n inputs: ['disabled', 'disableRipple'],\n host: {\n 'role': 'listbox',\n '[attr.tabindex]': '_tabIndex',\n 'class': 'mat-selection-list',\n '(focus)': 'focus()',\n '(keydown)': '_keydown($event)',\n '[attr.aria-disabled]': 'disabled.toString()'},\n template: '<ng-content></ng-content>',\n styleUrls: ['list.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'options': [{ type: ContentChildren, args: [MdListOption, ] },],\n};\n}\n\nfunction MdSelectionList_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSelectionList.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSelectionList.ctorParameters;\n/** @type {?} */\nMdSelectionList.propDecorators;\n/**\n * Tab index for the selection-list.\n * @type {?}\n */\nMdSelectionList.prototype._tabIndex;\n/**\n * Subscription to all list options' onFocus events\n * @type {?}\n */\nMdSelectionList.prototype._optionFocusSubscription;\n/**\n * Subscription to all list options' destroy events\n * @type {?}\n */\nMdSelectionList.prototype._optionDestroyStream;\n/**\n * The FocusKeyManager which handles focus.\n * @type {?}\n */\nMdSelectionList.prototype._keyManager;\n/**\n * The option components contained within this selection-list.\n * @type {?}\n */\nMdSelectionList.prototype.options;\n/**\n * The currently selected options.\n * @type {?}\n */\nMdSelectionList.prototype.selectedOptions;\n/** @type {?} */\nMdSelectionList.prototype._element;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {\n MdCommonModule,\n MdLineModule,\n MdPseudoCheckboxModule,\n MdRippleModule,\n} from '@angular/material/core';\nimport {\n MdDividerCssMatStyler,\n MdList,\n MdListAvatarCssMatStyler,\n MdListCssMatStyler,\n MdListDivider,\n MdListIconCssMatStyler,\n MdListItem,\n MdListSubheaderCssMatStyler,\n MdNavListCssMatStyler,\n} from './list';\nimport {MdListOption, MdSelectionList} from './selection-list';\nexport class MdListModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdLineModule, MdRippleModule, MdCommonModule, MdPseudoCheckboxModule, CommonModule],\n exports: [\n MdList,\n MdListItem,\n MdListDivider,\n MdListAvatarCssMatStyler,\n MdLineModule,\n MdCommonModule,\n MdListIconCssMatStyler,\n MdListCssMatStyler,\n MdNavListCssMatStyler,\n MdDividerCssMatStyler,\n MdListSubheaderCssMatStyler,\n MdPseudoCheckboxModule,\n MdSelectionList,\n MdListOption\n ],\n declarations: [\n MdList,\n MdListItem,\n MdListDivider,\n MdListAvatarCssMatStyler,\n MdListIconCssMatStyler,\n MdListCssMatStyler,\n MdNavListCssMatStyler,\n MdDividerCssMatStyler,\n MdListSubheaderCssMatStyler,\n MdSelectionList,\n MdListOption\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdListModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdListModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdListModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdListModule,MdListBase,_MdListMixinBase,MdListItemBase,_MdListItemMixinBase,MdListDivider,MdList,MdListCssMatStyler,MdNavListCssMatStyler,MdDividerCssMatStyler,MdListAvatarCssMatStyler,MdListIconCssMatStyler,MdListSubheaderCssMatStyler,MdListItem,MdSelectionListBase,_MdSelectionListMixinBase,MdListOptionBase,_MdListOptionMixinBase,MdSelectionListOptionEvent,MdListOption,MdSelectionList,MatDividerCssMatStyler,MatList,MatListAvatarCssMatStyler,MatListBase,MatListCssMatStyler,MatListDivider,MatListIconCssMatStyler,MatListItem,MatListItemBase,MatListModule,MatListOption,MatListOptionBase,MatListSubheaderCssMatStyler,MatNavListCssMatStyler,MatSelectionList,MatSelectionListBase,MatSelectionListOptionEvent} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ViewEncapsulation,\n Renderer2,\n ElementRef,\n Input,\n ContentChildren,\n QueryList,\n AfterContentInit,\n Directive,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {MdLine, MdLineSetter} from '@angular/material/core';\nimport {coerceToNumber} from './grid-list-measure';\nexport class MdGridTile {\n _rowspan: number = 1;\n _colspan: number = 1;\n/**\n * @param {?} _renderer\n * @param {?} _element\n */\nconstructor(private _renderer: Renderer2,\nprivate _element: ElementRef) {}\n/**\n * Amount of rows that the grid tile takes up.\n * @return {?}\n */\nget rowspan() { return this._rowspan; }\n/**\n * @param {?} value\n * @return {?}\n */\nset rowspan(value) { this._rowspan = coerceToNumber(value); }\n/**\n * Amount of columns that the grid tile takes up.\n * @return {?}\n */\nget colspan() { return this._colspan; }\n/**\n * @param {?} value\n * @return {?}\n */\nset colspan(value) { this._colspan = coerceToNumber(value); }\n/**\n * Sets the style of the grid-tile element. Needs to be set manually to avoid\n * \"Changed after checked\" errors that would occur with HostBinding.\n * @param {?} property\n * @param {?} value\n * @return {?}\n */\n_setStyle(property: string, value: any): void {\n this._renderer.setStyle(this._element.nativeElement, property, value);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-grid-tile, mat-grid-tile',\n host: {\n 'class': 'mat-grid-tile',\n },\n templateUrl: 'grid-tile.html',\n styleUrls: ['grid-list.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'rowspan': [{ type: Input },],\n'colspan': [{ type: Input },],\n};\n}\n\nfunction MdGridTile_tsickle_Closure_declarations() {\n/** @type {?} */\nMdGridTile.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdGridTile.ctorParameters;\n/** @type {?} */\nMdGridTile.propDecorators;\n/** @type {?} */\nMdGridTile.prototype._rowspan;\n/** @type {?} */\nMdGridTile.prototype._colspan;\n/** @type {?} */\nMdGridTile.prototype._renderer;\n/** @type {?} */\nMdGridTile.prototype._element;\n}\n\nexport class MdGridTileText implements AfterContentInit {\n/**\n * Helper that watches the number of lines in a text area and sets\n * a class on the host element that matches the line count.\n */\n_lineSetter: MdLineSetter;\n _lines: QueryList<MdLine>;\n/**\n * @param {?} _renderer\n * @param {?} _element\n */\nconstructor(private _renderer: Renderer2,\nprivate _element: ElementRef) {}\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._lineSetter = new MdLineSetter(this._lines, this._renderer, this._element);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-grid-tile-header, mat-grid-tile-header, md-grid-tile-footer, mat-grid-tile-footer',\n templateUrl: 'grid-tile-text.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_lines': [{ type: ContentChildren, args: [MdLine, ] },],\n};\n}\n\nfunction MdGridTileText_tsickle_Closure_declarations() {\n/** @type {?} */\nMdGridTileText.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdGridTileText.ctorParameters;\n/** @type {?} */\nMdGridTileText.propDecorators;\n/**\n * Helper that watches the number of lines in a text area and sets\n * a class on the host element that matches the line count.\n * @type {?}\n */\nMdGridTileText.prototype._lineSetter;\n/** @type {?} */\nMdGridTileText.prototype._lines;\n/** @type {?} */\nMdGridTileText.prototype._renderer;\n/** @type {?} */\nMdGridTileText.prototype._element;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdGridAvatarCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-grid-avatar], [mat-grid-avatar], [mdGridAvatar], [matGridAvatar]',\n host: {'class': 'mat-grid-avatar'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdGridAvatarCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdGridAvatarCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdGridAvatarCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdGridTileHeaderCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-grid-tile-header, mat-grid-tile-header',\n host: {'class': 'mat-grid-tile-header'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdGridTileHeaderCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdGridTileHeaderCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdGridTileHeaderCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdGridTileFooterCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-grid-tile-footer, mat-grid-tile-footer',\n host: {'class': 'mat-grid-tile-footer'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdGridTileFooterCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdGridTileFooterCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdGridTileFooterCssMatStyler.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {QueryList} from '@angular/core';\nimport {MdGridTile} from './grid-tile';\n/**\n * Class for determining, from a list of tiles, the (row, col) position of each of those tiles\n * in the grid. This is necessary (rather than just rendering the tiles in normal document flow)\n * because the tiles can have a rowspan.\n * \n * The positioning algorithm greedily places each tile as soon as it encounters a gap in the grid\n * large enough to accommodate it so that the tiles still render in the same order in which they\n * are given.\n * \n * The basis of the algorithm is the use of an array to track the already placed tiles. Each\n * element of the array corresponds to a column, and the value indicates how many cells in that\n * column are already occupied; zero indicates an empty cell. Moving \"down\" to the next row\n * decrements each value in the tracking array (indicating that the column is one cell closer to\n * being free).\n * \n * \\@docs-private\n */\nexport class TileCoordinator {\n/**\n * Tracking array (see class description).\n */\ntracker: number[];\n/**\n * Index at which the search for the next gap will start.\n */\ncolumnIndex: number = 0;\n/**\n * The current row index.\n */\nrowIndex: number = 0;\n/**\n * Gets the total number of rows occupied by tiles\n * @return {?}\n */\nget rowCount(): number { return this.rowIndex + 1; }\n/**\n * Gets the total span of rows occupied by tiles.\n * Ex: A list with 1 row that contains a tile with rowspan 2 will have a total rowspan of 2.\n * @return {?}\n */\nget rowspan() {\n let /** @type {?} */ lastRowMax = Math.max(...this.tracker);\n // if any of the tiles has a rowspan that pushes it beyond the total row count,\n // add the difference to the rowcount\n return lastRowMax > 1 ? this.rowCount + lastRowMax - 1 : this.rowCount;\n }\n/**\n * The computed (row, col) position of each tile (the output).\n */\npositions: TilePosition[];\n/**\n * @param {?} numColumns\n * @param {?} tiles\n */\nconstructor(numColumns: number, tiles: QueryList<MdGridTile>) {\n this.tracker = new Array(numColumns);\n this.tracker.fill(0, 0, this.tracker.length);\n\n this.positions = tiles.map(tile => this._trackTile(tile));\n }\n/**\n * Calculates the row and col position of a tile.\n * @param {?} tile\n * @return {?}\n */\nprivate _trackTile(tile: MdGridTile): TilePosition {\n // Find a gap large enough for this tile.\n let /** @type {?} */ gapStartIndex = this._findMatchingGap(tile.colspan);\n\n // Place tile in the resulting gap.\n this._markTilePosition(gapStartIndex, tile);\n\n // The next time we look for a gap, the search will start at columnIndex, which should be\n // immediately after the tile that has just been placed.\n this.columnIndex = gapStartIndex + tile.colspan;\n\n return new TilePosition(this.rowIndex, gapStartIndex);\n }\n/**\n * Finds the next available space large enough to fit the tile.\n * @param {?} tileCols\n * @return {?}\n */\nprivate _findMatchingGap(tileCols: number): number {\n if (tileCols > this.tracker.length) {\n throw Error(`md-grid-list: tile with colspan ${tileCols} is wider than ` +\n `grid with cols=\"${this.tracker.length}\".`);\n }\n\n // Start index is inclusive, end index is exclusive.\n let /** @type {?} */ gapStartIndex = -1;\n let /** @type {?} */ gapEndIndex = -1;\n\n // Look for a gap large enough to fit the given tile. Empty spaces are marked with a zero.\n do {\n // If we've reached the end of the row, go to the next row.\n if (this.columnIndex + tileCols > this.tracker.length) {\n this._nextRow();\n continue;\n }\n\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n\n // If there are no more empty spaces in this row at all, move on to the next row.\n if (gapStartIndex == -1) {\n this._nextRow();\n continue;\n }\n\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n\n // If a gap large enough isn't found, we want to start looking immediately after the current\n // gap on the next iteration.\n this.columnIndex = gapStartIndex + 1;\n\n // Continue iterating until we find a gap wide enough for this tile.\n } while (gapEndIndex - gapStartIndex < tileCols);\n return gapStartIndex;\n }\n/**\n * Move \"down\" to the next row.\n * @return {?}\n */\nprivate _nextRow(): void {\n this.columnIndex = 0;\n this.rowIndex++;\n\n // Decrement all spaces by one to reflect moving down one row.\n for (let /** @type {?} */ i = 0; i < this.tracker.length; i++) {\n this.tracker[i] = Math.max(0, this.tracker[i] - 1);\n }\n }\n/**\n * Finds the end index (exclusive) of a gap given the index from which to start looking.\n * The gap ends when a non-zero value is found.\n * @param {?} gapStartIndex\n * @return {?}\n */\nprivate _findGapEndIndex(gapStartIndex: number): number {\n for (let /** @type {?} */ i = gapStartIndex + 1; i < this.tracker.length; i++) {\n if (this.tracker[i] != 0) {\n return i;\n }\n }\n\n // The gap ends with the end of the row.\n return this.tracker.length;\n }\n/**\n * Update the tile tracker to account for the given tile in the given space.\n * @param {?} start\n * @param {?} tile\n * @return {?}\n */\nprivate _markTilePosition(start: number, tile: MdGridTile): void {\n for (let /** @type {?} */ i = 0; i < tile.colspan; i++) {\n this.tracker[start + i] = tile.rowspan;\n }\n }\n}\n\nfunction TileCoordinator_tsickle_Closure_declarations() {\n/**\n * Tracking array (see class description).\n * @type {?}\n */\nTileCoordinator.prototype.tracker;\n/**\n * Index at which the search for the next gap will start.\n * @type {?}\n */\nTileCoordinator.prototype.columnIndex;\n/**\n * The current row index.\n * @type {?}\n */\nTileCoordinator.prototype.rowIndex;\n/**\n * The computed (row, col) position of each tile (the output).\n * @type {?}\n */\nTileCoordinator.prototype.positions;\n}\n\n/**\n * Simple data structure for tile position (row, col).\n * \\@docs-private\n */\nexport class TilePosition {\n/**\n * @param {?} row\n * @param {?} col\n */\nconstructor(public row: number,\npublic col: number) {}\n}\n\nfunction TilePosition_tsickle_Closure_declarations() {\n/** @type {?} */\nTilePosition.prototype.row;\n/** @type {?} */\nTilePosition.prototype.col;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {MdGridList} from './grid-list';\nimport {MdGridTile} from './grid-tile';\nimport {TileCoordinator} from './tile-coordinator';\n/**\n * Sets the style properties for an individual tile, given the position calculated by the\n * Tile Coordinator.\n * \\@docs-private\n * @abstract\n */\nexport abstract class TileStyler {\n _gutterSize: string;\n _rows: number = 0;\n _rowspan: number = 0;\n _cols: number;\n _direction: string;\n/**\n * Adds grid-list layout info once it is available. Cannot be processed in the constructor\n * because these properties haven't been calculated by that point.\n * \n * @param {?} gutterSize Size of the grid's gutter.\n * @param {?} tracker Instance of the TileCoordinator.\n * @param {?} cols Amount of columns in the grid.\n * @param {?} direction Layout direction of the grid.\n * @return {?}\n */\ninit(gutterSize: string, tracker: TileCoordinator, cols: number, direction: string): void {\n this._gutterSize = normalizeUnits(gutterSize);\n this._rows = tracker.rowCount;\n this._rowspan = tracker.rowspan;\n this._cols = cols;\n this._direction = direction;\n }\n/**\n * Computes the amount of space a single 1x1 tile would take up (width or height).\n * Used as a basis for other calculations.\n * @param {?} sizePercent Percent of the total grid-list space that one 1x1 tile would take up.\n * @param {?} gutterFraction Fraction of the gutter size taken up by one 1x1 tile.\n * @return {?} The size of a 1x1 tile as an expression that can be evaluated via CSS calc().\n */\ngetBaseTileSize(sizePercent: number, gutterFraction: number): string {\n // Take the base size percent (as would be if evenly dividing the size between cells),\n // and then subtracting the size of one gutter. However, since there are no gutters on the\n // edges, each tile only uses a fraction (gutterShare = numGutters / numCells) of the gutter\n // size. (Imagine having one gutter per tile, and then breaking up the extra gutter on the\n // edge evenly among the cells).\n return `(${sizePercent}% - (${this._gutterSize} * ${gutterFraction}))`;\n }\n/**\n * Gets The horizontal or vertical position of a tile, e.g., the 'top' or 'left' property value.\n * @param {?} baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @param {?} offset Number of tiles that have already been rendered in the row/column.\n * @return {?} Position of the tile as a CSS calc() expression.\n */\ngetTilePosition(baseSize: string, offset: number): string {\n // The position comes the size of a 1x1 tile plus gutter for each previous tile in the\n // row/column (offset).\n return offset === 0 ? '0' : calc(`(${baseSize} + ${this._gutterSize}) * ${offset}`);\n }\n/**\n * Gets the actual size of a tile, e.g., width or height, taking rowspan or colspan into account.\n * @param {?} baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @param {?} span The tile's rowspan or colspan.\n * @return {?} Size of the tile as a CSS calc() expression.\n */\ngetTileSize(baseSize: string, span: number): string {\n return `(${baseSize} * ${span}) + (${span - 1} * ${this._gutterSize})`;\n }\n/**\n * Sets the style properties to be applied to a tile for the given row and column index.\n * @param {?} tile Tile to which to apply the styling.\n * @param {?} rowIndex Index of the tile's row.\n * @param {?} colIndex Index of the tile's column.\n * @return {?}\n */\nsetStyle(tile: MdGridTile, rowIndex: number, colIndex: number): void {\n // Percent of the available horizontal space that one column takes up.\n let /** @type {?} */ percentWidthPerTile = 100 / this._cols;\n\n // Fraction of the vertical gutter size that each column takes up.\n // For example, if there are 5 columns, each column uses 4/5 = 0.8 times the gutter width.\n let /** @type {?} */ gutterWidthFractionPerTile = (this._cols - 1) / this._cols;\n\n this.setColStyles(tile, colIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n this.setRowStyles(tile, rowIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n }\n/**\n * Sets the horizontal placement of the tile in the list.\n * @param {?} tile\n * @param {?} colIndex\n * @param {?} percentWidth\n * @param {?} gutterWidth\n * @return {?}\n */\nsetColStyles(tile: MdGridTile, colIndex: number, percentWidth: number,\n gutterWidth: number) {\n // Base horizontal size of a column.\n let /** @type {?} */ baseTileWidth = this.getBaseTileSize(percentWidth, gutterWidth);\n\n // The width and horizontal position of each tile is always calculated the same way, but the\n // height and vertical position depends on the rowMode.\n let /** @type {?} */ side = this._direction === 'ltr' ? 'left' : 'right';\n tile._setStyle(side, this.getTilePosition(baseTileWidth, colIndex));\n tile._setStyle('width', calc(this.getTileSize(baseTileWidth, tile.colspan)));\n }\n/**\n * Calculates the total size taken up by gutters across one axis of a list.\n * @return {?}\n */\ngetGutterSpan(): string {\n return `${this._gutterSize} * (${this._rowspan} - 1)`;\n }\n/**\n * Calculates the total size taken up by tiles across one axis of a list.\n * @param {?} tileHeight Height of the tile.\n * @return {?}\n */\ngetTileSpan(tileHeight: string): string {\n return `${this._rowspan} * ${this.getTileSize(tileHeight, 1)}`;\n }\n/**\n * Sets the vertical placement of the tile in the list.\n * This method will be implemented by each type of TileStyler.\n * \\@docs-private\n * @abstract\n * @param {?} tile\n * @param {?} rowIndex\n * @param {?} percentWidth\n * @param {?} gutterWidth\n * @return {?}\n */\nsetRowStyles(tile: MdGridTile, rowIndex: number, percentWidth: number,\n gutterWidth: number) {}\n/**\n * Calculates the computed height and returns the correct style property to set.\n * This method can be implemented by each type of TileStyler.\n * \\@docs-private\n * @return {?}\n */\ngetComputedHeight(): [string, string] | null { return null; }\n/**\n * Called when the tile styler is swapped out with a different one. To be used for cleanup.\n * \\@docs-private\n * @abstract\n * @param {?} list Grid list that the styler was attached to.\n * @return {?}\n */\nreset(list: MdGridList) {}\n}\n\nfunction TileStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nTileStyler.prototype._gutterSize;\n/** @type {?} */\nTileStyler.prototype._rows;\n/** @type {?} */\nTileStyler.prototype._rowspan;\n/** @type {?} */\nTileStyler.prototype._cols;\n/** @type {?} */\nTileStyler.prototype._direction;\n}\n\n/**\n * This type of styler is instantiated when the user passes in a fixed row height.\n * Example <md-grid-list cols=\"3\" rowHeight=\"100px\">\n * \\@docs-private\n */\nexport class FixedTileStyler extends TileStyler {\n/**\n * @param {?} fixedRowHeight\n */\nconstructor(public fixedRowHeight: string) { super(); }\n/**\n * @param {?} gutterSize\n * @param {?} tracker\n * @param {?} cols\n * @param {?} direction\n * @return {?}\n */\ninit(gutterSize: string, tracker: TileCoordinator, cols: number, direction: string) {\n super.init(gutterSize, tracker, cols, direction);\n this.fixedRowHeight = normalizeUnits(this.fixedRowHeight);\n }\n/**\n * @param {?} tile\n * @param {?} rowIndex\n * @return {?}\n */\nsetRowStyles(tile: MdGridTile, rowIndex: number): void {\n tile._setStyle('top', this.getTilePosition(this.fixedRowHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(this.fixedRowHeight, tile.rowspan)));\n }\n/**\n * @return {?}\n */\ngetComputedHeight(): [string, string] {\n return [\n 'height', calc(`${this.getTileSpan(this.fixedRowHeight)} + ${this.getGutterSpan()}`)\n ];\n }\n/**\n * @param {?} list\n * @return {?}\n */\nreset(list: MdGridList) {\n list._setListStyle(['height', null]);\n\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n}\n\nfunction FixedTileStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nFixedTileStyler.prototype.fixedRowHeight;\n}\n\n/**\n * This type of styler is instantiated when the user passes in a width:height ratio\n * for the row height. Example <md-grid-list cols=\"3\" rowHeight=\"3:1\">\n * \\@docs-private\n */\nexport class RatioTileStyler extends TileStyler {\n/**\n * Ratio width:height given by user to determine row height.\n */\nrowHeightRatio: number;\n baseTileHeight: string;\n/**\n * @param {?} value\n */\nconstructor(value: string) {\n super();\n this._parseRatio(value);\n }\n/**\n * @param {?} tile\n * @param {?} rowIndex\n * @param {?} percentWidth\n * @param {?} gutterWidth\n * @return {?}\n */\nsetRowStyles(tile: MdGridTile, rowIndex: number, percentWidth: number,\n gutterWidth: number): void {\n let /** @type {?} */ percentHeightPerTile = percentWidth / this.rowHeightRatio;\n this.baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterWidth);\n\n // Use padding-top and margin-top to maintain the given aspect ratio, as\n // a percentage-based value for these properties is applied versus the *width* of the\n // containing block. See http://www.w3.org/TR/CSS2/box.html#margin-properties\n tile._setStyle('margin-top', this.getTilePosition(this.baseTileHeight, rowIndex));\n tile._setStyle('padding-top', calc(this.getTileSize(this.baseTileHeight, tile.rowspan)));\n }\n/**\n * @return {?}\n */\ngetComputedHeight(): [string, string] {\n return [\n 'padding-bottom', calc(`${this.getTileSpan(this.baseTileHeight)} + ${this.getGutterSpan()}`)\n ];\n }\n/**\n * @param {?} list\n * @return {?}\n */\nreset(list: MdGridList) {\n list._setListStyle(['padding-bottom', null]);\n\n list._tiles.forEach(tile => {\n tile._setStyle('margin-top', null);\n tile._setStyle('padding-top', null);\n });\n }\n/**\n * @param {?} value\n * @return {?}\n */\nprivate _parseRatio(value: string): void {\n const /** @type {?} */ ratioParts = value.split(':');\n\n if (ratioParts.length !== 2) {\n throw Error(`md-grid-list: invalid ratio given for row-height: \"${value}\"`);\n }\n\n this.rowHeightRatio = parseFloat(ratioParts[0]) / parseFloat(ratioParts[1]);\n }\n}\n\nfunction RatioTileStyler_tsickle_Closure_declarations() {\n/**\n * Ratio width:height given by user to determine row height.\n * @type {?}\n */\nRatioTileStyler.prototype.rowHeightRatio;\n/** @type {?} */\nRatioTileStyler.prototype.baseTileHeight;\n}\n\n/**\n * This type of styler is instantiated when the user selects a \"fit\" row height mode.\n * In other words, the row height will reflect the total height of the container divided\n * by the number of rows. Example <md-grid-list cols=\"3\" rowHeight=\"fit\">\n * \n * \\@docs-private\n */\nexport class FitTileStyler extends TileStyler {\n/**\n * @param {?} tile\n * @param {?} rowIndex\n * @return {?}\n */\nsetRowStyles(tile: MdGridTile, rowIndex: number): void {\n // Percent of the available vertical space that one row takes up.\n let /** @type {?} */ percentHeightPerTile = 100 / this._rowspan;\n\n // Fraction of the horizontal gutter size that each column takes up.\n let /** @type {?} */ gutterHeightPerTile = (this._rows - 1) / this._rows;\n\n // Base vertical size of a column.\n let /** @type {?} */ baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterHeightPerTile);\n\n tile._setStyle('top', this.getTilePosition(baseTileHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(baseTileHeight, tile.rowspan)));\n }\n/**\n * @param {?} list\n * @return {?}\n */\nreset(list: MdGridList) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n}\n/**\n * Wraps a CSS string in a calc function\n * @param {?} exp\n * @return {?}\n */\nfunction calc(exp: string): string { return `calc(${exp})`; }\n/**\n * Appends pixels to a CSS string if no units are given.\n * @param {?} value\n * @return {?}\n */\nfunction normalizeUnits(value: string): string {\n return (value.match(/px|em|rem/)) ? value : value + 'px';\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ViewEncapsulation,\n AfterContentChecked,\n OnInit,\n Input,\n ContentChildren,\n QueryList,\n Renderer2,\n ElementRef,\n Optional,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {MdGridTile} from './grid-tile';\nimport {TileCoordinator} from './tile-coordinator';\nimport {TileStyler, FitTileStyler, RatioTileStyler, FixedTileStyler} from './tile-styler';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n coerceToString,\n coerceToNumber,\n} from './grid-list-measure';\n\n\n// TODO(kara): Conditional (responsive) column count / row size.\n// TODO(kara): Re-layout on window resize / media change (debounced).\n// TODO(kara): gridTileHeader and gridTileFooter.\n\nconst /** @type {?} */ MD_FIT_MODE = 'fit';\nexport class MdGridList implements OnInit, AfterContentChecked {\n/**\n * Number of columns being rendered.\n */\nprivate _cols: number;\n/**\n * Row height value passed in by user. This can be one of three types:\n * - Number value (ex: \"100px\"): sets a fixed row height to that value\n * - Ratio value (ex: \"4:3\"): sets the row height based on width:height ratio\n * - \"Fit\" mode (ex: \"fit\"): sets the row height to total height divided by number of rows\n */\nprivate _rowHeight: string;\n/**\n * The amount of space between tiles. This will be something like '5px' or '2em'.\n */\nprivate _gutter: string = '1px';\n/**\n * Sets position and size styles for a tile\n */\nprivate _tileStyler: TileStyler;\n/**\n * Query list of tiles that are being rendered.\n */\n_tiles: QueryList<MdGridTile>;\n/**\n * @param {?} _renderer\n * @param {?} _element\n * @param {?} _dir\n */\nconstructor(\nprivate _renderer: Renderer2,\nprivate _element: ElementRef,\nprivate _dir: Directionality) {}\n/**\n * Amount of columns in the grid list.\n * @return {?}\n */\nget cols() { return this._cols; }\n/**\n * @param {?} value\n * @return {?}\n */\nset cols(value: any) { this._cols = coerceToNumber(value); }\n/**\n * Size of the grid list's gutter in pixels.\n * @return {?}\n */\nget gutterSize() { return this._gutter; }\n/**\n * @param {?} value\n * @return {?}\n */\nset gutterSize(value: any) { this._gutter = coerceToString(value); }\n/**\n * Set internal representation of row height from the user-provided value.\n * @param {?} value\n * @return {?}\n */\nset rowHeight(value: string | number) {\n const /** @type {?} */ newValue = coerceToString(value);\n\n if (newValue !== this._rowHeight) {\n this._rowHeight = newValue;\n this._setTileStyler(this._rowHeight);\n }\n }\n/**\n * @return {?}\n */\nngOnInit() {\n this._checkCols();\n this._checkRowHeight();\n }\n/**\n * The layout calculation is fairly cheap if nothing changes, so there's little cost\n * to run it frequently.\n * @return {?}\n */\nngAfterContentChecked() {\n this._layoutTiles();\n }\n/**\n * Throw a friendly error if cols property is missing\n * @return {?}\n */\nprivate _checkCols() {\n if (!this.cols) {\n throw Error(`md-grid-list: must pass in number of columns. ` +\n `Example: <md-grid-list cols=\"3\">`);\n }\n }\n/**\n * Default to equal width:height if rowHeight property is missing\n * @return {?}\n */\nprivate _checkRowHeight(): void {\n if (!this._rowHeight) {\n this._setTileStyler('1:1');\n }\n }\n/**\n * Creates correct Tile Styler subtype based on rowHeight passed in by user\n * @param {?} rowHeight\n * @return {?}\n */\nprivate _setTileStyler(rowHeight: string): void {\n if (this._tileStyler) {\n this._tileStyler.reset(this);\n }\n\n if (rowHeight === MD_FIT_MODE) {\n this._tileStyler = new FitTileStyler();\n } else if (rowHeight && rowHeight.indexOf(':') > -1) {\n this._tileStyler = new RatioTileStyler(rowHeight);\n } else {\n this._tileStyler = new FixedTileStyler(rowHeight);\n }\n }\n/**\n * Computes and applies the size and position for all children grid tiles.\n * @return {?}\n */\nprivate _layoutTiles(): void {\n const /** @type {?} */ tracker = new TileCoordinator(this.cols, this._tiles);\n const /** @type {?} */ direction = this._dir ? this._dir.value : 'ltr';\n this._tileStyler.init(this.gutterSize, tracker, this.cols, direction);\n\n this._tiles.forEach((tile, index) => {\n const /** @type {?} */ pos = tracker.positions[index];\n this._tileStyler.setStyle(tile, pos.row, pos.col);\n });\n\n this._setListStyle(this._tileStyler.getComputedHeight());\n }\n/**\n * Sets style on the main grid-list element, given the style name and value.\n * @param {?} style\n * @return {?}\n */\n_setListStyle(style: [string, string | null] | null): void {\n if (style) {\n this._renderer.setStyle(this._element.nativeElement, style[0], style[1]);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-grid-list, mat-grid-list',\n templateUrl: 'grid-list.html',\n styleUrls: ['grid-list.css'],\n host: {\n 'class': 'mat-grid-list',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: Directionality, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_tiles': [{ type: ContentChildren, args: [MdGridTile, ] },],\n'cols': [{ type: Input },],\n'gutterSize': [{ type: Input },],\n'rowHeight': [{ type: Input },],\n};\n}\n\nfunction MdGridList_tsickle_Closure_declarations() {\n/** @type {?} */\nMdGridList.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdGridList.ctorParameters;\n/** @type {?} */\nMdGridList.propDecorators;\n/**\n * Number of columns being rendered.\n * @type {?}\n */\nMdGridList.prototype._cols;\n/**\n * Row height value passed in by user. This can be one of three types:\n * - Number value (ex: \"100px\"): sets a fixed row height to that value\n * - Ratio value (ex: \"4:3\"): sets the row height based on width:height ratio\n * - \"Fit\" mode (ex: \"fit\"): sets the row height to total height divided by number of rows\n * @type {?}\n */\nMdGridList.prototype._rowHeight;\n/**\n * The amount of space between tiles. This will be something like '5px' or '2em'.\n * @type {?}\n */\nMdGridList.prototype._gutter;\n/**\n * Sets position and size styles for a tile\n * @type {?}\n */\nMdGridList.prototype._tileStyler;\n/**\n * Query list of tiles that are being rendered.\n * @type {?}\n */\nMdGridList.prototype._tiles;\n/** @type {?} */\nMdGridList.prototype._renderer;\n/** @type {?} */\nMdGridList.prototype._element;\n/** @type {?} */\nMdGridList.prototype._dir;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdLineModule, MdCommonModule} from '@angular/material/core';\nimport {\n MdGridTile, MdGridTileText, MdGridTileFooterCssMatStyler,\n MdGridTileHeaderCssMatStyler, MdGridAvatarCssMatStyler\n} from './grid-tile';\nimport {MdGridList} from './grid-list';\nexport class MdGridListModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdLineModule, MdCommonModule],\n exports: [\n MdGridList,\n MdGridTile,\n MdGridTileText,\n MdLineModule,\n MdCommonModule,\n MdGridTileHeaderCssMatStyler,\n MdGridTileFooterCssMatStyler,\n MdGridAvatarCssMatStyler\n ],\n declarations: [\n MdGridList,\n MdGridTile,\n MdGridTileText,\n MdGridTileHeaderCssMatStyler,\n MdGridTileFooterCssMatStyler,\n MdGridAvatarCssMatStyler\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdGridListModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdGridListModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdGridListModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdGridTile,MdGridListModule,MdGridList,MatGridList,MatGridListModule,MatGridTile} from './public_api';\n\nexport {MdGridAvatarCssMatStyler as ɵb,MdGridTileFooterCssMatStyler as ɵd,MdGridTileHeaderCssMatStyler as ɵc,MdGridTileText as ɵa} from './grid-tile';","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Directive,\n DoCheck,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Platform, getSupportedInputTypes} from '@angular/cdk/platform';\nimport {getMdInputUnsupportedTypeError} from './input-errors';\nimport {\n defaultErrorStateMatcher,\n ErrorOptions,\n ErrorStateMatcher,\n MD_ERROR_GLOBAL_OPTIONS\n} from '@angular/material/core';\nimport {Subject} from 'rxjs/Subject';\nimport {MdFormFieldControl} from '@angular/material/form-field';\n\n// Invalid input type. Using one of these will throw an MdInputUnsupportedTypeError.\nconst /** @type {?} */ MD_INPUT_INVALID_TYPES = [\n 'button',\n 'checkbox',\n 'color',\n 'file',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit'\n];\n\nlet /** @type {?} */ nextUniqueId = 0;\n/**\n * Directive that allows a native input to work inside a `MdFormField`.\n */\nexport class MdInput implements MdFormFieldControl<any>, OnChanges, OnDestroy, DoCheck {\n/**\n * Variables used as cache for getters and setters.\n */\nprotected _type = 'text';\n protected _disabled = false;\n protected _required = false;\n protected _id: string;\n protected _uid = `md-input-${nextUniqueId++}`;\n protected _errorOptions: ErrorOptions;\n protected _previousNativeValue = this.value;\n/**\n * Whether the input is focused.\n */\nfocused = false;\n/**\n * Whether the input is in an error state.\n */\nerrorState = false;\n/**\n * The aria-describedby attribute on the input for improved a11y.\n */\n_ariaDescribedby: string;\n/**\n * Stream that emits whenever the state of the input changes such that the wrapping `MdFormField`\n * needs to run change detection.\n */\nstateChanges = new Subject<void>();\n/**\n * Whether the element is disabled.\n * @return {?}\n */\nget disabled() { return this.ngControl ? this.ngControl.disabled : this._disabled; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n/**\n * Unique id of the element.\n * @return {?}\n */\nget id() { return this._id; }\n/**\n * @param {?} value\n * @return {?}\n */\nset id(value: string) { this._id = value || this._uid; }\n/**\n * Placeholder attribute of the element.\n */\nplaceholder: string = '';\n/**\n * Whether the element is required.\n * @return {?}\n */\nget required() { return this._required; }\n/**\n * @param {?} value\n * @return {?}\n */\nset required(value: any) { this._required = coerceBooleanProperty(value); }\n/**\n * Input type of the element.\n * @return {?}\n */\nget type() { return this._type; }\n/**\n * @param {?} value\n * @return {?}\n */\nset type(value: string) {\n this._type = value || 'text';\n this._validateType();\n\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea() && getSupportedInputTypes().has(this._type)) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'type', this._type);\n }\n }\n/**\n * A function used to control when error messages are shown.\n */\nerrorStateMatcher: ErrorStateMatcher;\n/**\n * The input element's value.\n * @return {?}\n */\nget value() { return this._elementRef.nativeElement.value; }\n/**\n * @param {?} value\n * @return {?}\n */\nset value(value: string) {\n if (value !== this.value) {\n this._elementRef.nativeElement.value = value;\n this.stateChanges.next();\n }\n }\n\n protected _neverEmptyInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'month',\n 'time',\n 'week'\n ].filter(t => getSupportedInputTypes().has(t));\n/**\n * @param {?} _elementRef\n * @param {?} _renderer\n * @param {?} _platform\n * @param {?} ngControl\n * @param {?} _parentForm\n * @param {?} _parentFormGroup\n * @param {?} errorOptions\n */\nconstructor(protected _elementRef: ElementRef,\n protected _renderer: Renderer2,\n protected _platform: Platform,\npublic ngControl: NgControl,\n protected _parentForm: NgForm,\n protected _parentFormGroup: FormGroupDirective,\n errorOptions: ErrorOptions) {\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n this._errorOptions = errorOptions ? errorOptions : {};\n this.errorStateMatcher = this._errorOptions.errorStateMatcher || defaultErrorStateMatcher;\n\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (_platform.IOS) {\n _renderer.listen(_elementRef.nativeElement, 'keyup', (event: Event) => {\n let el = event.target as HTMLInputElement;\n if (!el.value && !el.selectionStart && !el.selectionEnd) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting `1, 1` fixes it for the first\n // time that you type text and then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n });\n }\n }\n/**\n * @return {?}\n */\nngOnChanges() {\n this.stateChanges.next();\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this.stateChanges.complete();\n }\n/**\n * @return {?}\n */\nngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this._updateErrorState();\n } else {\n // When the input isn't used together with `@angular/forms`, we need to check manually for\n // changes to the native `value` property in order to update the floating label.\n this._dirtyCheckNativeValue();\n }\n }\n/**\n * Callback for the cases where the focused state of the input changes.\n * @param {?} isFocused\n * @return {?}\n */\n_focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n/**\n * @return {?}\n */\n_onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n/**\n * Re-evaluates the error state. This is only relevant with \\@angular/forms.\n * @return {?}\n */\nprotected _updateErrorState() {\n const /** @type {?} */ oldState = this.errorState;\n const /** @type {?} */ ngControl = this.ngControl;\n const /** @type {?} */ parent = this._parentFormGroup || this._parentForm;\n const /** @type {?} */ newState = ngControl && this.errorStateMatcher( /** @type {?} */((ngControl.control as FormControl)), parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n/**\n * Does some manual dirty checking on the native input `value` property.\n * @return {?}\n */\nprotected _dirtyCheckNativeValue() {\n const /** @type {?} */ newValue = this.value;\n\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n/**\n * Make sure the input is a supported type.\n * @return {?}\n */\nprotected _validateType() {\n if (MD_INPUT_INVALID_TYPES.indexOf(this._type) > -1) {\n throw getMdInputUnsupportedTypeError(this._type);\n }\n }\n/**\n * Checks whether the input type is one of the types that are never empty.\n * @return {?}\n */\nprotected _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n/**\n * Checks whether the input is invalid based on the native validation.\n * @return {?}\n */\nprotected _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let /** @type {?} */ validity = ( /** @type {?} */((this._elementRef.nativeElement as HTMLInputElement))).validity;\n return validity && validity.badInput;\n }\n/**\n * Determines if the component host is a textarea. If not recognizable it returns false.\n * @return {?}\n */\nprotected _isTextarea() {\n let /** @type {?} */ nativeElement = this._elementRef.nativeElement;\n\n // In Universal, we don't have access to `nodeName`, but the same can be achieved with `name`.\n // Note that this shouldn't be necessary once Angular switches to an API that resembles the\n // DOM closer.\n let /** @type {?} */ nodeName = this._platform.isBrowser ? nativeElement.nodeName : nativeElement.name;\n return nodeName ? nodeName.toLowerCase() === 'textarea' : false;\n }\n/**\n * @return {?}\n */\nget empty(): boolean {\n return !this._isNeverEmpty() &&\n (this.value == null || this.value === '') &&\n // Check if the input contains bad input. If so, we know that it only appears empty because\n // the value failed to parse. From the user's perspective it is not empty.\n // TODO(mmalerba): Add e2e test for bad input case.\n !this._isBadInput();\n }\n/**\n * @param {?} ids\n * @return {?}\n */\nsetDescribedByIds(ids: string[]) { this._ariaDescribedby = ids.join(' '); }\n/**\n * @return {?}\n */\nfocus() { this._elementRef.nativeElement.focus(); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `input[mdInput], textarea[mdInput], input[matInput], textarea[matInput]`,\n host: {\n 'class': 'mat-input-element mat-form-field-autofill-control',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[id]': 'id',\n '[placeholder]': 'placeholder',\n '[disabled]': 'disabled',\n '[required]': 'required',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-invalid]': 'errorState',\n '(blur)': '_focusChanged(false)',\n '(focus)': '_focusChanged(true)',\n '(input)': '_onInput()',\n },\n providers: [{provide: MdFormFieldControl, useExisting: MdInput}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: Renderer2, },\n{type: Platform, },\n{type: NgControl, decorators: [{ type: Optional }, { type: Self }, ]},\n{type: NgForm, decorators: [{ type: Optional }, ]},\n{type: FormGroupDirective, decorators: [{ type: Optional }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_ERROR_GLOBAL_OPTIONS, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'disabled': [{ type: Input },],\n'id': [{ type: Input },],\n'placeholder': [{ type: Input },],\n'required': [{ type: Input },],\n'type': [{ type: Input },],\n'errorStateMatcher': [{ type: Input },],\n};\n}\n\nfunction MdInput_tsickle_Closure_declarations() {\n/** @type {?} */\nMdInput.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdInput.ctorParameters;\n/** @type {?} */\nMdInput.propDecorators;\n/**\n * Variables used as cache for getters and setters.\n * @type {?}\n */\nMdInput.prototype._type;\n/** @type {?} */\nMdInput.prototype._disabled;\n/** @type {?} */\nMdInput.prototype._required;\n/** @type {?} */\nMdInput.prototype._id;\n/** @type {?} */\nMdInput.prototype._uid;\n/** @type {?} */\nMdInput.prototype._errorOptions;\n/** @type {?} */\nMdInput.prototype._previousNativeValue;\n/**\n * Whether the input is focused.\n * @type {?}\n */\nMdInput.prototype.focused;\n/**\n * Whether the input is in an error state.\n * @type {?}\n */\nMdInput.prototype.errorState;\n/**\n * The aria-describedby attribute on the input for improved a11y.\n * @type {?}\n */\nMdInput.prototype._ariaDescribedby;\n/**\n * Stream that emits whenever the state of the input changes such that the wrapping `MdFormField`\n * needs to run change detection.\n * @type {?}\n */\nMdInput.prototype.stateChanges;\n/**\n * Placeholder attribute of the element.\n * @type {?}\n */\nMdInput.prototype.placeholder;\n/**\n * A function used to control when error messages are shown.\n * @type {?}\n */\nMdInput.prototype.errorStateMatcher;\n/** @type {?} */\nMdInput.prototype._neverEmptyInputTypes;\n/** @type {?} */\nMdInput.prototype._elementRef;\n/** @type {?} */\nMdInput.prototype._renderer;\n/** @type {?} */\nMdInput.prototype._platform;\n/** @type {?} */\nMdInput.prototype.ngControl;\n/** @type {?} */\nMdInput.prototype._parentForm;\n/** @type {?} */\nMdInput.prototype._parentFormGroup;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, ElementRef, Input, AfterViewInit, DoCheck} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\n/**\n * Directive to automatically resize a textarea to fit its content.\n */\nexport class MdTextareaAutosize implements AfterViewInit, DoCheck {\n/**\n * Keep track of the previous textarea value to avoid resizing when the value hasn't changed.\n */\nprivate _previousValue: string;\nprivate _minRows: number;\nprivate _maxRows: number;\n/**\n * @return {?}\n */\nget minRows() { return this._minRows; }\n/**\n * @param {?} value\n * @return {?}\n */\nset minRows(value: number) {\n this._minRows = value;\n this._setMinHeight();\n }\n/**\n * @return {?}\n */\nget maxRows() { return this._maxRows; }\n/**\n * @param {?} value\n * @return {?}\n */\nset maxRows(value: number) {\n this._maxRows = value;\n this._setMaxHeight();\n }\n/**\n * @return {?}\n */\nget _matAutosizeMinRows() { return this.minRows; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matAutosizeMinRows(v) { this.minRows = v; }\n/**\n * @return {?}\n */\nget _matAutosizeMaxRows() { return this.maxRows; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matAutosizeMaxRows(v) { this.maxRows = v; }\n/**\n * Cached height of a textarea with a single row.\n */\nprivate _cachedLineHeight: number;\n/**\n * @param {?} _elementRef\n * @param {?} _platform\n */\nconstructor(private _elementRef: ElementRef,\nprivate _platform: Platform) {}\n/**\n * Sets the minimum height of the textarea as determined by minRows.\n * @return {?}\n */\n_setMinHeight(): void {\n const /** @type {?} */ minHeight = this.minRows && this._cachedLineHeight ?\n `${this.minRows * this._cachedLineHeight}px` : null;\n\n if (minHeight) {\n this._setTextareaStyle('minHeight', minHeight);\n }\n }\n/**\n * Sets the maximum height of the textarea as determined by maxRows.\n * @return {?}\n */\n_setMaxHeight(): void {\n const /** @type {?} */ maxHeight = this.maxRows && this._cachedLineHeight ?\n `${this.maxRows * this._cachedLineHeight}px` : null;\n\n if (maxHeight) {\n this._setTextareaStyle('maxHeight', maxHeight);\n }\n }\n/**\n * @return {?}\n */\nngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._cacheTextareaLineHeight();\n this.resizeToFitContent();\n }\n }\n/**\n * Sets a style property on the textarea element.\n * @param {?} property\n * @param {?} value\n * @return {?}\n */\nprivate _setTextareaStyle(property: string, value: string): void {\n const /** @type {?} */ textarea = /** @type {?} */(( this._elementRef.nativeElement as HTMLTextAreaElement));\n textarea.style[property] = value;\n }\n/**\n * Cache the height of a single-row textarea.\n * \n * We need to know how large a single \"row\" of a textarea is in order to apply minRows and\n * maxRows. For the initial version, we will assume that the height of a single line in the\n * textarea does not ever change.\n * @return {?}\n */\nprivate _cacheTextareaLineHeight(): void {\n let /** @type {?} */ textarea = /** @type {?} */(( this._elementRef.nativeElement as HTMLTextAreaElement));\n\n // Use a clone element because we have to override some styles.\n let /** @type {?} */ textareaClone = /** @type {?} */(( textarea.cloneNode(false) as HTMLTextAreaElement));\n textareaClone.rows = 1;\n\n // Use `position: absolute` so that this doesn't cause a browser layout and use\n // `visibility: hidden` so that nothing is rendered. Clear any other styles that\n // would affect the height.\n textareaClone.style.position = 'absolute';\n textareaClone.style.visibility = 'hidden';\n textareaClone.style.border = 'none';\n textareaClone.style.padding = '0';\n textareaClone.style.height = '';\n textareaClone.style.minHeight = '';\n textareaClone.style.maxHeight = '';\n\n // In Firefox it happens that textarea elements are always bigger than the specified amount\n // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.\n // As a workaround that removes the extra space for the scrollbar, we can just set overflow\n // to hidden. This ensures that there is no invalid calculation of the line height.\n // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654\n textareaClone.style.overflow = 'hidden'; /** @type {?} */((\n\n textarea.parentNode)).appendChild(textareaClone);\n this._cachedLineHeight = textareaClone.clientHeight; /** @type {?} */((\n textarea.parentNode)).removeChild(textareaClone);\n\n // Min and max heights have to be re-calculated if the cached line height changes\n this._setMinHeight();\n this._setMaxHeight();\n }\n/**\n * @return {?}\n */\nngDoCheck() {\n this.resizeToFitContent();\n }\n/**\n * Resize the textarea to fit its content.\n * @return {?}\n */\nresizeToFitContent() {\n const /** @type {?} */ textarea = /** @type {?} */(( this._elementRef.nativeElement as HTMLTextAreaElement));\n const /** @type {?} */ value = textarea.value;\n\n // Only resize of the value changed since these calculations can be expensive.\n if (value === this._previousValue) {\n return;\n }\n\n // Reset the textarea height to auto in order to shrink back to its default size.\n // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.\n textarea.style.height = 'auto';\n textarea.style.overflow = 'hidden';\n\n // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n textarea.style.height = `${textarea.scrollHeight}px`;\n textarea.style.overflow = '';\n\n this._previousValue = value;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `textarea[md-autosize], textarea[mdTextareaAutosize],\n textarea[mat-autosize], textarea[matTextareaAutosize]`,\n exportAs: 'mdTextareaAutosize, matTextareaAutosize',\n host: {\n // Textarea elements that have the directive applied should have a single row by default.\n // Browsers normally show two rows by default and therefore this limits the minRows binding.\n 'rows': '1',\n },\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: Platform, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'minRows': [{ type: Input, args: ['mdAutosizeMinRows', ] },],\n'maxRows': [{ type: Input, args: ['mdAutosizeMaxRows', ] },],\n'_matAutosizeMinRows': [{ type: Input, args: ['matAutosizeMinRows', ] },],\n'_matAutosizeMaxRows': [{ type: Input, args: ['matAutosizeMaxRows', ] },],\n};\n}\n\nfunction MdTextareaAutosize_tsickle_Closure_declarations() {\n/** @type {?} */\nMdTextareaAutosize.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdTextareaAutosize.ctorParameters;\n/** @type {?} */\nMdTextareaAutosize.propDecorators;\n/**\n * Keep track of the previous textarea value to avoid resizing when the value hasn't changed.\n * @type {?}\n */\nMdTextareaAutosize.prototype._previousValue;\n/** @type {?} */\nMdTextareaAutosize.prototype._minRows;\n/** @type {?} */\nMdTextareaAutosize.prototype._maxRows;\n/**\n * Cached height of a textarea with a single row.\n * @type {?}\n */\nMdTextareaAutosize.prototype._cachedLineHeight;\n/** @type {?} */\nMdTextareaAutosize.prototype._elementRef;\n/** @type {?} */\nMdTextareaAutosize.prototype._platform;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdInput} from './input';\nimport {MdTextareaAutosize} from './autosize';\nimport {CommonModule} from '@angular/common';\nimport {PlatformModule} from '@angular/material/core';\nimport {MdFormFieldModule} from '@angular/material/form-field';\nexport class MdInputModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n declarations: [\n MdInput,\n MdTextareaAutosize,\n ],\n imports: [\n CommonModule,\n MdFormFieldModule,\n PlatformModule,\n ],\n exports: [\n // We re-export the `MdFormFieldModule` since `MdInput` will almost always be used together with\n // `MdFormField`.\n MdFormFieldModule,\n MdInput,\n MdTextareaAutosize,\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdInputModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdInputModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdInputModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdInputModule,MdTextareaAutosize,MdInput,getMdInputUnsupportedTypeError,MatInput,MatInputModule,MatTextareaAutosize} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE} from '@angular/cdk/keycodes';\nimport {\n Overlay,\n OverlayRef,\n OverlayConfig,\n PositionStrategy,\n RepositionScrollStrategy,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {first} from '@angular/cdk/rxjs';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {DateAdapter, MATERIAL_COMPATIBILITY_MODE} from '@angular/material/core';\nimport {MdDialog, MdDialogRef} from '@angular/material/dialog';\nimport {DOCUMENT} from '@angular/platform-browser';\nimport {Subject} from 'rxjs/Subject';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MdCalendar} from './calendar';\nimport {coerceDateProperty} from './coerce-date-property';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {MdDatepickerInput} from './datepicker-input';\n/**\n * Used to generate a unique ID for each datepicker instance.\n */\nlet datepickerUid = 0;\n/**\n * Injection token that determines the scroll handling while the calendar is open.\n */\nexport const MD_DATEPICKER_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('md-datepicker-scroll-strategy');\n/**\n * \\@docs-private\n * @param {?} overlay\n * @return {?}\n */\nexport function MD_DATEPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n () => RepositionScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n/**\n * \\@docs-private\n */\nexport const MD_DATEPICKER_SCROLL_STRATEGY_PROVIDER = {\n provide: MD_DATEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MD_DATEPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/**\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\n * MdCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * \\@docs-private\n */\nexport class MdDatepickerContent<D> implements AfterContentInit {\n datepicker: MdDatepicker<D>;\n\n _calendar: MdCalendar<D>;\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._calendar._focusActiveCell();\n }\n/**\n * Handles keydown event on datepicker content.\n * @param {?} event The event.\n * @return {?}\n */\n_handleKeydown(event: KeyboardEvent): void {\n if (event.keyCode === ESCAPE) {\n this.datepicker.close();\n event.preventDefault();\n event.stopPropagation();\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-datepicker-content, mat-datepicker-content',\n templateUrl: 'datepicker-content.html',\n styleUrls: ['datepicker-content.css'],\n host: {\n 'class': 'mat-datepicker-content',\n '[class.mat-datepicker-content-touch]': 'datepicker.touchUi',\n '(keydown)': '_handleKeydown($event)',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_calendar': [{ type: ViewChild, args: [MdCalendar, ] },],\n};\n}\n\nfunction MdDatepickerContent_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDatepickerContent.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDatepickerContent.ctorParameters;\n/** @type {?} */\nMdDatepickerContent.propDecorators;\n/** @type {?} */\nMdDatepickerContent.prototype.datepicker;\n/** @type {?} */\nMdDatepickerContent.prototype._calendar;\n}\n\n/**\n * Component responsible for managing the datepicker popup/dialog.\n */\nexport class MdDatepicker<D> implements OnDestroy {\n/**\n * The date to open the calendar to initially.\n * @return {?}\n */\nget startAt(): D | null {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || (this._datepickerInput ? this._datepickerInput.value : null);\n }\n/**\n * @param {?} date\n * @return {?}\n */\nset startAt(date: D | null) { this._startAt = coerceDateProperty(this._dateAdapter, date); }\nprivate _startAt: D | null;\n/**\n * The view that the calendar should start in.\n */\nstartView: 'month' | 'year' = 'month';\n/**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a popup and elements have more padding to allow for bigger touch targets.\n */\ntouchUi = false;\n/**\n * Whether the datepicker pop-up should be disabled.\n * @return {?}\n */\nget disabled() {\n return this._disabled === undefined ? this._datepickerInput.disabled : this._disabled;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: any) {\n const /** @type {?} */ newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._disabledChange.next(newValue);\n }\n }\nprivate _disabled: boolean;\n/**\n * Emits new selected date when selected date changes.\n * @deprecated Switch to the `dateChange` and `dateInput` binding on the input element.\n */\nselectedChanged = new EventEmitter<D>();\n/**\n * Whether the calendar is open.\n */\nopened = false;\n/**\n * The id for the datepicker calendar.\n */\nid = `md-datepicker-${datepickerUid++}`;\n/**\n * The currently selected date.\n * @return {?}\n */\nget _selected(): D | null { return this._validSelected; }\n/**\n * @param {?} value\n * @return {?}\n */\nset _selected(value: D | null) { this._validSelected = value; }\nprivate _validSelected: D | null = null;\n/**\n * The minimum selectable date.\n * @return {?}\n */\nget _minDate(): D | null {\n return this._datepickerInput && this._datepickerInput.min;\n }\n/**\n * The maximum selectable date.\n * @return {?}\n */\nget _maxDate(): D | null {\n return this._datepickerInput && this._datepickerInput.max;\n }\n/**\n * @return {?}\n */\nget _dateFilter(): (date: D | null) => boolean {\n return this._datepickerInput && this._datepickerInput._dateFilter;\n }\n/**\n * A reference to the overlay when the calendar is opened as a popup.\n */\nprivate _popupRef: OverlayRef;\n/**\n * A reference to the dialog when the calendar is opened as a dialog.\n */\nprivate _dialogRef: MdDialogRef<any> | null;\n/**\n * A portal containing the calendar for this datepicker.\n */\nprivate _calendarPortal: ComponentPortal<MdDatepickerContent<D>>;\n/**\n * The element that was focused before the datepicker was opened.\n */\nprivate _focusedElementBeforeOpen: HTMLElement | null = null;\nprivate _inputSubscription = Subscription.EMPTY;\n/**\n * The input element this datepicker is associated with.\n */\n_datepickerInput: MdDatepickerInput<D>;\n/**\n * Emits when the datepicker is disabled.\n */\n_disabledChange = new Subject<boolean>();\n/**\n * @param {?} _dialog\n * @param {?} _overlay\n * @param {?} _ngZone\n * @param {?} _viewContainerRef\n * @param {?} _scrollStrategy\n * @param {?} _dateAdapter\n * @param {?} _dir\n * @param {?} _document\n */\nconstructor(private _dialog: MdDialog,\nprivate _overlay: Overlay,\nprivate _ngZone: NgZone,\nprivate _viewContainerRef: ViewContainerRef,\nprivate _scrollStrategy,\nprivate _dateAdapter: DateAdapter<D>,\nprivate _dir: Directionality,\nprivate _document: any) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this.close();\n this._inputSubscription.unsubscribe();\n this._disabledChange.complete();\n\n if (this._popupRef) {\n this._popupRef.dispose();\n }\n }\n/**\n * Selects the given date\n * @param {?} date\n * @return {?}\n */\n_select(date: D): void {\n let /** @type {?} */ oldValue = this._selected;\n this._selected = date;\n if (!this._dateAdapter.sameDate(oldValue, this._selected)) {\n this.selectedChanged.emit(date);\n }\n }\n/**\n * Register an input with this datepicker.\n * @param {?} input The datepicker input to register with this datepicker.\n * @return {?}\n */\n_registerInput(input: MdDatepickerInput<D>): void {\n if (this._datepickerInput) {\n throw Error('An MdDatepicker can only be associated with a single input.');\n }\n this._datepickerInput = input;\n this._inputSubscription =\n this._datepickerInput._valueChange.subscribe((value: D | null) => this._selected = value);\n }\n/**\n * Open the calendar.\n * @return {?}\n */\nopen(): void {\n if (this.opened || this.disabled) {\n return;\n }\n if (!this._datepickerInput) {\n throw Error('Attempted to open an MdDatepicker with no associated input.');\n }\n if (this._document) {\n this._focusedElementBeforeOpen = this._document.activeElement;\n }\n\n this.touchUi ? this._openAsDialog() : this._openAsPopup();\n this.opened = true;\n }\n/**\n * Close the calendar.\n * @return {?}\n */\nclose(): void {\n if (!this.opened) {\n return;\n }\n if (this._popupRef && this._popupRef.hasAttached()) {\n this._popupRef.detach();\n }\n if (this._dialogRef) {\n this._dialogRef.close();\n this._dialogRef = null;\n }\n if (this._calendarPortal && this._calendarPortal.isAttached) {\n this._calendarPortal.detach();\n }\n if (this._focusedElementBeforeOpen &&\n typeof this._focusedElementBeforeOpen.focus === 'function') {\n\n this._focusedElementBeforeOpen.focus();\n this._focusedElementBeforeOpen = null;\n }\n\n this.opened = false;\n }\n/**\n * Open the calendar as a dialog.\n * @return {?}\n */\nprivate _openAsDialog(): void {\n this._dialogRef = this._dialog.open(MdDatepickerContent, {\n direction: this._dir ? this._dir.value : 'ltr',\n viewContainerRef: this._viewContainerRef,\n });\n this._dialogRef.afterClosed().subscribe(() => this.close());\n this._dialogRef.componentInstance.datepicker = this;\n }\n/**\n * Open the calendar as a popup.\n * @return {?}\n */\nprivate _openAsPopup(): void {\n if (!this._calendarPortal) {\n this._calendarPortal = new ComponentPortal(MdDatepickerContent, this._viewContainerRef);\n }\n\n if (!this._popupRef) {\n this._createPopup();\n }\n\n if (!this._popupRef.hasAttached()) {\n let /** @type {?} */ componentRef: ComponentRef<MdDatepickerContent<D>> =\n this._popupRef.attach(this._calendarPortal);\n componentRef.instance.datepicker = this;\n\n // Update the position once the calendar has rendered.\n first.call(this._ngZone.onStable.asObservable()).subscribe(() => {\n this._popupRef.updatePosition();\n });\n }\n\n this._popupRef.backdropClick().subscribe(() => this.close());\n }\n/**\n * Create the popup.\n * @return {?}\n */\nprivate _createPopup(): void {\n const /** @type {?} */ overlayState = new OverlayConfig({\n positionStrategy: this._createPopupPositionStrategy(),\n hasBackdrop: true,\n backdropClass: 'mat-overlay-transparent-backdrop',\n direction: this._dir ? this._dir.value : 'ltr',\n scrollStrategy: this._scrollStrategy()\n });\n\n this._popupRef = this._overlay.create(overlayState);\n }\n/**\n * Create the popup PositionStrategy.\n * @return {?}\n */\nprivate _createPopupPositionStrategy(): PositionStrategy {\n return this._overlay.position()\n .connectedTo(this._datepickerInput.getPopupConnectionElementRef(),\n {originX: 'start', originY: 'bottom'},\n {overlayX: 'start', overlayY: 'top'}\n )\n .withFallbackPosition(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' }\n )\n .withFallbackPosition(\n {originX: 'end', originY: 'bottom'},\n {overlayX: 'end', overlayY: 'top'}\n )\n .withFallbackPosition(\n { originX: 'end', originY: 'top' },\n { overlayX: 'end', overlayY: 'bottom' }\n );\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-datepicker, mat-datepicker',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdDialog, },\n{type: Overlay, },\n{type: NgZone, },\n{type: ViewContainerRef, },\n{type: undefined, decorators: [{ type: Inject, args: [MD_DATEPICKER_SCROLL_STRATEGY, ] }, ]},\n{type: DateAdapter, decorators: [{ type: Optional }, ]},\n{type: Directionality, decorators: [{ type: Optional }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'startAt': [{ type: Input },],\n'startView': [{ type: Input },],\n'touchUi': [{ type: Input },],\n'disabled': [{ type: Input },],\n'selectedChanged': [{ type: Output },],\n};\n}\n\nfunction MdDatepicker_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDatepicker.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDatepicker.ctorParameters;\n/** @type {?} */\nMdDatepicker.propDecorators;\n/** @type {?} */\nMdDatepicker.prototype._startAt;\n/**\n * The view that the calendar should start in.\n * @type {?}\n */\nMdDatepicker.prototype.startView;\n/**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a popup and elements have more padding to allow for bigger touch targets.\n * @type {?}\n */\nMdDatepicker.prototype.touchUi;\n/** @type {?} */\nMdDatepicker.prototype._disabled;\n/**\n * Emits new selected date when selected date changes.\n * @deprecated Switch to the `dateChange` and `dateInput` binding on the input element.\n * @type {?}\n */\nMdDatepicker.prototype.selectedChanged;\n/**\n * Whether the calendar is open.\n * @type {?}\n */\nMdDatepicker.prototype.opened;\n/**\n * The id for the datepicker calendar.\n * @type {?}\n */\nMdDatepicker.prototype.id;\n/** @type {?} */\nMdDatepicker.prototype._validSelected;\n/**\n * A reference to the overlay when the calendar is opened as a popup.\n * @type {?}\n */\nMdDatepicker.prototype._popupRef;\n/**\n * A reference to the dialog when the calendar is opened as a dialog.\n * @type {?}\n */\nMdDatepicker.prototype._dialogRef;\n/**\n * A portal containing the calendar for this datepicker.\n * @type {?}\n */\nMdDatepicker.prototype._calendarPortal;\n/**\n * The element that was focused before the datepicker was opened.\n * @type {?}\n */\nMdDatepicker.prototype._focusedElementBeforeOpen;\n/** @type {?} */\nMdDatepicker.prototype._inputSubscription;\n/**\n * The input element this datepicker is associated with.\n * @type {?}\n */\nMdDatepicker.prototype._datepickerInput;\n/**\n * Emits when the datepicker is disabled.\n * @type {?}\n */\nMdDatepicker.prototype._disabledChange;\n/** @type {?} */\nMdDatepicker.prototype._dialog;\n/** @type {?} */\nMdDatepicker.prototype._overlay;\n/** @type {?} */\nMdDatepicker.prototype._ngZone;\n/** @type {?} */\nMdDatepicker.prototype._viewContainerRef;\n/** @type {?} */\nMdDatepicker.prototype._scrollStrategy;\n/** @type {?} */\nMdDatepicker.prototype._dateAdapter;\n/** @type {?} */\nMdDatepicker.prototype._dir;\n/** @type {?} */\nMdDatepicker.prototype._document;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {DOWN_ARROW} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Output,\n Renderer2,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {DateAdapter, MD_DATE_FORMATS, MdDateFormats} from '@angular/material/core';\nimport {MdFormField} from '@angular/material/form-field';\nimport {Subscription} from 'rxjs/Subscription';\nimport {coerceDateProperty} from './coerce-date-property';\nimport {MdDatepicker} from './datepicker';\nimport {createMissingDateImplError} from './datepicker-errors';\n\n\nexport const /** @type {?} */ MD_DATEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MdDatepickerInput),\n multi: true\n};\n\n\nexport const /** @type {?} */ MD_DATEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MdDatepickerInput),\n multi: true\n};\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MdDatepickerInputEvent instead.\n */\nexport class MdDatepickerInputEvent<D> {\n/**\n * The new value for the target datepicker input.\n */\nvalue: D | null;\n/**\n * @param {?} target\n * @param {?} targetElement\n */\nconstructor(public target: MdDatepickerInput<D>,\npublic targetElement: HTMLElement) {\n this.value = this.target.value;\n }\n}\n\nfunction MdDatepickerInputEvent_tsickle_Closure_declarations() {\n/**\n * The new value for the target datepicker input.\n * @type {?}\n */\nMdDatepickerInputEvent.prototype.value;\n/** @type {?} */\nMdDatepickerInputEvent.prototype.target;\n/** @type {?} */\nMdDatepickerInputEvent.prototype.targetElement;\n}\n\n/**\n * Directive used to connect an input to a MdDatepicker.\n */\nexport class MdDatepickerInput<D> implements AfterContentInit, ControlValueAccessor, OnDestroy,\n Validator {\n/**\n * The datepicker that this input is associated with.\n * @param {?} value\n * @return {?}\n */\nset mdDatepicker(value: MdDatepicker<D>) {\n this.registerDatepicker(value);\n }\n _datepicker: MdDatepicker<D>;\n/**\n * @param {?} value\n * @return {?}\n */\nprivate registerDatepicker(value: MdDatepicker<D>) {\n if (value) {\n this._datepicker = value;\n this._datepicker._registerInput(this);\n }\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset matDatepicker(value: MdDatepicker<D>) {\n // Note that we don't set `this.mdDatepicker = value` here,\n // because that line gets stripped by the JS compiler.\n this.registerDatepicker(value);\n }\n/**\n * @param {?} filter\n * @return {?}\n */\nset mdDatepickerFilter(filter: (date: D | null) => boolean) {\n this._dateFilter = filter;\n this._validatorOnChange();\n }\n _dateFilter: (date: D | null) => boolean;\n/**\n * @param {?} filter\n * @return {?}\n */\nset matDatepickerFilter(filter: (date: D | null) => boolean) {\n this.mdDatepickerFilter = filter;\n }\n/**\n * The value of the input.\n * @return {?}\n */\nget value(): D | null {\n return this._value;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset value(value: D | null) {\n value = coerceDateProperty(this._dateAdapter, value);\n this._lastValueValid = !value || this._dateAdapter.isValid(value);\n value = this._getValidDateOrNull(value);\n\n let /** @type {?} */ oldDate = this.value;\n this._value = value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value',\n value ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '');\n if (!this._dateAdapter.sameDate(oldDate, value)) {\n this._valueChange.emit(value);\n }\n }\nprivate _value: D | null;\n/**\n * The minimum valid date.\n * @return {?}\n */\nget min(): D | null { return this._min; }\n/**\n * @param {?} value\n * @return {?}\n */\nset min(value: D | null) {\n this._min = coerceDateProperty(this._dateAdapter, value);\n this._validatorOnChange();\n }\nprivate _min: D | null;\n/**\n * The maximum valid date.\n * @return {?}\n */\nget max(): D | null { return this._max; }\n/**\n * @param {?} value\n * @return {?}\n */\nset max(value: D | null) {\n this._max = coerceDateProperty(this._dateAdapter, value);\n this._validatorOnChange();\n }\nprivate _max: D | null;\n/**\n * Whether the datepicker-input is disabled.\n * @return {?}\n */\nget disabled() { return this._disabled; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: any) {\n const /** @type {?} */ newValue = coerceBooleanProperty(value);\n\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this._disabledChange.emit(newValue);\n }\n }\nprivate _disabled: boolean;\n/**\n * Emits when a `change` event is fired on this `<input>`.\n */\ndateChange = new EventEmitter<MdDatepickerInputEvent<D>>();\n/**\n * Emits when an `input` event is fired on this `<input>`.\n */\ndateInput = new EventEmitter<MdDatepickerInputEvent<D>>();\n/**\n * Emits when the value changes (either due to user input or programmatic change).\n */\n_valueChange = new EventEmitter<D|null>();\n/**\n * Emits when the disabled state has changed\n */\n_disabledChange = new EventEmitter<boolean>();\n\n _onTouched = () => {};\nprivate _cvaOnChange: (value: any) => void = () => {};\nprivate _validatorOnChange = () => {};\nprivate _datepickerSubscription = Subscription.EMPTY;\nprivate _localeSubscription = Subscription.EMPTY;\n/**\n * The form control validator for whether the input parses.\n */\nprivate _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this._lastValueValid ?\n null : {'mdDatepickerParse': {'text': this._elementRef.nativeElement.value}};\n }\n/**\n * The form control validator for the min date.\n */\nprivate _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = coerceDateProperty(this._dateAdapter, control.value);\n return (!this.min || !controlValue ||\n this._dateAdapter.compareDate(this.min, controlValue) <= 0) ?\n null : {'mdDatepickerMin': {'min': this.min, 'actual': controlValue}};\n }\n/**\n * The form control validator for the max date.\n */\nprivate _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = coerceDateProperty(this._dateAdapter, control.value);\n return (!this.max || !controlValue ||\n this._dateAdapter.compareDate(this.max, controlValue) >= 0) ?\n null : {'mdDatepickerMax': {'max': this.max, 'actual': controlValue}};\n }\n/**\n * The form control validator for the date filter.\n */\nprivate _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = coerceDateProperty(this._dateAdapter, control.value);\n return !this._dateFilter || !controlValue || this._dateFilter(controlValue) ?\n null : {'mdDatepickerFilter': true};\n }\n/**\n * The combined form control validator for this input.\n */\nprivate _validator: ValidatorFn | null =\n Validators.compose(\n [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator]);\n/**\n * Whether the last value set on the input was valid.\n */\nprivate _lastValueValid = false;\n/**\n * @param {?} _elementRef\n * @param {?} _renderer\n * @param {?} _dateAdapter\n * @param {?} _dateFormats\n * @param {?} _mdFormField\n */\nconstructor(\nprivate _elementRef: ElementRef,\nprivate _renderer: Renderer2,\nprivate _dateAdapter: DateAdapter<D>,\nprivate _dateFormats: MdDateFormats,\nprivate _mdFormField: MdFormField) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MD_DATE_FORMATS');\n }\n\n // Update the displayed date when the locale changes.\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n this.value = this.value;\n });\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n if (this._datepicker) {\n this._datepickerSubscription =\n this._datepicker.selectedChanged.subscribe((selected: D) => {\n this.value = selected;\n this._cvaOnChange(selected);\n this._onTouched();\n this.dateInput.emit(new MdDatepickerInputEvent(this, this._elementRef.nativeElement));\n this.dateChange.emit(new MdDatepickerInputEvent(this, this._elementRef.nativeElement));\n });\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._datepickerSubscription.unsubscribe();\n this._localeSubscription.unsubscribe();\n this._valueChange.complete();\n this._disabledChange.complete();\n }\n/**\n * @param {?} fn\n * @return {?}\n */\nregisterOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n/**\n * @param {?} c\n * @return {?}\n */\nvalidate(c: AbstractControl): ValidationErrors | null {\n return this._validator ? this._validator(c) : null;\n }\n/**\n * Gets the element that the datepicker popup should be connected to.\n * @return {?} The element to connect the popup to.\n */\ngetPopupConnectionElementRef(): ElementRef {\n return this._mdFormField ? this._mdFormField.underlineRef : this._elementRef;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nwriteValue(value: D): void {\n this.value = value;\n }\n/**\n * @param {?} fn\n * @return {?}\n */\nregisterOnChange(fn: (value: any) => void): void {\n this._cvaOnChange = fn;\n }\n/**\n * @param {?} fn\n * @return {?}\n */\nregisterOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n/**\n * @param {?} disabled\n * @return {?}\n */\nsetDisabledState(disabled: boolean): void {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', disabled);\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onKeydown(event: KeyboardEvent) {\n if (event.altKey && event.keyCode === DOWN_ARROW) {\n this._datepicker.open();\n event.preventDefault();\n }\n }\n/**\n * @param {?} value\n * @return {?}\n */\n_onInput(value: string) {\n let /** @type {?} */ date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n this._lastValueValid = !date || this._dateAdapter.isValid(date);\n date = this._getValidDateOrNull(date);\n this._value = date;\n this._cvaOnChange(date);\n this._valueChange.emit(date);\n this.dateInput.emit(new MdDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n/**\n * @return {?}\n */\n_onChange() {\n this.dateChange.emit(new MdDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n/**\n * @param {?} obj The object to check.\n * @return {?} The given object if it is both a date instance and valid, otherwise null.\n */\nprivate _getValidDateOrNull(obj: any): D | null {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'input[mdDatepicker], input[matDatepicker]',\n providers: [MD_DATEPICKER_VALUE_ACCESSOR, MD_DATEPICKER_VALIDATORS],\n host: {\n '[attr.aria-haspopup]': 'true',\n '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\n '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(blur)': '_onTouched()',\n '(keydown)': '_onKeydown($event)',\n },\n exportAs: 'mdDatepickerInput, matDatepickerInput',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: Renderer2, },\n{type: DateAdapter, decorators: [{ type: Optional }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_DATE_FORMATS, ] }, ]},\n{type: MdFormField, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'mdDatepicker': [{ type: Input },],\n'matDatepicker': [{ type: Input },],\n'mdDatepickerFilter': [{ type: Input },],\n'matDatepickerFilter': [{ type: Input },],\n'value': [{ type: Input },],\n'min': [{ type: Input },],\n'max': [{ type: Input },],\n'disabled': [{ type: Input },],\n'dateChange': [{ type: Output },],\n'dateInput': [{ type: Output },],\n};\n}\n\nfunction MdDatepickerInput_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDatepickerInput.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDatepickerInput.ctorParameters;\n/** @type {?} */\nMdDatepickerInput.propDecorators;\n/** @type {?} */\nMdDatepickerInput.prototype._datepicker;\n/** @type {?} */\nMdDatepickerInput.prototype._dateFilter;\n/** @type {?} */\nMdDatepickerInput.prototype._value;\n/** @type {?} */\nMdDatepickerInput.prototype._min;\n/** @type {?} */\nMdDatepickerInput.prototype._max;\n/** @type {?} */\nMdDatepickerInput.prototype._disabled;\n/**\n * Emits when a `change` event is fired on this `<input>`.\n * @type {?}\n */\nMdDatepickerInput.prototype.dateChange;\n/**\n * Emits when an `input` event is fired on this `<input>`.\n * @type {?}\n */\nMdDatepickerInput.prototype.dateInput;\n/**\n * Emits when the value changes (either due to user input or programmatic change).\n * @type {?}\n */\nMdDatepickerInput.prototype._valueChange;\n/**\n * Emits when the disabled state has changed\n * @type {?}\n */\nMdDatepickerInput.prototype._disabledChange;\n/** @type {?} */\nMdDatepickerInput.prototype._onTouched;\n/** @type {?} */\nMdDatepickerInput.prototype._cvaOnChange;\n/** @type {?} */\nMdDatepickerInput.prototype._validatorOnChange;\n/** @type {?} */\nMdDatepickerInput.prototype._datepickerSubscription;\n/** @type {?} */\nMdDatepickerInput.prototype._localeSubscription;\n/**\n * The form control validator for whether the input parses.\n * @type {?}\n */\nMdDatepickerInput.prototype._parseValidator;\n/**\n * The form control validator for the min date.\n * @type {?}\n */\nMdDatepickerInput.prototype._minValidator;\n/**\n * The form control validator for the max date.\n * @type {?}\n */\nMdDatepickerInput.prototype._maxValidator;\n/**\n * The form control validator for the date filter.\n * @type {?}\n */\nMdDatepickerInput.prototype._filterValidator;\n/**\n * The combined form control validator for this input.\n * @type {?}\n */\nMdDatepickerInput.prototype._validator;\n/**\n * Whether the last value set on the input was valid.\n * @type {?}\n */\nMdDatepickerInput.prototype._lastValueValid;\n/** @type {?} */\nMdDatepickerInput.prototype._elementRef;\n/** @type {?} */\nMdDatepickerInput.prototype._renderer;\n/** @type {?} */\nMdDatepickerInput.prototype._dateAdapter;\n/** @type {?} */\nMdDatepickerInput.prototype._dateFormats;\n/** @type {?} */\nMdDatepickerInput.prototype._mdFormField;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n ViewEncapsulation,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {MdDatepicker} from './datepicker';\nimport {MdDatepickerIntl} from './datepicker-intl';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Subscription} from 'rxjs/Subscription';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {MATERIAL_COMPATIBILITY_MODE} from '@angular/material/core';\nexport class MdDatepickerToggle<D> implements OnChanges, OnDestroy {\nprivate _stateChanges = Subscription.EMPTY;\n/**\n * Datepicker instance that the button will toggle.\n */\ndatepicker: MdDatepicker<D>;\n/**\n * Whether the toggle button is disabled.\n * @return {?}\n */\nget disabled() {\n return this._disabled === undefined ? this.datepicker.disabled : this._disabled;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\nprivate _disabled: boolean;\n/**\n * @param {?} _intl\n * @param {?} _changeDetectorRef\n */\nconstructor(\npublic _intl: MdDatepickerIntl,\nprivate _changeDetectorRef: ChangeDetectorRef) {}\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges) {\n if (changes.datepicker) {\n const /** @type {?} */ datepicker: MdDatepicker<D> = changes.datepicker.currentValue;\n const /** @type {?} */ datepickerDisabled = datepicker ? datepicker._disabledChange : observableOf();\n const /** @type {?} */ inputDisabled = datepicker && datepicker._datepickerInput ?\n datepicker._datepickerInput._disabledChange :\n observableOf();\n\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(this._intl.changes, datepickerDisabled, inputDisabled)\n .subscribe(() => this._changeDetectorRef.markForCheck());\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_open(event: Event): void {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-datepicker-toggle, mat-datepicker-toggle',\n templateUrl: 'datepicker-toggle.html',\n host: {\n 'class': 'mat-datepicker-toggle',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdDatepickerIntl, },\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'datepicker': [{ type: Input, args: ['for', ] },],\n'disabled': [{ type: Input },],\n};\n}\n\nfunction MdDatepickerToggle_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDatepickerToggle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDatepickerToggle.ctorParameters;\n/** @type {?} */\nMdDatepickerToggle.propDecorators;\n/** @type {?} */\nMdDatepickerToggle.prototype._stateChanges;\n/**\n * Datepicker instance that the button will toggle.\n * @type {?}\n */\nMdDatepickerToggle.prototype.datepicker;\n/** @type {?} */\nMdDatepickerToggle.prototype._disabled;\n/** @type {?} */\nMdDatepickerToggle.prototype._intl;\n/** @type {?} */\nMdDatepickerToggle.prototype._changeDetectorRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Input,\n Optional,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n DateAdapter, MATERIAL_COMPATIBILITY_MODE, MD_DATE_FORMATS,\n MdDateFormats\n} from '@angular/material/core';\nimport {MdCalendarCell} from './calendar-body';\nimport {coerceDateProperty} from './coerce-date-property';\nimport {createMissingDateImplError} from './datepicker-errors';\n\n\nconst /** @type {?} */ DAYS_PER_WEEK = 7;\n/**\n * An internal component used to display a single month in the datepicker.\n * \\@docs-private\n */\nexport class MdMonthView<D> implements AfterContentInit {\n/**\n * The date to display in this month view (everything other than the month and year is ignored).\n * @return {?}\n */\nget activeDate(): D { return this._activeDate; }\n/**\n * @param {?} value\n * @return {?}\n */\nset activeDate(value: D) {\n let /** @type {?} */ oldActiveDate = this._activeDate;\n this._activeDate = coerceDateProperty(this._dateAdapter, value) || this._dateAdapter.today();\n if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n this._init();\n }\n }\nprivate _activeDate: D;\n/**\n * The currently selected date.\n * @return {?}\n */\nget selected(): D | null { return this._selected; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selected(value: D | null) {\n this._selected = coerceDateProperty(this._dateAdapter, value);\n this._selectedDate = this._getDateInCurrentMonth(this._selected);\n }\nprivate _selected: D | null;\n/**\n * A function used to filter which dates are selectable.\n */\ndateFilter: (date: D) => boolean;\n/**\n * Emits when a new date is selected.\n */\nselectedChange = new EventEmitter<D | null>();\n/**\n * Emits when any date is selected.\n */\nuserSelection = new EventEmitter<void>();\n/**\n * The label for this month (e.g. \"January 2017\").\n */\n_monthLabel: string;\n/**\n * Grid of calendar cells representing the dates of the month.\n */\n_weeks: MdCalendarCell[][];\n/**\n * The number of blank cells in the first row before the 1st of the month.\n */\n_firstWeekOffset: number;\n/**\n * The date of the month that the currently selected Date falls on.\n * Null if the currently selected Date is in another month.\n */\n_selectedDate: number | null;\n/**\n * The date of the month that today falls on. Null if today is in another month.\n */\n_todayDate: number | null;\n/**\n * The names of the weekdays.\n */\n_weekdays: {long: string, narrow: string}[];\n/**\n * @param {?} _dateAdapter\n * @param {?} _dateFormats\n */\nconstructor(\npublic _dateAdapter: DateAdapter<D>,\nprivate _dateFormats: MdDateFormats) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MD_DATE_FORMATS');\n }\n\n const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n\n // Rotate the labels for days of the week based on the configured first day of the week.\n let weekdays = longWeekdays.map((long, i) => {\n return {long, narrow: narrowWeekdays[i]};\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n\n this._activeDate = this._dateAdapter.today();\n }\n/**\n * @return {?}\n */\nngAfterContentInit(): void {\n this._init();\n }\n/**\n * Handles when a new date is selected.\n * @param {?} date\n * @return {?}\n */\n_dateSelected(date: number) {\n if (this._selectedDate != date) {\n const /** @type {?} */ selectedYear = this._dateAdapter.getYear(this.activeDate);\n const /** @type {?} */ selectedMonth = this._dateAdapter.getMonth(this.activeDate);\n const /** @type {?} */ selectedDate = this._dateAdapter.createDate(selectedYear, selectedMonth, date);\n\n this.selectedChange.emit(selectedDate);\n }\n\n this.userSelection.emit();\n }\n/**\n * Initializes this month view.\n * @return {?}\n */\nprivate _init() {\n this._selectedDate = this._getDateInCurrentMonth(this.selected);\n this._todayDate = this._getDateInCurrentMonth(this._dateAdapter.today());\n this._monthLabel =\n this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)]\n .toLocaleUpperCase();\n\n let /** @type {?} */ firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),\n this._dateAdapter.getMonth(this.activeDate), 1);\n this._firstWeekOffset =\n (DAYS_PER_WEEK + this._dateAdapter.getDayOfWeek(firstOfMonth) -\n this._dateAdapter.getFirstDayOfWeek()) % DAYS_PER_WEEK;\n\n this._createWeekCells();\n }\n/**\n * Creates MdCalendarCells for the dates in this month.\n * @return {?}\n */\nprivate _createWeekCells() {\n let /** @type {?} */ daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n let /** @type {?} */ dateNames = this._dateAdapter.getDateNames();\n this._weeks = [[]];\n for (let /** @type {?} */ i = 0, /** @type {?} */ cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell == DAYS_PER_WEEK) {\n this._weeks.push([]);\n cell = 0;\n }\n let /** @type {?} */ date = this._dateAdapter.createDate(\n this._dateAdapter.getYear(this.activeDate),\n this._dateAdapter.getMonth(this.activeDate), i + 1);\n let /** @type {?} */ enabled = !this.dateFilter ||\n this.dateFilter(date);\n let /** @type {?} */ ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\n this._weeks[this._weeks.length - 1]\n .push(new MdCalendarCell(i + 1, dateNames[i], ariaLabel, enabled));\n }\n }\n/**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n * @param {?} date\n * @return {?}\n */\nprivate _getDateInCurrentMonth(date: D | null): number | null {\n return date && this._hasSameMonthAndYear(date, this.activeDate) ?\n this._dateAdapter.getDate(date) : null;\n }\n/**\n * Checks whether the 2 dates are non-null and fall within the same month of the same year.\n * @param {?} d1\n * @param {?} d2\n * @return {?}\n */\nprivate _hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n return !!(d1 && d2 && this._dateAdapter.getMonth(d1) == this._dateAdapter.getMonth(d2) &&\n this._dateAdapter.getYear(d1) == this._dateAdapter.getYear(d2));\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-month-view',\n templateUrl: 'month-view.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: DateAdapter, decorators: [{ type: Optional }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_DATE_FORMATS, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'activeDate': [{ type: Input },],\n'selected': [{ type: Input },],\n'dateFilter': [{ type: Input },],\n'selectedChange': [{ type: Output },],\n'userSelection': [{ type: Output },],\n};\n}\n\nfunction MdMonthView_tsickle_Closure_declarations() {\n/** @type {?} */\nMdMonthView.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdMonthView.ctorParameters;\n/** @type {?} */\nMdMonthView.propDecorators;\n/** @type {?} */\nMdMonthView.prototype._activeDate;\n/** @type {?} */\nMdMonthView.prototype._selected;\n/**\n * A function used to filter which dates are selectable.\n * @type {?}\n */\nMdMonthView.prototype.dateFilter;\n/**\n * Emits when a new date is selected.\n * @type {?}\n */\nMdMonthView.prototype.selectedChange;\n/**\n * Emits when any date is selected.\n * @type {?}\n */\nMdMonthView.prototype.userSelection;\n/**\n * The label for this month (e.g. \"January 2017\").\n * @type {?}\n */\nMdMonthView.prototype._monthLabel;\n/**\n * Grid of calendar cells representing the dates of the month.\n * @type {?}\n */\nMdMonthView.prototype._weeks;\n/**\n * The number of blank cells in the first row before the 1st of the month.\n * @type {?}\n */\nMdMonthView.prototype._firstWeekOffset;\n/**\n * The date of the month that the currently selected Date falls on.\n * Null if the currently selected Date is in another month.\n * @type {?}\n */\nMdMonthView.prototype._selectedDate;\n/**\n * The date of the month that today falls on. Null if today is in another month.\n * @type {?}\n */\nMdMonthView.prototype._todayDate;\n/**\n * The names of the weekdays.\n * @type {?}\n */\nMdMonthView.prototype._weekdays;\n/** @type {?} */\nMdMonthView.prototype._dateAdapter;\n/** @type {?} */\nMdMonthView.prototype._dateFormats;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Input,\n Optional,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {DateAdapter, MD_DATE_FORMATS, MdDateFormats} from '@angular/material/core';\nimport {MdCalendarCell} from './calendar-body';\nimport {coerceDateProperty} from './coerce-date-property';\nimport {createMissingDateImplError} from './datepicker-errors';\n/**\n * An internal component used to display a single year in the datepicker.\n * \\@docs-private\n */\nexport class MdYearView<D> implements AfterContentInit {\n/**\n * The date to display in this year view (everything other than the year is ignored).\n * @return {?}\n */\nget activeDate(): D { return this._activeDate; }\n/**\n * @param {?} value\n * @return {?}\n */\nset activeDate(value: D) {\n let /** @type {?} */ oldActiveDate = this._activeDate;\n this._activeDate = coerceDateProperty(this._dateAdapter, value) || this._dateAdapter.today();\n if (this._dateAdapter.getYear(oldActiveDate) != this._dateAdapter.getYear(this._activeDate)) {\n this._init();\n }\n }\nprivate _activeDate: D;\n/**\n * The currently selected date.\n * @return {?}\n */\nget selected(): D | null { return this._selected; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selected(value: D | null) {\n this._selected = coerceDateProperty(this._dateAdapter, value);\n this._selectedMonth = this._getMonthInCurrentYear(this._selected);\n }\nprivate _selected: D | null;\n/**\n * A function used to filter which dates are selectable.\n */\ndateFilter: (date: D) => boolean;\n/**\n * Emits when a new month is selected.\n */\nselectedChange = new EventEmitter<D>();\n/**\n * Grid of calendar cells representing the months of the year.\n */\n_months: MdCalendarCell[][];\n/**\n * The label for this year (e.g. \"2017\").\n */\n_yearLabel: string;\n/**\n * The month in this year that today falls on. Null if today is in a different year.\n */\n_todayMonth: number | null;\n/**\n * The month in this year that the selected Date falls on.\n * Null if the selected Date is in a different year.\n */\n_selectedMonth: number | null;\n/**\n * @param {?} _dateAdapter\n * @param {?} _dateFormats\n */\nconstructor(\npublic _dateAdapter: DateAdapter<D>,\nprivate _dateFormats: MdDateFormats) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MD_DATE_FORMATS');\n }\n\n this._activeDate = this._dateAdapter.today();\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._init();\n }\n/**\n * Handles when a new month is selected.\n * @param {?} month\n * @return {?}\n */\n_monthSelected(month: number) {\n let /** @type {?} */ daysInMonth = this._dateAdapter.getNumDaysInMonth(\n this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1));\n this.selectedChange.emit(this._dateAdapter.createDate(\n this._dateAdapter.getYear(this.activeDate), month,\n Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n }\n/**\n * Initializes this month view.\n * @return {?}\n */\nprivate _init() {\n this._selectedMonth = this._getMonthInCurrentYear(this.selected);\n this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\n this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\n\n let /** @type {?} */ monthNames = this._dateAdapter.getMonthNames('short');\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this._months = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]].map(row => row.map(\n month => this._createCellForMonth(month, monthNames[month])));\n }\n/**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n * @param {?} date\n * @return {?}\n */\nprivate _getMonthInCurrentYear(date: D | null) {\n return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate) ?\n this._dateAdapter.getMonth(date) : null;\n }\n/**\n * Creates an MdCalendarCell for the given month.\n * @param {?} month\n * @param {?} monthName\n * @return {?}\n */\nprivate _createCellForMonth(month: number, monthName: string) {\n let /** @type {?} */ ariaLabel = this._dateAdapter.format(\n this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1),\n this._dateFormats.display.monthYearA11yLabel);\n return new MdCalendarCell(\n month, monthName.toLocaleUpperCase(), ariaLabel, this._isMonthEnabled(month));\n }\n/**\n * Whether the given month is enabled.\n * @param {?} month\n * @return {?}\n */\nprivate _isMonthEnabled(month: number) {\n if (!this.dateFilter) {\n return true;\n }\n\n let /** @type {?} */ firstOfMonth = this._dateAdapter.createDate(\n this._dateAdapter.getYear(this.activeDate), month, 1);\n\n // If any date in the month is enabled count the month as enabled.\n for (let /** @type {?} */ date = firstOfMonth; this._dateAdapter.getMonth(date) == month;\n date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-year-view, mat-year-view',\n templateUrl: 'year-view.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: DateAdapter, decorators: [{ type: Optional }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_DATE_FORMATS, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'activeDate': [{ type: Input },],\n'selected': [{ type: Input },],\n'dateFilter': [{ type: Input },],\n'selectedChange': [{ type: Output },],\n};\n}\n\nfunction MdYearView_tsickle_Closure_declarations() {\n/** @type {?} */\nMdYearView.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdYearView.ctorParameters;\n/** @type {?} */\nMdYearView.propDecorators;\n/** @type {?} */\nMdYearView.prototype._activeDate;\n/** @type {?} */\nMdYearView.prototype._selected;\n/**\n * A function used to filter which dates are selectable.\n * @type {?}\n */\nMdYearView.prototype.dateFilter;\n/**\n * Emits when a new month is selected.\n * @type {?}\n */\nMdYearView.prototype.selectedChange;\n/**\n * Grid of calendar cells representing the months of the year.\n * @type {?}\n */\nMdYearView.prototype._months;\n/**\n * The label for this year (e.g. \"2017\").\n * @type {?}\n */\nMdYearView.prototype._yearLabel;\n/**\n * The month in this year that today falls on. Null if today is in a different year.\n * @type {?}\n */\nMdYearView.prototype._todayMonth;\n/**\n * The month in this year that the selected Date falls on.\n * Null if the selected Date is in a different year.\n * @type {?}\n */\nMdYearView.prototype._selectedMonth;\n/** @type {?} */\nMdYearView.prototype._dateAdapter;\n/** @type {?} */\nMdYearView.prototype._dateFormats;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MdButtonModule} from '@angular/material/button';\nimport {MdDialogModule} from '@angular/material/dialog';\nimport {MdIconModule} from '@angular/material/icon';\nimport {MdCalendar} from './calendar';\nimport {MdCalendarBody} from './calendar-body';\nimport {\n MD_DATEPICKER_SCROLL_STRATEGY_PROVIDER,\n MdDatepicker,\n MdDatepickerContent,\n} from './datepicker';\nimport {MdDatepickerInput} from './datepicker-input';\nimport {MdDatepickerIntl} from './datepicker-intl';\nimport {MdDatepickerToggle} from './datepicker-toggle';\nimport {MdMonthView} from './month-view';\nimport {MdYearView} from './year-view';\nexport class MdDatepickerModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n CommonModule,\n MdButtonModule,\n MdDialogModule,\n MdIconModule,\n OverlayModule,\n A11yModule,\n ],\n exports: [\n MdCalendar,\n MdCalendarBody,\n MdDatepicker,\n MdDatepickerContent,\n MdDatepickerInput,\n MdDatepickerToggle,\n MdMonthView,\n MdYearView,\n ],\n declarations: [\n MdCalendar,\n MdCalendarBody,\n MdDatepicker,\n MdDatepickerContent,\n MdDatepickerInput,\n MdDatepickerToggle,\n MdMonthView,\n MdYearView,\n ],\n providers: [\n MdDatepickerIntl,\n MD_DATEPICKER_SCROLL_STRATEGY_PROVIDER,\n ],\n entryComponents: [\n MdDatepickerContent,\n ]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdDatepickerModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDatepickerModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDatepickerModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, Input} from '@angular/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\n/** MdAccordion's display modes. */\nexport type MdAccordionDisplayMode = 'default' | 'flat';\n/**\n * Unique ID counter\n */\nlet nextId = 0;\n/**\n * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.\n */\nexport class CdkAccordion {\n/**\n * A readonly id value to use for unique selection coordination.\n */\nreadonly id = `cdk-accordion-${nextId++}`;\n/**\n * Whether the accordion should allow multiple expanded accordion items simulateously.\n * @return {?}\n */\nget multi(): boolean { return this._multi; }\n/**\n * @param {?} multi\n * @return {?}\n */\nset multi(multi: boolean) { this._multi = coerceBooleanProperty(multi); }\nprivate _multi: boolean = false;\n/**\n * Whether the expansion indicator should be hidden.\n * @return {?}\n */\nget hideToggle(): boolean { return this._hideToggle; }\n/**\n * @param {?} show\n * @return {?}\n */\nset hideToggle(show: boolean) { this._hideToggle = coerceBooleanProperty(show); }\nprivate _hideToggle: boolean = false;\n/**\n * The display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the reset of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n */\ndisplayMode: MdAccordionDisplayMode = 'default';\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'cdk-accordion, [cdk-accordion]',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'multi': [{ type: Input },],\n'hideToggle': [{ type: Input },],\n'displayMode': [{ type: Input },],\n};\n}\n\nfunction CdkAccordion_tsickle_Closure_declarations() {\n/** @type {?} */\nCdkAccordion.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nCdkAccordion.ctorParameters;\n/** @type {?} */\nCdkAccordion.propDecorators;\n/**\n * A readonly id value to use for unique selection coordination.\n * @type {?}\n */\nCdkAccordion.prototype.id;\n/** @type {?} */\nCdkAccordion.prototype._multi;\n/** @type {?} */\nCdkAccordion.prototype._hideToggle;\n/**\n * The display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the reset of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n * @type {?}\n */\nCdkAccordion.prototype.displayMode;\n}\n\n/**\n * Directive for a Material Design Accordion.\n */\nexport class MdAccordion extends CdkAccordion {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'mat-accordion, md-accordion',\n host: {\n class: 'mat-accordion'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdAccordion_tsickle_Closure_declarations() {\n/** @type {?} */\nMdAccordion.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdAccordion.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Output,\n EventEmitter,\n Input,\n Injectable,\n OnDestroy,\n Optional,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {UniqueSelectionDispatcher} from '@angular/material/core';\nimport {CdkAccordion} from './accordion';\n/**\n * Used to generate unique ID for each expansion panel.\n */\nlet nextId = 0;\n/**\n * An abstract class to be extended and decorated as a component. Sets up all\n * events and attributes needed to be managed by a CdkAccordion parent.\n */\nexport class AccordionItem implements OnDestroy {\n/**\n * Event emitted every time the AccordionItem is closed.\n */\nclosed = new EventEmitter<void>();\n/**\n * Event emitted every time the AccordionItem is opened.\n */\nopened = new EventEmitter<void>();\n/**\n * Event emitted when the AccordionItem is destroyed.\n */\ndestroyed = new EventEmitter<void>();\n/**\n * The unique AccordionItem id.\n */\nreadonly id = `cdk-accordion-child-${nextId++}`;\n/**\n * Whether the AccordionItem is expanded.\n * @return {?}\n */\nget expanded(): boolean { return this._expanded; }\n/**\n * @param {?} expanded\n * @return {?}\n */\nset expanded(expanded: boolean) {\n // Only emit events and update the internal value if the value changes.\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n if (expanded) {\n this.opened.emit();\n/**\n * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,\n * the name value is the id of the accordion.\n */\nconst accordionId = this.accordion ? this.accordion.id : this.id;\n this._expansionDispatcher.notify(this.id, accordionId);\n } else {\n this.closed.emit();\n }\n\n // Ensures that the animation will run when the value is set outside of an `@Input`.\n // This includes cases like the open, close and toggle methods.\n this._changeDetectorRef.markForCheck();\n }\n }\nprivate _expanded: boolean;\n/**\n * Unregister function for _expansionDispatcher *\n */\nprivate _removeUniqueSelectionListener: () => void = () => {};\n/**\n * @param {?} accordion\n * @param {?} _changeDetectorRef\n * @param {?} _expansionDispatcher\n */\nconstructor(\npublic accordion: CdkAccordion,\nprivate _changeDetectorRef: ChangeDetectorRef,\n protected _expansionDispatcher: UniqueSelectionDispatcher) {\n this._removeUniqueSelectionListener =\n _expansionDispatcher.listen((id: string, accordionId: string) => {\n if (this.accordion && !this.accordion.multi &&\n this.accordion.id === accordionId && this.id !== id) {\n this.expanded = false;\n }\n });\n }\n/**\n * Emits an event for the accordion item being destroyed.\n * @return {?}\n */\nngOnDestroy() {\n this.destroyed.emit();\n this._removeUniqueSelectionListener();\n }\n/**\n * Toggles the expanded state of the accordion item.\n * @return {?}\n */\ntoggle(): void {\n this.expanded = !this.expanded;\n }\n/**\n * Sets the expanded state of the accordion item to false.\n * @return {?}\n */\nclose(): void {\n this.expanded = false;\n }\n/**\n * Sets the expanded state of the accordion item to true.\n * @return {?}\n */\nopen(): void {\n this.expanded = true;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: CdkAccordion, decorators: [{ type: Optional }, ]},\n{type: ChangeDetectorRef, },\n{type: UniqueSelectionDispatcher, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'closed': [{ type: Output },],\n'opened': [{ type: Output },],\n'destroyed': [{ type: Output },],\n'expanded': [{ type: Input },],\n};\n}\n\nfunction AccordionItem_tsickle_Closure_declarations() {\n/** @type {?} */\nAccordionItem.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nAccordionItem.ctorParameters;\n/** @type {?} */\nAccordionItem.propDecorators;\n/**\n * Event emitted every time the AccordionItem is closed.\n * @type {?}\n */\nAccordionItem.prototype.closed;\n/**\n * Event emitted every time the AccordionItem is opened.\n * @type {?}\n */\nAccordionItem.prototype.opened;\n/**\n * Event emitted when the AccordionItem is destroyed.\n * @type {?}\n */\nAccordionItem.prototype.destroyed;\n/**\n * The unique AccordionItem id.\n * @type {?}\n */\nAccordionItem.prototype.id;\n/** @type {?} */\nAccordionItem.prototype._expanded;\n/**\n * Unregister function for _expansionDispatcher *\n * @type {?}\n */\nAccordionItem.prototype._removeUniqueSelectionListener;\n/** @type {?} */\nAccordionItem.prototype.accordion;\n/** @type {?} */\nAccordionItem.prototype._changeDetectorRef;\n/** @type {?} */\nAccordionItem.prototype._expansionDispatcher;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {animate, state, style, transition, trigger} from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n forwardRef,\n Host,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled, UniqueSelectionDispatcher} from '@angular/material/core';\nimport {Subject} from 'rxjs/Subject';\nimport {MdAccordion} from './accordion';\nimport {AccordionItem} from './accordion-item';\n/**\n * \\@docs-private\n */\nexport class MdExpansionPanelBase extends AccordionItem {\n/**\n * @param {?} accordion\n * @param {?} _changeDetectorRef\n * @param {?} _uniqueSelectionDispatcher\n */\nconstructor(accordion: MdAccordion,\n _changeDetectorRef: ChangeDetectorRef,\n _uniqueSelectionDispatcher: UniqueSelectionDispatcher) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n }\n}\nexport const /** @type {?} */ _MdExpansionPanelMixinBase = mixinDisabled(MdExpansionPanelBase);\n\n/** MdExpansionPanel's states. */\nexport type MdExpansionPanelState = 'expanded' | 'collapsed';\n/**\n * Time and timing curve for expansion panel animations.\n */\nexport const EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';\n/**\n * <md-expansion-panel> component.\n * \n * This component can be used as a single element to show expandable content, or as one of\n * multiple children of an element with the CdkAccordion directive attached.\n * \n * Please refer to README.md for examples on how to use it.\n */\nexport class MdExpansionPanel extends _MdExpansionPanelMixinBase\n implements CanDisable, OnChanges, OnDestroy {\n/**\n * Whether the toggle indicator should be hidden.\n */\nhideToggle: boolean = false;\n/**\n * Stream that emits for changes in `\\@Input` properties.\n */\n_inputChanges = new Subject<SimpleChanges>();\n/**\n * @param {?} accordion\n * @param {?} _changeDetectorRef\n * @param {?} _uniqueSelectionDispatcher\n */\nconstructor( accordion: MdAccordion,\n _changeDetectorRef: ChangeDetectorRef,\n _uniqueSelectionDispatcher: UniqueSelectionDispatcher) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n this.accordion = accordion;\n }\n/**\n * Whether the expansion indicator should be hidden.\n * @return {?}\n */\n_getHideToggle(): boolean {\n if (this.accordion) {\n return this.accordion.hideToggle;\n }\n return this.hideToggle;\n }\n/**\n * Determines whether the expansion panel should have spacing between it and its siblings.\n * @return {?}\n */\n_hasSpacing(): boolean {\n if (this.accordion) {\n return (this.expanded ? this.accordion.displayMode : this._getExpandedState()) === 'default';\n }\n return false;\n }\n/**\n * Gets the expanded state string.\n * @return {?}\n */\n_getExpandedState(): MdExpansionPanelState {\n return this.expanded ? 'expanded' : 'collapsed';\n }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges) {\n this._inputChanges.next(changes);\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._inputChanges.complete();\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n styleUrls: ['./expansion-panel.css'],\n selector: 'md-expansion-panel, mat-expansion-panel',\n templateUrl: './expansion-panel.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disabled', 'expanded'],\n host: {\n 'class': 'mat-expansion-panel',\n '[class.mat-expanded]': 'expanded',\n '[class.mat-expansion-panel-spacing]': '_hasSpacing()',\n },\n providers: [\n {provide: AccordionItem, useExisting: forwardRef(() => MdExpansionPanel)}\n ],\n animations: [\n trigger('bodyExpansion', [\n state('collapsed', style({height: '0px', visibility: 'hidden'})),\n state('expanded', style({height: '*', visibility: 'visible'})),\n transition('expanded <=> collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdAccordion, decorators: [{ type: Optional }, { type: Host }, ]},\n{type: ChangeDetectorRef, },\n{type: UniqueSelectionDispatcher, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'hideToggle': [{ type: Input },],\n};\n}\n\nfunction MdExpansionPanel_tsickle_Closure_declarations() {\n/** @type {?} */\nMdExpansionPanel.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdExpansionPanel.ctorParameters;\n/** @type {?} */\nMdExpansionPanel.propDecorators;\n/**\n * Whether the toggle indicator should be hidden.\n * @type {?}\n */\nMdExpansionPanel.prototype.hideToggle;\n/**\n * Stream that emits for changes in `\\@Input` properties.\n * @type {?}\n */\nMdExpansionPanel.prototype._inputChanges;\n}\n\nexport class MdExpansionPanelActionRow {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'mat-action-row, md-action-row',\n host: {\n class: 'mat-action-row'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdExpansionPanelActionRow_tsickle_Closure_declarations() {\n/** @type {?} */\nMdExpansionPanelActionRow.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdExpansionPanelActionRow.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n Directive,\n Host,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnDestroy,\n Renderer2,\n ElementRef,\n Input,\n} from '@angular/core';\nimport {\n trigger,\n state,\n style,\n transition,\n animate,\n} from '@angular/animations';\nimport {SPACE, ENTER} from '@angular/material/core';\nimport {MdExpansionPanel, EXPANSION_PANEL_ANIMATION_TIMING} from './expansion-panel';\nimport {filter} from '@angular/material/core';\nimport {FocusMonitor} from '@angular/cdk/a11y';\nimport {merge} from 'rxjs/observable/merge';\nimport {Subscription} from 'rxjs/Subscription';\n/**\n * <md-expansion-panel-header> component.\n * \n * This component corresponds to the header element of an <md-expansion-panel>.\n * \n * Please refer to README.md for examples on how to use it.\n */\nexport class MdExpansionPanelHeader implements OnDestroy {\nprivate _parentChangeSubscription = Subscription.EMPTY;\n/**\n * @param {?} renderer\n * @param {?} panel\n * @param {?} _element\n * @param {?} _focusMonitor\n * @param {?} _changeDetectorRef\n */\nconstructor(\n renderer: Renderer2,\npublic panel: MdExpansionPanel,\nprivate _element: ElementRef,\nprivate _focusMonitor: FocusMonitor,\nprivate _changeDetectorRef: ChangeDetectorRef) {\n\n // Since the toggle state depends on an @Input on the panel, we\n // need to subscribe and trigger change detection manually.\n this._parentChangeSubscription = merge(\n panel.opened,\n panel.closed,\n filter.call(panel._inputChanges, changes => !!(changes.hideToggle || changes.disabled))\n )\n .subscribe(() => this._changeDetectorRef.markForCheck());\n\n _focusMonitor.monitor(_element.nativeElement, renderer, false);\n }\n/**\n * Height of the header while the panel is expanded.\n */\nexpandedHeight: string;\n/**\n * Height of the header while the panel is collapsed.\n */\ncollapsedHeight: string;\n/**\n * Toggles the expanded state of the panel.\n * @return {?}\n */\n_toggle(): void {\n if (!this.panel.disabled) {\n this.panel.toggle();\n }\n }\n/**\n * Gets whether the panel is expanded.\n * @return {?}\n */\n_isExpanded(): boolean {\n return this.panel.expanded;\n }\n/**\n * Gets the expanded state string of the panel.\n * @return {?}\n */\n_getExpandedState(): string {\n return this.panel._getExpandedState();\n }\n/**\n * Gets the panel id.\n * @return {?}\n */\n_getPanelId(): string {\n return this.panel.id;\n }\n/**\n * Gets whether the expand indicator should be shown.\n * @return {?}\n */\n_showToggle(): boolean {\n return !this.panel.hideToggle && !this.panel.disabled;\n }\n/**\n * Handle keyup event calling to toggle() if appropriate.\n * @param {?} event\n * @return {?}\n */\n_keyup(event: KeyboardEvent) {\n switch (event.keyCode) {\n // Toggle for space and enter keys.\n case SPACE:\n case ENTER:\n event.preventDefault();\n this._toggle();\n break;\n default:\n return;\n }\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._parentChangeSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._element.nativeElement);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-expansion-panel-header, mat-expansion-panel-header',\n styleUrls: ['./expansion-panel-header.css'],\n templateUrl: './expansion-panel-header.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-expansion-panel-header',\n 'role': 'button',\n '[attr.tabindex]': 'panel.disabled ? -1 : 0',\n '[attr.aria-controls]': '_getPanelId()',\n '[attr.aria-expanded]': '_isExpanded()',\n '[attr.aria-disabled]': 'panel.disabled',\n '[class.mat-expanded]': '_isExpanded()',\n '(click)': '_toggle()',\n '(keyup)': '_keyup($event)',\n '[@expansionHeight]': `{\n value: _getExpandedState(),\n params: {\n collapsedHeight: collapsedHeight,\n expandedHeight: expandedHeight\n }\n }`,\n },\n animations: [\n trigger('indicatorRotate', [\n state('collapsed', style({transform: 'rotate(0deg)'})),\n state('expanded', style({transform: 'rotate(180deg)'})),\n transition('expanded <=> collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n trigger('expansionHeight', [\n state('collapsed', style({\n height: '{{collapsedHeight}}',\n }), {\n params: {collapsedHeight: '48px'},\n }),\n state('expanded', style({\n height: '{{expandedHeight}}'\n }), {\n params: {expandedHeight: '64px'}\n }),\n transition('expanded <=> collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: MdExpansionPanel, decorators: [{ type: Host }, ]},\n{type: ElementRef, },\n{type: FocusMonitor, },\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'expandedHeight': [{ type: Input },],\n'collapsedHeight': [{ type: Input },],\n};\n}\n\nfunction MdExpansionPanelHeader_tsickle_Closure_declarations() {\n/** @type {?} */\nMdExpansionPanelHeader.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdExpansionPanelHeader.ctorParameters;\n/** @type {?} */\nMdExpansionPanelHeader.propDecorators;\n/** @type {?} */\nMdExpansionPanelHeader.prototype._parentChangeSubscription;\n/**\n * Height of the header while the panel is expanded.\n * @type {?}\n */\nMdExpansionPanelHeader.prototype.expandedHeight;\n/**\n * Height of the header while the panel is collapsed.\n * @type {?}\n */\nMdExpansionPanelHeader.prototype.collapsedHeight;\n/** @type {?} */\nMdExpansionPanelHeader.prototype.panel;\n/** @type {?} */\nMdExpansionPanelHeader.prototype._element;\n/** @type {?} */\nMdExpansionPanelHeader.prototype._focusMonitor;\n/** @type {?} */\nMdExpansionPanelHeader.prototype._changeDetectorRef;\n}\n\n/**\n * <md-panel-description> directive.\n * \n * This direction is to be used inside of the MdExpansionPanelHeader component.\n */\nexport class MdExpansionPanelDescription {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-panel-description, mat-panel-description',\n host : {\n class: 'mat-expansion-panel-header-description'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdExpansionPanelDescription_tsickle_Closure_declarations() {\n/** @type {?} */\nMdExpansionPanelDescription.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdExpansionPanelDescription.ctorParameters;\n}\n\n/**\n * <md-panel-title> directive.\n * \n * This direction is to be used inside of the MdExpansionPanelHeader component.\n */\nexport class MdExpansionPanelTitle {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-panel-title, mat-panel-title',\n host : {\n class: 'mat-expansion-panel-header-title'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdExpansionPanelTitle_tsickle_Closure_declarations() {\n/** @type {?} */\nMdExpansionPanelTitle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdExpansionPanelTitle.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {CompatibilityModule, UNIQUE_SELECTION_DISPATCHER_PROVIDER} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {CdkAccordion, MdAccordion} from './accordion';\nimport {MdExpansionPanel, MdExpansionPanelActionRow} from './expansion-panel';\nimport {\n MdExpansionPanelDescription,\n MdExpansionPanelHeader,\n MdExpansionPanelTitle,\n} from './expansion-panel-header';\nexport class MdExpansionModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CompatibilityModule, CommonModule, A11yModule],\n exports: [\n CdkAccordion,\n MdAccordion,\n MdExpansionPanel,\n MdExpansionPanelActionRow,\n MdExpansionPanelHeader,\n MdExpansionPanelTitle,\n MdExpansionPanelDescription\n ],\n declarations: [\n CdkAccordion,\n MdAccordion,\n MdExpansionPanel,\n MdExpansionPanelActionRow,\n MdExpansionPanelHeader,\n MdExpansionPanelTitle,\n MdExpansionPanelDescription\n ],\n providers: [UNIQUE_SELECTION_DISPATCHER_PROVIDER]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdExpansionModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdExpansionModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdExpansionModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {CdkAccordion,MdAccordion,MdAccordionDisplayMode,AccordionItem,MdExpansionPanel,MdExpansionPanelState,MdExpansionPanelActionRow,MdExpansionPanelHeader,MdExpansionPanelDescription,MdExpansionPanelTitle,MdExpansionModule,MatAccordion,MatAccordionDisplayMode,MatExpansionModule,MatExpansionPanel,MatExpansionPanelActionRow,MatExpansionPanelDescription,MatExpansionPanelHeader,MatExpansionPanelState,MatExpansionPanelTitle} from './public_api';\n\nexport {EXPANSION_PANEL_ANIMATION_TIMING as ɵc,MdExpansionPanelBase as ɵa,_MdExpansionPanelMixinBase as ɵb} from './expansion-panel';","/**\n * @license\n * Copyright Google Inc. 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\nimport {OverlayRef, GlobalPositionStrategy} from '@angular/cdk/overlay';\nimport {filter, first, RxChain} from '@angular/cdk/rxjs';\nimport {DialogPosition} from './dialog-config';\nimport {Observable} from 'rxjs/Observable';\nimport {Subject} from 'rxjs/Subject';\nimport {MdDialogContainer} from './dialog-container';\n\n\n// TODO(jelbourn): resizing\n\n// Counter for unique dialog ids.\nlet /** @type {?} */ uniqueId = 0;\n/**\n * Reference to a dialog opened via the MdDialog service.\n */\nexport class MdDialogRef<T> {\n/**\n * The instance of component opened into the dialog.\n */\ncomponentInstance: T;\n/**\n * Whether the user is allowed to close the dialog.\n */\ndisableClose = this._containerInstance._config.disableClose;\n/**\n * Subject for notifying the user that the dialog has finished opening.\n */\nprivate _afterOpen = new Subject<void>();\n/**\n * Subject for notifying the user that the dialog has finished closing.\n */\nprivate _afterClosed = new Subject<any>();\n/**\n * Subject for notifying the user that the dialog has started closing.\n */\nprivate _beforeClose = new Subject<any>();\n/**\n * Result to be passed to afterClosed.\n */\nprivate _result: any;\n/**\n * @param {?} _overlayRef\n * @param {?} _containerInstance\n * @param {?=} id\n */\nconstructor(\nprivate _overlayRef: OverlayRef,\nprivate _containerInstance: MdDialogContainer,\npublic readonly id: string = `md-dialog-${uniqueId++}`) {\n\n // Emit when opening animation completes\n RxChain.from(_containerInstance._animationStateChanged)\n .call(filter, event => event.phaseName === 'done' && event.toState === 'enter')\n .call(first)\n .subscribe(() => {\n this._afterOpen.next();\n this._afterOpen.complete();\n });\n\n // Dispose overlay when closing animation is complete\n RxChain.from(_containerInstance._animationStateChanged)\n .call(filter, event => event.phaseName === 'done' && event.toState === 'exit')\n .call(first)\n .subscribe(() => {\n this._overlayRef.dispose();\n this._afterClosed.next(this._result);\n this._afterClosed.complete();\n this.componentInstance = null!;\n });\n }\n/**\n * Close the dialog.\n * @param {?=} dialogResult Optional result to return to the dialog opener.\n * @return {?}\n */\nclose(dialogResult?: any): void {\n this._result = dialogResult;\n\n // Transition the backdrop in parallel to the dialog.\n RxChain.from(this._containerInstance._animationStateChanged)\n .call(filter, event => event.phaseName === 'start')\n .call(first)\n .subscribe(() => {\n this._beforeClose.next(dialogResult);\n this._beforeClose.complete();\n this._overlayRef.detachBackdrop();\n });\n\n this._containerInstance._startExitAnimation();\n }\n/**\n * Gets an observable that is notified when the dialog is finished opening.\n * @return {?}\n */\nafterOpen(): Observable<void> {\n return this._afterOpen.asObservable();\n }\n/**\n * Gets an observable that is notified when the dialog is finished closing.\n * @return {?}\n */\nafterClosed(): Observable<any> {\n return this._afterClosed.asObservable();\n }\n/**\n * Gets an observable that is notified when the dialog has started closing.\n * @return {?}\n */\nbeforeClose(): Observable<any> {\n return this._beforeClose.asObservable();\n }\n/**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n * @return {?}\n */\nbackdropClick(): Observable<void> {\n return this._overlayRef.backdropClick();\n }\n/**\n * Updates the dialog's position.\n * @param {?=} position New dialog position.\n * @return {?}\n */\nupdatePosition(position?: DialogPosition): this {\n let /** @type {?} */ strategy = this._getPositionStrategy();\n\n if (position && (position.left || position.right)) {\n position.left ? strategy.left(position.left) : strategy.right(position.right);\n } else {\n strategy.centerHorizontally();\n }\n\n if (position && (position.top || position.bottom)) {\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n } else {\n strategy.centerVertically();\n }\n\n this._overlayRef.updatePosition();\n\n return this;\n }\n/**\n * Updates the dialog's width and height.\n * @param {?=} width New width of the dialog.\n * @param {?=} height New height of the dialog.\n * @return {?}\n */\nupdateSize(width = 'auto', height = 'auto'): this {\n this._getPositionStrategy().width(width).height(height);\n this._overlayRef.updatePosition();\n return this;\n }\n/**\n * Returns whether the dialog is animating.\n * @return {?}\n */\n_isAnimating(): boolean {\n return this._containerInstance._isAnimating;\n }\n/**\n * Fetches the position strategy object from the overlay ref.\n * @return {?}\n */\nprivate _getPositionStrategy(): GlobalPositionStrategy {\n return /** @type {?} */(( this._overlayRef.getState().positionStrategy as GlobalPositionStrategy));\n }\n}\n\nfunction MdDialogRef_tsickle_Closure_declarations() {\n/**\n * The instance of component opened into the dialog.\n * @type {?}\n */\nMdDialogRef.prototype.componentInstance;\n/**\n * Whether the user is allowed to close the dialog.\n * @type {?}\n */\nMdDialogRef.prototype.disableClose;\n/**\n * Subject for notifying the user that the dialog has finished opening.\n * @type {?}\n */\nMdDialogRef.prototype._afterOpen;\n/**\n * Subject for notifying the user that the dialog has finished closing.\n * @type {?}\n */\nMdDialogRef.prototype._afterClosed;\n/**\n * Subject for notifying the user that the dialog has started closing.\n * @type {?}\n */\nMdDialogRef.prototype._beforeClose;\n/**\n * Result to be passed to afterClosed.\n * @type {?}\n */\nMdDialogRef.prototype._result;\n/** @type {?} */\nMdDialogRef.prototype._overlayRef;\n/** @type {?} */\nMdDialogRef.prototype._containerInstance;\n/** @type {?} */\nMdDialogRef.prototype.id;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ESCAPE} from '@angular/cdk/keycodes';\nimport {\n BlockScrollStrategy,\n Overlay,\n OverlayRef,\n OverlayConfig,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, TemplatePortal} from '@angular/cdk/portal';\nimport {startWith} from '@angular/cdk/rxjs';\nimport {Location} from '@angular/common';\nimport {\n ComponentRef,\n Inject,\n Injectable,\n InjectionToken,\n Injector,\n Optional,\n SkipSelf,\n TemplateRef,\n} from '@angular/core';\nimport {extendObject, PortalInjector} from '@angular/material/core';\nimport {Observable} from 'rxjs/Observable';\nimport {defer} from 'rxjs/observable/defer';\nimport {Subject} from 'rxjs/Subject';\nimport {MdDialogConfig} from './dialog-config';\nimport {MdDialogContainer} from './dialog-container';\nimport {MdDialogRef} from './dialog-ref';\n\nexport const /** @type {?} */ MD_DIALOG_DATA = new InjectionToken<any>('MdDialogData');\n/**\n * Injection token that determines the scroll handling while the dialog is open.\n */\nexport const MD_DIALOG_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('md-dialog-scroll-strategy');\n/**\n * \\@docs-private\n * @param {?} overlay\n * @return {?}\n */\nexport function MD_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n () => BlockScrollStrategy {\n return () => overlay.scrollStrategies.block();\n}\n/**\n * \\@docs-private\n */\nexport const MD_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: MD_DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MD_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/**\n * Service to open Material Design modal dialogs.\n */\nexport class MdDialog {\nprivate _openDialogsAtThisLevel: MdDialogRef<any>[] = [];\nprivate _afterAllClosedAtThisLevel = new Subject<void>();\nprivate _afterOpenAtThisLevel = new Subject<MdDialogRef<any>>();\nprivate _boundKeydown = this._handleKeydown.bind(this);\n/**\n * Keeps track of the currently-open dialogs.\n * @return {?}\n */\nget openDialogs(): MdDialogRef<any>[] {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n/**\n * Stream that emits when a dialog has been opened.\n * @return {?}\n */\nget afterOpen(): Subject<MdDialogRef<any>> {\n return this._parentDialog ? this._parentDialog.afterOpen : this._afterOpenAtThisLevel;\n }\n/**\n * @return {?}\n */\nget _afterAllClosed() {\n const /** @type {?} */ parent = this._parentDialog;\n return parent ? parent._afterAllClosed : this._afterAllClosedAtThisLevel;\n }\n/**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\nafterAllClosed: Observable<void> = defer<void>(() => this.openDialogs.length ?\n this._afterAllClosed :\n startWith.call(this._afterAllClosed, undefined));\n/**\n * @param {?} _overlay\n * @param {?} _injector\n * @param {?} location\n * @param {?} _scrollStrategy\n * @param {?} _parentDialog\n */\nconstructor(\nprivate _overlay: Overlay,\nprivate _injector: Injector,\n location: Location,\nprivate _scrollStrategy,\nprivate _parentDialog: MdDialog) {\n\n // Close all of the dialogs when the user goes forwards/backwards in history or when the\n // location hash changes. Note that this usually doesn't include clicking on links (unless\n // the user is using the `HashLocationStrategy`).\n if (!_parentDialog && location) {\n location.subscribe(() => this.closeAll());\n }\n }\n/**\n * Opens a modal dialog containing the given component.\n * @template T\n * @param {?} componentOrTemplateRef Type of the component to load into the dialog,\n * or a TemplateRef to instantiate as the dialog content.\n * @param {?=} config Extra configuration options.\n * @return {?} Reference to the newly-opened dialog.\n */\nopen<T>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: MdDialogConfig): MdDialogRef<T> {\n\n const /** @type {?} */ inProgressDialog = this.openDialogs.find(dialog => dialog._isAnimating());\n\n // If there's a dialog that is in the process of being opened, return it instead.\n if (inProgressDialog) {\n return inProgressDialog;\n }\n\n config = _applyConfigDefaults(config);\n\n if (config.id && this.getDialogById(config.id)) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n\n const /** @type {?} */ overlayRef = this._createOverlay(config);\n const /** @type {?} */ dialogContainer = this._attachDialogContainer(overlayRef, config);\n const /** @type {?} */ dialogRef =\n this._attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);\n\n if (!this.openDialogs.length) {\n document.addEventListener('keydown', this._boundKeydown);\n }\n\n this.openDialogs.push(dialogRef);\n dialogRef.afterClosed().subscribe(() => this._removeOpenDialog(dialogRef));\n this.afterOpen.next(dialogRef);\n\n return dialogRef;\n }\n/**\n * Closes all of the currently-open dialogs.\n * @return {?}\n */\ncloseAll(): void {\n let /** @type {?} */ i = this.openDialogs.length;\n\n while (i--) {\n // The `_openDialogs` property isn't updated after close until the rxjs subscription\n // runs on the next microtask, in addition to modifying the array as we're going\n // through it. We loop through all of them and call close without assuming that\n // they'll be removed from the list instantaneously.\n this.openDialogs[i].close();\n }\n }\n/**\n * Finds an open dialog by its id.\n * @param {?} id ID to use when looking up the dialog.\n * @return {?}\n */\ngetDialogById(id: string): MdDialogRef<any> | undefined {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n/**\n * Creates the overlay into which the dialog will be loaded.\n * @param {?} config The dialog configuration.\n * @return {?} A promise resolving to the OverlayRef for the created overlay.\n */\nprivate _createOverlay(config: MdDialogConfig): OverlayRef {\n const /** @type {?} */ overlayState = this._getOverlayState(config);\n return this._overlay.create(overlayState);\n }\n/**\n * Creates an overlay state from a dialog config.\n * @param {?} dialogConfig The dialog configuration.\n * @return {?} The overlay configuration.\n */\nprivate _getOverlayState(dialogConfig: MdDialogConfig): OverlayConfig {\n const /** @type {?} */ state = new OverlayConfig({\n positionStrategy: this._overlay.position().global(),\n scrollStrategy: this._scrollStrategy(),\n panelClass: dialogConfig.panelClass,\n hasBackdrop: dialogConfig.hasBackdrop,\n direction: dialogConfig.direction\n });\n\n if (dialogConfig.backdropClass) {\n state.backdropClass = dialogConfig.backdropClass;\n }\n\n return state;\n }\n/**\n * Attaches an MdDialogContainer to a dialog's already-created overlay.\n * @param {?} overlay Reference to the dialog's underlying overlay.\n * @param {?} config The dialog configuration.\n * @return {?} A promise resolving to a ComponentRef for the attached container.\n */\nprivate _attachDialogContainer(overlay: OverlayRef, config: MdDialogConfig): MdDialogContainer {\n let /** @type {?} */ containerPortal = new ComponentPortal(MdDialogContainer, config.viewContainerRef);\n let /** @type {?} */ containerRef: ComponentRef<MdDialogContainer> = overlay.attach(containerPortal);\n containerRef.instance._config = config;\n\n return containerRef.instance;\n }\n/**\n * Attaches the user-provided component to the already-created MdDialogContainer.\n * @template T\n * @param {?} componentOrTemplateRef The type of component being loaded into the dialog,\n * or a TemplateRef to instantiate as the content.\n * @param {?} dialogContainer Reference to the wrapping MdDialogContainer.\n * @param {?} overlayRef Reference to the overlay in which the dialog resides.\n * @param {?} config The dialog configuration.\n * @return {?} A promise resolving to the MdDialogRef that should be returned to the user.\n */\nprivate _attachDialogContent<T>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n dialogContainer: MdDialogContainer,\n overlayRef: OverlayRef,\n config: MdDialogConfig): MdDialogRef<T> {\n\n // Create a reference to the dialog we're creating in order to give the user a handle\n // to modify and close it.\n const /** @type {?} */ dialogRef = new MdDialogRef<T>(overlayRef, dialogContainer, config.id);\n\n // When the dialog backdrop is clicked, we want to close it.\n if (config.hasBackdrop) {\n overlayRef.backdropClick().subscribe(() => {\n if (!dialogRef.disableClose) {\n dialogRef.close();\n }\n });\n }\n\n if (componentOrTemplateRef instanceof TemplateRef) {\n dialogContainer.attachTemplatePortal(\n new TemplatePortal<T>(componentOrTemplateRef, /** @type {?} */(( null)), /** @type {?} */((\n <any>{ $implicit: config.data, dialogRef }))));\n } else {\n const /** @type {?} */ injector = this._createInjector<T>(config, dialogRef, dialogContainer);\n const /** @type {?} */ contentRef = dialogContainer.attachComponentPortal(\n new ComponentPortal(componentOrTemplateRef, undefined, injector));\n dialogRef.componentInstance = contentRef.instance;\n }\n\n dialogRef\n .updateSize(config.width, config.height)\n .updatePosition(config.position);\n\n return dialogRef;\n }\n/**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n * @template T\n * @param {?} config Config object that is used to construct the dialog.\n * @param {?} dialogRef Reference to the dialog.\n * @param {?} dialogContainer\n * @return {?} The custom injector that can be used inside the dialog.\n */\nprivate _createInjector<T>(\n config: MdDialogConfig,\n dialogRef: MdDialogRef<T>,\n dialogContainer: MdDialogContainer): PortalInjector {\n\n const /** @type {?} */ userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const /** @type {?} */ injectionTokens = new WeakMap();\n\n injectionTokens.set(MdDialogRef, dialogRef);\n injectionTokens.set(MdDialogContainer, dialogContainer);\n injectionTokens.set(MD_DIALOG_DATA, config.data);\n\n return new PortalInjector(userInjector || this._injector, injectionTokens);\n }\n/**\n * Removes a dialog from the array of open dialogs.\n * @param {?} dialogRef Dialog to be removed.\n * @return {?}\n */\nprivate _removeOpenDialog(dialogRef: MdDialogRef<any>) {\n const /** @type {?} */ index = this.openDialogs.indexOf(dialogRef);\n\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n\n // no open dialogs are left, call next on afterAllClosed Subject\n if (!this.openDialogs.length) {\n this._afterAllClosed.next();\n document.removeEventListener('keydown', this._boundKeydown);\n }\n }\n }\n/**\n * Handles global key presses while there are open dialogs. Closes the\n * top dialog when the user presses escape.\n * @param {?} event\n * @return {?}\n */\nprivate _handleKeydown(event: KeyboardEvent): void {\n const /** @type {?} */ topDialog = this.openDialogs[this.openDialogs.length - 1];\n const /** @type {?} */ canClose = topDialog ? !topDialog.disableClose : false;\n\n if (event.keyCode === ESCAPE && canClose) {\n topDialog.close();\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Overlay, },\n{type: Injector, },\n{type: Location, decorators: [{ type: Optional }, ]},\n{type: undefined, decorators: [{ type: Inject, args: [MD_DIALOG_SCROLL_STRATEGY, ] }, ]},\n{type: MdDialog, decorators: [{ type: Optional }, { type: SkipSelf }, ]},\n];\n}\n\nfunction MdDialog_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDialog.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDialog.ctorParameters;\n/** @type {?} */\nMdDialog.prototype._openDialogsAtThisLevel;\n/** @type {?} */\nMdDialog.prototype._afterAllClosedAtThisLevel;\n/** @type {?} */\nMdDialog.prototype._afterOpenAtThisLevel;\n/** @type {?} */\nMdDialog.prototype._boundKeydown;\n/**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n * @type {?}\n */\nMdDialog.prototype.afterAllClosed;\n/** @type {?} */\nMdDialog.prototype._overlay;\n/** @type {?} */\nMdDialog.prototype._injector;\n/** @type {?} */\nMdDialog.prototype._scrollStrategy;\n/** @type {?} */\nMdDialog.prototype._parentDialog;\n}\n\n/**\n * Applies default options to the dialog config.\n * @param {?=} config Config to be modified.\n * @return {?} The new configuration object.\n */\nfunction _applyConfigDefaults(config?: MdDialogConfig): MdDialogConfig {\n return extendObject(new MdDialogConfig(), config);\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, Input, OnChanges, OnInit, Optional, SimpleChanges} from '@angular/core';\nimport {MdDialogRef} from './dialog-ref';\nimport {MdDialogContainer} from './dialog-container';\n/**\n * Counter used to generate unique IDs for dialog elements.\n */\nlet dialogElementUid = 0;\n/**\n * Button that will close the current dialog.\n */\nexport class MdDialogClose implements OnChanges {\n/**\n * Screenreader label for the button.\n */\nariaLabel: string = 'Close dialog';\n/**\n * Dialog close input.\n */\ndialogResult: any;\n\n _matDialogClose: any;\n _mdDialogClose: any;\n _matDialogCloseResult: any;\n/**\n * @param {?} dialogRef\n */\nconstructor(public dialogRef: MdDialogRef<any>) { }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges) {\n const /** @type {?} */ proxiedChange = changes._matDialogClose || changes._mdDialogClose ||\n changes._matDialogCloseResult;\n\n if (proxiedChange) {\n this.dialogResult = proxiedChange.currentValue;\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `button[md-dialog-close], button[mat-dialog-close],\n button[mdDialogClose], button[matDialogClose]`,\n host: {\n '(click)': 'dialogRef.close(dialogResult)',\n '[attr.aria-label]': 'ariaLabel',\n 'type': 'button', // Prevents accidental form submits.\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdDialogRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ariaLabel': [{ type: Input, args: ['aria-label', ] },],\n'dialogResult': [{ type: Input, args: ['md-dialog-close', ] },],\n'_matDialogClose': [{ type: Input, args: ['matDialogClose', ] },],\n'_mdDialogClose': [{ type: Input, args: ['mdDialogClose', ] },],\n'_matDialogCloseResult': [{ type: Input, args: ['mat-dialog-close', ] },],\n};\n}\n\nfunction MdDialogClose_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDialogClose.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDialogClose.ctorParameters;\n/** @type {?} */\nMdDialogClose.propDecorators;\n/**\n * Screenreader label for the button.\n * @type {?}\n */\nMdDialogClose.prototype.ariaLabel;\n/**\n * Dialog close input.\n * @type {?}\n */\nMdDialogClose.prototype.dialogResult;\n/** @type {?} */\nMdDialogClose.prototype._matDialogClose;\n/** @type {?} */\nMdDialogClose.prototype._mdDialogClose;\n/** @type {?} */\nMdDialogClose.prototype._matDialogCloseResult;\n/** @type {?} */\nMdDialogClose.prototype.dialogRef;\n}\n\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\nexport class MdDialogTitle implements OnInit {\n id = `md-dialog-title-${dialogElementUid++}`;\n/**\n * @param {?} _container\n */\nconstructor(\nprivate _container: MdDialogContainer) { }\n/**\n * @return {?}\n */\nngOnInit() {\n if (this._container && !this._container._ariaLabelledBy) {\n Promise.resolve().then(() => this._container._ariaLabelledBy = this.id);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-dialog-title], [mat-dialog-title], [mdDialogTitle], [matDialogTitle]',\n host: {\n 'class': 'mat-dialog-title',\n '[id]': 'id',\n },\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdDialogContainer, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'id': [{ type: Input },],\n};\n}\n\nfunction MdDialogTitle_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDialogTitle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDialogTitle.ctorParameters;\n/** @type {?} */\nMdDialogTitle.propDecorators;\n/** @type {?} */\nMdDialogTitle.prototype.id;\n/** @type {?} */\nMdDialogTitle.prototype._container;\n}\n\n/**\n * Scrollable content container of a dialog.\n */\nexport class MdDialogContent { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `[md-dialog-content], md-dialog-content, [mat-dialog-content], mat-dialog-content,\n [mdDialogContent], [matDialogContent]`,\n host: {'class': 'mat-dialog-content'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdDialogContent_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDialogContent.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDialogContent.ctorParameters;\n}\n\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\nexport class MdDialogActions { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `[md-dialog-actions], md-dialog-actions, [mat-dialog-actions], mat-dialog-actions,\n [mdDialogActions], [matDialogActions]`,\n host: {'class': 'mat-dialog-actions'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdDialogActions_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDialogActions.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDialogActions.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {MdCommonModule} from '@angular/material/core';\nimport {MdDialog, MD_DIALOG_SCROLL_STRATEGY_PROVIDER} from './dialog';\nimport {MdDialogContainer} from './dialog-container';\nimport {\n MdDialogClose,\n MdDialogContent,\n MdDialogTitle,\n MdDialogActions\n} from './dialog-content-directives';\nexport class MdDialogModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n CommonModule,\n OverlayModule,\n PortalModule,\n A11yModule,\n MdCommonModule,\n ],\n exports: [\n MdDialogContainer,\n MdDialogClose,\n MdDialogTitle,\n MdDialogContent,\n MdDialogActions,\n MdCommonModule,\n ],\n declarations: [\n MdDialogContainer,\n MdDialogClose,\n MdDialogTitle,\n MdDialogActions,\n MdDialogContent,\n ],\n providers: [\n MdDialog,\n MD_DIALOG_SCROLL_STRATEGY_PROVIDER,\n ],\n entryComponents: [MdDialogContainer],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdDialogModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDialogModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDialogModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdDialogModule,MD_DIALOG_DATA,MD_DIALOG_SCROLL_STRATEGY,MD_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY,MD_DIALOG_SCROLL_STRATEGY_PROVIDER,MdDialog,throwMdDialogContentAlreadyAttachedError,MdDialogContainer,MdDialogClose,MdDialogTitle,MdDialogContent,MdDialogActions,DialogRole,DialogPosition,MdDialogConfig,MdDialogRef,MAT_DIALOG_DATA,MAT_DIALOG_SCROLL_STRATEGY,MAT_DIALOG_SCROLL_STRATEGY_PROVIDER,MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY,MatDialog,MatDialogActions,MatDialogClose,MatDialogConfig,MatDialogContainer,MatDialogContent,MatDialogModule,MatDialogRef,MatDialogTitle} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Injectable, Optional, SecurityContext, SkipSelf} from '@angular/core';\nimport {Http} from '@angular/http';\nimport {\n catchOperator,\n doOperator,\n finallyOperator,\n map,\n RxChain,\n share,\n} from '@angular/material/core';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {Observable} from 'rxjs/Observable';\nimport {forkJoin} from 'rxjs/observable/forkJoin';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {_throw as observableThrow} from 'rxjs/observable/throw';\n/**\n * Returns an exception to be thrown in the case when attempting to\n * load an icon with a name that cannot be found.\n * \\@docs-private\n * @param {?} iconName\n * @return {?}\n */\nexport function getMdIconNameNotFoundError(iconName: string): Error {\n return Error(`Unable to find icon with the name \"${iconName}\"`);\n}\n/**\n * Returns an exception to be thrown when the consumer attempts to use\n * `<md-icon>` without including \\@angular/http.\n * \\@docs-private\n * @return {?}\n */\nexport function getMdIconNoHttpProviderError(): Error {\n return Error('Could not find Http provider for use with Angular Material icons. ' +\n 'Please include the HttpModule from @angular/http in your app imports.');\n}\n/**\n * Returns an exception to be thrown when a URL couldn't be sanitized.\n * \\@docs-private\n * @param {?} url URL that was attempted to be sanitized.\n * @return {?}\n */\nexport function getMdIconFailedToSanitizeError(url: SafeResourceUrl): Error {\n return Error(`The URL provided to MdIconRegistry was not trusted as a resource URL ` +\n `via Angular's DomSanitizer. Attempted URL was \"${url}\".`);\n}\n/**\n * Configuration for an icon, including the URL and possibly the cached SVG element.\n * \\@docs-private\n */\nclass SvgIconConfig {\n svgElement: SVGElement | null = null;\n/**\n * @param {?} url\n */\nconstructor(public url: SafeResourceUrl) { }\n}\n\nfunction SvgIconConfig_tsickle_Closure_declarations() {\n/** @type {?} */\nSvgIconConfig.prototype.svgElement;\n/** @type {?} */\nSvgIconConfig.prototype.url;\n}\n\n/**\n * Service to register and display icons used by the <md-icon> component.\n * - Registers icon URLs by namespace and name.\n * - Registers icon set URLs by namespace.\n * - Registers aliases for CSS classes, for use with icon fonts.\n * - Loads icons from URLs and extracts individual icons from icon sets.\n */\nexport class MdIconRegistry {\n/**\n * URLs and cached SVG elements for individual icons. Keys are of the format \"[namespace]:[icon]\".\n */\nprivate _svgIconConfigs = new Map<string, SvgIconConfig>();\n/**\n * SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.\n * Multiple icon sets can be registered under the same namespace.\n */\nprivate _iconSetConfigs = new Map<string, SvgIconConfig[]>();\n/**\n * Cache for icons loaded by direct URLs.\n */\nprivate _cachedIconsByUrl = new Map<string, SVGElement>();\n/**\n * In-progress icon fetches. Used to coalesce multiple requests to the same URL.\n */\nprivate _inProgressUrlFetches = new Map<string, Observable<string>>();\n/**\n * Map from font identifiers to their CSS class names. Used for icon fonts.\n */\nprivate _fontCssClassesByAlias = new Map<string, string>();\n/**\n * The CSS class to apply when an <md-icon> component has no icon name, url, or font specified.\n * The default 'material-icons' value assumes that the material icon font has been loaded as\n * described at http://google.github.io/material-design-icons/#icon-font-for-the-web\n */\nprivate _defaultFontSetClass = 'material-icons';\n/**\n * @param {?} _http\n * @param {?} _sanitizer\n */\nconstructor(\nprivate _http: Http,\nprivate _sanitizer: DomSanitizer) {}\n/**\n * Registers an icon by URL in the default namespace.\n * @param {?} iconName Name under which the icon should be registered.\n * @param {?} url\n * @return {?}\n */\naddSvgIcon(iconName: string, url: SafeResourceUrl): this {\n return this.addSvgIconInNamespace('', iconName, url);\n }\n/**\n * Registers an icon by URL in the specified namespace.\n * @param {?} namespace Namespace in which the icon should be registered.\n * @param {?} iconName Name under which the icon should be registered.\n * @param {?} url\n * @return {?}\n */\naddSvgIconInNamespace(namespace: string, iconName: string, url: SafeResourceUrl): this {\n const /** @type {?} */ key = iconKey(namespace, iconName);\n this._svgIconConfigs.set(key, new SvgIconConfig(url));\n return this;\n }\n/**\n * Registers an icon set by URL in the default namespace.\n * @param {?} url\n * @return {?}\n */\naddSvgIconSet(url: SafeResourceUrl): this {\n return this.addSvgIconSetInNamespace('', url);\n }\n/**\n * Registers an icon set by URL in the specified namespace.\n * @param {?} namespace Namespace in which to register the icon set.\n * @param {?} url\n * @return {?}\n */\naddSvgIconSetInNamespace(namespace: string, url: SafeResourceUrl): this {\n const /** @type {?} */ config = new SvgIconConfig(url);\n const /** @type {?} */ configNamespace = this._iconSetConfigs.get(namespace);\n\n if (configNamespace) {\n configNamespace.push(config);\n } else {\n this._iconSetConfigs.set(namespace, [config]);\n }\n return this;\n }\n/**\n * Defines an alias for a CSS class name to be used for icon fonts. Creating an mdIcon\n * component with the alias as the fontSet input will cause the class name to be applied\n * to the <md-icon> element.\n * \n * @param {?} alias Alias for the font.\n * @param {?=} className Class name override to be used instead of the alias.\n * @return {?}\n */\nregisterFontClassAlias(alias: string, className = alias): this {\n this._fontCssClassesByAlias.set(alias, className);\n return this;\n }\n/**\n * Returns the CSS class name associated with the alias by a previous call to\n * registerFontClassAlias. If no CSS class has been associated, returns the alias unmodified.\n * @param {?} alias\n * @return {?}\n */\nclassNameForFontAlias(alias: string): string {\n return this._fontCssClassesByAlias.get(alias) || alias;\n }\n/**\n * Sets the CSS class name to be used for icon fonts when an <md-icon> component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n * \n * @param {?} className\n * @return {?}\n */\nsetDefaultFontSetClass(className: string): this {\n this._defaultFontSetClass = className;\n return this;\n }\n/**\n * Returns the CSS class name to be used for icon fonts when an <md-icon> component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n * @return {?}\n */\ngetDefaultFontSetClass(): string {\n return this._defaultFontSetClass;\n }\n/**\n * Returns an Observable that produces the icon (as an <svg> DOM element) from the given URL.\n * The response from the URL may be cached so this will not always cause an HTTP request, but\n * the produced element will always be a new copy of the originally fetched icon. (That is,\n * it will not contain any modifications made to elements previously returned).\n * \n * @param {?} safeUrl URL from which to fetch the SVG icon.\n * @return {?}\n */\ngetSvgIconFromUrl(safeUrl: SafeResourceUrl): Observable<SVGElement> {\n let /** @type {?} */ url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n\n if (!url) {\n throw getMdIconFailedToSanitizeError(safeUrl);\n }\n\n let /** @type {?} */ cachedIcon = this._cachedIconsByUrl.get(url);\n\n if (cachedIcon) {\n return observableOf(cloneSvg(cachedIcon));\n }\n\n return RxChain.from(this._loadSvgIconFromConfig(new SvgIconConfig(url)))\n .call(doOperator, svg => this._cachedIconsByUrl.set( /** @type {?} */((url)), svg))\n .call(map, svg => cloneSvg(svg))\n .result();\n }\n/**\n * Returns an Observable that produces the icon (as an <svg> DOM element) with the given name\n * and namespace. The icon must have been previously registered with addIcon or addIconSet;\n * if not, the Observable will throw an error.\n * \n * @param {?} name Name of the icon to be retrieved.\n * @param {?=} namespace Namespace in which to look for the icon.\n * @return {?}\n */\ngetNamedSvgIcon(name: string, namespace = ''): Observable<SVGElement> {\n // Return (copy of) cached icon if possible.\n const /** @type {?} */ key = iconKey(namespace, name);\n const /** @type {?} */ config = this._svgIconConfigs.get(key);\n\n if (config) {\n return this._getSvgFromConfig(config);\n }\n\n // See if we have any icon sets registered for the namespace.\n const /** @type {?} */ iconSetConfigs = this._iconSetConfigs.get(namespace);\n\n if (iconSetConfigs) {\n return this._getSvgFromIconSetConfigs(name, iconSetConfigs);\n }\n\n return observableThrow(getMdIconNameNotFoundError(key));\n }\n/**\n * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.\n * @param {?} config\n * @return {?}\n */\nprivate _getSvgFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n if (config.svgElement) {\n // We already have the SVG element for this icon, return a copy.\n return observableOf(cloneSvg(config.svgElement));\n } else {\n // Fetch the icon from the config's URL, cache it, and return a copy.\n return RxChain.from(this._loadSvgIconFromConfig(config))\n .call(doOperator, svg => config.svgElement = svg)\n .call(map, svg => cloneSvg(svg))\n .result();\n }\n }\n/**\n * Attempts to find an icon with the specified name in any of the SVG icon sets.\n * First searches the available cached icons for a nested element with a matching name, and\n * if found copies the element to a new <svg> element. If not found, fetches all icon sets\n * that have not been cached, and searches again after all fetches are completed.\n * The returned Observable produces the SVG element if possible, and throws\n * an error if no icon with the specified name can be found.\n * @param {?} name\n * @param {?} iconSetConfigs\n * @return {?}\n */\nprivate _getSvgFromIconSetConfigs(name: string, iconSetConfigs: SvgIconConfig[]):\n Observable<SVGElement> {\n // For all the icon set SVG elements we've fetched, see if any contain an icon with the\n // requested name.\n const /** @type {?} */ namedIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n\n if (namedIcon) {\n // We could cache namedIcon in _svgIconConfigs, but since we have to make a copy every\n // time anyway, there's probably not much advantage compared to just always extracting\n // it from the icon set.\n return observableOf(namedIcon);\n }\n\n // Not found in any cached icon sets. If there are icon sets with URLs that we haven't\n // fetched, fetch them now and look for iconName in the results.\n const /** @type {?} */ iconSetFetchRequests: Observable<SVGElement | null>[] = iconSetConfigs\n .filter(iconSetConfig => !iconSetConfig.svgElement)\n .map(iconSetConfig => {\n return RxChain.from(this._loadSvgIconSetFromConfig(iconSetConfig))\n .call(catchOperator, (err: any): Observable<SVGElement | null> => {\n let /** @type {?} */ url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);\n\n // Swallow errors fetching individual URLs so the combined Observable won't\n // necessarily fail.\n console.log(`Loading icon set URL: ${url} failed: ${err}`);\n return observableOf(null);\n })\n .call(doOperator, svg => {\n // Cache the SVG element.\n if (svg) {\n iconSetConfig.svgElement = svg;\n }\n })\n .result();\n });\n\n // Fetch all the icon set URLs. When the requests complete, every IconSet should have a\n // cached SVG element (unless the request failed), and we can check again for the icon.\n return map.call(forkJoin.call(Observable, iconSetFetchRequests), () => {\n const /** @type {?} */ foundIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n\n if (!foundIcon) {\n throw getMdIconNameNotFoundError(name);\n }\n\n return foundIcon;\n });\n }\n/**\n * Searches the cached SVG elements for the given icon sets for a nested icon element whose \"id\"\n * tag matches the specified name. If found, copies the nested element to a new SVG element and\n * returns it. Returns null if no matching element is found.\n * @param {?} iconName\n * @param {?} iconSetConfigs\n * @return {?}\n */\nprivate _extractIconWithNameFromAnySet(iconName: string, iconSetConfigs: SvgIconConfig[]):\n SVGElement | null {\n // Iterate backwards, so icon sets added later have precedence.\n for (let /** @type {?} */ i = iconSetConfigs.length - 1; i >= 0; i--) {\n const /** @type {?} */ config = iconSetConfigs[i];\n if (config.svgElement) {\n const /** @type {?} */ foundIcon = this._extractSvgIconFromSet(config.svgElement, iconName);\n if (foundIcon) {\n return foundIcon;\n }\n }\n }\n return null;\n }\n/**\n * Loads the content of the icon URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n * @param {?} config\n * @return {?}\n */\nprivate _loadSvgIconFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n return map.call(this._fetchUrl(config.url),\n svgText => this._createSvgElementForSingleIcon(svgText));\n }\n/**\n * Loads the content of the icon set URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n * @param {?} config\n * @return {?}\n */\nprivate _loadSvgIconSetFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n // TODO: Document that icons should only be loaded from trusted sources.\n return map.call(this._fetchUrl(config.url),\n svgText => this._svgElementFromString(svgText));\n }\n/**\n * Creates a DOM element from the given SVG string, and adds default attributes.\n * @param {?} responseText\n * @return {?}\n */\nprivate _createSvgElementForSingleIcon(responseText: string): SVGElement {\n const /** @type {?} */ svg = this._svgElementFromString(responseText);\n this._setSvgAttributes(svg);\n return svg;\n }\n/**\n * Searches the cached element of the given SvgIconConfig for a nested icon element whose \"id\"\n * tag matches the specified name. If found, copies the nested element to a new SVG element and\n * returns it. Returns null if no matching element is found.\n * @param {?} iconSet\n * @param {?} iconName\n * @return {?}\n */\nprivate _extractSvgIconFromSet(iconSet: SVGElement, iconName: string): SVGElement | null {\n const /** @type {?} */ iconNode = iconSet.querySelector('#' + iconName);\n\n if (!iconNode) {\n return null;\n }\n\n // If the icon node is itself an <svg> node, clone and return it directly. If not, set it as\n // the content of a new <svg> node.\n if (iconNode.tagName.toLowerCase() === 'svg') {\n return this._setSvgAttributes( /** @type {?} */((iconNode.cloneNode(true) as SVGElement)));\n }\n\n // If the node is a <symbol>, it won't be rendered so we have to convert it into <svg>. Note\n // that the same could be achieved by referring to it via <use href=\"#id\">, however the <use>\n // tag is problematic on Firefox, because it needs to include the current page path.\n if (iconNode.nodeName.toLowerCase() === 'symbol') {\n return this._setSvgAttributes(this._toSvgElement(iconNode));\n }\n\n // createElement('SVG') doesn't work as expected; the DOM ends up with\n // the correct nodes, but the SVG content doesn't render. Instead we\n // have to create an empty SVG node using innerHTML and append its content.\n // Elements created using DOMParser.parseFromString have the same problem.\n // http://stackoverflow.com/questions/23003278/svg-innerhtml-in-firefox-can-not-display\n const /** @type {?} */ svg = this._svgElementFromString('<svg></svg>');\n // Clone the node so we don't remove it from the parent icon set element.\n svg.appendChild(iconNode.cloneNode(true));\n\n return this._setSvgAttributes(svg);\n }\n/**\n * Creates a DOM element from the given SVG string.\n * @param {?} str\n * @return {?}\n */\nprivate _svgElementFromString(str: string): SVGElement {\n // TODO: Is there a better way than innerHTML? Renderer doesn't appear to have a method for\n // creating an element from an HTML string.\n const /** @type {?} */ div = document.createElement('DIV');\n div.innerHTML = str;\n const /** @type {?} */ svg = /** @type {?} */(( div.querySelector('svg') as SVGElement));\n if (!svg) {\n throw Error('<svg> tag not found');\n }\n return svg;\n }\n/**\n * Converts an element into an SVG node by cloning all of its children.\n * @param {?} element\n * @return {?}\n */\nprivate _toSvgElement(element: Element): SVGElement {\n let /** @type {?} */ svg = this._svgElementFromString('<svg></svg>');\n\n for (let /** @type {?} */ i = 0; i < element.childNodes.length; i++) {\n if (element.childNodes[i].nodeType === Node.ELEMENT_NODE) {\n svg.appendChild(element.childNodes[i].cloneNode(true));\n }\n }\n\n return svg;\n }\n/**\n * Sets the default attributes for an SVG element to be used as an icon.\n * @param {?} svg\n * @return {?}\n */\nprivate _setSvgAttributes(svg: SVGElement): SVGElement {\n if (!svg.getAttribute('xmlns')) {\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n }\n svg.setAttribute('fit', '');\n svg.setAttribute('height', '100%');\n svg.setAttribute('width', '100%');\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n svg.setAttribute('focusable', 'false'); // Disable IE11 default behavior to make SVGs focusable.\n return svg;\n }\n/**\n * Returns an Observable which produces the string contents of the given URL. Results may be\n * cached, so future calls with the same URL may not cause another HTTP request.\n * @param {?} safeUrl\n * @return {?}\n */\nprivate _fetchUrl(safeUrl: SafeResourceUrl): Observable<string> {\n if (!this._http) {\n throw getMdIconNoHttpProviderError();\n }\n\n const /** @type {?} */ url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n\n if (!url) {\n throw getMdIconFailedToSanitizeError(safeUrl);\n }\n\n // Store in-progress fetches to avoid sending a duplicate request for a URL when there is\n // already a request in progress for that URL. It's necessary to call share() on the\n // Observable returned by http.get() so that multiple subscribers don't cause multiple XHRs.\n const /** @type {?} */ inProgressFetch = this._inProgressUrlFetches.get(url);\n\n if (inProgressFetch) {\n return inProgressFetch;\n }\n\n // TODO(jelbourn): for some reason, the `finally` operator \"loses\" the generic type on the\n // Observable. Figure out why and fix it.\n const /** @type {?} */ req = RxChain.from(this._http.get(url))\n .call(map, response => response.text())\n .call(finallyOperator, () => this._inProgressUrlFetches.delete(url))\n .call(share)\n .result();\n\n this._inProgressUrlFetches.set(url, req);\n return req;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Http, decorators: [{ type: Optional }, ]},\n{type: DomSanitizer, },\n];\n}\n\nfunction MdIconRegistry_tsickle_Closure_declarations() {\n/** @type {?} */\nMdIconRegistry.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdIconRegistry.ctorParameters;\n/**\n * URLs and cached SVG elements for individual icons. Keys are of the format \"[namespace]:[icon]\".\n * @type {?}\n */\nMdIconRegistry.prototype._svgIconConfigs;\n/**\n * SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.\n * Multiple icon sets can be registered under the same namespace.\n * @type {?}\n */\nMdIconRegistry.prototype._iconSetConfigs;\n/**\n * Cache for icons loaded by direct URLs.\n * @type {?}\n */\nMdIconRegistry.prototype._cachedIconsByUrl;\n/**\n * In-progress icon fetches. Used to coalesce multiple requests to the same URL.\n * @type {?}\n */\nMdIconRegistry.prototype._inProgressUrlFetches;\n/**\n * Map from font identifiers to their CSS class names. Used for icon fonts.\n * @type {?}\n */\nMdIconRegistry.prototype._fontCssClassesByAlias;\n/**\n * The CSS class to apply when an <md-icon> component has no icon name, url, or font specified.\n * The default 'material-icons' value assumes that the material icon font has been loaded as\n * described at http://google.github.io/material-design-icons/#icon-font-for-the-web\n * @type {?}\n */\nMdIconRegistry.prototype._defaultFontSetClass;\n/** @type {?} */\nMdIconRegistry.prototype._http;\n/** @type {?} */\nMdIconRegistry.prototype._sanitizer;\n}\n\n/**\n * \\@docs-private\n * @param {?} parentRegistry\n * @param {?} http\n * @param {?} sanitizer\n * @return {?}\n */\nexport function ICON_REGISTRY_PROVIDER_FACTORY(\n parentRegistry: MdIconRegistry, http: Http, sanitizer: DomSanitizer) {\n return parentRegistry || new MdIconRegistry(http, sanitizer);\n}\n/**\n * \\@docs-private\n */\nexport const ICON_REGISTRY_PROVIDER = {\n // If there is already an MdIconRegistry available, use that. Otherwise, provide a new one.\n provide: MdIconRegistry,\n deps: [[new Optional(), new SkipSelf(), MdIconRegistry], [new Optional(), Http], DomSanitizer],\n useFactory: ICON_REGISTRY_PROVIDER_FACTORY\n};\n/**\n * Clones an SVGElement while preserving type information.\n * @param {?} svg\n * @return {?}\n */\nfunction cloneSvg(svg: SVGElement): SVGElement {\n return /** @type {?} */(( svg.cloneNode(true) as SVGElement));\n}\n/**\n * Returns the cache key to use for an icon namespace and name.\n * @param {?} namespace\n * @param {?} name\n * @return {?}\n */\nfunction iconKey(namespace: string, name: string) {\n return namespace + ':' + name;\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n Attribute,\n} from '@angular/core';\nimport {MdIconRegistry} from './icon-registry';\nimport {CanColor, mixinColor} from '@angular/material/core';\nimport {first} from '@angular/material/core';\n/**\n * \\@docs-private\n */\nexport class MdIconBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdIconBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdIconBase.prototype._renderer;\n/** @type {?} */\nMdIconBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdIconMixinBase = mixinColor(MdIconBase);\n/**\n * Component to display an icon. It can be used in the following ways:\n * \n * - Specify the svgIcon input to load an SVG icon from a URL previously registered with the\n * addSvgIcon, addSvgIconInNamespace, addSvgIconSet, or addSvgIconSetInNamespace methods of\n * MdIconRegistry. If the svgIcon value contains a colon it is assumed to be in the format\n * \"[namespace]:[name]\", if not the value will be the name of an icon in the default namespace.\n * Examples:\n * <md-icon svgIcon=\"left-arrow\"></md-icon>\n * <md-icon svgIcon=\"animals:cat\"></md-icon>\n * \n * - Use a font ligature as an icon by putting the ligature text in the content of the <md-icon>\n * component. By default the Material icons font is used as described at\n * http://google.github.io/material-design-icons/#icon-font-for-the-web. You can specify an\n * alternate font by setting the fontSet input to either the CSS class to apply to use the\n * desired font, or to an alias previously registered with MdIconRegistry.registerFontClassAlias.\n * Examples:\n * <md-icon>home</md-icon>\n * <md-icon fontSet=\"myfont\">sun</md-icon>\n * \n * - Specify a font glyph to be included via CSS rules by setting the fontSet input to specify the\n * font, and the fontIcon input to specify the icon. Typically the fontIcon will specify a\n * CSS class which causes the glyph to be displayed via a :before selector, as in\n * https://fortawesome.github.io/Font-Awesome/examples/\n * Example:\n * <md-icon fontSet=\"fa\" fontIcon=\"alarm\"></md-icon>\n */\nexport class MdIcon extends _MdIconMixinBase implements OnChanges, OnInit, CanColor {\n/**\n * Name of the icon in the SVG icon set.\n */\nsvgIcon: string;\n/**\n * Font set that the icon is a part of.\n */\nfontSet: string;\n/**\n * Name of an icon within a font set.\n */\nfontIcon: string;\nprivate _previousFontSetClass: string;\nprivate _previousFontIconClass: string;\n/**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _mdIconRegistry\n * @param {?} ariaHidden\n */\nconstructor(\n renderer: Renderer2,\n elementRef: ElementRef,\nprivate _mdIconRegistry: MdIconRegistry,\n ariaHidden: string) {\n super(renderer, elementRef);\n\n // If the user has not explicitly set aria-hidden, mark the icon as hidden, as this is\n // the right thing to do for the majority of icon use-cases.\n if (!ariaHidden) {\n renderer.setAttribute(elementRef.nativeElement, 'aria-hidden', 'true');\n }\n }\n/**\n * Splits an svgIcon binding value into its icon set and icon name components.\n * Returns a 2-element array of [(icon set), (icon name)].\n * The separator for the two fields is ':'. If there is no separator, an empty\n * string is returned for the icon set and the entire value is returned for\n * the icon name. If the argument is falsy, returns an array of two empty strings.\n * Throws an error if the name contains two or more ':' separators.\n * Examples:\n * 'social:cake' -> ['social', 'cake']\n * 'penguin' -> ['', 'penguin']\n * null -> ['', '']\n * 'a:b:c' -> (throws Error)\n * @param {?} iconName\n * @return {?}\n */\nprivate _splitIconName(iconName: string): [string, string] {\n if (!iconName) {\n return ['', ''];\n }\n const /** @type {?} */ parts = iconName.split(':');\n switch (parts.length) {\n case 1: return ['', parts[0]]; // Use default namespace.\n case 2: return /** @type {?} */(( <[string, string]>parts));\n default: throw Error(`Invalid icon name: \"${iconName}\"`);\n }\n }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges) {\n // Only update the inline SVG icon if the inputs changed, to avoid unnecessary DOM operations.\n if (changes.svgIcon) {\n if (this.svgIcon) {\n const [namespace, iconName] = this._splitIconName(this.svgIcon);\n\n first.call(this._mdIconRegistry.getNamedSvgIcon(iconName, namespace)).subscribe(\n svg => this._setSvgElement(svg),\n (err: Error) => console.log(`Error retrieving icon: ${err.message}`));\n } else {\n this._clearSvgElement();\n }\n }\n\n if (this._usingFontIcon()) {\n this._updateFontIconClasses();\n }\n }\n/**\n * @return {?}\n */\nngOnInit() {\n // Update font classes because ngOnChanges won't be called if none of the inputs are present,\n // e.g. <md-icon>arrow</md-icon>. In this case we need to add a CSS class for the default font.\n if (this._usingFontIcon()) {\n this._updateFontIconClasses();\n }\n }\n/**\n * @return {?}\n */\nprivate _usingFontIcon(): boolean {\n return !this.svgIcon;\n }\n/**\n * @param {?} svg\n * @return {?}\n */\nprivate _setSvgElement(svg: SVGElement) {\n this._clearSvgElement();\n this._renderer.appendChild(this._elementRef.nativeElement, svg);\n }\n/**\n * @return {?}\n */\nprivate _clearSvgElement() {\n const /** @type {?} */ layoutElement = this._elementRef.nativeElement;\n const /** @type {?} */ childCount = layoutElement.childNodes.length;\n\n // Remove existing child nodes and add the new SVG element. Note that we can't\n // use innerHTML, because IE will throw if the element has a data binding.\n for (let /** @type {?} */ i = 0; i < childCount; i++) {\n this._renderer.removeChild(layoutElement, layoutElement.childNodes[i]);\n }\n }\n/**\n * @return {?}\n */\nprivate _updateFontIconClasses() {\n if (!this._usingFontIcon()) {\n return;\n }\n\n const /** @type {?} */ elem = this._elementRef.nativeElement;\n const /** @type {?} */ fontSetClass = this.fontSet ?\n this._mdIconRegistry.classNameForFontAlias(this.fontSet) :\n this._mdIconRegistry.getDefaultFontSetClass();\n\n if (fontSetClass != this._previousFontSetClass) {\n if (this._previousFontSetClass) {\n this._renderer.removeClass(elem, this._previousFontSetClass);\n }\n if (fontSetClass) {\n this._renderer.addClass(elem, fontSetClass);\n }\n this._previousFontSetClass = fontSetClass;\n }\n\n if (this.fontIcon != this._previousFontIconClass) {\n if (this._previousFontIconClass) {\n this._renderer.removeClass(elem, this._previousFontIconClass);\n }\n if (this.fontIcon) {\n this._renderer.addClass(elem, this.fontIcon);\n }\n this._previousFontIconClass = this.fontIcon;\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n template: '<ng-content></ng-content>',\n selector: 'md-icon, mat-icon',\n styleUrls: ['icon.css'],\n inputs: ['color'],\n host: {\n 'role': 'img',\n 'class': 'mat-icon',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: MdIconRegistry, },\n{type: undefined, decorators: [{ type: Attribute, args: ['aria-hidden', ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'svgIcon': [{ type: Input },],\n'fontSet': [{ type: Input },],\n'fontIcon': [{ type: Input },],\n};\n}\n\nfunction MdIcon_tsickle_Closure_declarations() {\n/** @type {?} */\nMdIcon.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdIcon.ctorParameters;\n/** @type {?} */\nMdIcon.propDecorators;\n/**\n * Name of the icon in the SVG icon set.\n * @type {?}\n */\nMdIcon.prototype.svgIcon;\n/**\n * Font set that the icon is a part of.\n * @type {?}\n */\nMdIcon.prototype.fontSet;\n/**\n * Name of an icon within a font set.\n * @type {?}\n */\nMdIcon.prototype.fontIcon;\n/** @type {?} */\nMdIcon.prototype._previousFontSetClass;\n/** @type {?} */\nMdIcon.prototype._previousFontIconClass;\n/** @type {?} */\nMdIcon.prototype._mdIconRegistry;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdCommonModule} from '@angular/material/core';\nimport {MdIcon} from './icon';\nimport {ICON_REGISTRY_PROVIDER} from './icon-registry';\nexport class MdIconModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdCommonModule],\n exports: [MdIcon, MdCommonModule],\n declarations: [MdIcon],\n providers: [ICON_REGISTRY_PROVIDER],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdIconModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdIconModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdIconModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdIconModule,MdIconBase,_MdIconMixinBase,MdIcon,getMdIconNameNotFoundError,getMdIconNoHttpProviderError,getMdIconFailedToSanitizeError,MdIconRegistry,ICON_REGISTRY_PROVIDER_FACTORY,ICON_REGISTRY_PROVIDER,MatIcon,MatIconBase,MatIconModule,MatIconRegistry} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs/Subject';\n/**\n * Datepicker data that requires internationalization.\n */\nexport class MdDatepickerIntl {\n/**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\nchanges: Subject<void> = new Subject<void>();\n/**\n * A label for the calendar popup (used by screen readers).\n */\ncalendarLabel = 'Calendar';\n/**\n * A label for the button used to open the calendar popup (used by screen readers).\n */\nopenCalendarLabel = 'Open calendar';\n/**\n * A label for the previous month button (used by screen readers).\n */\nprevMonthLabel = 'Previous month';\n/**\n * A label for the next month button (used by screen readers).\n */\nnextMonthLabel = 'Next month';\n/**\n * A label for the previous year button (used by screen readers).\n */\nprevYearLabel = 'Previous year';\n/**\n * A label for the next year button (used by screen readers).\n */\nnextYearLabel = 'Next year';\n/**\n * A label for the 'switch to month view' button (used by screen readers).\n */\nswitchToMonthViewLabel = 'Change to month view';\n/**\n * A label for the 'switch to year view' button (used by screen readers).\n */\nswitchToYearViewLabel = 'Change to year view';\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdDatepickerIntl_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDatepickerIntl.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDatepickerIntl.ctorParameters;\n/**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n * @type {?}\n */\nMdDatepickerIntl.prototype.changes;\n/**\n * A label for the calendar popup (used by screen readers).\n * @type {?}\n */\nMdDatepickerIntl.prototype.calendarLabel;\n/**\n * A label for the button used to open the calendar popup (used by screen readers).\n * @type {?}\n */\nMdDatepickerIntl.prototype.openCalendarLabel;\n/**\n * A label for the previous month button (used by screen readers).\n * @type {?}\n */\nMdDatepickerIntl.prototype.prevMonthLabel;\n/**\n * A label for the next month button (used by screen readers).\n * @type {?}\n */\nMdDatepickerIntl.prototype.nextMonthLabel;\n/**\n * A label for the previous year button (used by screen readers).\n * @type {?}\n */\nMdDatepickerIntl.prototype.prevYearLabel;\n/**\n * A label for the next year button (used by screen readers).\n * @type {?}\n */\nMdDatepickerIntl.prototype.nextYearLabel;\n/**\n * A label for the 'switch to month view' button (used by screen readers).\n * @type {?}\n */\nMdDatepickerIntl.prototype.switchToMonthViewLabel;\n/**\n * A label for the 'switch to year view' button (used by screen readers).\n * @type {?}\n */\nMdDatepickerIntl.prototype.switchToYearViewLabel;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n DateAdapter,\n MATERIAL_COMPATIBILITY_MODE,\n MD_DATE_FORMATS,\n MdDateFormats,\n} from '@angular/material/core';\nimport {first} from 'rxjs/operator/first';\nimport {Subscription} from 'rxjs/Subscription';\nimport {coerceDateProperty} from './coerce-date-property';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {MdDatepickerIntl} from './datepicker-intl';\n/**\n * A calendar that is used as part of the datepicker.\n * \\@docs-private\n */\nexport class MdCalendar<D> implements AfterContentInit, OnDestroy {\nprivate _intlChanges: Subscription;\n/**\n * A date representing the period (month or year) to start the calendar in.\n * @return {?}\n */\nget startAt(): D | null { return this._startAt; }\n/**\n * @param {?} value\n * @return {?}\n */\nset startAt(value: D | null) { this._startAt = coerceDateProperty(this._dateAdapter, value); }\nprivate _startAt: D | null;\n/**\n * Whether the calendar should be started in month or year view.\n */\nstartView: 'month' | 'year' = 'month';\n/**\n * The currently selected date.\n * @return {?}\n */\nget selected(): D | null { return this._selected; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selected(value: D | null) { this._selected = coerceDateProperty(this._dateAdapter, value); }\nprivate _selected: D | null;\n/**\n * The minimum selectable date.\n * @return {?}\n */\nget minDate(): D | null { return this._minDate; }\n/**\n * @param {?} value\n * @return {?}\n */\nset minDate(value: D | null) { this._minDate = coerceDateProperty(this._dateAdapter, value); }\nprivate _minDate: D | null;\n/**\n * The maximum selectable date.\n * @return {?}\n */\nget maxDate(): D | null { return this._maxDate; }\n/**\n * @param {?} value\n * @return {?}\n */\nset maxDate(value: D | null) { this._maxDate = coerceDateProperty(this._dateAdapter, value); }\nprivate _maxDate: D | null;\n/**\n * A function used to filter which dates are selectable.\n */\ndateFilter: (date: D) => boolean;\n/**\n * Emits when the currently selected date changes.\n */\nselectedChange = new EventEmitter<D>();\n/**\n * Emits when any date is selected.\n */\nuserSelection = new EventEmitter<void>();\n/**\n * Date filter for the month and year views.\n */\n_dateFilterForViews = (date: D) => {\n return !!date &&\n (!this.dateFilter || this.dateFilter(date)) &&\n (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) &&\n (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0);\n }\n/**\n * The current active date. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n * @return {?}\n */\nget _activeDate(): D { return this._clampedActiveDate; }\n/**\n * @param {?} value\n * @return {?}\n */\nset _activeDate(value: D) {\n this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n }\nprivate _clampedActiveDate: D;\n/**\n * Whether the calendar is in month view.\n */\n_monthView: boolean;\n/**\n * The label for the current calendar view.\n * @return {?}\n */\nget _periodButtonText(): string {\n return this._monthView ?\n this._dateAdapter.format(this._activeDate, this._dateFormats.display.monthYearLabel)\n .toLocaleUpperCase() :\n this._dateAdapter.getYearName(this._activeDate);\n }\n/**\n * @return {?}\n */\nget _periodButtonLabel(): string {\n return this._monthView ? this._intl.switchToYearViewLabel : this._intl.switchToMonthViewLabel;\n }\n/**\n * The label for the the previous button.\n * @return {?}\n */\nget _prevButtonLabel(): string {\n return this._monthView ? this._intl.prevMonthLabel : this._intl.prevYearLabel;\n }\n/**\n * The label for the the next button.\n * @return {?}\n */\nget _nextButtonLabel(): string {\n return this._monthView ? this._intl.nextMonthLabel : this._intl.nextYearLabel;\n }\n/**\n * @param {?} _elementRef\n * @param {?} _intl\n * @param {?} _ngZone\n * @param {?} _dateAdapter\n * @param {?} _dateFormats\n * @param {?} changeDetectorRef\n */\nconstructor(private _elementRef: ElementRef,\nprivate _intl: MdDatepickerIntl,\nprivate _ngZone: NgZone,\nprivate _dateAdapter: DateAdapter<D>,\nprivate _dateFormats: MdDateFormats,\n changeDetectorRef: ChangeDetectorRef) {\n\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MD_DATE_FORMATS');\n }\n\n this._intlChanges = _intl.changes.subscribe(() => changeDetectorRef.markForCheck());\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._activeDate = this.startAt || this._dateAdapter.today();\n this._focusActiveCell();\n this._monthView = this.startView != 'year';\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._intlChanges.unsubscribe();\n }\n/**\n * Handles date selection in the month view.\n * @param {?} date\n * @return {?}\n */\n_dateSelected(date: D): void {\n if (!this._dateAdapter.sameDate(date, this.selected)) {\n this.selectedChange.emit(date);\n }\n }\n/**\n * @return {?}\n */\n_userSelected(): void {\n this.userSelection.emit();\n }\n/**\n * Handles month selection in the year view.\n * @param {?} month\n * @return {?}\n */\n_monthSelected(month: D): void {\n this._activeDate = month;\n this._monthView = true;\n }\n/**\n * Handles user clicks on the period label.\n * @return {?}\n */\n_currentPeriodClicked(): void {\n this._monthView = !this._monthView;\n }\n/**\n * Handles user clicks on the previous button.\n * @return {?}\n */\n_previousClicked(): void {\n this._activeDate = this._monthView ?\n this._dateAdapter.addCalendarMonths(this._activeDate, -1) :\n this._dateAdapter.addCalendarYears(this._activeDate, -1);\n }\n/**\n * Handles user clicks on the next button.\n * @return {?}\n */\n_nextClicked(): void {\n this._activeDate = this._monthView ?\n this._dateAdapter.addCalendarMonths(this._activeDate, 1) :\n this._dateAdapter.addCalendarYears(this._activeDate, 1);\n }\n/**\n * Whether the previous period button is enabled.\n * @return {?}\n */\n_previousEnabled(): boolean {\n if (!this.minDate) {\n return true;\n }\n return !this.minDate || !this._isSameView(this._activeDate, this.minDate);\n }\n/**\n * Whether the next period button is enabled.\n * @return {?}\n */\n_nextEnabled(): boolean {\n return !this.maxDate || !this._isSameView(this._activeDate, this.maxDate);\n }\n/**\n * Handles keydown events on the calendar body.\n * @param {?} event\n * @return {?}\n */\n_handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n if (this._monthView) {\n this._handleCalendarBodyKeydownInMonthView(event);\n } else {\n this._handleCalendarBodyKeydownInYearView(event);\n }\n }\n/**\n * Focuses the active cell after the microtask queue is empty.\n * @return {?}\n */\n_focusActiveCell() {\n this._ngZone.runOutsideAngular(() => {\n first.call(this._ngZone.onStable.asObservable()).subscribe(() => {\n this._elementRef.nativeElement.querySelector('.mat-calendar-body-active').focus();\n });\n });\n }\n/**\n * Whether the two dates represent the same view in the current view mode (month or year).\n * @param {?} date1\n * @param {?} date2\n * @return {?}\n */\nprivate _isSameView(date1: D, date2: D): boolean {\n return this._monthView ?\n this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) &&\n this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2) :\n this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\n }\n/**\n * Handles keydown events on the calendar body when calendar is in month view.\n * @param {?} event\n * @return {?}\n */\nprivate _handleCalendarBodyKeydownInMonthView(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case LEFT_ARROW:\n this._activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -1);\n break;\n case RIGHT_ARROW:\n this._activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 1);\n break;\n case UP_ARROW:\n this._activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this._activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n break;\n case HOME:\n this._activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n 1 - this._dateAdapter.getDate(this._activeDate));\n break;\n case END:\n this._activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n (this._dateAdapter.getNumDaysInMonth(this._activeDate) -\n this._dateAdapter.getDate(this._activeDate)));\n break;\n case PAGE_UP:\n this._activeDate = event.altKey ?\n this._dateAdapter.addCalendarYears(this._activeDate, -1) :\n this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this._activeDate = event.altKey ?\n this._dateAdapter.addCalendarYears(this._activeDate, 1) :\n this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n break;\n case ENTER:\n if (this._dateFilterForViews(this._activeDate)) {\n this._dateSelected(this._activeDate);\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n/**\n * Handles keydown events on the calendar body when calendar is in year view.\n * @param {?} event\n * @return {?}\n */\nprivate _handleCalendarBodyKeydownInYearView(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case LEFT_ARROW:\n this._activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n break;\n case RIGHT_ARROW:\n this._activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n break;\n case UP_ARROW:\n this._activeDate = this._prevMonthInSameCol(this._activeDate);\n break;\n case DOWN_ARROW:\n this._activeDate = this._nextMonthInSameCol(this._activeDate);\n break;\n case HOME:\n this._activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n -this._dateAdapter.getMonth(this._activeDate));\n break;\n case END:\n this._activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n 11 - this._dateAdapter.getMonth(this._activeDate));\n break;\n case PAGE_UP:\n this._activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n break;\n case PAGE_DOWN:\n this._activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n break;\n case ENTER:\n this._monthSelected(this._activeDate);\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n/**\n * Determine the date for the month that comes before the given month in the same column in the\n * calendar table.\n * @param {?} date\n * @return {?}\n */\nprivate _prevMonthInSameCol(date: D): D {\n // Determine how many months to jump forward given that there are 2 empty slots at the beginning\n // of each year.\n let /** @type {?} */ increment = this._dateAdapter.getMonth(date) <= 4 ? -5 :\n (this._dateAdapter.getMonth(date) >= 7 ? -7 : -12);\n return this._dateAdapter.addCalendarMonths(date, increment);\n }\n/**\n * Determine the date for the month that comes after the given month in the same column in the\n * calendar table.\n * @param {?} date\n * @return {?}\n */\nprivate _nextMonthInSameCol(date: D): D {\n // Determine how many months to jump forward given that there are 2 empty slots at the beginning\n // of each year.\n let /** @type {?} */ increment = this._dateAdapter.getMonth(date) <= 4 ? 7 :\n (this._dateAdapter.getMonth(date) >= 7 ? 5 : 12);\n return this._dateAdapter.addCalendarMonths(date, increment);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-calendar, mat-calendar',\n templateUrl: 'calendar.html',\n styleUrls: ['calendar.css'],\n host: {\n 'class': 'mat-calendar',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: MdDatepickerIntl, },\n{type: NgZone, },\n{type: DateAdapter, decorators: [{ type: Optional }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_DATE_FORMATS, ] }, ]},\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'startAt': [{ type: Input },],\n'startView': [{ type: Input },],\n'selected': [{ type: Input },],\n'minDate': [{ type: Input },],\n'maxDate': [{ type: Input },],\n'dateFilter': [{ type: Input },],\n'selectedChange': [{ type: Output },],\n'userSelection': [{ type: Output },],\n};\n}\n\nfunction MdCalendar_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCalendar.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCalendar.ctorParameters;\n/** @type {?} */\nMdCalendar.propDecorators;\n/** @type {?} */\nMdCalendar.prototype._intlChanges;\n/** @type {?} */\nMdCalendar.prototype._startAt;\n/**\n * Whether the calendar should be started in month or year view.\n * @type {?}\n */\nMdCalendar.prototype.startView;\n/** @type {?} */\nMdCalendar.prototype._selected;\n/** @type {?} */\nMdCalendar.prototype._minDate;\n/** @type {?} */\nMdCalendar.prototype._maxDate;\n/**\n * A function used to filter which dates are selectable.\n * @type {?}\n */\nMdCalendar.prototype.dateFilter;\n/**\n * Emits when the currently selected date changes.\n * @type {?}\n */\nMdCalendar.prototype.selectedChange;\n/**\n * Emits when any date is selected.\n * @type {?}\n */\nMdCalendar.prototype.userSelection;\n/**\n * Date filter for the month and year views.\n * @type {?}\n */\nMdCalendar.prototype._dateFilterForViews;\n/** @type {?} */\nMdCalendar.prototype._clampedActiveDate;\n/**\n * Whether the calendar is in month view.\n * @type {?}\n */\nMdCalendar.prototype._monthView;\n/** @type {?} */\nMdCalendar.prototype._elementRef;\n/** @type {?} */\nMdCalendar.prototype._intl;\n/** @type {?} */\nMdCalendar.prototype._ngZone;\n/** @type {?} */\nMdCalendar.prototype._dateAdapter;\n/** @type {?} */\nMdCalendar.prototype._dateFormats;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation\n} from '@angular/core';\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * \\@docs-private\n */\nexport class MdCalendarCell {\n/**\n * @param {?} value\n * @param {?} displayValue\n * @param {?} ariaLabel\n * @param {?} enabled\n */\nconstructor(public value: number,\npublic displayValue: string,\npublic ariaLabel: string,\npublic enabled: boolean) {}\n}\n\nfunction MdCalendarCell_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCalendarCell.prototype.value;\n/** @type {?} */\nMdCalendarCell.prototype.displayValue;\n/** @type {?} */\nMdCalendarCell.prototype.ariaLabel;\n/** @type {?} */\nMdCalendarCell.prototype.enabled;\n}\n\n/**\n * An internal component used to display calendar data in a table.\n * \\@docs-private\n */\nexport class MdCalendarBody {\n/**\n * The label for the table. (e.g. \"Jan 2017\").\n */\nlabel: string;\n/**\n * The cells to display in the table.\n */\nrows: MdCalendarCell[][];\n/**\n * The value in the table that corresponds to today.\n */\ntodayValue: number;\n/**\n * The value in the table that is currently selected.\n */\nselectedValue: number;\n/**\n * The minimum number of free cells needed to fit the label in the first row.\n */\nlabelMinRequiredCells: number;\n/**\n * The number of columns in the table.\n */\nnumCols = 7;\n/**\n * Whether to allow selection of disabled cells.\n */\nallowDisabledSelection = false;\n/**\n * The cell number of the active cell in the table.\n */\nactiveCell = 0;\n/**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\ncellAspectRatio = 1;\n/**\n * Emits when a new value is selected.\n */\nselectedValueChange = new EventEmitter<number>();\n/**\n * @param {?} cell\n * @return {?}\n */\n_cellClicked(cell: MdCalendarCell): void {\n if (!this.allowDisabledSelection && !cell.enabled) {\n return;\n }\n this.selectedValueChange.emit(cell.value);\n }\n/**\n * The number of blank cells to put at the beginning for the first row.\n * @return {?}\n */\nget _firstRowOffset(): number {\n return this.rows && this.rows.length && this.rows[0].length ?\n this.numCols - this.rows[0].length : 0;\n }\n/**\n * @param {?} rowIndex\n * @param {?} colIndex\n * @return {?}\n */\n_isActiveCell(rowIndex: number, colIndex: number): boolean {\n let /** @type {?} */ cellNumber = rowIndex * this.numCols + colIndex;\n\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this._firstRowOffset;\n }\n\n return cellNumber == this.activeCell;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: '[md-calendar-body], [mat-calendar-body]',\n templateUrl: 'calendar-body.html',\n styleUrls: ['calendar-body.css'],\n host: {\n 'class': 'mat-calendar-body',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'label': [{ type: Input },],\n'rows': [{ type: Input },],\n'todayValue': [{ type: Input },],\n'selectedValue': [{ type: Input },],\n'labelMinRequiredCells': [{ type: Input },],\n'numCols': [{ type: Input },],\n'allowDisabledSelection': [{ type: Input },],\n'activeCell': [{ type: Input },],\n'cellAspectRatio': [{ type: Input },],\n'selectedValueChange': [{ type: Output },],\n};\n}\n\nfunction MdCalendarBody_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCalendarBody.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCalendarBody.ctorParameters;\n/** @type {?} */\nMdCalendarBody.propDecorators;\n/**\n * The label for the table. (e.g. \"Jan 2017\").\n * @type {?}\n */\nMdCalendarBody.prototype.label;\n/**\n * The cells to display in the table.\n * @type {?}\n */\nMdCalendarBody.prototype.rows;\n/**\n * The value in the table that corresponds to today.\n * @type {?}\n */\nMdCalendarBody.prototype.todayValue;\n/**\n * The value in the table that is currently selected.\n * @type {?}\n */\nMdCalendarBody.prototype.selectedValue;\n/**\n * The minimum number of free cells needed to fit the label in the first row.\n * @type {?}\n */\nMdCalendarBody.prototype.labelMinRequiredCells;\n/**\n * The number of columns in the table.\n * @type {?}\n */\nMdCalendarBody.prototype.numCols;\n/**\n * Whether to allow selection of disabled cells.\n * @type {?}\n */\nMdCalendarBody.prototype.allowDisabledSelection;\n/**\n * The cell number of the active cell in the table.\n * @type {?}\n */\nMdCalendarBody.prototype.activeCell;\n/**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n * @type {?}\n */\nMdCalendarBody.prototype.cellAspectRatio;\n/**\n * Emits when a new value is selected.\n * @type {?}\n */\nMdCalendarBody.prototype.selectedValueChange;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanColor,\n CanDisable,\n CanDisableRipple, MATERIAL_COMPATIBILITY_MODE,\n MdRipple,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n RippleRef,\n} from '@angular/material/core';\nimport {FocusMonitor, FocusOrigin} from '@angular/cdk/a11y';\n\n\n// Increasing integer for generating unique ids for checkbox components.\nlet /** @type {?} */ nextUniqueId = 0;\n/**\n * Provider Expression that allows md-checkbox to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * \\@docs-private\n */\nexport const MD_CHECKBOX_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MdCheckbox),\n multi: true\n};\nexport type TransitionCheckState = number;\nexport let TransitionCheckState: any = {};\nTransitionCheckState.Init = 0;\nTransitionCheckState.Checked = 1;\nTransitionCheckState.Unchecked = 2;\nTransitionCheckState.Indeterminate = 3;\nTransitionCheckState[TransitionCheckState.Init] = \"Init\";\nTransitionCheckState[TransitionCheckState.Checked] = \"Checked\";\nTransitionCheckState[TransitionCheckState.Unchecked] = \"Unchecked\";\nTransitionCheckState[TransitionCheckState.Indeterminate] = \"Indeterminate\";\n\n/**\n * Change event object emitted by MdCheckbox.\n */\nexport class MdCheckboxChange {\n/**\n * The source MdCheckbox of the event.\n */\nsource: MdCheckbox;\n/**\n * The new `checked` value of the checkbox.\n */\nchecked: boolean;\n}\n\nfunction MdCheckboxChange_tsickle_Closure_declarations() {\n/**\n * The source MdCheckbox of the event.\n * @type {?}\n */\nMdCheckboxChange.prototype.source;\n/**\n * The new `checked` value of the checkbox.\n * @type {?}\n */\nMdCheckboxChange.prototype.checked;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdCheckboxBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdCheckboxBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCheckboxBase.prototype._renderer;\n/** @type {?} */\nMdCheckboxBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdCheckboxMixinBase =\n mixinColor(mixinDisableRipple(mixinDisabled(MdCheckboxBase)), 'accent');\n/**\n * A material design checkbox component. Supports all of the functionality of an HTML5 checkbox,\n * and exposes a similar API. A MdCheckbox can be either checked, unchecked, indeterminate, or\n * disabled. Note that all additional accessibility attributes are taken care of by the component,\n * so there is no need to provide them yourself. However, if you want to omit a label and still\n * have the checkbox be accessible, you may supply an [aria-label] input.\n * See: https://www.google.com/design/spec/components/selection-controls.html\n */\nexport class MdCheckbox extends _MdCheckboxMixinBase implements ControlValueAccessor, AfterViewInit,\n OnDestroy, CanColor, CanDisable, CanDisableRipple {\n/**\n * Attached to the aria-label attribute of the host element. In most cases, arial-labelledby will\n * take precedence so this may be omitted.\n */\nariaLabel: string = '';\n/**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\nariaLabelledby: string | null = null;\nprivate _uniqueId: string = `md-checkbox-${++nextUniqueId}`;\n/**\n * A unique id for the checkbox input. If none is supplied, it will be auto-generated.\n */\nid: string = this._uniqueId;\n/**\n * Returns the unique id for the visual hidden input.\n * @return {?}\n */\nget inputId(): string { return `${this.id || this._uniqueId}-input`; }\nprivate _required: boolean;\n/**\n * Whether the checkbox is required.\n * @return {?}\n */\nget required(): boolean { return this._required; }\n/**\n * @param {?} value\n * @return {?}\n */\nset required(value) { this._required = coerceBooleanProperty(value); }\n/**\n * Whether or not the checkbox should appear before or after the label.\n * @deprecated\n * @return {?}\n */\nget align(): 'start' | 'end' {\n // align refers to the checkbox relative to the label, while labelPosition refers to the\n // label relative to the checkbox. As such, they are inverted.\n return this.labelPosition == 'after' ? 'start' : 'end';\n }\n/**\n * @param {?} v\n * @return {?}\n */\nset align(v) {\n this.labelPosition = (v == 'start') ? 'after' : 'before';\n }\n/**\n * Whether the label should appear after or before the checkbox. Defaults to 'after'\n */\nlabelPosition: 'before' | 'after' = 'after';\n/**\n * Tabindex value that is passed to the underlying input element.\n */\ntabIndex: number = 0;\n/**\n * Name value will be applied to the input element if present\n */\nname: string | null = null;\n/**\n * Event emitted when the checkbox's `checked` value changes.\n */\nchange: EventEmitter<MdCheckboxChange> = new EventEmitter<MdCheckboxChange>();\n/**\n * Event emitted when the checkbox's `indeterminate` value changes.\n */\nindeterminateChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n/**\n * The value attribute of the native input element\n */\nvalue: string ;\n/**\n * The native `<input type=\"checkbox\"> element\n */\n_inputElement: ElementRef;\n/**\n * Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor.\n */\n_ripple: MdRipple;\n/**\n * Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor.\n * \\@docs-private\n */\nonTouched: () => any = () => {};\nprivate _currentAnimationClass: string = '';\nprivate _currentCheckState: TransitionCheckState = TransitionCheckState.Init;\nprivate _checked: boolean = false;\nprivate _indeterminate: boolean = false;\nprivate _controlValueAccessorChangeFn: (value: any) => void = () => {};\n/**\n * Reference to the focused state ripple.\n */\nprivate _focusRipple: RippleRef | null;\n/**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _changeDetectorRef\n * @param {?} _focusMonitor\n */\nconstructor(renderer: Renderer2,\n elementRef: ElementRef,\nprivate _changeDetectorRef: ChangeDetectorRef,\nprivate _focusMonitor: FocusMonitor) {\n super(renderer, elementRef);\n }\n/**\n * @return {?}\n */\nngAfterViewInit() {\n this._focusMonitor\n .monitor(this._inputElement.nativeElement, this._renderer, false)\n .subscribe(focusOrigin => this._onInputFocusChange(focusOrigin));\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._inputElement.nativeElement);\n }\n/**\n * Whether the checkbox is checked.\n * @return {?}\n */\nget checked() {\n return this._checked;\n }\n/**\n * @param {?} checked\n * @return {?}\n */\nset checked(checked: boolean) {\n if (checked != this.checked) {\n this._checked = checked;\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * Whether the checkbox is indeterminate. This is also known as \"mixed\" mode and can be used to\n * represent a checkbox with three states, e.g. a checkbox that represents a nested list of\n * checkable items. Note that whenever checkbox is manually clicked, indeterminate is immediately\n * set to false.\n * @return {?}\n */\nget indeterminate() {\n return this._indeterminate;\n }\n/**\n * @param {?} indeterminate\n * @return {?}\n */\nset indeterminate(indeterminate: boolean) {\n let /** @type {?} */ changed = indeterminate != this._indeterminate;\n this._indeterminate = indeterminate;\n\n if (changed) {\n if (this._indeterminate) {\n this._transitionCheckState(TransitionCheckState.Indeterminate);\n } else {\n this._transitionCheckState(\n this.checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n }\n this.indeterminateChange.emit(this._indeterminate);\n }\n }\n/**\n * @return {?}\n */\n_isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n/**\n * Method being called whenever the label text changes.\n * @return {?}\n */\n_onLabelTextChange() {\n // This method is getting called whenever the label of the checkbox changes.\n // Since the checkbox uses the OnPush strategy we need to notify it about the change\n // that has been recognized by the cdkObserveContent directive.\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param {?} value Value to be set to the model.\n * @return {?}\n */\nwriteValue(value: any) {\n this.checked = !!value;\n }\n/**\n * Registers a callback to be triggered when the value has changed.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn Function to be called on change.\n * @return {?}\n */\nregisterOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n/**\n * Registers a callback to be triggered when the control has been touched.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn Callback to be triggered when the checkbox is touched.\n * @return {?}\n */\nregisterOnTouched(fn: any) {\n this.onTouched = fn;\n }\n/**\n * Sets the checkbox's disabled state. Implemented as a part of ControlValueAccessor.\n * @param {?} isDisabled Whether the checkbox should be disabled.\n * @return {?}\n */\nsetDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n/**\n * @param {?} newState\n * @return {?}\n */\nprivate _transitionCheckState(newState: TransitionCheckState) {\n let /** @type {?} */ oldState = this._currentCheckState;\n let /** @type {?} */ renderer = this._renderer;\n let /** @type {?} */ elementRef = this._elementRef;\n\n if (oldState === newState) {\n return;\n }\n if (this._currentAnimationClass.length > 0) {\n renderer.removeClass(elementRef.nativeElement, this._currentAnimationClass);\n }\n\n this._currentAnimationClass = this._getAnimationClassForCheckStateTransition(\n oldState, newState);\n this._currentCheckState = newState;\n\n if (this._currentAnimationClass.length > 0) {\n renderer.addClass(elementRef.nativeElement, this._currentAnimationClass);\n }\n }\n/**\n * @return {?}\n */\nprivate _emitChangeEvent() {\n let /** @type {?} */ event = new MdCheckboxChange();\n event.source = this;\n event.checked = this.checked;\n\n this._controlValueAccessorChangeFn(this.checked);\n this.change.emit(event);\n }\n/**\n * Function is called whenever the focus changes for the input element.\n * @param {?} focusOrigin\n * @return {?}\n */\nprivate _onInputFocusChange(focusOrigin: FocusOrigin) {\n if (!this._focusRipple && focusOrigin === 'keyboard') {\n this._focusRipple = this._ripple.launch(0, 0, {persistent: true, centered: true});\n } else if (!focusOrigin) {\n this._removeFocusRipple();\n this.onTouched();\n }\n }\n/**\n * Toggles the `checked` state of the checkbox.\n * @return {?}\n */\ntoggle(): void {\n this.checked = !this.checked;\n }\n/**\n * Event handler for checkbox input element.\n * Toggles checked state if element is not disabled.\n * Do not toggle on (change) event since IE doesn't fire change event when\n * indeterminate checkbox is clicked.\n * @param {?} event\n * @return {?}\n */\n_onInputClick(event: Event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `checkbox` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n\n this._removeFocusRipple();\n\n if (!this.disabled) {\n // When user manually click on the checkbox, `indeterminate` is set to false.\n if (this._indeterminate) {\n Promise.resolve().then(() => {\n this._indeterminate = false;\n this.indeterminateChange.emit(this._indeterminate);\n });\n }\n\n this.toggle();\n this._transitionCheckState(\n this._checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n\n // Emit our custom change event if the native input emitted one.\n // It is important to only emit it, if the native input triggered one, because\n // we don't want to trigger a change event, when the `checked` variable changes for example.\n this._emitChangeEvent();\n }\n }\n/**\n * Focuses the checkbox.\n * @return {?}\n */\nfocus(): void {\n this._focusMonitor.focusVia(this._inputElement.nativeElement, 'keyboard');\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onInteractionEvent(event: Event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n }\n/**\n * @param {?} oldState\n * @param {?} newState\n * @return {?}\n */\nprivate _getAnimationClassForCheckStateTransition(\n oldState: TransitionCheckState, newState: TransitionCheckState): string {\n let /** @type {?} */ animSuffix: string = '';\n\n switch (oldState) {\n case TransitionCheckState.Init:\n // Handle edge case where user interacts with checkbox that does not have [(ngModel)] or\n // [checked] bound to it.\n if (newState === TransitionCheckState.Checked) {\n animSuffix = 'unchecked-checked';\n } else if (newState == TransitionCheckState.Indeterminate) {\n animSuffix = 'unchecked-indeterminate';\n } else {\n return '';\n }\n break;\n case TransitionCheckState.Unchecked:\n animSuffix = newState === TransitionCheckState.Checked ?\n 'unchecked-checked' : 'unchecked-indeterminate';\n break;\n case TransitionCheckState.Checked:\n animSuffix = newState === TransitionCheckState.Unchecked ?\n 'checked-unchecked' : 'checked-indeterminate';\n break;\n case TransitionCheckState.Indeterminate:\n animSuffix = newState === TransitionCheckState.Checked ?\n 'indeterminate-checked' : 'indeterminate-unchecked';\n break;\n }\n\n return `mat-checkbox-anim-${animSuffix}`;\n }\n/**\n * Fades out the focus state ripple.\n * @return {?}\n */\nprivate _removeFocusRipple(): void {\n if (this._focusRipple) {\n this._focusRipple.fadeOut();\n this._focusRipple = null;\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-checkbox, mat-checkbox',\n templateUrl: 'checkbox.html',\n styleUrls: ['checkbox.css'],\n host: {\n 'class': 'mat-checkbox',\n '[id]': 'id',\n '[class.mat-checkbox-indeterminate]': 'indeterminate',\n '[class.mat-checkbox-checked]': 'checked',\n '[class.mat-checkbox-disabled]': 'disabled',\n '[class.mat-checkbox-label-before]': 'labelPosition == \"before\"',\n },\n providers: [MD_CHECKBOX_CONTROL_VALUE_ACCESSOR],\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n inputs: ['disabled', 'disableRipple', 'color'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: ChangeDetectorRef, },\n{type: FocusMonitor, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ariaLabel': [{ type: Input, args: ['aria-label', ] },],\n'ariaLabelledby': [{ type: Input, args: ['aria-labelledby', ] },],\n'id': [{ type: Input },],\n'required': [{ type: Input },],\n'align': [{ type: Input },],\n'labelPosition': [{ type: Input },],\n'tabIndex': [{ type: Input },],\n'name': [{ type: Input },],\n'change': [{ type: Output },],\n'indeterminateChange': [{ type: Output },],\n'value': [{ type: Input },],\n'_inputElement': [{ type: ViewChild, args: ['input', ] },],\n'_ripple': [{ type: ViewChild, args: [MdRipple, ] },],\n'checked': [{ type: Input },],\n'indeterminate': [{ type: Input },],\n};\n}\n\nfunction MdCheckbox_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCheckbox.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCheckbox.ctorParameters;\n/** @type {?} */\nMdCheckbox.propDecorators;\n/**\n * Attached to the aria-label attribute of the host element. In most cases, arial-labelledby will\n * take precedence so this may be omitted.\n * @type {?}\n */\nMdCheckbox.prototype.ariaLabel;\n/**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n * @type {?}\n */\nMdCheckbox.prototype.ariaLabelledby;\n/** @type {?} */\nMdCheckbox.prototype._uniqueId;\n/**\n * A unique id for the checkbox input. If none is supplied, it will be auto-generated.\n * @type {?}\n */\nMdCheckbox.prototype.id;\n/** @type {?} */\nMdCheckbox.prototype._required;\n/**\n * Whether the label should appear after or before the checkbox. Defaults to 'after'\n * @type {?}\n */\nMdCheckbox.prototype.labelPosition;\n/**\n * Tabindex value that is passed to the underlying input element.\n * @type {?}\n */\nMdCheckbox.prototype.tabIndex;\n/**\n * Name value will be applied to the input element if present\n * @type {?}\n */\nMdCheckbox.prototype.name;\n/**\n * Event emitted when the checkbox's `checked` value changes.\n * @type {?}\n */\nMdCheckbox.prototype.change;\n/**\n * Event emitted when the checkbox's `indeterminate` value changes.\n * @type {?}\n */\nMdCheckbox.prototype.indeterminateChange;\n/**\n * The value attribute of the native input element\n * @type {?}\n */\nMdCheckbox.prototype.value;\n/**\n * The native `<input type=\"checkbox\"> element\n * @type {?}\n */\nMdCheckbox.prototype._inputElement;\n/**\n * Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor.\n * @type {?}\n */\nMdCheckbox.prototype._ripple;\n/**\n * Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor.\n * \\@docs-private\n * @type {?}\n */\nMdCheckbox.prototype.onTouched;\n/** @type {?} */\nMdCheckbox.prototype._currentAnimationClass;\n/** @type {?} */\nMdCheckbox.prototype._currentCheckState;\n/** @type {?} */\nMdCheckbox.prototype._checked;\n/** @type {?} */\nMdCheckbox.prototype._indeterminate;\n/** @type {?} */\nMdCheckbox.prototype._controlValueAccessorChangeFn;\n/**\n * Reference to the focused state ripple.\n * @type {?}\n */\nMdCheckbox.prototype._focusRipple;\n/** @type {?} */\nMdCheckbox.prototype._changeDetectorRef;\n/** @type {?} */\nMdCheckbox.prototype._focusMonitor;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Directive,\n forwardRef,\n Provider,\n} from '@angular/core';\nimport {\n CheckboxRequiredValidator,\n NG_VALIDATORS,\n} from '@angular/forms';\n\nexport const /** @type {?} */ _MdCheckboxRequiredValidator = CheckboxRequiredValidator;\n\nexport const /** @type {?} */ MD_CHECKBOX_REQUIRED_VALIDATOR: Provider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MdCheckboxRequiredValidator),\n multi: true\n};\n/**\n * Validator for Material checkbox's required attribute in template-driven checkbox.\n * Current CheckboxRequiredValidator only work with `input type=checkbox` and does not\n * work with `md-checkbox`.\n */\nexport class MdCheckboxRequiredValidator extends _MdCheckboxRequiredValidator {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `md-checkbox[required][formControlName],\n mat-checkbox[required][formControlName],\n md-checkbox[required][formControl], md-checkbox[required][ngModel],\n mat-checkbox[required][formControl], mat-checkbox[required][ngModel]`,\n providers: [MD_CHECKBOX_REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCheckboxRequiredValidator_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCheckboxRequiredValidator.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCheckboxRequiredValidator.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {MdRippleModule, MdCommonModule} from '@angular/material/core';\nimport {MdCheckbox} from './checkbox';\nimport {MdCheckboxRequiredValidator} from './checkbox-required-validator';\nimport {A11yModule} from '@angular/cdk/a11y';\nexport class MdCheckboxModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CommonModule, MdRippleModule, MdCommonModule, ObserversModule, A11yModule],\n exports: [MdCheckbox, MdCheckboxRequiredValidator, MdCommonModule],\n declarations: [MdCheckbox, MdCheckboxRequiredValidator],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCheckboxModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCheckboxModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCheckboxModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MD_CHECKBOX_CONTROL_VALUE_ACCESSOR,TransitionCheckState,MdCheckboxChange,MdCheckboxBase,_MdCheckboxMixinBase,MdCheckbox,MdCheckboxModule,_MdCheckboxRequiredValidator,MD_CHECKBOX_REQUIRED_VALIDATOR,MdCheckboxRequiredValidator,MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR,MAT_CHECKBOX_REQUIRED_VALIDATOR,MatCheckbox,MatCheckboxBase,MatCheckboxChange,MatCheckboxModule,MatCheckboxRequiredValidator} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {FocusableOption} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n} from '@angular/core';\nimport {\n BACKSPACE,\n CanColor,\n CanDisable,\n DELETE,\n mixinColor,\n mixinDisabled,\n SPACE,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs/Subject';\n\nexport interface MdChipEvent {\n chip: MdChip;\n}\n/**\n * Event object emitted by MdChip when selected or deselected.\n */\nexport class MdChipSelectionChange {\n/**\n * @param {?} source\n * @param {?} selected\n * @param {?=} isUserInput\n */\nconstructor(public source: MdChip,\npublic selected: boolean,\npublic isUserInput = false) { }\n}\n\nfunction MdChipSelectionChange_tsickle_Closure_declarations() {\n/** @type {?} */\nMdChipSelectionChange.prototype.source;\n/** @type {?} */\nMdChipSelectionChange.prototype.selected;\n/** @type {?} */\nMdChipSelectionChange.prototype.isUserInput;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdChipBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdChipBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdChipBase.prototype._renderer;\n/** @type {?} */\nMdChipBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdChipMixinBase = mixinColor(mixinDisabled(MdChipBase), 'primary');\n/**\n * Dummy directive to add CSS class to basic chips.\n * \\@docs-private\n */\nexport class MdBasicChip { static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `md-basic-chip, [md-basic-chip], mat-basic-chip, [mat-basic-chip]`,\n host: {'class': 'mat-basic-chip'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdBasicChip_tsickle_Closure_declarations() {\n/** @type {?} */\nMdBasicChip.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdBasicChip.ctorParameters;\n}\n\n/**\n * Material design styled Chip component. Used inside the MdChipList component.\n */\nexport class MdChip extends _MdChipMixinBase implements FocusableOption, OnDestroy, CanColor,\n CanDisable {\n\n protected _value: any;\n\n protected _selected: boolean = false;\n\n protected _selectable: boolean = true;\n\n protected _removable: boolean = true;\n/**\n * Whether the chip has focus.\n */\n_hasFocus: boolean = false;\n/**\n * Whether the chip is selected.\n * @return {?}\n */\nget selected(): boolean { return this._selected; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selected(value: boolean) {\n this._selected = coerceBooleanProperty(value);\n this.selectionChange.emit({\n source: this,\n isUserInput: false,\n selected: value\n });\n }\n/**\n * The value of the chip. Defaults to the content inside <md-chip> tags.\n * @return {?}\n */\nget value(): any {\n return this._value != undefined\n ? this._value\n : this._elementRef.nativeElement.textContent;\n }\n/**\n * @param {?} newValue\n * @return {?}\n */\nset value(newValue: any) { this._value = newValue; }\n/**\n * Whether or not the chips are selectable. When a chip is not selectable,\n * changes to it's selected state are always ignored.\n * @return {?}\n */\nget selectable(): boolean { return this._selectable; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selectable(value: boolean) { this._selectable = coerceBooleanProperty(value); }\n/**\n * Determines whether or not the chip displays the remove styling and emits (remove) events.\n * @return {?}\n */\nget removable(): boolean { return this._removable; }\n/**\n * @param {?} value\n * @return {?}\n */\nset removable(value: boolean) { this._removable = coerceBooleanProperty(value); }\n/**\n * Emits when the chip is focused.\n */\n_onFocus = new Subject<MdChipEvent>();\n/**\n * Emits when the chip is blured.\n */\n_onBlur = new Subject<MdChipEvent>();\n/**\n * Emitted when the chip is selected or deselected.\n */\nselectionChange = new EventEmitter<MdChipSelectionChange>();\n/**\n * Emitted when the chip is destroyed.\n */\ndestroyed = new EventEmitter<MdChipEvent>();\n/**\n * Emitted when the chip is destroyed.\n * @deprecated Use 'destroyed' instead.\n */\ndestroy = this.destroyed;\n/**\n * Emitted when a chip is to be removed.\n */\nremoved = new EventEmitter<MdChipEvent>();\n/**\n * Emitted when a chip is to be removed.\n * @deprecated Use `removed` instead.\n */\nonRemove = this.removed;\n/**\n * @return {?}\n */\nget ariaSelected(): string | null {\n return this.selectable ? this.selected.toString() : null;\n }\n/**\n * @param {?} renderer\n * @param {?} _elementRef\n */\nconstructor(renderer: Renderer2,\npublic _elementRef: ElementRef) {\n super(renderer, _elementRef);\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void {\n this.destroyed.emit({chip: this});\n }\n/**\n * Selects the chip.\n * @return {?}\n */\nselect(): void {\n this._selected = true;\n this.selectionChange.emit({\n source: this,\n isUserInput: false,\n selected: true\n });\n }\n/**\n * Deselects the chip.\n * @return {?}\n */\ndeselect(): void {\n this._selected = false;\n this.selectionChange.emit({\n source: this,\n isUserInput: false,\n selected: false\n });\n }\n/**\n * Select this chip and emit selected event\n * @return {?}\n */\nselectViaInteraction(): void {\n this._selected = true;\n // Emit select event when selected changes.\n this.selectionChange.emit({\n source: this,\n isUserInput: true,\n selected: true\n });\n }\n/**\n * Toggles the current selected state of this chip.\n * @param {?=} isUserInput\n * @return {?}\n */\ntoggleSelected(isUserInput: boolean = false): boolean {\n this._selected = !this.selected;\n\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this._selected\n });\n\n return this.selected;\n }\n/**\n * Allows for programmatic focusing of the chip.\n * @return {?}\n */\nfocus(): void {\n this._elementRef.nativeElement.focus();\n this._onFocus.next({chip: this});\n }\n/**\n * Allows for programmatic removal of the chip. Called by the MdChipList when the DELETE or\n * BACKSPACE keys are pressed.\n * \n * Informs any listeners of the removal request. Does not remove the chip from the DOM.\n * @return {?}\n */\nremove(): void {\n if (this.removable) {\n this.removed.emit({chip: this});\n }\n }\n/**\n * Ensures events fire properly upon click.\n * @param {?} event\n * @return {?}\n */\n_handleClick(event: Event) {\n // Check disabled\n if (this.disabled) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.focus();\n }\n/**\n * Handle custom key presses.\n * @param {?} event\n * @return {?}\n */\n_handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n return;\n }\n\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n // If we are removable, remove the focused chip\n this.remove();\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n case SPACE:\n // If we are selectable, toggle the focused chip\n if (this.selectable) {\n this.toggleSelected(true);\n }\n\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n }\n }\n/**\n * @return {?}\n */\n_blur(): void {\n this._hasFocus = false;\n this._onBlur.next({chip: this});\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `md-basic-chip, [md-basic-chip], md-chip, [md-chip],\n mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]`,\n inputs: ['color', 'disabled'],\n exportAs: 'mdChip, matChip',\n host: {\n 'class': 'mat-chip',\n 'tabindex': '-1',\n 'role': 'option',\n '[class.mat-chip-selected]': 'selected',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-selected]': 'ariaSelected',\n '(click)': '_handleClick($event)',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': '_hasFocus = true',\n '(blur)': '_blur()',\n },\n\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'selected': [{ type: Input },],\n'value': [{ type: Input },],\n'selectable': [{ type: Input },],\n'removable': [{ type: Input },],\n'selectionChange': [{ type: Output },],\n'destroyed': [{ type: Output },],\n'destroy': [{ type: Output },],\n'removed': [{ type: Output },],\n'onRemove': [{ type: Output, args: ['remove', ] },],\n};\n}\n\nfunction MdChip_tsickle_Closure_declarations() {\n/** @type {?} */\nMdChip.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdChip.ctorParameters;\n/** @type {?} */\nMdChip.propDecorators;\n/** @type {?} */\nMdChip.prototype._value;\n/** @type {?} */\nMdChip.prototype._selected;\n/** @type {?} */\nMdChip.prototype._selectable;\n/** @type {?} */\nMdChip.prototype._removable;\n/**\n * Whether the chip has focus.\n * @type {?}\n */\nMdChip.prototype._hasFocus;\n/**\n * Emits when the chip is focused.\n * @type {?}\n */\nMdChip.prototype._onFocus;\n/**\n * Emits when the chip is blured.\n * @type {?}\n */\nMdChip.prototype._onBlur;\n/**\n * Emitted when the chip is selected or deselected.\n * @type {?}\n */\nMdChip.prototype.selectionChange;\n/**\n * Emitted when the chip is destroyed.\n * @type {?}\n */\nMdChip.prototype.destroyed;\n/**\n * Emitted when the chip is destroyed.\n * @deprecated Use 'destroyed' instead.\n * @type {?}\n */\nMdChip.prototype.destroy;\n/**\n * Emitted when a chip is to be removed.\n * @type {?}\n */\nMdChip.prototype.removed;\n/**\n * Emitted when a chip is to be removed.\n * @deprecated Use `removed` instead.\n * @type {?}\n */\nMdChip.prototype.onRemove;\n/** @type {?} */\nMdChip.prototype._elementRef;\n}\n\n/**\n * Applies proper (click) support and adds styling for use with the Material Design \"cancel\" icon\n * available at https://material.io/icons/#ic_cancel.\n * \n * Example:\n * \n * <md-chip>\n * <md-icon mdChipRemove>cancel</md-icon>\n * </md-chip>\n * \n * You *may* use a custom icon, but you may need to override the `md-chip-remove` positioning styles\n * to properly center the icon within the chip.\n */\nexport class MdChipRemove {\n/**\n * @param {?} _parentChip\n */\nconstructor(protected _parentChip: MdChip) {}\n/**\n * Calls the parent chip's public `remove()` method if applicable.\n * @return {?}\n */\n_handleClick(): void {\n if (this._parentChip.removable) {\n this._parentChip.remove();\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdChipRemove], [matChipRemove]',\n host: {\n 'class': 'mat-chip-remove',\n '(click)': '_handleClick($event)'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdChip, },\n];\n}\n\nfunction MdChipRemove_tsickle_Closure_declarations() {\n/** @type {?} */\nMdChipRemove.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdChipRemove.ctorParameters;\n/** @type {?} */\nMdChipRemove.prototype._parentChip;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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 {FocusKeyManager} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {startWith} from '@angular/cdk/rxjs';\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {\n BACKSPACE,\n DELETE,\n Directionality,\n LEFT_ARROW,\n RIGHT_ARROW,\n UP_ARROW\n} from '@angular/material/core';\nimport {MdFormFieldControl} from '@angular/material/form-field';\n\nimport {Observable} from 'rxjs/Observable';\nimport {merge} from 'rxjs/observable/merge';\nimport {Subject} from 'rxjs/Subject';\nimport {Subscription} from 'rxjs/Subscription';\n\nimport {MdChip, MdChipEvent, MdChipSelectionChange} from './chip';\nimport {MdChipInput} from './chip-input';\n\n// Increasing integer for generating unique ids for chip-list components.\nlet /** @type {?} */ nextUniqueId = 0;\n/**\n * Change event object that is emitted when the chip list value has changed.\n */\nexport class MdChipListChange {\n/**\n * @param {?} source\n * @param {?} value\n */\nconstructor(public source: MdChipList,\npublic value: any) { }\n}\n\nfunction MdChipListChange_tsickle_Closure_declarations() {\n/** @type {?} */\nMdChipListChange.prototype.source;\n/** @type {?} */\nMdChipListChange.prototype.value;\n}\n\n/**\n * A material design chips component (named ChipList for it's similarity to the List component).\n */\nexport class MdChipList implements MdFormFieldControl<any>, ControlValueAccessor,\n AfterContentInit, OnInit, OnDestroy {\n/**\n * Stream that emits whenever the state of the input changes such that the wrapping `MdFormField`\n * needs to run change detection.\n */\nstateChanges = new Subject<void>();\n/**\n * When a chip is destroyed, we track the index so we can focus the appropriate next chip.\n */\nprotected _lastDestroyedIndex: number|null = null;\n/**\n * Track which chips we're listening to for focus/destruction.\n */\nprotected _chipSet: WeakMap<MdChip, boolean> = new WeakMap();\n/**\n * Subscription to tabbing out from the chip list.\n */\nprivate _tabOutSubscription = Subscription.EMPTY;\n/**\n * Subscription to changes in the chip list.\n */\nprivate _changeSubscription: Subscription;\n/**\n * Subscription to focus changes in the chips.\n */\nprivate _chipFocusSubscription: Subscription|null;\n/**\n * Subscription to blur changes in the chips.\n */\nprivate _chipBlurSubscription: Subscription|null;\n/**\n * Subscription to selection changes in chips.\n */\nprivate _chipSelectionSubscription: Subscription|null;\n/**\n * Subscription to remove changes in chips.\n */\nprivate _chipRemoveSubscription: Subscription|null;\n/**\n * Whether or not the chip is selectable.\n */\nprotected _selectable: boolean = true;\n/**\n * Whether the component is in multiple selection mode.\n */\nprivate _multiple: boolean = false;\n/**\n * The chip input to add more chips\n */\nprotected _chipInput: MdChipInput;\n/**\n * The aria-describedby attribute on the chip list for improved a11y.\n */\nprotected _ariaDescribedby: string;\n/**\n * Id of the chip list\n */\nprotected _id: string;\n/**\n * Uid of the chip list\n */\nprotected _uid: string = `md-chip-list-${nextUniqueId++}`;\n/**\n * Whether this is required\n */\nprotected _required: boolean = false;\n/**\n * Whether this is disabled\n */\nprotected _disabled: boolean = false;\n\n protected _value: any;\n/**\n * Placeholder for the chip list. Alternatively, placeholder can be set on MdChipInput\n */\nprotected _placeholder: string;\n/**\n * Tab index for the chip list.\n */\n_tabIndex = 0;\n/**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use _tabIndex\n */\n_userTabIndex: number | null = null;\n/**\n * The FocusKeyManager which handles focus.\n */\n_keyManager: FocusKeyManager<MdChip>;\n/**\n * Function when touched\n */\n_onTouched = () => {};\n/**\n * Function when changed\n */\n_onChange: (value: any) => void = () => {};\n\n _selectionModel: SelectionModel<MdChip>;\n/**\n * Comparison function to specify which option is displayed. Defaults to object equality.\n */\nprivate _compareWith = (o1: any, o2: any) => o1 === o2;\n/**\n * The array of selected chips inside chip list.\n * @return {?}\n */\nget selected(): MdChip[] | MdChip {\n return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];\n }\n/**\n * Whether the user should be allowed to select multiple chips.\n * @return {?}\n */\nget multiple(): boolean { return this._multiple; }\n/**\n * @param {?} value\n * @return {?}\n */\nset multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n/**\n * A function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n * @return {?}\n */\nget compareWith() { return this._compareWith; }\n/**\n * @param {?} fn\n * @return {?}\n */\nset compareWith(fn: (o1: any, o2: any) => boolean) {\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n/**\n * Required for FormFieldControl\n * @return {?}\n */\nget value() { return this._value; }\n/**\n * @param {?} newValue\n * @return {?}\n */\nset value(newValue: any) {\n this.writeValue(newValue);\n this._value = newValue;\n }\n/**\n * Required for FormFieldControl. The ID of the chip list\n * @param {?} value\n * @return {?}\n */\nset id(value: string) {\n this._id = value;\n this.stateChanges.next();\n }\n/**\n * @return {?}\n */\nget id() { return this._id || this._uid; }\n/**\n * Required for FormFieldControl. Whether the chip list is required.\n * @param {?} value\n * @return {?}\n */\nset required(value: any) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n/**\n * @return {?}\n */\nget required() {\n return this._required;\n }\n/**\n * For FormFieldControl. Use chip input's placholder if there's a chip input\n * @param {?} value\n * @return {?}\n */\nset placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n/**\n * @return {?}\n */\nget placeholder() {\n return this._chipInput ? this._chipInput.placeholder : this._placeholder;\n }\n/**\n * Whether any chips or the mdChipInput inside of this chip-list has focus.\n * @return {?}\n */\nget focused() {\n return this.chips.some(chip => chip._hasFocus) ||\n (this._chipInput && this._chipInput.focused);\n }\n/**\n * Whether this chip-list contains no chips and no mdChipInput.\n * @return {?}\n */\nget empty(): boolean {\n return (!this._chipInput || this._chipInput.empty) && this.chips.length === 0;\n }\n/**\n * Whether this chip-list is disabled.\n * @return {?}\n */\nget disabled() { return this.ngControl ? this.ngControl.disabled : this._disabled; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n/**\n * Whether the chip list is in an error state.\n * @return {?}\n */\nget errorState(): boolean {\n const /** @type {?} */ isInvalid = this.ngControl && this.ngControl.invalid;\n const /** @type {?} */ isTouched = this.ngControl && this.ngControl.touched;\n const /** @type {?} */ isSubmitted = (this._parentFormGroup && this._parentFormGroup.submitted) ||\n (this._parentForm && this._parentForm.submitted);\n return !!(isInvalid && (isTouched || isSubmitted));\n }\n/**\n * Orientation of the chip list.\n */\nariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n/**\n * Whether or not this chip is selectable. When a chip is not selectable,\n * its selected state is always ignored.\n * @return {?}\n */\nget selectable(): boolean { return this._selectable; }\n/**\n * @param {?} value\n * @return {?}\n */\nset selectable(value: boolean) { this._selectable = coerceBooleanProperty(value); }\n/**\n * @param {?} value\n * @return {?}\n */\nset tabIndex(value: number) {\n this._userTabIndex = value;\n this._tabIndex = value;\n }\n/**\n * Combined stream of all of the child chips' selection change events.\n * @return {?}\n */\nget chipSelectionChanges(): Observable<MdChipSelectionChange> {\n return merge(...this.chips.map(chip => chip.selectionChange));\n }\n/**\n * Combined stream of all of the child chips' focus change events.\n * @return {?}\n */\nget chipFocusChanges(): Observable<MdChipEvent> {\n return merge(...this.chips.map(chip => chip._onFocus));\n }\n/**\n * Combined stream of all of the child chips' blur change events.\n * @return {?}\n */\nget chipBlurChanges(): Observable<MdChipEvent> {\n return merge(...this.chips.map(chip => chip._onBlur));\n }\n/**\n * Combined stream of all of the child chips' remove change events.\n * @return {?}\n */\nget chipRemoveChanges(): Observable<MdChipEvent> {\n return merge(...this.chips.map(chip => chip.destroy));\n }\n/**\n * Event emitted when the selected chip list value has been changed by the user.\n */\nchange: EventEmitter<MdChipListChange> = new EventEmitter<MdChipListChange>();\n/**\n * Event that emits whenever the raw value of the chip-list changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * \\@docs-private\n */\nvalueChange = new EventEmitter<any>();\n/**\n * The chip components contained within this chip list.\n */\nchips: QueryList<MdChip>;\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _changeDetectorRef\n * @param {?} _dir\n * @param {?} _parentForm\n * @param {?} _parentFormGroup\n * @param {?} ngControl\n */\nconstructor(protected _renderer: Renderer2,\n protected _elementRef: ElementRef,\nprivate _changeDetectorRef: ChangeDetectorRef,\nprivate _dir: Directionality,\nprivate _parentForm: NgForm,\nprivate _parentFormGroup: FormGroupDirective,\npublic ngControl: NgControl) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n/**\n * @return {?}\n */\nngAfterContentInit(): void {\n\n this._keyManager = new FocusKeyManager<MdChip>(this.chips).withWrap();\n\n // Prevents the chip list from capturing focus and redirecting\n // it back to the first chip when the user tabs out.\n this._tabOutSubscription = this._keyManager.tabOut.subscribe(() => {\n this._tabIndex = -1;\n setTimeout(() => this._tabIndex = this._userTabIndex || 0);\n });\n\n // When the list changes, re-subscribe\n this._changeSubscription = startWith.call(this.chips.changes, null).subscribe(() => {\n this._resetChips();\n\n // Reset chips selected/deselected status\n this._initializeSelection();\n\n // Check to see if we need to update our tab index\n this._updateTabIndex();\n\n // Check to see if we have a destroyed chip and need to refocus\n this._updateFocusForDestroyedChips();\n });\n }\n/**\n * @return {?}\n */\nngOnInit() {\n this._selectionModel = new SelectionModel<MdChip>(this.multiple, undefined, false);\n this.stateChanges.next();\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void {\n this._tabOutSubscription.unsubscribe();\n\n if (this._changeSubscription) {\n this._changeSubscription.unsubscribe();\n }\n this._dropSubscriptions();\n }\n/**\n * Associates an HTML input element with this chip list.\n * @param {?} inputElement\n * @return {?}\n */\nregisterInput(inputElement: MdChipInput) {\n this._chipInput = inputElement;\n }\n/**\n * @param {?} ids\n * @return {?}\n */\nsetDescribedByIds(ids: string[]) { this._ariaDescribedby = ids.join(' '); }\n/**\n * @param {?} value\n * @return {?}\n */\nwriteValue(value: any): void {\n if (this.chips) {\n this._setSelectionByValue(value, false);\n }\n }\n/**\n * @param {?} fn\n * @return {?}\n */\nregisterOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n/**\n * @param {?} fn\n * @return {?}\n */\nregisterOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n/**\n * @param {?} disabled\n * @return {?}\n */\nsetDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', disabled);\n this.stateChanges.next();\n }\n/**\n * Focuses the the first non-disabled chip in this chip list, or the associated input when there\n * are no eligible chips.\n * @return {?}\n */\nfocus() {\n // TODO: ARIA says this should focus the first `selected` chip if any are selected.\n // Focus on first element if there's no chipInput inside chip-list\n if (this._chipInput && this._chipInput.focused) {\n // do nothing\n } else if (this.chips.length > 0) {\n this._keyManager.setFirstItemActive();\n this.stateChanges.next();\n } else {\n this._focusInput();\n this.stateChanges.next();\n }\n }\n/**\n * Attempt to focus an input if we have one.\n * @return {?}\n */\n_focusInput() {\n if (this._chipInput) {\n this._chipInput.focus();\n }\n }\n/**\n * Pass events to the keyboard manager. Available here for tests.\n * @param {?} event\n * @return {?}\n */\n_keydown(event: KeyboardEvent) {\n let /** @type {?} */ code = event.keyCode;\n let /** @type {?} */ target = /** @type {?} */(( event.target as HTMLElement));\n let /** @type {?} */ isInputEmpty = this._isInputEmpty(target);\n let /** @type {?} */ isRtl = this._dir && this._dir.value == 'rtl';\n\n let /** @type {?} */ isPrevKey = (code === (isRtl ? RIGHT_ARROW : LEFT_ARROW));\n let /** @type {?} */ isNextKey = (code === (isRtl ? LEFT_ARROW : RIGHT_ARROW));\n let /** @type {?} */ isBackKey = (code === BACKSPACE || code == DELETE || code == UP_ARROW || isPrevKey);\n // If they are on an empty input and hit backspace/delete/left arrow, focus the last chip\n if (isInputEmpty && isBackKey) {\n this._keyManager.setLastItemActive();\n event.preventDefault();\n return;\n }\n\n // If they are on a chip, check for space/left/right, otherwise pass to our key manager (like\n // up/down keys)\n if (target && target.classList.contains('mat-chip')) {\n if (isPrevKey) {\n this._keyManager.setPreviousItemActive();\n event.preventDefault();\n } else if (isNextKey) {\n this._keyManager.setNextItemActive();\n event.preventDefault();\n } else {\n this._keyManager.onKeydown(event);\n }\n }\n this.stateChanges.next();\n }\n/**\n * Check the tab index as you should not be allowed to focus an empty list.\n * @return {?}\n */\nprotected _updateTabIndex(): void {\n // If we have 0 chips, we should not allow keyboard focus\n this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);\n }\n/**\n * Update key manager's active item when chip is deleted.\n * If the deleted chip is the last chip in chip list, focus the new last chip.\n * Otherwise focus the next chip in the list.\n * Save `_lastDestroyedIndex` so we can set the correct focus.\n * @param {?} chip\n * @return {?}\n */\nprotected _updateKeyManager(chip: MdChip) {\n let /** @type {?} */ chipIndex: number = this.chips.toArray().indexOf(chip);\n if (this._isValidIndex(chipIndex)) {\n if (chip._hasFocus) {\n // Check whether the chip is not the last item\n if (chipIndex < this.chips.length - 1) {\n this._keyManager.setActiveItem(chipIndex);\n } else if (chipIndex - 1 >= 0) {\n this._keyManager.setActiveItem(chipIndex - 1);\n }\n }\n if (this._keyManager.activeItemIndex === chipIndex) {\n this._lastDestroyedIndex = chipIndex;\n }\n }\n }\n/**\n * Checks to see if a focus chip was recently destroyed so that we can refocus the next closest\n * one.\n * @return {?}\n */\nprotected _updateFocusForDestroyedChips() {\n let /** @type {?} */ chipsArray = this.chips;\n\n if (this._lastDestroyedIndex != null && chipsArray.length > 0) {\n // Check whether the destroyed chip was the last item\n const /** @type {?} */ newFocusIndex = Math.min(this._lastDestroyedIndex, chipsArray.length - 1);\n this._keyManager.setActiveItem(newFocusIndex);\n let /** @type {?} */ focusChip = this._keyManager.activeItem;\n // Focus the chip\n if (focusChip) {\n focusChip.focus();\n }\n } else if (chipsArray.length === 0) {\n this._focusInput();\n }\n\n // Reset our destroyed index\n this._lastDestroyedIndex = null;\n }\n/**\n * Utility to ensure all indexes are valid.\n * \n * @param {?} index The index to be checked.\n * @return {?} True if the index is valid for our list of chips.\n */\nprivate _isValidIndex(index: number): boolean {\n return index >= 0 && index < this.chips.length;\n }\n/**\n * @param {?} element\n * @return {?}\n */\nprivate _isInputEmpty(element: HTMLElement): boolean {\n if (element && element.nodeName.toLowerCase() === 'input') {\n let /** @type {?} */ input = /** @type {?} */(( element as HTMLInputElement));\n\n return !input.value;\n }\n\n return false;\n }\n/**\n * @param {?} value\n * @param {?=} isUserInput\n * @return {?}\n */\n_setSelectionByValue(value: any, isUserInput: boolean = true) {\n this._clearSelection();\n this.chips.forEach(chip => chip.deselect());\n\n if (Array.isArray(value)) {\n value.forEach(currentValue => this._selectValue(currentValue, isUserInput));\n this._sortValues();\n } else {\n const /** @type {?} */ correspondingChip = this._selectValue(value, isUserInput);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what chip the user interacted with last.\n if (correspondingChip) {\n this._keyManager.setActiveItem(this.chips.toArray().indexOf(correspondingChip));\n }\n }\n }\n/**\n * Finds and selects the chip based on its value.\n * @param {?} value\n * @param {?=} isUserInput\n * @return {?} Chip that has the corresponding value.\n */\nprivate _selectValue(value: any, isUserInput: boolean = true): MdChip | undefined {\n\n const /** @type {?} */ correspondingChip = this.chips.find(chip => {\n return chip.value != null && this._compareWith(chip.value, value);\n });\n\n if (correspondingChip) {\n isUserInput ? correspondingChip.selectViaInteraction() : correspondingChip.select();\n this._selectionModel.select(correspondingChip);\n }\n\n return correspondingChip;\n }\n/**\n * @return {?}\n */\nprivate _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);\n this.stateChanges.next();\n });\n }\n/**\n * Deselects every chip in the list.\n * @param {?=} skip Chip that should not be deselected.\n * @return {?}\n */\nprivate _clearSelection(skip?: MdChip): void {\n this._selectionModel.clear();\n this.chips.forEach(chip => {\n if (chip !== skip) {\n chip.deselect();\n }\n });\n this.stateChanges.next();\n }\n/**\n * Sorts the model values, ensuring that they keep the same\n * order that they have in the panel.\n * @return {?}\n */\nprivate _sortValues(): void {\n if (this._multiple) {\n this._selectionModel.clear();\n\n this.chips.forEach(chip => {\n if (chip.selected) {\n this._selectionModel.select(chip);\n }\n });\n this.stateChanges.next();\n }\n }\n/**\n * Emits change event to set the model value.\n * @param {?=} fallbackValue\n * @return {?}\n */\nprivate _propagateChanges(fallbackValue?: any): void {\n let /** @type {?} */ valueToEmit: any = null;\n\n if (Array.isArray(this.selected)) {\n valueToEmit = this.selected.map(chip => chip.value);\n } else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.change.emit(new MdChipListChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this._changeDetectorRef.markForCheck();\n }\n/**\n * When blurred, mark the field as touched when focus moved outside the chip list.\n * @return {?}\n */\n_blur() {\n if (!this.disabled) {\n if (this._chipInput) {\n // If there's a chip input, we should check whether the focus moved to chip input.\n // If the focus is not moved to chip input, mark the field as touched. If the focus moved\n // to chip input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on chip input.\n setTimeout(() => {\n if (!this.focused) {\n this._markAsTouched();\n }\n });\n } else {\n // If there's no chip input, then mark the field as touched.\n this._markAsTouched();\n }\n }\n }\n/**\n * Mark the field as touched\n * @return {?}\n */\n_markAsTouched() {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n/**\n * @return {?}\n */\nprivate _resetChips() {\n this._dropSubscriptions();\n this._listenToChipsFocus();\n this._listenToChipsSelection();\n this._listenToChipsRemoved();\n }\n/**\n * @return {?}\n */\nprivate _dropSubscriptions() {\n if (this._chipFocusSubscription) {\n this._chipFocusSubscription.unsubscribe();\n this._chipFocusSubscription = null;\n }\n\n if (this._chipBlurSubscription) {\n this._chipBlurSubscription.unsubscribe();\n this._chipBlurSubscription = null;\n }\n\n if (this._chipSelectionSubscription) {\n this._chipSelectionSubscription.unsubscribe();\n this._chipSelectionSubscription = null;\n }\n }\n/**\n * Listens to user-generated selection events on each chip.\n * @return {?}\n */\nprivate _listenToChipsSelection(): void {\n this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(event => {\n event.source.selected\n ? this._selectionModel.select(event.source)\n : this._selectionModel.deselect(event.source);\n\n // For single selection chip list, make sure the deselected value is unselected.\n if (!this.multiple) {\n this.chips.forEach(chip => {\n if (!this._selectionModel.isSelected(chip) && chip.selected) {\n chip.deselect();\n }\n });\n }\n\n if (event.isUserInput) {\n this._propagateChanges();\n }\n });\n }\n/**\n * Listens to user-generated selection events on each chip.\n * @return {?}\n */\nprivate _listenToChipsFocus(): void {\n this._chipFocusSubscription = this.chipFocusChanges.subscribe(event => {\n let /** @type {?} */ chipIndex: number = this.chips.toArray().indexOf(event.chip);\n\n if (this._isValidIndex(chipIndex)) {\n this._keyManager.updateActiveItemIndex(chipIndex);\n }\n this.stateChanges.next();\n });\n\n this._chipBlurSubscription = this.chipBlurChanges.subscribe(_ => {\n this._blur();\n this.stateChanges.next();\n });\n }\n/**\n * @return {?}\n */\nprivate _listenToChipsRemoved(): void {\n this._chipRemoveSubscription = this.chipRemoveChanges.subscribe((event) => {\n this._updateKeyManager(event.chip);\n });\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-chip-list, mat-chip-list',\n template: `<div class=\"mat-chip-list-wrapper\"><ng-content></ng-content></div>`,\n exportAs: 'mdChipList, matChipList',\n host: {\n '[attr.tabindex]': '_tabIndex',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-required]': 'required.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-multiselectable]': 'multiple',\n '[class.mat-chip-list-disabled]': 'disabled',\n '[class.mat-chip-list-invalid]': 'errorState',\n '[class.mat-chip-list-required]': 'required',\n 'role': 'listbox',\n '[attr.aria-orientation]': 'ariaOrientation',\n 'class': 'mat-chip-list',\n '(focus)': 'focus()',\n '(blur)': '_blur()',\n '(keydown)': '_keydown($event)'\n },\n providers: [{provide: MdFormFieldControl, useExisting: MdChipList}],\n styleUrls: ['chips.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: ChangeDetectorRef, },\n{type: Directionality, decorators: [{ type: Optional }, ]},\n{type: NgForm, decorators: [{ type: Optional }, ]},\n{type: FormGroupDirective, decorators: [{ type: Optional }, ]},\n{type: NgControl, decorators: [{ type: Optional }, { type: Self }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'multiple': [{ type: Input },],\n'compareWith': [{ type: Input },],\n'value': [{ type: Input },],\n'id': [{ type: Input },],\n'required': [{ type: Input },],\n'placeholder': [{ type: Input },],\n'disabled': [{ type: Input },],\n'ariaOrientation': [{ type: Input, args: ['aria-orientation', ] },],\n'selectable': [{ type: Input },],\n'tabIndex': [{ type: Input },],\n'change': [{ type: Output },],\n'valueChange': [{ type: Output },],\n'chips': [{ type: ContentChildren, args: [MdChip, ] },],\n};\n}\n\nfunction MdChipList_tsickle_Closure_declarations() {\n/** @type {?} */\nMdChipList.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdChipList.ctorParameters;\n/** @type {?} */\nMdChipList.propDecorators;\n/**\n * Stream that emits whenever the state of the input changes such that the wrapping `MdFormField`\n * needs to run change detection.\n * @type {?}\n */\nMdChipList.prototype.stateChanges;\n/**\n * When a chip is destroyed, we track the index so we can focus the appropriate next chip.\n * @type {?}\n */\nMdChipList.prototype._lastDestroyedIndex;\n/**\n * Track which chips we're listening to for focus/destruction.\n * @type {?}\n */\nMdChipList.prototype._chipSet;\n/**\n * Subscription to tabbing out from the chip list.\n * @type {?}\n */\nMdChipList.prototype._tabOutSubscription;\n/**\n * Subscription to changes in the chip list.\n * @type {?}\n */\nMdChipList.prototype._changeSubscription;\n/**\n * Subscription to focus changes in the chips.\n * @type {?}\n */\nMdChipList.prototype._chipFocusSubscription;\n/**\n * Subscription to blur changes in the chips.\n * @type {?}\n */\nMdChipList.prototype._chipBlurSubscription;\n/**\n * Subscription to selection changes in chips.\n * @type {?}\n */\nMdChipList.prototype._chipSelectionSubscription;\n/**\n * Subscription to remove changes in chips.\n * @type {?}\n */\nMdChipList.prototype._chipRemoveSubscription;\n/**\n * Whether or not the chip is selectable.\n * @type {?}\n */\nMdChipList.prototype._selectable;\n/**\n * Whether the component is in multiple selection mode.\n * @type {?}\n */\nMdChipList.prototype._multiple;\n/**\n * The chip input to add more chips\n * @type {?}\n */\nMdChipList.prototype._chipInput;\n/**\n * The aria-describedby attribute on the chip list for improved a11y.\n * @type {?}\n */\nMdChipList.prototype._ariaDescribedby;\n/**\n * Id of the chip list\n * @type {?}\n */\nMdChipList.prototype._id;\n/**\n * Uid of the chip list\n * @type {?}\n */\nMdChipList.prototype._uid;\n/**\n * Whether this is required\n * @type {?}\n */\nMdChipList.prototype._required;\n/**\n * Whether this is disabled\n * @type {?}\n */\nMdChipList.prototype._disabled;\n/** @type {?} */\nMdChipList.prototype._value;\n/**\n * Placeholder for the chip list. Alternatively, placeholder can be set on MdChipInput\n * @type {?}\n */\nMdChipList.prototype._placeholder;\n/**\n * Tab index for the chip list.\n * @type {?}\n */\nMdChipList.prototype._tabIndex;\n/**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use _tabIndex\n * @type {?}\n */\nMdChipList.prototype._userTabIndex;\n/**\n * The FocusKeyManager which handles focus.\n * @type {?}\n */\nMdChipList.prototype._keyManager;\n/**\n * Function when touched\n * @type {?}\n */\nMdChipList.prototype._onTouched;\n/**\n * Function when changed\n * @type {?}\n */\nMdChipList.prototype._onChange;\n/** @type {?} */\nMdChipList.prototype._selectionModel;\n/**\n * Comparison function to specify which option is displayed. Defaults to object equality.\n * @type {?}\n */\nMdChipList.prototype._compareWith;\n/**\n * Orientation of the chip list.\n * @type {?}\n */\nMdChipList.prototype.ariaOrientation;\n/**\n * Event emitted when the selected chip list value has been changed by the user.\n * @type {?}\n */\nMdChipList.prototype.change;\n/**\n * Event that emits whenever the raw value of the chip-list changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * \\@docs-private\n * @type {?}\n */\nMdChipList.prototype.valueChange;\n/**\n * The chip components contained within this chip list.\n * @type {?}\n */\nMdChipList.prototype.chips;\n/** @type {?} */\nMdChipList.prototype._renderer;\n/** @type {?} */\nMdChipList.prototype._elementRef;\n/** @type {?} */\nMdChipList.prototype._changeDetectorRef;\n/** @type {?} */\nMdChipList.prototype._dir;\n/** @type {?} */\nMdChipList.prototype._parentForm;\n/** @type {?} */\nMdChipList.prototype._parentFormGroup;\n/** @type {?} */\nMdChipList.prototype.ngControl;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Directive,\n ElementRef,\n Output,\n EventEmitter,\n Input,\n} from '@angular/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER} from '@angular/material/core';\nimport {MdChipList} from './chip-list';\n\nexport interface MdChipInputEvent {\n input: HTMLInputElement;\n value: string;\n}\n/**\n * Directive that adds chip-specific behaviors to an input element inside <md-form-field>.\n * May be placed inside or outside of an <md-chip-list>.\n */\nexport class MdChipInput {\n focused: boolean = false;\n _chipList: MdChipList;\n/**\n * Register input for chip list\n * @param {?} value\n * @return {?}\n */\nset chipList(value: MdChipList) {\n if (value) {\n this._chipList = value;\n this._chipList.registerInput(this);\n }\n }\n/**\n * Whether or not the chipEnd event will be emitted when the input is blurred.\n * @return {?}\n */\nget addOnBlur() { return this._addOnBlur; }\n/**\n * @param {?} value\n * @return {?}\n */\nset addOnBlur(value) { this._addOnBlur = coerceBooleanProperty(value); }\n _addOnBlur: boolean = false;\n\n /**\n * The list of key codes that will trigger a chipEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n // TODO(tinayuangao): Support Set here\n separatorKeyCodes: number[] = [ENTER];\n/**\n * Emitted when a chip is to be added.\n */\nchipEnd = new EventEmitter<MdChipInputEvent>();\n\n _matChipInputTokenEnd = this.chipEnd;\n/**\n * @param {?} value\n * @return {?}\n */\nset matChipList(value: MdChipList) { this.chipList = value; }\n/**\n * @return {?}\n */\nget matAddOnBlur() { return this._addOnBlur; }\n/**\n * @param {?} value\n * @return {?}\n */\nset matAddOnBlur(value) { this.addOnBlur = value; }\n/**\n * @return {?}\n */\nget matSeparatorKeyCodes() { return this.separatorKeyCodes; }\n/**\n * @param {?} v\n * @return {?}\n */\nset matSeparatorKeyCodes(v: number[]) { this.separatorKeyCodes = v; }\n\n placeholder: string = '';\n/**\n * @return {?}\n */\nget empty(): boolean {\n let /** @type {?} */ value: string | null = this._inputElement.value;\n return value == null || value === '';\n }\n/**\n * The native input element to which this directive is attached.\n */\nprotected _inputElement: HTMLInputElement;\n/**\n * @param {?} _elementRef\n */\nconstructor(protected _elementRef: ElementRef) {\n this._inputElement = this._elementRef.nativeElement as HTMLInputElement;\n }\n/**\n * Utility method to make host definition/tests more clear.\n * @param {?=} event\n * @return {?}\n */\n_keydown(event?: KeyboardEvent) {\n this._emitChipEnd(event);\n }\n/**\n * Checks to see if the blur should emit the (chipEnd) event.\n * @return {?}\n */\n_blur() {\n if (this.addOnBlur) {\n this._emitChipEnd();\n }\n this.focused = false;\n // Blur the chip list if it is not focused\n if (!this._chipList.focused) {\n this._chipList._blur();\n }\n this._chipList.stateChanges.next();\n }\n/**\n * @return {?}\n */\n_focus() {\n this.focused = true;\n this._chipList.stateChanges.next();\n }\n/**\n * Checks to see if the (chipEnd) event needs to be emitted.\n * @param {?=} event\n * @return {?}\n */\n_emitChipEnd(event?: KeyboardEvent) {\n if (!this._inputElement.value && !!event) {\n this._chipList._keydown(event);\n }\n if (!event || this.separatorKeyCodes.indexOf(event.keyCode) > -1) {\n this.chipEnd.emit({ input: this._inputElement, value: this._inputElement.value });\n\n if (event) {\n event.preventDefault();\n }\n }\n }\n/**\n * @return {?}\n */\nfocus() { this._inputElement.focus(); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'input[mdChipInputFor], input[matChipInputFor]',\n host: {\n 'class': 'mat-chip-input mat-input-element',\n '(keydown)': '_keydown($event)',\n '(blur)': '_blur()',\n '(focus)': '_focus()',\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'chipList': [{ type: Input, args: ['mdChipInputFor', ] },],\n'addOnBlur': [{ type: Input, args: ['mdChipInputAddOnBlur', ] },],\n'separatorKeyCodes': [{ type: Input, args: ['mdChipInputSeparatorKeyCodes', ] },],\n'chipEnd': [{ type: Output, args: ['mdChipInputTokenEnd', ] },],\n'_matChipInputTokenEnd': [{ type: Output, args: ['matChipInputTokenEnd', ] },],\n'matChipList': [{ type: Input, args: ['matChipInputFor', ] },],\n'matAddOnBlur': [{ type: Input, args: ['matChipInputAddOnBlur', ] },],\n'matSeparatorKeyCodes': [{ type: Input, args: ['matChipInputSeparatorKeyCodes', ] },],\n'placeholder': [{ type: Input },],\n};\n}\n\nfunction MdChipInput_tsickle_Closure_declarations() {\n/** @type {?} */\nMdChipInput.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdChipInput.ctorParameters;\n/** @type {?} */\nMdChipInput.propDecorators;\n/** @type {?} */\nMdChipInput.prototype.focused;\n/** @type {?} */\nMdChipInput.prototype._chipList;\n/** @type {?} */\nMdChipInput.prototype._addOnBlur;\n/** @type {?} */\nMdChipInput.prototype.separatorKeyCodes;\n/**\n * Emitted when a chip is to be added.\n * @type {?}\n */\nMdChipInput.prototype.chipEnd;\n/** @type {?} */\nMdChipInput.prototype._matChipInputTokenEnd;\n/** @type {?} */\nMdChipInput.prototype.placeholder;\n/**\n * The native input element to which this directive is attached.\n * @type {?}\n */\nMdChipInput.prototype._inputElement;\n/** @type {?} */\nMdChipInput.prototype._elementRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdChipList} from './chip-list';\nimport {MdBasicChip, MdChip, MdChipRemove} from './chip';\nimport {MdChipInput} from './chip-input';\nexport class MdChipsModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [],\n exports: [MdChipList, MdChip, MdChipInput, MdChipRemove, MdChipRemove, MdBasicChip],\n declarations: [MdChipList, MdChip, MdChipInput, MdChipRemove, MdChipRemove, MdBasicChip]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdChipsModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdChipsModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdChipsModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdChipsModule,MdChipListChange,MdChipList,MdChipEvent,MdChipSelectionChange,MdChipBase,_MdChipMixinBase,MdBasicChip,MdChip,MdChipRemove,MdChipInputEvent,MdChipInput,MatBasicChip,MatChip,MatChipBase,MatChipEvent,MatChipInput,MatChipInputEvent,MatChipListChange,MatChipList,MatChipRemove,MatChipsModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ViewContainerRef} from '@angular/core';\nimport {Direction} from '@angular/cdk/bidi';\n\n/** Valid ARIA roles for a dialog element. */\nexport type DialogRole = 'dialog' | 'alertdialog';\n\n/** Possible overrides for a dialog's position. */\nexport interface DialogPosition {\n top?: string;\n bottom?: string;\n left?: string;\n right?: string;\n}\n/**\n * Configuration for opening a modal dialog with the MdDialog service.\n */\nexport class MdDialogConfig {\n/**\n * Where the attached component should live in Angular's *logical* component tree.\n * This affects what is available for injection and the change detection order for the\n * component instantiated inside of the dialog. This does not affect where the dialog\n * content will be rendered.\n */\nviewContainerRef?: ViewContainerRef;\n/**\n * ID for the dialog. If omitted, a unique one will be generated.\n */\nid?: string;\n/**\n * The ARIA role of the dialog element.\n */\nrole?: DialogRole = 'dialog';\n/**\n * Custom class for the overlay pane.\n */\npanelClass?: string | string[] = '';\n/**\n * Whether the dialog has a backdrop.\n */\nhasBackdrop?: boolean = true;\n/**\n * Custom class for the backdrop,\n */\nbackdropClass?: string = '';\n/**\n * Whether the user can use escape or clicking outside to close a modal.\n */\ndisableClose?: boolean = false;\n/**\n * Width of the dialog.\n */\nwidth?: string = '';\n/**\n * Height of the dialog.\n */\nheight?: string = '';\n/**\n * Position overrides.\n */\nposition?: DialogPosition;\n/**\n * Data being injected into the child component.\n */\ndata?: any = null;\n/**\n * Layout direction for the dialog's content.\n */\ndirection?: Direction = 'ltr';\n/**\n * ID of the element that describes the dialog.\n */\nariaDescribedBy?: string | null = null;\n\n\n // TODO(jelbourn): add configuration for lifecycle hooks, ARIA labelling.\n}\n\nfunction MdDialogConfig_tsickle_Closure_declarations() {\n/**\n * Where the attached component should live in Angular's *logical* component tree.\n * This affects what is available for injection and the change detection order for the\n * component instantiated inside of the dialog. This does not affect where the dialog\n * content will be rendered.\n * @type {?}\n */\nMdDialogConfig.prototype.viewContainerRef;\n/**\n * ID for the dialog. If omitted, a unique one will be generated.\n * @type {?}\n */\nMdDialogConfig.prototype.id;\n/**\n * The ARIA role of the dialog element.\n * @type {?}\n */\nMdDialogConfig.prototype.role;\n/**\n * Custom class for the overlay pane.\n * @type {?}\n */\nMdDialogConfig.prototype.panelClass;\n/**\n * Whether the dialog has a backdrop.\n * @type {?}\n */\nMdDialogConfig.prototype.hasBackdrop;\n/**\n * Custom class for the backdrop,\n * @type {?}\n */\nMdDialogConfig.prototype.backdropClass;\n/**\n * Whether the user can use escape or clicking outside to close a modal.\n * @type {?}\n */\nMdDialogConfig.prototype.disableClose;\n/**\n * Width of the dialog.\n * @type {?}\n */\nMdDialogConfig.prototype.width;\n/**\n * Height of the dialog.\n * @type {?}\n */\nMdDialogConfig.prototype.height;\n/**\n * Position overrides.\n * @type {?}\n */\nMdDialogConfig.prototype.position;\n/**\n * Data being injected into the child component.\n * @type {?}\n */\nMdDialogConfig.prototype.data;\n/**\n * Layout direction for the dialog's content.\n * @type {?}\n */\nMdDialogConfig.prototype.direction;\n/**\n * ID of the element that describes the dialog.\n * @type {?}\n */\nMdDialogConfig.prototype.ariaDescribedBy;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n Inject,\n Optional,\n ChangeDetectorRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {animate, AnimationEvent, state, style, transition, trigger} from '@angular/animations';\nimport {DOCUMENT} from '@angular/platform-browser';\nimport {\n BasePortalHost,\n ComponentPortal,\n PortalHostDirective,\n TemplatePortal\n} from '@angular/cdk/portal';\nimport {FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {MdDialogConfig} from './dialog-config';\n/**\n * Throws an exception for the case when a ComponentPortal is\n * attached to a DomPortalHost without an origin.\n * \\@docs-private\n * @return {?}\n */\nexport function throwMdDialogContentAlreadyAttachedError() {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n/**\n * Internal component that wraps user-provided dialog content.\n * Animation is based on https://material.io/guidelines/motion/choreography.html.\n * \\@docs-private\n */\nexport class MdDialogContainer extends BasePortalHost {\n/**\n * The portal host inside of this container into which the dialog content will be loaded.\n */\n_portalHost: PortalHostDirective;\n/**\n * The class that traps and manages focus within the dialog.\n */\nprivate _focusTrap: FocusTrap;\n/**\n * Element that was focused before the dialog was opened. Save this to restore upon close.\n */\nprivate _elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n/**\n * The dialog configuration.\n */\n_config: MdDialogConfig;\n/**\n * State of the dialog animation.\n */\n_state: 'void' | 'enter' | 'exit' = 'enter';\n/**\n * Emits when an animation state changes.\n */\n_animationStateChanged = new EventEmitter<AnimationEvent>();\n/**\n * ID of the element that should be considered as the dialog's label.\n */\n_ariaLabelledBy: string | null = null;\n/**\n * Whether the container is currently mid-animation.\n */\n_isAnimating = false;\n/**\n * @param {?} _elementRef\n * @param {?} _focusTrapFactory\n * @param {?} _changeDetectorRef\n * @param {?} _document\n */\nconstructor(\nprivate _elementRef: ElementRef,\nprivate _focusTrapFactory: FocusTrapFactory,\nprivate _changeDetectorRef: ChangeDetectorRef,\nprivate _document: any) {\n\n super();\n }\n/**\n * Attach a ComponentPortal as content to this dialog container.\n * @template T\n * @param {?} portal Portal to be attached as the dialog content.\n * @return {?}\n */\nattachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n if (this._portalHost.hasAttached()) {\n throwMdDialogContentAlreadyAttachedError();\n }\n\n this._savePreviouslyFocusedElement();\n return this._portalHost.attachComponentPortal(portal);\n }\n/**\n * Attach a TemplatePortal as content to this dialog container.\n * @template C\n * @param {?} portal Portal to be attached as the dialog content.\n * @return {?}\n */\nattachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n if (this._portalHost.hasAttached()) {\n throwMdDialogContentAlreadyAttachedError();\n }\n\n this._savePreviouslyFocusedElement();\n return this._portalHost.attachTemplatePortal(portal);\n }\n/**\n * Moves the focus inside the focus trap.\n * @return {?}\n */\nprivate _trapFocus() {\n if (!this._focusTrap) {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n }\n\n // If were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait for the microtask queue to be empty.\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If we didn't find any focusable elements inside the dialog, focus the\n // container so the user can't tab into other elements behind it.\n if (!hasMovedFocus) {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n/**\n * Restores focus to the element that was focused before the dialog opened.\n * @return {?}\n */\nprivate _restoreFocus() {\n const /** @type {?} */ toFocus = this._elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n/**\n * Saves a reference to the element that was focused before the dialog was opened.\n * @return {?}\n */\nprivate _savePreviouslyFocusedElement() {\n if (this._document) {\n this._elementFocusedBeforeDialogWasOpened = /** @type {?} */(( this._document.activeElement as HTMLElement));\n }\n }\n/**\n * Callback, invoked whenever an animation on the host completes.\n * @param {?} event\n * @return {?}\n */\n_onAnimationDone(event: AnimationEvent) {\n if (event.toState === 'enter') {\n this._trapFocus();\n } else if (event.toState === 'exit') {\n this._restoreFocus();\n }\n\n this._animationStateChanged.emit(event);\n this._isAnimating = false;\n }\n/**\n * Callback, invoked when an animation on the host starts.\n * @param {?} event\n * @return {?}\n */\n_onAnimationStart(event: AnimationEvent) {\n this._isAnimating = true;\n this._animationStateChanged.emit(event);\n }\n/**\n * Starts the dialog exit animation.\n * @return {?}\n */\n_startExitAnimation(): void {\n this._state = 'exit';\n\n // Mark the container for check so it can react if the\n // view container is using OnPush change detection.\n this._changeDetectorRef.markForCheck();\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-dialog-container, mat-dialog-container',\n templateUrl: 'dialog-container.html',\n styleUrls: ['dialog.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n animations: [\n trigger('slideDialog', [\n // Note: The `enter` animation doesn't transition to something like `translate3d(0, 0, 0)\n // scale(1)`, because for some reason specifying the transform explicitly, causes IE both\n // to blur the dialog content and decimate the animation performance. Leaving it as `none`\n // solves both issues.\n state('enter', style({ transform: 'none', opacity: 1 })),\n state('void', style({ transform: 'translate3d(0, 25%, 0) scale(0.9)', opacity: 0 })),\n state('exit', style({ transform: 'translate3d(0, 25%, 0)', opacity: 0 })),\n transition('* => *', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')),\n ])\n ],\n host: {\n 'class': 'mat-dialog-container',\n 'tabindex': '-1',\n '[attr.role]': '_config?.role',\n '[attr.aria-labelledby]': '_ariaLabelledBy',\n '[attr.aria-describedby]': '_config?.ariaDescribedBy || null',\n '[@slideDialog]': '_state',\n '(@slideDialog.start)': '_onAnimationStart($event)',\n '(@slideDialog.done)': '_onAnimationDone($event)',\n },\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: FocusTrapFactory, },\n{type: ChangeDetectorRef, },\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_portalHost': [{ type: ViewChild, args: [PortalHostDirective, ] },],\n};\n}\n\nfunction MdDialogContainer_tsickle_Closure_declarations() {\n/** @type {?} */\nMdDialogContainer.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdDialogContainer.ctorParameters;\n/** @type {?} */\nMdDialogContainer.propDecorators;\n/**\n * The portal host inside of this container into which the dialog content will be loaded.\n * @type {?}\n */\nMdDialogContainer.prototype._portalHost;\n/**\n * The class that traps and manages focus within the dialog.\n * @type {?}\n */\nMdDialogContainer.prototype._focusTrap;\n/**\n * Element that was focused before the dialog was opened. Save this to restore upon close.\n * @type {?}\n */\nMdDialogContainer.prototype._elementFocusedBeforeDialogWasOpened;\n/**\n * The dialog configuration.\n * @type {?}\n */\nMdDialogContainer.prototype._config;\n/**\n * State of the dialog animation.\n * @type {?}\n */\nMdDialogContainer.prototype._state;\n/**\n * Emits when an animation state changes.\n * @type {?}\n */\nMdDialogContainer.prototype._animationStateChanged;\n/**\n * ID of the element that should be considered as the dialog's label.\n * @type {?}\n */\nMdDialogContainer.prototype._ariaLabelledBy;\n/**\n * Whether the container is currently mid-animation.\n * @type {?}\n */\nMdDialogContainer.prototype._isAnimating;\n/** @type {?} */\nMdDialogContainer.prototype._elementRef;\n/** @type {?} */\nMdDialogContainer.prototype._focusTrapFactory;\n/** @type {?} */\nMdDialogContainer.prototype._changeDetectorRef;\n/** @type {?} */\nMdDialogContainer.prototype._document;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n OnDestroy,\n Optional,\n Renderer2,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\nimport {\n CanColor,\n CanDisable,\n CanDisableRipple,\n MATERIAL_COMPATIBILITY_MODE,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple\n} from '@angular/material/core';\nimport {FocusMonitor} from '@angular/cdk/a11y';\n/**\n * Default color palette for round buttons (md-fab and md-mini-fab)\n */\nconst DEFAULT_ROUND_BUTTON_COLOR = 'accent';\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdButtonCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'button[md-button], button[mat-button], a[md-button], a[mat-button]',\n host: {'class': 'mat-button'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdButtonCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdButtonCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdButtonCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdRaisedButtonCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector:\n 'button[md-raised-button], button[mat-raised-button], ' +\n 'a[md-raised-button], a[mat-raised-button]',\n host: {'class': 'mat-raised-button'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdRaisedButtonCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRaisedButtonCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdRaisedButtonCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdIconButtonCssMatStyler {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector:\n 'button[md-icon-button], button[mat-icon-button], a[md-icon-button], a[mat-icon-button]',\n host: {'class': 'mat-icon-button'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdIconButtonCssMatStyler_tsickle_Closure_declarations() {\n/** @type {?} */\nMdIconButtonCssMatStyler.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdIconButtonCssMatStyler.ctorParameters;\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * \\@docs-private\n */\nexport class MdFab {\n/**\n * @param {?} button\n * @param {?} anchor\n */\nconstructor( button: MdButton,\n anchor: MdAnchor) {\n // Set the default color palette for the md-fab components.\n (button || anchor).color = DEFAULT_ROUND_BUTTON_COLOR;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'button[md-fab], button[mat-fab], a[md-fab], a[mat-fab]',\n host: {'class': 'mat-fab'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdButton, decorators: [{ type: Self }, { type: Optional }, { type: Inject, args: [forwardRef(() => MdButton), ] }, ]},\n{type: MdAnchor, decorators: [{ type: Self }, { type: Optional }, { type: Inject, args: [forwardRef(() => MdAnchor), ] }, ]},\n];\n}\n\nfunction MdFab_tsickle_Closure_declarations() {\n/** @type {?} */\nMdFab.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdFab.ctorParameters;\n}\n\n/**\n * Directive that targets mini-fab buttons and anchors. It's used to apply the `mat-` class\n * to all mini-fab buttons and also is responsible for setting the default color palette.\n * \\@docs-private\n */\nexport class MdMiniFab {\n/**\n * @param {?} button\n * @param {?} anchor\n */\nconstructor( button: MdButton,\n anchor: MdAnchor) {\n // Set the default color palette for the md-mini-fab components.\n (button || anchor).color = DEFAULT_ROUND_BUTTON_COLOR;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'button[md-mini-fab], button[mat-mini-fab], a[md-mini-fab], a[mat-mini-fab]',\n host: {'class': 'mat-mini-fab'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdButton, decorators: [{ type: Self }, { type: Optional }, { type: Inject, args: [forwardRef(() => MdButton), ] }, ]},\n{type: MdAnchor, decorators: [{ type: Self }, { type: Optional }, { type: Inject, args: [forwardRef(() => MdAnchor), ] }, ]},\n];\n}\n\nfunction MdMiniFab_tsickle_Closure_declarations() {\n/** @type {?} */\nMdMiniFab.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdMiniFab.ctorParameters;\n}\n\n/**\n * \\@docs-private\n */\nexport class MdButtonBase {\n/**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\nconstructor(public _renderer: Renderer2,\npublic _elementRef: ElementRef) {}\n}\n\nfunction MdButtonBase_tsickle_Closure_declarations() {\n/** @type {?} */\nMdButtonBase.prototype._renderer;\n/** @type {?} */\nMdButtonBase.prototype._elementRef;\n}\n\nexport const /** @type {?} */ _MdButtonMixinBase = mixinColor(mixinDisabled(mixinDisableRipple(MdButtonBase)));\n/**\n * Material design button.\n */\nexport class MdButton extends _MdButtonMixinBase\n implements OnDestroy, CanDisable, CanColor, CanDisableRipple {\n/**\n * Whether the button is round.\n */\n_isRoundButton: boolean = this._hasAttributeWithPrefix('fab', 'mini-fab');\n/**\n * Whether the button is icon button.\n */\n_isIconButton: boolean = this._hasAttributeWithPrefix('icon-button');\n/**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _platform\n * @param {?} _focusMonitor\n */\nconstructor(renderer: Renderer2,\n elementRef: ElementRef,\nprivate _platform: Platform,\nprivate _focusMonitor: FocusMonitor) {\n super(renderer, elementRef);\n this._focusMonitor.monitor(this._elementRef.nativeElement, this._renderer, true);\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n/**\n * Focuses the button.\n * @return {?}\n */\nfocus(): void {\n this._getHostElement().focus();\n }\n/**\n * @return {?}\n */\n_getHostElement() {\n return this._elementRef.nativeElement;\n }\n/**\n * @return {?}\n */\n_isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n/**\n * Gets whether the button has one of the given attributes\n * with either an 'md-' or 'mat-' prefix.\n * @param {...?} unprefixedAttributeNames\n * @return {?}\n */\n_hasAttributeWithPrefix(...unprefixedAttributeNames: string[]) {\n // If not on the browser, say that there are none of the attributes present.\n // Since these only affect how the ripple displays (and ripples only happen on the client),\n // detecting these attributes isn't necessary when not on the browser.\n if (!this._platform.isBrowser) {\n return false;\n }\n\n return unprefixedAttributeNames.some(suffix => {\n const /** @type {?} */ el = this._getHostElement();\n\n return el.hasAttribute('md-' + suffix) || el.hasAttribute('mat-' + suffix);\n });\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: `button[md-button], button[md-raised-button], button[md-icon-button],\n button[md-fab], button[md-mini-fab],\n button[mat-button], button[mat-raised-button], button[mat-icon-button],\n button[mat-fab], button[mat-mini-fab]`,\n host: {\n '[disabled]': 'disabled || null',\n },\n templateUrl: 'button.html',\n styleUrls: ['button.css'],\n inputs: ['disabled', 'disableRipple', 'color'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer2, },\n{type: ElementRef, },\n{type: Platform, },\n{type: FocusMonitor, },\n];\n}\n\nfunction MdButton_tsickle_Closure_declarations() {\n/** @type {?} */\nMdButton.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdButton.ctorParameters;\n/**\n * Whether the button is round.\n * @type {?}\n */\nMdButton.prototype._isRoundButton;\n/**\n * Whether the button is icon button.\n * @type {?}\n */\nMdButton.prototype._isIconButton;\n/** @type {?} */\nMdButton.prototype._platform;\n/** @type {?} */\nMdButton.prototype._focusMonitor;\n}\n\n/**\n * Raised Material design button.\n */\nexport class MdAnchor extends MdButton {\n/**\n * @param {?} platform\n * @param {?} focusMonitor\n * @param {?} elementRef\n * @param {?} renderer\n */\nconstructor(\n platform: Platform,\n focusMonitor: FocusMonitor,\n elementRef: ElementRef,\n renderer: Renderer2) {\n super(renderer, elementRef, platform, focusMonitor);\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_haltDisabledEvents(event: Event) {\n // A disabled button shouldn't apply any actions\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: `a[md-button], a[md-raised-button], a[md-icon-button], a[md-fab], a[md-mini-fab],\n a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab]`,\n host: {\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '(click)': '_haltDisabledEvents($event)',\n },\n inputs: ['disabled', 'disableRipple', 'color'],\n templateUrl: 'button.html',\n styleUrls: ['button.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Platform, },\n{type: FocusMonitor, },\n{type: ElementRef, },\n{type: Renderer2, },\n];\n}\n\nfunction MdAnchor_tsickle_Closure_declarations() {\n/** @type {?} */\nMdAnchor.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdAnchor.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MdCommonModule, MdRippleModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {\n MdAnchor,\n MdButton,\n MdMiniFab,\n MdButtonCssMatStyler,\n MdFab,\n MdIconButtonCssMatStyler,\n MdRaisedButtonCssMatStyler\n} from './button';\nexport class MdButtonModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [\n CommonModule,\n MdRippleModule,\n MdCommonModule,\n A11yModule,\n ],\n exports: [\n MdButton,\n MdAnchor,\n MdMiniFab,\n MdFab,\n MdCommonModule,\n MdButtonCssMatStyler,\n MdRaisedButtonCssMatStyler,\n MdIconButtonCssMatStyler,\n ],\n declarations: [\n MdButton,\n MdAnchor,\n MdMiniFab,\n MdFab,\n MdButtonCssMatStyler,\n MdRaisedButtonCssMatStyler,\n MdIconButtonCssMatStyler,\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdButtonModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdButtonModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdButtonModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdButtonModule,MdButtonCssMatStyler,MdRaisedButtonCssMatStyler,MdIconButtonCssMatStyler,MdFab,MdMiniFab,MdButtonBase,_MdButtonMixinBase,MdButton,MdAnchor,MatButton,MatButtonBase,MatButtonCssMatStyler,MatButtonModule,MatAnchor,MatIconButtonCssMatStyler,MatFab,MatMiniFab,MatRaisedButtonCssMatStyler} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n Renderer2,\n EventEmitter,\n Input,\n OnInit,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n forwardRef,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {UniqueSelectionDispatcher} from '@angular/material/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\nimport {FocusMonitor} from '@angular/cdk/a11y';\n\n/** Acceptable types for a button toggle. */\nexport type ToggleType = 'checkbox' | 'radio';\n/**\n * \\@docs-private\n */\nexport class MdButtonToggleGroupBase {}\nexport const /** @type {?} */ _MdButtonToggleGroupMixinBase = mixinDisabled(MdButtonToggleGroupBase);\n/**\n * Provider Expression that allows md-button-toggle-group to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * \\@docs-private\n */\nexport const MD_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MdButtonToggleGroup),\n multi: true\n};\n\nlet /** @type {?} */ _uniqueIdCounter = 0;\n/**\n * Change event object emitted by MdButtonToggle.\n */\nexport class MdButtonToggleChange {\n/**\n * The MdButtonToggle that emits the event.\n */\nsource: MdButtonToggle | null;\n/**\n * The value assigned to the MdButtonToggle.\n */\nvalue: any;\n}\n\nfunction MdButtonToggleChange_tsickle_Closure_declarations() {\n/**\n * The MdButtonToggle that emits the event.\n * @type {?}\n */\nMdButtonToggleChange.prototype.source;\n/**\n * The value assigned to the MdButtonToggle.\n * @type {?}\n */\nMdButtonToggleChange.prototype.value;\n}\n\n/**\n * Exclusive selection button toggle group that behaves like a radio-button group.\n */\nexport class MdButtonToggleGroup extends _MdButtonToggleGroupMixinBase\n implements ControlValueAccessor, CanDisable {\n/**\n * The value for the button toggle group. Should match currently selected button toggle.\n */\nprivate _value: any = null;\n/**\n * The HTML name attribute applied to toggles in this group.\n */\nprivate _name: string = `md-button-toggle-group-${_uniqueIdCounter++}`;\n/**\n * Whether the button toggle group should be vertical.\n */\nprivate _vertical: boolean = false;\n/**\n * The currently selected button toggle, should match the value.\n */\nprivate _selected: MdButtonToggle | null = null;\n/**\n * The method to be called in order to update ngModel.\n * Now `ngModel` binding is not supported in multiple selection mode.\n */\n_controlValueAccessorChangeFn: (value: any) => void = () => {};\n/**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n */\nonTouched: () => any = () => {};\n/**\n * Child button toggle buttons.\n */\n_buttonToggles: QueryList<MdButtonToggle>;\n/**\n * `name` attribute for the underlying `input` element.\n * @return {?}\n */\nget name(): string {\n return this._name;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset name(value: string) {\n this._name = value;\n this._updateButtonToggleNames();\n }\n/**\n * Whether the toggle group is vertical.\n * @return {?}\n */\nget vertical(): boolean {\n return this._vertical;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\n/**\n * Value of the toggle group.\n * @return {?}\n */\nget value(): any {\n return this._value;\n }\n/**\n * @param {?} newValue\n * @return {?}\n */\nset value(newValue: any) {\n if (this._value != newValue) {\n this._value = newValue;\n\n this._updateSelectedButtonToggleFromValue();\n }\n }\n/**\n * Whether the toggle group is selected.\n * @return {?}\n */\nget selected() {\n return this._selected;\n }\n/**\n * @param {?} selected\n * @return {?}\n */\nset selected(selected: MdButtonToggle | null) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n\n if (selected && !selected.checked) {\n selected.checked = true;\n }\n }\n/**\n * Event emitted when the group's value changes.\n */\nchange: EventEmitter<MdButtonToggleChange> = new EventEmitter<MdButtonToggleChange>();\n/**\n * @param {?} _changeDetector\n */\nconstructor(private _changeDetector: ChangeDetectorRef) {\n super();\n }\n/**\n * @return {?}\n */\nprivate _updateButtonToggleNames(): void {\n if (this._buttonToggles) {\n this._buttonToggles.forEach((toggle) => {\n toggle.name = this._name;\n });\n }\n }\n/**\n * @return {?}\n */\nprivate _updateSelectedButtonToggleFromValue(): void {\n let /** @type {?} */ isAlreadySelected = this._selected != null && this._selected.value == this._value;\n\n if (this._buttonToggles != null && !isAlreadySelected) {\n let /** @type {?} */ matchingButtonToggle = this._buttonToggles.filter(\n buttonToggle => buttonToggle.value == this._value)[0];\n\n if (matchingButtonToggle) {\n this.selected = matchingButtonToggle;\n } else if (this.value == null) {\n this.selected = null;\n this._buttonToggles.forEach(buttonToggle => {\n buttonToggle.checked = false;\n });\n }\n }\n }\n/**\n * Dispatch change event with current selection and group value.\n * @return {?}\n */\n_emitChangeEvent(): void {\n let /** @type {?} */ event = new MdButtonToggleChange();\n event.source = this._selected;\n event.value = this._value;\n this._controlValueAccessorChangeFn(event.value);\n this.change.emit(event);\n }\n/**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param {?} value Value to be set to the model.\n * @return {?}\n */\nwriteValue(value: any) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n/**\n * Registers a callback that will be triggered when the value has changed.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn On change callback function.\n * @return {?}\n */\nregisterOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n/**\n * Registers a callback that will be triggered when the control has been touched.\n * Implemented as part of ControlValueAccessor.\n * @param {?} fn On touch callback function.\n * @return {?}\n */\nregisterOnTouched(fn: any) {\n this.onTouched = fn;\n }\n/**\n * Toggles the disabled state of the component. Implemented as part of ControlValueAccessor.\n * @param {?} isDisabled Whether the component should be disabled.\n * @return {?}\n */\nsetDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-button-toggle-group:not([multiple]), mat-button-toggle-group:not([multiple])',\n providers: [MD_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],\n inputs: ['disabled'],\n host: {\n 'role': 'radiogroup',\n 'class': 'mat-button-toggle-group',\n '[class.mat-button-toggle-vertical]': 'vertical'\n },\n exportAs: 'mdButtonToggleGroup, matButtonToggleGroup',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'_buttonToggles': [{ type: ContentChildren, args: [forwardRef(() => MdButtonToggle), ] },],\n'name': [{ type: Input },],\n'vertical': [{ type: Input },],\n'value': [{ type: Input },],\n'selected': [{ type: Input },],\n'change': [{ type: Output },],\n};\n}\n\nfunction MdButtonToggleGroup_tsickle_Closure_declarations() {\n/** @type {?} */\nMdButtonToggleGroup.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdButtonToggleGroup.ctorParameters;\n/** @type {?} */\nMdButtonToggleGroup.propDecorators;\n/**\n * The value for the button toggle group. Should match currently selected button toggle.\n * @type {?}\n */\nMdButtonToggleGroup.prototype._value;\n/**\n * The HTML name attribute applied to toggles in this group.\n * @type {?}\n */\nMdButtonToggleGroup.prototype._name;\n/**\n * Whether the button toggle group should be vertical.\n * @type {?}\n */\nMdButtonToggleGroup.prototype._vertical;\n/**\n * The currently selected button toggle, should match the value.\n * @type {?}\n */\nMdButtonToggleGroup.prototype._selected;\n/**\n * The method to be called in order to update ngModel.\n * Now `ngModel` binding is not supported in multiple selection mode.\n * @type {?}\n */\nMdButtonToggleGroup.prototype._controlValueAccessorChangeFn;\n/**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * @type {?}\n */\nMdButtonToggleGroup.prototype.onTouched;\n/**\n * Child button toggle buttons.\n * @type {?}\n */\nMdButtonToggleGroup.prototype._buttonToggles;\n/**\n * Event emitted when the group's value changes.\n * @type {?}\n */\nMdButtonToggleGroup.prototype.change;\n/** @type {?} */\nMdButtonToggleGroup.prototype._changeDetector;\n}\n\n/**\n * Multiple selection button-toggle group. `ngModel` is not supported in this mode.\n */\nexport class MdButtonToggleGroupMultiple extends _MdButtonToggleGroupMixinBase\n implements CanDisable {\n/**\n * Whether the button toggle group should be vertical.\n */\nprivate _vertical: boolean = false;\n/**\n * Whether the toggle group is vertical.\n * @return {?}\n */\nget vertical(): boolean {\n return this._vertical;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-button-toggle-group[multiple], mat-button-toggle-group[multiple]',\n exportAs: 'mdButtonToggleGroup, matButtonToggleGroup',\n inputs: ['disabled'],\n host: {\n 'class': 'mat-button-toggle-group',\n '[class.mat-button-toggle-vertical]': 'vertical',\n 'role': 'group'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'vertical': [{ type: Input },],\n};\n}\n\nfunction MdButtonToggleGroupMultiple_tsickle_Closure_declarations() {\n/** @type {?} */\nMdButtonToggleGroupMultiple.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdButtonToggleGroupMultiple.ctorParameters;\n/** @type {?} */\nMdButtonToggleGroupMultiple.propDecorators;\n/**\n * Whether the button toggle group should be vertical.\n * @type {?}\n */\nMdButtonToggleGroupMultiple.prototype._vertical;\n}\n\n/**\n * Single button inside of a toggle group.\n */\nexport class MdButtonToggle implements OnInit, OnDestroy {\n/**\n * Attached to the aria-label attribute of the host element. In most cases, arial-labelledby will\n * take precedence so this may be omitted.\n */\nariaLabel: string = '';\n/**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\nariaLabelledby: string | null = null;\n/**\n * Whether or not this button toggle is checked.\n */\nprivate _checked: boolean = false;\n/**\n * Type of the button toggle. Either 'radio' or 'checkbox'.\n */\n_type: ToggleType;\n/**\n * Whether or not this button toggle is disabled.\n */\nprivate _disabled: boolean = false;\n/**\n * Value assigned to this button toggle.\n */\nprivate _value: any = null;\n/**\n * Whether or not the button toggle is a single selection.\n */\nprivate _isSingleSelector: boolean = false;\n/**\n * Unregister function for _buttonToggleDispatcher *\n */\nprivate _removeUniqueSelectionListener: () => void = () => {};\n\n _inputElement: ElementRef;\n/**\n * The parent button toggle group (exclusive selection). Optional.\n */\nbuttonToggleGroup: MdButtonToggleGroup;\n/**\n * The parent button toggle group (multiple selection). Optional.\n */\nbuttonToggleGroupMultiple: MdButtonToggleGroupMultiple;\n/**\n * Unique ID for the underlying `input` element.\n * @return {?}\n */\nget inputId(): string {\n return `${this.id}-input`;\n }\n/**\n * The unique ID for this button toggle.\n */\nid: string;\n/**\n * HTML's 'name' attribute used to group radios for unique selection.\n */\nname: string;\n/**\n * Whether the button is checked.\n * @return {?}\n */\nget checked(): boolean { return this._checked; }\n/**\n * @param {?} newCheckedState\n * @return {?}\n */\nset checked(newCheckedState: boolean) {\n if (this._isSingleSelector && newCheckedState) {\n // Notify all button toggles with the same name (in the same group) to un-check.\n this._buttonToggleDispatcher.notify(this.id, this.name);\n this._changeDetectorRef.markForCheck();\n }\n\n this._checked = newCheckedState;\n\n if (newCheckedState && this._isSingleSelector && this.buttonToggleGroup.value != this.value) {\n this.buttonToggleGroup.selected = this;\n }\n }\n/**\n * MdButtonToggleGroup reads this to assign its own value.\n * @return {?}\n */\nget value(): any {\n return this._value;\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset value(value: any) {\n if (this._value != value) {\n if (this.buttonToggleGroup != null && this.checked) {\n this.buttonToggleGroup.value = value;\n }\n this._value = value;\n }\n }\n/**\n * Whether the button is disabled.\n * @return {?}\n */\nget disabled(): boolean {\n return this._disabled || (this.buttonToggleGroup != null && this.buttonToggleGroup.disabled) ||\n (this.buttonToggleGroupMultiple != null && this.buttonToggleGroupMultiple.disabled);\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n/**\n * Event emitted when the group value changes.\n */\nchange: EventEmitter<MdButtonToggleChange> = new EventEmitter<MdButtonToggleChange>();\n/**\n * @param {?} toggleGroup\n * @param {?} toggleGroupMultiple\n * @param {?} _changeDetectorRef\n * @param {?} _buttonToggleDispatcher\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _focusMonitor\n */\nconstructor( toggleGroup: MdButtonToggleGroup,\n toggleGroupMultiple: MdButtonToggleGroupMultiple,\nprivate _changeDetectorRef: ChangeDetectorRef,\nprivate _buttonToggleDispatcher: UniqueSelectionDispatcher,\nprivate _renderer: Renderer2,\nprivate _elementRef: ElementRef,\nprivate _focusMonitor: FocusMonitor) {\n\n this.buttonToggleGroup = toggleGroup;\n this.buttonToggleGroupMultiple = toggleGroupMultiple;\n\n if (this.buttonToggleGroup) {\n this._removeUniqueSelectionListener =\n _buttonToggleDispatcher.listen((id: string, name: string) => {\n if (id != this.id && name == this.name) {\n this.checked = false;\n this._changeDetectorRef.markForCheck();\n }\n });\n\n this._type = 'radio';\n this.name = this.buttonToggleGroup.name;\n this._isSingleSelector = true;\n } else {\n // Even if there is no group at all, treat the button toggle as a checkbox so it can be\n // toggled on or off.\n this._type = 'checkbox';\n this._isSingleSelector = false;\n }\n }\n/**\n * @return {?}\n */\nngOnInit() {\n if (this.id == null) {\n this.id = `md-button-toggle-${_uniqueIdCounter++}`;\n }\n\n if (this.buttonToggleGroup && this._value == this.buttonToggleGroup.value) {\n this._checked = true;\n }\n this._focusMonitor.monitor(this._elementRef.nativeElement, this._renderer, true);\n }\n/**\n * Focuses the button.\n * @return {?}\n */\nfocus() {\n this._inputElement.nativeElement.focus();\n }\n/**\n * Toggle the state of the current button toggle.\n * @return {?}\n */\nprivate _toggle(): void {\n this.checked = !this.checked;\n }\n/**\n * Checks the button toggle due to an interaction with the underlying native input.\n * @param {?} event\n * @return {?}\n */\n_onInputChange(event: Event) {\n event.stopPropagation();\n\n if (this._isSingleSelector) {\n // Propagate the change one-way via the group, which will in turn mark this\n // button toggle as checked.\n let /** @type {?} */ groupValueChanged = this.buttonToggleGroup.selected != this;\n this.checked = true;\n this.buttonToggleGroup.selected = this;\n this.buttonToggleGroup.onTouched();\n if (groupValueChanged) {\n this.buttonToggleGroup._emitChangeEvent();\n }\n } else {\n this._toggle();\n }\n\n // Emit a change event when the native input does.\n this._emitChangeEvent();\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_onInputClick(event: Event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `slide-toggle` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n/**\n * Dispatch change event with current value.\n * @return {?}\n */\nprivate _emitChangeEvent(): void {\n let /** @type {?} */ event = new MdButtonToggleChange();\n event.source = this;\n event.value = this._value;\n this.change.emit(event);\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void {\n this._removeUniqueSelectionListener();\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-button-toggle, mat-button-toggle',\n templateUrl: 'button-toggle.html',\n styleUrls: ['button-toggle.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.mat-button-toggle-standalone]': '!buttonToggleGroup && !buttonToggleGroupMultiple',\n '[class.mat-button-toggle-checked]': 'checked',\n '[class.mat-button-toggle-disabled]': 'disabled',\n 'class': 'mat-button-toggle',\n '[attr.id]': 'id',\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: MdButtonToggleGroup, decorators: [{ type: Optional }, ]},\n{type: MdButtonToggleGroupMultiple, decorators: [{ type: Optional }, ]},\n{type: ChangeDetectorRef, },\n{type: UniqueSelectionDispatcher, },\n{type: Renderer2, },\n{type: ElementRef, },\n{type: FocusMonitor, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ariaLabel': [{ type: Input, args: ['aria-label', ] },],\n'ariaLabelledby': [{ type: Input, args: ['aria-labelledby', ] },],\n'_inputElement': [{ type: ViewChild, args: ['input', ] },],\n'id': [{ type: Input },],\n'name': [{ type: Input },],\n'checked': [{ type: Input },],\n'value': [{ type: Input },],\n'disabled': [{ type: Input },],\n'change': [{ type: Output },],\n};\n}\n\nfunction MdButtonToggle_tsickle_Closure_declarations() {\n/** @type {?} */\nMdButtonToggle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdButtonToggle.ctorParameters;\n/** @type {?} */\nMdButtonToggle.propDecorators;\n/**\n * Attached to the aria-label attribute of the host element. In most cases, arial-labelledby will\n * take precedence so this may be omitted.\n * @type {?}\n */\nMdButtonToggle.prototype.ariaLabel;\n/**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n * @type {?}\n */\nMdButtonToggle.prototype.ariaLabelledby;\n/**\n * Whether or not this button toggle is checked.\n * @type {?}\n */\nMdButtonToggle.prototype._checked;\n/**\n * Type of the button toggle. Either 'radio' or 'checkbox'.\n * @type {?}\n */\nMdButtonToggle.prototype._type;\n/**\n * Whether or not this button toggle is disabled.\n * @type {?}\n */\nMdButtonToggle.prototype._disabled;\n/**\n * Value assigned to this button toggle.\n * @type {?}\n */\nMdButtonToggle.prototype._value;\n/**\n * Whether or not the button toggle is a single selection.\n * @type {?}\n */\nMdButtonToggle.prototype._isSingleSelector;\n/**\n * Unregister function for _buttonToggleDispatcher *\n * @type {?}\n */\nMdButtonToggle.prototype._removeUniqueSelectionListener;\n/** @type {?} */\nMdButtonToggle.prototype._inputElement;\n/**\n * The parent button toggle group (exclusive selection). Optional.\n * @type {?}\n */\nMdButtonToggle.prototype.buttonToggleGroup;\n/**\n * The parent button toggle group (multiple selection). Optional.\n * @type {?}\n */\nMdButtonToggle.prototype.buttonToggleGroupMultiple;\n/**\n * The unique ID for this button toggle.\n * @type {?}\n */\nMdButtonToggle.prototype.id;\n/**\n * HTML's 'name' attribute used to group radios for unique selection.\n * @type {?}\n */\nMdButtonToggle.prototype.name;\n/**\n * Event emitted when the group value changes.\n * @type {?}\n */\nMdButtonToggle.prototype.change;\n/** @type {?} */\nMdButtonToggle.prototype._changeDetectorRef;\n/** @type {?} */\nMdButtonToggle.prototype._buttonToggleDispatcher;\n/** @type {?} */\nMdButtonToggle.prototype._renderer;\n/** @type {?} */\nMdButtonToggle.prototype._elementRef;\n/** @type {?} */\nMdButtonToggle.prototype._focusMonitor;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdButtonToggleGroup, MdButtonToggleGroupMultiple, MdButtonToggle} from './button-toggle';\nimport {UNIQUE_SELECTION_DISPATCHER_PROVIDER, MdCommonModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nexport class MdButtonToggleModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdCommonModule, A11yModule],\n exports: [\n MdButtonToggleGroup,\n MdButtonToggleGroupMultiple,\n MdButtonToggle,\n MdCommonModule,\n ],\n declarations: [MdButtonToggleGroup, MdButtonToggleGroupMultiple, MdButtonToggle],\n providers: [UNIQUE_SELECTION_DISPATCHER_PROVIDER]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdButtonToggleModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdButtonToggleModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdButtonToggleModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {ToggleType,MdButtonToggleGroupBase,_MdButtonToggleGroupMixinBase,MD_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,MdButtonToggleChange,MdButtonToggleGroup,MdButtonToggleGroupMultiple,MdButtonToggle,MdButtonToggleModule,MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,MatButtonToggle,MatButtonToggleChange,MatButtonToggleGroup,MatButtonToggleGroupBase,MatButtonToggleGroupMultiple,MatButtonToggleModule} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n Directive,\n Input,\n} from '@angular/core';\n/**\n * Content of a card, needed as it's used as a selector in the API.\n * \\@docs-private\n */\nexport class MdCardContent {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-card-content, mat-card-content',\n host: {'class': 'mat-card-content'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardContent_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardContent.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardContent.ctorParameters;\n}\n\n/**\n * Title of a card, needed as it's used as a selector in the API.\n * \\@docs-private\n */\nexport class MdCardTitle {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `md-card-title, mat-card-title, [md-card-title], [mat-card-title],\n [mdCardTitle], [matCardTitle]`,\n host: {\n 'class': 'mat-card-title'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardTitle_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardTitle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardTitle.ctorParameters;\n}\n\n/**\n * Sub-title of a card, needed as it's used as a selector in the API.\n * \\@docs-private\n */\nexport class MdCardSubtitle {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `md-card-subtitle, mat-card-subtitle, [md-card-subtitle], [mat-card-subtitle],\n [mdCardSubtitle], [matCardSubtitle]`,\n host: {\n 'class': 'mat-card-subtitle'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardSubtitle_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardSubtitle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardSubtitle.ctorParameters;\n}\n\n/**\n * Action section of a card, needed as it's used as a selector in the API.\n * \\@docs-private\n */\nexport class MdCardActions {\n/**\n * Position of the actions inside the card.\n */\nalign: 'start' | 'end' = 'start';\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-card-actions, mat-card-actions',\n host: {\n 'class': 'mat-card-actions',\n '[class.mat-card-actions-align-end]': 'align === \"end\"',\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'align': [{ type: Input },],\n};\n}\n\nfunction MdCardActions_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardActions.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardActions.ctorParameters;\n/** @type {?} */\nMdCardActions.propDecorators;\n/**\n * Position of the actions inside the card.\n * @type {?}\n */\nMdCardActions.prototype.align;\n}\n\n/**\n * Footer of a card, needed as it's used as a selector in the API.\n * \\@docs-private\n */\nexport class MdCardFooter {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-card-footer, mat-card-footer',\n host: {'class': 'mat-card-footer'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardFooter_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardFooter.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardFooter.ctorParameters;\n}\n\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * \\@docs-private\n */\nexport class MdCardImage {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-card-image], [mat-card-image], [mdCardImage], [matCardImage]',\n host: {'class': 'mat-card-image'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardImage_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardImage.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardImage.ctorParameters;\n}\n\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * \\@docs-private\n */\nexport class MdCardSmImage {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-card-sm-image], [mat-card-sm-image], [mdCardImageSmall], [matCardImageSmall]',\n host: {'class': 'mat-card-sm-image'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardSmImage_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardSmImage.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardSmImage.ctorParameters;\n}\n\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * \\@docs-private\n */\nexport class MdCardMdImage {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-card-md-image], [mat-card-md-image], [mdCardImageMedium], [matCardImageMedium]',\n host: {'class': 'mat-card-md-image'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardMdImage_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardMdImage.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardMdImage.ctorParameters;\n}\n\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * \\@docs-private\n */\nexport class MdCardLgImage {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-card-lg-image], [mat-card-lg-image], [mdCardImageLarge], [matCardImageLarge]',\n host: {'class': 'mat-card-lg-image'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardLgImage_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardLgImage.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardLgImage.ctorParameters;\n}\n\n/**\n * Large image used in a card, needed to add the mat- CSS styling.\n * \\@docs-private\n */\nexport class MdCardXlImage {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-card-xl-image], [mat-card-xl-image], [mdCardImageXLarge], [matCardImageXLarge]',\n host: {'class': 'mat-card-xl-image'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardXlImage_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardXlImage.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardXlImage.ctorParameters;\n}\n\n/**\n * Avatar image used in a card, needed to add the mat- CSS styling.\n * \\@docs-private\n */\nexport class MdCardAvatar {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-card-avatar], [mat-card-avatar], [mdCardAvatar], [matCardAvatar]',\n host: {'class': 'mat-card-avatar'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardAvatar_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardAvatar.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardAvatar.ctorParameters;\n}\n\n/**\n * A basic content container component that adds the styles of a Material design card.\n * \n * While this component can be used alone, it also provides a number\n * of preset styles for common card sections, including:\n * - md-card-title\n * - md-card-subtitle\n * - md-card-content\n * - md-card-actions\n * - md-card-footer\n */\nexport class MdCard {static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-card, mat-card',\n templateUrl: 'card.html',\n styleUrls: ['card.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'mat-card'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCard_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCard.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCard.ctorParameters;\n}\n\n/**\n * Component intended to be used within the `<md-card>` component. It adds styles for a\n * preset header section (i.e. a title, subtitle, and avatar layout).\n * \\@docs-private\n */\nexport class MdCardHeader {static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-card-header, mat-card-header',\n templateUrl: 'card-header.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'mat-card-header'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardHeader_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardHeader.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardHeader.ctorParameters;\n}\n\n/**\n * Component intended to be used within the <md-card> component. It adds styles for a preset\n * layout that groups an image with a title section.\n * \\@docs-private\n */\nexport class MdCardTitleGroup {static decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-card-title-group, mat-card-title-group',\n templateUrl: 'card-title-group.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'mat-card-title-group'}\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardTitleGroup_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardTitleGroup.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardTitleGroup.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdCommonModule} from '@angular/material/core';\nimport {\n MdCard,\n MdCardHeader,\n MdCardTitleGroup,\n MdCardContent,\n MdCardTitle,\n MdCardSubtitle,\n MdCardActions,\n MdCardFooter,\n MdCardSmImage,\n MdCardMdImage,\n MdCardLgImage,\n MdCardImage,\n MdCardXlImage,\n MdCardAvatar,\n} from './card';\nexport class MdCardModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdCommonModule],\n exports: [\n MdCard,\n MdCardHeader,\n MdCardTitleGroup,\n MdCardContent,\n MdCardTitle,\n MdCardSubtitle,\n MdCardActions,\n MdCardFooter,\n MdCardSmImage,\n MdCardMdImage,\n MdCardLgImage,\n MdCardImage,\n MdCardXlImage,\n MdCardAvatar,\n MdCommonModule,\n ],\n declarations: [\n MdCard, MdCardHeader, MdCardTitleGroup, MdCardContent, MdCardTitle, MdCardSubtitle,\n MdCardActions, MdCardFooter, MdCardSmImage, MdCardMdImage, MdCardLgImage, MdCardImage,\n MdCardXlImage, MdCardAvatar,\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdCardModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCardModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCardModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdCardContent,MdCardTitle,MdCardSubtitle,MdCardActions,MdCardFooter,MdCardImage,MdCardSmImage,MdCardMdImage,MdCardLgImage,MdCardXlImage,MdCardAvatar,MdCard,MdCardHeader,MdCardTitleGroup,MdCardModule,MatCard,MatCardActions,MatCardAvatar,MatCardContent,MatCardFooter,MatCardHeader,MatCardImage,MatCardLgImage,MatCardMatImage,MatCardModule,MatCardSmImage,MatCardSubtitle,MatCardTitle,MatCardTitleGroup,MatCardXlImage} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nexport class MdPseudoCheckboxModule { static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n exports: [MdPseudoCheckbox],\n declarations: [MdPseudoCheckbox]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdPseudoCheckboxModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdPseudoCheckboxModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdPseudoCheckboxModule.ctorParameters;\n}\n\n\n\nexport {MdPseudoCheckboxState,MdPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Component, ViewEncapsulation, Input, ChangeDetectionStrategy} from '@angular/core';\nimport {mixinDisabled, CanDisable} from '../common-behaviors/disabled';\n/**\n * \\@docs-private\n */\nexport class MdOptgroupBase { }\nexport const /** @type {?} */ _MdOptgroupMixinBase = mixinDisabled(MdOptgroupBase);\n\n// Counter for unique group ids.\nlet /** @type {?} */ _uniqueOptgroupIdCounter = 0;\n/**\n * Component that is used to group instances of `md-option`.\n */\nexport class MdOptgroup extends _MdOptgroupMixinBase implements CanDisable {\n/**\n * Label for the option group.\n */\nlabel: string;\n/**\n * Unique id for the underlying label.\n */\n_labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-optgroup, mat-optgroup',\n templateUrl: 'optgroup.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disabled'],\n host: {\n 'class': 'mat-optgroup',\n 'role': 'group',\n '[class.mat-optgroup-disabled]': 'disabled',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-labelledby]': '_labelId',\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'label': [{ type: Input },],\n};\n}\n\nfunction MdOptgroup_tsickle_Closure_declarations() {\n/** @type {?} */\nMdOptgroup.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdOptgroup.ctorParameters;\n/** @type {?} */\nMdOptgroup.propDecorators;\n/**\n * Label for the option group.\n * @type {?}\n */\nMdOptgroup.prototype.label;\n/**\n * Unique id for the underlying label.\n * @type {?}\n */\nMdOptgroup.prototype._labelId;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n Optional,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n QueryList,\n} from '@angular/core';\nimport {ENTER, SPACE} from '../keyboard/keycodes';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {MATERIAL_COMPATIBILITY_MODE} from '../compatibility/compatibility';\nimport {MdOptgroup} from './optgroup';\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n/**\n * Event object emitted by MdOption when selected or deselected.\n */\nexport class MdOptionSelectionChange {\n/**\n * @param {?} source\n * @param {?=} isUserInput\n */\nconstructor(public source: MdOption,\npublic isUserInput = false) { }\n}\n\nfunction MdOptionSelectionChange_tsickle_Closure_declarations() {\n/** @type {?} */\nMdOptionSelectionChange.prototype.source;\n/** @type {?} */\nMdOptionSelectionChange.prototype.isUserInput;\n}\n\n/**\n * Single option inside of a `<md-select>` element.\n */\nexport class MdOption {\nprivate _selected: boolean = false;\nprivate _active: boolean = false;\nprivate _multiple: boolean = false;\nprivate _disableRipple: boolean = false;\n/**\n * Whether the option is disabled.\n */\nprivate _disabled: boolean = false;\nprivate _id: string = `md-option-${_uniqueIdCounter++}`;\n/**\n * Whether the wrapping component is in multiple selection mode.\n * @return {?}\n */\nget multiple() { return this._multiple; }\n/**\n * @param {?} value\n * @return {?}\n */\nset multiple(value: boolean) {\n if (value !== this._multiple) {\n this._multiple = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * The unique ID of the option.\n * @return {?}\n */\nget id() { return this._id; }\n/**\n * Whether or not the option is currently selected.\n * @return {?}\n */\nget selected(): boolean { return this._selected; }\n/**\n * The form value of the option.\n */\nvalue: any;\n/**\n * Whether the option is disabled.\n * @return {?}\n */\nget disabled() { return (this.group && this.group.disabled) || this._disabled; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n/**\n * Whether ripples for the option are disabled.\n * @return {?}\n */\nget disableRipple() { return this._disableRipple; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disableRipple(value: boolean) {\n this._disableRipple = value;\n this._changeDetectorRef.markForCheck();\n }\n/**\n * Event emitted when the option is selected or deselected.\n */\nonSelectionChange = new EventEmitter<MdOptionSelectionChange>();\n/**\n * @param {?} _element\n * @param {?} _changeDetectorRef\n * @param {?} group\n */\nconstructor(\nprivate _element: ElementRef,\nprivate _changeDetectorRef: ChangeDetectorRef,\npublic readonly group: MdOptgroup) {}\n/**\n * Whether or not the option is currently active and ready to be selected.\n * An active option displays styles as if it is focused, but the\n * focus is actually retained somewhere else. This comes in handy\n * for components like autocomplete where focus must remain on the input.\n * @return {?}\n */\nget active(): boolean {\n return this._active;\n }\n/**\n * The displayed value of the option. It is necessary to show the selected option in the\n * select's trigger.\n * @return {?}\n */\nget viewValue(): string {\n // TODO(kara): Add input property alternative for node envs.\n return (this._getHostElement().textContent || '').trim();\n }\n/**\n * Selects the option.\n * @return {?}\n */\nselect(): void {\n this._selected = true;\n this._changeDetectorRef.markForCheck();\n this._emitSelectionChangeEvent();\n }\n/**\n * Deselects the option.\n * @return {?}\n */\ndeselect(): void {\n this._selected = false;\n this._changeDetectorRef.markForCheck();\n this._emitSelectionChangeEvent();\n }\n/**\n * Sets focus onto this option.\n * @return {?}\n */\nfocus(): void {\n const /** @type {?} */ element = this._getHostElement();\n\n if (typeof element.focus === 'function') {\n element.focus();\n }\n }\n/**\n * This method sets display styles on the option to make it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n * @return {?}\n */\nsetActiveStyles(): void {\n if (!this._active) {\n this._active = true;\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * This method removes display styles on the option that made it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n * @return {?}\n */\nsetInactiveStyles(): void {\n if (this._active) {\n this._active = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * Gets the label to be used when determining whether the option should be focused.\n * @return {?}\n */\ngetLabel(): string {\n return this.viewValue;\n }\n/**\n * Ensures the option is selected when activated from the keyboard.\n * @param {?} event\n * @return {?}\n */\n_handleKeydown(event: KeyboardEvent): void {\n if (event.keyCode === ENTER || event.keyCode === SPACE) {\n this._selectViaInteraction();\n\n // Prevent the page from scrolling down and form submits.\n event.preventDefault();\n }\n }\n/**\n * Selects the option while indicating the selection came from the user. Used to\n * determine if the select's view -> model callback should be invoked.\n * @return {?}\n */\n_selectViaInteraction(): void {\n if (!this.disabled) {\n this._selected = this.multiple ? !this._selected : true;\n this._changeDetectorRef.markForCheck();\n this._emitSelectionChangeEvent(true);\n }\n }\n/**\n * Returns the correct tabindex for the option depending on disabled state.\n * @return {?}\n */\n_getTabIndex(): string {\n return this.disabled ? '-1' : '0';\n }\n/**\n * Gets the host DOM element.\n * @return {?}\n */\n_getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n/**\n * Emits the selection change event.\n * @param {?=} isUserInput\n * @return {?}\n */\nprivate _emitSelectionChangeEvent(isUserInput = false): void {\n this.onSelectionChange.emit(new MdOptionSelectionChange(this, isUserInput));\n }\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param {?} optionIndex Index of the option at which to start counting.\n * @param {?} options Flat list of all of the options.\n * @param {?} optionGroups Flat list of all of the option groups.\n * @return {?}\n */\nstatic countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MdOption>,\n optionGroups: QueryList<MdOptgroup>): number {\n\n if (optionGroups.length) {\n let /** @type {?} */ optionsArray = options.toArray();\n let /** @type {?} */ groups = optionGroups.toArray();\n let /** @type {?} */ groupCounter = 0;\n\n for (let /** @type {?} */ i = 0; i < optionIndex + 1; i++) {\n if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n groupCounter++;\n }\n }\n\n return groupCounter;\n }\n\n return 0;\n }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-option, mat-option',\n host: {\n 'role': 'option',\n '[attr.tabindex]': '_getTabIndex()',\n '[class.mat-selected]': 'selected',\n '[class.mat-option-multiple]': 'multiple',\n '[class.mat-active]': 'active',\n '[id]': 'id',\n '[attr.aria-selected]': 'selected.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[class.mat-option-disabled]': 'disabled',\n '(click)': '_selectViaInteraction()',\n '(keydown)': '_handleKeydown($event)',\n 'class': 'mat-option',\n },\n templateUrl: 'option.html',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [{provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: ChangeDetectorRef, },\n{type: MdOptgroup, decorators: [{ type: Optional }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'value': [{ type: Input },],\n'disabled': [{ type: Input },],\n'onSelectionChange': [{ type: Output },],\n};\n}\n\nfunction MdOption_tsickle_Closure_declarations() {\n/** @type {?} */\nMdOption.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdOption.ctorParameters;\n/** @type {?} */\nMdOption.propDecorators;\n/** @type {?} */\nMdOption.prototype._selected;\n/** @type {?} */\nMdOption.prototype._active;\n/** @type {?} */\nMdOption.prototype._multiple;\n/** @type {?} */\nMdOption.prototype._disableRipple;\n/**\n * Whether the option is disabled.\n * @type {?}\n */\nMdOption.prototype._disabled;\n/** @type {?} */\nMdOption.prototype._id;\n/**\n * The form value of the option.\n * @type {?}\n */\nMdOption.prototype.value;\n/**\n * Event emitted when the option is selected or deselected.\n * @type {?}\n */\nMdOption.prototype.onSelectionChange;\n/** @type {?} */\nMdOption.prototype._element;\n/** @type {?} */\nMdOption.prototype._changeDetectorRef;\n/** @type {?} */\nMdOption.prototype.group;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MdRippleModule} from '../ripple/index';\nimport {MdPseudoCheckboxModule} from '../selection/index';\nimport {MdOption} from './option';\nimport {MdOptgroup} from './optgroup';\nexport class MdOptionModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdRippleModule, CommonModule, MdPseudoCheckboxModule],\n exports: [MdOption, MdOptgroup],\n declarations: [MdOption, MdOptgroup]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdOptionModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdOptionModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdOptionModule.ctorParameters;\n}\n\n\n\nexport {MdOptionSelectionChange,MdOption} from './option';\nexport {MdOptgroupBase,_MdOptgroupMixinBase,MdOptgroup} from './optgroup';\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Injector} from '@angular/core';\n/**\n * Custom injector to be used when providing custom\n * injection tokens to components inside a portal.\n * \\@docs-private\n */\nexport class PortalInjector implements Injector {\n/**\n * @param {?} _parentInjector\n * @param {?} _customTokens\n */\nconstructor(\nprivate _parentInjector: Injector,\nprivate _customTokens: WeakMap<any, any>) { }\n/**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\nget(token: any, notFoundValue?: any): any {\n const /** @type {?} */ value = this._customTokens.get(token);\n\n if (typeof value !== 'undefined') {\n return value;\n }\n\n return this._parentInjector.get<any>(token, notFoundValue);\n }\n}\n\nfunction PortalInjector_tsickle_Closure_declarations() {\n/** @type {?} */\nPortalInjector.prototype._parentInjector;\n/** @type {?} */\nPortalInjector.prototype._customTokens;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {A11yModule} from '@angular/cdk/a11y';\n/**\n * @deprecated\n */\nexport class StyleModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [A11yModule],\n exports: [A11yModule],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction StyleModule_tsickle_Closure_declarations() {\n/** @type {?} */\nStyleModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nStyleModule.ctorParameters;\n}\n\n\nexport {\n CdkMonitorFocus,\n FocusMonitor,\n FOCUS_MONITOR_PROVIDER,\n FocusOrigin,\n} from '@angular/cdk/a11y';\nexport {applyCssTransform} from './apply-transform';\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, Input} from '@angular/core';\n\n\nlet /** @type {?} */ nextUniqueId = 0;\n/**\n * Single error message to be shown underneath the form field.\n */\nexport class MdError {\n id: string = `mat-error-${nextUniqueId++}`;\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-error, mat-error',\n host: {\n 'class': 'mat-error',\n 'role': 'alert',\n '[attr.id]': 'id',\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'id': [{ type: Input },],\n};\n}\n\nfunction MdError_tsickle_Closure_declarations() {\n/** @type {?} */\nMdError.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdError.ctorParameters;\n/** @type {?} */\nMdError.propDecorators;\n/** @type {?} */\nMdError.prototype.id;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Observable} from 'rxjs/Observable';\nimport {NgControl} from '@angular/forms';\n/**\n * An interface which allows a control to work inside of a `MdFormField`.\n * @abstract\n */\nexport abstract class MdFormFieldControl<T> {\n/**\n * The value of the control.\n */\nvalue: T;\n/**\n * Stream that emits whenever the state of the control changes such that the parent `MdFormField`\n * needs to run change detection.\n */\nreadonly stateChanges: Observable<void>;\n/**\n * The element ID for this control.\n */\nreadonly id: string;\n/**\n * The placeholder for this control.\n */\nreadonly placeholder: string;\n/**\n * Gets the NgControl for this control.\n */\nreadonly ngControl: NgControl | null;\n/**\n * Whether the control is focused.\n */\nreadonly focused: boolean;\n/**\n * Whether the control is empty.\n */\nreadonly empty: boolean;\n/**\n * Whether the control is required.\n */\nreadonly required: boolean;\n/**\n * Whether the control is disabled.\n */\nreadonly disabled: boolean;\n/**\n * Whether the control is in an error state.\n */\nreadonly errorState: boolean;\n/**\n * Sets the list of element IDs that currently describe this control.\n * @abstract\n * @param {?} ids\n * @return {?}\n */\nsetDescribedByIds(ids: string[]) {}\n/**\n * Focuses this control.\n * @abstract\n * @return {?}\n */\nfocus() {}\n}\n\nfunction MdFormFieldControl_tsickle_Closure_declarations() {\n/**\n * The value of the control.\n * @type {?}\n */\nMdFormFieldControl.prototype.value;\n/**\n * Stream that emits whenever the state of the control changes such that the parent `MdFormField`\n * needs to run change detection.\n * @type {?}\n */\nMdFormFieldControl.prototype.stateChanges;\n/**\n * The element ID for this control.\n * @type {?}\n */\nMdFormFieldControl.prototype.id;\n/**\n * The placeholder for this control.\n * @type {?}\n */\nMdFormFieldControl.prototype.placeholder;\n/**\n * Gets the NgControl for this control.\n * @type {?}\n */\nMdFormFieldControl.prototype.ngControl;\n/**\n * Whether the control is focused.\n * @type {?}\n */\nMdFormFieldControl.prototype.focused;\n/**\n * Whether the control is empty.\n * @type {?}\n */\nMdFormFieldControl.prototype.empty;\n/**\n * Whether the control is required.\n * @type {?}\n */\nMdFormFieldControl.prototype.required;\n/**\n * Whether the control is disabled.\n * @type {?}\n */\nMdFormFieldControl.prototype.disabled;\n/**\n * Whether the control is in an error state.\n * @type {?}\n */\nMdFormFieldControl.prototype.errorState;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive, Input} from '@angular/core';\n\n\nlet /** @type {?} */ nextUniqueId = 0;\n/**\n * Hint text to be shown underneath the form field control.\n */\nexport class MdHint {\n/**\n * Whether to align the hint label at the start or end of the line.\n */\nalign: 'start' | 'end' = 'start';\n/**\n * Unique ID for the hint. Used for the aria-describedby on the form field control.\n */\nid: string = `mat-hint-${nextUniqueId++}`;\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-hint, 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}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'align': [{ type: Input },],\n'id': [{ type: Input },],\n};\n}\n\nfunction MdHint_tsickle_Closure_declarations() {\n/** @type {?} */\nMdHint.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdHint.ctorParameters;\n/** @type {?} */\nMdHint.propDecorators;\n/**\n * Whether to align the hint label at the start or end of the line.\n * @type {?}\n */\nMdHint.prototype.align;\n/**\n * Unique ID for the hint. Used for the aria-describedby on the form field control.\n * @type {?}\n */\nMdHint.prototype.id;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive} from '@angular/core';\n/**\n * The floating placeholder for an `MdFormField`.\n */\nexport class MdPlaceholder {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: 'md-placeholder, mat-placeholder'\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdPlaceholder_tsickle_Closure_declarations() {\n/** @type {?} */\nMdPlaceholder.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdPlaceholder.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive} from '@angular/core';\n/**\n * Prefix to be placed the the front of the form field.\n */\nexport class MdPrefix {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdPrefix], [matPrefix]',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdPrefix_tsickle_Closure_declarations() {\n/** @type {?} */\nMdPrefix.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdPrefix.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directive} from '@angular/core';\n/**\n * Suffix to be placed at the end of the form field.\n */\nexport class MdSuffix {static decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[mdSuffix], [matSuffix]',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdSuffix_tsickle_Closure_declarations() {\n/** @type {?} */\nMdSuffix.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdSuffix.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {animate, state, style, transition, trigger} from '@angular/animations';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {first, startWith} from '@angular/cdk/rxjs';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n Inject,\n Input,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n FloatPlaceholderType,\n MD_PLACEHOLDER_GLOBAL_OPTIONS,\n PlaceholderOptions,\n} from '@angular/material/core';\nimport {fromEvent} from 'rxjs/observable/fromEvent';\nimport {MdError} from './error';\nimport {MdFormFieldControl} from './form-field-control';\nimport {\n getMdFormFieldDuplicatedHintError,\n getMdFormFieldMissingControlError,\n getMdFormFieldPlaceholderConflictError,\n} from './form-field-errors';\nimport {MdHint} from './hint';\nimport {MdPlaceholder} from './placeholder';\nimport {MdPrefix} from './prefix';\nimport {MdSuffix} from './suffix';\n\n\nlet /** @type {?} */ nextUniqueId = 0;\n/**\n * Container for form controls that applies Material Design styling and behavior.\n */\nexport class MdFormField implements AfterViewInit, AfterContentInit, AfterContentChecked {\nprivate _placeholderOptions: PlaceholderOptions;\n/**\n * Color of the form field underline, based on the theme.\n */\ncolor: 'primary' | 'accent' | 'warn' = 'primary';\n/**\n * @deprecated Use `color` instead.\n * @return {?}\n */\nget dividerColor() { return this.color; }\n/**\n * @param {?} value\n * @return {?}\n */\nset dividerColor(value) { this.color = value; }\n/**\n * Whether the required marker should be hidden.\n * @return {?}\n */\nget hideRequiredMarker() { return this._hideRequiredMarker; }\n/**\n * @param {?} value\n * @return {?}\n */\nset hideRequiredMarker(value: any) {\n this._hideRequiredMarker = coerceBooleanProperty(value);\n }\nprivate _hideRequiredMarker: boolean;\n/**\n * Override for the logic that disables the placeholder animation in certain cases.\n */\nprivate _showAlwaysAnimate = false;\n/**\n * Whether the floating label should always float or not.\n * @return {?}\n */\nget _shouldAlwaysFloat() {\n return this._floatPlaceholder === 'always' && !this._showAlwaysAnimate;\n }\n/**\n * Whether the placeholder can float or not.\n * @return {?}\n */\nget _canPlaceholderFloat() { return this._floatPlaceholder !== 'never'; }\n/**\n * State of the md-hint and md-error animations.\n */\n_subscriptAnimationState: string = '';\n/**\n * Text for the form field hint.\n * @return {?}\n */\nget hintLabel() { return this._hintLabel; }\n/**\n * @param {?} value\n * @return {?}\n */\nset hintLabel(value: string) {\n this._hintLabel = value;\n this._processHints();\n }\nprivate _hintLabel = '';\n\n // Unique id for the hint label.\n _hintLabelId: string = `md-hint-${nextUniqueId++}`;\n/**\n * Whether the placeholder should always float, never float or float as the user types.\n * @return {?}\n */\nget floatPlaceholder() { return this._floatPlaceholder; }\n/**\n * @param {?} value\n * @return {?}\n */\nset floatPlaceholder(value: FloatPlaceholderType) {\n if (value !== this._floatPlaceholder) {\n this._floatPlaceholder = value || this._placeholderOptions.float || 'auto';\n this._changeDetectorRef.markForCheck();\n }\n }\nprivate _floatPlaceholder: FloatPlaceholderType;\n/**\n * Reference to the form field's underline element.\n */\nunderlineRef: ElementRef;\n _connectionContainerRef: ElementRef;\nprivate _placeholder: ElementRef;\n _control: MdFormFieldControl<any>;\n _placeholderChild: MdPlaceholder;\n _errorChildren: QueryList<MdError>;\n _hintChildren: QueryList<MdHint>;\n _prefixChildren: QueryList<MdPrefix>;\n _suffixChildren: QueryList<MdSuffix>;\n/**\n * @param {?} _elementRef\n * @param {?} _changeDetectorRef\n * @param {?} placeholderOptions\n */\nconstructor(\npublic _elementRef: ElementRef,\nprivate _changeDetectorRef: ChangeDetectorRef,\n placeholderOptions: PlaceholderOptions) {\n this._placeholderOptions = placeholderOptions ? placeholderOptions : {};\n this.floatPlaceholder = this._placeholderOptions.float || 'auto';\n }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._validateControlChild();\n\n // Subscribe to changes in the child control state in order to update the form field UI.\n startWith.call(this._control.stateChanges, null).subscribe(() => {\n this._validatePlaceholders();\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n\n let /** @type {?} */ ngControl = this._control.ngControl;\n if (ngControl && ngControl.valueChanges) {\n ngControl.valueChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n // Re-validate when the number of hints changes.\n startWith.call(this._hintChildren.changes, null).subscribe(() => {\n this._processHints();\n this._changeDetectorRef.markForCheck();\n });\n\n // Update the aria-described by when the number of errors changes.\n startWith.call(this._errorChildren.changes, null).subscribe(() => {\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n }\n/**\n * @return {?}\n */\nngAfterContentChecked() {\n this._validateControlChild();\n }\n/**\n * @return {?}\n */\nngAfterViewInit() {\n // Avoid animations on load.\n this._subscriptAnimationState = 'enter';\n this._changeDetectorRef.detectChanges();\n }\n/**\n * Determines whether a class from the NgControl should be forwarded to the host element.\n * @param {?} prop\n * @return {?}\n */\n_shouldForward(prop: string): boolean {\n let /** @type {?} */ ngControl = this._control ? this._control.ngControl : null;\n return ngControl && ( /** @type {?} */((ngControl as any)))[prop];\n }\n/**\n * Whether the form field has a placeholder.\n * @return {?}\n */\n_hasPlaceholder() {\n return !!(this._control.placeholder || this._placeholderChild);\n }\n/**\n * Determines whether to display hints or errors.\n * @return {?}\n */\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 * @return {?}\n */\n_animateAndLockPlaceholder(): void {\n if (this._placeholder && this._canPlaceholderFloat) {\n this._showAlwaysAnimate = true;\n this._floatPlaceholder = 'always';\n\n first.call(fromEvent(this._placeholder.nativeElement, 'transitionend')).subscribe(() => {\n this._showAlwaysAnimate = false;\n });\n\n this._changeDetectorRef.markForCheck();\n }\n }\n/**\n * Ensure that there is only one placeholder (either `placeholder` attribute on the child control\n * or child element with the `md-placeholder` directive).\n * @return {?}\n */\nprivate _validatePlaceholders() {\n if (this._control.placeholder && this._placeholderChild) {\n throw getMdFormFieldPlaceholderConflictError();\n }\n }\n/**\n * Does any extra processing that is required when handling the hints.\n * @return {?}\n */\nprivate _processHints() {\n this._validateHints();\n this._syncDescribedByIds();\n }\n/**\n * Ensure that there is a maximum of one of each `<md-hint>` alignment specified, with the\n * attribute being considered as `align=\"start\"`.\n * @return {?}\n */\nprivate _validateHints() {\n if (this._hintChildren) {\n let /** @type {?} */ startHint: MdHint;\n let /** @type {?} */ endHint: MdHint;\n this._hintChildren.forEach((hint: MdHint) => {\n if (hint.align == 'start') {\n if (startHint || this.hintLabel) {\n throw getMdFormFieldDuplicatedHintError('start');\n }\n startHint = hint;\n } else if (hint.align == 'end') {\n if (endHint) {\n throw getMdFormFieldDuplicatedHintError('end');\n }\n endHint = hint;\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 * @return {?}\n */\nprivate _syncDescribedByIds() {\n if (this._control) {\n let /** @type {?} */ ids: string[] = [];\n\n if (this._getDisplayedMessages() === 'hint') {\n let /** @type {?} */ startHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'start') : null;\n let /** @type {?} */ 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(mdError => mdError.id);\n }\n\n this._control.setDescribedByIds(ids);\n }\n }\n/**\n * Throws an error if the form field's control is missing.\n * @return {?}\n */\nprotected _validateControlChild() {\n if (!this._control) {\n throw getMdFormFieldMissingControlError();\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n // TODO(mmalerba): the input-container selectors and classes are deprecated and will be removed.\n selector: 'md-input-container, mat-input-container, md-form-field, mat-form-field',\n templateUrl: 'form-field.html',\n // MdInput is a directive and can't have styles, so we need to include its styles here.\n // The MdInput styles are fairly minimal so it shouldn't be a big deal for people who aren't using\n // MdInput.\n styleUrls: ['form-field.css', '../input/input.css'],\n animations: [\n // TODO(mmalerba): Use angular animations for placeholder animation as well.\n trigger('transitionMessages', [\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 host: {\n 'class': 'mat-input-container mat-form-field',\n '[class.mat-input-invalid]': '_control.errorState',\n '[class.mat-form-field-invalid]': '_control.errorState',\n '[class.mat-focused]': '_control.focused',\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 '(click)': '_control.focus()',\n },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: ChangeDetectorRef, },\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_PLACEHOLDER_GLOBAL_OPTIONS, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'color': [{ type: Input },],\n'dividerColor': [{ type: Input },],\n'hideRequiredMarker': [{ type: Input },],\n'hintLabel': [{ type: Input },],\n'floatPlaceholder': [{ type: Input },],\n'underlineRef': [{ type: ViewChild, args: ['underline', ] },],\n'_connectionContainerRef': [{ type: ViewChild, args: ['connectionContainer', ] },],\n'_placeholder': [{ type: ViewChild, args: ['placeholder', ] },],\n'_control': [{ type: ContentChild, args: [MdFormFieldControl, ] },],\n'_placeholderChild': [{ type: ContentChild, args: [MdPlaceholder, ] },],\n'_errorChildren': [{ type: ContentChildren, args: [MdError, ] },],\n'_hintChildren': [{ type: ContentChildren, args: [MdHint, ] },],\n'_prefixChildren': [{ type: ContentChildren, args: [MdPrefix, ] },],\n'_suffixChildren': [{ type: ContentChildren, args: [MdSuffix, ] },],\n};\n}\n\nfunction MdFormField_tsickle_Closure_declarations() {\n/** @type {?} */\nMdFormField.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdFormField.ctorParameters;\n/** @type {?} */\nMdFormField.propDecorators;\n/** @type {?} */\nMdFormField.prototype._placeholderOptions;\n/**\n * Color of the form field underline, based on the theme.\n * @type {?}\n */\nMdFormField.prototype.color;\n/** @type {?} */\nMdFormField.prototype._hideRequiredMarker;\n/**\n * Override for the logic that disables the placeholder animation in certain cases.\n * @type {?}\n */\nMdFormField.prototype._showAlwaysAnimate;\n/**\n * State of the md-hint and md-error animations.\n * @type {?}\n */\nMdFormField.prototype._subscriptAnimationState;\n/** @type {?} */\nMdFormField.prototype._hintLabel;\n/** @type {?} */\nMdFormField.prototype._hintLabelId;\n/** @type {?} */\nMdFormField.prototype._floatPlaceholder;\n/**\n * Reference to the form field's underline element.\n * @type {?}\n */\nMdFormField.prototype.underlineRef;\n/** @type {?} */\nMdFormField.prototype._connectionContainerRef;\n/** @type {?} */\nMdFormField.prototype._placeholder;\n/** @type {?} */\nMdFormField.prototype._control;\n/** @type {?} */\nMdFormField.prototype._placeholderChild;\n/** @type {?} */\nMdFormField.prototype._errorChildren;\n/** @type {?} */\nMdFormField.prototype._hintChildren;\n/** @type {?} */\nMdFormField.prototype._prefixChildren;\n/** @type {?} */\nMdFormField.prototype._suffixChildren;\n/** @type {?} */\nMdFormField.prototype._elementRef;\n/** @type {?} */\nMdFormField.prototype._changeDetectorRef;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdError} from './error';\nimport {MdFormField} from './form-field';\nimport {MdHint} from './hint';\nimport {MdPlaceholder} from './placeholder';\nimport {MdPrefix} from './prefix';\nimport {MdSuffix} from './suffix';\nimport {CommonModule} from '@angular/common';\nimport {PlatformModule} from '@angular/material/core';\nexport class MdFormFieldModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n declarations: [\n MdError,\n MdHint,\n MdFormField,\n MdPlaceholder,\n MdPrefix,\n MdSuffix,\n ],\n imports: [\n CommonModule,\n PlatformModule,\n ],\n exports: [\n MdError,\n MdHint,\n MdFormField,\n MdPlaceholder,\n MdPrefix,\n MdSuffix,\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdFormFieldModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdFormFieldModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdFormFieldModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdFormFieldModule,MdError,MdFormField,MdFormFieldControl,getMdFormFieldPlaceholderConflictError,getMdFormFieldDuplicatedHintError,getMdFormFieldMissingControlError,MdHint,MdPlaceholder,MdPrefix,MdSuffix,MatFormFieldModule,MatError,MatFormField,MatFormFieldControl,MatHint,MatPlaceholder,MatPrefix,MatSuffix} from './public_api';\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n EventEmitter,\n Output,\n} from '@angular/core';\nimport {MdOption, MdOptgroup} from '@angular/material/core';\nimport {ActiveDescendantKeyManager} from '@angular/cdk/a11y';\n/**\n * Autocomplete IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueAutocompleteIdCounter = 0;\n/**\n * Event object that is emitted when an autocomplete option is selected\n */\nexport class MdAutocompleteSelectedEvent {\n/**\n * @param {?} source\n * @param {?} option\n */\nconstructor(public source: MdAutocomplete,\npublic option: MdOption) { }\n}\n\nfunction MdAutocompleteSelectedEvent_tsickle_Closure_declarations() {\n/** @type {?} */\nMdAutocompleteSelectedEvent.prototype.source;\n/** @type {?} */\nMdAutocompleteSelectedEvent.prototype.option;\n}\n\nexport class MdAutocomplete implements AfterContentInit {\n/**\n * Manages active item in option list based on key events.\n */\n_keyManager: ActiveDescendantKeyManager<MdOption>;\n/**\n * Whether the autocomplete panel should be visible, depending on option length.\n */\nshowPanel = false;\n/**\n * \\@docs-private\n */\ntemplate: TemplateRef<any>;\n/**\n * Element for the panel containing the autocomplete options.\n */\npanel: ElementRef;\n/**\n * \\@docs-private\n */\noptions: QueryList<MdOption>;\n/**\n * \\@docs-private\n */\noptionGroups: QueryList<MdOptgroup>;\n/**\n * Function that maps an option's control value to its display value in the trigger.\n */\ndisplayWith: ((value: any) => string) | null = null;\n/**\n * Event that is emitted whenever an option from the list is selected.\n */\noptionSelected: EventEmitter<MdAutocompleteSelectedEvent> =\n new EventEmitter<MdAutocompleteSelectedEvent>();\n/**\n * Unique ID to be used by autocomplete trigger's \"aria-owns\" property.\n */\nid: string = `md-autocomplete-${_uniqueAutocompleteIdCounter++}`;\n/**\n * @param {?} _changeDetectorRef\n */\nconstructor(private _changeDetectorRef: ChangeDetectorRef) { }\n/**\n * @return {?}\n */\nngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager<MdOption>(this.options).withWrap();\n }\n/**\n * Sets the panel scrollTop. This allows us to manually scroll to display options\n * above or below the fold, as they are not actually being focused when active.\n * @param {?} scrollTop\n * @return {?}\n */\n_setScrollTop(scrollTop: number): void {\n if (this.panel) {\n this.panel.nativeElement.scrollTop = scrollTop;\n }\n }\n/**\n * Returns the panel's scrollTop.\n * @return {?}\n */\n_getScrollTop(): number {\n return this.panel ? this.panel.nativeElement.scrollTop : 0;\n }\n/**\n * Panel should hide itself when the option list is empty.\n * @return {?}\n */\n_setVisibility(): void {\n Promise.resolve().then(() => {\n this.showPanel = !!this.options.length;\n this._changeDetectorRef.markForCheck();\n });\n }\n/**\n * Emits the `select` event.\n * @param {?} option\n * @return {?}\n */\n_emitSelectEvent(option: MdOption): void {\n const /** @type {?} */ event = new MdAutocompleteSelectedEvent(this, option);\n this.optionSelected.emit(event);\n }\n/**\n * Sets a class on the panel based on whether it is visible.\n * @return {?}\n */\n_getClassList() {\n return {\n 'mat-autocomplete-visible': this.showPanel,\n 'mat-autocomplete-hidden': !this.showPanel\n };\n }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n selector: 'md-autocomplete, mat-autocomplete',\n templateUrl: 'autocomplete.html',\n styleUrls: ['autocomplete.css'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'mdAutocomplete, matAutocomplete',\n host: {\n 'class': 'mat-autocomplete'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'template': [{ type: ViewChild, args: [TemplateRef, ] },],\n'panel': [{ type: ViewChild, args: ['panel', ] },],\n'options': [{ type: ContentChildren, args: [MdOption, { descendants: true }, ] },],\n'optionGroups': [{ type: ContentChildren, args: [MdOptgroup, ] },],\n'displayWith': [{ type: Input },],\n'optionSelected': [{ type: Output },],\n};\n}\n\nfunction MdAutocomplete_tsickle_Closure_declarations() {\n/** @type {?} */\nMdAutocomplete.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdAutocomplete.ctorParameters;\n/** @type {?} */\nMdAutocomplete.propDecorators;\n/**\n * Manages active item in option list based on key events.\n * @type {?}\n */\nMdAutocomplete.prototype._keyManager;\n/**\n * Whether the autocomplete panel should be visible, depending on option length.\n * @type {?}\n */\nMdAutocomplete.prototype.showPanel;\n/**\n * \\@docs-private\n * @type {?}\n */\nMdAutocomplete.prototype.template;\n/**\n * Element for the panel containing the autocomplete options.\n * @type {?}\n */\nMdAutocomplete.prototype.panel;\n/**\n * \\@docs-private\n * @type {?}\n */\nMdAutocomplete.prototype.options;\n/**\n * \\@docs-private\n * @type {?}\n */\nMdAutocomplete.prototype.optionGroups;\n/**\n * Function that maps an option's control value to its display value in the trigger.\n * @type {?}\n */\nMdAutocomplete.prototype.displayWith;\n/**\n * Event that is emitted whenever an option from the list is selected.\n * @type {?}\n */\nMdAutocomplete.prototype.optionSelected;\n/**\n * Unique ID to be used by autocomplete trigger's \"aria-owns\" property.\n * @type {?}\n */\nMdAutocomplete.prototype.id;\n/** @type {?} */\nMdAutocomplete.prototype._changeDetectorRef;\n}\n\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Directionality} from '@angular/cdk/bidi';\nimport {DOWN_ARROW, ENTER, ESCAPE, UP_ARROW} from '@angular/cdk/keycodes';\nimport {\n ConnectedPositionStrategy,\n Overlay,\n OverlayRef,\n OverlayConfig,\n PositionStrategy,\n RepositionScrollStrategy,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {filter, first, map, RxChain, switchMap} from '@angular/cdk/rxjs';\nimport {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n forwardRef,\n Host,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n ViewContainerRef,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {MdOption, MdOptionSelectionChange} from '@angular/material/core';\nimport {MdFormField} from '@angular/material/form-field';\nimport {DOCUMENT} from '@angular/platform-browser';\nimport {Observable} from 'rxjs/Observable';\nimport {fromEvent} from 'rxjs/observable/fromEvent';\nimport {merge} from 'rxjs/observable/merge';\nimport {of as observableOf} from 'rxjs/observable/of';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MdAutocomplete} from './autocomplete';\n/**\n * The height of each autocomplete option.\n */\nexport const AUTOCOMPLETE_OPTION_HEIGHT = 48;\n/**\n * The total height of the autocomplete panel.\n */\nexport const AUTOCOMPLETE_PANEL_HEIGHT = 256;\n/**\n * Injection token that determines the scroll handling while the autocomplete panel is open.\n */\nexport const MD_AUTOCOMPLETE_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('md-autocomplete-scroll-strategy');\n/**\n * \\@docs-private\n * @param {?} overlay\n * @return {?}\n */\nexport function MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n () => RepositionScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n/**\n * \\@docs-private\n */\nexport const MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER = {\n provide: MD_AUTOCOMPLETE_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * \\@docs-private\n */\nexport const MD_AUTOCOMPLETE_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MdAutocompleteTrigger),\n multi: true\n};\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @return {?}\n */\nexport function getMdAutocompleteMissingPanelError(): Error {\n return Error('Attempting to open an undefined instance of `md-autocomplete`. ' +\n 'Make sure that the id passed to the `mdAutocomplete` is correct and that ' +\n 'you\\'re attempting to open it after the ngAfterContentInit hook.');\n}\nexport class MdAutocompleteTrigger implements ControlValueAccessor, OnDestroy {\nprivate _overlayRef: OverlayRef | null;\nprivate _portal: TemplatePortal<any>;\nprivate _panelOpen: boolean = false;\n/**\n * Strategy that is used to position the panel.\n */\nprivate _positionStrategy: ConnectedPositionStrategy;\n/**\n * Whether or not the placeholder state is being overridden.\n */\nprivate _manuallyFloatingPlaceholder = false;\n/**\n * The subscription for closing actions (some are bound to document).\n */\nprivate _closingActionsSubscription: Subscription;\n/**\n * View -> model callback called when value changes\n */\n_onChange: (value: any) => void = () => {};\n/**\n * View -> model callback called when autocomplete has been touched\n */\n_onTouched = () => {};\n\n /* The autocomplete panel to be attached to this trigger. */\n autocomplete: MdAutocomplete;\n/**\n * Property with mat- prefix for no-conflict mode.\n * @return {?}\n */\nget _matAutocomplete(): MdAutocomplete {\n return this.autocomplete;\n }\n/**\n * @param {?} autocomplete\n * @return {?}\n */\nset _matAutocomplete(autocomplete: MdAutocomplete) {\n this.autocomplete = autocomplete;\n }\n/**\n * @param {?} _element\n * @param {?} _overlay\n * @param {?} _viewContainerRef\n * @param {?} _zone\n * @param {?} _changeDetectorRef\n * @param {?} _scrollStrategy\n * @param {?} _dir\n * @param {?} _formField\n * @param {?} _document\n */\nconstructor(private _element: ElementRef,\nprivate _overlay: Overlay,\nprivate _viewContainerRef: ViewContainerRef,\nprivate _zone: NgZone,\nprivate _changeDetectorRef: ChangeDetectorRef,\nprivate _scrollStrategy,\nprivate _dir: Directionality,\nprivate _formField: MdFormField,\nprivate _document: any) {}\n/**\n * @return {?}\n */\nngOnDestroy() {\n this._destroyPanel();\n }\n/**\n * @return {?}\n */\nget panelOpen(): boolean {\n return this._panelOpen && this.autocomplete.showPanel;\n }\n/**\n * Opens the autocomplete suggestion panel.\n * @return {?}\n */\nopenPanel(): void {\n this._attachOverlay();\n this._floatPlaceholder();\n }\n/**\n * Closes the autocomplete suggestion panel.\n * @return {?}\n */\nclosePanel(): void {\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n this._closingActionsSubscription.unsubscribe();\n }\n\n this._resetPlaceholder();\n\n if (this._panelOpen) {\n this._panelOpen = false;\n\n // We need to trigger change detection manually, because\n // `fromEvent` doesn't seem to do it at the proper time.\n // This ensures that the placeholder is reset when the\n // user clicks outside.\n this._changeDetectorRef.detectChanges();\n }\n }\n/**\n * A stream of actions that should close the autocomplete panel, including\n * when an option is selected, on blur, and when TAB is pressed.\n * @return {?}\n */\nget panelClosingActions(): Observable<MdOptionSelectionChange> {\n return merge(\n this.optionSelections,\n this.autocomplete._keyManager.tabOut,\n this._outsideClickStream\n );\n }\n/**\n * Stream of autocomplete option selections.\n * @return {?}\n */\nget optionSelections(): Observable<MdOptionSelectionChange> {\n return merge(...this.autocomplete.options.map(option => option.onSelectionChange));\n }\n/**\n * The currently active option, coerced to MdOption type.\n * @return {?}\n */\nget activeOption(): MdOption | null {\n if (this.autocomplete && this.autocomplete._keyManager) {\n return this.autocomplete._keyManager.activeItem;\n }\n\n return null;\n }\n/**\n * Stream of clicks outside of the autocomplete panel.\n * @return {?}\n */\nprivate get _outsideClickStream(): Observable<any> {\n if (!this._document) {\n return observableOf(null);\n }\n\n return RxChain.from(merge(\n fromEvent(this._document, 'click'),\n fromEvent(this._document, 'touchend')\n )).call(filter, (event: MouseEvent | TouchEvent) => {\n const /** @type {?} */ clickTarget = /** @type {?} */(( event.target as HTMLElement));\n const /** @type {?} */ formField = this._formField ?\n this._formField._elementRef.nativeElement : null;\n\n return this._panelOpen &&\n clickTarget !== this._element.nativeElement &&\n (!formField || !formField.contains(clickTarget)) &&\n (!!this._overlayRef && !this._overlayRef.overlayElement.contains(clickTarget));\n }).result();\n }\n/**\n * Sets the autocomplete's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n * \n * @param {?} value New value to be written to the model.\n * @return {?}\n */\nwriteValue(value: any): void {\n Promise.resolve(null).then(() => this._setTriggerValue(value));\n }\n/**\n * Saves a callback function to be invoked when the autocomplete's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n * \n * @param {?} fn Callback to be triggered when the value changes.\n * @return {?}\n */\nregisterOnChange(fn: (value: any) => {}): void {\n this._onChange = fn;\n }\n/**\n * Saves a callback function to be invoked when the autocomplete is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n * \n * @param {?} fn Callback to be triggered when the component has been touched.\n * @return {?}\n */\nregisterOnTouched(fn: () => {}) {\n this._onTouched = fn;\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_handleKeydown(event: KeyboardEvent): void {\n if (event.keyCode === ESCAPE && this.panelOpen) {\n this._resetActiveItem();\n this.closePanel();\n event.stopPropagation();\n } else if (this.activeOption && event.keyCode === ENTER && this.panelOpen) {\n this.activeOption._selectViaInteraction();\n this._resetActiveItem();\n event.preventDefault();\n } else {\n const /** @type {?} */ prevActiveItem = this.autocomplete._keyManager.activeItem;\n const /** @type {?} */ isArrowKey = event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW;\n\n if (this.panelOpen) {\n this.autocomplete._keyManager.onKeydown(event);\n } else if (isArrowKey) {\n this.openPanel();\n }\n\n Promise.resolve().then(() => {\n if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n this._scrollToOption();\n }\n });\n }\n }\n/**\n * @param {?} event\n * @return {?}\n */\n_handleInput(event: KeyboardEvent): void {\n // We need to ensure that the input is focused, because IE will fire the `input`\n // event on focus/blur/load if the input has a placeholder. See:\n // https://connect.microsoft.com/IE/feedback/details/885747/\n if (document.activeElement === event.target) {\n this._onChange(( /** @type {?} */((event.target as HTMLInputElement))).value);\n this.openPanel();\n }\n }\n/**\n * @return {?}\n */\n_handleFocus(): void {\n this._attachOverlay();\n this._floatPlaceholder(true);\n }\n/**\n * In \"auto\" mode, the placeholder will animate down as soon as focus is lost.\n * This causes the value to jump when selecting an option with the mouse.\n * This method manually floats the placeholder until the panel can be closed.\n * @param {?=} shouldAnimate Whether the placeholder should be animated when it is floated.\n * @return {?}\n */\nprivate _floatPlaceholder(shouldAnimate = false): void {\n if (this._formField && this._formField.floatPlaceholder === 'auto') {\n if (shouldAnimate) {\n this._formField._animateAndLockPlaceholder();\n } else {\n this._formField.floatPlaceholder = 'always';\n }\n\n this._manuallyFloatingPlaceholder = true;\n }\n }\n/**\n * If the placeholder has been manually elevated, return it to its normal state.\n * @return {?}\n */\nprivate _resetPlaceholder(): void {\n if (this._manuallyFloatingPlaceholder) {\n this._formField.floatPlaceholder = 'auto';\n this._manuallyFloatingPlaceholder = false;\n }\n }\n/**\n * Given that we are not actually focusing active options, we must manually adjust scroll\n * to reveal options below the fold. First, we find the offset of the option from the top\n * of the panel. If that offset is below the fold, the new scrollTop will be the offset -\n * the panel height + the option height, so the active option will be just visible at the\n * bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop\n * will become the offset. If that offset is visible within the panel already, the scrollTop is\n * not adjusted.\n * @return {?}\n */\nprivate _scrollToOption(): void {\n const /** @type {?} */ activeOptionIndex = this.autocomplete._keyManager.activeItemIndex || 0;\n const /** @type {?} */ labelCount = MdOption.countGroupLabelsBeforeOption(activeOptionIndex,\n this.autocomplete.options, this.autocomplete.optionGroups);\n const /** @type {?} */ optionOffset = (activeOptionIndex + labelCount) * AUTOCOMPLETE_OPTION_HEIGHT;\n const /** @type {?} */ panelTop = this.autocomplete._getScrollTop();\n\n if (optionOffset < panelTop) {\n // Scroll up to reveal selected option scrolled above the panel top\n this.autocomplete._setScrollTop(optionOffset);\n } else if (optionOffset + AUTOCOMPLETE_OPTION_HEIGHT > panelTop + AUTOCOMPLETE_PANEL_HEIGHT) {\n // Scroll down to reveal selected option scrolled below the panel bottom\n const /** @type {?} */ newScrollTop =\n Math.max(0, optionOffset - AUTOCOMPLETE_PANEL_HEIGHT + AUTOCOMPLETE_OPTION_HEIGHT);\n this.autocomplete._setScrollTop(newScrollTop);\n }\n }\n/**\n * This method listens to a stream of panel closing actions and resets the\n * stream every time the option list changes.\n * @return {?}\n */\nprivate _subscribeToClosingActions(): Subscription {\n const /** @type {?} */ firstStable = first.call(this._zone.onStable.asObservable());\n const /** @type {?} */ optionChanges = map.call(this.autocomplete.options.changes, () =>\n this._positionStrategy.recalculateLastPosition());\n\n // When the zone is stable initially, and when the option list changes...\n return RxChain.from(merge(firstStable, optionChanges))\n // create a new stream of panelClosingActions, replacing any previous streams\n // that were created, and flatten it so our stream only emits closing events...\n .call(switchMap, () => {\n this._resetActiveItem();\n this.autocomplete._setVisibility();\n return this.panelClosingActions;\n })\n // when the first closing event occurs...\n .call(first)\n // set the value, close the panel, and complete.\n .subscribe(event => this._setValueAndClose(event));\n }\n/**\n * Destroys the autocomplete suggestion panel.\n * @return {?}\n */\nprivate _destroyPanel(): void {\n if (this._overlayRef) {\n this.closePanel();\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n/**\n * @param {?} value\n * @return {?}\n */\nprivate _setTriggerValue(value: any): void {\n const /** @type {?} */ toDisplay = this.autocomplete.displayWith ? this.autocomplete.displayWith(value) : value;\n\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n const /** @type {?} */ inputValue = toDisplay != null ? toDisplay : '';\n\n // If it's used within a `MdFormField`, we should set it through the property so it can go\n // through change detection.\n if (this._formField) {\n this._formField._control.value = inputValue;\n } else {\n this._element.nativeElement.value = inputValue;\n }\n }\n/**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n * @param {?} event\n * @return {?}\n */\nprivate _setValueAndClose(event: MdOptionSelectionChange | null): void {\n if (event && event.source) {\n this._clearPreviousSelectedOption(event.source);\n this._setTriggerValue(event.source.value);\n this._onChange(event.source.value);\n this._element.nativeElement.focus();\n this.autocomplete._emitSelectEvent(event.source);\n }\n\n this.closePanel();\n }\n/**\n * Clear any previous selected option and emit a selection change event for this option\n * @param {?} skip\n * @return {?}\n */\nprivate _clearPreviousSelectedOption(skip: MdOption) {\n this.autocomplete.options.forEach(option => {\n if (option != skip && option.selected) {\n option.deselect();\n }\n });\n }\n/**\n * @return {?}\n */\nprivate _attachOverlay(): void {\n if (!this.autocomplete) {\n throw getMdAutocompleteMissingPanelError();\n }\n\n if (!this._overlayRef) {\n this._portal = new TemplatePortal(this.autocomplete.template, this._viewContainerRef);\n this._overlayRef = this._overlay.create(this._getOverlayConfig());\n } else {\n /** Update the panel width, in case the host width has changed */\n this._overlayRef.getState().width = this._getHostWidth();\n this._overlayRef.updateSize();\n }\n\n if (this._overlayRef && !this._overlayRef.hasAttached()) {\n this._overlayRef.attach(this._portal);\n this._closingActionsSubscription = this._subscribeToClosingActions();\n }\n\n this.autocomplete._setVisibility();\n this._panelOpen = true;\n }\n/**\n * @return {?}\n */\nprivate _getOverlayConfig(): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this._getOverlayPosition(),\n scrollStrategy: this._scrollStrategy(),\n width: this._getHostWidth(),\n direction: this._dir ? this._dir.value : 'ltr'\n });\n }\n/**\n * @return {?}\n */\nprivate _getOverlayPosition(): PositionStrategy {\n this._positionStrategy = this._overlay.position().connectedTo(\n this._getConnectedElement(),\n {originX: 'start', originY: 'bottom'}, {overlayX: 'start', overlayY: 'top'})\n .withFallbackPosition(\n {originX: 'start', originY: 'top'}, {overlayX: 'start', overlayY: 'bottom'}\n );\n return this._positionStrategy;\n }\n/**\n * @return {?}\n */\nprivate _getConnectedElement(): ElementRef {\n return this._formField ? this._formField._connectionContainerRef : this._element;\n }\n/**\n * Returns the width of the input element, so the panel width can match it.\n * @return {?}\n */\nprivate _getHostWidth(): number {\n return this._getConnectedElement().nativeElement.getBoundingClientRect().width;\n }\n/**\n * Reset active item to -1 so arrow events will activate the correct options.\n * @return {?}\n */\nprivate _resetActiveItem(): void {\n this.autocomplete._keyManager.setActiveItem(-1);\n }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: `input[mdAutocomplete], input[matAutocomplete],\n textarea[mdAutocomplete], textarea[matAutocomplete]`,\n host: {\n 'role': 'combobox',\n 'autocomplete': 'off',\n 'aria-autocomplete': 'list',\n 'aria-multiline': 'false',\n '[attr.aria-activedescendant]': 'activeOption?.id',\n '[attr.aria-expanded]': 'panelOpen.toString()',\n '[attr.aria-owns]': 'autocomplete?.id',\n // Note: we use `focusin`, as opposed to `focus`, in order to open the panel\n // a little earlier. This avoids issues where IE delays the focusing of the input.\n '(focusin)': '_handleFocus()',\n '(blur)': '_onTouched()',\n '(input)': '_handleInput($event)',\n '(keydown)': '_handleKeydown($event)',\n },\n providers: [MD_AUTOCOMPLETE_VALUE_ACCESSOR]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: Overlay, },\n{type: ViewContainerRef, },\n{type: NgZone, },\n{type: ChangeDetectorRef, },\n{type: undefined, decorators: [{ type: Inject, args: [MD_AUTOCOMPLETE_SCROLL_STRATEGY, ] }, ]},\n{type: Directionality, decorators: [{ type: Optional }, ]},\n{type: MdFormField, decorators: [{ type: Optional }, { type: Host }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'autocomplete': [{ type: Input, args: ['mdAutocomplete', ] },],\n'_matAutocomplete': [{ type: Input, args: ['matAutocomplete', ] },],\n};\n}\n\nfunction MdAutocompleteTrigger_tsickle_Closure_declarations() {\n/** @type {?} */\nMdAutocompleteTrigger.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdAutocompleteTrigger.ctorParameters;\n/** @type {?} */\nMdAutocompleteTrigger.propDecorators;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._overlayRef;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._portal;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._panelOpen;\n/**\n * Strategy that is used to position the panel.\n * @type {?}\n */\nMdAutocompleteTrigger.prototype._positionStrategy;\n/**\n * Whether or not the placeholder state is being overridden.\n * @type {?}\n */\nMdAutocompleteTrigger.prototype._manuallyFloatingPlaceholder;\n/**\n * The subscription for closing actions (some are bound to document).\n * @type {?}\n */\nMdAutocompleteTrigger.prototype._closingActionsSubscription;\n/**\n * View -> model callback called when value changes\n * @type {?}\n */\nMdAutocompleteTrigger.prototype._onChange;\n/**\n * View -> model callback called when autocomplete has been touched\n * @type {?}\n */\nMdAutocompleteTrigger.prototype._onTouched;\n/** @type {?} */\nMdAutocompleteTrigger.prototype.autocomplete;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._element;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._overlay;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._viewContainerRef;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._zone;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._changeDetectorRef;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._scrollStrategy;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._dir;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._formField;\n/** @type {?} */\nMdAutocompleteTrigger.prototype._document;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {MdOptionModule, MdCommonModule} from '@angular/material/core';\nimport {MdAutocomplete} from './autocomplete';\nimport {\n MdAutocompleteTrigger,\n MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER,\n} from './autocomplete-trigger';\nexport class MdAutocompleteModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdOptionModule, OverlayModule, MdCommonModule, CommonModule],\n exports: [MdAutocomplete, MdOptionModule, MdAutocompleteTrigger, MdCommonModule],\n declarations: [MdAutocomplete, MdAutocompleteTrigger],\n providers: [MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdAutocompleteModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdAutocompleteModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdAutocompleteModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdAutocompleteSelectedEvent,MdAutocomplete,MdAutocompleteModule,AUTOCOMPLETE_OPTION_HEIGHT,AUTOCOMPLETE_PANEL_HEIGHT,MD_AUTOCOMPLETE_SCROLL_STRATEGY,MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER_FACTORY,MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER,MD_AUTOCOMPLETE_VALUE_ACCESSOR,getMdAutocompleteMissingPanelError,MdAutocompleteTrigger,MAT_AUTOCOMPLETE_SCROLL_STRATEGY,MAT_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER,MAT_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER_FACTORY,MAT_AUTOCOMPLETE_VALUE_ACCESSOR,MatAutocomplete,MatAutocompleteModule,MatAutocompleteTrigger} from './public_api';\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule, Directive, Inject, Optional, ElementRef, InjectionToken} from '@angular/core';\n\nexport const /** @type {?} */ MATERIAL_COMPATIBILITY_MODE = new InjectionToken<boolean>('md-compatibility-mode');\n/**\n * Returns an exception to be thrown if the consumer has used\n * an invalid Material prefix on a component.\n * \\@docs-private\n * @param {?} prefix\n * @param {?} nodeName\n * @return {?}\n */\nexport function getMdCompatibilityInvalidPrefixError(prefix: string, nodeName: string) {\n return Error(`The \"${prefix}-\" prefix cannot be used in ng-material v1 compatibility mode. ` +\n `It was used on an \"${nodeName.toLowerCase()}\" element.`);\n}\n/**\n * Selector that matches all elements that may have style collisions with AngularJS Material.\n */\nexport const MAT_ELEMENTS_SELECTOR = `\n [mat-button],\n [mat-fab],\n [mat-icon-button],\n [mat-mini-fab],\n [mat-raised-button],\n [matCardSubtitle],\n [matCardTitle],\n [matCellDef],\n [matColumnDef],\n [matDialogActions],\n [matDialogClose],\n [matDialogContent],\n [matDialogTitle],\n [matHeaderCellDef],\n [matHeaderRowDef],\n [matLine],\n [matRowDef],\n [matStepLabel],\n [matStepperNext],\n [matStepperPrevious],\n [matTabLabel],\n [matTabLink],\n [matTabNav],\n [matTooltip],\n [matInput],\n [matPrefix],\n [matSuffix],\n mat-autocomplete,\n mat-button-toggle,\n mat-button-toggle,\n mat-button-toggle-group,\n mat-card,\n mat-card-actions,\n mat-card-content,\n mat-card-footer,\n mat-card-header,\n mat-card-subtitle,\n mat-card-title,\n mat-card-title-group,\n mat-cell,\n mat-checkbox,\n mat-chip,\n mat-dialog-actions,\n mat-dialog-container,\n mat-dialog-content,\n mat-divider,\n mat-error,\n mat-grid-list,\n mat-grid-tile,\n mat-grid-tile-footer,\n mat-grid-tile-header,\n mat-header-cell,\n mat-header-row,\n mat-hint,\n mat-horizontal-stepper,\n mat-icon,\n mat-input-container,\n mat-form-field,\n mat-list,\n mat-list-item,\n mat-menu,\n mat-nav-list,\n mat-option,\n mat-placeholder,\n mat-progress-bar,\n mat-pseudo-checkbox,\n mat-radio-button,\n mat-radio-group,\n mat-row,\n mat-select,\n mat-sidenav,\n mat-sidenav-container,\n mat-slider,\n mat-spinner,\n mat-step,\n mat-tab,\n mat-table,\n mat-tab-group,\n mat-toolbar,\n mat-vertical-stepper`;\n/**\n * Selector that matches all elements that may have style collisions with AngularJS Material.\n */\nexport const MD_ELEMENTS_SELECTOR = `\n [md-button],\n [md-fab],\n [md-icon-button],\n [md-mini-fab],\n [md-raised-button],\n [mdCardSubtitle],\n [mdCardTitle],\n [mdCellDef],\n [mdColumnDef],\n [mdDialogActions],\n [mdDialogClose],\n [mdDialogContent],\n [mdDialogTitle],\n [mdHeaderCellDef],\n [mdHeaderRowDef],\n [mdLine],\n [mdRowDef],\n [mdStepLabel],\n [mdStepperNext],\n [mdStepperPrevious],\n [mdTabLabel],\n [mdTabLink],\n [mdTabNav],\n [mdTooltip],\n [mdInput],\n [mdPrefix],\n [mdSuffix],\n md-autocomplete,\n md-button-toggle,\n md-button-toggle,\n md-button-toggle-group,\n md-card,\n md-card-actions,\n md-card-content,\n md-card-footer,\n md-card-header,\n md-card-subtitle,\n md-card-title,\n md-card-title-group,\n md-cell,\n md-checkbox,\n md-chip,\n md-dialog-actions,\n md-dialog-container,\n md-dialog-content,\n md-divider,\n md-error,\n md-grid-list,\n md-grid-tile,\n md-grid-tile-footer,\n md-grid-tile-header,\n md-header-cell,\n md-header-row,\n md-hint,\n md-horizontal-stepper,\n md-icon,\n md-input-container,\n md-form-field,\n md-list,\n md-list-item,\n md-menu,\n md-nav-list,\n md-option,\n md-placeholder,\n md-progress-bar,\n md-pseudo-checkbox,\n md-radio-button,\n md-radio-group,\n md-row,\n md-select,\n md-sidenav,\n md-sidenav-container,\n md-slider,\n md-spinner,\n md-step,\n md-tab,\n md-table,\n md-tab-group,\n md-toolbar,\n md-vertical-stepper`;\n/**\n * Directive that enforces that the `mat-` prefix cannot be used.\n */\nexport class MatPrefixRejector {\n/**\n * @param {?} isCompatibilityMode\n * @param {?} elementRef\n */\nconstructor(\n isCompatibilityMode: boolean,\n elementRef: ElementRef) {\n\n if (!isCompatibilityMode) {\n throw getMdCompatibilityInvalidPrefixError('mat', elementRef.nativeElement.nodeName);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: MAT_ELEMENTS_SELECTOR}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MATERIAL_COMPATIBILITY_MODE, ] }, ]},\n{type: ElementRef, },\n];\n}\n\nfunction MatPrefixRejector_tsickle_Closure_declarations() {\n/** @type {?} */\nMatPrefixRejector.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMatPrefixRejector.ctorParameters;\n}\n\n/**\n * Directive that enforces that the `md-` prefix cannot be used.\n */\nexport class MdPrefixRejector {\n/**\n * @param {?} isCompatibilityMode\n * @param {?} elementRef\n */\nconstructor(\n isCompatibilityMode: boolean,\n elementRef: ElementRef) {\n\n if (isCompatibilityMode) {\n throw getMdCompatibilityInvalidPrefixError('md', elementRef.nativeElement.nodeName);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: MD_ELEMENTS_SELECTOR}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MATERIAL_COMPATIBILITY_MODE, ] }, ]},\n{type: ElementRef, },\n];\n}\n\nfunction MdPrefixRejector_tsickle_Closure_declarations() {\n/** @type {?} */\nMdPrefixRejector.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdPrefixRejector.ctorParameters;\n}\n\n/**\n * Module that enforces the default compatibility mode settings. When this module is loaded\n * without NoConflictStyleCompatibilityMode also being imported, it will throw an error if\n * there are any uses of the `mat-` prefix.\n */\nexport class CompatibilityModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n declarations: [MatPrefixRejector, MdPrefixRejector],\n exports: [MatPrefixRejector, MdPrefixRejector],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction CompatibilityModule_tsickle_Closure_declarations() {\n/** @type {?} */\nCompatibilityModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nCompatibilityModule.ctorParameters;\n}\n\n/**\n * Module that enforces \"no-conflict\" compatibility mode settings. When this module is loaded,\n * it will throw an error if there are any uses of the `md-` prefix.\n */\nexport class NoConflictStyleCompatibilityMode {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n providers: [{\n provide: MATERIAL_COMPATIBILITY_MODE, useValue: true,\n }],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction NoConflictStyleCompatibilityMode_tsickle_Closure_declarations() {\n/** @type {?} */\nNoConflictStyleCompatibilityMode.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNoConflictStyleCompatibilityMode.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule, InjectionToken, Optional, Inject, isDevMode} from '@angular/core';\nimport {DOCUMENT} from '@angular/platform-browser';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {CompatibilityModule} from '../compatibility/compatibility';\n/**\n * Injection token that configures whether the Material sanity checks are enabled.\n */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<boolean>('md-sanity-checks');\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, compatibility mode, etc.\n * \n * This module should be imported to each top-level component module (e.g., MdTabsModule).\n */\nexport class MdCommonModule {\n/**\n * Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype).\n */\nprivate _hasDoneGlobalChecks = false;\n/**\n * @param {?} _document\n * @param {?} _sanityChecksEnabled\n */\nconstructor(\nprivate _document: any,\n _sanityChecksEnabled: boolean) {\n\n if (_sanityChecksEnabled && !this._hasDoneGlobalChecks && _document && isDevMode()) {\n this._checkDoctype();\n this._checkTheme();\n this._hasDoneGlobalChecks = true;\n }\n }\n/**\n * @return {?}\n */\nprivate _checkDoctype(): void {\n if (!this._document.doctype) {\n console.warn(\n 'Current document does not have a doctype. This may cause ' +\n 'some Angular Material components not to behave as expected.'\n );\n }\n }\n/**\n * @return {?}\n */\nprivate _checkTheme(): void {\n if (typeof getComputedStyle === 'function') {\n const /** @type {?} */ testElement = this._document.createElement('div');\n\n testElement.classList.add('mat-theme-loaded-marker');\n this._document.body.appendChild(testElement);\n\n if (getComputedStyle(testElement).display !== 'none') {\n console.warn(\n 'Could not find Angular Material core theme. Most Material ' +\n 'components may not work as expected. For more info refer ' +\n 'to the theming guide: https://material.angular.io/guide/theming'\n );\n }\n\n this._document.body.removeChild(testElement);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [CompatibilityModule, BidiModule],\n exports: [CompatibilityModule, BidiModule],\n providers: [{\n provide: MATERIAL_SANITY_CHECKS, useValue: true,\n }],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT, ] }, ]},\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MATERIAL_SANITY_CHECKS, ] }, ]},\n];\n}\n\nfunction MdCommonModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdCommonModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdCommonModule.ctorParameters;\n/**\n * Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype).\n * @type {?}\n */\nMdCommonModule.prototype._hasDoneGlobalChecks;\n/** @type {?} */\nMdCommonModule.prototype._document;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n disabled: boolean;\n}\n/**\n * Mixin to augment a directive with a `disabled` property.\n * @template T\n * @param {?} base\n * @return {?}\n */\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): Constructor<CanDisable> & T {\n return class extends base {\nprivate _disabled: boolean = false;\n/**\n * @return {?}\n */\nget disabled() { return this._disabled; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n/**\n * @param {...?} args\n */\nconstructor(...args: any[]) { super(...args); }\n };\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n disableRipple: boolean;\n}\n/**\n * Mixin to augment a directive with a `disableRipple` property.\n * @template T\n * @param {?} base\n * @return {?}\n */\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T)\n : Constructor<CanDisableRipple> & T {\n return class extends base {\nprivate _disableRipple: boolean = false;\n/**\n * Whether the ripple effect is disabled or not.\n * @return {?}\n */\nget disableRipple() { return this._disableRipple; }\n/**\n * @param {?} value\n * @return {?}\n */\nset disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n/**\n * @param {...?} args\n */\nconstructor(...args: any[]) { super(...args); }\n };\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {Subject} from 'rxjs/Subject';\n/**\n * InjectionToken for datepicker that can be used to override default locale code.\n */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE');\n/**\n * Provider for MAT_DATE_LOCALE injection token.\n */\nexport const MAT_DATE_LOCALE_PROVIDER = {provide: MAT_DATE_LOCALE, useExisting: LOCALE_ID};\n/**\n * Adapts type `D` to be usable as a date by cdk-based components that work with dates.\n * @abstract\n */\nexport abstract class DateAdapter<D> {\n/**\n * The locale to use for all dates.\n */\nprotected locale: any;\n/**\n * A stream that emits when the locale changes.\n * @return {?}\n */\nget localeChanges(): Observable<void> { return this._localeChanges; }\n protected _localeChanges= new Subject<void>();\n/**\n * Gets the year component of the given date.\n * @abstract\n * @param {?} date The date to extract the year from.\n * @return {?} The year component.\n */\ngetYear(date: D) {}\n/**\n * Gets the month component of the given date.\n * @abstract\n * @param {?} date The date to extract the month from.\n * @return {?} The month component (0-indexed, 0 = January).\n */\ngetMonth(date: D) {}\n/**\n * Gets the date of the month component of the given date.\n * @abstract\n * @param {?} date The date to extract the date of the month from.\n * @return {?} The month component (1-indexed, 1 = first of month).\n */\ngetDate(date: D) {}\n/**\n * Gets the day of the week component of the given date.\n * @abstract\n * @param {?} date The date to extract the day of the week from.\n * @return {?} The month component (0-indexed, 0 = Sunday).\n */\ngetDayOfWeek(date: D) {}\n/**\n * Gets a list of names for the months.\n * @abstract\n * @param {?} style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n * @return {?} An ordered list of all month names, starting with January.\n */\ngetMonthNames(style: 'long' | 'short' | 'narrow') {}\n/**\n * Gets a list of names for the dates of the month.\n * @abstract\n * @return {?} An ordered list of all date of the month names, starting with '1'.\n */\ngetDateNames() {}\n/**\n * Gets a list of names for the days of the week.\n * @abstract\n * @param {?} style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n * @return {?} An ordered list of all weekday names, starting with Sunday.\n */\ngetDayOfWeekNames(style: 'long' | 'short' | 'narrow') {}\n/**\n * Gets the name for the year of the given date.\n * @abstract\n * @param {?} date The date to get the year name for.\n * @return {?} The name of the given year (e.g. '2017').\n */\ngetYearName(date: D) {}\n/**\n * Gets the first day of the week.\n * @abstract\n * @return {?} The first day of the week (0-indexed, 0 = Sunday).\n */\ngetFirstDayOfWeek() {}\n/**\n * Gets the number of days in the month of the given date.\n * @abstract\n * @param {?} date The date whose month should be checked.\n * @return {?} The number of days in the month of the given date.\n */\ngetNumDaysInMonth(date: D) {}\n/**\n * Clones the given date.\n * @abstract\n * @param {?} date The date to clone\n * @return {?} A new date equal to the given date.\n */\nclone(date: D) {}\n/**\n * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n * month and date.\n * @abstract\n * @param {?} year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n * @param {?} month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n * @param {?} date The date of month of the date. Must be an integer 1 - length of the given month.\n * @return {?} The new date, or null if invalid.\n */\ncreateDate(year: number, month: number, date: number) {}\n/**\n * Gets today's date.\n * @abstract\n * @return {?} Today's date.\n */\ntoday() {}\n/**\n * Parses a date from a value.\n * @abstract\n * @param {?} value The value to parse.\n * @param {?} parseFormat The expected format of the value being parsed\n * (type is implementation-dependent).\n * @return {?} The parsed date.\n */\nparse(value: any, parseFormat: any) {}\n/**\n * Formats a date as a string.\n * @abstract\n * @param {?} date The value to format.\n * @param {?} displayFormat The format to use to display the date as a string.\n * @return {?} The formatted date string.\n */\nformat(date: D, displayFormat: any) {}\n/**\n * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n * calendar for each year and then finding the closest date in the new month. For example when\n * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n * @abstract\n * @param {?} date The date to add years to.\n * @param {?} years The number of years to add (may be negative).\n * @return {?} A new date equal to the given one with the specified number of years added.\n */\naddCalendarYears(date: D, years: number) {}\n/**\n * Adds the given number of months to the date. Months are counted as if flipping a page on the\n * calendar for each month and then finding the closest date in the new month. For example when\n * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n * @abstract\n * @param {?} date The date to add months to.\n * @param {?} months The number of months to add (may be negative).\n * @return {?} A new date equal to the given one with the specified number of months added.\n */\naddCalendarMonths(date: D, months: number) {}\n/**\n * Adds the given number of days to the date. Days are counted as if moving one cell on the\n * calendar for each day.\n * @abstract\n * @param {?} date The date to add days to.\n * @param {?} days The number of days to add (may be negative).\n * @return {?} A new date equal to the given one with the specified number of days added.\n */\naddCalendarDays(date: D, days: number) {}\n/**\n * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n * @abstract\n * @param {?} date The date to get the ISO date string for.\n * @return {?} The ISO date string date string.\n */\ntoIso8601(date: D) {}\n/**\n * Creates a date from an RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339).\n * @abstract\n * @param {?} iso8601String The ISO date string to create a date from\n * @return {?} The date created from the ISO date string.\n */\nfromIso8601(iso8601String: string) {}\n/**\n * Checks whether the given object is considered a date instance by this DateAdapter.\n * @abstract\n * @param {?} obj The object to check\n * @return {?} Whether the object is a date instance.\n */\nisDateInstance(obj: any) {}\n/**\n * Checks whether the given date is valid.\n * @abstract\n * @param {?} date The date to check.\n * @return {?} Whether the date is valid.\n */\nisValid(date: D) {}\n/**\n * Sets the locale used for all dates.\n * @param {?} locale The new locale.\n * @return {?}\n */\nsetLocale(locale: any) {\n this.locale = locale;\n this._localeChanges.next();\n }\n/**\n * Compares two dates.\n * @param {?} first The first date to compare.\n * @param {?} second The second date to compare.\n * @return {?} 0 if the dates are equal, a number less than 0 if the first date is earlier,\n * a number greater than 0 if the first date is later.\n */\ncompareDate(first: D, second: D): number {\n return this.getYear(first) - this.getYear(second) ||\n this.getMonth(first) - this.getMonth(second) ||\n this.getDate(first) - this.getDate(second);\n }\n/**\n * Checks if two dates are equal.\n * @param {?} first The first date to check.\n * @param {?} second The second date to check.\n * Null dates are considered equal to other null dates.\n * @return {?}\n */\nsameDate(first: D | null, second: D | null): boolean {\n return first && second ? !this.compareDate(first, second) : first == second;\n }\n/**\n * Clamp the given date between min and max dates.\n * @param {?} date The date to clamp.\n * @param {?=} min The minimum value to allow. If null or omitted no min is enforced.\n * @param {?=} max The maximum value to allow. If null or omitted no max is enforced.\n * @return {?} `min` if `date` is less than `min`, `max` if date is greater than `max`,\n * otherwise `date`.\n */\nclampDate(date: D, min?: D | null, max?: D | null): D {\n if (min && this.compareDate(date, min) < 0) {\n return min;\n }\n if (max && this.compareDate(date, max) > 0) {\n return max;\n }\n return date;\n }\n}\n\nfunction DateAdapter_tsickle_Closure_declarations() {\n/**\n * The locale to use for all dates.\n * @type {?}\n */\nDateAdapter.prototype.locale;\n/** @type {?} */\nDateAdapter.prototype._localeChanges;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\nimport {extendObject} from '../util/object-extend';\n/**\n * Whether the browser supports the Intl API.\n */\nconst SUPPORTS_INTL_API = typeof Intl != 'undefined';\n/**\n * The default month names to use if Intl API is not available.\n */\nconst DEFAULT_MONTH_NAMES = {\n 'long': [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n 'October', 'November', 'December'\n ],\n 'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n 'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n/**\n * The default date names to use if Intl API is not available.\n */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n/**\n * The default day of the week names to use if Intl API is not available.\n */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n 'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n 'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n 'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n/**\n * Creates an array and fills it with values.\n * @template T\n * @param {?} length\n * @param {?} valueFunction\n * @return {?}\n */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n const /** @type {?} */ valuesArray = Array(length);\n for (let /** @type {?} */ i = 0; i < length; i++) {\n valuesArray[i] = valueFunction(i);\n }\n return valuesArray;\n}\n/**\n * Adapts the native JS Date for use with cdk-based components that work with dates.\n */\nexport class NativeDateAdapter extends DateAdapter<Date> {\n/**\n * @param {?} matDateLocale\n */\nconstructor( matDateLocale: string) {\n super();\n super.setLocale(matDateLocale);\n }\n/**\n * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n * will produce `'8/13/1800'`.\n */\nuseUtcForDisplay = true;\n/**\n * @param {?} date\n * @return {?}\n */\ngetYear(date: Date): number {\n return date.getFullYear();\n }\n/**\n * @param {?} date\n * @return {?}\n */\ngetMonth(date: Date): number {\n return date.getMonth();\n }\n/**\n * @param {?} date\n * @return {?}\n */\ngetDate(date: Date): number {\n return date.getDate();\n }\n/**\n * @param {?} date\n * @return {?}\n */\ngetDayOfWeek(date: Date): number {\n return date.getDay();\n }\n/**\n * @param {?} style\n * @return {?}\n */\ngetMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n if (SUPPORTS_INTL_API) {\n let /** @type {?} */ dtf = new Intl.DateTimeFormat(this.locale, {month: style});\n return range(12, i => this._stripDirectionalityCharacters(dtf.format(new Date(2017, i, 1))));\n }\n return DEFAULT_MONTH_NAMES[style];\n }\n/**\n * @return {?}\n */\ngetDateNames(): string[] {\n if (SUPPORTS_INTL_API) {\n let /** @type {?} */ dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric'});\n return range(31, i => this._stripDirectionalityCharacters(\n dtf.format(new Date(2017, 0, i + 1))));\n }\n return DEFAULT_DATE_NAMES;\n }\n/**\n * @param {?} style\n * @return {?}\n */\ngetDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n if (SUPPORTS_INTL_API) {\n let /** @type {?} */ dtf = new Intl.DateTimeFormat(this.locale, {weekday: style});\n return range(7, i => this._stripDirectionalityCharacters(\n dtf.format(new Date(2017, 0, i + 1))));\n }\n return DEFAULT_DAY_OF_WEEK_NAMES[style];\n }\n/**\n * @param {?} date\n * @return {?}\n */\ngetYearName(date: Date): string {\n if (SUPPORTS_INTL_API) {\n let /** @type {?} */ dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric'});\n return this._stripDirectionalityCharacters(dtf.format(date));\n }\n return String(this.getYear(date));\n }\n/**\n * @return {?}\n */\ngetFirstDayOfWeek(): number {\n // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n return 0;\n }\n/**\n * @param {?} date\n * @return {?}\n */\ngetNumDaysInMonth(date: Date): number {\n return this.getDate(this._createDateWithOverflow(\n this.getYear(date), this.getMonth(date) + 1, 0));\n }\n/**\n * @param {?} date\n * @return {?}\n */\nclone(date: Date): Date {\n return this.createDate(this.getYear(date), this.getMonth(date), this.getDate(date));\n }\n/**\n * @param {?} year\n * @param {?} month\n * @param {?} date\n * @return {?}\n */\ncreateDate(year: number, month: number, date: number): Date {\n // Check for invalid month and date (except upper bound on date which we have to check after\n // creating the Date).\n if (month < 0 || month > 11) {\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n }\n\n if (date < 1) {\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n }\n\n let /** @type {?} */ result = this._createDateWithOverflow(year, month, date);\n\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n if (result.getMonth() != month) {\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n }\n\n return result;\n }\n/**\n * @return {?}\n */\ntoday(): Date {\n return new Date();\n }\n/**\n * @param {?} value\n * @return {?}\n */\nparse(value: any): Date | null {\n // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n // parameters.\n if (typeof value == 'number') {\n return new Date(value);\n }\n return value ? new Date(Date.parse(value)) : null;\n }\n/**\n * @param {?} date\n * @param {?} displayFormat\n * @return {?}\n */\nformat(date: Date, displayFormat: Object): string {\n if (!this.isValid(date)) {\n throw Error('NativeDateAdapter: Cannot format invalid date.');\n }\n if (SUPPORTS_INTL_API) {\n if (this.useUtcForDisplay) {\n date = new Date(Date.UTC(\n date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(),\n date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n displayFormat = extendObject({}, displayFormat, {timeZone: 'utc'});\n }\n let /** @type {?} */ dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n return this._stripDirectionalityCharacters(dtf.format(date));\n }\n return this._stripDirectionalityCharacters(date.toDateString());\n }\n/**\n * @param {?} date\n * @param {?} years\n * @return {?}\n */\naddCalendarYears(date: Date, years: number): Date {\n return this.addCalendarMonths(date, years * 12);\n }\n/**\n * @param {?} date\n * @param {?} months\n * @return {?}\n */\naddCalendarMonths(date: Date, months: number): Date {\n let /** @type {?} */ newDate = this._createDateWithOverflow(\n this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n // It's possible to wind up in the wrong month if the original month has more days than the new\n // month. In this case we want to go to the last day of the desired month.\n // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n // guarantee this.\n if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n }\n\n return newDate;\n }\n/**\n * @param {?} date\n * @param {?} days\n * @return {?}\n */\naddCalendarDays(date: Date, days: number): Date {\n return this._createDateWithOverflow(\n this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n }\n/**\n * @param {?} date\n * @return {?}\n */\ntoIso8601(date: Date): string {\n return [\n date.getUTCFullYear(),\n this._2digit(date.getUTCMonth() + 1),\n this._2digit(date.getUTCDate())\n ].join('-');\n }\n/**\n * @param {?} iso8601String\n * @return {?}\n */\nfromIso8601(iso8601String: string): Date | null {\n // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n // string is the right format first.\n if (ISO_8601_REGEX.test(iso8601String)) {\n let /** @type {?} */ d = new Date(iso8601String);\n if (this.isValid(d)) {\n return d;\n }\n }\n return null;\n }\n/**\n * @param {?} obj\n * @return {?}\n */\nisDateInstance(obj: any) {\n return obj instanceof Date;\n }\n/**\n * @param {?} date\n * @return {?}\n */\nisValid(date: Date) {\n return !isNaN(date.getTime());\n }\n/**\n * Creates a date but allows the month and date to overflow.\n * @param {?} year\n * @param {?} month\n * @param {?} date\n * @return {?}\n */\nprivate _createDateWithOverflow(year: number, month: number, date: number) {\n let /** @type {?} */ result = new Date(year, month, date);\n\n // We need to correct for the fact that JS native Date treats years in range [0, 99] as\n // abbreviations for 19xx.\n if (year >= 0 && year < 100) {\n result.setFullYear(this.getYear(result) - 1900);\n }\n return result;\n }\n/**\n * Pads a number to make it two digits.\n * @param {?} n The number to pad.\n * @return {?} The padded number.\n */\nprivate _2digit(n: number) {\n return ('00' + n).slice(-2);\n }\n/**\n * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n * other browsers do not. We remove them to make output consistent and because they interfere with\n * date parsing.\n * @param {?} str The string to strip direction characters from.\n * @return {?} The stripped string.\n */\nprivate _stripDirectionalityCharacters(str: string) {\n return str.replace(/[\\u200e\\u200f]/g, '');\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_LOCALE, ] }, ]},\n];\n}\n\nfunction NativeDateAdapter_tsickle_Closure_declarations() {\n/** @type {?} */\nNativeDateAdapter.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNativeDateAdapter.ctorParameters;\n/**\n * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n * will produce `'8/13/1800'`.\n * @type {?}\n */\nNativeDateAdapter.prototype.useUtcForDisplay;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {RippleRef, RippleState} from './ripple-ref';\n/**\n * Fade-in duration for the ripples. Can be modified with the speedFactor option.\n */\nexport const RIPPLE_FADE_IN_DURATION = 450;\n/**\n * Fade-out duration for the ripples in milliseconds. This can't be modified by the speedFactor.\n */\nexport const RIPPLE_FADE_OUT_DURATION = 400;\n\nexport type RippleConfig = {\n color?: string;\n centered?: boolean;\n radius?: number;\n speedFactor?: number;\n persistent?: boolean;\n};\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * \\@docs-private\n */\nexport class RippleRenderer {\n/**\n * Element where the ripples are being added to.\n */\nprivate _containerElement: HTMLElement;\n/**\n * Element which triggers the ripple elements on mouse events.\n */\nprivate _triggerElement: HTMLElement | null;\n/**\n * Whether the mouse is currently down or not.\n */\nprivate _isMousedown: boolean = false;\n/**\n * Events to be registered on the trigger element.\n */\nprivate _triggerEvents = new Map<string, any>();\n/**\n * Set of currently active ripple references.\n */\nprivate _activeRipples = new Set<RippleRef>();\n/**\n * Ripple config for all ripples created by events.\n */\nrippleConfig: RippleConfig = {};\n/**\n * Whether mouse ripples should be created or not.\n */\nrippleDisabled: boolean = false;\n/**\n * @param {?} elementRef\n * @param {?} _ngZone\n * @param {?} _ruler\n * @param {?} platform\n */\nconstructor(\n elementRef: ElementRef,\nprivate _ngZone: NgZone,\nprivate _ruler: ViewportRuler,\n platform: Platform) {\n // Only do anything if we're on the browser.\n if (platform.isBrowser) {\n this._containerElement = elementRef.nativeElement;\n\n // Specify events which need to be registered on the trigger.\n this._triggerEvents.set('mousedown', this.onMousedown.bind(this));\n this._triggerEvents.set('mouseup', this.onMouseup.bind(this));\n this._triggerEvents.set('mouseleave', this.onMouseLeave.bind(this));\n\n // By default use the host element as trigger element.\n this.setTriggerElement(this._containerElement);\n }\n }\n/**\n * Fades in a ripple at the given coordinates.\n * @param {?} pageX\n * @param {?} pageY\n * @param {?=} config\n * @return {?}\n */\nfadeInRipple(pageX: number, pageY: number, config: RippleConfig = {}): RippleRef {\n let /** @type {?} */ containerRect = this._containerElement.getBoundingClientRect();\n\n if (config.centered) {\n pageX = containerRect.left + containerRect.width / 2;\n pageY = containerRect.top + containerRect.height / 2;\n } else {\n // Subtract scroll values from the coordinates because calculations below\n // are always relative to the viewport rectangle.\n let /** @type {?} */ scrollPosition = this._ruler.getViewportScrollPosition();\n pageX -= scrollPosition.left;\n pageY -= scrollPosition.top;\n }\n\n let /** @type {?} */ radius = config.radius || distanceToFurthestCorner(pageX, pageY, containerRect);\n let /** @type {?} */ duration = RIPPLE_FADE_IN_DURATION * (1 / (config.speedFactor || 1));\n let /** @type {?} */ offsetX = pageX - containerRect.left;\n let /** @type {?} */ offsetY = pageY - containerRect.top;\n\n let /** @type {?} */ ripple = document.createElement('div');\n ripple.classList.add('mat-ripple-element');\n\n ripple.style.left = `${offsetX - radius}px`;\n ripple.style.top = `${offsetY - radius}px`;\n ripple.style.height = `${radius * 2}px`;\n ripple.style.width = `${radius * 2}px`;\n\n // If the color is not set, the default CSS color will be used.\n ripple.style.backgroundColor = config.color || null;\n ripple.style.transitionDuration = `${duration}ms`;\n\n this._containerElement.appendChild(ripple);\n\n // By default the browser does not recalculate the styles of dynamically created\n // ripple elements. This is critical because then the `scale` would not animate properly.\n enforceStyleRecalculation(ripple);\n\n ripple.style.transform = 'scale(1)';\n\n // Exposed reference to the ripple that will be returned.\n let /** @type {?} */ rippleRef = new RippleRef(this, ripple, config);\n\n rippleRef.state = RippleState.FADING_IN;\n\n // Add the ripple reference to the list of all active ripples.\n this._activeRipples.add(rippleRef);\n\n // Wait for the ripple element to be completely faded in.\n // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n this.runTimeoutOutsideZone(() => {\n rippleRef.state = RippleState.VISIBLE;\n\n if (!config.persistent && !this._isMousedown) {\n rippleRef.fadeOut();\n }\n }, duration);\n\n return rippleRef;\n }\n/**\n * Fades out a ripple reference.\n * @param {?} rippleRef\n * @return {?}\n */\nfadeOutRipple(rippleRef: RippleRef) {\n // For ripples that are not active anymore, don't re-un the fade-out animation.\n if (!this._activeRipples.delete(rippleRef)) {\n return;\n }\n\n let /** @type {?} */ rippleEl = rippleRef.element;\n\n rippleEl.style.transitionDuration = `${RIPPLE_FADE_OUT_DURATION}ms`;\n rippleEl.style.opacity = '0';\n\n rippleRef.state = RippleState.FADING_OUT;\n\n // Once the ripple faded out, the ripple can be safely removed from the DOM.\n this.runTimeoutOutsideZone(() => {\n rippleRef.state = RippleState.HIDDEN; /** @type {?} */((\n rippleEl.parentNode)).removeChild(rippleEl);\n }, RIPPLE_FADE_OUT_DURATION);\n }\n/**\n * Fades out all currently active ripples.\n * @return {?}\n */\nfadeOutAll() {\n this._activeRipples.forEach(ripple => ripple.fadeOut());\n }\n/**\n * Sets the trigger element and registers the mouse events.\n * @param {?} element\n * @return {?}\n */\nsetTriggerElement(element: HTMLElement | null) {\n // Remove all previously register event listeners from the trigger element.\n if (this._triggerElement) {\n this._triggerEvents.forEach((fn, type) => { /** @type {?} */((\n this._triggerElement)).removeEventListener(type, fn);\n });\n }\n\n if (element) {\n // If the element is not null, register all event listeners on the trigger element.\n this._ngZone.runOutsideAngular(() => {\n this._triggerEvents.forEach((fn, type) => element.addEventListener(type, fn));\n });\n }\n\n this._triggerElement = element;\n }\n/**\n * Listener being called on mousedown event.\n * @param {?} event\n * @return {?}\n */\nprivate onMousedown(event: MouseEvent) {\n if (!this.rippleDisabled) {\n this._isMousedown = true;\n this.fadeInRipple(event.pageX, event.pageY, this.rippleConfig);\n }\n }\n/**\n * Listener being called on mouseup event.\n * @return {?}\n */\nprivate onMouseup() {\n this._isMousedown = false;\n\n // Fade-out all ripples that are completely visible and not persistent.\n this._activeRipples.forEach(ripple => {\n if (!ripple.config.persistent && ripple.state === RippleState.VISIBLE) {\n ripple.fadeOut();\n }\n });\n }\n/**\n * Listener being called on mouseleave event.\n * @return {?}\n */\nprivate onMouseLeave() {\n if (this._isMousedown) {\n this.onMouseup();\n }\n }\n/**\n * Runs a timeout outside of the Angular zone to avoid triggering the change detection.\n * @param {?} fn\n * @param {?=} delay\n * @return {?}\n */\nprivate runTimeoutOutsideZone(fn: Function, delay = 0) {\n this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n }\n\n}\n\nfunction RippleRenderer_tsickle_Closure_declarations() {\n/**\n * Element where the ripples are being added to.\n * @type {?}\n */\nRippleRenderer.prototype._containerElement;\n/**\n * Element which triggers the ripple elements on mouse events.\n * @type {?}\n */\nRippleRenderer.prototype._triggerElement;\n/**\n * Whether the mouse is currently down or not.\n * @type {?}\n */\nRippleRenderer.prototype._isMousedown;\n/**\n * Events to be registered on the trigger element.\n * @type {?}\n */\nRippleRenderer.prototype._triggerEvents;\n/**\n * Set of currently active ripple references.\n * @type {?}\n */\nRippleRenderer.prototype._activeRipples;\n/**\n * Ripple config for all ripples created by events.\n * @type {?}\n */\nRippleRenderer.prototype.rippleConfig;\n/**\n * Whether mouse ripples should be created or not.\n * @type {?}\n */\nRippleRenderer.prototype.rippleDisabled;\n/** @type {?} */\nRippleRenderer.prototype._ngZone;\n/** @type {?} */\nRippleRenderer.prototype._ruler;\n}\n\n/**\n * @param {?} element\n * @return {?}\n */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n window.getComputedStyle(element).getPropertyValue('opacity');\n}\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n * @param {?} x\n * @param {?} y\n * @param {?} rect\n * @return {?}\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n const /** @type {?} */ distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n const /** @type {?} */ distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n return Math.sqrt(distX * distX + distY * distY);\n}\n","\n/**\n * Applies a CSS transform to an element, including browser-prefixed properties.\n * @param {?} element\n * @param {?} transformValue\n * @return {?}\n */\nexport function applyCssTransform(element: HTMLElement, transformValue: string) {\n // It's important to trim the result, because the browser will ignore the set operation\n // if the string contains only whitespace.\n let /** @type {?} */ value = transformValue.trim();\n\n element.style.transform = value;\n element.style.webkitTransform = value;\n}\n","\n/**\n * \\@docs-private\n * @return {?}\n */\nexport function getMdFormFieldPlaceholderConflictError(): Error {\n return Error('Placeholder attribute and child element were both specified.');\n}\n/**\n * \\@docs-private\n * @param {?} align\n * @return {?}\n */\nexport function getMdFormFieldDuplicatedHintError(align: string): Error {\n return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n/**\n * \\@docs-private\n * @return {?}\n */\nexport function getMdFormFieldMissingControlError(): Error {\n return Error('md-form-field must contain a MdFormFieldControl. ' +\n 'Did you forget to add mdInput to the native input or textarea element?');\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {DateAdapter} from '@angular/material/core';\n/**\n * Function that attempts to coerce a value to a date using a DateAdapter. Date instances, null,\n * and undefined will be passed through. Empty strings will be coerced to null. Valid ISO 8601\n * strings (https://www.ietf.org/rfc/rfc3339.txt) will be coerced to dates. All other values will\n * result in an error being thrown.\n * @throws Throws when the value cannot be coerced.\n * @template D\n * @param {?} adapter The date adapter to use for coercion\n * @param {?} value The value to coerce.\n * @return {?} A date object coerced from the value.\n */\nexport function coerceDateProperty<D>(adapter: DateAdapter<D>, value: any): D | null {\n if (typeof value === 'string') {\n if (value == '') {\n value = null;\n } else {\n value = adapter.fromIso8601(value) || value;\n }\n }\n if (value == null || adapter.isDateInstance(value)) {\n return value;\n }\n throw Error(`Datepicker: Value must be either a date object recognized by the DateAdapter or ` +\n `an ISO 8601 string. Instead got: ${value}`);\n}\n","\n/**\n * Converts values into strings. Falsy values become empty strings.\n * \\@docs-private\n * @param {?} value\n * @return {?}\n */\nexport function coerceToString(value: string | number): string {\n return `${value || ''}`;\n}\n/**\n * Converts a value that might be a string into a number.\n * \\@docs-private\n * @param {?} value\n * @return {?}\n */\nexport function coerceToNumber(value: string | number): number {\n return typeof value === 'string' ? parseInt(value, 10) : value;\n}\n","\n/**\n * \\@docs-private\n * @param {?} type\n * @return {?}\n */\nexport function getMdInputUnsupportedTypeError(type: string): Error {\n return Error(`Input type \"${type}\" isn't supported by mdInput.`);\n}\n","\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * \\@docs-private\n * @return {?}\n */\nexport function getMdSelectDynamicMultipleError(): Error {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * \\@docs-private\n * @return {?}\n */\nexport function getMdSelectNonArrayValueError(): Error {\n return Error('Cannot assign truthy non-array value to select in `multiple` mode.');\n}\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n * @return {?}\n */\nexport function getMdSelectNonFunctionValueError(): Error {\n return Error('Cannot assign a non-function value to `compareWith`.');\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {MdCommonModule} from '@angular/material/core';\nimport {\n MdProgressSpinner,\n MdSpinner,\n MdProgressSpinnerCssMatStyler,\n} from './progress-spinner';\nexport class MdProgressSpinnerModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdCommonModule],\n exports: [\n MdProgressSpinner,\n MdSpinner,\n MdCommonModule,\n MdProgressSpinnerCssMatStyler\n ],\n declarations: [\n MdProgressSpinner,\n MdSpinner,\n MdProgressSpinnerCssMatStyler\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdProgressSpinnerModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdProgressSpinnerModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdProgressSpinnerModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport {MdProgressSpinnerModule,PROGRESS_SPINNER_STROKE_WIDTH,ProgressSpinnerMode,MdProgressSpinnerCssMatStyler,MdProgressSpinnerBase,_MdProgressSpinnerMixinBase,MdProgressSpinner,MdSpinner,MatProgressSpinner,MatProgressSpinnerBase,MatProgressSpinnerCssMatStyler,MatProgressSpinnerModule,MatSpinner} from './public_api';\n","\n/**\n * \\@docs-private\n * @param {?} id\n * @return {?}\n */\nexport function getMdSortDuplicateMdSortableIdError(id: string): Error {\n return Error(`Cannot have two MdSortables with the same id (${id}).`);\n}\n/**\n * \\@docs-private\n * @return {?}\n */\nexport function getMdSortHeaderNotContainedWithinMdSortError(): Error {\n return Error(`MdSortHeader must be placed within a parent element with the MdSort directive.`);\n}\n/**\n * \\@docs-private\n * @return {?}\n */\nexport function getMdSortHeaderMissingIdError(): Error {\n return Error(`MdSortHeader must be provided with a unique id.`);\n}\n","\n/**\n * \\@docs-private\n */\nexport class AnimationCurves {\n static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\nfunction AnimationCurves_tsickle_Closure_declarations() {\n/** @type {?} */\nAnimationCurves.STANDARD_CURVE;\n/** @type {?} */\nAnimationCurves.DECELERATION_CURVE;\n/** @type {?} */\nAnimationCurves.ACCELERATION_CURVE;\n/** @type {?} */\nAnimationCurves.SHARP_CURVE;\n}\n\n/**\n * \\@docs-private\n */\nexport class AnimationDurations {\n static COMPLEX = '375ms';\n static ENTERING = '225ms';\n static EXITING = '195ms';\n}\n\nfunction AnimationDurations_tsickle_Closure_declarations() {\n/** @type {?} */\nAnimationDurations.COMPLEX;\n/** @type {?} */\nAnimationDurations.ENTERING;\n/** @type {?} */\nAnimationDurations.EXITING;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Constructor} from './constructor';\nimport {ElementRef, Renderer2} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n color: ThemePalette;\n}\n\n/** @docs-private */\nexport interface HasRenderer {\n _renderer: Renderer2;\n _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n/**\n * Mixin to augment a directive with a `color` property.\n * @template T\n * @param {?} base\n * @param {?=} defaultColor\n * @return {?}\n */\nexport function mixinColor<T extends Constructor<HasRenderer>>(base: T, defaultColor?: ThemePalette)\n : Constructor<CanColor> & T {\n return class extends base {\nprivate _color: ThemePalette;\n/**\n * @return {?}\n */\nget color(): ThemePalette { return this._color; }\n/**\n * @param {?} value\n * @return {?}\n */\nset color(value: ThemePalette) {\n const /** @type {?} */ colorPalette = value || defaultColor;\n\n if (colorPalette !== this._color) {\n if (this._color) {\n this._renderer.removeClass(this._elementRef.nativeElement, `mat-${this._color}`);\n }\n if (colorPalette) {\n this._renderer.addClass(this._elementRef.nativeElement, `mat-${colorPalette}`);\n }\n\n this._color = colorPalette;\n }\n }\n/**\n * @param {...?} args\n */\nconstructor(...args: any[]) {\n super(...args);\n\n // Set the default color that can be specified from the mixin.\n this.color = defaultColor;\n }\n };\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Constructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n/** @docs-private */\nexport interface HasTabIndex {\n tabIndex: number;\n}\n/**\n * Mixin to augment a directive with a `tabIndex` property.\n * @template T\n * @param {?} base\n * @param {?=} defaultTabIndex\n * @return {?}\n */\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(base: T, defaultTabIndex = 0)\n : Constructor<HasTabIndex> & T {\n return class extends base {\nprivate _tabIndex: number = defaultTabIndex;\n/**\n * @return {?}\n */\nget tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n/**\n * @param {?} value\n * @return {?}\n */\nset tabIndex(value: number) {\n // If the specified tabIndex value is null or undefined, fall back to the default value.\n this._tabIndex = value != null ? value : defaultTabIndex;\n }\n/**\n * @param {...?} args\n */\nconstructor(...args: any[]) {\n super(...args);\n }\n };\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Injectable, Optional, SkipSelf} from '@angular/core';\n\n\n// Users of the Dispatcher never need to see this type, but TypeScript requires it to be exported.\nexport type UniqueSelectionDispatcherListener = (id: string, name: string) => void;\n/**\n * Class to coordinate unique selection based on name.\n * Intended to be consumed as an Angular service.\n * This service is needed because native radio change events are only fired on the item currently\n * being selected, and we still need to uncheck the previous selection.\n * \n * This service does not *store* any IDs and names because they may change at any time, so it is\n * less error-prone if they are simply passed through when the events occur.\n */\nexport class UniqueSelectionDispatcher {\nprivate _listeners: UniqueSelectionDispatcherListener[] = [];\n/**\n * Notify other items that selection for the given name has been set.\n * @param {?} id ID of the item.\n * @param {?} name Name of the item.\n * @return {?}\n */\nnotify(id: string, name: string) {\n for (let /** @type {?} */ listener of this._listeners) {\n listener(id, name);\n }\n }\n/**\n * Listen for future changes to item selection.\n * @param {?} listener\n * @return {?} Function used to deregister listener\n * \n */\nlisten(listener: UniqueSelectionDispatcherListener): () => void {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter((registered: UniqueSelectionDispatcherListener) => {\n return listener !== registered;\n });\n };\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction UniqueSelectionDispatcher_tsickle_Closure_declarations() {\n/** @type {?} */\nUniqueSelectionDispatcher.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nUniqueSelectionDispatcher.ctorParameters;\n/** @type {?} */\nUniqueSelectionDispatcher.prototype._listeners;\n}\n\n/**\n * \\@docs-private\n * @param {?} parentDispatcher\n * @return {?}\n */\nexport function UNIQUE_SELECTION_DISPATCHER_PROVIDER_FACTORY(\n parentDispatcher: UniqueSelectionDispatcher) {\n return parentDispatcher || new UniqueSelectionDispatcher();\n}\n/**\n * \\@docs-private\n */\nexport const UNIQUE_SELECTION_DISPATCHER_PROVIDER = {\n // If there is already a dispatcher available, use that. Otherwise, provide a new one.\n provide: UniqueSelectionDispatcher,\n deps: [[new Optional(), new SkipSelf(), UniqueSelectionDispatcher]],\n useFactory: UNIQUE_SELECTION_DISPATCHER_PROVIDER_FACTORY\n};\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","\n/**\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\n * similar to Object.assign.\n * \n * @param {?} dest The object which will have properties copied to it.\n * @param {...?} sources The source objects from which properties will be copied.\n * @return {?}\n */\nexport function extendObject(dest: any, ...sources: any[]): any {\n if (dest == null) {\n throw TypeError('Cannot convert undefined or null to object');\n }\n\n for (let /** @type {?} */ source of sources) {\n if (source != null) {\n for (let /** @type {?} */ key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n }\n }\n\n return dest;\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {MdDateFormats} from './date-formats';\n\n\nexport const /** @type {?} */ MD_NATIVE_DATE_FORMATS: MdDateFormats = {\n parse: {\n dateInput: null,\n },\n display: {\n dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n monthYearLabel: {year: 'numeric', month: 'short'},\n dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n monthYearA11yLabel: {year: 'numeric', month: 'long'},\n }\n};\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE_PROVIDER} from './date-adapter';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MD_DATE_FORMATS} from './date-formats';\nimport {MD_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport {MAT_DATE_LOCALE,MAT_DATE_LOCALE_PROVIDER,DateAdapter} from './date-adapter';\nexport {MdDateFormats,MD_DATE_FORMATS} from './date-formats';\nexport {NativeDateAdapter} from './native-date-adapter';\nexport {MD_NATIVE_DATE_FORMATS} from './native-date-formats';\nexport class NativeDateModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n providers: [\n {provide: DateAdapter, useClass: NativeDateAdapter},\n MAT_DATE_LOCALE_PROVIDER\n ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction NativeDateModule_tsickle_Closure_declarations() {\n/** @type {?} */\nNativeDateModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNativeDateModule.ctorParameters;\n}\n\nexport class MdNativeDateModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [NativeDateModule],\n providers: [{provide: MD_DATE_FORMATS, useValue: MD_NATIVE_DATE_FORMATS}],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdNativeDateModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdNativeDateModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdNativeDateModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {InjectionToken} from '@angular/core';\nimport {FormControl, FormGroupDirective, NgForm} from '@angular/forms';\n/**\n * Injection token that can be used to specify the global error options.\n */\nexport const MD_ERROR_GLOBAL_OPTIONS = new InjectionToken<ErrorOptions>('md-error-global-options');\n\nexport type ErrorStateMatcher =\n (control: FormControl, form: FormGroupDirective | NgForm) => boolean;\n\nexport interface ErrorOptions {\n errorStateMatcher?: ErrorStateMatcher;\n}\n/**\n * Returns whether control is invalid and is either touched or is a part of a submitted form.\n * @param {?} control\n * @param {?} form\n * @return {?}\n */\nexport function defaultErrorStateMatcher(control: FormControl, form: FormGroupDirective | NgForm) {\n const /** @type {?} */ isSubmitted = form && form.submitted;\n return !!(control.invalid && (control.touched || isSubmitted));\n}\n/**\n * Returns whether control is invalid and is either dirty or is a part of a submitted form.\n * @param {?} control\n * @param {?} form\n * @return {?}\n */\nexport function showOnDirtyErrorStateMatcher(control: FormControl,\n form: FormGroupDirective | NgForm) {\n const /** @type {?} */ isSubmitted = form && form.submitted;\n return !!(control.invalid && (control.dirty || isSubmitted));\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Injectable, isDevMode} from '@angular/core';\nimport {HammerGestureConfig} from '@angular/platform-browser';\nimport {HammerStatic, HammerInstance, Recognizer, RecognizerStatic} from './gesture-annotations';\nexport class GestureConfig extends HammerGestureConfig {\nprivate _hammer: HammerStatic = typeof window !== 'undefined' ? ( /** @type {?} */((window as any))).Hammer : null;\n\n /* List of new event names to add to the gesture support list */\n events: string[] = this._hammer ? [\n 'longpress',\n 'slide',\n 'slidestart',\n 'slideend',\n 'slideright',\n 'slideleft'\n ] : [];\nconstructor() {\n super();\n\n if (!this._hammer && isDevMode()) {\n console.warn(\n 'Could not find HammerJS. Certain Angular Material ' +\n 'components may not work correctly.'\n );\n }\n }\n/**\n * Builds Hammer instance manually to add custom recognizers that match the Material Design spec.\n * \n * Our gesture names come from the Material Design gestures spec:\n * https://www.google.com/design/spec/patterns/gestures.html#gestures-touch-mechanics\n * \n * More information on default recognizers can be found in Hammer docs:\n * http://hammerjs.github.io/recognizer-pan/\n * http://hammerjs.github.io/recognizer-press/\n * \n * @param {?} element Element to which to assign the new HammerJS gestures.\n * @return {?} Newly-created HammerJS instance.\n */\nbuildHammer(element: HTMLElement): HammerInstance {\n const /** @type {?} */ mc = new this._hammer(element);\n\n // Default Hammer Recognizers.\n let /** @type {?} */ pan = new this._hammer.Pan();\n let /** @type {?} */ swipe = new this._hammer.Swipe();\n let /** @type {?} */ press = new this._hammer.Press();\n\n // Notice that a HammerJS recognizer can only depend on one other recognizer once.\n // Otherwise the previous `recognizeWith` will be dropped.\n // TODO: Confirm threshold numbers with Material Design UX Team\n let /** @type {?} */ slide = this._createRecognizer(pan, {event: 'slide', threshold: 0}, swipe);\n let /** @type {?} */ longpress = this._createRecognizer(press, {event: 'longpress', time: 500});\n\n // Overwrite the default `pan` event to use the swipe event.\n pan.recognizeWith(swipe);\n\n // Add customized gestures to Hammer manager\n mc.add([swipe, press, pan, slide, longpress]);\n\n return /** @type {?} */(( mc as HammerInstance));\n }\n/**\n * Creates a new recognizer, without affecting the default recognizers of HammerJS\n * @param {?} base\n * @param {?} options\n * @param {...?} inheritances\n * @return {?}\n */\nprivate _createRecognizer(base: Recognizer, options: any, ...inheritances: Recognizer[]) {\n let /** @type {?} */ recognizer = new ( /** @type {?} */((base.constructor as RecognizerStatic)))(options);\n\n inheritances.push(base);\n inheritances.forEach(item => recognizer.recognizeWith(item));\n\n return recognizer;\n }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction GestureConfig_tsickle_Closure_declarations() {\n/** @type {?} */\nGestureConfig.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nGestureConfig.ctorParameters;\n/** @type {?} */\nGestureConfig.prototype._hammer;\n/** @type {?} */\nGestureConfig.prototype.events;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {RippleConfig, RippleRenderer} from './ripple-renderer';\nexport type RippleState = number;\nexport let RippleState: any = {};\nRippleState.FADING_IN = 0;\nRippleState.VISIBLE = 1;\nRippleState.FADING_OUT = 2;\nRippleState.HIDDEN = 3;\nRippleState[RippleState.FADING_IN] = \"FADING_IN\";\nRippleState[RippleState.VISIBLE] = \"VISIBLE\";\nRippleState[RippleState.FADING_OUT] = \"FADING_OUT\";\nRippleState[RippleState.HIDDEN] = \"HIDDEN\";\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n/**\n * Current state of the ripple reference.\n */\nstate: RippleState = RippleState.HIDDEN;\n/**\n * @param {?} _renderer\n * @param {?} element\n * @param {?} config\n */\nconstructor(\nprivate _renderer: RippleRenderer,\npublic element: HTMLElement,\npublic config: RippleConfig) {\n }\n/**\n * Fades out the ripple element.\n * @return {?}\n */\nfadeOut() {\n this._renderer.fadeOutRipple(this);\n }\n}\n\nfunction RippleRef_tsickle_Closure_declarations() {\n/**\n * Current state of the ripple reference.\n * @type {?}\n */\nRippleRef.prototype.state;\n/** @type {?} */\nRippleRef.prototype._renderer;\n/** @type {?} */\nRippleRef.prototype.element;\n/** @type {?} */\nRippleRef.prototype.config;\n}\n\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {\n Directive,\n ElementRef,\n Input,\n Inject,\n NgZone,\n OnChanges,\n SimpleChanges,\n OnDestroy,\n InjectionToken,\n Optional,\n} from '@angular/core';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {Platform} from '@angular/cdk/platform';\nimport {RippleConfig, RippleRenderer} from './ripple-renderer';\nimport {RippleRef} from './ripple-ref';\n\nexport interface RippleGlobalOptions {\n disabled?: boolean;\n baseSpeedFactor?: number;\n}\n/**\n * Injection token that can be used to specify the global ripple options.\n */\nexport const MD_RIPPLE_GLOBAL_OPTIONS =\n new InjectionToken<RippleGlobalOptions>('md-ripple-global-options');\nexport class MdRipple implements OnChanges, OnDestroy {\n\n /**\n * The element that triggers the ripple when click events are received. Defaults to the\n * directive's host element.\n */\n // Prevent TS metadata emit from referencing HTMLElement in ripple.js\n // Otherwise running this code in a Node environment (e.g Universal) will not work.\n trigger: HTMLElement|HTMLElement;\n/**\n * Whether the ripple always originates from the center of the host element's bounds, rather\n * than originating from the location of the click event.\n */\ncentered: boolean;\n/**\n * Whether click events will not trigger the ripple. Ripples can be still launched manually\n * by using the `launch()` method.\n */\ndisabled: boolean;\n/**\n * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n * will be the distance from the center of the ripple to the furthest corner of the host element's\n * bounding rectangle.\n */\nradius: number = 0;\n/**\n * If set, the normal duration of ripple animations is divided by this value. For example,\n * setting it to 0.5 will cause the animations to take twice as long.\n * A changed speedFactor will not modify the fade-out duration of the ripples.\n */\nspeedFactor: number = 1;\n/**\n * Custom color for ripples.\n */\ncolor: string;\n/**\n * Whether foreground ripples should be visible outside the component's bounds.\n */\nunbounded: boolean;\n/**\n * @return {?}\n */\nget _matRippleTrigger() { return this.trigger; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matRippleTrigger(v) { this.trigger = v; }\n/**\n * @return {?}\n */\nget _matRippleCentered() { return this.centered; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matRippleCentered(v) { this.centered = v; }\n/**\n * @return {?}\n */\nget _matRippleDisabled() { return this.disabled; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matRippleDisabled(v) { this.disabled = v; }\n/**\n * @return {?}\n */\nget _matRippleRadius() { return this.radius; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matRippleRadius(v) { this.radius = v; }\n/**\n * @return {?}\n */\nget _matRippleSpeedFactor() { return this.speedFactor; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matRippleSpeedFactor(v) { this.speedFactor = v; }\n/**\n * @return {?}\n */\nget _matRippleColor() { return this.color; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matRippleColor(v) { this.color = v; }\n/**\n * @return {?}\n */\nget _matRippleUnbounded() { return this.unbounded; }\n/**\n * @param {?} v\n * @return {?}\n */\nset _matRippleUnbounded(v) { this.unbounded = v; }\n/**\n * Renderer for the ripple DOM manipulations.\n */\nprivate _rippleRenderer: RippleRenderer;\n/**\n * Options that are set globally for all ripples.\n */\nprivate _globalOptions: RippleGlobalOptions;\n/**\n * @param {?} elementRef\n * @param {?} ngZone\n * @param {?} ruler\n * @param {?} platform\n * @param {?} globalOptions\n */\nconstructor(\n elementRef: ElementRef,\n ngZone: NgZone,\n ruler: ViewportRuler,\n platform: Platform,\n globalOptions: RippleGlobalOptions\n ) {\n this._rippleRenderer = new RippleRenderer(elementRef, ngZone, ruler, platform);\n this._globalOptions = globalOptions ? globalOptions : {};\n\n this._updateRippleRenderer();\n }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges) {\n if ((changes['trigger'] || changes['_matRippleTrigger']) && this.trigger) {\n this._rippleRenderer.setTriggerElement(this.trigger);\n }\n\n this._updateRippleRenderer();\n }\n/**\n * @return {?}\n */\nngOnDestroy() {\n // Set the trigger element to null to cleanup all listeners.\n this._rippleRenderer.setTriggerElement(null);\n }\n/**\n * Launches a manual ripple at the specified position.\n * @param {?} pageX\n * @param {?} pageY\n * @param {?=} config\n * @return {?}\n */\nlaunch(pageX: number, pageY: number, config = this.rippleConfig): RippleRef {\n return this._rippleRenderer.fadeInRipple(pageX, pageY, config);\n }\n/**\n * Fades out all currently showing ripple elements.\n * @return {?}\n */\nfadeOutAll() {\n this._rippleRenderer.fadeOutAll();\n }\n/**\n * Ripple configuration from the directive's input values.\n * @return {?}\n */\nget rippleConfig(): RippleConfig {\n return {\n centered: this.centered,\n speedFactor: this.speedFactor * (this._globalOptions.baseSpeedFactor || 1),\n radius: this.radius,\n color: this.color\n };\n }\n/**\n * Updates the ripple renderer with the latest ripple configuration.\n * @return {?}\n */\n_updateRippleRenderer() {\n this._rippleRenderer.rippleDisabled = this._globalOptions.disabled || this.disabled;\n this._rippleRenderer.rippleConfig = this.rippleConfig;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[md-ripple], [mat-ripple], [mdRipple], [matRipple]',\n exportAs: 'mdRipple, matRipple',\n host: {\n 'class': 'mat-ripple',\n '[class.mat-ripple-unbounded]': 'unbounded'\n }\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: NgZone, },\n{type: ViewportRuler, },\n{type: Platform, },\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MD_RIPPLE_GLOBAL_OPTIONS, ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'trigger': [{ type: Input, args: ['mdRippleTrigger', ] },],\n'centered': [{ type: Input, args: ['mdRippleCentered', ] },],\n'disabled': [{ type: Input, args: ['mdRippleDisabled', ] },],\n'radius': [{ type: Input, args: ['mdRippleRadius', ] },],\n'speedFactor': [{ type: Input, args: ['mdRippleSpeedFactor', ] },],\n'color': [{ type: Input, args: ['mdRippleColor', ] },],\n'unbounded': [{ type: Input, args: ['mdRippleUnbounded', ] },],\n'_matRippleTrigger': [{ type: Input, args: ['matRippleTrigger', ] },],\n'_matRippleCentered': [{ type: Input, args: ['matRippleCentered', ] },],\n'_matRippleDisabled': [{ type: Input, args: ['matRippleDisabled', ] },],\n'_matRippleRadius': [{ type: Input, args: ['matRippleRadius', ] },],\n'_matRippleSpeedFactor': [{ type: Input, args: ['matRippleSpeedFactor', ] },],\n'_matRippleColor': [{ type: Input, args: ['matRippleColor', ] },],\n'_matRippleUnbounded': [{ type: Input, args: ['matRippleUnbounded', ] },],\n};\n}\n\nfunction MdRipple_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRipple.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdRipple.ctorParameters;\n/** @type {?} */\nMdRipple.propDecorators;\n/** @type {?} */\nMdRipple.prototype.trigger;\n/**\n * Whether the ripple always originates from the center of the host element's bounds, rather\n * than originating from the location of the click event.\n * @type {?}\n */\nMdRipple.prototype.centered;\n/**\n * Whether click events will not trigger the ripple. Ripples can be still launched manually\n * by using the `launch()` method.\n * @type {?}\n */\nMdRipple.prototype.disabled;\n/**\n * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n * will be the distance from the center of the ripple to the furthest corner of the host element's\n * bounding rectangle.\n * @type {?}\n */\nMdRipple.prototype.radius;\n/**\n * If set, the normal duration of ripple animations is divided by this value. For example,\n * setting it to 0.5 will cause the animations to take twice as long.\n * A changed speedFactor will not modify the fade-out duration of the ripples.\n * @type {?}\n */\nMdRipple.prototype.speedFactor;\n/**\n * Custom color for ripples.\n * @type {?}\n */\nMdRipple.prototype.color;\n/**\n * Whether foreground ripples should be visible outside the component's bounds.\n * @type {?}\n */\nMdRipple.prototype.unbounded;\n/**\n * Renderer for the ripple DOM manipulations.\n * @type {?}\n */\nMdRipple.prototype._rippleRenderer;\n/**\n * Options that are set globally for all ripples.\n * @type {?}\n */\nMdRipple.prototype._globalOptions;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {NgModule} from '@angular/core';\nimport {ScrollDispatchModule, VIEWPORT_RULER_PROVIDER} from '@angular/cdk/scrolling';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MdCommonModule} from '../common-behaviors/common-module';\nimport {MdRipple} from './ripple';\n\nexport {MdRipple, RippleGlobalOptions, MD_RIPPLE_GLOBAL_OPTIONS} from './ripple';\nexport {RippleRef, RippleState} from './ripple-ref';\nexport {RippleConfig, RIPPLE_FADE_IN_DURATION, RIPPLE_FADE_OUT_DURATION} from './ripple-renderer';\nexport class MdRippleModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n imports: [MdCommonModule, PlatformModule, ScrollDispatchModule],\n exports: [MdRipple, MdCommonModule],\n declarations: [MdRipple],\n providers: [VIEWPORT_RULER_PROVIDER],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction MdRippleModule_tsickle_Closure_declarations() {\n/** @type {?} */\nMdRippleModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdRippleModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. 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\nimport {Component, ViewEncapsulation, Input, ChangeDetectionStrategy} from '@angular/core';\n\nexport type MdPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n * \n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with <md-checkbox> and should *not* be used if the user would directly interact\n * with the checkbox. The pseudo-checkbox should only be used as an implementation detail of\n * more complex components that appropriately handle selected / checked state.\n * \\@docs-private\n */\nexport class MdPseudoCheckbox {\n/**\n * Display state of the checkbox.\n */\nstate: MdPseudoCheckboxState = 'unchecked';\n/**\n * Whether the checkbox is disabled.\n */\ndisabled: boolean = false;\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n moduleId: module.id,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'md-pseudo-checkbox, mat-pseudo-checkbox',\n styleUrls: ['pseudo-checkbox.css'],\n template: '',\n host: {\n 'class': 'mat-pseudo-checkbox',\n '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n },\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'state': [{ type: Input },],\n'disabled': [{ type: Input },],\n};\n}\n\nfunction MdPseudoCheckbox_tsickle_Closure_declarations() {\n/** @type {?} */\nMdPseudoCheckbox.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nMdPseudoCheckbox.ctorParameters;\n/** @type {?} */\nMdPseudoCheckbox.propDecorators;\n/**\n * Display state of the checkbox.\n * @type {?}\n */\nMdPseudoCheckbox.prototype.state;\n/**\n * Whether the checkbox is disabled.\n * @type {?}\n */\nMdPseudoCheckbox.prototype.disabled;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n"],"names":["MdTabNav","prototype","ngOnDestroy","this","_onDestroy","next","inputs","template","styles","host","class","type","NgZone","ChangeDetectorRef","propDecorators","_tabLinks","ContentChildren","args","forwardRef","MdTabLink","descendants","backgroundColor","Input","MdTabLinkBase","_MdTabLinkMixinBase","mixinDisabled","_mdTabNavBar","_elementRef","ngZone","ruler","platform","globalOptions","_this","_super","call","_isActive","_disableRipple","_tabLinkRipple","MdRipple","Object","defineProperty","get","set","value","updateActiveLink","enumerable","configurable","MdToolbarRow","decorators","Directive","selector","MdToolbarBase","_renderer","MdToolbar","renderer","elementRef","tslib_1.__extends","_MdToolbarMixinBase","Component","role","Renderer2","ElementRef","MdToolbarModule","imports","MdCommonModule","declarations","VERSION","_angular_core","Version","state","style","height","visibility","providers","provide","MdStepper","useExisting","MdVerticalStepper","viewProviders","MATERIAL_COMPATIBILITY_MODE","useValue","encapsulation","ViewEncapsulation","None","preserveWhitespaces","_MdStepperPrevious","CdkStepperPrevious","MdStepperNext","apply","arguments","_MdStepperNext","(click)","CdkStepper","ctorParameters","MdStepperPrevious","_MdTable","CdkTable","MdTable","CDK_TABLE_TEMPLATE","_MdCellDef","CdkCellDef","MdCellDef","MdHeaderCellDef","MdColumnDef","name","CdkColumnDef","_matColumnDefName","MdHeaderCell","columnDef","MdCell","addClass","nativeElement","cssClassFriendlyName","_MdHeaderRowDef","CdkHeaderRowDef","_MdCdkRowDef","CdkRowDef","_MdHeaderRow","CdkHeaderRow","_MdRow","CdkRow","MdHeaderRowDef","MatHeaderRowDef","MdRowDef","MatRowDef","MdHeaderRow","changeDetection","ChangeDetectionStrategy","OnPush","MdInkBar","_ngZone","alignToElement","element","show","requestAnimationFrame","runOutsideAngular","_setStyles","setStyle","hide","left","offsetLeft","width","offsetWidth","MdTabLabel","templateRef","viewContainerRef","_MdTabLabelBaseClass","ViewContainerRef","MdTabBase","_MdTabMixinBase","MdTab","_viewContainerRef","_contentPortal","ngOnChanges","changes","hasOwnProperty","_labelChange","_disableChange","complete","ngOnInit","TemplatePortal","_content","exportAs","textLabel","MdTabBody","_dir","onCentering","EventEmitter","onCentered","position","_getLayoutDirection","origin","dir","_position","_origin","_isCenterPosition","_portalHost","hasAttached","attach","detach","e","toState","emit","animations","transform","transition","animate","Directionality","Optional","ViewChild","PortalHostDirective","nextId","MdTabGroupBase","MdTabGroup","_changeDetectorRef","_tabsSubscription","Subscription","EMPTY","_dynamicHeight","headerPosition","_indexToSelect","_backgroundColor","removeClass","ngAfterContentChecked","indexToSelect","Math","min","_tabs","length","max","Promise","resolve","then","selectedIndexChange","_selectedIndex","tab","markForCheck","ngAfterContentInit","unsubscribe","_tabLabelSubscription","ngAfterViewChecked","_isInitialized","_focusChanged","index","focusChange","_createChangeEvent","event","toArray","merge","map","concat","subscribe","_getTabLabelId","i","_groupId","_getTabContentId","_setTabBodyWrapperHeight","tabHeight","_tabBodyWrapperHeight","_tabBodyWrapper","offsetHeight","clientHeight","dynamicHeight","_dynamicHeightDeprecated","Output","selectChange","MdTabLabelWrapperBase","_MdTabLabelWrapperMixinBase","MdTabLabelWrapper","focus","getOffsetWidth","MdTabHeaderBase","MdTabHeader","_scrollDistance","_selectedIndexChanged","_realignInkBar","_disableScrollAfter","selectFocusedIndex","indexFocused","_focusIndex","_tabLabelCount","_labelWrappers","_updatePagination","_scrollToLabel","_checkScrollingControls","_alignInkBarToSelectedTab","_scrollDistanceChanged","_updateTabScrollPosition","_handleKeydown","keyCode","RIGHT_ARROW","_focusNextTab","LEFT_ARROW","_focusPreviousTab","dirChange","change","of","resize","window","auditTime","fromEvent","startWith","_checkPaginationEnabled","_isValidIndex","disabled","_setTabFocus","tabIndex","_showPaginationControls","containerEl","_tabListContainer","scrollLeft","focusIndex","_moveFocus","scrollDistance","translateX","_tabList","labelBeforePos","labelAfterPos","viewLength","selectedLabel","getOffsetLeft","beforeVisiblePos","afterVisiblePos","isEnabled","selectedLabelWrapper","selectedIndex","_inkBar","MdTabNavBase","Subject","observableOf","coerceBooleanProperty","_setLinkDisableRipple","_activeLinkChanged","_activeLinkElement","MD_SNACK_BAR_DATA","InjectionToken","MdSnackBarConfig","politeness","announcementMessage","duration","direction","data","horizontalPosition","verticalPosition","MdSnackBarRef","containerInstance","_overlayRef","_onAction","onAction","dismiss","_onExit","_finishDismiss","_afterClosed","closed","exit","clearTimeout","_durationTimeoutId","closeWithAction","_dismissAfter","_open","_afterOpened","dispose","afterDismissed","afterOpened","asObservable","MdSnackBarContainer","attachComponentPortal","portal","snackBarConfig","extraClasses","_i","_a","cssClass","_completeExit","startsWith","onEnter_1","_onEnter","run","enter","first","onMicrotaskEmpty","BasePortalHost","[@state]","(@state.done)","trigger","HIDE_ANIMATION","SHOW_ANIMATION","SimpleSnackBar","snackBarRef","action","MdSnackBar","_overlay","_live","_injector","_parentSnackBar","parent","_openedSnackBarRef","_snackBarRefAtThisLevel","openFromComponent","component","config","_config","_applyConfigDefaults","_attach","open","message","_attachSnackBarContainer","overlayRef","containerPortal","ComponentPortal","containerRef","instance","_createOverlay","container","undefined","injector","contentRef","state$$1","OverlayConfig","isRtl","isLeft","isRight","positionStrategy","top","bottom","_createInjector","userInjector","injectionTokens","WeakMap","Injectable","Overlay","LiveAnnouncer","Injector","SkipSelf","MdSnackBarModule","MdSort","v","disableClear","sortable","id","getMdSortHeaderMissingIdError","sortables","has","getMdSortDuplicateMdSortableIdError","delete","active","start","getNextSortDirection","sortChange","sortDirectionCycle","getSortDirectionCycle","nextDirectionIndex","indexOf","_matSortStart","_matSortChange","MdSortHeaderIntl","_sort","_rerenderSubscription","_intl","MdSortHeader","_disableClear","_cdkColumnDef","register","deregister","_isSorted","[class.mat-sort-header-sorted]","SORT_ANIMATION_TRANSITION","_MdStepLabel","CdkStepLabel","MdStepLabel","MdStepHeader","_active","_stringLabel","label","selected","_MdStep","CdkStep","_MdStepper","MdStep","mdStepper","errorStateMatcher","control","form","originalErrorState","_originalErrorStateMatcher","errorOptions","defaultErrorStateMatcher","Inject","MD_ERROR_GLOBAL_OPTIONS","stepLabel","ContentChild","_stepHeader","ViewChildren","read","MdHorizontalStepper","MdDrawerContainer","_validateDrawers","_end","throwMdDuplicatedDrawerError","_start","drawer","_left","_onBackdropClicked","backdropClick","_closeModalDrawer","filter","disableClose","mode","forEach","close","_isShowingBackdrop","_isDrawerOpen","_getDrawerEffectiveWidth","_width","_updateStyles","marginLeft","marginRight","_right","leftWidth","rightWidth","_styles","MdSidenav","MdDrawer","[@transform]","(@transform.start)","(@transform.done)","(keydown)","[class.mat-drawer-over]","[class.mat-drawer-side]","nextUniqueId","MD_SLIDE_TOGGLE_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","MdSlideToggle","multi","MdSlideToggleChange","MdSlideToggleBase","_MdSlideToggleMixinBase","mixinTabIndex","mixinColor","mixinDisableRipple","_platform","_focusMonitor","_required","ariaLabelledby","_checked","_uniqueId","focusOrigin","_onInputFocusChange","_slideRenderer","dragging","registerOnChange","fn","focusVia","_inputElement","toggle","checked","_focusRipple","fadeOut","_ripple","launch","persistent","centered","_emitChangeEvent","source","_onDragStart","startThumbDrag","_onDrag","dragPercentage","_previousChecked","setTimeout","stopThumbDrag","_onLabelTextChange","[id]","[class.mat-checked]","[class.mat-disabled]","[class.mat-slide-toggle-label-before]","required","SlideToggleRenderer","updateThumbPosition","distance","dragX","_thumbBarWidth","applyCssTransform","_thumbEl","_getDragPercentage","percentage","MD_SLIDER_VALUE_ACCESSOR","MdSlider","MdSliderChange","MdSliderBase","_invert","_max","_min","_value","input","_percent","_isSliding","_tickIntervalPercent","_sliderDimensions","_controlValueAccessorChangeFn","_calculatePercentage","_roundLabelTo","_step","toString","split","pop","_thumbLabel","coerceNumberProperty","tickInterval","_vertical","toFixed","_clamp","vertical","invert","percent","_isMinValue","thumbLabel","axis","_invertMouseCoords","_direction","backgroundSize","sign","tickSize","rotate","_thumbGap","_invertAxis","monitor","_dirChangeSubscription","stopMonitoring","_getSliderDimensions","_updateTickIntervalPercent","_onClick","oldValue","_focusHostElement","_onSlide","_onSlideStart","_updateValueFromPosition","x","center","y","_emitInputEvent","preventDefault","_onSlideEnd","_valueOnSlideStart","_onFocus","_onKeydown","PAGE_UP","_increment","END","HOME","DOWN_ARROW","_onKeyup","numSteps","step","closestValue","pixelsPerStep","trackSize","stepsPerTick","ceil","pixelsPerTick","_calculateValue","_sliderWrapper","getBoundingClientRect","writeValue","MdPaginator","MdPaginatorIntl","pageIndex","MdPaginatorModule","MdProgressBar","_bufferValue","clamp","_bufferTransform","bufferValue","aria-valuemin","aria-valuemax","[attr.aria-valuenow]","[attr.mode]","[class.mat-primary]","[class.mat-accent]","[class.mat-warn]","MdProgressBarModule","CommonModule","DEGREE_IN_RADIANS","PI","MAX_ANGLE","HAS_RAF","PROGRESS_SPINNER_STROKE_WIDTH","MdProgressSpinnerCssMatStyler","MdProgressSpinnerBase","_MdProgressSpinnerMixinBase","_lastAnimationId","_mode","MdProgressSpinner","clearInterval","_interdeterminateInterval","interval","_cleanupIndeterminateAnimation","newValue","_animateCircle","_startIndeterminateAnimation","rotation","startTime","Date","now","changeInValue","animateTo","animateFrom","_renderArc","animation_1","elapsedTime","ease","end","materialEase","rotationStartPoint","temp","interdeterminateInterval","setInterval","currentValue","_path","svgArc","getSvgArc","strokeWidth","setAttribute","MdSpinner","MD_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","MdRadioGroup","MdRadioChange","MdRadioGroupBase","_changeDetector","onTouched","labelPosition","_labelPosition","_markRadiosForCheck","_updateSelectedRadioFromValue","_checkSelectedRadioButton","_touch","_radios","radio","isAlreadySelected","_selected","_markForCheck","registerOnTouched","_MdRadioGroupMixinBase","MdRadioButton","align","MdRadioButtonBase","_MdRadioButtonMixinBase","radioGroup","_removeUniqueSelectionListener","_radioDispatcher","listen","ngAfterViewInit","_onInputClick","stopPropagation","_onInputChange","groupValueChanged","MdDrawerToggleResult","animationFinished","_focusTrapFactory","_doc","onAlignChanged","onOpen","_elementFocusedBeforeDrawerWasOpened","activeElement","isFocusTrapEnabled","_focusTrap","focusInitialElementWhenReady","_disableClose","opened","_restoreFocus","activeEl","blur","_opened","isOpen","_animationState","_enableAnimations","enabled","handleKeydown","_onAnimationEnd","fromState","onClose","_isAnimating","_currentTogglePromise","[attr.align]","[class.mat-drawer-end]","FocusTrapFactory","DOCUMENT","_drawers","_watchDrawerToggle","_watchDrawerPosition","takeUntil","_animationStarted","_setContainerClass","onPositionChanged","_element","valueChange","_control","valueAccessor","_placeholder","MdSelect","getMdSelectDynamicMultipleError","_multiple","_compareWith","getMdSelectNonFunctionValueError","_initializeSelection","_setOptionDisableRipple","_selectionModel","SelectionModel","multiple","_resetOptions","_dropSubscriptions","_changeSubscription","panelOpen","_calculateOverlayPosition","_placeholderState","_floatPlaceholderState","_panelOpen","isEmpty","_onTouched","isDisabled","selectedOptions","option","viewValue","_isRtl","reverse","join","_setTriggerWidth","_triggerWidth","isBrowser","_getTriggerRect","_handleClosedKeydown","UP_ARROW","_handleArrowKey","_handlePanelKeydown","_keyManager","setFirstItemActive","_onPanelDone","_focusCorrectOption","_onBlur","_onAttached","_calculateOverlayOffsetX","_setScrollTop","_hasValue","hasValue","_isErrorState","isInvalid","invalid","isTouched","touched","isSubmitted","_parentFormGroup","submitted","_parentForm","overlayDir","overlayElement","querySelector","scrollTop","_scrollTop","_setSelectionByValue","isArray","Array","getMdSelectNonArrayValueError","_clearSelection","_selectValue","isUserInput","_sortValues","correspondingOption","options","find","error","isDevMode","console","warn","skip","clear","deselect","_tabSubscription","tabOut","_listenToOptions","_setOptionIds","_onSelect","wasSelected","isSelected","_propagateChanges","fallbackValue","valueToEmit","_onChange","MdSelectChange","_optionIds","disableRipple","_setValueWidth","_selectedValueWidth","setActiveItem","_getOptionIndex","reduce","result","current","scrollContainerHeight","items","maxScroll","panelHeight","_offsetY","_calculateOverlayOffsetY","selectedOptionOffset","scrollBuffer","_checkOverlayWithinViewport","_calculateOverlayScroll","clampValue","SELECT_ITEM_HEIGHT","_getPlaceholderAnimationState","floatPlaceholder","paddingWidth","SELECT_MULTIPLE_PANEL_PADDING_X","offsetX","group","leftOverflow","overlayRect","rightOverflow","right","viewportRect","optionOffsetFromPanelTop","firstDisplayedIndex","_getItemCount","SELECT_MAX_OPTIONS_DISPLAYED","selectedDisplayIndex","topSpaceAvailable","triggerRect","bottomSpaceAvailable","panelHeightTop","abs","totalPanelHeight","_adjustPanelDown","_adjustPanelUp","panelHeightBottom","distanceBelowViewport","_transformOrigin","_getOriginBasedOnOption","distanceAboveViewport","prevActiveItem","activeItem","onKeydown","currentActiveItem","optionGroups","_MdSelectMixinBase","[attr.aria-required]","[attr.aria-disabled]","[attr.aria-owns]","[class.mat-select-disabled]","[class.mat-select-invalid]","[class.mat-select-required]","(blur)","transformPlaceholder","transformPanel","fadeInContent","MD_TOOLTIP_SCROLL_STRATEGY","deps","useFactory","MD_TOOLTIP_SCROLL_STRATEGY_PROVIDER_FACTORY","_scrollDispatcher","_ariaDescriber","_scrollStrategy","_disabled","showDelay","hideDelay","_message","IOS","_enterListener","_leaveListener","_tooltipInstance","_disposeTooltip","MdTooltip","trim","_updateTooltipMessage","describe","tooltipClass","removeDescription","_createTooltip","_setTooltipClass","_tooltipClass","delay","_isTooltipVisible","isVisible","afterHidden","_getOrigin","_getOverlayPosition","strategy","withScrollableContainers","getScrollContainers","onPositionChange","scrollableViewProperties","isOverlayClipped","panelClass","scrollStrategy","create","originX","originY","isDirectionLtr","getMdTooltipInvalidPositionError","overlayX","overlayY","isLtr","updatePosition","(focus)","_positionDeprecated","_deprecatedMessage","_matMessage","TooltipComponent","_visibility","_hideTimeoutId","_setTransformOrigin","_showTimeoutId","_animationDone","_handleBodyInteraction","_closeOnInteraction","pageSize","startIndex","page","PageEvent","_length","_pageSize","_updateDisplayedPageSizeOptions","pageSizeOptions","_initialized","_intlChanges","_emitPageEvent","previousPage","hasPreviousPage","hasNextPage","numberOfPages","_changePageSize","floor","_displayedPageSizeOptions","push","sort","a","b","MdMenuItemBase","hover","MdMenuItem","_MdMenuItemMixinBase","[class.mat-menu-item-highlighted]","[class.mat-menu-item-submenu-trigger]","[attr.tabindex]","[attr.disabled]","(mouseenter)","opacity","MD_MENU_DEFAULT_OPTIONS","_xPosition","_defaultOptions","xPosition","_yPosition","yPosition","throwMdMenuInvalidPositionX","setPositionClasses","throwMdMenuInvalidPositionY","classes","_classList","obj","className","MdMenu","FocusKeyManager","withWrap","RxChain","from","switchMap","item","ESCAPE","parentMenu","focusFirstItem","posX","posY","customElevation","_previousElevation","_resetAnimation","_panelAnimationState","_onAnimationDone","transformMenu","fadeInItems","classList","MD_MENU_SCROLL_STRATEGY","MdMenuTrigger","_parentMenu","_menuItemInstance","_menuOpen","_closeSubscription","_positionSubscription","_hoverSubscription","_openedByMouse","menu","_checkMenu","reason","closeMenu","triggersSubmenu","openMenu","_menuClosingActions","_initMenu","_startAnimation","_setMenuElevation","_setIsMenuOpen","setElevation","depth","onMenuOpen","onMenuClose","_highlighted","_getOverlayConfig","hasBackdrop","backdropClass","_subscribeToPositions","connectionPair","_getPosition","offsetY","overlayFallbackX","originFallbackX","connectedTo","withDirection","withFallbackPosition","originFallbackY","overlayFallbackY","backdrop","parentClose","_handleMousedown","isFakeMousedownFromScreenReader","LEFT_ARROW$1","_handleClick","toggleMenu","aria-haspopup","(mousedown)","Self","_deprecatedMdMenuTriggerFor","_matMenuTriggerFor","minWidth","MD_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY","MdSelectBase","MdSelectTrigger","_viewportRuler","placeholderOptions","_scrollStrategyFactory","_optionSubscription","o1","o2","_panelDoneAnimating","_positions","ariaLabel","MdListCssMatStyler","MdNavListCssMatStyler","MdDividerCssMatStyler","MdListAvatarCssMatStyler","MdListIconCssMatStyler","MdListSubheaderCssMatStyler","MdListItem","_list","_isNavList","_lineSetter","MdLineSetter","_lines","_isRippleDisabled","_handleBlur","_getHostElement","MdList","_hasAvatar","MdSelectionListBase","MdListOption","_hasFocus","checkboxPosition","deselected","destroyed","selectionList","onFocus","_handleFocus","[attr.aria-selected]","MdSelectionList","_tabIndex","_optionFocusSubscription","_onFocusSubscription","_optionDestroyStream","_onDestroySubscription","deselectAll","optionIndex","updateActiveItemIndex","_keydown","_toggleSelectOnFocusedOption","focusedIndex","activeItemIndex","focusedOption","_MdSelectionListMixinBase","MdGridTile","colspan","MdGridTileText","MdLine","MdGridAvatarCssMatStyler","MdGridTileHeaderCssMatStyler","TileCoordinator","numColumns","tiles","tracker","fill","rowIndex","lastRowMax","rowCount","_trackTile","tile","gapStartIndex","_findMatchingGap","_markTilePosition","columnIndex","TilePosition","tileCols","Error","gapEndIndex","_nextRow","_findGapEndIndex","rowspan","row","col","_rows","_gutterSize","normalizeUnits","gutterSize","_cols","cols","TileStyler","getBaseTileSize","sizePercent","gutterFraction","getTilePosition","baseSize","offset","getTileSize","span","gutterWidthFractionPerTile","setRowStyles","percentWidth","gutterWidth","FixedTileStyler","fixedRowHeight","init","reset","list","_setStyle","RatioTileStyler","_parseRatio","percentHeightPerTile","rowHeightRatio","baseTileHeight","calc","getTileSpan","getGutterSpan","_setListStyle","ratioParts","parseFloat","_rowspan","_tiles","MdGridList","_gutter","coerceToString","_rowHeight","_setTileStyler","_layoutTiles","_checkRowHeight","rowHeight","_tileStyler","FitTileStyler","pos","positions","getComputedHeight","ngControl","_uid","_previousNativeValue","t","getSupportedInputTypes","_errorOptions","el","target","selectionStart","selectionEnd","MdInput","_type","stateChanges","ngDoCheck","_updateErrorState","_onInput","oldState","errorState","_validateType","MD_INPUT_INVALID_TYPES","getMdInputUnsupportedTypeError","validity","badInput","_isTextarea","nodeName","_isNeverEmpty","_isBadInput","setDescribedByIds","ids","_ariaDescribedby","[placeholder]","[disabled]","[required]","[attr.aria-describedby]","[attr.aria-invalid]","(input)","Platform","NgControl","NgForm","FormGroupDirective","MdTextareaAutosize","_minRows","_maxRows","_setMaxHeight","minRows","maxRows","_setTextareaStyle","maxHeight","property","_cacheTextareaLineHeight","textarea","textareaClone","rows","border","minHeight","overflow","appendChild","_cachedLineHeight","_setMinHeight","resizeToFitContent","scrollHeight","_previousValue","MdListBase","MdListItemBase","_MdListItemMixinBase","MdListDivider","selectedChanged","datepickerUid","_validSelected","MdDatepicker","_datepickerInput","_dateFilter","_inputSubscription","_disabledChange","_popupRef","_select","date","_dateAdapter","sameDate","_registerInput","_valueChange","_focusedElementBeforeOpen","_document","touchUi","_openAsDialog","_openAsPopup","_dialogRef","_calendarPortal","isAttached","_dialog","MdDatepickerContent","afterClosed","componentInstance","datepicker","_createPopup","first$1","onStable","overlayState","_createPopupPositionStrategy","MdDialog","MD_DATEPICKER_SCROLL_STRATEGY","DateAdapter","MD_DATEPICKER_VALUE_ACCESSOR","MD_DATEPICKER_VALIDATORS","NG_VALIDATORS","MdDatepickerInput","MdDatepickerInputEvent","targetElement","_dateFormats","_mdFormField","dateInput","_cvaOnChange","_validatorOnChange","mdDatepickerParse","text","controlValue","coerceDateProperty","compareDate","mdDatepickerMin","actual","_maxValidator","_filterValidator","_validator","Validators","compose","_parseValidator","_minValidator","_lastValueValid","createMissingDateImplError","_localeSubscription","localeChanges","registerDatepicker","mdDatepickerFilter","setProperty","format","display","oldDate","_datepickerSubscription","_datepicker","dateChange","registerOnValidatorChange","validate","c","getPopupConnectionElementRef","underlineRef","altKey","isValid","_getValidDateOrNull","isDateInstance","[attr.max]","(change)","MdFormField","matDatepickerFilter","MdDatepickerToggle","_stateChanges","datepickerDisabled","inputDisabled","MdMonthView","userSelection","longWeekdays","getDayOfWeekNames","weekdays","long","narrow","narrowWeekdays","_weekdays","slice","firstDayOfWeek","_activeDate","today","oldActiveDate","_hasSameMonthAndYear","_init","_selectedDate","_getDateInCurrentMonth","getMonthNames","getMonth","activeDate","getFirstDayOfWeek","_createWeekCells","daysInMonth","getNumDaysInMonth","dateNames","getDateNames","createDate","getYear","dateFilter","d1","d2","MD_DATE_FORMATS","selectedChange","MdYearView","_selectedMonth","_getMonthInCurrentYear","CdkAccordion","_multi","_hideToggle","displayMode","hideToggle","MdAccordion","nextId$1","AccordionItem","accordion","accordionId","_expanded","expanded","_expansionDispatcher","notify","UniqueSelectionDispatcher","_MdExpansionPanelMixinBase","MdExpansionPanelBase","MdExpansionPanel","_uniqueSelectionDispatcher","_inputChanges","_getHideToggle","_getExpandedState","[class.mat-expanded]","[class.mat-expansion-panel-spacing]","MdExpansionPanelActionRow","MdExpansionPanelHeader","panel","_parentChangeSubscription","_getPanelId","_showToggle","_keyup","SPACE","ENTER","_toggle","[attr.aria-controls]","[attr.aria-expanded]","(keyup)","[@expansionHeight]","params","collapsedHeight","expandedHeight","Host","FocusMonitor","MdExpansionPanelDescription","MdExpansionPanelTitle","MdExpansionModule","CompatibilityModule","A11yModule","_colspan","coerceToNumber","MdDialogContainer","MdDialogRef","_containerInstance","_beforeClose","_animationStateChanged","phaseName","_afterOpen","dialogResult","_result","_startExitAnimation","_getPositionStrategy","centerHorizontally","getState","MD_DIALOG_SCROLL_STRATEGY","MD_DIALOG_SCROLL_STRATEGY_PROVIDER","location","_parentDialog","_openDialogsAtThisLevel","_afterAllClosedAtThisLevel","afterAllClosed","defer","openDialogs","closeAll","_afterAllClosed","inProgressDialog","dialogContainer","_attachDialogContainer","dialogRef","_attachDialogContent","componentOrTemplateRef","afterOpen","getDialogById","dialog","_getOverlayState","dialogConfig","global","overlay","TemplateRef","attachTemplatePortal","$implicit","_removeOpenDialog","splice","topDialog","dialogElementUid","MdDialogClose","proxiedChange","_matDialogClose","_mdDialogClose","_matDialogCloseResult","MdDialogTitle","_container","_ariaLabelledBy","MdDialogContent","MdDialogActions","MdDialogModule","OverlayModule","SvgIconConfig","url","svgElement","MdIconRegistry","_http","_sanitizer","_defaultFontSetClass","addSvgIcon","iconName","addSvgIconInNamespace","namespace","key","iconKey","_svgIconConfigs","addSvgIconSet","addSvgIconSetInNamespace","configNamespace","_iconSetConfigs","registerFontClassAlias","alias","_fontCssClassesByAlias","classNameForFontAlias","setDefaultFontSetClass","getDefaultFontSetClass","getSvgIconFromUrl","safeUrl","sanitize","SecurityContext","RESOURCE_URL","getMdIconFailedToSanitizeError","cachedIcon","_cachedIconsByUrl","cloneSvg","_loadSvgIconFromConfig","doOperator","svg","getNamedSvgIcon","_getSvgFromConfig","iconSetConfigs","_getSvgFromIconSetConfigs","namedIcon","_extractIconWithNameFromAnySet","iconSetFetchRequests","_loadSvgIconSetFromConfig","iconSetConfig","catchOperator","err","log","forkJoin","Observable","foundIcon","_extractSvgIconFromSet","_fetchUrl","svgText","_svgElementFromString","iconSet","iconNode","tagName","toLowerCase","_setSvgAttributes","cloneNode","_toSvgElement","str","div","document","createElement","getAttribute","inProgressFetch","_inProgressUrlFetches","response","finallyOperator","share","DomSanitizer","Http","ICON_REGISTRY_PROVIDER_FACTORY","MdIconBase","MdIcon","parts","svgIcon","_usingFontIcon","_updateFontIconClasses","_setSvgElement","_clearSvgElement","layoutElement","childCount","childNodes","removeChild","elem","fontSetClass","fontSet","_mdIconRegistry","_previousFontSetClass","fontIcon","_previousFontIconClass","_MdIconMixinBase","Attribute","MdIconModule","MdDatepickerIntl","minDate","maxDate","changeDetectorRef","MdCalendar","_maxDate","_clampedActiveDate","clampDate","getYearName","_monthView","switchToYearViewLabel","switchToMonthViewLabel","nextMonthLabel","nextYearLabel","startAt","_dateSelected","_userSelected","_monthSelected","month","addCalendarMonths","_nextClicked","addCalendarYears","_previousEnabled","_isSameView","_handleCalendarBodyKeydownInMonthView","_handleCalendarBodyKeydownInYearView","_focusActiveCell","date1","date2","addCalendarDays","getDate","PAGE_DOWN","_dateFilterForViews","increment","_nextMonthInSameCol","startView","MdCalendarCell","numCols","cellAspectRatio","selectedValueChange","MdCalendarBody","_cellClicked","cell","allowDisabledSelection","cellNumber","colIndex","todayValue","activeCell","MD_DATEPICKER_SCROLL_STRATEGY_PROVIDER","MD_DATEPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY","[class.mat-checkbox-indeterminate]","[class.mat-checkbox-checked]","[class.mat-checkbox-disabled]","[class.mat-checkbox-label-before]","MD_CHECKBOX_CONTROL_VALUE_ACCESSOR","MdCheckbox","indeterminateChange","indeterminate","_MdCheckboxRequiredValidator","CheckboxRequiredValidator","MdCheckboxRequiredValidator","MdChipSelectionChange","MdChipBase","MdBasicChip","MdChip","_removable","selectable","select","selectionChange","selectViaInteraction","toggleSelected","remove","removable","DELETE","BACKSPACE","_blur","chip","_MdChipMixinBase","tabindex","[class.mat-chip-selected]","destroy","removed","onRemove","MdChipRemove","_parentChip","MdChipListChange","MdChipList","_userTabIndex","_id","_selectable","chips","_resetChips","_updateFocusForDestroyedChips","registerInput","inputElement","_chipInput","setDisabledState","focused","_focusInput","code","isInputEmpty","_isInputEmpty","isPrevKey","isNextKey","isBackKey","contains","setPreviousItemActive","_updateTabIndex","chipIndex","focusChip","chipsArray","_lastDestroyedIndex","correspondingChip","_markAsTouched","_listenToChipsFocus","_listenToChipsSelection","_listenToChipsRemoved","_chipFocusSubscription","_chipBlurSubscription","_chipSelectionSubscription","chipSelectionChanges","[class.mat-chip-list-disabled]","MdFormFieldControl","compareWith","placeholder","MdChipInput","_addOnBlur","separatorKeyCodes","chipEnd","_matChipInputTokenEnd","_chipList","chipList","MdDialogConfig","ariaDescribedBy","throwMdDialogContentAlreadyAttachedError","_savePreviouslyFocusedElement","_trapFocus","hasMovedFocus","toFocus","_elementFocusedBeforeDialogWasOpened","_onAnimationStart","_state","[attr.role]","[attr.aria-labelledby]","[@slideDialog]","(@slideDialog.start)","MdButton","MdAnchor","focusMonitor","_haltDisabledEvents","stopImmediatePropagation","MdButtonModule","NgModule","MdRippleModule","exports","MdFab","MdButtonCssMatStyler","MdIconButtonCssMatStyler","MdButtonToggleGroupBase","MD_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR","MdButtonToggleGroup","_name","_updateSelectedButtonToggleFromValue","_updateButtonToggleNames","matchingButtonToggle","_MdButtonToggleGroupMixinBase","MdButtonToggleGroupMultiple","MdButtonToggle","toggleGroup","toggleGroupMultiple","_buttonToggleDispatcher","_isSingleSelector","buttonToggleGroup","buttonToggleGroupMultiple","[class.mat-button-toggle-standalone]","[class.mat-button-toggle-disabled]","MdCardContent","MdCardTitle","MdCardSubtitle","MdCardActions","[class.mat-card-actions-align-end]","MdCardFooter","MdCardImage","MdCardSmImage","MdCardMdImage","MdCardLgImage","MdCardXlImage","MdCardAvatar","MdCard","MdCardHeader","MdCardTitleGroup","MdCardModule","TransitionCheckState","Init","Checked","Unchecked","Indeterminate","MdCheckboxChange","MdCheckboxBase","_currentAnimationClass","_indeterminate","changed","newState","_getAnimationClassForCheckStateTransition","_currentCheckState","_removeFocusRipple","_onInteractionEvent","animSuffix","_MdCheckboxMixinBase","[class.mat-optgroup-disabled]","_uniqueIdCounter","MdOptionSelectionChange","MdOption","onSelectionChange","_emitSelectionChangeEvent","_selectViaInteraction","countGroupLabelsBeforeOption","optionsArray","groups","groupCounter","[class.mat-selected]","[class.mat-option-multiple]","[class.mat-active]","[class.mat-option-disabled]","MdOptgroup","MdOptionModule","MdPseudoCheckboxModule","MD_PLACEHOLDER_GLOBAL_OPTIONS","PortalInjector","_parentInjector","_customTokens","token","notFoundValue","StyleModule","MdError","[attr.id]","MdHint","nextUniqueId$2","[class.mat-right]","MdPlaceholder","MdPrefix","MdSuffix","_subscriptAnimationState","_placeholderOptions","float","_hintLabel","_processHints","_floatPlaceholder","_syncDescribedByIds","_hintChildren","_validateControlChild","detectChanges","_shouldForward","prop","_hasPlaceholder","_placeholderChild","_errorChildren","_canPlaceholderFloat","_showAlwaysAnimate","_validatePlaceholders","getMdFormFieldPlaceholderConflictError","_validateHints","startHint_1","endHint_1","hint","hintLabel","getMdFormFieldDuplicatedHintError","_getDisplayedMessages","startHint","_hintLabelId","endHint","mdError","getMdFormFieldMissingControlError","[class.mat-input-invalid]","[class.mat-form-field-invalid]","[class.mat-focused]","[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-invalid]","color","dividerColor","hideRequiredMarker","_connectionContainerRef","_suffixChildren","MdFormFieldModule","MdAutocompleteSelectedEvent","MdAutocomplete","showPanel","displayWith","optionSelected","_uniqueAutocompleteIdCounter","ActiveDescendantKeyManager","_getScrollTop","_setVisibility","_emitSelectEvent","_getClassList","mat-autocomplete-visible","mat-autocomplete-hidden","MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER","MD_AUTOCOMPLETE_SCROLL_STRATEGY","MD_AUTOCOMPLETE_SCROLL_STRATEGY_PROVIDER_FACTORY","MD_AUTOCOMPLETE_VALUE_ACCESSOR","MdAutocompleteTrigger","_zone","_formField","autocomplete","_destroyPanel","openPanel","_attachOverlay","_closingActionsSubscription","_resetPlaceholder","clickTarget","formField","closePanel","activeOption","_resetActiveItem","isArrowKey_1","_handleInput","shouldAnimate","_animateAndLockPlaceholder","_manuallyFloatingPlaceholder","_scrollToOption","activeOptionIndex","labelCount","optionOffset","panelTop","newScrollTop","_subscribeToClosingActions","optionChanges","_positionStrategy","recalculateLastPosition","panelClosingActions","_setValueAndClose","_setTriggerValue","inputValue","_clearPreviousSelectedOption","_portal","_getHostWidth","_getConnectedElement","aria-autocomplete","aria-multiline","[attr.aria-activedescendant]","(focusin)","DEFAULT_ROUND_BUTTON_COLOR","MdRaisedButtonCssMatStyler","button","anchor","MdMiniFab","_MdButtonMixinBase","MdButtonBase","_isIconButton","_hasAttributeWithPrefix","unprefixedAttributeNames","some","suffix","hasAttribute","__extends","d","__","constructor","extendStatics","base","class_1","class_2","_color","colorPalette","defaultColor","class_3","defaultTabIndex","class_4","UNIQUE_SELECTION_DISPATCHER_PROVIDER_FACTORY","parentDispatcher","dest","range","valueFunction","valuesArray","getComputedStyle","getPropertyValue","distanceToFurthestCorner","rect","distX","distY","sqrt","transformValue","webkitTransform","scrollStrategies","reposition","getMdAutocompleteMissingPanelError","MD_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY","block","getMdIconNameNotFoundError","getMdIconNoHttpProviderError","parentRegistry","http","sanitizer","adapter","fromIso8601","parseInt","throwMdMenuMissingError","scrollThrottle","SCROLL_THROTTLE_MS","linearEase","currentTime","startValue","time","timeQuad","pow","timeCubed","startAngle","startPoint","polarToCartesian","pathRadius","arcSweep","endAngle","extendObject","sortOrder","setPrototypeOf","__proto__","p","AnimationCurves","STANDARD_CURVE","DECELERATION_CURVE","AnimationDurations","NoConflictStyleCompatibilityMode","MATERIAL_SANITY_CHECKS","_listeners","listener","registered","UNIQUE_SELECTION_DISPATCHER_PROVIDER","MAT_DATE_LOCALE_PROVIDER","MAT_DATE_LOCALE","LOCALE_ID","getDayOfWeek","displayFormat","DEFAULT_DAY_OF_WEEK_NAMES","useUtcForDisplay","setLocale","matDateLocale","NativeDateAdapter","getDay","DEFAULT_MONTH_NAMES","_stripDirectionalityCharacters","dtf","String","clone","year","parse","Intl","DateTimeFormat","locale","toDateString","years","_createDateWithOverflow","days","_2digit","getUTCMonth","iso8601String","ISO_8601_REGEX","test","isNaN","getTime","setFullYear","day","NativeDateModule","MdNativeDateModule","MD_NATIVE_DATE_FORMATS","GestureConfig","_hammer","buildHammer","mc","pan","Pan","press","Press","slide","_createRecognizer","threshold","swipe","longpress","recognizeWith","add","inheritances","recognizer","HammerGestureConfig","_resetClasses","count","_setClass","MdLineModule","RippleState","FADING_IN","VISIBLE","FADING_OUT","HIDDEN","fadeOutRipple","RippleRef","RippleRenderer","_ruler","_triggerEvents","Map","rippleDisabled","_containerElement","onMousedown","bind","setTriggerElement","containerRect","scrollPosition","getViewportScrollPosition","pageX","ripple","radius","_activeRipples","rippleRef","_isMousedown","rippleEl","runTimeoutOutsideZone","_triggerElement","addEventListener","MD_RIPPLE_GLOBAL_OPTIONS","_rippleRenderer","_globalOptions","_updateRippleRenderer","speedFactor","fadeInRipple","pageY","ViewportRuler","unbounded","_matRippleTrigger","_matRippleCentered","_matRippleUnbounded","PlatformModule","ScrollDispatchModule","VIEWPORT_RULER_PROVIDER","MdPseudoCheckbox","[class.mat-pseudo-checkbox-checked]","MdOptgroupBase","_MdOptgroupMixinBase","_uniqueOptgroupIdCounter","_labelId"],"mappings":"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"}