@covalent/core 3.1.0 → 3.1.2-beta.6

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 (639) hide show
  1. package/breadcrumbs/covalent-core-breadcrumbs.metadata.json +1 -1
  2. package/breadcrumbs/package.json +1 -3
  3. package/bundles/covalent-core-breadcrumbs.umd.js +131 -167
  4. package/bundles/covalent-core-breadcrumbs.umd.js.map +1 -1
  5. package/bundles/covalent-core-breadcrumbs.umd.min.js +1 -1
  6. package/bundles/covalent-core-breadcrumbs.umd.min.js.map +1 -1
  7. package/bundles/covalent-core-chips.umd.js +533 -708
  8. package/bundles/covalent-core-chips.umd.js.map +1 -1
  9. package/bundles/covalent-core-chips.umd.min.js +12 -12
  10. package/bundles/covalent-core-chips.umd.min.js.map +1 -1
  11. package/bundles/covalent-core-common.umd.js +566 -571
  12. package/bundles/covalent-core-common.umd.js.map +1 -1
  13. package/bundles/covalent-core-common.umd.min.js +13 -12
  14. package/bundles/covalent-core-common.umd.min.js.map +1 -1
  15. package/bundles/covalent-core-data-table.umd.js +727 -1038
  16. package/bundles/covalent-core-data-table.umd.js.map +1 -1
  17. package/bundles/covalent-core-data-table.umd.min.js +12 -12
  18. package/bundles/covalent-core-data-table.umd.min.js.map +1 -1
  19. package/bundles/covalent-core-dialogs.umd.js +515 -592
  20. package/bundles/covalent-core-dialogs.umd.js.map +1 -1
  21. package/bundles/covalent-core-dialogs.umd.min.js +1 -15
  22. package/bundles/covalent-core-dialogs.umd.min.js.map +1 -1
  23. package/bundles/covalent-core-dynamic-menu.umd.js +73 -62
  24. package/bundles/covalent-core-dynamic-menu.umd.js.map +1 -1
  25. package/bundles/covalent-core-dynamic-menu.umd.min.js +1 -1
  26. package/bundles/covalent-core-dynamic-menu.umd.min.js.map +1 -1
  27. package/bundles/covalent-core-expansion-panel.umd.js +465 -449
  28. package/bundles/covalent-core-expansion-panel.umd.js.map +1 -1
  29. package/bundles/covalent-core-expansion-panel.umd.min.js +12 -12
  30. package/bundles/covalent-core-expansion-panel.umd.min.js.map +1 -1
  31. package/bundles/covalent-core-file.umd.js +533 -598
  32. package/bundles/covalent-core-file.umd.js.map +1 -1
  33. package/bundles/covalent-core-file.umd.min.js +13 -12
  34. package/bundles/covalent-core-file.umd.min.js.map +1 -1
  35. package/bundles/covalent-core-json-formatter.umd.js +101 -152
  36. package/bundles/covalent-core-json-formatter.umd.js.map +1 -1
  37. package/bundles/covalent-core-json-formatter.umd.min.js +1 -1
  38. package/bundles/covalent-core-json-formatter.umd.min.js.map +1 -1
  39. package/bundles/covalent-core-layout.umd.js +845 -883
  40. package/bundles/covalent-core-layout.umd.js.map +1 -1
  41. package/bundles/covalent-core-layout.umd.min.js +13 -12
  42. package/bundles/covalent-core-layout.umd.min.js.map +1 -1
  43. package/bundles/covalent-core-loading.umd.js +481 -723
  44. package/bundles/covalent-core-loading.umd.js.map +1 -1
  45. package/bundles/covalent-core-loading.umd.min.js +12 -12
  46. package/bundles/covalent-core-loading.umd.min.js.map +1 -1
  47. package/bundles/covalent-core-media.umd.js +395 -375
  48. package/bundles/covalent-core-media.umd.js.map +1 -1
  49. package/bundles/covalent-core-media.umd.min.js +12 -12
  50. package/bundles/covalent-core-media.umd.min.js.map +1 -1
  51. package/bundles/covalent-core-menu.umd.js +37 -17
  52. package/bundles/covalent-core-menu.umd.js.map +1 -1
  53. package/bundles/covalent-core-menu.umd.min.js +1 -1
  54. package/bundles/covalent-core-menu.umd.min.js.map +1 -1
  55. package/bundles/covalent-core-message.umd.js +96 -152
  56. package/bundles/covalent-core-message.umd.js.map +1 -1
  57. package/bundles/covalent-core-message.umd.min.js +1 -1
  58. package/bundles/covalent-core-message.umd.min.js.map +1 -1
  59. package/bundles/covalent-core-nav-links.umd.js +63 -75
  60. package/bundles/covalent-core-nav-links.umd.js.map +1 -1
  61. package/bundles/covalent-core-nav-links.umd.min.js +1 -1
  62. package/bundles/covalent-core-nav-links.umd.min.js.map +1 -1
  63. package/bundles/covalent-core-notifications.umd.js +77 -101
  64. package/bundles/covalent-core-notifications.umd.js.map +1 -1
  65. package/bundles/covalent-core-notifications.umd.min.js +1 -1
  66. package/bundles/covalent-core-notifications.umd.min.js.map +1 -1
  67. package/bundles/covalent-core-paging.umd.js +89 -166
  68. package/bundles/covalent-core-paging.umd.js.map +1 -1
  69. package/bundles/covalent-core-paging.umd.min.js +1 -1
  70. package/bundles/covalent-core-paging.umd.min.js.map +1 -1
  71. package/bundles/covalent-core-search.umd.js +469 -418
  72. package/bundles/covalent-core-search.umd.js.map +1 -1
  73. package/bundles/covalent-core-search.umd.min.js +12 -12
  74. package/bundles/covalent-core-search.umd.min.js.map +1 -1
  75. package/bundles/covalent-core-sidesheet.umd.js +72 -52
  76. package/bundles/covalent-core-sidesheet.umd.js.map +1 -1
  77. package/bundles/covalent-core-sidesheet.umd.min.js +1 -1
  78. package/bundles/covalent-core-sidesheet.umd.min.js.map +1 -1
  79. package/bundles/covalent-core-steps.umd.js +663 -822
  80. package/bundles/covalent-core-steps.umd.js.map +1 -1
  81. package/bundles/covalent-core-steps.umd.min.js +12 -12
  82. package/bundles/covalent-core-steps.umd.min.js.map +1 -1
  83. package/bundles/covalent-core-tab-select.umd.js +446 -385
  84. package/bundles/covalent-core-tab-select.umd.js.map +1 -1
  85. package/bundles/covalent-core-tab-select.umd.min.js +12 -12
  86. package/bundles/covalent-core-tab-select.umd.min.js.map +1 -1
  87. package/bundles/covalent-core-user-profile.umd.js +65 -48
  88. package/bundles/covalent-core-user-profile.umd.js.map +1 -1
  89. package/bundles/covalent-core-user-profile.umd.min.js +1 -1
  90. package/bundles/covalent-core-user-profile.umd.min.js.map +1 -1
  91. package/bundles/covalent-core-virtual-scroll.umd.js +412 -356
  92. package/bundles/covalent-core-virtual-scroll.umd.js.map +1 -1
  93. package/bundles/covalent-core-virtual-scroll.umd.min.js +12 -12
  94. package/bundles/covalent-core-virtual-scroll.umd.min.js.map +1 -1
  95. package/bundles/covalent-core.umd.js +0 -8
  96. package/bundles/covalent-core.umd.js.map +1 -1
  97. package/chips/covalent-core-chips.metadata.json +1 -1
  98. package/chips/package.json +1 -3
  99. package/common/_common-theme.scss +11 -0
  100. package/common/package.json +1 -3
  101. package/data-table/covalent-core-data-table.metadata.json +1 -1
  102. package/data-table/package.json +1 -3
  103. package/dialogs/_dialog-theme.scss +6 -0
  104. package/dialogs/covalent-core-dialogs.metadata.json +1 -1
  105. package/dialogs/package.json +1 -3
  106. package/dialogs/window-dialog/window-dialog.component.scss +4 -0
  107. package/dynamic-menu/covalent-core-dynamic-menu.metadata.json +1 -1
  108. package/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.scss +0 -4
  109. package/dynamic-menu/package.json +1 -3
  110. package/esm2015/breadcrumbs/breadcrumb/breadcrumb.component.js +4 -3
  111. package/esm2015/breadcrumbs/breadcrumbs.component.js +3 -2
  112. package/esm2015/breadcrumbs/breadcrumbs.module.js +3 -2
  113. package/esm2015/breadcrumbs/covalent-core-breadcrumbs.js +3 -2
  114. package/esm2015/breadcrumbs/index.js +3 -2
  115. package/esm2015/breadcrumbs/public-api.js +3 -2
  116. package/esm2015/chips/chips.component.js +4 -3
  117. package/esm2015/chips/chips.module.js +3 -2
  118. package/esm2015/chips/covalent-core-chips.js +3 -2
  119. package/esm2015/chips/index.js +3 -2
  120. package/esm2015/chips/public-api.js +3 -2
  121. package/esm2015/common/animations/bounce/bounce.animation.js +3 -2
  122. package/esm2015/common/animations/collapse/collapse.animation.js +3 -2
  123. package/esm2015/common/animations/common/interfaces.js +3 -2
  124. package/esm2015/common/animations/fade/fadeInOut.animation.js +3 -2
  125. package/esm2015/common/animations/flash/flash.animation.js +3 -2
  126. package/esm2015/common/animations/headshake/headshake.animation.js +3 -2
  127. package/esm2015/common/animations/jello/jello.animation.js +3 -2
  128. package/esm2015/common/animations/pulse/pulse.animation.js +3 -2
  129. package/esm2015/common/animations/rotate/rotate.animation.js +3 -2
  130. package/esm2015/common/behaviors/control-value-accesor.mixin.js +3 -2
  131. package/esm2015/common/behaviors/disable-ripple.mixin.js +3 -2
  132. package/esm2015/common/behaviors/disabled.mixin.js +3 -2
  133. package/esm2015/common/common.module.js +3 -2
  134. package/esm2015/common/covalent-core-common.js +3 -2
  135. package/esm2015/common/directives/fullscreen/fullscreen.directive.js +3 -2
  136. package/esm2015/common/forms/auto-trim/auto-trim.directive.js +3 -2
  137. package/esm2015/common/forms/validators/validators.js +3 -2
  138. package/esm2015/common/functions/clipboard.js +3 -2
  139. package/esm2015/common/functions/convert.js +3 -2
  140. package/esm2015/common/functions/download.js +3 -2
  141. package/esm2015/common/functions/file.js +3 -2
  142. package/esm2015/common/index.js +3 -2
  143. package/esm2015/common/pipes/bytes/bytes.pipe.js +3 -2
  144. package/esm2015/common/pipes/decimal-bytes/decimal-bytes.pipe.js +3 -2
  145. package/esm2015/common/pipes/digits/digits.pipe.js +3 -2
  146. package/esm2015/common/pipes/time-ago/time-ago.pipe.js +3 -2
  147. package/esm2015/common/pipes/time-difference/time-difference.pipe.js +3 -2
  148. package/esm2015/common/pipes/time-until/time-until.pipe.js +3 -2
  149. package/esm2015/common/pipes/truncate/truncate.pipe.js +3 -2
  150. package/esm2015/common/public-api.js +3 -2
  151. package/esm2015/common/services/icon.service.js +3 -2
  152. package/esm2015/common/services/router-path.service.js +3 -2
  153. package/esm2015/covalent-core.js +3 -2
  154. package/esm2015/data-table/covalent-core-data-table.js +3 -2
  155. package/esm2015/data-table/data-table-cell/data-table-cell.component.js +4 -3
  156. package/esm2015/data-table/data-table-column/data-table-column.component.js +4 -3
  157. package/esm2015/data-table/data-table-row/data-table-row.component.js +3 -2
  158. package/esm2015/data-table/data-table-table/data-table-table.component.js +4 -3
  159. package/esm2015/data-table/data-table.component.js +6 -5
  160. package/esm2015/data-table/data-table.module.js +3 -2
  161. package/esm2015/data-table/directives/data-table-template.directive.js +3 -2
  162. package/esm2015/data-table/index.js +3 -2
  163. package/esm2015/data-table/public-api.js +3 -2
  164. package/esm2015/data-table/services/data-table.service.js +3 -2
  165. package/esm2015/dialogs/alert-dialog/alert-dialog.component.js +3 -2
  166. package/esm2015/dialogs/confirm-dialog/confirm-dialog.component.js +3 -2
  167. package/esm2015/dialogs/covalent-core-dialogs.js +3 -2
  168. package/esm2015/dialogs/dialog.component.js +4 -3
  169. package/esm2015/dialogs/dialogs.module.js +3 -2
  170. package/esm2015/dialogs/index.js +3 -2
  171. package/esm2015/dialogs/prompt-dialog/prompt-dialog.component.js +4 -3
  172. package/esm2015/dialogs/public-api.js +3 -2
  173. package/esm2015/dialogs/resizable-draggable-dialog/resizable-draggable-dialog.js +14 -13
  174. package/esm2015/dialogs/services/dialog.service.js +3 -2
  175. package/esm2015/dialogs/window-dialog/window-dialog.component.js +4 -3
  176. package/esm2015/dynamic-menu/covalent-core-dynamic-menu.js +3 -2
  177. package/esm2015/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.js +5 -4
  178. package/esm2015/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.js +4 -3
  179. package/esm2015/dynamic-menu/dynamic-menu.component.js +3 -2
  180. package/esm2015/dynamic-menu/dynamic-menu.module.js +3 -2
  181. package/esm2015/dynamic-menu/index.js +3 -2
  182. package/esm2015/dynamic-menu/public_api.js +3 -2
  183. package/esm2015/expansion-panel/covalent-core-expansion-panel.js +3 -2
  184. package/esm2015/expansion-panel/expansion-panel-group.component.js +3 -2
  185. package/esm2015/expansion-panel/expansion-panel.component.js +4 -3
  186. package/esm2015/expansion-panel/expansion-panel.module.js +3 -2
  187. package/esm2015/expansion-panel/index.js +3 -2
  188. package/esm2015/expansion-panel/public-api.js +3 -2
  189. package/esm2015/file/covalent-core-file.js +3 -2
  190. package/esm2015/file/directives/file-drop.directive.js +3 -2
  191. package/esm2015/file/directives/file-select.directive.js +3 -2
  192. package/esm2015/file/file-input/file-input.component.js +3 -2
  193. package/esm2015/file/file-upload/file-upload.component.js +4 -3
  194. package/esm2015/file/file.module.js +3 -2
  195. package/esm2015/file/index.js +3 -2
  196. package/esm2015/file/public-api.js +3 -2
  197. package/esm2015/file/services/file.service.js +3 -2
  198. package/esm2015/index.js +4 -2
  199. package/esm2015/json-formatter/covalent-core-json-formatter.js +3 -2
  200. package/esm2015/json-formatter/index.js +3 -2
  201. package/esm2015/json-formatter/json-formatter.component.js +4 -3
  202. package/esm2015/json-formatter/json-formatter.module.js +3 -2
  203. package/esm2015/json-formatter/public-api.js +3 -2
  204. package/esm2015/layout/covalent-core-layout.js +4 -3
  205. package/esm2015/layout/index.js +4 -3
  206. package/esm2015/layout/layout-card-over/layout-card-over.component.js +4 -3
  207. package/esm2015/layout/layout-footer/layout-footer.component.js +3 -2
  208. package/esm2015/layout/layout-manage-list/layout-manage-list.component.js +4 -3
  209. package/esm2015/layout/layout-manage-list/layout-manage-list.directives.js +7 -6
  210. package/esm2015/layout/layout-nav/layout-nav.component.js +4 -3
  211. package/esm2015/layout/layout-nav-list/layout-nav-list.component.js +4 -3
  212. package/esm2015/layout/layout-nav-list/layout-nav-list.directives.js +7 -6
  213. package/esm2015/layout/layout-toggle.class.js +22 -12
  214. package/esm2015/layout/layout.component.js +4 -3
  215. package/esm2015/layout/layout.directives.js +7 -6
  216. package/esm2015/layout/layout.module.js +3 -2
  217. package/esm2015/layout/navigation-drawer/navigation-drawer.component.js +4 -3
  218. package/esm2015/layout/public-api.js +4 -3
  219. package/esm2015/loading/covalent-core-loading.js +3 -2
  220. package/esm2015/loading/directives/loading.directive.js +3 -2
  221. package/esm2015/loading/index.js +3 -2
  222. package/esm2015/loading/loading.component.js +13 -12
  223. package/esm2015/loading/loading.module.js +3 -2
  224. package/esm2015/loading/public-api.js +3 -2
  225. package/esm2015/loading/services/loading.factory.js +3 -2
  226. package/esm2015/loading/services/loading.service.js +3 -2
  227. package/esm2015/media/covalent-core-media.js +3 -2
  228. package/esm2015/media/directives/media-toggle.directive.js +3 -2
  229. package/esm2015/media/index.js +3 -2
  230. package/esm2015/media/media.module.js +3 -2
  231. package/esm2015/media/public-api.js +3 -2
  232. package/esm2015/media/services/media.service.js +3 -2
  233. package/esm2015/menu/covalent-core-menu.js +3 -2
  234. package/esm2015/menu/index.js +3 -2
  235. package/esm2015/menu/menu.component.js +4 -3
  236. package/esm2015/menu/menu.module.js +3 -2
  237. package/esm2015/menu/public-api.js +3 -2
  238. package/esm2015/message/covalent-core-message.js +3 -2
  239. package/esm2015/message/index.js +3 -2
  240. package/esm2015/message/message.component.js +4 -3
  241. package/esm2015/message/message.module.js +3 -2
  242. package/esm2015/message/public-api.js +3 -2
  243. package/esm2015/nav-links/covalent-core-nav-links.js +3 -2
  244. package/esm2015/nav-links/index.js +3 -2
  245. package/esm2015/nav-links/nav-links.component.js +3 -2
  246. package/esm2015/nav-links/nav-links.module.js +3 -2
  247. package/esm2015/nav-links/public-api.js +3 -2
  248. package/esm2015/notifications/covalent-core-notifications.js +3 -2
  249. package/esm2015/notifications/index.js +3 -2
  250. package/esm2015/notifications/notification-count.component.js +10 -9
  251. package/esm2015/notifications/notifications.module.js +3 -2
  252. package/esm2015/notifications/public-api.js +3 -2
  253. package/esm2015/paging/covalent-core-paging.js +3 -2
  254. package/esm2015/paging/index.js +3 -2
  255. package/esm2015/paging/paging-bar.component.js +4 -3
  256. package/esm2015/paging/paging.module.js +3 -2
  257. package/esm2015/paging/public-api.js +3 -2
  258. package/esm2015/search/covalent-core-search.js +3 -2
  259. package/esm2015/search/index.js +3 -2
  260. package/esm2015/search/public-api.js +3 -2
  261. package/esm2015/search/search-box/search-box.component.js +4 -3
  262. package/esm2015/search/search-input/search-input.component.js +4 -3
  263. package/esm2015/search/search.module.js +3 -2
  264. package/esm2015/sidesheet/covalent-core-sidesheet.js +3 -2
  265. package/esm2015/sidesheet/index.js +3 -2
  266. package/esm2015/sidesheet/public-api.js +3 -2
  267. package/esm2015/sidesheet/sidesheet.component.js +4 -3
  268. package/esm2015/sidesheet/sidesheet.module.js +3 -2
  269. package/esm2015/steps/covalent-core-steps.js +3 -2
  270. package/esm2015/steps/index.js +3 -2
  271. package/esm2015/steps/nav/nav-step-link/nav-step-link.component.js +4 -3
  272. package/esm2015/steps/nav/nav-steps-horizontal/nav-steps-horizontal.component.js +4 -3
  273. package/esm2015/steps/nav/nav-steps-vertical/nav-steps-vertical.component.js +4 -3
  274. package/esm2015/steps/public-api.js +3 -2
  275. package/esm2015/steps/step-body/step-body.component.js +4 -3
  276. package/esm2015/steps/step-header/step-header.component.js +4 -3
  277. package/esm2015/steps/step.component.js +6 -5
  278. package/esm2015/steps/steps.component.js +6 -5
  279. package/esm2015/steps/steps.module.js +3 -2
  280. package/esm2015/tab-select/covalent-core-tab-select.js +3 -2
  281. package/esm2015/tab-select/index.js +3 -2
  282. package/esm2015/tab-select/public-api.js +3 -2
  283. package/esm2015/tab-select/tab-option.component.js +3 -2
  284. package/esm2015/tab-select/tab-select.component.js +3 -2
  285. package/esm2015/tab-select/tab-select.module.js +3 -2
  286. package/esm2015/user-profile/covalent-core-user-profile.js +3 -2
  287. package/esm2015/user-profile/index.js +3 -2
  288. package/esm2015/user-profile/public_api.js +3 -2
  289. package/esm2015/user-profile/user-profile-menu/user-profile-menu.component.js +4 -3
  290. package/esm2015/user-profile/user-profile.component.js +3 -2
  291. package/esm2015/user-profile/user-profile.module.js +3 -2
  292. package/esm2015/virtual-scroll/covalent-core-virtual-scroll.js +3 -2
  293. package/esm2015/virtual-scroll/index.js +3 -2
  294. package/esm2015/virtual-scroll/public-api.js +3 -2
  295. package/esm2015/virtual-scroll/virtual-scroll-container.component.js +4 -3
  296. package/esm2015/virtual-scroll/virtual-scroll-row.directive.js +3 -2
  297. package/esm2015/virtual-scroll/virtual-scroll.module.js +3 -2
  298. package/expansion-panel/covalent-core-expansion-panel.metadata.json +1 -1
  299. package/expansion-panel/package.json +1 -3
  300. package/fesm2015/covalent-core-breadcrumbs.js +13 -7
  301. package/fesm2015/covalent-core-breadcrumbs.js.map +1 -1
  302. package/fesm2015/covalent-core-chips.js +11 -6
  303. package/fesm2015/covalent-core-chips.js.map +1 -1
  304. package/fesm2015/covalent-core-common.js +62 -31
  305. package/fesm2015/covalent-core-common.js.map +1 -1
  306. package/fesm2015/covalent-core-data-table.js +28 -17
  307. package/fesm2015/covalent-core-data-table.js.map +1 -1
  308. package/fesm2015/covalent-core-dialogs.js +36 -25
  309. package/fesm2015/covalent-core-dialogs.js.map +1 -1
  310. package/fesm2015/covalent-core-dynamic-menu.js +17 -10
  311. package/fesm2015/covalent-core-dynamic-menu.js.map +1 -1
  312. package/fesm2015/covalent-core-expansion-panel.js +13 -7
  313. package/fesm2015/covalent-core-expansion-panel.js.map +1 -1
  314. package/fesm2015/covalent-core-file.js +19 -10
  315. package/fesm2015/covalent-core-file.js.map +1 -1
  316. package/fesm2015/covalent-core-json-formatter.js +11 -6
  317. package/fesm2015/covalent-core-json-formatter.js.map +1 -1
  318. package/fesm2015/covalent-core-layout.js +65 -41
  319. package/fesm2015/covalent-core-layout.js.map +1 -1
  320. package/fesm2015/covalent-core-loading.js +26 -18
  321. package/fesm2015/covalent-core-loading.js.map +1 -1
  322. package/fesm2015/covalent-core-media.js +12 -6
  323. package/fesm2015/covalent-core-media.js.map +1 -1
  324. package/fesm2015/covalent-core-menu.js +11 -6
  325. package/fesm2015/covalent-core-menu.js.map +1 -1
  326. package/fesm2015/covalent-core-message.js +11 -6
  327. package/fesm2015/covalent-core-message.js.map +1 -1
  328. package/fesm2015/covalent-core-nav-links.js +10 -5
  329. package/fesm2015/covalent-core-nav-links.js.map +1 -1
  330. package/fesm2015/covalent-core-notifications.js +17 -12
  331. package/fesm2015/covalent-core-notifications.js.map +1 -1
  332. package/fesm2015/covalent-core-paging.js +11 -6
  333. package/fesm2015/covalent-core-paging.js.map +1 -1
  334. package/fesm2015/covalent-core-search.js +14 -8
  335. package/fesm2015/covalent-core-search.js.map +1 -1
  336. package/fesm2015/covalent-core-sidesheet.js +11 -6
  337. package/fesm2015/covalent-core-sidesheet.js.map +1 -1
  338. package/fesm2015/covalent-core-steps.js +33 -22
  339. package/fesm2015/covalent-core-steps.js.map +1 -1
  340. package/fesm2015/covalent-core-tab-select.js +12 -6
  341. package/fesm2015/covalent-core-tab-select.js.map +1 -1
  342. package/fesm2015/covalent-core-user-profile.js +13 -7
  343. package/fesm2015/covalent-core-user-profile.js.map +1 -1
  344. package/fesm2015/covalent-core-virtual-scroll.js +13 -7
  345. package/fesm2015/covalent-core-virtual-scroll.js.map +1 -1
  346. package/fesm2015/covalent-core.js +4 -2
  347. package/fesm2015/covalent-core.js.map +1 -1
  348. package/file/covalent-core-file.metadata.json +1 -1
  349. package/file/package.json +1 -3
  350. package/json-formatter/covalent-core-json-formatter.metadata.json +1 -1
  351. package/json-formatter/package.json +1 -3
  352. package/layout/covalent-core-layout.metadata.json +1 -1
  353. package/layout/layout-manage-list/layout-manage-list.directives.d.ts +4 -4
  354. package/layout/layout-nav-list/layout-nav-list.directives.d.ts +4 -4
  355. package/layout/layout-toggle.class.d.ts +1 -1
  356. package/layout/layout.directives.d.ts +4 -4
  357. package/layout/package.json +1 -3
  358. package/loading/covalent-core-loading.metadata.json +1 -1
  359. package/loading/package.json +1 -3
  360. package/media/package.json +1 -3
  361. package/menu/covalent-core-menu.metadata.json +1 -1
  362. package/menu/package.json +1 -3
  363. package/message/covalent-core-message.metadata.json +1 -1
  364. package/message/package.json +1 -3
  365. package/nav-links/package.json +1 -3
  366. package/notifications/covalent-core-notifications.metadata.json +1 -1
  367. package/notifications/package.json +1 -3
  368. package/package.json +12 -12
  369. package/paging/covalent-core-paging.metadata.json +1 -1
  370. package/paging/package.json +1 -3
  371. package/schematics/components.js +1 -0
  372. package/schematics/components.js.map +1 -1
  373. package/schematics/ng-add/files/theme.scss +1 -1
  374. package/schematics/ng-add/index.js +4 -6
  375. package/schematics/ng-add/index.js.map +1 -1
  376. package/schematics/ng-update/index.js +1 -0
  377. package/schematics/ng-update/index.js.map +1 -1
  378. package/schematics/ng-update/target-version.js +1 -0
  379. package/schematics/ng-update/target-version.js.map +1 -1
  380. package/schematics/version-names.js +1 -0
  381. package/schematics/version-names.js.map +1 -1
  382. package/search/covalent-core-search.metadata.json +1 -1
  383. package/search/package.json +1 -3
  384. package/sidesheet/covalent-core-sidesheet.metadata.json +1 -1
  385. package/sidesheet/package.json +1 -3
  386. package/steps/covalent-core-steps.metadata.json +1 -1
  387. package/steps/package.json +1 -3
  388. package/tab-select/covalent-core-tab-select.metadata.json +1 -1
  389. package/tab-select/package.json +1 -3
  390. package/theming/prebuilt/blue-grey-deep-orange.css +193 -28
  391. package/theming/prebuilt/blue-grey-deep-orange.css.map +1 -1
  392. package/theming/prebuilt/blue-orange.css +193 -28
  393. package/theming/prebuilt/blue-orange.css.map +1 -1
  394. package/theming/prebuilt/indigo-pink.css +193 -28
  395. package/theming/prebuilt/indigo-pink.css.map +1 -1
  396. package/theming/prebuilt/orange-light-blue.css +193 -28
  397. package/theming/prebuilt/orange-light-blue.css.map +1 -1
  398. package/theming/prebuilt/teal-orange.css +193 -28
  399. package/theming/prebuilt/teal-orange.css.map +1 -1
  400. package/user-profile/covalent-core-user-profile.metadata.json +1 -1
  401. package/user-profile/package.json +1 -3
  402. package/virtual-scroll/covalent-core-virtual-scroll.metadata.json +1 -1
  403. package/virtual-scroll/package.json +1 -3
  404. package/esm5/breadcrumbs/breadcrumb/breadcrumb.component.js +0 -216
  405. package/esm5/breadcrumbs/breadcrumbs.component.js +0 -286
  406. package/esm5/breadcrumbs/breadcrumbs.module.js +0 -23
  407. package/esm5/breadcrumbs/covalent-core-breadcrumbs.js +0 -9
  408. package/esm5/breadcrumbs/index.js +0 -6
  409. package/esm5/breadcrumbs/public-api.js +0 -8
  410. package/esm5/chips/chips.component.js +0 -1453
  411. package/esm5/chips/chips.module.js +0 -26
  412. package/esm5/chips/covalent-core-chips.js +0 -9
  413. package/esm5/chips/index.js +0 -6
  414. package/esm5/chips/public-api.js +0 -7
  415. package/esm5/common/animations/bounce/bounce.animation.js +0 -75
  416. package/esm5/common/animations/collapse/collapse.animation.js +0 -66
  417. package/esm5/common/animations/common/interfaces.js +0 -17
  418. package/esm5/common/animations/fade/fadeInOut.animation.js +0 -52
  419. package/esm5/common/animations/flash/flash.animation.js +0 -39
  420. package/esm5/common/animations/headshake/headshake.animation.js +0 -40
  421. package/esm5/common/animations/jello/jello.animation.js +0 -43
  422. package/esm5/common/animations/pulse/pulse.animation.js +0 -37
  423. package/esm5/common/animations/rotate/rotate.animation.js +0 -40
  424. package/esm5/common/behaviors/control-value-accesor.mixin.js +0 -127
  425. package/esm5/common/behaviors/disable-ripple.mixin.js +0 -75
  426. package/esm5/common/behaviors/disabled.mixin.js +0 -75
  427. package/esm5/common/common.module.js +0 -57
  428. package/esm5/common/covalent-core-common.js +0 -11
  429. package/esm5/common/directives/fullscreen/fullscreen.directive.js +0 -228
  430. package/esm5/common/forms/auto-trim/auto-trim.directive.js +0 -52
  431. package/esm5/common/forms/validators/validators.js +0 -73
  432. package/esm5/common/functions/clipboard.js +0 -29
  433. package/esm5/common/functions/convert.js +0 -120
  434. package/esm5/common/functions/download.js +0 -93
  435. package/esm5/common/functions/file.js +0 -28
  436. package/esm5/common/index.js +0 -6
  437. package/esm5/common/pipes/bytes/bytes.pipe.js +0 -54
  438. package/esm5/common/pipes/decimal-bytes/decimal-bytes.pipe.js +0 -54
  439. package/esm5/common/pipes/digits/digits.pipe.js +0 -72
  440. package/esm5/common/pipes/time-ago/time-ago.pipe.js +0 -89
  441. package/esm5/common/pipes/time-difference/time-difference.pipe.js +0 -74
  442. package/esm5/common/pipes/time-until/time-until.pipe.js +0 -89
  443. package/esm5/common/pipes/truncate/truncate.pipe.js +0 -42
  444. package/esm5/common/public-api.js +0 -43
  445. package/esm5/common/services/icon.service.js +0 -1118
  446. package/esm5/common/services/router-path.service.js +0 -69
  447. package/esm5/covalent-core.js +0 -9
  448. package/esm5/data-table/covalent-core-data-table.js +0 -9
  449. package/esm5/data-table/data-table-cell/data-table-cell.component.js +0 -98
  450. package/esm5/data-table/data-table-column/data-table-column.component.js +0 -257
  451. package/esm5/data-table/data-table-row/data-table-row.component.js +0 -145
  452. package/esm5/data-table/data-table-table/data-table-table.component.js +0 -40
  453. package/esm5/data-table/data-table.component.js +0 -2079
  454. package/esm5/data-table/data-table.module.js +0 -42
  455. package/esm5/data-table/directives/data-table-template.directive.js +0 -31
  456. package/esm5/data-table/index.js +0 -6
  457. package/esm5/data-table/public-api.js +0 -13
  458. package/esm5/data-table/services/data-table.service.js +0 -184
  459. package/esm5/dialogs/alert-dialog/alert-dialog.component.js +0 -48
  460. package/esm5/dialogs/confirm-dialog/confirm-dialog.component.js +0 -63
  461. package/esm5/dialogs/covalent-core-dialogs.js +0 -10
  462. package/esm5/dialogs/dialog.component.js +0 -76
  463. package/esm5/dialogs/dialogs.module.js +0 -60
  464. package/esm5/dialogs/index.js +0 -6
  465. package/esm5/dialogs/prompt-dialog/prompt-dialog.component.js +0 -100
  466. package/esm5/dialogs/public-api.js +0 -12
  467. package/esm5/dialogs/resizable-draggable-dialog/resizable-draggable-dialog.js +0 -356
  468. package/esm5/dialogs/services/dialog.service.js +0 -441
  469. package/esm5/dialogs/window-dialog/window-dialog.component.js +0 -60
  470. package/esm5/dynamic-menu/covalent-core-dynamic-menu.js +0 -10
  471. package/esm5/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.js +0 -45
  472. package/esm5/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.js +0 -39
  473. package/esm5/dynamic-menu/dynamic-menu.component.js +0 -94
  474. package/esm5/dynamic-menu/dynamic-menu.module.js +0 -29
  475. package/esm5/dynamic-menu/index.js +0 -6
  476. package/esm5/dynamic-menu/public_api.js +0 -8
  477. package/esm5/expansion-panel/covalent-core-expansion-panel.js +0 -9
  478. package/esm5/expansion-panel/expansion-panel-group.component.js +0 -251
  479. package/esm5/expansion-panel/expansion-panel.component.js +0 -344
  480. package/esm5/expansion-panel/expansion-panel.module.js +0 -34
  481. package/esm5/expansion-panel/index.js +0 -6
  482. package/esm5/expansion-panel/public-api.js +0 -8
  483. package/esm5/file/covalent-core-file.js +0 -9
  484. package/esm5/file/directives/file-drop.directive.js +0 -276
  485. package/esm5/file/directives/file-select.directive.js +0 -124
  486. package/esm5/file/file-input/file-input.component.js +0 -225
  487. package/esm5/file/file-upload/file-upload.component.js +0 -284
  488. package/esm5/file/file.module.js +0 -38
  489. package/esm5/file/index.js +0 -6
  490. package/esm5/file/public-api.js +0 -11
  491. package/esm5/file/services/file.service.js +0 -137
  492. package/esm5/index.js +0 -5
  493. package/esm5/json-formatter/covalent-core-json-formatter.js +0 -9
  494. package/esm5/json-formatter/index.js +0 -6
  495. package/esm5/json-formatter/json-formatter.component.js +0 -433
  496. package/esm5/json-formatter/json-formatter.module.js +0 -23
  497. package/esm5/json-formatter/public-api.js +0 -7
  498. package/esm5/layout/covalent-core-layout.js +0 -9
  499. package/esm5/layout/index.js +0 -6
  500. package/esm5/layout/layout-card-over/layout-card-over.component.js +0 -72
  501. package/esm5/layout/layout-footer/layout-footer.component.js +0 -77
  502. package/esm5/layout/layout-manage-list/layout-manage-list.component.js +0 -175
  503. package/esm5/layout/layout-manage-list/layout-manage-list.directives.js +0 -147
  504. package/esm5/layout/layout-nav/layout-nav.component.js +0 -108
  505. package/esm5/layout/layout-nav-list/layout-nav-list.component.js +0 -257
  506. package/esm5/layout/layout-nav-list/layout-nav-list.directives.js +0 -147
  507. package/esm5/layout/layout-toggle.class.js +0 -214
  508. package/esm5/layout/layout.component.js +0 -175
  509. package/esm5/layout/layout.directives.js +0 -144
  510. package/esm5/layout/layout.module.js +0 -67
  511. package/esm5/layout/navigation-drawer/navigation-drawer.component.js +0 -364
  512. package/esm5/layout/public-api.js +0 -17
  513. package/esm5/loading/covalent-core-loading.js +0 -9
  514. package/esm5/loading/directives/loading.directive.js +0 -304
  515. package/esm5/loading/index.js +0 -6
  516. package/esm5/loading/loading.component.js +0 -367
  517. package/esm5/loading/loading.module.js +0 -33
  518. package/esm5/loading/public-api.js +0 -10
  519. package/esm5/loading/services/loading.factory.js +0 -378
  520. package/esm5/loading/services/loading.service.js +0 -494
  521. package/esm5/media/covalent-core-media.js +0 -9
  522. package/esm5/media/directives/media-toggle.directive.js +0 -261
  523. package/esm5/media/index.js +0 -6
  524. package/esm5/media/media.module.js +0 -23
  525. package/esm5/media/public-api.js +0 -8
  526. package/esm5/media/services/media.service.js +0 -229
  527. package/esm5/menu/covalent-core-menu.js +0 -9
  528. package/esm5/menu/index.js +0 -6
  529. package/esm5/menu/menu.component.js +0 -19
  530. package/esm5/menu/menu.module.js +0 -25
  531. package/esm5/menu/public-api.js +0 -7
  532. package/esm5/message/covalent-core-message.js +0 -9
  533. package/esm5/message/index.js +0 -6
  534. package/esm5/message/message.component.js +0 -402
  535. package/esm5/message/message.module.js +0 -24
  536. package/esm5/message/public-api.js +0 -7
  537. package/esm5/nav-links/covalent-core-nav-links.js +0 -9
  538. package/esm5/nav-links/index.js +0 -6
  539. package/esm5/nav-links/nav-links.component.js +0 -171
  540. package/esm5/nav-links/nav-links.module.js +0 -40
  541. package/esm5/nav-links/public-api.js +0 -7
  542. package/esm5/notifications/covalent-core-notifications.js +0 -9
  543. package/esm5/notifications/index.js +0 -6
  544. package/esm5/notifications/notification-count.component.js +0 -268
  545. package/esm5/notifications/notifications.module.js +0 -23
  546. package/esm5/notifications/public-api.js +0 -7
  547. package/esm5/paging/covalent-core-paging.js +0 -9
  548. package/esm5/paging/index.js +0 -6
  549. package/esm5/paging/paging-bar.component.js +0 -542
  550. package/esm5/paging/paging.module.js +0 -23
  551. package/esm5/paging/public-api.js +0 -7
  552. package/esm5/search/covalent-core-search.js +0 -9
  553. package/esm5/search/index.js +0 -6
  554. package/esm5/search/public-api.js +0 -8
  555. package/esm5/search/search-box/search-box.component.js +0 -298
  556. package/esm5/search/search-input/search-input.component.js +0 -297
  557. package/esm5/search/search.module.js +0 -26
  558. package/esm5/sidesheet/covalent-core-sidesheet.js +0 -9
  559. package/esm5/sidesheet/index.js +0 -6
  560. package/esm5/sidesheet/public-api.js +0 -7
  561. package/esm5/sidesheet/sidesheet.component.js +0 -89
  562. package/esm5/sidesheet/sidesheet.module.js +0 -30
  563. package/esm5/steps/covalent-core-steps.js +0 -9
  564. package/esm5/steps/index.js +0 -6
  565. package/esm5/steps/nav/nav-step-link/nav-step-link.component.js +0 -165
  566. package/esm5/steps/nav/nav-steps-horizontal/nav-steps-horizontal.component.js +0 -464
  567. package/esm5/steps/nav/nav-steps-vertical/nav-steps-vertical.component.js +0 -143
  568. package/esm5/steps/public-api.js +0 -13
  569. package/esm5/steps/step-body/step-body.component.js +0 -103
  570. package/esm5/steps/step-header/step-header.component.js +0 -101
  571. package/esm5/steps/step.component.js +0 -399
  572. package/esm5/steps/steps.component.js +0 -313
  573. package/esm5/steps/steps.module.js +0 -47
  574. package/esm5/tab-select/covalent-core-tab-select.js +0 -9
  575. package/esm5/tab-select/index.js +0 -6
  576. package/esm5/tab-select/public-api.js +0 -8
  577. package/esm5/tab-select/tab-option.component.js +0 -86
  578. package/esm5/tab-select/tab-select.component.js +0 -344
  579. package/esm5/tab-select/tab-select.module.js +0 -34
  580. package/esm5/user-profile/covalent-core-user-profile.js +0 -9
  581. package/esm5/user-profile/index.js +0 -6
  582. package/esm5/user-profile/public_api.js +0 -8
  583. package/esm5/user-profile/user-profile-menu/user-profile-menu.component.js +0 -42
  584. package/esm5/user-profile/user-profile.component.js +0 -29
  585. package/esm5/user-profile/user-profile.module.js +0 -36
  586. package/esm5/virtual-scroll/covalent-core-virtual-scroll.js +0 -9
  587. package/esm5/virtual-scroll/index.js +0 -6
  588. package/esm5/virtual-scroll/public-api.js +0 -8
  589. package/esm5/virtual-scroll/virtual-scroll-container.component.js +0 -468
  590. package/esm5/virtual-scroll/virtual-scroll-row.directive.js +0 -24
  591. package/esm5/virtual-scroll/virtual-scroll.module.js +0 -24
  592. package/fesm5/covalent-core-breadcrumbs.js +0 -535
  593. package/fesm5/covalent-core-breadcrumbs.js.map +0 -1
  594. package/fesm5/covalent-core-chips.js +0 -1484
  595. package/fesm5/covalent-core-chips.js.map +0 -1
  596. package/fesm5/covalent-core-common.js +0 -2961
  597. package/fesm5/covalent-core-common.js.map +0 -1
  598. package/fesm5/covalent-core-data-table.js +0 -2863
  599. package/fesm5/covalent-core-data-table.js.map +0 -1
  600. package/fesm5/covalent-core-dialogs.js +0 -1189
  601. package/fesm5/covalent-core-dialogs.js.map +0 -1
  602. package/fesm5/covalent-core-dynamic-menu.js +0 -214
  603. package/fesm5/covalent-core-dynamic-menu.js.map +0 -1
  604. package/fesm5/covalent-core-expansion-panel.js +0 -631
  605. package/fesm5/covalent-core-expansion-panel.js.map +0 -1
  606. package/fesm5/covalent-core-file.js +0 -1068
  607. package/fesm5/covalent-core-file.js.map +0 -1
  608. package/fesm5/covalent-core-json-formatter.js +0 -470
  609. package/fesm5/covalent-core-json-formatter.js.map +0 -1
  610. package/fesm5/covalent-core-layout.js +0 -1906
  611. package/fesm5/covalent-core-layout.js.map +0 -1
  612. package/fesm5/covalent-core-loading.js +0 -1562
  613. package/fesm5/covalent-core-loading.js.map +0 -1
  614. package/fesm5/covalent-core-media.js +0 -522
  615. package/fesm5/covalent-core-media.js.map +0 -1
  616. package/fesm5/covalent-core-menu.js +0 -58
  617. package/fesm5/covalent-core-menu.js.map +0 -1
  618. package/fesm5/covalent-core-message.js +0 -439
  619. package/fesm5/covalent-core-message.js.map +0 -1
  620. package/fesm5/covalent-core-nav-links.js +0 -224
  621. package/fesm5/covalent-core-nav-links.js.map +0 -1
  622. package/fesm5/covalent-core-notifications.js +0 -303
  623. package/fesm5/covalent-core-notifications.js.map +0 -1
  624. package/fesm5/covalent-core-paging.js +0 -579
  625. package/fesm5/covalent-core-paging.js.map +0 -1
  626. package/fesm5/covalent-core-search.js +0 -623
  627. package/fesm5/covalent-core-search.js.map +0 -1
  628. package/fesm5/covalent-core-sidesheet.js +0 -129
  629. package/fesm5/covalent-core-sidesheet.js.map +0 -1
  630. package/fesm5/covalent-core-steps.js +0 -1704
  631. package/fesm5/covalent-core-steps.js.map +0 -1
  632. package/fesm5/covalent-core-tab-select.js +0 -467
  633. package/fesm5/covalent-core-tab-select.js.map +0 -1
  634. package/fesm5/covalent-core-user-profile.js +0 -118
  635. package/fesm5/covalent-core-user-profile.js.map +0 -1
  636. package/fesm5/covalent-core-virtual-scroll.js +0 -526
  637. package/fesm5/covalent-core-virtual-scroll.js.map +0 -1
  638. package/fesm5/covalent-core.js +0 -10
  639. package/fesm5/covalent-core.js.map +0 -1
@@ -1,1453 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { __extends } from "tslib";
6
- import { Component, Input, Output, forwardRef, ViewChild, ViewChildren, QueryList, HostListener, ElementRef, Optional, Inject, Directive, TemplateRef, ViewContainerRef, ContentChild, ChangeDetectionStrategy, ChangeDetectorRef, HostBinding, Renderer2, } from '@angular/core';
7
- import { DOCUMENT } from '@angular/common';
8
- import { EventEmitter } from '@angular/core';
9
- import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';
10
- import { TemplatePortalDirective } from '@angular/cdk/portal';
11
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
12
- import { UP_ARROW, DOWN_ARROW, ESCAPE, LEFT_ARROW, RIGHT_ARROW, DELETE, BACKSPACE, TAB, } from '@angular/cdk/keycodes';
13
- import { MatChip } from '@angular/material/chips';
14
- import { MatInput } from '@angular/material/input';
15
- import { MatOption } from '@angular/material/core';
16
- import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
17
- import { Subscription, timer, merge, fromEvent } from 'rxjs';
18
- import { filter, debounceTime } from 'rxjs/operators';
19
- import { mixinDisabled, mixinControlValueAccessor } from '@covalent/core/common';
20
- var TdChipDirective = /** @class */ (function (_super) {
21
- __extends(TdChipDirective, _super);
22
- function TdChipDirective(templateRef, viewContainerRef) {
23
- return _super.call(this, templateRef, viewContainerRef) || this;
24
- }
25
- TdChipDirective.decorators = [
26
- { type: Directive, args: [{
27
- selector: '[td-chip]ng-template',
28
- },] }
29
- ];
30
- /** @nocollapse */
31
- TdChipDirective.ctorParameters = function () { return [
32
- { type: TemplateRef },
33
- { type: ViewContainerRef }
34
- ]; };
35
- return TdChipDirective;
36
- }(TemplatePortalDirective));
37
- export { TdChipDirective };
38
- var TdAutocompleteOptionDirective = /** @class */ (function (_super) {
39
- __extends(TdAutocompleteOptionDirective, _super);
40
- function TdAutocompleteOptionDirective(templateRef, viewContainerRef) {
41
- return _super.call(this, templateRef, viewContainerRef) || this;
42
- }
43
- TdAutocompleteOptionDirective.decorators = [
44
- { type: Directive, args: [{
45
- selector: '[td-autocomplete-option]ng-template',
46
- },] }
47
- ];
48
- /** @nocollapse */
49
- TdAutocompleteOptionDirective.ctorParameters = function () { return [
50
- { type: TemplateRef },
51
- { type: ViewContainerRef }
52
- ]; };
53
- return TdAutocompleteOptionDirective;
54
- }(TemplatePortalDirective));
55
- export { TdAutocompleteOptionDirective };
56
- var TdChipsBase = /** @class */ (function () {
57
- function TdChipsBase(_changeDetectorRef) {
58
- this._changeDetectorRef = _changeDetectorRef;
59
- }
60
- return TdChipsBase;
61
- }());
62
- export { TdChipsBase };
63
- if (false) {
64
- /** @type {?} */
65
- TdChipsBase.prototype._changeDetectorRef;
66
- }
67
- /* tslint:disable-next-line */
68
- /** @type {?} */
69
- export var _TdChipsMixinBase = mixinControlValueAccessor(mixinDisabled(TdChipsBase), []);
70
- var TdChipsComponent = /** @class */ (function (_super) {
71
- __extends(TdChipsComponent, _super);
72
- function TdChipsComponent(_elementRef, _renderer, _document, _changeDetectorRef) {
73
- var _this = _super.call(this, _changeDetectorRef) || this;
74
- _this._elementRef = _elementRef;
75
- _this._renderer = _renderer;
76
- _this._document = _document;
77
- _this._outsideClickSubs = Subscription.EMPTY;
78
- _this._inputValueChangesSubs = Subscription.EMPTY;
79
- _this._isMousedown = false;
80
- _this._length = 0;
81
- _this._stacked = false;
82
- _this._requireMatch = false;
83
- _this._color = 'primary';
84
- _this._inputPosition = 'after';
85
- _this._chipAddition = true;
86
- _this._chipRemoval = true;
87
- _this._focused = false;
88
- _this._required = false;
89
- _this._tabIndex = 0;
90
- _this._touchendDebounce = 100;
91
- _this._internalClick = false;
92
- _this._internalActivateOption = false;
93
- /**
94
- * FormControl for the matInput element.
95
- */
96
- _this.inputControl = new FormControl();
97
- /**
98
- * debounce?: number
99
- * Debounce timeout between keypresses. Defaults to 200.
100
- */
101
- _this.debounce = 200;
102
- /**
103
- * add?: function
104
- * Method to be executed when a chip is added.
105
- * Sends chip value as event.
106
- */
107
- _this.add = new EventEmitter();
108
- /**
109
- * remove?: function
110
- * Method to be executed when a chip is removed.
111
- * Sends chip value as event.
112
- */
113
- _this.remove = new EventEmitter();
114
- /**
115
- * inputChange?: function
116
- * Method to be executed when the value in the autocomplete input changes.
117
- * Sends string value as event.
118
- */
119
- _this.inputChange = new EventEmitter();
120
- /**
121
- * chipFocus?: function
122
- * Method to be executed when a chip is focused.
123
- * Sends chip value as event.
124
- */
125
- _this.chipFocus = new EventEmitter();
126
- /**
127
- * blur?: function
128
- * Method to be executed when a chip is blurred.
129
- * Sends chip value as event.
130
- */
131
- _this.chipBlur = new EventEmitter();
132
- /**
133
- * compareWith? function
134
- * Function used to check whether a chip value already exists.
135
- * Defaults to strict equality comparison ===
136
- */
137
- _this.compareWith = (/**
138
- * @param {?} o1
139
- * @param {?} o2
140
- * @return {?}
141
- */
142
- function (o1, o2) {
143
- return o1 === o2;
144
- });
145
- _this._renderer.addClass(_this._elementRef.nativeElement, 'mat-' + _this._color);
146
- return _this;
147
- }
148
- Object.defineProperty(TdChipsComponent.prototype, "focused", {
149
- /**
150
- * Flag that is true when autocomplete is focused.
151
- */
152
- get: /**
153
- * Flag that is true when autocomplete is focused.
154
- * @return {?}
155
- */
156
- function () {
157
- return this._focused;
158
- },
159
- enumerable: true,
160
- configurable: true
161
- });
162
- Object.defineProperty(TdChipsComponent.prototype, "items", {
163
- get: /**
164
- * @return {?}
165
- */
166
- function () {
167
- return this._items;
168
- },
169
- /**
170
- * items?: any[]
171
- * Renders the `mat-autocomplete` with the provided list to display as options.
172
- */
173
- set: /**
174
- * items?: any[]
175
- * Renders the `mat-autocomplete` with the provided list to display as options.
176
- * @param {?} items
177
- * @return {?}
178
- */
179
- function (items) {
180
- this._items = items;
181
- this._setFirstOptionActive();
182
- this._changeDetectorRef.markForCheck();
183
- },
184
- enumerable: true,
185
- configurable: true
186
- });
187
- Object.defineProperty(TdChipsComponent.prototype, "stacked", {
188
- get: /**
189
- * @return {?}
190
- */
191
- function () {
192
- return this._stacked;
193
- },
194
- /**
195
- * stacked?: boolean
196
- * Set stacked or horizontal chips depending on value.
197
- * Defaults to false.
198
- */
199
- set: /**
200
- * stacked?: boolean
201
- * Set stacked or horizontal chips depending on value.
202
- * Defaults to false.
203
- * @param {?} stacked
204
- * @return {?}
205
- */
206
- function (stacked) {
207
- this._stacked = coerceBooleanProperty(stacked);
208
- },
209
- enumerable: true,
210
- configurable: true
211
- });
212
- Object.defineProperty(TdChipsComponent.prototype, "inputPosition", {
213
- get: /**
214
- * @return {?}
215
- */
216
- function () {
217
- return this._inputPosition;
218
- },
219
- /**
220
- * inputPosition?: 'before' | 'after'
221
- * Set input position before or after the chips.
222
- * Defaults to 'after'.
223
- */
224
- set: /**
225
- * inputPosition?: 'before' | 'after'
226
- * Set input position before or after the chips.
227
- * Defaults to 'after'.
228
- * @param {?} inputPosition
229
- * @return {?}
230
- */
231
- function (inputPosition) {
232
- this._inputPosition = inputPosition;
233
- },
234
- enumerable: true,
235
- configurable: true
236
- });
237
- Object.defineProperty(TdChipsComponent.prototype, "requireMatch", {
238
- get: /**
239
- * @return {?}
240
- */
241
- function () {
242
- return this._requireMatch;
243
- },
244
- /**
245
- * requireMatch?: boolean
246
- * Blocks custom inputs and only allows selections from the autocomplete list.
247
- */
248
- set: /**
249
- * requireMatch?: boolean
250
- * Blocks custom inputs and only allows selections from the autocomplete list.
251
- * @param {?} requireMatch
252
- * @return {?}
253
- */
254
- function (requireMatch) {
255
- this._requireMatch = coerceBooleanProperty(requireMatch);
256
- },
257
- enumerable: true,
258
- configurable: true
259
- });
260
- Object.defineProperty(TdChipsComponent.prototype, "required", {
261
- get: /**
262
- * @return {?}
263
- */
264
- function () {
265
- return this._required;
266
- },
267
- /**
268
- * required?: boolean
269
- * Value is set to true if at least one chip is needed
270
- * Defaults to false
271
- */
272
- set: /**
273
- * required?: boolean
274
- * Value is set to true if at least one chip is needed
275
- * Defaults to false
276
- * @param {?} required
277
- * @return {?}
278
- */
279
- function (required) {
280
- this._required = coerceBooleanProperty(required);
281
- },
282
- enumerable: true,
283
- configurable: true
284
- });
285
- Object.defineProperty(TdChipsComponent.prototype, "chipAddition", {
286
- get: /**
287
- * @return {?}
288
- */
289
- function () {
290
- return this._chipAddition;
291
- },
292
- /**
293
- * chipAddition?: boolean
294
- * Disables the ability to add chips. When setting disabled as true, this will be overriden.
295
- * Defaults to true.
296
- */
297
- set: /**
298
- * chipAddition?: boolean
299
- * Disables the ability to add chips. When setting disabled as true, this will be overriden.
300
- * Defaults to true.
301
- * @param {?} chipAddition
302
- * @return {?}
303
- */
304
- function (chipAddition) {
305
- this._chipAddition = chipAddition;
306
- this._toggleInput();
307
- },
308
- enumerable: true,
309
- configurable: true
310
- });
311
- Object.defineProperty(TdChipsComponent.prototype, "canAddChip", {
312
- /**
313
- * Checks if not in disabled state and if chipAddition is set to 'true'
314
- * States if a chip can be added and if the input is available
315
- */
316
- get: /**
317
- * Checks if not in disabled state and if chipAddition is set to 'true'
318
- * States if a chip can be added and if the input is available
319
- * @return {?}
320
- */
321
- function () {
322
- return this.chipAddition && !this.disabled;
323
- },
324
- enumerable: true,
325
- configurable: true
326
- });
327
- Object.defineProperty(TdChipsComponent.prototype, "chipRemoval", {
328
- get: /**
329
- * @return {?}
330
- */
331
- function () {
332
- return this._chipRemoval;
333
- },
334
- /**
335
- * chipRemoval?: boolean
336
- * Disables the ability to remove chips. If it doesn't exist chip remmoval defaults to true.
337
- * When setting disabled as true, this will be overriden to false.
338
- */
339
- set: /**
340
- * chipRemoval?: boolean
341
- * Disables the ability to remove chips. If it doesn't exist chip remmoval defaults to true.
342
- * When setting disabled as true, this will be overriden to false.
343
- * @param {?} chipRemoval
344
- * @return {?}
345
- */
346
- function (chipRemoval) {
347
- this._chipRemoval = chipRemoval;
348
- },
349
- enumerable: true,
350
- configurable: true
351
- });
352
- Object.defineProperty(TdChipsComponent.prototype, "canRemoveChip", {
353
- /**
354
- * Checks if not in disabled state and if chipRemoval is set to 'true'
355
- * States if a chip can be removed
356
- */
357
- get: /**
358
- * Checks if not in disabled state and if chipRemoval is set to 'true'
359
- * States if a chip can be removed
360
- * @return {?}
361
- */
362
- function () {
363
- return this.chipRemoval && !this.disabled;
364
- },
365
- enumerable: true,
366
- configurable: true
367
- });
368
- Object.defineProperty(TdChipsComponent.prototype, "displayPlaceHolder", {
369
- /**
370
- * returns the display placeholder
371
- */
372
- get: /**
373
- * returns the display placeholder
374
- * @return {?}
375
- */
376
- function () {
377
- if (!this.canAddChip) {
378
- return '';
379
- }
380
- return this._required ? this.placeholder + " *" : this.placeholder;
381
- },
382
- enumerable: true,
383
- configurable: true
384
- });
385
- Object.defineProperty(TdChipsComponent.prototype, "color", {
386
- get: /**
387
- * @return {?}
388
- */
389
- function () {
390
- return this._color;
391
- },
392
- /**
393
- * color?: 'primary' | 'accent' | 'warn'
394
- * Sets the color for the input and focus/selected state of the chips.
395
- * Defaults to 'primary'
396
- */
397
- set: /**
398
- * color?: 'primary' | 'accent' | 'warn'
399
- * Sets the color for the input and focus/selected state of the chips.
400
- * Defaults to 'primary'
401
- * @param {?} color
402
- * @return {?}
403
- */
404
- function (color) {
405
- if (color) {
406
- this._renderer.removeClass(this._elementRef.nativeElement, 'mat-' + this._color);
407
- this._color = color;
408
- this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);
409
- }
410
- },
411
- enumerable: true,
412
- configurable: true
413
- });
414
- Object.defineProperty(TdChipsComponent.prototype, "tabIndex", {
415
- /**
416
- * Hostbinding to set the a11y of the TdChipsComponent depending on its state
417
- */
418
- get: /**
419
- * Hostbinding to set the a11y of the TdChipsComponent depending on its state
420
- * @return {?}
421
- */
422
- function () {
423
- return this.disabled ? -1 : this._tabIndex;
424
- },
425
- enumerable: true,
426
- configurable: true
427
- });
428
- /**
429
- * Listens to host focus event to act on it
430
- */
431
- /**
432
- * Listens to host focus event to act on it
433
- * @param {?} event
434
- * @return {?}
435
- */
436
- TdChipsComponent.prototype.focusListener = /**
437
- * Listens to host focus event to act on it
438
- * @param {?} event
439
- * @return {?}
440
- */
441
- function (event) {
442
- // should only focus if its not via mousedown to prevent clashing with autocomplete
443
- if (!this._isMousedown) {
444
- this.focus();
445
- }
446
- event.preventDefault();
447
- };
448
- /**
449
- * Listens to host mousedown event to act on it
450
- */
451
- /**
452
- * Listens to host mousedown event to act on it
453
- * @param {?} event
454
- * @return {?}
455
- */
456
- TdChipsComponent.prototype.mousedownListener = /**
457
- * Listens to host mousedown event to act on it
458
- * @param {?} event
459
- * @return {?}
460
- */
461
- function (event) {
462
- var _this = this;
463
- // sets a flag to know if there was a mousedown and then it returns it back to false
464
- this._isMousedown = true;
465
- timer()
466
- .toPromise()
467
- .then((/**
468
- * @return {?}
469
- */
470
- function () {
471
- _this._isMousedown = false;
472
- }));
473
- };
474
- /**
475
- * If clicking on :host or `td-chips-wrapper`, then we stop the click propagation so the autocomplete
476
- * doesnt close automatically.
477
- */
478
- /**
479
- * If clicking on :host or `td-chips-wrapper`, then we stop the click propagation so the autocomplete
480
- * doesnt close automatically.
481
- * @param {?} event
482
- * @return {?}
483
- */
484
- TdChipsComponent.prototype.clickListener = /**
485
- * If clicking on :host or `td-chips-wrapper`, then we stop the click propagation so the autocomplete
486
- * doesnt close automatically.
487
- * @param {?} event
488
- * @return {?}
489
- */
490
- function (event) {
491
- /** @type {?} */
492
- var clickTarget = (/** @type {?} */ (event.target));
493
- if (clickTarget === this._elementRef.nativeElement || clickTarget.className.indexOf('td-chips-wrapper') > -1) {
494
- this.focus();
495
- event.preventDefault();
496
- event.stopPropagation();
497
- }
498
- };
499
- /**
500
- * Listens to host keydown event to act on it depending on the keypress
501
- */
502
- /**
503
- * Listens to host keydown event to act on it depending on the keypress
504
- * @param {?} event
505
- * @return {?}
506
- */
507
- TdChipsComponent.prototype.keydownListener = /**
508
- * Listens to host keydown event to act on it depending on the keypress
509
- * @param {?} event
510
- * @return {?}
511
- */
512
- function (event) {
513
- var _this = this;
514
- switch (event.keyCode) {
515
- case TAB:
516
- // if tabing out, then unfocus the component
517
- timer()
518
- .toPromise()
519
- .then((/**
520
- * @return {?}
521
- */
522
- function () {
523
- _this.removeFocusedState();
524
- }));
525
- break;
526
- case ESCAPE:
527
- if (this._inputChild.focused) {
528
- this._nativeInput.nativeElement.blur();
529
- this.removeFocusedState();
530
- this._closeAutocomplete();
531
- }
532
- else {
533
- this.focus();
534
- }
535
- break;
536
- default:
537
- // default
538
- }
539
- };
540
- /**
541
- * @return {?}
542
- */
543
- TdChipsComponent.prototype.ngOnInit = /**
544
- * @return {?}
545
- */
546
- function () {
547
- var _this = this;
548
- this._inputValueChangesSubs = this.inputControl.valueChanges
549
- .pipe(debounceTime(this.debounce))
550
- .subscribe((/**
551
- * @param {?} value
552
- * @return {?}
553
- */
554
- function (value) {
555
- _this.inputChange.emit(value ? value : '');
556
- }));
557
- this._changeDetectorRef.markForCheck();
558
- };
559
- /**
560
- * @return {?}
561
- */
562
- TdChipsComponent.prototype.ngAfterViewInit = /**
563
- * @return {?}
564
- */
565
- function () {
566
- this._watchOutsideClick();
567
- this._changeDetectorRef.markForCheck();
568
- };
569
- /**
570
- * @return {?}
571
- */
572
- TdChipsComponent.prototype.ngDoCheck = /**
573
- * @return {?}
574
- */
575
- function () {
576
- // Throw onChange event only if array changes size.
577
- if (this.value && this.value.length !== this._length) {
578
- this._length = this.value.length;
579
- this.onChange(this.value);
580
- }
581
- };
582
- /**
583
- * @return {?}
584
- */
585
- TdChipsComponent.prototype.ngOnDestroy = /**
586
- * @return {?}
587
- */
588
- function () {
589
- this._outsideClickSubs.unsubscribe();
590
- this._inputValueChangesSubs.unsubscribe();
591
- };
592
- /**
593
- * @return {?}
594
- */
595
- TdChipsComponent.prototype._setInternalClick = /**
596
- * @return {?}
597
- */
598
- function () {
599
- this._internalClick = true;
600
- };
601
- /** Method executed when the disabled value changes */
602
- /**
603
- * Method executed when the disabled value changes
604
- * @param {?} v
605
- * @return {?}
606
- */
607
- TdChipsComponent.prototype.onDisabledChange = /**
608
- * Method executed when the disabled value changes
609
- * @param {?} v
610
- * @return {?}
611
- */
612
- function (v) {
613
- this._toggleInput();
614
- };
615
- /**
616
- * Method that is executed when trying to create a new chip from the autocomplete.
617
- * It check if [requireMatch] is enabled, and tries to add the first active option
618
- * else if just adds the value thats on the input
619
- * returns 'true' if successful, 'false' if it fails.
620
- */
621
- /**
622
- * Method that is executed when trying to create a new chip from the autocomplete.
623
- * It check if [requireMatch] is enabled, and tries to add the first active option
624
- * else if just adds the value thats on the input
625
- * returns 'true' if successful, 'false' if it fails.
626
- * @return {?}
627
- */
628
- TdChipsComponent.prototype._handleAddChip = /**
629
- * Method that is executed when trying to create a new chip from the autocomplete.
630
- * It check if [requireMatch] is enabled, and tries to add the first active option
631
- * else if just adds the value thats on the input
632
- * returns 'true' if successful, 'false' if it fails.
633
- * @return {?}
634
- */
635
- function () {
636
- /** @type {?} */
637
- var value;
638
- if (this.requireMatch) {
639
- /** @type {?} */
640
- var selectedOptions = this._options.toArray().filter((/**
641
- * @param {?} option
642
- * @return {?}
643
- */
644
- function (option) {
645
- return option.active;
646
- }));
647
- if (selectedOptions.length > 0) {
648
- value = selectedOptions[0].value;
649
- selectedOptions[0].setInactiveStyles();
650
- }
651
- if (!value) {
652
- return false;
653
- }
654
- }
655
- else {
656
- // if there is a selection, then use that
657
- // else use the input value as chip
658
- if (this._autocompleteTrigger.activeOption) {
659
- value = this._autocompleteTrigger.activeOption.value;
660
- this._autocompleteTrigger.activeOption.setInactiveStyles();
661
- }
662
- else {
663
- value = this._inputChild.value;
664
- if (value.trim() === '') {
665
- return false;
666
- }
667
- }
668
- }
669
- return this.addChip(value);
670
- };
671
- /**
672
- * Method thats exectuted when trying to add a value as chip
673
- * returns 'true' if successful, 'false' if it fails.
674
- */
675
- /**
676
- * Method thats exectuted when trying to add a value as chip
677
- * returns 'true' if successful, 'false' if it fails.
678
- * @param {?} value
679
- * @return {?}
680
- */
681
- TdChipsComponent.prototype.addChip = /**
682
- * Method thats exectuted when trying to add a value as chip
683
- * returns 'true' if successful, 'false' if it fails.
684
- * @param {?} value
685
- * @return {?}
686
- */
687
- function (value) {
688
- /**
689
- * add a debounce ms delay when reopening the autocomplete to give it time
690
- * to rerender the next list and at the correct spot
691
- */
692
- var _this = this;
693
- this._closeAutocomplete();
694
- timer(this.debounce)
695
- .toPromise()
696
- .then((/**
697
- * @return {?}
698
- */
699
- function () {
700
- _this.setFocusedState();
701
- _this._setFirstOptionActive();
702
- _this._openAutocomplete();
703
- }));
704
- this.inputControl.setValue('');
705
- // check if value is already part of the model
706
- if (this.value.findIndex((/**
707
- * @param {?} item
708
- * @return {?}
709
- */
710
- function (item) { return _this.compareWith(item, value); })) > -1) {
711
- return false;
712
- }
713
- this.value.push(value);
714
- this.add.emit(value);
715
- this.onChange(this.value);
716
- this._changeDetectorRef.markForCheck();
717
- return true;
718
- };
719
- /**
720
- * Method that is executed when trying to remove a chip.
721
- * returns 'true' if successful, 'false' if it fails.
722
- */
723
- /**
724
- * Method that is executed when trying to remove a chip.
725
- * returns 'true' if successful, 'false' if it fails.
726
- * @param {?} index
727
- * @return {?}
728
- */
729
- TdChipsComponent.prototype.removeChip = /**
730
- * Method that is executed when trying to remove a chip.
731
- * returns 'true' if successful, 'false' if it fails.
732
- * @param {?} index
733
- * @return {?}
734
- */
735
- function (index) {
736
- /** @type {?} */
737
- var removedValues = this.value.splice(index, 1);
738
- if (removedValues.length === 0) {
739
- return false;
740
- }
741
- /**
742
- * Checks if deleting last single chip, to focus input afterwards
743
- * Else check if its not the last chip of the list to focus the next one.
744
- */
745
- if (index === this._totalChips - 1 && index === 0) {
746
- this._inputChild.focus();
747
- }
748
- else if (index < this._totalChips - 1) {
749
- this._focusChip(index + 1);
750
- }
751
- else if (index > 0) {
752
- this._focusChip(index - 1);
753
- }
754
- this.remove.emit(removedValues[0]);
755
- this.onChange(this.value);
756
- this.inputControl.setValue('');
757
- this._changeDetectorRef.markForCheck();
758
- return true;
759
- };
760
- /**
761
- * Sets blur of chip and sends out event
762
- */
763
- /**
764
- * Sets blur of chip and sends out event
765
- * @param {?} event
766
- * @param {?} value
767
- * @return {?}
768
- */
769
- TdChipsComponent.prototype._handleChipBlur = /**
770
- * Sets blur of chip and sends out event
771
- * @param {?} event
772
- * @param {?} value
773
- * @return {?}
774
- */
775
- function (event, value) {
776
- this.chipBlur.emit(value);
777
- };
778
- /**
779
- * Sets focus of chip and sends out event
780
- */
781
- /**
782
- * Sets focus of chip and sends out event
783
- * @param {?} event
784
- * @param {?} value
785
- * @return {?}
786
- */
787
- TdChipsComponent.prototype._handleChipFocus = /**
788
- * Sets focus of chip and sends out event
789
- * @param {?} event
790
- * @param {?} value
791
- * @return {?}
792
- */
793
- function (event, value) {
794
- this.setFocusedState();
795
- this.chipFocus.emit(value);
796
- };
797
- /**
798
- * @return {?}
799
- */
800
- TdChipsComponent.prototype._handleFocus = /**
801
- * @return {?}
802
- */
803
- function () {
804
- this.setFocusedState();
805
- this._setFirstOptionActive();
806
- return true;
807
- };
808
- /**
809
- * Sets focus state of the component
810
- */
811
- /**
812
- * Sets focus state of the component
813
- * @return {?}
814
- */
815
- TdChipsComponent.prototype.setFocusedState = /**
816
- * Sets focus state of the component
817
- * @return {?}
818
- */
819
- function () {
820
- if (!this.disabled) {
821
- this._focused = true;
822
- this._tabIndex = -1;
823
- this._changeDetectorRef.markForCheck();
824
- }
825
- };
826
- /**
827
- * Removes focus state of the component
828
- */
829
- /**
830
- * Removes focus state of the component
831
- * @return {?}
832
- */
833
- TdChipsComponent.prototype.removeFocusedState = /**
834
- * Removes focus state of the component
835
- * @return {?}
836
- */
837
- function () {
838
- this._focused = false;
839
- this._tabIndex = 0;
840
- this._changeDetectorRef.markForCheck();
841
- };
842
- /**
843
- * Programmatically focus the input or first chip. Since its the component entry point
844
- * depending if a user can add or remove chips
845
- */
846
- /**
847
- * Programmatically focus the input or first chip. Since its the component entry point
848
- * depending if a user can add or remove chips
849
- * @return {?}
850
- */
851
- TdChipsComponent.prototype.focus = /**
852
- * Programmatically focus the input or first chip. Since its the component entry point
853
- * depending if a user can add or remove chips
854
- * @return {?}
855
- */
856
- function () {
857
- if (this.canAddChip) {
858
- this._inputChild.focus();
859
- }
860
- else if (!this.disabled) {
861
- this._focusFirstChip();
862
- }
863
- };
864
- /**
865
- * Passes relevant input key presses.
866
- */
867
- /**
868
- * Passes relevant input key presses.
869
- * @param {?} event
870
- * @return {?}
871
- */
872
- TdChipsComponent.prototype._inputKeydown = /**
873
- * Passes relevant input key presses.
874
- * @param {?} event
875
- * @return {?}
876
- */
877
- function (event) {
878
- switch (event.keyCode) {
879
- case UP_ARROW:
880
- /**
881
- * Since the first item is highlighted on [requireMatch], we need to inactivate it
882
- * when pressing the up key
883
- */
884
- if (this.requireMatch) {
885
- /** @type {?} */
886
- var length_1 = this._options.length;
887
- if (length_1 > 1 && this._options.toArray()[0].active && this._internalActivateOption) {
888
- this._options.toArray()[0].setInactiveStyles();
889
- this._internalActivateOption = false;
890
- // prevent default window scrolling
891
- event.preventDefault();
892
- }
893
- }
894
- break;
895
- case LEFT_ARROW:
896
- case DELETE:
897
- case BACKSPACE:
898
- this._closeAutocomplete();
899
- /** Check to see if input is empty when pressing left arrow to move to the last chip */
900
- if (!this._inputChild.value) {
901
- this._focusLastChip();
902
- // prevent default window scrolling
903
- event.preventDefault();
904
- }
905
- break;
906
- case RIGHT_ARROW:
907
- this._closeAutocomplete();
908
- /** Check to see if input is empty when pressing right arrow to move to the first chip */
909
- if (!this._inputChild.value) {
910
- this._focusFirstChip();
911
- // prevent default window scrolling
912
- event.preventDefault();
913
- }
914
- break;
915
- default:
916
- // default
917
- }
918
- };
919
- /**
920
- * Passes relevant chip key presses.
921
- */
922
- /**
923
- * Passes relevant chip key presses.
924
- * @param {?} event
925
- * @param {?} index
926
- * @return {?}
927
- */
928
- TdChipsComponent.prototype._chipKeydown = /**
929
- * Passes relevant chip key presses.
930
- * @param {?} event
931
- * @param {?} index
932
- * @return {?}
933
- */
934
- function (event, index) {
935
- switch (event.keyCode) {
936
- case DELETE:
937
- case BACKSPACE:
938
- /** Check to see if we can delete a chip */
939
- if (this.canRemoveChip) {
940
- this.removeChip(index);
941
- }
942
- break;
943
- case UP_ARROW:
944
- case LEFT_ARROW:
945
- /**
946
- * Check to see if left/down arrow was pressed while focusing the first chip to focus input next
947
- * Also check if input should be focused
948
- */
949
- if (index === 0) {
950
- // only try to target input if pressing left
951
- if (this.canAddChip && event.keyCode === LEFT_ARROW) {
952
- this._inputChild.focus();
953
- }
954
- else {
955
- this._focusLastChip();
956
- }
957
- }
958
- else if (index > 0) {
959
- this._focusChip(index - 1);
960
- }
961
- // prevent default window scrolling
962
- event.preventDefault();
963
- break;
964
- case DOWN_ARROW:
965
- case RIGHT_ARROW:
966
- /**
967
- * Check to see if right/up arrow was pressed while focusing the last chip to focus input next
968
- * Also check if input should be focused
969
- */
970
- if (index === this._totalChips - 1) {
971
- // only try to target input if pressing right
972
- if (this.canAddChip && event.keyCode === RIGHT_ARROW) {
973
- this._inputChild.focus();
974
- }
975
- else {
976
- this._focusFirstChip();
977
- }
978
- }
979
- else if (index < this._totalChips - 1) {
980
- this._focusChip(index + 1);
981
- }
982
- // prevent default window scrolling
983
- event.preventDefault();
984
- break;
985
- default:
986
- // default
987
- }
988
- };
989
- /**
990
- * Method to remove from display the value added from the autocomplete since it goes directly as chip.
991
- */
992
- /**
993
- * Method to remove from display the value added from the autocomplete since it goes directly as chip.
994
- * @return {?}
995
- */
996
- TdChipsComponent.prototype._removeInputDisplay = /**
997
- * Method to remove from display the value added from the autocomplete since it goes directly as chip.
998
- * @return {?}
999
- */
1000
- function () {
1001
- return '';
1002
- };
1003
- /**
1004
- * Method to open the autocomplete manually if its not already opened
1005
- */
1006
- /**
1007
- * Method to open the autocomplete manually if its not already opened
1008
- * @return {?}
1009
- */
1010
- TdChipsComponent.prototype._openAutocomplete = /**
1011
- * Method to open the autocomplete manually if its not already opened
1012
- * @return {?}
1013
- */
1014
- function () {
1015
- if (!this._autocompleteTrigger.panelOpen) {
1016
- this._autocompleteTrigger.openPanel();
1017
- this._changeDetectorRef.markForCheck();
1018
- }
1019
- };
1020
- /**
1021
- * Method to close the autocomplete manually if its not already closed
1022
- */
1023
- /**
1024
- * Method to close the autocomplete manually if its not already closed
1025
- * @return {?}
1026
- */
1027
- TdChipsComponent.prototype._closeAutocomplete = /**
1028
- * Method to close the autocomplete manually if its not already closed
1029
- * @return {?}
1030
- */
1031
- function () {
1032
- if (this._autocompleteTrigger.panelOpen) {
1033
- this._autocompleteTrigger.closePanel();
1034
- this._changeDetectorRef.markForCheck();
1035
- }
1036
- };
1037
- Object.defineProperty(TdChipsComponent.prototype, "_totalChips", {
1038
- /**
1039
- * Get total of chips
1040
- */
1041
- get: /**
1042
- * Get total of chips
1043
- * @return {?}
1044
- */
1045
- function () {
1046
- /** @type {?} */
1047
- var chips = this._chipsChildren.toArray();
1048
- return chips.length;
1049
- },
1050
- enumerable: true,
1051
- configurable: true
1052
- });
1053
- /**
1054
- * Method to focus a desired chip by index
1055
- */
1056
- /**
1057
- * Method to focus a desired chip by index
1058
- * @private
1059
- * @param {?} index
1060
- * @return {?}
1061
- */
1062
- TdChipsComponent.prototype._focusChip = /**
1063
- * Method to focus a desired chip by index
1064
- * @private
1065
- * @param {?} index
1066
- * @return {?}
1067
- */
1068
- function (index) {
1069
- /** check to see if index exists in the array before focusing */
1070
- if (index > -1 && this._totalChips > index) {
1071
- this._chipsChildren.toArray()[index].focus();
1072
- }
1073
- };
1074
- /** Method to focus first chip */
1075
- /**
1076
- * Method to focus first chip
1077
- * @private
1078
- * @return {?}
1079
- */
1080
- TdChipsComponent.prototype._focusFirstChip = /**
1081
- * Method to focus first chip
1082
- * @private
1083
- * @return {?}
1084
- */
1085
- function () {
1086
- this._focusChip(0);
1087
- };
1088
- /** Method to focus last chip */
1089
- /**
1090
- * Method to focus last chip
1091
- * @private
1092
- * @return {?}
1093
- */
1094
- TdChipsComponent.prototype._focusLastChip = /**
1095
- * Method to focus last chip
1096
- * @private
1097
- * @return {?}
1098
- */
1099
- function () {
1100
- this._focusChip(this._totalChips - 1);
1101
- };
1102
- /**
1103
- * Method to toggle the disable state of input
1104
- * Checks if not in disabled state and if chipAddition is set to 'true'
1105
- */
1106
- /**
1107
- * Method to toggle the disable state of input
1108
- * Checks if not in disabled state and if chipAddition is set to 'true'
1109
- * @private
1110
- * @return {?}
1111
- */
1112
- TdChipsComponent.prototype._toggleInput = /**
1113
- * Method to toggle the disable state of input
1114
- * Checks if not in disabled state and if chipAddition is set to 'true'
1115
- * @private
1116
- * @return {?}
1117
- */
1118
- function () {
1119
- if (this.canAddChip) {
1120
- this.inputControl.enable();
1121
- }
1122
- else {
1123
- this.inputControl.disable();
1124
- }
1125
- this._changeDetectorRef.markForCheck();
1126
- };
1127
- /**
1128
- * Sets first option as active to let the user know which one will be added when pressing enter
1129
- * Only if [requireMatch] has been set
1130
- */
1131
- /**
1132
- * Sets first option as active to let the user know which one will be added when pressing enter
1133
- * Only if [requireMatch] has been set
1134
- * @private
1135
- * @return {?}
1136
- */
1137
- TdChipsComponent.prototype._setFirstOptionActive = /**
1138
- * Sets first option as active to let the user know which one will be added when pressing enter
1139
- * Only if [requireMatch] has been set
1140
- * @private
1141
- * @return {?}
1142
- */
1143
- function () {
1144
- var _this = this;
1145
- if (this.requireMatch) {
1146
- // need to use a timer here to wait until the autocomplete has been opened (end of queue)
1147
- timer()
1148
- .toPromise()
1149
- .then((/**
1150
- * @return {?}
1151
- */
1152
- function () {
1153
- if (_this.focused && _this._options && _this._options.length > 0) {
1154
- // clean up of previously active options
1155
- _this._options.toArray().forEach((/**
1156
- * @param {?} option
1157
- * @return {?}
1158
- */
1159
- function (option) {
1160
- option.setInactiveStyles();
1161
- }));
1162
- // set the first one as active
1163
- _this._options.toArray()[0].setActiveStyles();
1164
- _this._internalActivateOption = true;
1165
- _this._changeDetectorRef.markForCheck();
1166
- }
1167
- }));
1168
- }
1169
- };
1170
- /**
1171
- * Watches clicks outside of the component to remove the focus
1172
- * The autocomplete panel is considered inside the component so we
1173
- * need to use a flag to find out when its clicked.
1174
- */
1175
- /**
1176
- * Watches clicks outside of the component to remove the focus
1177
- * The autocomplete panel is considered inside the component so we
1178
- * need to use a flag to find out when its clicked.
1179
- * @private
1180
- * @return {?}
1181
- */
1182
- TdChipsComponent.prototype._watchOutsideClick = /**
1183
- * Watches clicks outside of the component to remove the focus
1184
- * The autocomplete panel is considered inside the component so we
1185
- * need to use a flag to find out when its clicked.
1186
- * @private
1187
- * @return {?}
1188
- */
1189
- function () {
1190
- var _this = this;
1191
- if (this._document) {
1192
- this._outsideClickSubs = merge(fromEvent(this._document, 'click'), fromEvent(this._document, 'touchend'))
1193
- .pipe(debounceTime(this._touchendDebounce), filter((/**
1194
- * @param {?} event
1195
- * @return {?}
1196
- */
1197
- function (event) {
1198
- /** @type {?} */
1199
- var clickTarget = (/** @type {?} */ (event.target));
1200
- setTimeout((/**
1201
- * @return {?}
1202
- */
1203
- function () {
1204
- _this._internalClick = false;
1205
- }));
1206
- return (_this.focused &&
1207
- clickTarget !== _this._elementRef.nativeElement &&
1208
- !_this._elementRef.nativeElement.contains(clickTarget) &&
1209
- !_this._internalClick);
1210
- })))
1211
- .subscribe((/**
1212
- * @return {?}
1213
- */
1214
- function () {
1215
- if (_this.focused) {
1216
- _this._autocompleteTrigger.closePanel();
1217
- _this.removeFocusedState();
1218
- _this.onTouched();
1219
- _this._changeDetectorRef.markForCheck();
1220
- }
1221
- }));
1222
- }
1223
- return undefined;
1224
- };
1225
- TdChipsComponent.decorators = [
1226
- { type: Component, args: [{
1227
- providers: [
1228
- {
1229
- provide: NG_VALUE_ACCESSOR,
1230
- useExisting: forwardRef((/**
1231
- * @return {?}
1232
- */
1233
- function () { return TdChipsComponent; })),
1234
- multi: true,
1235
- },
1236
- ],
1237
- selector: 'td-chips',
1238
- inputs: ['disabled', 'value'],
1239
- template: "<div\n class=\"td-chips-wrapper\"\n [class.td-chips-stacked]=\"stacked\"\n [class.td-chips-input-before-position]=\"inputPosition === 'before'\"\n>\n <ng-template let-chip let-first=\"first\" let-index=\"index\" ngFor [ngForOf]=\"value\">\n <mat-basic-chip\n [class.td-chip-disabled]=\"disabled\"\n [class.td-chip-after-pad]=\"!canRemoveChip\"\n [disableRipple]=\"true\"\n [color]=\"color\"\n (keydown)=\"_chipKeydown($event, index)\"\n (blur)=\"_handleChipBlur($event, chip)\"\n (focus)=\"_handleChipFocus($event, chip)\"\n >\n <div class=\"td-chip\" [class.td-chip-stacked]=\"stacked\">\n <span class=\"td-chip-content\">\n <span *ngIf=\"!_chipTemplate?.templateRef\">{{ chip }}</span>\n <ng-template\n *ngIf=\"_chipTemplate?.templateRef\"\n [ngTemplateOutlet]=\"_chipTemplate?.templateRef\"\n [ngTemplateOutletContext]=\"{ chip: chip }\"\n ></ng-template>\n </span>\n <mat-icon *ngIf=\"canRemoveChip\" class=\"td-chip-removal\" (click)=\"_internalClick = removeChip(index)\">\n cancel\n </mat-icon>\n </div>\n </mat-basic-chip>\n </ng-template>\n <mat-form-field\n floatLabel=\"never\"\n class=\"td-chips-form-field\"\n [style.width.px]=\"canAddChip ? null : 0\"\n [style.height.px]=\"canAddChip ? null : 0\"\n [color]=\"color\"\n >\n <input\n matInput\n #input\n [tabIndex]=\"-1\"\n [matAutocomplete]=\"autocomplete\"\n [formControl]=\"inputControl\"\n [placeholder]=\"displayPlaceHolder\"\n (keydown)=\"_inputKeydown($event)\"\n (keyup.enter)=\"_handleAddChip()\"\n (focus)=\"_handleFocus()\"\n />\n </mat-form-field>\n <mat-autocomplete\n #autocomplete=\"matAutocomplete\"\n [displayWith]=\"_removeInputDisplay\"\n (optionSelected)=\"addChip($event.option.value)\"\n >\n <ng-template let-item let-first=\"first\" ngFor [ngForOf]=\"items\">\n <mat-option (click)=\"_setInternalClick()\" [value]=\"item\">\n <span *ngIf=\"!_autocompleteOptionTemplate?.templateRef\">{{ item }}</span>\n <ng-template\n *ngIf=\"_autocompleteOptionTemplate?.templateRef\"\n [ngTemplateOutlet]=\"_autocompleteOptionTemplate?.templateRef\"\n [ngTemplateOutletContext]=\"{ option: item }\"\n ></ng-template>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n</div>\n<div *ngIf=\"chipAddition\" class=\"mat-form-field-underline\" [class.mat-disabled]=\"disabled\">\n <span class=\"mat-form-field-ripple\" [class.mat-focused]=\"focused\"></span>\n</div>\n<ng-content></ng-content>\n",
1240
- changeDetection: ChangeDetectionStrategy.OnPush,
1241
- styles: [":host{display:block;padding:0 5px;min-height:48px}:host .td-chips-wrapper{min-height:42px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:start;align-items:flex-start}:host .td-chips-wrapper.td-chips-stacked .mat-basic-chip,:host .td-chips-wrapper.td-chips-stacked .td-chips-form-field{width:100%}:host .td-chips-wrapper.td-chips-input-before-position .td-chips-form-field{-ms-flex-order:-1;order:-1}:host .td-chip,:host .td-chip>.td-chip-content{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;max-width:100%;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;-ms-flex-pack:start;justify-content:flex-start;min-width:0}:host .td-chip.td-chip-stacked,:host .td-chip>.td-chip-content.td-chip-stacked{-ms-flex-pack:justify;justify-content:space-between}:host ::ng-deep .mat-form-field-wrapper{padding-bottom:2px}:host ::ng-deep .mat-basic-chip{display:inline-block;cursor:default;border-radius:16px;margin:8px 8px 0 0;box-sizing:border-box;max-width:100%;position:relative}html[dir=rtl] :host ::ng-deep .mat-basic-chip{margin:8px 0 0 8px;unicode-bidi:embed}body[dir=rtl] :host ::ng-deep .mat-basic-chip{margin:8px 0 0 8px;unicode-bidi:embed}[dir=rtl] :host ::ng-deep .mat-basic-chip{margin:8px 0 0 8px;unicode-bidi:embed}:host ::ng-deep .mat-basic-chip bdo[dir=rtl]{direction:rtl;unicode-bidi:bidi-override}:host ::ng-deep .mat-basic-chip bdo[dir=ltr]{direction:ltr;unicode-bidi:bidi-override}:host ::ng-deep .mat-basic-chip .td-chip{min-height:32px;line-height:32px;font-size:13px;padding:0 0 0 12px}html[dir=rtl] :host ::ng-deep .mat-basic-chip .td-chip{padding:0 12px 0 0;unicode-bidi:embed}body[dir=rtl] :host ::ng-deep .mat-basic-chip .td-chip{padding:0 12px 0 0;unicode-bidi:embed}[dir=rtl] :host ::ng-deep .mat-basic-chip .td-chip{padding:0 12px 0 0;unicode-bidi:embed}:host ::ng-deep .mat-basic-chip .td-chip bdo[dir=rtl]{direction:rtl;unicode-bidi:bidi-override}:host ::ng-deep .mat-basic-chip .td-chip bdo[dir=ltr]{direction:ltr;unicode-bidi:bidi-override}:host ::ng-deep .mat-basic-chip .td-chip [td-chip-avatar]{display:inline-block;-ms-flex-order:-20;order:-20;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;text-align:center;height:32px;width:32px;margin:0 8px 0 -12px;border-radius:50%;-ms-flex:0 0 auto;flex:0 0 auto;box-sizing:border-box}html[dir=rtl] :host ::ng-deep .mat-basic-chip .td-chip [td-chip-avatar]{margin:0 -12px 0 8px;unicode-bidi:embed}body[dir=rtl] :host ::ng-deep .mat-basic-chip .td-chip [td-chip-avatar]{margin:0 -12px 0 8px;unicode-bidi:embed}[dir=rtl] :host ::ng-deep .mat-basic-chip .td-chip [td-chip-avatar]{margin:0 -12px 0 8px;unicode-bidi:embed}:host ::ng-deep .mat-basic-chip .td-chip [td-chip-avatar] bdo[dir=rtl]{direction:rtl;unicode-bidi:bidi-override}:host ::ng-deep .mat-basic-chip .td-chip [td-chip-avatar] bdo[dir=ltr]{direction:ltr;unicode-bidi:bidi-override}:host ::ng-deep .mat-basic-chip.td-chip-after-pad{padding:0 12px 0 0}html[dir=rtl] :host ::ng-deep .mat-basic-chip.td-chip-after-pad{padding:0 0 0 12px;unicode-bidi:embed}body[dir=rtl] :host ::ng-deep .mat-basic-chip.td-chip-after-pad{padding:0 0 0 12px;unicode-bidi:embed}[dir=rtl] :host ::ng-deep .mat-basic-chip.td-chip-after-pad{padding:0 0 0 12px;unicode-bidi:embed}:host ::ng-deep .mat-basic-chip.td-chip-after-pad bdo[dir=rtl]{direction:rtl;unicode-bidi:bidi-override}:host ::ng-deep .mat-basic-chip.td-chip-after-pad bdo[dir=ltr]{direction:ltr;unicode-bidi:bidi-override}:host ::ng-deep .mat-basic-chip mat-icon.td-chip-removal{margin:0 4px;font-size:21px;line-height:22px}:host ::ng-deep .mat-basic-chip mat-icon.td-chip-removal:hover{cursor:pointer}:host ::ng-deep .td-chips-stacked .mat-basic-chip{margin:4px 0}:host ::ng-deep .td-chips-stacked .mat-basic-chip:first-of-type{margin:8px 0 4px}:host ::ng-deep .td-chips-stacked .mat-basic-chip:last-of-type{margin:4px 0 8px}:host .mat-form-field-underline{position:relative;height:1px;width:100%;bottom:0}:host .mat-form-field-underline.mat-disabled{background-position:0;bottom:-4px;background-color:transparent}:host .mat-form-field-underline .mat-form-field-ripple{position:absolute;height:2px;top:0;width:100%;-ms-transform-origin:50%;transform-origin:50%;-ms-transform:scaleX(.5);transform:scaleX(.5);visibility:hidden;opacity:0;transition:background-color .3s cubic-bezier(.55,0,.55,.2)}:host .mat-form-field-underline .mat-form-field-ripple.mat-focused{visibility:visible;opacity:1;-ms-transform:scaleX(1);transform:scaleX(1);transition:transform 150ms linear,background-color .3s cubic-bezier(.55,0,.55,.2)}:host.ng-invalid .mat-form-field-underline .mat-form-field-ripple{visibility:visible;opacity:1;-ms-transform:scaleX(1);transform:scaleX(1);transition:transform 150ms linear,background-color .3s cubic-bezier(.55,0,.55,.2)}:host ::ng-deep mat-form-field .mat-form-field-underline{display:none}"]
1242
- }] }
1243
- ];
1244
- /** @nocollapse */
1245
- TdChipsComponent.ctorParameters = function () { return [
1246
- { type: ElementRef },
1247
- { type: Renderer2 },
1248
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },
1249
- { type: ChangeDetectorRef }
1250
- ]; };
1251
- TdChipsComponent.propDecorators = {
1252
- _nativeInput: [{ type: ViewChild, args: ['input', { static: true },] }],
1253
- _inputChild: [{ type: ViewChild, args: [MatInput, { static: true },] }],
1254
- _autocompleteTrigger: [{ type: ViewChild, args: [MatAutocompleteTrigger, { static: true },] }],
1255
- _chipsChildren: [{ type: ViewChildren, args: [MatChip,] }],
1256
- _chipTemplate: [{ type: ContentChild, args: [TdChipDirective,] }],
1257
- _autocompleteOptionTemplate: [{ type: ContentChild, args: [TdAutocompleteOptionDirective,] }],
1258
- _options: [{ type: ViewChildren, args: [MatOption,] }],
1259
- items: [{ type: Input, args: ['items',] }],
1260
- stacked: [{ type: Input, args: ['stacked',] }],
1261
- inputPosition: [{ type: Input, args: ['inputPosition',] }],
1262
- requireMatch: [{ type: Input, args: ['requireMatch',] }],
1263
- required: [{ type: Input, args: ['required',] }],
1264
- chipAddition: [{ type: Input, args: ['chipAddition',] }],
1265
- chipRemoval: [{ type: Input, args: ['chipRemoval',] }],
1266
- placeholder: [{ type: Input }],
1267
- debounce: [{ type: Input }],
1268
- color: [{ type: Input, args: ['color',] }],
1269
- add: [{ type: Output }],
1270
- remove: [{ type: Output }],
1271
- inputChange: [{ type: Output }],
1272
- chipFocus: [{ type: Output }],
1273
- chipBlur: [{ type: Output }],
1274
- tabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],
1275
- compareWith: [{ type: Input }],
1276
- focusListener: [{ type: HostListener, args: ['focus', ['$event'],] }],
1277
- mousedownListener: [{ type: HostListener, args: ['mousedown', ['$event'],] }],
1278
- clickListener: [{ type: HostListener, args: ['click', ['$event'],] }],
1279
- keydownListener: [{ type: HostListener, args: ['keydown', ['$event'],] }]
1280
- };
1281
- return TdChipsComponent;
1282
- }(_TdChipsMixinBase));
1283
- export { TdChipsComponent };
1284
- if (false) {
1285
- /**
1286
- * @type {?}
1287
- * @private
1288
- */
1289
- TdChipsComponent.prototype._outsideClickSubs;
1290
- /**
1291
- * @type {?}
1292
- * @private
1293
- */
1294
- TdChipsComponent.prototype._inputValueChangesSubs;
1295
- /**
1296
- * @type {?}
1297
- * @private
1298
- */
1299
- TdChipsComponent.prototype._isMousedown;
1300
- /**
1301
- * @type {?}
1302
- * @private
1303
- */
1304
- TdChipsComponent.prototype._items;
1305
- /**
1306
- * @type {?}
1307
- * @private
1308
- */
1309
- TdChipsComponent.prototype._length;
1310
- /**
1311
- * @type {?}
1312
- * @private
1313
- */
1314
- TdChipsComponent.prototype._stacked;
1315
- /**
1316
- * @type {?}
1317
- * @private
1318
- */
1319
- TdChipsComponent.prototype._requireMatch;
1320
- /**
1321
- * @type {?}
1322
- * @private
1323
- */
1324
- TdChipsComponent.prototype._color;
1325
- /**
1326
- * @type {?}
1327
- * @private
1328
- */
1329
- TdChipsComponent.prototype._inputPosition;
1330
- /**
1331
- * @type {?}
1332
- * @private
1333
- */
1334
- TdChipsComponent.prototype._chipAddition;
1335
- /**
1336
- * @type {?}
1337
- * @private
1338
- */
1339
- TdChipsComponent.prototype._chipRemoval;
1340
- /**
1341
- * @type {?}
1342
- * @private
1343
- */
1344
- TdChipsComponent.prototype._focused;
1345
- /**
1346
- * @type {?}
1347
- * @private
1348
- */
1349
- TdChipsComponent.prototype._required;
1350
- /**
1351
- * @type {?}
1352
- * @private
1353
- */
1354
- TdChipsComponent.prototype._tabIndex;
1355
- /**
1356
- * @type {?}
1357
- * @private
1358
- */
1359
- TdChipsComponent.prototype._touchendDebounce;
1360
- /** @type {?} */
1361
- TdChipsComponent.prototype._internalClick;
1362
- /** @type {?} */
1363
- TdChipsComponent.prototype._internalActivateOption;
1364
- /** @type {?} */
1365
- TdChipsComponent.prototype._nativeInput;
1366
- /** @type {?} */
1367
- TdChipsComponent.prototype._inputChild;
1368
- /** @type {?} */
1369
- TdChipsComponent.prototype._autocompleteTrigger;
1370
- /** @type {?} */
1371
- TdChipsComponent.prototype._chipsChildren;
1372
- /** @type {?} */
1373
- TdChipsComponent.prototype._chipTemplate;
1374
- /** @type {?} */
1375
- TdChipsComponent.prototype._autocompleteOptionTemplate;
1376
- /** @type {?} */
1377
- TdChipsComponent.prototype._options;
1378
- /**
1379
- * FormControl for the matInput element.
1380
- * @type {?}
1381
- */
1382
- TdChipsComponent.prototype.inputControl;
1383
- /**
1384
- * placeholder?: string
1385
- * Placeholder for the autocomplete input.
1386
- * @type {?}
1387
- */
1388
- TdChipsComponent.prototype.placeholder;
1389
- /**
1390
- * debounce?: number
1391
- * Debounce timeout between keypresses. Defaults to 200.
1392
- * @type {?}
1393
- */
1394
- TdChipsComponent.prototype.debounce;
1395
- /**
1396
- * add?: function
1397
- * Method to be executed when a chip is added.
1398
- * Sends chip value as event.
1399
- * @type {?}
1400
- */
1401
- TdChipsComponent.prototype.add;
1402
- /**
1403
- * remove?: function
1404
- * Method to be executed when a chip is removed.
1405
- * Sends chip value as event.
1406
- * @type {?}
1407
- */
1408
- TdChipsComponent.prototype.remove;
1409
- /**
1410
- * inputChange?: function
1411
- * Method to be executed when the value in the autocomplete input changes.
1412
- * Sends string value as event.
1413
- * @type {?}
1414
- */
1415
- TdChipsComponent.prototype.inputChange;
1416
- /**
1417
- * chipFocus?: function
1418
- * Method to be executed when a chip is focused.
1419
- * Sends chip value as event.
1420
- * @type {?}
1421
- */
1422
- TdChipsComponent.prototype.chipFocus;
1423
- /**
1424
- * blur?: function
1425
- * Method to be executed when a chip is blurred.
1426
- * Sends chip value as event.
1427
- * @type {?}
1428
- */
1429
- TdChipsComponent.prototype.chipBlur;
1430
- /**
1431
- * compareWith? function
1432
- * Function used to check whether a chip value already exists.
1433
- * Defaults to strict equality comparison ===
1434
- * @type {?}
1435
- */
1436
- TdChipsComponent.prototype.compareWith;
1437
- /**
1438
- * @type {?}
1439
- * @private
1440
- */
1441
- TdChipsComponent.prototype._elementRef;
1442
- /**
1443
- * @type {?}
1444
- * @private
1445
- */
1446
- TdChipsComponent.prototype._renderer;
1447
- /**
1448
- * @type {?}
1449
- * @private
1450
- */
1451
- TdChipsComponent.prototype._document;
1452
- }
1453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvdmFsZW50L2NvcmUvY2hpcHMvIiwic291cmNlcyI6WyJjaGlwcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUVWLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUdqQixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFHVCxHQUFHLEdBRUosTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFP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QU9MLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0NBWWhDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0NBZXBDLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7a0NBYWhDLFlBQVksU0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBb2JyQyx1QkFBQztDQUFBLEFBNXVCRCxDQWVVLGlCQUFpQixHQTZ0QjFCO1NBOXRCWSxnQkFBZ0I7Ozs7OztJQUczQiw2Q0FBNkQ7Ozs7O0lBQzdELGtEQUFrRTs7Ozs7SUFDbEUsd0NBQXNDOzs7OztJQUV0QyxrQ0FBc0I7Ozs7O0lBQ3RCLG1DQUE0Qjs7Ozs7SUFDNUIsb0NBQWtDOzs7OztJQUNsQyx5Q0FBdUM7Ozs7O0lBQ3ZDLGtDQUEwRDs7Ozs7SUFDMUQsMENBQXFEOzs7OztJQUNyRCx5Q0FBc0M7Ozs7O0lBQ3RDLHdDQUFxQzs7Ozs7SUFDckMsb0NBQWtDOzs7OztJQUNsQyxxQ0FBbUM7Ozs7O0lBQ25DLHFDQUE4Qjs7Ozs7SUFDOUIsNkNBQXdDOztJQUV4QywwQ0FBZ0M7O0lBQ2hDLG1EQUF5Qzs7SUFFekMsd0NBQStEOztJQUMvRCx1Q0FBNkQ7O0lBQzdELGdEQUFrRzs7SUFDbEcsMENBQTBEOztJQUUxRCx5Q0FBOEQ7O0lBQzlELHVEQUMyRDs7SUFFM0Qsb0NBQXdEOzs7OztJQVl4RCx3Q0FBOEM7Ozs7OztJQTRIOUMsdUNBQTZCOzs7Ozs7SUFNN0Isb0NBQWdDOzs7Ozs7O0lBd0JoQywrQkFBMkQ7Ozs7Ozs7SUFPM0Qsa0NBQThEOzs7Ozs7O0lBTzlELHVDQUF5RTs7Ozs7OztJQU96RSxxQ0FBaUU7Ozs7Ozs7SUFPakUsb0NBQWdFOzs7Ozs7O0lBeUJoRSx1Q0FFRTs7Ozs7SUFoQkEsdUNBQStCOzs7OztJQUMvQixxQ0FBNEI7Ozs7O0lBQzVCLHFDQUFvRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgZm9yd2FyZFJlZixcbiAgRG9DaGVjayxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgT25Jbml0LFxuICBIb3N0TGlzdGVuZXIsXG4gIEVsZW1lbnRSZWYsXG4gIE9wdGlvbmFsLFxuICBJbmplY3QsXG4gIERpcmVjdGl2ZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkRlc3Ryb3ksXG4gIEhvc3RCaW5kaW5nLFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIFVQX0FSUk9XLFxuICBET1dOX0FSUk9XLFxuICBFU0NBUEUsXG4gIExFRlRfQVJST1csXG4gIFJJR0hUX0FSUk9XLFxuICBERUxFVEUsXG4gIEJBQ0tTUEFDRSxcbiAgRU5URVIsXG4gIFNQQUNFLFxuICBUQUIsXG4gIEhPTUUsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBNYXRDaGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRpbWVyLCBtZXJnZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSUNhbkRpc2FibGUsIG1peGluRGlzYWJsZWQsIElDb250cm9sVmFsdWVBY2Nlc3NvciwgbWl4aW5Db250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZC1jaGlwXW5nLXRlbXBsYXRlJyxcbn0pXG5leHBvcnQgY2xhc3MgVGRDaGlwRGlyZWN0aXZlIGV4dGVuZHMgVGVtcGxhdGVQb3J0YWxEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIHN1cGVyKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyUmVmKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGQtYXV0b2NvbXBsZXRlLW9wdGlvbl1uZy10ZW1wbGF0ZScsXG59KVxuZXhwb3J0IGNsYXNzIFRkQXV0b2NvbXBsZXRlT3B0aW9uRGlyZWN0aXZlIGV4dGVuZHMgVGVtcGxhdGVQb3J0YWxEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIHN1cGVyKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyUmVmKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGRDaGlwc0Jhc2Uge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cbn1cblxuLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG5leHBvcnQgY29uc3QgX1RkQ2hpcHNNaXhpbkJhc2UgPSBtaXhpbkNvbnRyb2xWYWx1ZUFjY2Vzc29yKG1peGluRGlzYWJsZWQoVGRDaGlwc0Jhc2UpLCBbXSk7XG5cbkBDb21wb25lbnQoe1xuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRkQ2hpcHNDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc2VsZWN0b3I6ICd0ZC1jaGlwcycsXG4gIGlucHV0czogWydkaXNhYmxlZCcsICd2YWx1ZSddLFxuICBzdHlsZVVybHM6IFsnLi9jaGlwcy5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hpcHMuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGRDaGlwc0NvbXBvbmVudFxuICBleHRlbmRzIF9UZENoaXBzTWl4aW5CYXNlXG4gIGltcGxlbWVudHMgSUNvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSUNhbkRpc2FibGUge1xuICBwcml2YXRlIF9vdXRzaWRlQ2xpY2tTdWJzOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2lucHV0VmFsdWVDaGFuZ2VzU3ViczogU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICBwcml2YXRlIF9pc01vdXNlZG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2l0ZW1zOiBhbnlbXTtcbiAgcHJpdmF0ZSBfbGVuZ3RoOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9zdGFja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlcXVpcmVNYXRjaDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9jb2xvcjogJ3ByaW1hcnknIHwgJ2FjY2VudCcgfCAnd2FybicgPSAncHJpbWFyeSc7XG4gIHByaXZhdGUgX2lucHV0UG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJyA9ICdhZnRlcic7XG4gIHByaXZhdGUgX2NoaXBBZGRpdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX2NoaXBSZW1vdmFsOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF90YWJJbmRleDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfdG91Y2hlbmREZWJvdW5jZTogbnVtYmVyID0gMTAwO1xuXG4gIF9pbnRlcm5hbENsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIF9pbnRlcm5hbEFjdGl2YXRlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBfbmF0aXZlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoTWF0SW5wdXQsIHsgc3RhdGljOiB0cnVlIH0pIF9pbnB1dENoaWxkOiBNYXRJbnB1dDtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCB7IHN0YXRpYzogdHJ1ZSB9KSBfYXV0b2NvbXBsZXRlVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcbiAgQFZpZXdDaGlsZHJlbihNYXRDaGlwKSBfY2hpcHNDaGlsZHJlbjogUXVlcnlMaXN0PE1hdENoaXA+O1xuXG4gIEBDb250ZW50Q2hpbGQoVGRDaGlwRGlyZWN0aXZlKSBfY2hpcFRlbXBsYXRlOiBUZENoaXBEaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGQoVGRBdXRvY29tcGxldGVPcHRpb25EaXJlY3RpdmUpXG4gIF9hdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZTogVGRBdXRvY29tcGxldGVPcHRpb25EaXJlY3RpdmU7XG5cbiAgQFZpZXdDaGlsZHJlbihNYXRPcHRpb24pIF9vcHRpb25zOiBRdWVyeUxpc3Q8TWF0T3B0aW9uPjtcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGlzIHRydWUgd2hlbiBhdXRvY29tcGxldGUgaXMgZm9jdXNlZC5cbiAgICovXG4gIGdldCBmb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1Db250cm9sIGZvciB0aGUgbWF0SW5wdXQgZWxlbWVudC5cbiAgICovXG4gIGlucHV0Q29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAvKipcbiAgICogaXRlbXM/OiBhbnlbXVxuICAgKiBSZW5kZXJzIHRoZSBgbWF0LWF1dG9jb21wbGV0ZWAgd2l0aCB0aGUgcHJvdmlkZWQgbGlzdCB0byBkaXNwbGF5IGFzIG9wdGlvbnMuXG4gICAqL1xuICBASW5wdXQoJ2l0ZW1zJylcbiAgc2V0IGl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5fc2V0Rmlyc3RPcHRpb25BY3RpdmUoKTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBnZXQgaXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBzdGFja2VkPzogYm9vbGVhblxuICAgKiBTZXQgc3RhY2tlZCBvciBob3Jpem9udGFsIGNoaXBzIGRlcGVuZGluZyBvbiB2YWx1ZS5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBASW5wdXQoJ3N0YWNrZWQnKVxuICBzZXQgc3RhY2tlZChzdGFja2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc3RhY2tlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShzdGFja2VkKTtcbiAgfVxuICBnZXQgc3RhY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2tlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbnB1dFBvc2l0aW9uPzogJ2JlZm9yZScgfCAnYWZ0ZXInXG4gICAqIFNldCBpbnB1dCBwb3NpdGlvbiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoaXBzLlxuICAgKiBEZWZhdWx0cyB0byAnYWZ0ZXInLlxuICAgKi9cbiAgQElucHV0KCdpbnB1dFBvc2l0aW9uJylcbiAgc2V0IGlucHV0UG9zaXRpb24oaW5wdXRQb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInKSB7XG4gICAgdGhpcy5faW5wdXRQb3NpdGlvbiA9IGlucHV0UG9zaXRpb247XG4gIH1cbiAgZ2V0IGlucHV0UG9zaXRpb24oKTogJ2JlZm9yZScgfCAnYWZ0ZXInIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRQb3NpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1aXJlTWF0Y2g/OiBib29sZWFuXG4gICAqIEJsb2NrcyBjdXN0b20gaW5wdXRzIGFuZCBvbmx5IGFsbG93cyBzZWxlY3Rpb25zIGZyb20gdGhlIGF1dG9jb21wbGV0ZSBsaXN0LlxuICAgKi9cbiAgQElucHV0KCdyZXF1aXJlTWF0Y2gnKVxuICBzZXQgcmVxdWlyZU1hdGNoKHJlcXVpcmVNYXRjaDogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVNYXRjaCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXF1aXJlTWF0Y2gpO1xuICB9XG4gIGdldCByZXF1aXJlTWF0Y2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVNYXRjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1aXJlZD86IGJvb2xlYW5cbiAgICogVmFsdWUgaXMgc2V0IHRvIHRydWUgaWYgYXQgbGVhc3Qgb25lIGNoaXAgaXMgbmVlZGVkXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlXG4gICAqL1xuICBASW5wdXQoJ3JlcXVpcmVkJylcbiAgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxdWlyZWQpO1xuICB9XG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogY2hpcEFkZGl0aW9uPzogYm9vbGVhblxuICAgKiBEaXNhYmxlcyB0aGUgYWJpbGl0eSB0byBhZGQgY2hpcHMuIFdoZW4gc2V0dGluZyBkaXNhYmxlZCBhcyB0cnVlLCB0aGlzIHdpbGwgYmUgb3ZlcnJpZGVuLlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgQElucHV0KCdjaGlwQWRkaXRpb24nKVxuICBzZXQgY2hpcEFkZGl0aW9uKGNoaXBBZGRpdGlvbjogYm9vbGVhbikge1xuICAgIHRoaXMuX2NoaXBBZGRpdGlvbiA9IGNoaXBBZGRpdGlvbjtcbiAgICB0aGlzLl90b2dnbGVJbnB1dCgpO1xuICB9XG4gIGdldCBjaGlwQWRkaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBBZGRpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbm90IGluIGRpc2FibGVkIHN0YXRlIGFuZCBpZiBjaGlwQWRkaXRpb24gaXMgc2V0IHRvICd0cnVlJ1xuICAgKiBTdGF0ZXMgaWYgYSBjaGlwIGNhbiBiZSBhZGRlZCBhbmQgaWYgdGhlIGlucHV0IGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgZ2V0IGNhbkFkZENoaXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpcEFkZGl0aW9uICYmICF0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoaXBSZW1vdmFsPzogYm9vbGVhblxuICAgKiBEaXNhYmxlcyB0aGUgYWJpbGl0eSB0byByZW1vdmUgY2hpcHMuIElmIGl0IGRvZXNuJ3QgZXhpc3QgY2hpcCByZW1tb3ZhbCBkZWZhdWx0cyB0byB0cnVlLlxuICAgKiBXaGVuIHNldHRpbmcgZGlzYWJsZWQgYXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIG92ZXJyaWRlbiB0byBmYWxzZS5cbiAgICovXG4gIEBJbnB1dCgnY2hpcFJlbW92YWwnKVxuICBzZXQgY2hpcFJlbW92YWwoY2hpcFJlbW92YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jaGlwUmVtb3ZhbCA9IGNoaXBSZW1vdmFsO1xuICB9XG4gIGdldCBjaGlwUmVtb3ZhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpcFJlbW92YWw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG5vdCBpbiBkaXNhYmxlZCBzdGF0ZSBhbmQgaWYgY2hpcFJlbW92YWwgaXMgc2V0IHRvICd0cnVlJ1xuICAgKiBTdGF0ZXMgaWYgYSBjaGlwIGNhbiBiZSByZW1vdmVkXG4gICAqL1xuICBnZXQgY2FuUmVtb3ZlQ2hpcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGlwUmVtb3ZhbCAmJiAhdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSBkaXNwbGF5IHBsYWNlaG9sZGVyXG4gICAqL1xuICBnZXQgZGlzcGxheVBsYWNlSG9sZGVyKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNhbkFkZENoaXApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkID8gYCR7dGhpcy5wbGFjZWhvbGRlcn0gKmAgOiB0aGlzLnBsYWNlaG9sZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgYXV0b2NvbXBsZXRlIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogZGVib3VuY2U/OiBudW1iZXJcbiAgICogRGVib3VuY2UgdGltZW91dCBiZXR3ZWVuIGtleXByZXNzZXMuIERlZmF1bHRzIHRvIDIwMC5cbiAgICovXG4gIEBJbnB1dCgpIGRlYm91bmNlOiBudW1iZXIgPSAyMDA7XG5cbiAgLyoqXG4gICAqIGNvbG9yPzogJ3ByaW1hcnknIHwgJ2FjY2VudCcgfCAnd2FybidcbiAgICogU2V0cyB0aGUgY29sb3IgZm9yIHRoZSBpbnB1dCBhbmQgZm9jdXMvc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIGNoaXBzLlxuICAgKiBEZWZhdWx0cyB0byAncHJpbWFyeSdcbiAgICovXG4gIEBJbnB1dCgnY29sb3InKVxuICBzZXQgY29sb3IoY29sb3I6ICdwcmltYXJ5JyB8ICdhY2NlbnQnIHwgJ3dhcm4nKSB7XG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtYXQtJyArIHRoaXMuX2NvbG9yKTtcbiAgICAgIHRoaXMuX2NvbG9yID0gY29sb3I7XG4gICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtYXQtJyArIHRoaXMuX2NvbG9yKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGNvbG9yKCk6ICdwcmltYXJ5JyB8ICdhY2NlbnQnIHwgJ3dhcm4nIHtcbiAgICByZXR1cm4gdGhpcy5fY29sb3I7XG4gIH1cblxuICAvKipcbiAgICogYWRkPzogZnVuY3Rpb25cbiAgICogTWV0aG9kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYSBjaGlwIGlzIGFkZGVkLlxuICAgKiBTZW5kcyBjaGlwIHZhbHVlIGFzIGV2ZW50LlxuICAgKi9cbiAgQE91dHB1dCgpIGFkZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogcmVtb3ZlPzogZnVuY3Rpb25cbiAgICogTWV0aG9kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYSBjaGlwIGlzIHJlbW92ZWQuXG4gICAqIFNlbmRzIGNoaXAgdmFsdWUgYXMgZXZlbnQuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVtb3ZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBpbnB1dENoYW5nZT86IGZ1bmN0aW9uXG4gICAqIE1ldGhvZCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB2YWx1ZSBpbiB0aGUgYXV0b2NvbXBsZXRlIGlucHV0IGNoYW5nZXMuXG4gICAqIFNlbmRzIHN0cmluZyB2YWx1ZSBhcyBldmVudC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogY2hpcEZvY3VzPzogZnVuY3Rpb25cbiAgICogTWV0aG9kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYSBjaGlwIGlzIGZvY3VzZWQuXG4gICAqIFNlbmRzIGNoaXAgdmFsdWUgYXMgZXZlbnQuXG4gICAqL1xuICBAT3V0cHV0KCkgY2hpcEZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBibHVyPzogZnVuY3Rpb25cbiAgICogTWV0aG9kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYSBjaGlwIGlzIGJsdXJyZWQuXG4gICAqIFNlbmRzIGNoaXAgdmFsdWUgYXMgZXZlbnQuXG4gICAqL1xuICBAT3V0cHV0KCkgY2hpcEJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEhvc3RiaW5kaW5nIHRvIHNldCB0aGUgYTExeSBvZiB0aGUgVGRDaGlwc0NvbXBvbmVudCBkZXBlbmRpbmcgb24gaXRzIHN0YXRlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IC0xIDogdGhpcy5fdGFiSW5kZXg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21hdC0nICsgdGhpcy5fY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbXBhcmVXaXRoPyBmdW5jdGlvblxuICAgKiBGdW5jdGlvbiB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYSBjaGlwIHZhbHVlIGFscmVhZHkgZXhpc3RzLlxuICAgKiBEZWZhdWx0cyB0byBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbiA9PT1cbiAgICovXG4gIEBJbnB1dCgpIGNvbXBhcmVXaXRoOiAobzE6IGFueSwgbzI6IGFueSkgPT4gYm9vbGVhbiA9IChvMTogYW55LCBvMjogYW55KSA9PiB7XG4gICAgcmV0dXJuIG8xID09PSBvMjtcbiAgfTtcblxuICAvKipcbiAgICogTGlzdGVucyB0byBob3N0IGZvY3VzIGV2ZW50IHRvIGFjdCBvbiBpdFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxuICBmb2N1c0xpc3RlbmVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgLy8gc2hvdWxkIG9ubHkgZm9jdXMgaWYgaXRzIG5vdCB2aWEgbW91c2Vkb3duIHRvIHByZXZlbnQgY2xhc2hpbmcgd2l0aCBhdXRvY29tcGxldGVcbiAgICBpZiAoIXRoaXMuX2lzTW91c2Vkb3duKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyB0byBob3N0IG1vdXNlZG93biBldmVudCB0byBhY3Qgb24gaXRcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG1vdXNlZG93bkxpc3RlbmVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgLy8gc2V0cyBhIGZsYWcgdG8ga25vdyBpZiB0aGVyZSB3YXMgYSBtb3VzZWRvd24gYW5kIHRoZW4gaXQgcmV0dXJucyBpdCBiYWNrIHRvIGZhbHNlXG4gICAgdGhpcy5faXNNb3VzZWRvd24gPSB0cnVlO1xuICAgIHRpbWVyKClcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9pc01vdXNlZG93biA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgY2xpY2tpbmcgb24gOmhvc3Qgb3IgYHRkLWNoaXBzLXdyYXBwZXJgLCB0aGVuIHdlIHN0b3AgdGhlIGNsaWNrIHByb3BhZ2F0aW9uIHNvIHRoZSBhdXRvY29tcGxldGVcbiAgICogZG9lc250IGNsb3NlIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGNsaWNrTGlzdGVuZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2xpY2tUYXJnZXQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldDtcbiAgICBpZiAoY2xpY2tUYXJnZXQgPT09IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCB8fCBjbGlja1RhcmdldC5jbGFzc05hbWUuaW5kZXhPZigndGQtY2hpcHMtd3JhcHBlcicpID4gLTEpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyB0byBob3N0IGtleWRvd24gZXZlbnQgdG8gYWN0IG9uIGl0IGRlcGVuZGluZyBvbiB0aGUga2V5cHJlc3NcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlkb3duTGlzdGVuZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgIGNhc2UgVEFCOlxuICAgICAgICAvLyBpZiB0YWJpbmcgb3V0LCB0aGVuIHVuZm9jdXMgdGhlIGNvbXBvbmVudFxuICAgICAgICB0aW1lcigpXG4gICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2N1c2VkU3RhdGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVTQ0FQRTpcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hpbGQuZm9jdXNlZCkge1xuICAgICAgICAgIHRoaXMuX25hdGl2ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgIHRoaXMucmVtb3ZlRm9jdXNlZFN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5fY2xvc2VBdXRvY29tcGxldGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZGVmYXVsdFxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0VmFsdWVDaGFuZ2VzU3VicyA9IHRoaXMuaW5wdXRDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2UpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodmFsdWUgPyB2YWx1ZSA6ICcnKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3dhdGNoT3V0c2lkZUNsaWNrKCk7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgLy8gVGhyb3cgb25DaGFuZ2UgZXZlbnQgb25seSBpZiBhcnJheSBjaGFuZ2VzIHNpemUuXG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggIT09IHRoaXMuX2xlbmd0aCkge1xuICAgICAgdGhpcy5fbGVuZ3RoID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX291dHNpZGVDbGlja1N1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9pbnB1dFZhbHVlQ2hhbmdlc1N1YnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIF9zZXRJbnRlcm5hbENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuX2ludGVybmFsQ2xpY2sgPSB0cnVlO1xuICB9XG5cbiAgLyoqIE1ldGhvZCBleGVjdXRlZCB3aGVuIHRoZSBkaXNhYmxlZCB2YWx1ZSBjaGFuZ2VzICovXG4gIG9uRGlzYWJsZWRDaGFuZ2UodjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3RvZ2dsZUlucHV0KCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXQgaXMgZXhlY3V0ZWQgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgbmV3IGNoaXAgZnJvbSB0aGUgYXV0b2NvbXBsZXRlLlxuICAgKiBJdCBjaGVjayBpZiBbcmVxdWlyZU1hdGNoXSBpcyBlbmFibGVkLCBhbmQgdHJpZXMgdG8gYWRkIHRoZSBmaXJzdCBhY3RpdmUgb3B0aW9uXG4gICAqIGVsc2UgaWYganVzdCBhZGRzIHRoZSB2YWx1ZSB0aGF0cyBvbiB0aGUgaW5wdXRcbiAgICogcmV0dXJucyAndHJ1ZScgaWYgc3VjY2Vzc2Z1bCwgJ2ZhbHNlJyBpZiBpdCBmYWlscy5cbiAgICovXG4gIF9oYW5kbGVBZGRDaGlwKCk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIGlmICh0aGlzLnJlcXVpcmVNYXRjaCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zOiBNYXRPcHRpb25bXSA9IHRoaXMuX29wdGlvbnMudG9BcnJheSgpLmZpbHRlcigob3B0aW9uOiBNYXRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5hY3RpdmU7XG4gICAgICB9KTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9uc1swXS52YWx1ZTtcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zWzBdLnNldEluYWN0aXZlU3R5bGVzKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24sIHRoZW4gdXNlIHRoYXRcbiAgICAgIC8vIGVsc2UgdXNlIHRoZSBpbnB1dCB2YWx1ZSBhcyBjaGlwXG4gICAgICBpZiAodGhpcy5fYXV0b2NvbXBsZXRlVHJpZ2dlci5hY3RpdmVPcHRpb24pIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9hdXRvY29tcGxldGVUcmlnZ2VyLmFjdGl2ZU9wdGlvbi52YWx1ZTtcbiAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlVHJpZ2dlci5hY3RpdmVPcHRpb24uc2V0SW5hY3RpdmVTdHlsZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5faW5wdXRDaGlsZC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ2hpcCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXRzIGV4ZWN0dXRlZCB3aGVuIHRyeWluZyB0byBhZGQgYSB2YWx1ZSBhcyBjaGlwXG4gICAqIHJldHVybnMgJ3RydWUnIGlmIHN1Y2Nlc3NmdWwsICdmYWxzZScgaWYgaXQgZmFpbHMuXG4gICAqL1xuICBhZGRDaGlwKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAvKipcbiAgICAgKiBhZGQgYSBkZWJvdW5jZSBtcyBkZWxheSB3aGVuIHJlb3BlbmluZyB0aGUgYXV0b2NvbXBsZXRlIHRvIGdpdmUgaXQgdGltZVxuICAgICAqIHRvIHJlcmVuZGVyIHRoZSBuZXh0IGxpc3QgYW5kIGF0IHRoZSBjb3JyZWN0IHNwb3RcbiAgICAgKi9cblxuICAgIHRoaXMuX2Nsb3NlQXV0b2NvbXBsZXRlKCk7XG4gICAgdGltZXIodGhpcy5kZWJvdW5jZSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNldEZvY3VzZWRTdGF0ZSgpO1xuICAgICAgICB0aGlzLl9zZXRGaXJzdE9wdGlvbkFjdGl2ZSgpO1xuICAgICAgICB0aGlzLl9vcGVuQXV0b2NvbXBsZXRlKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIG1vZGVsXG4gICAgaWYgKHRoaXMudmFsdWUuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IHRoaXMuY29tcGFyZVdpdGgoaXRlbSwgdmFsdWUpKSA+IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZS5wdXNoKHZhbHVlKTtcbiAgICB0aGlzLmFkZC5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0aGF0IGlzIGV4ZWN1dGVkIHdoZW4gdHJ5aW5nIHRvIHJlbW92ZSBhIGNoaXAuXG4gICAqIHJldHVybnMgJ3RydWUnIGlmIHN1Y2Nlc3NmdWwsICdmYWxzZScgaWYgaXQgZmFpbHMuXG4gICAqL1xuICByZW1vdmVDaGlwKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCByZW1vdmVkVmFsdWVzOiBhbnlbXSA9IHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZiAocmVtb3ZlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgZGVsZXRpbmcgbGFzdCBzaW5nbGUgY2hpcCwgdG8gZm9jdXMgaW5wdXQgYWZ0ZXJ3YXJkc1xuICAgICAqIEVsc2UgY2hlY2sgaWYgaXRzIG5vdCB0aGUgbGFzdCBjaGlwIG9mIHRoZSBsaXN0IHRvIGZvY3VzIHRoZSBuZXh0IG9uZS5cbiAgICAgKi9cbiAgICBpZiAoaW5kZXggPT09IHRoaXMuX3RvdGFsQ2hpcHMgLSAxICYmIGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnB1dENoaWxkLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChpbmRleCA8IHRoaXMuX3RvdGFsQ2hpcHMgLSAxKSB7XG4gICAgICB0aGlzLl9mb2N1c0NoaXAoaW5kZXggKyAxKTtcbiAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgICAgdGhpcy5fZm9jdXNDaGlwKGluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmUuZW1pdChyZW1vdmVkVmFsdWVzWzBdKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGJsdXIgb2YgY2hpcCBhbmQgc2VuZHMgb3V0IGV2ZW50XG4gICAqL1xuICBfaGFuZGxlQ2hpcEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBCbHVyLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZm9jdXMgb2YgY2hpcCBhbmQgc2VuZHMgb3V0IGV2ZW50XG4gICAqL1xuICBfaGFuZGxlQ2hpcEZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZXRGb2N1c2VkU3RhdGUoKTtcbiAgICB0aGlzLmNoaXBGb2N1cy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIF9oYW5kbGVGb2N1cygpOiBib29sZWFuIHtcbiAgICB0aGlzLnNldEZvY3VzZWRTdGF0ZSgpO1xuICAgIHRoaXMuX3NldEZpcnN0T3B0aW9uQWN0aXZlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBmb2N1cyBzdGF0ZSBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBzZXRGb2N1c2VkU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3RhYkluZGV4ID0gLTE7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBmb2N1cyBzdGF0ZSBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZW1vdmVGb2N1c2VkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3RhYkluZGV4ID0gMDtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IGZvY3VzIHRoZSBpbnB1dCBvciBmaXJzdCBjaGlwLiBTaW5jZSBpdHMgdGhlIGNvbXBvbmVudCBlbnRyeSBwb2ludFxuICAgKiBkZXBlbmRpbmcgaWYgYSB1c2VyIGNhbiBhZGQgb3IgcmVtb3ZlIGNoaXBzXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYW5BZGRDaGlwKSB7XG4gICAgICB0aGlzLl9pbnB1dENoaWxkLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fZm9jdXNGaXJzdENoaXAoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFzc2VzIHJlbGV2YW50IGlucHV0IGtleSBwcmVzc2VzLlxuICAgKi9cbiAgX2lucHV0S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNpbmNlIHRoZSBmaXJzdCBpdGVtIGlzIGhpZ2hsaWdodGVkIG9uIFtyZXF1aXJlTWF0Y2hdLCB3ZSBuZWVkIHRvIGluYWN0aXZhdGUgaXRcbiAgICAgICAgICogd2hlbiBwcmVzc2luZyB0aGUgdXAga2V5XG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5yZXF1aXJlTWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCBsZW5ndGg6IG51bWJlciA9IHRoaXMuX29wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIGlmIChsZW5ndGggPiAxICYmIHRoaXMuX29wdGlvbnMudG9BcnJheSgpWzBdLmFjdGl2ZSAmJiB0aGlzLl9pbnRlcm5hbEFjdGl2YXRlT3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKVswXS5zZXRJbmFjdGl2ZVN0eWxlcygpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxBY3RpdmF0ZU9wdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWZhdWx0IHdpbmRvdyBzY3JvbGxpbmdcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgY2FzZSBERUxFVEU6XG4gICAgICBjYXNlIEJBQ0tTUEFDRTpcbiAgICAgICAgdGhpcy5fY2xvc2VBdXRvY29tcGxldGUoKTtcbiAgICAgICAgLyoqIENoZWNrIHRvIHNlZSBpZiBpbnB1dCBpcyBlbXB0eSB3aGVuIHByZXNzaW5nIGxlZnQgYXJyb3cgdG8gbW92ZSB0byB0aGUgbGFzdCBjaGlwICovXG4gICAgICAgIGlmICghdGhpcy5faW5wdXRDaGlsZC52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzTGFzdENoaXAoKTtcbiAgICAgICAgICAvLyBwcmV2ZW50IGRlZmF1bHQgd2luZG93IHNjcm9sbGluZ1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICB0aGlzLl9jbG9zZUF1dG9jb21wbGV0ZSgpO1xuICAgICAgICAvKiogQ2hlY2sgdG8gc2VlIGlmIGlucHV0IGlzIGVtcHR5IHdoZW4gcHJlc3NpbmcgcmlnaHQgYXJyb3cgdG8gbW92ZSB0byB0aGUgZmlyc3QgY2hpcCAqL1xuICAgICAgICBpZiAoIXRoaXMuX2lucHV0Q2hpbGQudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9mb2N1c0ZpcnN0Q2hpcCgpO1xuICAgICAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCB3aW5kb3cgc2Nyb2xsaW5nXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkZWZhdWx0XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhc3NlcyByZWxldmFudCBjaGlwIGtleSBwcmVzc2VzLlxuICAgKi9cbiAgX2NoaXBLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIERFTEVURTpcbiAgICAgIGNhc2UgQkFDS1NQQUNFOlxuICAgICAgICAvKiogQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkZWxldGUgYSBjaGlwICovXG4gICAgICAgIGlmICh0aGlzLmNhblJlbW92ZUNoaXApIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUNoaXAoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgIGNhc2UgTEVGVF9BUlJPVzpcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIHRvIHNlZSBpZiBsZWZ0L2Rvd24gYXJyb3cgd2FzIHByZXNzZWQgd2hpbGUgZm9jdXNpbmcgdGhlIGZpcnN0IGNoaXAgdG8gZm9jdXMgaW5wdXQgbmV4dFxuICAgICAgICAgKiBBbHNvIGNoZWNrIGlmIGlucHV0IHNob3VsZCBiZSBmb2N1c2VkXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAvLyBvbmx5IHRyeSB0byB0YXJnZXQgaW5wdXQgaWYgcHJlc3NpbmcgbGVmdFxuICAgICAgICAgIGlmICh0aGlzLmNhbkFkZENoaXAgJiYgZXZlbnQua2V5Q29kZSA9PT0gTEVGVF9BUlJPVykge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRDaGlsZC5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0xhc3RDaGlwKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzQ2hpcChpbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCB3aW5kb3cgc2Nyb2xsaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgY2FzZSBSSUdIVF9BUlJPVzpcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIHRvIHNlZSBpZiByaWdodC91cCBhcnJvdyB3YXMgcHJlc3NlZCB3aGlsZSBmb2N1c2luZyB0aGUgbGFzdCBjaGlwIHRvIGZvY3VzIGlucHV0IG5leHRcbiAgICAgICAgICogQWxzbyBjaGVjayBpZiBpbnB1dCBzaG91bGQgYmUgZm9jdXNlZFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLl90b3RhbENoaXBzIC0gMSkge1xuICAgICAgICAgIC8vIG9ubHkgdHJ5IHRvIHRhcmdldCBpbnB1dCBpZiBwcmVzc2luZyByaWdodFxuICAgICAgICAgIGlmICh0aGlzLmNhbkFkZENoaXAgJiYgZXZlbnQua2V5Q29kZSA9PT0gUklHSFRfQVJST1cpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hpbGQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNGaXJzdENoaXAoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCB0aGlzLl90b3RhbENoaXBzIC0gMSkge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzQ2hpcChpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCB3aW5kb3cgc2Nyb2xsaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRlZmF1bHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHJlbW92ZSBmcm9tIGRpc3BsYXkgdGhlIHZhbHVlIGFkZGVkIGZyb20gdGhlIGF1dG9jb21wbGV0ZSBzaW5jZSBpdCBnb2VzIGRpcmVjdGx5IGFzIGNoaXAuXG4gICAqL1xuICBfcmVtb3ZlSW5wdXREaXNwbGF5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBvcGVuIHRoZSBhdXRvY29tcGxldGUgbWFudWFsbHkgaWYgaXRzIG5vdCBhbHJlYWR5IG9wZW5lZFxuICAgKi9cbiAgX29wZW5BdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9hdXRvY29tcGxldGVUcmlnZ2VyLnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlVHJpZ2dlci5vcGVuUGFuZWwoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gY2xvc2UgdGhlIGF1dG9jb21wbGV0ZSBtYW51YWxseSBpZiBpdHMgbm90IGFscmVhZHkgY2xvc2VkXG4gICAqL1xuICBfY2xvc2VBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2F1dG9jb21wbGV0ZVRyaWdnZXIucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLl9hdXRvY29tcGxldGVUcmlnZ2VyLmNsb3NlUGFuZWwoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdG90YWwgb2YgY2hpcHNcbiAgICovXG4gIGdldCBfdG90YWxDaGlwcygpOiBudW1iZXIge1xuICAgIGNvbnN0IGNoaXBzOiBNYXRDaGlwW10gPSB0aGlzLl9jaGlwc0NoaWxkcmVuLnRvQXJyYXkoKTtcbiAgICByZXR1cm4gY2hpcHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBmb2N1cyBhIGRlc2lyZWQgY2hpcCBieSBpbmRleFxuICAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNDaGlwKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvKiogY2hlY2sgdG8gc2VlIGlmIGluZGV4IGV4aXN0cyBpbiB0aGUgYXJyYXkgYmVmb3JlIGZvY3VzaW5nICovXG4gICAgaWYgKGluZGV4ID4gLTEgJiYgdGhpcy5fdG90YWxDaGlwcyA+IGluZGV4KSB7XG4gICAgICB0aGlzLl9jaGlwc0NoaWxkcmVuLnRvQXJyYXkoKVtpbmRleF0uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogTWV0aG9kIHRvIGZvY3VzIGZpcnN0IGNoaXAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNGaXJzdENoaXAoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9jdXNDaGlwKDApO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0byBmb2N1cyBsYXN0IGNoaXAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNMYXN0Q2hpcCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb2N1c0NoaXAodGhpcy5fdG90YWxDaGlwcyAtIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byB0b2dnbGUgdGhlIGRpc2FibGUgc3RhdGUgb2YgaW5wdXRcbiAgICogQ2hlY2tzIGlmIG5vdCBpbiBkaXNhYmxlZCBzdGF0ZSBhbmQgaWYgY2hpcEFkZGl0aW9uIGlzIHNldCB0byAndHJ1ZSdcbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZUlucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbkFkZENoaXApIHtcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLmVuYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5kaXNhYmxlKCk7XG4gICAgfVxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZmlyc3Qgb3B0aW9uIGFzIGFjdGl2ZSB0byBsZXQgdGhlIHVzZXIga25vdyB3aGljaCBvbmUgd2lsbCBiZSBhZGRlZCB3aGVuIHByZXNzaW5nIGVudGVyXG4gICAqIE9ubHkgaWYgW3JlcXVpcmVNYXRjaF0gaGFzIGJlZW4gc2V0XG4gICAqL1xuICBwcml2YXRlIF9zZXRGaXJzdE9wdGlvbkFjdGl2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXF1aXJlTWF0Y2gpIHtcbiAgICAgIC8vIG5lZWQgdG8gdXNlIGEgdGltZXIgaGVyZSB0byB3YWl0IHVudGlsIHRoZSBhdXRvY29tcGxldGUgaGFzIGJlZW4gb3BlbmVkIChlbmQgb2YgcXVldWUpXG4gICAgICB0aW1lcigpXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCAmJiB0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY2xlYW4gdXAgb2YgcHJldmlvdXNseSBhY3RpdmUgb3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy50b0FycmF5KCkuZm9yRWFjaCgob3B0aW9uOiBNYXRPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9uLnNldEluYWN0aXZlU3R5bGVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgZmlyc3Qgb25lIGFzIGFjdGl2ZVxuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy50b0FycmF5KClbMF0uc2V0QWN0aXZlU3R5bGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFjdGl2YXRlT3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoZXMgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCB0byByZW1vdmUgdGhlIGZvY3VzXG4gICAqIFRoZSBhdXRvY29tcGxldGUgcGFuZWwgaXMgY29uc2lkZXJlZCBpbnNpZGUgdGhlIGNvbXBvbmVudCBzbyB3ZVxuICAgKiBuZWVkIHRvIHVzZSBhIGZsYWcgdG8gZmluZCBvdXQgd2hlbiBpdHMgY2xpY2tlZC5cbiAgICovXG4gIHByaXZhdGUgX3dhdGNoT3V0c2lkZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kb2N1bWVudCkge1xuICAgICAgdGhpcy5fb3V0c2lkZUNsaWNrU3VicyA9IG1lcmdlKGZyb21FdmVudCh0aGlzLl9kb2N1bWVudCwgJ2NsaWNrJyksIGZyb21FdmVudCh0aGlzLl9kb2N1bWVudCwgJ3RvdWNoZW5kJykpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLl90b3VjaGVuZERlYm91bmNlKSxcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbGlja1RhcmdldDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkICYmXG4gICAgICAgICAgICAgIGNsaWNrVGFyZ2V0ICE9PSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgIXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja1RhcmdldCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuX2ludGVybmFsQ2xpY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZvY3VzZWRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==