@covalent/core 3.1.2 → 4.0.0-beta.2

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 (840) hide show
  1. package/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +3 -0
  2. package/breadcrumbs/breadcrumb/breadcrumb.component.scss +3 -0
  3. package/breadcrumbs/breadcrumbs.component.d.ts +3 -0
  4. package/breadcrumbs/breadcrumbs.component.scss +1 -0
  5. package/breadcrumbs/breadcrumbs.module.d.ts +8 -0
  6. package/breadcrumbs/covalent-core-breadcrumbs.d.ts +1 -0
  7. package/breadcrumbs/package.json +6 -7
  8. package/common/_common-theme.scss +2 -0
  9. package/common/common.module.d.ts +15 -0
  10. package/common/covalent-core-common.d.ts +1 -2
  11. package/common/directives/fullscreen/fullscreen.directive.d.ts +3 -0
  12. package/common/forms/auto-trim/auto-trim.directive.d.ts +3 -0
  13. package/common/material-icons.css +31 -18
  14. package/common/material-icons.css.map +1 -1
  15. package/common/package.json +6 -7
  16. package/common/pipes/bytes/bytes.pipe.d.ts +3 -0
  17. package/common/pipes/decimal-bytes/decimal-bytes.pipe.d.ts +3 -0
  18. package/common/pipes/digits/digits.pipe.d.ts +3 -0
  19. package/common/pipes/time-ago/time-ago.pipe.d.ts +3 -0
  20. package/common/pipes/time-difference/time-difference.pipe.d.ts +3 -0
  21. package/common/pipes/time-until/time-until.pipe.d.ts +3 -0
  22. package/common/pipes/truncate/truncate.pipe.d.ts +3 -0
  23. package/common/platform.css +11828 -10433
  24. package/common/platform.css.map +1 -1
  25. package/common/services/icon.service.d.ts +3 -0
  26. package/common/services/router-path.service.d.ts +3 -0
  27. package/common/styles/_layout.scss +12 -10
  28. package/common/styles/_palette-dark.scss +2 -2
  29. package/common/styles/_palette-light.scss +6 -6
  30. package/common/styles/_rtl.scss +3 -0
  31. package/common/styles/_variables.scss +5 -5
  32. package/common/styles/colors/_colors-dark.scss +327 -0
  33. package/common/styles/colors/_colors-light.scss +748 -0
  34. package/common/styles/core/_button.scss +2 -1
  35. package/common/styles/core/_card.scss +27 -7
  36. package/common/styles/core/_content.scss +2 -1
  37. package/common/styles/core/_divider.scss +1 -0
  38. package/common/styles/core/_icons.scss +2 -0
  39. package/common/styles/core/_sidenav.scss +2 -0
  40. package/common/styles/core/_structure.scss +6 -7
  41. package/common/styles/core/_toolbar.scss +7 -0
  42. package/common/styles/core/_whiteframe.scss +2 -2
  43. package/common/styles/font/_font.scss +10 -4
  44. package/common/styles/utilities/_general.scss +14 -0
  45. package/common/styles/utilities/_text.scss +21 -0
  46. package/covalent-core.d.ts +1 -0
  47. package/dialogs/_dialog-theme.scss +1 -0
  48. package/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -0
  49. package/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -0
  50. package/dialogs/covalent-core-dialogs.d.ts +1 -1
  51. package/dialogs/dialog.component.d.ts +9 -0
  52. package/dialogs/dialog.component.scss +5 -0
  53. package/dialogs/dialogs.module.d.ts +17 -0
  54. package/dialogs/package.json +6 -7
  55. package/dialogs/prompt-dialog/prompt-dialog.component.d.ts +3 -0
  56. package/dialogs/prompt-dialog/prompt-dialog.component.scss +1 -0
  57. package/dialogs/public-api.d.ts +1 -0
  58. package/dialogs/services/dialog.service.d.ts +3 -0
  59. package/dialogs/window-dialog/window-dialog.component.d.ts +3 -0
  60. package/dynamic-menu/covalent-core-dynamic-menu.d.ts +1 -1
  61. package/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.d.ts +3 -0
  62. package/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.scss +1 -0
  63. package/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.d.ts +3 -0
  64. package/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.scss +3 -1
  65. package/dynamic-menu/dynamic-menu.component.d.ts +3 -0
  66. package/dynamic-menu/dynamic-menu.module.d.ts +13 -0
  67. package/dynamic-menu/package.json +6 -7
  68. package/dynamic-menu/public_api.d.ts +1 -0
  69. package/esm2020/breadcrumbs/breadcrumb/breadcrumb.component.mjs +108 -0
  70. package/esm2020/breadcrumbs/breadcrumbs.component.mjs +139 -0
  71. package/esm2020/breadcrumbs/breadcrumbs.module.mjs +21 -0
  72. package/esm2020/breadcrumbs/covalent-core-breadcrumbs.mjs +5 -0
  73. package/esm2020/breadcrumbs/index.mjs +2 -0
  74. package/esm2020/breadcrumbs/public-api.mjs +4 -0
  75. package/esm2020/common/animations/bounce/bounce.animation.mjs +70 -0
  76. package/esm2020/common/animations/collapse/collapse.animation.mjs +51 -0
  77. package/esm2020/common/animations/common/interfaces.mjs +2 -0
  78. package/esm2020/common/animations/fade/fadeInOut.animation.mjs +37 -0
  79. package/esm2020/common/animations/flash/flash.animation.mjs +34 -0
  80. package/esm2020/common/animations/headshake/headshake.animation.mjs +35 -0
  81. package/esm2020/common/animations/jello/jello.animation.mjs +38 -0
  82. package/esm2020/common/animations/pulse/pulse.animation.mjs +32 -0
  83. package/esm2020/common/animations/rotate/rotate.animation.mjs +25 -0
  84. package/esm2020/common/behaviors/control-value-accesor.mixin.mjs +39 -0
  85. package/esm2020/common/behaviors/disable-ripple.mixin.mjs +24 -0
  86. package/esm2020/common/behaviors/disabled.mixin.mjs +24 -0
  87. package/esm2020/common/common.module.mjs +64 -0
  88. package/esm2020/common/covalent-core-common.mjs +5 -0
  89. package/esm2020/common/directives/fullscreen/fullscreen.directive.mjs +85 -0
  90. package/esm2020/common/forms/auto-trim/auto-trim.directive.mjs +36 -0
  91. package/esm2020/common/forms/validators/validators.mjs +29 -0
  92. package/{esm2015/common/functions/clipboard.js → esm2020/common/functions/clipboard.mjs} +3 -10
  93. package/esm2020/common/functions/convert.mjs +84 -0
  94. package/esm2020/common/functions/download.mjs +75 -0
  95. package/esm2020/common/functions/file.mjs +16 -0
  96. package/esm2020/common/index.mjs +2 -0
  97. package/esm2020/common/pipes/bytes/bytes.pipe.mjs +32 -0
  98. package/esm2020/common/pipes/decimal-bytes/decimal-bytes.pipe.mjs +32 -0
  99. package/esm2020/common/pipes/digits/digits.pipe.mjs +39 -0
  100. package/esm2020/common/pipes/time-ago/time-ago.pipe.mjs +72 -0
  101. package/esm2020/common/pipes/time-difference/time-difference.pipe.mjs +51 -0
  102. package/esm2020/common/pipes/time-until/time-until.pipe.mjs +72 -0
  103. package/esm2020/common/pipes/truncate/truncate.pipe.mjs +27 -0
  104. package/esm2020/common/public-api.mjs +39 -0
  105. package/esm2020/common/services/icon.service.mjs +1089 -0
  106. package/esm2020/common/services/router-path.service.mjs +29 -0
  107. package/esm2020/covalent-core.mjs +5 -0
  108. package/esm2020/dialogs/alert-dialog/alert-dialog.component.mjs +54 -0
  109. package/esm2020/dialogs/confirm-dialog/confirm-dialog.component.mjs +68 -0
  110. package/esm2020/dialogs/covalent-core-dialogs.mjs +5 -0
  111. package/esm2020/dialogs/dialog.component.mjs +97 -0
  112. package/esm2020/dialogs/dialogs.module.mjs +86 -0
  113. package/esm2020/dialogs/index.mjs +2 -0
  114. package/esm2020/dialogs/prompt-dialog/prompt-dialog.component.mjs +104 -0
  115. package/esm2020/dialogs/public-api.mjs +9 -0
  116. package/esm2020/dialogs/resizable-draggable-dialog/resizable-draggable-dialog.mjs +199 -0
  117. package/esm2020/dialogs/services/dialog.service.mjs +168 -0
  118. package/esm2020/dialogs/window-dialog/window-dialog.component.mjs +69 -0
  119. package/esm2020/dynamic-menu/covalent-core-dynamic-menu.mjs +5 -0
  120. package/esm2020/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.mjs +147 -0
  121. package/esm2020/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.mjs +113 -0
  122. package/esm2020/dynamic-menu/dynamic-menu.component.mjs +111 -0
  123. package/esm2020/dynamic-menu/dynamic-menu.module.mjs +32 -0
  124. package/esm2020/dynamic-menu/index.mjs +2 -0
  125. package/esm2020/dynamic-menu/public_api.mjs +5 -0
  126. package/esm2020/file/covalent-core-file.mjs +5 -0
  127. package/esm2020/file/directives/file-drop.directive.mjs +148 -0
  128. package/esm2020/file/directives/file-select.directive.mjs +76 -0
  129. package/esm2020/file/file-input/file-input.component.mjs +137 -0
  130. package/esm2020/file/file-upload/file-upload.component.mjs +210 -0
  131. package/esm2020/file/file.module.mjs +43 -0
  132. package/esm2020/file/index.mjs +2 -0
  133. package/esm2020/file/public-api.mjs +7 -0
  134. package/esm2020/file/services/file.service.mjs +62 -0
  135. package/esm2020/index.mjs +2 -0
  136. package/esm2020/json-formatter/covalent-core-json-formatter.mjs +5 -0
  137. package/esm2020/json-formatter/index.mjs +2 -0
  138. package/esm2020/json-formatter/json-formatter.component.mjs +302 -0
  139. package/esm2020/json-formatter/json-formatter.module.mjs +21 -0
  140. package/esm2020/json-formatter/public-api.mjs +3 -0
  141. package/esm2020/layout/covalent-core-layout.mjs +5 -0
  142. package/esm2020/layout/index.mjs +2 -0
  143. package/esm2020/layout/layout-card-over/layout-card-over.component.mjs +87 -0
  144. package/esm2020/layout/layout-footer/layout-footer.component.mjs +38 -0
  145. package/esm2020/layout/layout-manage-list/layout-manage-list.component.mjs +122 -0
  146. package/esm2020/layout/layout-manage-list/layout-manage-list.directives.mjs +90 -0
  147. package/esm2020/layout/layout-nav/layout-nav.component.mjs +112 -0
  148. package/esm2020/layout/layout-nav-list/layout-nav-list.component.mjs +215 -0
  149. package/esm2020/layout/layout-nav-list/layout-nav-list.directives.mjs +90 -0
  150. package/esm2020/layout/layout-toggle.class.mjs +95 -0
  151. package/esm2020/layout/layout.component.mjs +113 -0
  152. package/esm2020/layout/layout.directives.mjs +87 -0
  153. package/esm2020/layout/layout.module.mjs +118 -0
  154. package/esm2020/layout/navigation-drawer/navigation-drawer.component.mjs +306 -0
  155. package/esm2020/layout/public-api.mjs +13 -0
  156. package/esm2020/menu/covalent-core-menu.mjs +5 -0
  157. package/esm2020/menu/index.mjs +2 -0
  158. package/esm2020/menu/menu.component.mjs +23 -0
  159. package/esm2020/menu/menu.module.mjs +22 -0
  160. package/esm2020/menu/public-api.mjs +3 -0
  161. package/esm2020/message/covalent-core-message.mjs +5 -0
  162. package/esm2020/message/index.mjs +2 -0
  163. package/esm2020/message/message.component.mjs +261 -0
  164. package/esm2020/message/message.module.mjs +21 -0
  165. package/esm2020/message/public-api.mjs +3 -0
  166. package/esm2020/search/covalent-core-search.mjs +5 -0
  167. package/esm2020/search/index.mjs +2 -0
  168. package/esm2020/search/public-api.mjs +4 -0
  169. package/esm2020/search/search-box/search-box.component.mjs +220 -0
  170. package/esm2020/search/search-input/search-input.component.mjs +240 -0
  171. package/esm2020/search/search.module.mjs +24 -0
  172. package/esm2020/side-sheet/covalent-core-side-sheet.mjs +5 -0
  173. package/esm2020/side-sheet/index.mjs +2 -0
  174. package/esm2020/side-sheet/public-api.mjs +6 -0
  175. package/esm2020/side-sheet/side-sheet-container.mjs +242 -0
  176. package/esm2020/side-sheet/side-sheet-ref.mjs +21 -0
  177. package/esm2020/side-sheet/side-sheet.animation.mjs +12 -0
  178. package/esm2020/side-sheet/side-sheet.config.mjs +4 -0
  179. package/esm2020/side-sheet/side-sheet.content-directives.mjs +178 -0
  180. package/esm2020/side-sheet/side-sheet.mjs +208 -0
  181. package/esm2020/side-sheet/side-sheet.module.mjs +46 -0
  182. package/esm2020/user-profile/covalent-core-user-profile.mjs +5 -0
  183. package/esm2020/user-profile/index.mjs +2 -0
  184. package/esm2020/user-profile/public_api.mjs +4 -0
  185. package/esm2020/user-profile/user-profile-menu/user-profile-menu.component.mjs +75 -0
  186. package/esm2020/user-profile/user-profile.component.mjs +41 -0
  187. package/esm2020/user-profile/user-profile.module.mjs +26 -0
  188. package/fesm2015/covalent-core-breadcrumbs.mjs +287 -0
  189. package/fesm2015/covalent-core-breadcrumbs.mjs.map +1 -0
  190. package/fesm2015/covalent-core-common.mjs +2251 -0
  191. package/fesm2015/covalent-core-common.mjs.map +1 -0
  192. package/fesm2015/covalent-core-dialogs.mjs +872 -0
  193. package/fesm2015/covalent-core-dialogs.mjs.map +1 -0
  194. package/fesm2015/covalent-core-dynamic-menu.mjs +480 -0
  195. package/fesm2015/covalent-core-dynamic-menu.mjs.map +1 -0
  196. package/fesm2015/covalent-core-file.mjs +698 -0
  197. package/fesm2015/covalent-core-file.mjs.map +1 -0
  198. package/fesm2015/covalent-core-json-formatter.mjs +353 -0
  199. package/fesm2015/covalent-core-json-formatter.mjs.map +1 -0
  200. package/fesm2015/covalent-core-layout.mjs +1577 -0
  201. package/fesm2015/covalent-core-layout.mjs.map +1 -0
  202. package/fesm2015/covalent-core-menu.mjs +55 -0
  203. package/fesm2015/covalent-core-menu.mjs.map +1 -0
  204. package/fesm2015/covalent-core-message.mjs +309 -0
  205. package/fesm2015/covalent-core-message.mjs.map +1 -0
  206. package/fesm2015/covalent-core-search.mjs +508 -0
  207. package/fesm2015/covalent-core-search.mjs.map +1 -0
  208. package/fesm2015/covalent-core-side-sheet.mjs +733 -0
  209. package/fesm2015/covalent-core-side-sheet.mjs.map +1 -0
  210. package/fesm2015/covalent-core-user-profile.mjs +162 -0
  211. package/fesm2015/covalent-core-user-profile.mjs.map +1 -0
  212. package/{chips/covalent-core-chips.d.ts → fesm2015/covalent-core.mjs} +1 -1
  213. package/fesm2015/covalent-core.mjs.map +1 -0
  214. package/fesm2020/covalent-core-breadcrumbs.mjs +268 -0
  215. package/{fesm2015/covalent-core-breadcrumbs.js.map → fesm2020/covalent-core-breadcrumbs.mjs.map} +1 -1
  216. package/{fesm2015/covalent-core-common.js → fesm2020/covalent-core-common.mjs} +213 -768
  217. package/fesm2020/covalent-core-common.mjs.map +1 -0
  218. package/fesm2020/covalent-core-dialogs.mjs +812 -0
  219. package/fesm2020/covalent-core-dialogs.mjs.map +1 -0
  220. package/fesm2020/covalent-core-dynamic-menu.mjs +393 -0
  221. package/fesm2020/covalent-core-dynamic-menu.mjs.map +1 -0
  222. package/fesm2020/covalent-core-file.mjs +651 -0
  223. package/fesm2020/covalent-core-file.mjs.map +1 -0
  224. package/fesm2020/covalent-core-json-formatter.mjs +326 -0
  225. package/fesm2020/covalent-core-json-formatter.mjs.map +1 -0
  226. package/fesm2020/covalent-core-layout.mjs +1414 -0
  227. package/fesm2020/covalent-core-layout.mjs.map +1 -0
  228. package/fesm2020/covalent-core-menu.mjs +49 -0
  229. package/fesm2020/covalent-core-menu.mjs.map +1 -0
  230. package/fesm2020/covalent-core-message.mjs +286 -0
  231. package/fesm2020/covalent-core-message.mjs.map +1 -0
  232. package/fesm2020/covalent-core-search.mjs +473 -0
  233. package/fesm2020/covalent-core-search.mjs.map +1 -0
  234. package/{fesm2015/covalent-core-side-sheet.js → fesm2020/covalent-core-side-sheet.mjs} +202 -646
  235. package/fesm2020/covalent-core-side-sheet.mjs.map +1 -0
  236. package/fesm2020/covalent-core-user-profile.mjs +141 -0
  237. package/fesm2020/covalent-core-user-profile.mjs.map +1 -0
  238. package/{data-table/covalent-core-data-table.d.ts → fesm2020/covalent-core.mjs} +1 -1
  239. package/fesm2020/covalent-core.mjs.map +1 -0
  240. package/file/_file-theme.scss +1 -0
  241. package/file/covalent-core-file.d.ts +1 -0
  242. package/file/directives/file-drop.directive.d.ts +3 -0
  243. package/file/directives/file-select.directive.d.ts +3 -0
  244. package/file/file-input/file-input.component.d.ts +5 -0
  245. package/file/file-input/file-input.component.scss +2 -0
  246. package/file/file-upload/file-upload.component.d.ts +3 -0
  247. package/file/file-upload/file-upload.component.scss +4 -0
  248. package/file/file.module.d.ts +13 -0
  249. package/file/package.json +6 -7
  250. package/file/services/file.service.d.ts +3 -0
  251. package/json-formatter/_json-formatter-theme.scss +10 -0
  252. package/json-formatter/covalent-core-json-formatter.d.ts +1 -0
  253. package/json-formatter/json-formatter.component.d.ts +3 -0
  254. package/json-formatter/json-formatter.component.scss +13 -0
  255. package/json-formatter/json-formatter.module.d.ts +8 -0
  256. package/json-formatter/package.json +6 -7
  257. package/layout/_layout-theme.scss +12 -0
  258. package/layout/covalent-core-layout.d.ts +1 -0
  259. package/layout/layout-card-over/layout-card-over.component.d.ts +3 -0
  260. package/layout/layout-card-over/layout-card-over.component.scss +3 -0
  261. package/layout/layout-footer/layout-footer.component.d.ts +3 -0
  262. package/layout/layout-manage-list/layout-manage-list.component.d.ts +3 -0
  263. package/layout/layout-manage-list/layout-manage-list.component.scss +9 -5
  264. package/layout/layout-manage-list/layout-manage-list.directives.d.ts +7 -0
  265. package/layout/layout-nav/layout-nav.component.d.ts +3 -0
  266. package/layout/layout-nav/layout-nav.component.scss +4 -0
  267. package/layout/layout-nav-list/layout-nav-list.component.d.ts +3 -0
  268. package/layout/layout-nav-list/layout-nav-list.component.scss +9 -4
  269. package/layout/layout-nav-list/layout-nav-list.directives.d.ts +7 -0
  270. package/layout/layout-toggle.class.d.ts +3 -0
  271. package/layout/layout.component.d.ts +3 -0
  272. package/layout/layout.component.scss +0 -4
  273. package/layout/layout.directives.d.ts +7 -0
  274. package/layout/layout.module.d.ts +23 -0
  275. package/layout/navigation-drawer/navigation-drawer.component.d.ts +7 -0
  276. package/layout/navigation-drawer/navigation-drawer.component.scss +8 -0
  277. package/layout/package.json +6 -7
  278. package/menu/covalent-core-menu.d.ts +1 -0
  279. package/menu/menu.component.d.ts +3 -0
  280. package/menu/menu.component.scss +9 -1
  281. package/menu/menu.module.d.ts +8 -0
  282. package/menu/package.json +6 -7
  283. package/message/_message-theme.scss +3 -0
  284. package/message/covalent-core-message.d.ts +1 -0
  285. package/message/message.component.d.ts +5 -0
  286. package/message/message.component.scss +3 -0
  287. package/message/message.module.d.ts +7 -0
  288. package/message/package.json +6 -7
  289. package/package.json +126 -15
  290. package/search/covalent-core-search.d.ts +1 -0
  291. package/search/package.json +6 -7
  292. package/search/search-box/search-box.component.d.ts +3 -0
  293. package/search/search-box/search-box.component.scss +5 -0
  294. package/search/search-input/search-input.component.d.ts +3 -0
  295. package/search/search-input/search-input.component.scss +12 -0
  296. package/search/search.module.d.ts +11 -0
  297. package/side-sheet/covalent-core-side-sheet.d.ts +1 -2
  298. package/side-sheet/package.json +6 -7
  299. package/side-sheet/side-sheet-container.d.ts +5 -0
  300. package/side-sheet/side-sheet.content-directives.d.ts +11 -0
  301. package/side-sheet/side-sheet.d.ts +5 -0
  302. package/side-sheet/side-sheet.module.d.ts +9 -0
  303. package/side-sheet/side-sheet.scss +1 -2
  304. package/theming/_all-theme.scss +0 -14
  305. package/theming/prebuilt/blue-grey-deep-orange.css +1714 -1581
  306. package/theming/prebuilt/blue-grey-deep-orange.css.map +1 -1
  307. package/theming/prebuilt/blue-grey-deep-orange.scss +15 -8
  308. package/theming/prebuilt/blue-orange.css +1713 -1580
  309. package/theming/prebuilt/blue-orange.css.map +1 -1
  310. package/theming/prebuilt/blue-orange.scss +15 -8
  311. package/theming/prebuilt/indigo-pink.css +1714 -1581
  312. package/theming/prebuilt/indigo-pink.css.map +1 -1
  313. package/theming/prebuilt/indigo-pink.scss +15 -8
  314. package/theming/prebuilt/orange-light-blue.css +1713 -1580
  315. package/theming/prebuilt/orange-light-blue.css.map +1 -1
  316. package/theming/prebuilt/orange-light-blue.scss +15 -8
  317. package/theming/prebuilt/teal-orange.css +1713 -1580
  318. package/theming/prebuilt/teal-orange.css.map +1 -1
  319. package/theming/prebuilt/teal-orange.scss +15 -8
  320. package/typography/_all-typography.scss +0 -10
  321. package/user-profile/covalent-core-user-profile.d.ts +1 -0
  322. package/user-profile/package.json +6 -7
  323. package/user-profile/user-profile-menu/user-profile-menu.component.d.ts +3 -0
  324. package/user-profile/user-profile-menu/user-profile-menu.component.scss +3 -0
  325. package/user-profile/user-profile.component.d.ts +3 -0
  326. package/user-profile/user-profile.module.d.ts +12 -0
  327. package/breadcrumbs/covalent-core-breadcrumbs.metadata.json +0 -1
  328. package/bundles/covalent-core-breadcrumbs.umd.js +0 -490
  329. package/bundles/covalent-core-breadcrumbs.umd.js.map +0 -1
  330. package/bundles/covalent-core-breadcrumbs.umd.min.js +0 -2
  331. package/bundles/covalent-core-breadcrumbs.umd.min.js.map +0 -1
  332. package/bundles/covalent-core-chips.umd.js +0 -1507
  333. package/bundles/covalent-core-chips.umd.js.map +0 -1
  334. package/bundles/covalent-core-chips.umd.min.js +0 -16
  335. package/bundles/covalent-core-chips.umd.min.js.map +0 -1
  336. package/bundles/covalent-core-common.umd.js +0 -3188
  337. package/bundles/covalent-core-common.umd.js.map +0 -1
  338. package/bundles/covalent-core-common.umd.min.js +0 -17
  339. package/bundles/covalent-core-common.umd.min.js.map +0 -1
  340. package/bundles/covalent-core-data-table.umd.js +0 -2756
  341. package/bundles/covalent-core-data-table.umd.js.map +0 -1
  342. package/bundles/covalent-core-data-table.umd.min.js +0 -16
  343. package/bundles/covalent-core-data-table.umd.min.js.map +0 -1
  344. package/bundles/covalent-core-dialogs.umd.js +0 -1318
  345. package/bundles/covalent-core-dialogs.umd.js.map +0 -1
  346. package/bundles/covalent-core-dialogs.umd.min.js +0 -2
  347. package/bundles/covalent-core-dialogs.umd.min.js.map +0 -1
  348. package/bundles/covalent-core-dynamic-menu.umd.js +0 -215
  349. package/bundles/covalent-core-dynamic-menu.umd.js.map +0 -1
  350. package/bundles/covalent-core-dynamic-menu.umd.min.js +0 -2
  351. package/bundles/covalent-core-dynamic-menu.umd.min.js.map +0 -1
  352. package/bundles/covalent-core-expansion-panel.umd.js +0 -853
  353. package/bundles/covalent-core-expansion-panel.umd.js.map +0 -1
  354. package/bundles/covalent-core-expansion-panel.umd.min.js +0 -16
  355. package/bundles/covalent-core-expansion-panel.umd.min.js.map +0 -1
  356. package/bundles/covalent-core-file.umd.js +0 -1211
  357. package/bundles/covalent-core-file.umd.js.map +0 -1
  358. package/bundles/covalent-core-file.umd.min.js +0 -17
  359. package/bundles/covalent-core-file.umd.min.js.map +0 -1
  360. package/bundles/covalent-core-json-formatter.umd.js +0 -408
  361. package/bundles/covalent-core-json-formatter.umd.js.map +0 -1
  362. package/bundles/covalent-core-json-formatter.umd.min.js +0 -2
  363. package/bundles/covalent-core-json-formatter.umd.min.js.map +0 -1
  364. package/bundles/covalent-core-layout.umd.js +0 -2084
  365. package/bundles/covalent-core-layout.umd.js.map +0 -1
  366. package/bundles/covalent-core-layout.umd.min.js +0 -17
  367. package/bundles/covalent-core-layout.umd.min.js.map +0 -1
  368. package/bundles/covalent-core-loading.umd.js +0 -1534
  369. package/bundles/covalent-core-loading.umd.js.map +0 -1
  370. package/bundles/covalent-core-loading.umd.min.js +0 -16
  371. package/bundles/covalent-core-loading.umd.min.js.map +0 -1
  372. package/bundles/covalent-core-media.umd.js +0 -749
  373. package/bundles/covalent-core-media.umd.js.map +0 -1
  374. package/bundles/covalent-core-media.umd.min.js +0 -16
  375. package/bundles/covalent-core-media.umd.min.js.map +0 -1
  376. package/bundles/covalent-core-menu.umd.js +0 -69
  377. package/bundles/covalent-core-menu.umd.js.map +0 -1
  378. package/bundles/covalent-core-menu.umd.min.js +0 -2
  379. package/bundles/covalent-core-menu.umd.min.js.map +0 -1
  380. package/bundles/covalent-core-message.umd.js +0 -375
  381. package/bundles/covalent-core-message.umd.js.map +0 -1
  382. package/bundles/covalent-core-message.umd.min.js +0 -2
  383. package/bundles/covalent-core-message.umd.min.js.map +0 -1
  384. package/bundles/covalent-core-nav-links.umd.js +0 -197
  385. package/bundles/covalent-core-nav-links.umd.js.map +0 -1
  386. package/bundles/covalent-core-nav-links.umd.min.js +0 -2
  387. package/bundles/covalent-core-nav-links.umd.min.js.map +0 -1
  388. package/bundles/covalent-core-notifications.umd.js +0 -275
  389. package/bundles/covalent-core-notifications.umd.js.map +0 -1
  390. package/bundles/covalent-core-notifications.umd.min.js +0 -2
  391. package/bundles/covalent-core-notifications.umd.min.js.map +0 -1
  392. package/bundles/covalent-core-paging.umd.js +0 -491
  393. package/bundles/covalent-core-paging.umd.js.map +0 -1
  394. package/bundles/covalent-core-paging.umd.min.js +0 -2
  395. package/bundles/covalent-core-paging.umd.min.js.map +0 -1
  396. package/bundles/covalent-core-search.umd.js +0 -877
  397. package/bundles/covalent-core-search.umd.js.map +0 -1
  398. package/bundles/covalent-core-search.umd.min.js +0 -16
  399. package/bundles/covalent-core-search.umd.min.js.map +0 -1
  400. package/bundles/covalent-core-side-sheet.umd.js +0 -1458
  401. package/bundles/covalent-core-side-sheet.umd.js.map +0 -1
  402. package/bundles/covalent-core-side-sheet.umd.min.js +0 -16
  403. package/bundles/covalent-core-side-sheet.umd.min.js.map +0 -1
  404. package/bundles/covalent-core-sidesheet.umd.js +0 -145
  405. package/bundles/covalent-core-sidesheet.umd.js.map +0 -1
  406. package/bundles/covalent-core-sidesheet.umd.min.js +0 -2
  407. package/bundles/covalent-core-sidesheet.umd.min.js.map +0 -1
  408. package/bundles/covalent-core-steps.umd.js +0 -1756
  409. package/bundles/covalent-core-steps.umd.js.map +0 -1
  410. package/bundles/covalent-core-steps.umd.min.js +0 -16
  411. package/bundles/covalent-core-steps.umd.min.js.map +0 -1
  412. package/bundles/covalent-core-tab-select.umd.js +0 -732
  413. package/bundles/covalent-core-tab-select.umd.js.map +0 -1
  414. package/bundles/covalent-core-tab-select.umd.min.js +0 -16
  415. package/bundles/covalent-core-tab-select.umd.min.js.map +0 -1
  416. package/bundles/covalent-core-user-profile.umd.js +0 -124
  417. package/bundles/covalent-core-user-profile.umd.js.map +0 -1
  418. package/bundles/covalent-core-user-profile.umd.min.js +0 -2
  419. package/bundles/covalent-core-user-profile.umd.min.js.map +0 -1
  420. package/bundles/covalent-core-virtual-scroll.umd.js +0 -785
  421. package/bundles/covalent-core-virtual-scroll.umd.js.map +0 -1
  422. package/bundles/covalent-core-virtual-scroll.umd.min.js +0 -16
  423. package/bundles/covalent-core-virtual-scroll.umd.min.js.map +0 -1
  424. package/bundles/covalent-core.umd.js +0 -9
  425. package/bundles/covalent-core.umd.js.map +0 -1
  426. package/bundles/covalent-core.umd.min.js +0 -2
  427. package/bundles/covalent-core.umd.min.js.map +0 -1
  428. package/chips/README.md +0 -99
  429. package/chips/_chips-theme.scss +0 -87
  430. package/chips/chips.component.d.ts +0 -287
  431. package/chips/chips.component.scss +0 -147
  432. package/chips/chips.module.d.ts +0 -2
  433. package/chips/covalent-core-chips.metadata.json +0 -1
  434. package/chips/index.d.ts +0 -1
  435. package/chips/package.json +0 -11
  436. package/chips/public-api.d.ts +0 -2
  437. package/common/covalent-core-common.metadata.json +0 -1
  438. package/covalent-core.metadata.json +0 -1
  439. package/data-table/README.md +0 -134
  440. package/data-table/_data-table-theme.scss +0 -115
  441. package/data-table/covalent-core-data-table.metadata.json +0 -1
  442. package/data-table/data-table-cell/data-table-cell.component.d.ts +0 -22
  443. package/data-table/data-table-cell/data-table-cell.component.scss +0 -58
  444. package/data-table/data-table-column/data-table-column.component.d.ts +0 -63
  445. package/data-table/data-table-column/data-table-column.component.scss +0 -80
  446. package/data-table/data-table-row/data-table-row.component.d.ts +0 -20
  447. package/data-table/data-table-row/data-table-row.component.scss +0 -12
  448. package/data-table/data-table-table/data-table-table.component.d.ts +0 -6
  449. package/data-table/data-table-table/data-table-table.component.scss +0 -7
  450. package/data-table/data-table.component.d.ts +0 -356
  451. package/data-table/data-table.component.scss +0 -93
  452. package/data-table/data-table.module.d.ts +0 -2
  453. package/data-table/directives/data-table-template.directive.d.ts +0 -6
  454. package/data-table/index.d.ts +0 -1
  455. package/data-table/package.json +0 -11
  456. package/data-table/public-api.d.ts +0 -8
  457. package/data-table/services/data-table.service.d.ts +0 -31
  458. package/dialogs/covalent-core-dialogs.metadata.json +0 -1
  459. package/dynamic-menu/covalent-core-dynamic-menu.metadata.json +0 -1
  460. package/esm2015/breadcrumbs/breadcrumb/breadcrumb.component.js +0 -171
  461. package/esm2015/breadcrumbs/breadcrumbs.component.js +0 -241
  462. package/esm2015/breadcrumbs/breadcrumbs.module.js +0 -20
  463. package/esm2015/breadcrumbs/covalent-core-breadcrumbs.js +0 -10
  464. package/esm2015/breadcrumbs/index.js +0 -7
  465. package/esm2015/breadcrumbs/public-api.js +0 -9
  466. package/esm2015/chips/chips.component.js +0 -1115
  467. package/esm2015/chips/chips.module.js +0 -23
  468. package/esm2015/chips/covalent-core-chips.js +0 -10
  469. package/esm2015/chips/index.js +0 -7
  470. package/esm2015/chips/public-api.js +0 -8
  471. package/esm2015/common/animations/bounce/bounce.animation.js +0 -76
  472. package/esm2015/common/animations/collapse/collapse.animation.js +0 -67
  473. package/esm2015/common/animations/common/interfaces.js +0 -18
  474. package/esm2015/common/animations/fade/fadeInOut.animation.js +0 -53
  475. package/esm2015/common/animations/flash/flash.animation.js +0 -40
  476. package/esm2015/common/animations/headshake/headshake.animation.js +0 -41
  477. package/esm2015/common/animations/jello/jello.animation.js +0 -44
  478. package/esm2015/common/animations/pulse/pulse.animation.js +0 -38
  479. package/esm2015/common/animations/rotate/rotate.animation.js +0 -41
  480. package/esm2015/common/behaviors/control-value-accesor.mixin.js +0 -107
  481. package/esm2015/common/behaviors/disable-ripple.mixin.js +0 -63
  482. package/esm2015/common/behaviors/disabled.mixin.js +0 -63
  483. package/esm2015/common/common.module.js +0 -54
  484. package/esm2015/common/covalent-core-common.js +0 -12
  485. package/esm2015/common/directives/fullscreen/fullscreen.directive.js +0 -180
  486. package/esm2015/common/forms/auto-trim/auto-trim.directive.js +0 -46
  487. package/esm2015/common/forms/validators/validators.js +0 -58
  488. package/esm2015/common/functions/convert.js +0 -103
  489. package/esm2015/common/functions/download.js +0 -88
  490. package/esm2015/common/functions/file.js +0 -29
  491. package/esm2015/common/index.js +0 -7
  492. package/esm2015/common/pipes/bytes/bytes.pipe.js +0 -41
  493. package/esm2015/common/pipes/decimal-bytes/decimal-bytes.pipe.js +0 -41
  494. package/esm2015/common/pipes/digits/digits.pipe.js +0 -65
  495. package/esm2015/common/pipes/time-ago/time-ago.pipe.js +0 -81
  496. package/esm2015/common/pipes/time-difference/time-difference.pipe.js +0 -66
  497. package/esm2015/common/pipes/time-until/time-until.pipe.js +0 -81
  498. package/esm2015/common/pipes/truncate/truncate.pipe.js +0 -34
  499. package/esm2015/common/public-api.js +0 -44
  500. package/esm2015/common/services/icon.service.js +0 -1109
  501. package/esm2015/common/services/router-path.service.js +0 -60
  502. package/esm2015/covalent-core.js +0 -10
  503. package/esm2015/data-table/covalent-core-data-table.js +0 -10
  504. package/esm2015/data-table/data-table-cell/data-table-cell.component.js +0 -88
  505. package/esm2015/data-table/data-table-column/data-table-column.component.js +0 -218
  506. package/esm2015/data-table/data-table-row/data-table-row.component.js +0 -132
  507. package/esm2015/data-table/data-table-table/data-table-table.component.js +0 -43
  508. package/esm2015/data-table/data-table.component.js +0 -1640
  509. package/esm2015/data-table/data-table.module.js +0 -39
  510. package/esm2015/data-table/directives/data-table-template.directive.js +0 -32
  511. package/esm2015/data-table/index.js +0 -7
  512. package/esm2015/data-table/public-api.js +0 -14
  513. package/esm2015/data-table/services/data-table.service.js +0 -116
  514. package/esm2015/dialogs/alert-dialog/alert-dialog.component.js +0 -47
  515. package/esm2015/dialogs/confirm-dialog/confirm-dialog.component.js +0 -59
  516. package/esm2015/dialogs/covalent-core-dialogs.js +0 -11
  517. package/esm2015/dialogs/dialog.component.js +0 -58
  518. package/esm2015/dialogs/dialogs.module.js +0 -57
  519. package/esm2015/dialogs/index.js +0 -7
  520. package/esm2015/dialogs/prompt-dialog/prompt-dialog.component.js +0 -83
  521. package/esm2015/dialogs/public-api.js +0 -13
  522. package/esm2015/dialogs/resizable-draggable-dialog/resizable-draggable-dialog.js +0 -325
  523. package/esm2015/dialogs/services/dialog.service.js +0 -316
  524. package/esm2015/dialogs/window-dialog/window-dialog.component.js +0 -56
  525. package/esm2015/dynamic-menu/covalent-core-dynamic-menu.js +0 -11
  526. package/esm2015/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.js +0 -40
  527. package/esm2015/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.js +0 -35
  528. package/esm2015/dynamic-menu/dynamic-menu.component.js +0 -89
  529. package/esm2015/dynamic-menu/dynamic-menu.module.js +0 -26
  530. package/esm2015/dynamic-menu/index.js +0 -7
  531. package/esm2015/dynamic-menu/public_api.js +0 -9
  532. package/esm2015/expansion-panel/covalent-core-expansion-panel.js +0 -10
  533. package/esm2015/expansion-panel/expansion-panel-group.component.js +0 -212
  534. package/esm2015/expansion-panel/expansion-panel.component.js +0 -272
  535. package/esm2015/expansion-panel/expansion-panel.module.js +0 -31
  536. package/esm2015/expansion-panel/index.js +0 -7
  537. package/esm2015/expansion-panel/public-api.js +0 -9
  538. package/esm2015/file/covalent-core-file.js +0 -10
  539. package/esm2015/file/directives/file-drop.directive.js +0 -191
  540. package/esm2015/file/directives/file-select.directive.js +0 -98
  541. package/esm2015/file/file-input/file-input.component.js +0 -186
  542. package/esm2015/file/file-upload/file-upload.component.js +0 -237
  543. package/esm2015/file/file.module.js +0 -35
  544. package/esm2015/file/index.js +0 -7
  545. package/esm2015/file/public-api.js +0 -12
  546. package/esm2015/file/services/file.service.js +0 -109
  547. package/esm2015/index.js +0 -7
  548. package/esm2015/json-formatter/covalent-core-json-formatter.js +0 -10
  549. package/esm2015/json-formatter/index.js +0 -7
  550. package/esm2015/json-formatter/json-formatter.component.js +0 -338
  551. package/esm2015/json-formatter/json-formatter.module.js +0 -20
  552. package/esm2015/json-formatter/public-api.js +0 -8
  553. package/esm2015/layout/covalent-core-layout.js +0 -10
  554. package/esm2015/layout/index.js +0 -7
  555. package/esm2015/layout/layout-card-over/layout-card-over.component.js +0 -71
  556. package/esm2015/layout/layout-footer/layout-footer.component.js +0 -71
  557. package/esm2015/layout/layout-manage-list/layout-manage-list.component.js +0 -145
  558. package/esm2015/layout/layout-manage-list/layout-manage-list.directives.js +0 -132
  559. package/esm2015/layout/layout-nav/layout-nav.component.js +0 -100
  560. package/esm2015/layout/layout-nav-list/layout-nav-list.component.js +0 -220
  561. package/esm2015/layout/layout-nav-list/layout-nav-list.directives.js +0 -132
  562. package/esm2015/layout/layout-toggle.class.js +0 -188
  563. package/esm2015/layout/layout.component.js +0 -145
  564. package/esm2015/layout/layout.directives.js +0 -129
  565. package/esm2015/layout/layout.module.js +0 -64
  566. package/esm2015/layout/navigation-drawer/navigation-drawer.component.js +0 -280
  567. package/esm2015/layout/public-api.js +0 -18
  568. package/esm2015/loading/covalent-core-loading.js +0 -10
  569. package/esm2015/loading/directives/loading.directive.js +0 -231
  570. package/esm2015/loading/index.js +0 -7
  571. package/esm2015/loading/loading.component.js +0 -302
  572. package/esm2015/loading/loading.module.js +0 -30
  573. package/esm2015/loading/public-api.js +0 -11
  574. package/esm2015/loading/services/loading.factory.js +0 -297
  575. package/esm2015/loading/services/loading.service.js +0 -319
  576. package/esm2015/media/covalent-core-media.js +0 -10
  577. package/esm2015/media/directives/media-toggle.directive.js +0 -207
  578. package/esm2015/media/index.js +0 -7
  579. package/esm2015/media/media.module.js +0 -20
  580. package/esm2015/media/public-api.js +0 -9
  581. package/esm2015/media/services/media.service.js +0 -169
  582. package/esm2015/menu/covalent-core-menu.js +0 -10
  583. package/esm2015/menu/index.js +0 -7
  584. package/esm2015/menu/menu.component.js +0 -16
  585. package/esm2015/menu/menu.module.js +0 -22
  586. package/esm2015/menu/public-api.js +0 -8
  587. package/esm2015/message/covalent-core-message.js +0 -10
  588. package/esm2015/message/index.js +0 -7
  589. package/esm2015/message/message.component.js +0 -307
  590. package/esm2015/message/message.module.js +0 -21
  591. package/esm2015/message/public-api.js +0 -8
  592. package/esm2015/nav-links/covalent-core-nav-links.js +0 -10
  593. package/esm2015/nav-links/index.js +0 -7
  594. package/esm2015/nav-links/nav-links.component.js +0 -138
  595. package/esm2015/nav-links/nav-links.module.js +0 -37
  596. package/esm2015/nav-links/public-api.js +0 -8
  597. package/esm2015/notifications/covalent-core-notifications.js +0 -10
  598. package/esm2015/notifications/index.js +0 -7
  599. package/esm2015/notifications/notification-count.component.js +0 -191
  600. package/esm2015/notifications/notifications.module.js +0 -20
  601. package/esm2015/notifications/public-api.js +0 -8
  602. package/esm2015/paging/covalent-core-paging.js +0 -10
  603. package/esm2015/paging/index.js +0 -7
  604. package/esm2015/paging/paging-bar.component.js +0 -412
  605. package/esm2015/paging/paging.module.js +0 -20
  606. package/esm2015/paging/public-api.js +0 -8
  607. package/esm2015/search/covalent-core-search.js +0 -10
  608. package/esm2015/search/index.js +0 -7
  609. package/esm2015/search/public-api.js +0 -9
  610. package/esm2015/search/search-box/search-box.component.js +0 -270
  611. package/esm2015/search/search-input/search-input.component.js +0 -260
  612. package/esm2015/search/search.module.js +0 -23
  613. package/esm2015/side-sheet/covalent-core-side-sheet.js +0 -12
  614. package/esm2015/side-sheet/index.js +0 -7
  615. package/esm2015/side-sheet/public-api.js +0 -11
  616. package/esm2015/side-sheet/side-sheet-container.js +0 -402
  617. package/esm2015/side-sheet/side-sheet-ref.js +0 -50
  618. package/esm2015/side-sheet/side-sheet.animation.js +0 -20
  619. package/esm2015/side-sheet/side-sheet.config.js +0 -12
  620. package/esm2015/side-sheet/side-sheet.content-directives.js +0 -255
  621. package/esm2015/side-sheet/side-sheet.js +0 -360
  622. package/esm2015/side-sheet/side-sheet.module.js +0 -36
  623. package/esm2015/sidesheet/covalent-core-sidesheet.js +0 -10
  624. package/esm2015/sidesheet/index.js +0 -7
  625. package/esm2015/sidesheet/public-api.js +0 -8
  626. package/esm2015/sidesheet/sidesheet.component.js +0 -72
  627. package/esm2015/sidesheet/sidesheet.module.js +0 -27
  628. package/esm2015/steps/covalent-core-steps.js +0 -10
  629. package/esm2015/steps/index.js +0 -7
  630. package/esm2015/steps/nav/nav-step-link/nav-step-link.component.js +0 -144
  631. package/esm2015/steps/nav/nav-steps-horizontal/nav-steps-horizontal.component.js +0 -371
  632. package/esm2015/steps/nav/nav-steps-vertical/nav-steps-vertical.component.js +0 -130
  633. package/esm2015/steps/public-api.js +0 -14
  634. package/esm2015/steps/step-body/step-body.component.js +0 -83
  635. package/esm2015/steps/step-header/step-header.component.js +0 -79
  636. package/esm2015/steps/step.component.js +0 -312
  637. package/esm2015/steps/steps.component.js +0 -234
  638. package/esm2015/steps/steps.module.js +0 -44
  639. package/esm2015/tab-select/covalent-core-tab-select.js +0 -10
  640. package/esm2015/tab-select/index.js +0 -7
  641. package/esm2015/tab-select/public-api.js +0 -9
  642. package/esm2015/tab-select/tab-option.component.js +0 -82
  643. package/esm2015/tab-select/tab-select.component.js +0 -291
  644. package/esm2015/tab-select/tab-select.module.js +0 -31
  645. package/esm2015/user-profile/covalent-core-user-profile.js +0 -10
  646. package/esm2015/user-profile/index.js +0 -7
  647. package/esm2015/user-profile/public_api.js +0 -9
  648. package/esm2015/user-profile/user-profile-menu/user-profile-menu.component.js +0 -35
  649. package/esm2015/user-profile/user-profile.component.js +0 -26
  650. package/esm2015/user-profile/user-profile.module.js +0 -33
  651. package/esm2015/virtual-scroll/covalent-core-virtual-scroll.js +0 -10
  652. package/esm2015/virtual-scroll/index.js +0 -7
  653. package/esm2015/virtual-scroll/public-api.js +0 -9
  654. package/esm2015/virtual-scroll/virtual-scroll-container.component.js +0 -391
  655. package/esm2015/virtual-scroll/virtual-scroll-row.directive.js +0 -25
  656. package/esm2015/virtual-scroll/virtual-scroll.module.js +0 -21
  657. package/expansion-panel/README.md +0 -116
  658. package/expansion-panel/_expansion-panel-theme.scss +0 -80
  659. package/expansion-panel/covalent-core-expansion-panel.d.ts +0 -4
  660. package/expansion-panel/covalent-core-expansion-panel.metadata.json +0 -1
  661. package/expansion-panel/expansion-panel-group.component.d.ts +0 -31
  662. package/expansion-panel/expansion-panel-group.component.scss +0 -0
  663. package/expansion-panel/expansion-panel.component.d.ts +0 -82
  664. package/expansion-panel/expansion-panel.component.scss +0 -50
  665. package/expansion-panel/expansion-panel.module.d.ts +0 -2
  666. package/expansion-panel/index.d.ts +0 -1
  667. package/expansion-panel/package.json +0 -11
  668. package/expansion-panel/public-api.d.ts +0 -3
  669. package/fesm2015/covalent-core-breadcrumbs.js +0 -448
  670. package/fesm2015/covalent-core-chips.js +0 -1151
  671. package/fesm2015/covalent-core-chips.js.map +0 -1
  672. package/fesm2015/covalent-core-common.js.map +0 -1
  673. package/fesm2015/covalent-core-data-table.js +0 -2309
  674. package/fesm2015/covalent-core-data-table.js.map +0 -1
  675. package/fesm2015/covalent-core-dialogs.js +0 -1001
  676. package/fesm2015/covalent-core-dialogs.js.map +0 -1
  677. package/fesm2015/covalent-core-dynamic-menu.js +0 -204
  678. package/fesm2015/covalent-core-dynamic-menu.js.map +0 -1
  679. package/fesm2015/covalent-core-expansion-panel.js +0 -528
  680. package/fesm2015/covalent-core-expansion-panel.js.map +0 -1
  681. package/fesm2015/covalent-core-file.js +0 -855
  682. package/fesm2015/covalent-core-file.js.map +0 -1
  683. package/fesm2015/covalent-core-json-formatter.js +0 -377
  684. package/fesm2015/covalent-core-json-formatter.js.map +0 -1
  685. package/fesm2015/covalent-core-layout.js +0 -1663
  686. package/fesm2015/covalent-core-layout.js.map +0 -1
  687. package/fesm2015/covalent-core-loading.js +0 -1179
  688. package/fesm2015/covalent-core-loading.js.map +0 -1
  689. package/fesm2015/covalent-core-media.js +0 -411
  690. package/fesm2015/covalent-core-media.js.map +0 -1
  691. package/fesm2015/covalent-core-menu.js +0 -57
  692. package/fesm2015/covalent-core-menu.js.map +0 -1
  693. package/fesm2015/covalent-core-message.js +0 -347
  694. package/fesm2015/covalent-core-message.js.map +0 -1
  695. package/fesm2015/covalent-core-nav-links.js +0 -193
  696. package/fesm2015/covalent-core-nav-links.js.map +0 -1
  697. package/fesm2015/covalent-core-notifications.js +0 -228
  698. package/fesm2015/covalent-core-notifications.js.map +0 -1
  699. package/fesm2015/covalent-core-paging.js +0 -451
  700. package/fesm2015/covalent-core-paging.js.map +0 -1
  701. package/fesm2015/covalent-core-search.js +0 -564
  702. package/fesm2015/covalent-core-search.js.map +0 -1
  703. package/fesm2015/covalent-core-side-sheet.js.map +0 -1
  704. package/fesm2015/covalent-core-sidesheet.js +0 -118
  705. package/fesm2015/covalent-core-sidesheet.js.map +0 -1
  706. package/fesm2015/covalent-core-steps.js +0 -1384
  707. package/fesm2015/covalent-core-steps.js.map +0 -1
  708. package/fesm2015/covalent-core-tab-select.js +0 -416
  709. package/fesm2015/covalent-core-tab-select.js.map +0 -1
  710. package/fesm2015/covalent-core-user-profile.js +0 -111
  711. package/fesm2015/covalent-core-user-profile.js.map +0 -1
  712. package/fesm2015/covalent-core-virtual-scroll.js +0 -453
  713. package/fesm2015/covalent-core-virtual-scroll.js.map +0 -1
  714. package/fesm2015/covalent-core.js +0 -12
  715. package/fesm2015/covalent-core.js.map +0 -1
  716. package/file/covalent-core-file.metadata.json +0 -1
  717. package/json-formatter/covalent-core-json-formatter.metadata.json +0 -1
  718. package/layout/covalent-core-layout.metadata.json +0 -1
  719. package/loading/README.md +0 -180
  720. package/loading/_loading-theme.scss +0 -10
  721. package/loading/covalent-core-loading.d.ts +0 -4
  722. package/loading/covalent-core-loading.metadata.json +0 -1
  723. package/loading/directives/loading.directive.d.ts +0 -71
  724. package/loading/index.d.ts +0 -1
  725. package/loading/loading.component.d.ts +0 -87
  726. package/loading/loading.component.scss +0 -42
  727. package/loading/loading.module.d.ts +0 -2
  728. package/loading/package.json +0 -11
  729. package/loading/public-api.d.ts +0 -5
  730. package/loading/services/loading.factory.d.ts +0 -66
  731. package/loading/services/loading.service.d.ts +0 -118
  732. package/media/covalent-core-media.d.ts +0 -4
  733. package/media/covalent-core-media.metadata.json +0 -1
  734. package/media/directives/media-toggle.directive.d.ts +0 -42
  735. package/media/index.d.ts +0 -1
  736. package/media/media.module.d.ts +0 -2
  737. package/media/package.json +0 -11
  738. package/media/public-api.d.ts +0 -3
  739. package/media/services/media.service.d.ts +0 -31
  740. package/menu/covalent-core-menu.metadata.json +0 -1
  741. package/message/covalent-core-message.metadata.json +0 -1
  742. package/nav-links/README.md +0 -1
  743. package/nav-links/covalent-core-nav-links.d.ts +0 -4
  744. package/nav-links/covalent-core-nav-links.metadata.json +0 -1
  745. package/nav-links/index.d.ts +0 -1
  746. package/nav-links/nav-links.component.d.ts +0 -51
  747. package/nav-links/nav-links.component.scss +0 -15
  748. package/nav-links/nav-links.module.d.ts +0 -2
  749. package/nav-links/package.json +0 -11
  750. package/nav-links/public-api.d.ts +0 -2
  751. package/notifications/README.md +0 -69
  752. package/notifications/_notification-count-theme.scss +0 -27
  753. package/notifications/covalent-core-notifications.d.ts +0 -4
  754. package/notifications/covalent-core-notifications.metadata.json +0 -1
  755. package/notifications/index.d.ts +0 -1
  756. package/notifications/notification-count.component.d.ts +0 -74
  757. package/notifications/notification-count.component.scss +0 -90
  758. package/notifications/notifications.module.d.ts +0 -2
  759. package/notifications/package.json +0 -11
  760. package/notifications/public-api.d.ts +0 -2
  761. package/paging/README.md +0 -141
  762. package/paging/_paging-bar-theme.scss +0 -26
  763. package/paging/covalent-core-paging.d.ts +0 -4
  764. package/paging/covalent-core-paging.metadata.json +0 -1
  765. package/paging/index.d.ts +0 -1
  766. package/paging/package.json +0 -11
  767. package/paging/paging-bar.component.d.ts +0 -115
  768. package/paging/paging-bar.component.scss +0 -23
  769. package/paging/paging.module.d.ts +0 -2
  770. package/paging/public-api.d.ts +0 -2
  771. package/schematics/collection.json +0 -11
  772. package/schematics/components.js +0 -124
  773. package/schematics/components.js.map +0 -1
  774. package/schematics/migration.json +0 -10
  775. package/schematics/ng-add/index.js +0 -58
  776. package/schematics/ng-add/index.js.map +0 -1
  777. package/schematics/ng-add/schema.js +0 -3
  778. package/schematics/ng-add/schema.js.map +0 -1
  779. package/schematics/ng-add/schema.json +0 -81
  780. package/schematics/ng-update/index.js +0 -52
  781. package/schematics/ng-update/index.js.map +0 -1
  782. package/schematics/ng-update/target-version.js +0 -8
  783. package/schematics/ng-update/target-version.js.map +0 -1
  784. package/schematics/version-names.js +0 -6
  785. package/schematics/version-names.js.map +0 -1
  786. package/search/covalent-core-search.metadata.json +0 -1
  787. package/side-sheet/covalent-core-side-sheet.metadata.json +0 -1
  788. package/sidesheet/README.md +0 -68
  789. package/sidesheet/covalent-core-sidesheet.d.ts +0 -4
  790. package/sidesheet/covalent-core-sidesheet.metadata.json +0 -1
  791. package/sidesheet/index.d.ts +0 -1
  792. package/sidesheet/package.json +0 -11
  793. package/sidesheet/public-api.d.ts +0 -2
  794. package/sidesheet/sidesheet.component.d.ts +0 -13
  795. package/sidesheet/sidesheet.component.scss +0 -101
  796. package/sidesheet/sidesheet.module.d.ts +0 -2
  797. package/steps/README.md +0 -159
  798. package/steps/_steps-theme.scss +0 -108
  799. package/steps/covalent-core-steps.d.ts +0 -4
  800. package/steps/covalent-core-steps.metadata.json +0 -1
  801. package/steps/index.d.ts +0 -1
  802. package/steps/nav/README.md +0 -90
  803. package/steps/nav/nav-step-link/nav-step-link.component.d.ts +0 -42
  804. package/steps/nav/nav-step-link/nav-step-link.component.scss +0 -17
  805. package/steps/nav/nav-steps-horizontal/nav-steps-horizontal.component.d.ts +0 -79
  806. package/steps/nav/nav-steps-horizontal/nav-steps-horizontal.component.scss +0 -83
  807. package/steps/nav/nav-steps-vertical/nav-steps-vertical.component.d.ts +0 -18
  808. package/steps/nav/nav-steps-vertical/nav-steps-vertical.component.scss +0 -18
  809. package/steps/package.json +0 -11
  810. package/steps/public-api.d.ts +0 -8
  811. package/steps/step-body/step-body.component.d.ts +0 -25
  812. package/steps/step-body/step-body.component.scss +0 -29
  813. package/steps/step-header/step-header.component.d.ts +0 -35
  814. package/steps/step-header/step-header.component.scss +0 -90
  815. package/steps/step.component.d.ts +0 -97
  816. package/steps/steps.component.d.ts +0 -60
  817. package/steps/steps.component.scss +0 -55
  818. package/steps/steps.module.d.ts +0 -2
  819. package/tab-select/README.md +0 -93
  820. package/tab-select/covalent-core-tab-select.d.ts +0 -4
  821. package/tab-select/covalent-core-tab-select.metadata.json +0 -1
  822. package/tab-select/index.d.ts +0 -1
  823. package/tab-select/package.json +0 -11
  824. package/tab-select/public-api.d.ts +0 -3
  825. package/tab-select/tab-option.component.d.ts +0 -20
  826. package/tab-select/tab-option.component.scss +0 -0
  827. package/tab-select/tab-select.component.d.ts +0 -62
  828. package/tab-select/tab-select.component.scss +0 -3
  829. package/tab-select/tab-select.module.d.ts +0 -2
  830. package/user-profile/covalent-core-user-profile.metadata.json +0 -1
  831. package/virtual-scroll/README.md +0 -68
  832. package/virtual-scroll/covalent-core-virtual-scroll.d.ts +0 -4
  833. package/virtual-scroll/covalent-core-virtual-scroll.metadata.json +0 -1
  834. package/virtual-scroll/index.d.ts +0 -1
  835. package/virtual-scroll/package.json +0 -11
  836. package/virtual-scroll/public-api.d.ts +0 -3
  837. package/virtual-scroll/virtual-scroll-container.component.d.ts +0 -73
  838. package/virtual-scroll/virtual-scroll-container.component.scss +0 -7
  839. package/virtual-scroll/virtual-scroll-row.directive.d.ts +0 -5
  840. package/virtual-scroll/virtual-scroll.module.d.ts +0 -2
@@ -1,1115 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: chips.component.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
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
- export class TdChipDirective extends TemplatePortalDirective {
21
- /**
22
- * @param {?} templateRef
23
- * @param {?} viewContainerRef
24
- */
25
- constructor(templateRef, viewContainerRef) {
26
- super(templateRef, viewContainerRef);
27
- }
28
- }
29
- TdChipDirective.decorators = [
30
- { type: Directive, args: [{
31
- selector: '[td-chip]ng-template',
32
- },] }
33
- ];
34
- /** @nocollapse */
35
- TdChipDirective.ctorParameters = () => [
36
- { type: TemplateRef },
37
- { type: ViewContainerRef }
38
- ];
39
- export class TdAutocompleteOptionDirective extends TemplatePortalDirective {
40
- /**
41
- * @param {?} templateRef
42
- * @param {?} viewContainerRef
43
- */
44
- constructor(templateRef, viewContainerRef) {
45
- super(templateRef, viewContainerRef);
46
- }
47
- }
48
- TdAutocompleteOptionDirective.decorators = [
49
- { type: Directive, args: [{
50
- selector: '[td-autocomplete-option]ng-template',
51
- },] }
52
- ];
53
- /** @nocollapse */
54
- TdAutocompleteOptionDirective.ctorParameters = () => [
55
- { type: TemplateRef },
56
- { type: ViewContainerRef }
57
- ];
58
- export class TdChipsBase {
59
- /**
60
- * @param {?} _changeDetectorRef
61
- */
62
- constructor(_changeDetectorRef) {
63
- this._changeDetectorRef = _changeDetectorRef;
64
- }
65
- }
66
- if (false) {
67
- /** @type {?} */
68
- TdChipsBase.prototype._changeDetectorRef;
69
- }
70
- /* tslint:disable-next-line */
71
- /** @type {?} */
72
- export const _TdChipsMixinBase = mixinControlValueAccessor(mixinDisabled(TdChipsBase), []);
73
- export class TdChipsComponent extends _TdChipsMixinBase {
74
- /**
75
- * @param {?} _elementRef
76
- * @param {?} _renderer
77
- * @param {?} _document
78
- * @param {?} _changeDetectorRef
79
- */
80
- constructor(_elementRef, _renderer, _document, _changeDetectorRef) {
81
- super(_changeDetectorRef);
82
- this._elementRef = _elementRef;
83
- this._renderer = _renderer;
84
- this._document = _document;
85
- this._outsideClickSubs = Subscription.EMPTY;
86
- this._inputValueChangesSubs = Subscription.EMPTY;
87
- this._isMousedown = false;
88
- this._length = 0;
89
- this._stacked = false;
90
- this._requireMatch = false;
91
- this._color = 'primary';
92
- this._inputPosition = 'after';
93
- this._chipAddition = true;
94
- this._chipRemoval = true;
95
- this._focused = false;
96
- this._required = false;
97
- this._tabIndex = 0;
98
- this._touchendDebounce = 100;
99
- this._internalClick = false;
100
- this._internalActivateOption = false;
101
- /**
102
- * FormControl for the matInput element.
103
- */
104
- this.inputControl = new FormControl();
105
- /**
106
- * debounce?: number
107
- * Debounce timeout between keypresses. Defaults to 200.
108
- */
109
- this.debounce = 200;
110
- /**
111
- * add?: function
112
- * Method to be executed when a chip is added.
113
- * Sends chip value as event.
114
- */
115
- this.add = new EventEmitter();
116
- /**
117
- * remove?: function
118
- * Method to be executed when a chip is removed.
119
- * Sends chip value as event.
120
- */
121
- this.remove = new EventEmitter();
122
- /**
123
- * inputChange?: function
124
- * Method to be executed when the value in the autocomplete input changes.
125
- * Sends string value as event.
126
- */
127
- this.inputChange = new EventEmitter();
128
- /**
129
- * chipFocus?: function
130
- * Method to be executed when a chip is focused.
131
- * Sends chip value as event.
132
- */
133
- this.chipFocus = new EventEmitter();
134
- /**
135
- * blur?: function
136
- * Method to be executed when a chip is blurred.
137
- * Sends chip value as event.
138
- */
139
- this.chipBlur = new EventEmitter();
140
- /**
141
- * compareWith? function
142
- * Function used to check whether a chip value already exists.
143
- * Defaults to strict equality comparison ===
144
- */
145
- this.compareWith = (/**
146
- * @param {?} o1
147
- * @param {?} o2
148
- * @return {?}
149
- */
150
- (o1, o2) => {
151
- return o1 === o2;
152
- });
153
- this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);
154
- }
155
- /**
156
- * Flag that is true when autocomplete is focused.
157
- * @return {?}
158
- */
159
- get focused() {
160
- return this._focused;
161
- }
162
- /**
163
- * items?: any[]
164
- * Renders the `mat-autocomplete` with the provided list to display as options.
165
- * @param {?} items
166
- * @return {?}
167
- */
168
- set items(items) {
169
- this._items = items;
170
- this._setFirstOptionActive();
171
- this._changeDetectorRef.markForCheck();
172
- }
173
- /**
174
- * @return {?}
175
- */
176
- get items() {
177
- return this._items;
178
- }
179
- /**
180
- * stacked?: boolean
181
- * Set stacked or horizontal chips depending on value.
182
- * Defaults to false.
183
- * @param {?} stacked
184
- * @return {?}
185
- */
186
- set stacked(stacked) {
187
- this._stacked = coerceBooleanProperty(stacked);
188
- }
189
- /**
190
- * @return {?}
191
- */
192
- get stacked() {
193
- return this._stacked;
194
- }
195
- /**
196
- * inputPosition?: 'before' | 'after'
197
- * Set input position before or after the chips.
198
- * Defaults to 'after'.
199
- * @param {?} inputPosition
200
- * @return {?}
201
- */
202
- set inputPosition(inputPosition) {
203
- this._inputPosition = inputPosition;
204
- }
205
- /**
206
- * @return {?}
207
- */
208
- get inputPosition() {
209
- return this._inputPosition;
210
- }
211
- /**
212
- * requireMatch?: boolean
213
- * Blocks custom inputs and only allows selections from the autocomplete list.
214
- * @param {?} requireMatch
215
- * @return {?}
216
- */
217
- set requireMatch(requireMatch) {
218
- this._requireMatch = coerceBooleanProperty(requireMatch);
219
- }
220
- /**
221
- * @return {?}
222
- */
223
- get requireMatch() {
224
- return this._requireMatch;
225
- }
226
- /**
227
- * required?: boolean
228
- * Value is set to true if at least one chip is needed
229
- * Defaults to false
230
- * @param {?} required
231
- * @return {?}
232
- */
233
- set required(required) {
234
- this._required = coerceBooleanProperty(required);
235
- }
236
- /**
237
- * @return {?}
238
- */
239
- get required() {
240
- return this._required;
241
- }
242
- /**
243
- * chipAddition?: boolean
244
- * Disables the ability to add chips. When setting disabled as true, this will be overriden.
245
- * Defaults to true.
246
- * @param {?} chipAddition
247
- * @return {?}
248
- */
249
- set chipAddition(chipAddition) {
250
- this._chipAddition = chipAddition;
251
- this._toggleInput();
252
- }
253
- /**
254
- * @return {?}
255
- */
256
- get chipAddition() {
257
- return this._chipAddition;
258
- }
259
- /**
260
- * Checks if not in disabled state and if chipAddition is set to 'true'
261
- * States if a chip can be added and if the input is available
262
- * @return {?}
263
- */
264
- get canAddChip() {
265
- return this.chipAddition && !this.disabled;
266
- }
267
- /**
268
- * chipRemoval?: boolean
269
- * Disables the ability to remove chips. If it doesn't exist chip remmoval defaults to true.
270
- * When setting disabled as true, this will be overriden to false.
271
- * @param {?} chipRemoval
272
- * @return {?}
273
- */
274
- set chipRemoval(chipRemoval) {
275
- this._chipRemoval = chipRemoval;
276
- }
277
- /**
278
- * @return {?}
279
- */
280
- get chipRemoval() {
281
- return this._chipRemoval;
282
- }
283
- /**
284
- * Checks if not in disabled state and if chipRemoval is set to 'true'
285
- * States if a chip can be removed
286
- * @return {?}
287
- */
288
- get canRemoveChip() {
289
- return this.chipRemoval && !this.disabled;
290
- }
291
- /**
292
- * returns the display placeholder
293
- * @return {?}
294
- */
295
- get displayPlaceHolder() {
296
- if (!this.canAddChip) {
297
- return '';
298
- }
299
- return this._required ? `${this.placeholder} *` : this.placeholder;
300
- }
301
- /**
302
- * color?: 'primary' | 'accent' | 'warn'
303
- * Sets the color for the input and focus/selected state of the chips.
304
- * Defaults to 'primary'
305
- * @param {?} color
306
- * @return {?}
307
- */
308
- set color(color) {
309
- if (color) {
310
- this._renderer.removeClass(this._elementRef.nativeElement, 'mat-' + this._color);
311
- this._color = color;
312
- this._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);
313
- }
314
- }
315
- /**
316
- * @return {?}
317
- */
318
- get color() {
319
- return this._color;
320
- }
321
- /**
322
- * Hostbinding to set the a11y of the TdChipsComponent depending on its state
323
- * @return {?}
324
- */
325
- get tabIndex() {
326
- return this.disabled ? -1 : this._tabIndex;
327
- }
328
- /**
329
- * Listens to host focus event to act on it
330
- * @param {?} event
331
- * @return {?}
332
- */
333
- focusListener(event) {
334
- // should only focus if its not via mousedown to prevent clashing with autocomplete
335
- if (!this._isMousedown) {
336
- this.focus();
337
- }
338
- event.preventDefault();
339
- }
340
- /**
341
- * Listens to host mousedown event to act on it
342
- * @param {?} event
343
- * @return {?}
344
- */
345
- mousedownListener(event) {
346
- // sets a flag to know if there was a mousedown and then it returns it back to false
347
- this._isMousedown = true;
348
- timer()
349
- .toPromise()
350
- .then((/**
351
- * @return {?}
352
- */
353
- () => {
354
- this._isMousedown = false;
355
- }));
356
- }
357
- /**
358
- * If clicking on :host or `td-chips-wrapper`, then we stop the click propagation so the autocomplete
359
- * doesnt close automatically.
360
- * @param {?} event
361
- * @return {?}
362
- */
363
- clickListener(event) {
364
- /** @type {?} */
365
- const clickTarget = (/** @type {?} */ (event.target));
366
- if (clickTarget === this._elementRef.nativeElement || clickTarget.className.indexOf('td-chips-wrapper') > -1) {
367
- this.focus();
368
- event.preventDefault();
369
- event.stopPropagation();
370
- }
371
- }
372
- /**
373
- * Listens to host keydown event to act on it depending on the keypress
374
- * @param {?} event
375
- * @return {?}
376
- */
377
- keydownListener(event) {
378
- switch (event.keyCode) {
379
- case TAB:
380
- // if tabing out, then unfocus the component
381
- timer()
382
- .toPromise()
383
- .then((/**
384
- * @return {?}
385
- */
386
- () => {
387
- this.removeFocusedState();
388
- }));
389
- break;
390
- case ESCAPE:
391
- if (this._inputChild.focused) {
392
- this._nativeInput.nativeElement.blur();
393
- this.removeFocusedState();
394
- this._closeAutocomplete();
395
- }
396
- else {
397
- this.focus();
398
- }
399
- break;
400
- default:
401
- // default
402
- }
403
- }
404
- /**
405
- * @return {?}
406
- */
407
- ngOnInit() {
408
- this._inputValueChangesSubs = this.inputControl.valueChanges
409
- .pipe(debounceTime(this.debounce))
410
- .subscribe((/**
411
- * @param {?} value
412
- * @return {?}
413
- */
414
- (value) => {
415
- this.inputChange.emit(value ? value : '');
416
- }));
417
- this._changeDetectorRef.markForCheck();
418
- }
419
- /**
420
- * @return {?}
421
- */
422
- ngAfterViewInit() {
423
- this._watchOutsideClick();
424
- this._changeDetectorRef.markForCheck();
425
- }
426
- /**
427
- * @return {?}
428
- */
429
- ngDoCheck() {
430
- // Throw onChange event only if array changes size.
431
- if (this.value && this.value.length !== this._length) {
432
- this._length = this.value.length;
433
- this.onChange(this.value);
434
- }
435
- }
436
- /**
437
- * @return {?}
438
- */
439
- ngOnDestroy() {
440
- this._outsideClickSubs.unsubscribe();
441
- this._inputValueChangesSubs.unsubscribe();
442
- }
443
- /**
444
- * @return {?}
445
- */
446
- _setInternalClick() {
447
- this._internalClick = true;
448
- }
449
- /**
450
- * Method executed when the disabled value changes
451
- * @param {?} v
452
- * @return {?}
453
- */
454
- onDisabledChange(v) {
455
- this._toggleInput();
456
- }
457
- /**
458
- * Method that is executed when trying to create a new chip from the autocomplete.
459
- * It check if [requireMatch] is enabled, and tries to add the first active option
460
- * else if just adds the value thats on the input
461
- * returns 'true' if successful, 'false' if it fails.
462
- * @return {?}
463
- */
464
- _handleAddChip() {
465
- /** @type {?} */
466
- let value;
467
- if (this.requireMatch) {
468
- /** @type {?} */
469
- const selectedOptions = this._options.toArray().filter((/**
470
- * @param {?} option
471
- * @return {?}
472
- */
473
- (option) => {
474
- return option.active;
475
- }));
476
- if (selectedOptions.length > 0) {
477
- value = selectedOptions[0].value;
478
- selectedOptions[0].setInactiveStyles();
479
- }
480
- if (!value) {
481
- return false;
482
- }
483
- }
484
- else {
485
- // if there is a selection, then use that
486
- // else use the input value as chip
487
- if (this._autocompleteTrigger.activeOption) {
488
- value = this._autocompleteTrigger.activeOption.value;
489
- this._autocompleteTrigger.activeOption.setInactiveStyles();
490
- }
491
- else {
492
- value = this._inputChild.value;
493
- if (value.trim() === '') {
494
- return false;
495
- }
496
- }
497
- }
498
- return this.addChip(value);
499
- }
500
- /**
501
- * Method thats exectuted when trying to add a value as chip
502
- * returns 'true' if successful, 'false' if it fails.
503
- * @param {?} value
504
- * @return {?}
505
- */
506
- addChip(value) {
507
- /**
508
- * add a debounce ms delay when reopening the autocomplete to give it time
509
- * to rerender the next list and at the correct spot
510
- */
511
- this._closeAutocomplete();
512
- timer(this.debounce)
513
- .toPromise()
514
- .then((/**
515
- * @return {?}
516
- */
517
- () => {
518
- this.setFocusedState();
519
- this._setFirstOptionActive();
520
- this._openAutocomplete();
521
- }));
522
- this.inputControl.setValue('');
523
- // check if value is already part of the model
524
- if (this.value.findIndex((/**
525
- * @param {?} item
526
- * @return {?}
527
- */
528
- (item) => this.compareWith(item, value))) > -1) {
529
- return false;
530
- }
531
- this.value.push(value);
532
- this.add.emit(value);
533
- this.onChange(this.value);
534
- this._changeDetectorRef.markForCheck();
535
- return true;
536
- }
537
- /**
538
- * Method that is executed when trying to remove a chip.
539
- * returns 'true' if successful, 'false' if it fails.
540
- * @param {?} index
541
- * @return {?}
542
- */
543
- removeChip(index) {
544
- /** @type {?} */
545
- const removedValues = this.value.splice(index, 1);
546
- if (removedValues.length === 0) {
547
- return false;
548
- }
549
- /**
550
- * Checks if deleting last single chip, to focus input afterwards
551
- * Else check if its not the last chip of the list to focus the next one.
552
- */
553
- if (index === this._totalChips - 1 && index === 0) {
554
- this._inputChild.focus();
555
- }
556
- else if (index < this._totalChips - 1) {
557
- this._focusChip(index + 1);
558
- }
559
- else if (index > 0) {
560
- this._focusChip(index - 1);
561
- }
562
- this.remove.emit(removedValues[0]);
563
- this.onChange(this.value);
564
- this.inputControl.setValue('');
565
- this._changeDetectorRef.markForCheck();
566
- return true;
567
- }
568
- /**
569
- * Sets blur of chip and sends out event
570
- * @param {?} event
571
- * @param {?} value
572
- * @return {?}
573
- */
574
- _handleChipBlur(event, value) {
575
- this.chipBlur.emit(value);
576
- }
577
- /**
578
- * Sets focus of chip and sends out event
579
- * @param {?} event
580
- * @param {?} value
581
- * @return {?}
582
- */
583
- _handleChipFocus(event, value) {
584
- this.setFocusedState();
585
- this.chipFocus.emit(value);
586
- }
587
- /**
588
- * @return {?}
589
- */
590
- _handleFocus() {
591
- this.setFocusedState();
592
- this._setFirstOptionActive();
593
- return true;
594
- }
595
- /**
596
- * Sets focus state of the component
597
- * @return {?}
598
- */
599
- setFocusedState() {
600
- if (!this.disabled) {
601
- this._focused = true;
602
- this._tabIndex = -1;
603
- this._changeDetectorRef.markForCheck();
604
- }
605
- }
606
- /**
607
- * Removes focus state of the component
608
- * @return {?}
609
- */
610
- removeFocusedState() {
611
- this._focused = false;
612
- this._tabIndex = 0;
613
- this._changeDetectorRef.markForCheck();
614
- }
615
- /**
616
- * Programmatically focus the input or first chip. Since its the component entry point
617
- * depending if a user can add or remove chips
618
- * @return {?}
619
- */
620
- focus() {
621
- if (this.canAddChip) {
622
- this._inputChild.focus();
623
- }
624
- else if (!this.disabled) {
625
- this._focusFirstChip();
626
- }
627
- }
628
- /**
629
- * Passes relevant input key presses.
630
- * @param {?} event
631
- * @return {?}
632
- */
633
- _inputKeydown(event) {
634
- switch (event.keyCode) {
635
- case UP_ARROW:
636
- /**
637
- * Since the first item is highlighted on [requireMatch], we need to inactivate it
638
- * when pressing the up key
639
- */
640
- if (this.requireMatch) {
641
- /** @type {?} */
642
- const length = this._options.length;
643
- if (length > 1 && this._options.toArray()[0].active && this._internalActivateOption) {
644
- this._options.toArray()[0].setInactiveStyles();
645
- this._internalActivateOption = false;
646
- // prevent default window scrolling
647
- event.preventDefault();
648
- }
649
- }
650
- break;
651
- case LEFT_ARROW:
652
- case DELETE:
653
- case BACKSPACE:
654
- this._closeAutocomplete();
655
- /** Check to see if input is empty when pressing left arrow to move to the last chip */
656
- if (!this._inputChild.value) {
657
- this._focusLastChip();
658
- // prevent default window scrolling
659
- event.preventDefault();
660
- }
661
- break;
662
- case RIGHT_ARROW:
663
- this._closeAutocomplete();
664
- /** Check to see if input is empty when pressing right arrow to move to the first chip */
665
- if (!this._inputChild.value) {
666
- this._focusFirstChip();
667
- // prevent default window scrolling
668
- event.preventDefault();
669
- }
670
- break;
671
- default:
672
- // default
673
- }
674
- }
675
- /**
676
- * Passes relevant chip key presses.
677
- * @param {?} event
678
- * @param {?} index
679
- * @return {?}
680
- */
681
- _chipKeydown(event, index) {
682
- switch (event.keyCode) {
683
- case DELETE:
684
- case BACKSPACE:
685
- /** Check to see if we can delete a chip */
686
- if (this.canRemoveChip) {
687
- this.removeChip(index);
688
- }
689
- break;
690
- case UP_ARROW:
691
- case LEFT_ARROW:
692
- /**
693
- * Check to see if left/down arrow was pressed while focusing the first chip to focus input next
694
- * Also check if input should be focused
695
- */
696
- if (index === 0) {
697
- // only try to target input if pressing left
698
- if (this.canAddChip && event.keyCode === LEFT_ARROW) {
699
- this._inputChild.focus();
700
- }
701
- else {
702
- this._focusLastChip();
703
- }
704
- }
705
- else if (index > 0) {
706
- this._focusChip(index - 1);
707
- }
708
- // prevent default window scrolling
709
- event.preventDefault();
710
- break;
711
- case DOWN_ARROW:
712
- case RIGHT_ARROW:
713
- /**
714
- * Check to see if right/up arrow was pressed while focusing the last chip to focus input next
715
- * Also check if input should be focused
716
- */
717
- if (index === this._totalChips - 1) {
718
- // only try to target input if pressing right
719
- if (this.canAddChip && event.keyCode === RIGHT_ARROW) {
720
- this._inputChild.focus();
721
- }
722
- else {
723
- this._focusFirstChip();
724
- }
725
- }
726
- else if (index < this._totalChips - 1) {
727
- this._focusChip(index + 1);
728
- }
729
- // prevent default window scrolling
730
- event.preventDefault();
731
- break;
732
- default:
733
- // default
734
- }
735
- }
736
- /**
737
- * Method to remove from display the value added from the autocomplete since it goes directly as chip.
738
- * @return {?}
739
- */
740
- _removeInputDisplay() {
741
- return '';
742
- }
743
- /**
744
- * Method to open the autocomplete manually if its not already opened
745
- * @return {?}
746
- */
747
- _openAutocomplete() {
748
- if (!this._autocompleteTrigger.panelOpen) {
749
- this._autocompleteTrigger.openPanel();
750
- this._changeDetectorRef.markForCheck();
751
- }
752
- }
753
- /**
754
- * Method to close the autocomplete manually if its not already closed
755
- * @return {?}
756
- */
757
- _closeAutocomplete() {
758
- if (this._autocompleteTrigger.panelOpen) {
759
- this._autocompleteTrigger.closePanel();
760
- this._changeDetectorRef.markForCheck();
761
- }
762
- }
763
- /**
764
- * Get total of chips
765
- * @return {?}
766
- */
767
- get _totalChips() {
768
- /** @type {?} */
769
- const chips = this._chipsChildren.toArray();
770
- return chips.length;
771
- }
772
- /**
773
- * Method to focus a desired chip by index
774
- * @private
775
- * @param {?} index
776
- * @return {?}
777
- */
778
- _focusChip(index) {
779
- /** check to see if index exists in the array before focusing */
780
- if (index > -1 && this._totalChips > index) {
781
- this._chipsChildren.toArray()[index].focus();
782
- }
783
- }
784
- /**
785
- * Method to focus first chip
786
- * @private
787
- * @return {?}
788
- */
789
- _focusFirstChip() {
790
- this._focusChip(0);
791
- }
792
- /**
793
- * Method to focus last chip
794
- * @private
795
- * @return {?}
796
- */
797
- _focusLastChip() {
798
- this._focusChip(this._totalChips - 1);
799
- }
800
- /**
801
- * Method to toggle the disable state of input
802
- * Checks if not in disabled state and if chipAddition is set to 'true'
803
- * @private
804
- * @return {?}
805
- */
806
- _toggleInput() {
807
- if (this.canAddChip) {
808
- this.inputControl.enable();
809
- }
810
- else {
811
- this.inputControl.disable();
812
- }
813
- this._changeDetectorRef.markForCheck();
814
- }
815
- /**
816
- * Sets first option as active to let the user know which one will be added when pressing enter
817
- * Only if [requireMatch] has been set
818
- * @private
819
- * @return {?}
820
- */
821
- _setFirstOptionActive() {
822
- if (this.requireMatch) {
823
- // need to use a timer here to wait until the autocomplete has been opened (end of queue)
824
- timer()
825
- .toPromise()
826
- .then((/**
827
- * @return {?}
828
- */
829
- () => {
830
- if (this.focused && this._options && this._options.length > 0) {
831
- // clean up of previously active options
832
- this._options.toArray().forEach((/**
833
- * @param {?} option
834
- * @return {?}
835
- */
836
- (option) => {
837
- option.setInactiveStyles();
838
- }));
839
- // set the first one as active
840
- this._options.toArray()[0].setActiveStyles();
841
- this._internalActivateOption = true;
842
- this._changeDetectorRef.markForCheck();
843
- }
844
- }));
845
- }
846
- }
847
- /**
848
- * Watches clicks outside of the component to remove the focus
849
- * The autocomplete panel is considered inside the component so we
850
- * need to use a flag to find out when its clicked.
851
- * @private
852
- * @return {?}
853
- */
854
- _watchOutsideClick() {
855
- if (this._document) {
856
- this._outsideClickSubs = merge(fromEvent(this._document, 'click'), fromEvent(this._document, 'touchend'))
857
- .pipe(debounceTime(this._touchendDebounce), filter((/**
858
- * @param {?} event
859
- * @return {?}
860
- */
861
- (event) => {
862
- /** @type {?} */
863
- const clickTarget = (/** @type {?} */ (event.target));
864
- setTimeout((/**
865
- * @return {?}
866
- */
867
- () => {
868
- this._internalClick = false;
869
- }));
870
- return (this.focused &&
871
- clickTarget !== this._elementRef.nativeElement &&
872
- !this._elementRef.nativeElement.contains(clickTarget) &&
873
- !this._internalClick);
874
- })))
875
- .subscribe((/**
876
- * @return {?}
877
- */
878
- () => {
879
- if (this.focused) {
880
- this._autocompleteTrigger.closePanel();
881
- this.removeFocusedState();
882
- this.onTouched();
883
- this._changeDetectorRef.markForCheck();
884
- }
885
- }));
886
- }
887
- return undefined;
888
- }
889
- }
890
- TdChipsComponent.decorators = [
891
- { type: Component, args: [{
892
- providers: [
893
- {
894
- provide: NG_VALUE_ACCESSOR,
895
- useExisting: forwardRef((/**
896
- * @return {?}
897
- */
898
- () => TdChipsComponent)),
899
- multi: true,
900
- },
901
- ],
902
- selector: 'td-chips',
903
- inputs: ['disabled', 'value'],
904
- 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",
905
- changeDetection: ChangeDetectionStrategy.OnPush,
906
- styles: [":host{display:block;min-height:48px;padding:0 5px}:host .td-chips-wrapper{-ms-flex-align:start;-ms-flex-direction:row;-ms-flex-wrap:wrap;align-items:flex-start;display:-ms-flexbox;display:flex;flex-direction:row;flex-wrap:wrap;min-height:42px}: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{-ms-flex-align:center;-ms-flex-direction:row;-ms-flex-line-pack:center;-ms-flex-pack:start;align-content:center;align-items:center;box-sizing:border-box;display:-ms-flexbox;display:flex;flex-direction:row;justify-content:flex-start;max-width:100%;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{border-radius:16px;box-sizing:border-box;cursor:default;display:inline-block;margin:8px 8px 0 0;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{font-size:13px;line-height:32px;min-height:32px;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]{-ms-flex:0 0 auto;-ms-flex-align:center;-ms-flex-order:-20;-ms-flex-pack:center;align-items:center;border-radius:50%;box-sizing:border-box;display:inline-block;flex:0 0 auto;height:32px;justify-content:center;margin:0 8px 0 -12px;order:-20;text-align:center;width:32px}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{font-size:21px;line-height:22px;margin:0 4px}: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{bottom:0;height:1px;position:relative;width:100%}:host .mat-form-field-underline.mat-disabled{background-color:rgba(0,0,0,0);background-position:0;bottom:-4px}:host .mat-form-field-underline .mat-form-field-ripple{-ms-transform:scaleX(.5);-ms-transform-origin:50%;height:2px;opacity:0;position:absolute;top:0;transform:scaleX(.5);transform-origin:50%;transition:background-color .3s cubic-bezier(.55,0,.55,.2);visibility:hidden;width:100%}:host .mat-form-field-underline .mat-form-field-ripple.mat-focused,:host.ng-invalid .mat-form-field-underline .mat-form-field-ripple{-ms-transform:scaleX(1);opacity:1;transform:scaleX(1);transition:transform .15s linear,background-color .3s cubic-bezier(.55,0,.55,.2);visibility:visible}:host ::ng-deep mat-form-field .mat-form-field-underline{display:none}"]
907
- }] }
908
- ];
909
- /** @nocollapse */
910
- TdChipsComponent.ctorParameters = () => [
911
- { type: ElementRef },
912
- { type: Renderer2 },
913
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },
914
- { type: ChangeDetectorRef }
915
- ];
916
- TdChipsComponent.propDecorators = {
917
- _nativeInput: [{ type: ViewChild, args: ['input', { static: true },] }],
918
- _inputChild: [{ type: ViewChild, args: [MatInput, { static: true },] }],
919
- _autocompleteTrigger: [{ type: ViewChild, args: [MatAutocompleteTrigger, { static: true },] }],
920
- _chipsChildren: [{ type: ViewChildren, args: [MatChip,] }],
921
- _chipTemplate: [{ type: ContentChild, args: [TdChipDirective,] }],
922
- _autocompleteOptionTemplate: [{ type: ContentChild, args: [TdAutocompleteOptionDirective,] }],
923
- _options: [{ type: ViewChildren, args: [MatOption,] }],
924
- items: [{ type: Input, args: ['items',] }],
925
- stacked: [{ type: Input, args: ['stacked',] }],
926
- inputPosition: [{ type: Input, args: ['inputPosition',] }],
927
- requireMatch: [{ type: Input, args: ['requireMatch',] }],
928
- required: [{ type: Input, args: ['required',] }],
929
- chipAddition: [{ type: Input, args: ['chipAddition',] }],
930
- chipRemoval: [{ type: Input, args: ['chipRemoval',] }],
931
- placeholder: [{ type: Input }],
932
- debounce: [{ type: Input }],
933
- color: [{ type: Input, args: ['color',] }],
934
- add: [{ type: Output }],
935
- remove: [{ type: Output }],
936
- inputChange: [{ type: Output }],
937
- chipFocus: [{ type: Output }],
938
- chipBlur: [{ type: Output }],
939
- tabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],
940
- compareWith: [{ type: Input }],
941
- focusListener: [{ type: HostListener, args: ['focus', ['$event'],] }],
942
- mousedownListener: [{ type: HostListener, args: ['mousedown', ['$event'],] }],
943
- clickListener: [{ type: HostListener, args: ['click', ['$event'],] }],
944
- keydownListener: [{ type: HostListener, args: ['keydown', ['$event'],] }]
945
- };
946
- if (false) {
947
- /**
948
- * @type {?}
949
- * @private
950
- */
951
- TdChipsComponent.prototype._outsideClickSubs;
952
- /**
953
- * @type {?}
954
- * @private
955
- */
956
- TdChipsComponent.prototype._inputValueChangesSubs;
957
- /**
958
- * @type {?}
959
- * @private
960
- */
961
- TdChipsComponent.prototype._isMousedown;
962
- /**
963
- * @type {?}
964
- * @private
965
- */
966
- TdChipsComponent.prototype._items;
967
- /**
968
- * @type {?}
969
- * @private
970
- */
971
- TdChipsComponent.prototype._length;
972
- /**
973
- * @type {?}
974
- * @private
975
- */
976
- TdChipsComponent.prototype._stacked;
977
- /**
978
- * @type {?}
979
- * @private
980
- */
981
- TdChipsComponent.prototype._requireMatch;
982
- /**
983
- * @type {?}
984
- * @private
985
- */
986
- TdChipsComponent.prototype._color;
987
- /**
988
- * @type {?}
989
- * @private
990
- */
991
- TdChipsComponent.prototype._inputPosition;
992
- /**
993
- * @type {?}
994
- * @private
995
- */
996
- TdChipsComponent.prototype._chipAddition;
997
- /**
998
- * @type {?}
999
- * @private
1000
- */
1001
- TdChipsComponent.prototype._chipRemoval;
1002
- /**
1003
- * @type {?}
1004
- * @private
1005
- */
1006
- TdChipsComponent.prototype._focused;
1007
- /**
1008
- * @type {?}
1009
- * @private
1010
- */
1011
- TdChipsComponent.prototype._required;
1012
- /**
1013
- * @type {?}
1014
- * @private
1015
- */
1016
- TdChipsComponent.prototype._tabIndex;
1017
- /**
1018
- * @type {?}
1019
- * @private
1020
- */
1021
- TdChipsComponent.prototype._touchendDebounce;
1022
- /** @type {?} */
1023
- TdChipsComponent.prototype._internalClick;
1024
- /** @type {?} */
1025
- TdChipsComponent.prototype._internalActivateOption;
1026
- /** @type {?} */
1027
- TdChipsComponent.prototype._nativeInput;
1028
- /** @type {?} */
1029
- TdChipsComponent.prototype._inputChild;
1030
- /** @type {?} */
1031
- TdChipsComponent.prototype._autocompleteTrigger;
1032
- /** @type {?} */
1033
- TdChipsComponent.prototype._chipsChildren;
1034
- /** @type {?} */
1035
- TdChipsComponent.prototype._chipTemplate;
1036
- /** @type {?} */
1037
- TdChipsComponent.prototype._autocompleteOptionTemplate;
1038
- /** @type {?} */
1039
- TdChipsComponent.prototype._options;
1040
- /**
1041
- * FormControl for the matInput element.
1042
- * @type {?}
1043
- */
1044
- TdChipsComponent.prototype.inputControl;
1045
- /**
1046
- * placeholder?: string
1047
- * Placeholder for the autocomplete input.
1048
- * @type {?}
1049
- */
1050
- TdChipsComponent.prototype.placeholder;
1051
- /**
1052
- * debounce?: number
1053
- * Debounce timeout between keypresses. Defaults to 200.
1054
- * @type {?}
1055
- */
1056
- TdChipsComponent.prototype.debounce;
1057
- /**
1058
- * add?: function
1059
- * Method to be executed when a chip is added.
1060
- * Sends chip value as event.
1061
- * @type {?}
1062
- */
1063
- TdChipsComponent.prototype.add;
1064
- /**
1065
- * remove?: function
1066
- * Method to be executed when a chip is removed.
1067
- * Sends chip value as event.
1068
- * @type {?}
1069
- */
1070
- TdChipsComponent.prototype.remove;
1071
- /**
1072
- * inputChange?: function
1073
- * Method to be executed when the value in the autocomplete input changes.
1074
- * Sends string value as event.
1075
- * @type {?}
1076
- */
1077
- TdChipsComponent.prototype.inputChange;
1078
- /**
1079
- * chipFocus?: function
1080
- * Method to be executed when a chip is focused.
1081
- * Sends chip value as event.
1082
- * @type {?}
1083
- */
1084
- TdChipsComponent.prototype.chipFocus;
1085
- /**
1086
- * blur?: function
1087
- * Method to be executed when a chip is blurred.
1088
- * Sends chip value as event.
1089
- * @type {?}
1090
- */
1091
- TdChipsComponent.prototype.chipBlur;
1092
- /**
1093
- * compareWith? function
1094
- * Function used to check whether a chip value already exists.
1095
- * Defaults to strict equality comparison ===
1096
- * @type {?}
1097
- */
1098
- TdChipsComponent.prototype.compareWith;
1099
- /**
1100
- * @type {?}
1101
- * @private
1102
- */
1103
- TdChipsComponent.prototype._elementRef;
1104
- /**
1105
- * @type {?}
1106
- * @private
1107
- */
1108
- TdChipsComponent.prototype._renderer;
1109
- /**
1110
- * @type {?}
1111
- * @private
1112
- */
1113
- TdChipsComponent.prototype._document;
1114
- }
1115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybS9jb3JlL2NoaXBzLyIsInNvdXJjZXMiOlsiY2hpcHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFFVixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixpQkFBaUIsRUFHakIsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixTQUFTLEVBR1QsR0FBRyxHQUVKLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENB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MEJBb0IzQixLQUFLOzRCQU9MLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0NBWWhDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7NEJBZXBDLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7OEJBYWhDLFlBQVksU0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7SUF2U25DLDZDQUE2RDs7Ozs7SUFDN0Qsa0RBQWtFOzs7OztJQUNsRSx3Q0FBc0M7Ozs7O0lBRXRDLGtDQUFzQjs7Ozs7SUFDdEIsbUNBQTRCOzs7OztJQUM1QixvQ0FBa0M7Ozs7O0lBQ2xDLHlDQUF1Qzs7Ozs7SUFDdkMsa0NBQTBEOzs7OztJQUMxRCwwQ0FBcUQ7Ozs7O0lBQ3JELHlDQUFzQzs7Ozs7SUFDdEMsd0NBQXFDOzs7OztJQUNyQyxvQ0FBa0M7Ozs7O0lBQ2xDLHFDQUFtQzs7Ozs7SUFDbkMscUNBQThCOzs7OztJQUM5Qiw2Q0FBd0M7O0lBRXhDLDBDQUFnQzs7SUFDaEMsbURBQXlDOztJQUV6Qyx3Q0FBK0Q7O0lBQy9ELHVDQUE2RDs7SUFDN0QsZ0RBQWtHOztJQUNsRywwQ0FBMEQ7O0lBRTFELHlDQUE4RDs7SUFDOUQsdURBQzJEOztJQUUzRCxvQ0FBd0Q7Ozs7O0lBWXhELHdDQUE4Qzs7Ozs7O0lBNEg5Qyx1Q0FBNkI7Ozs7OztJQU03QixvQ0FBZ0M7Ozs7Ozs7SUF3QmhDLCtCQUEyRDs7Ozs7OztJQU8zRCxrQ0FBOEQ7Ozs7Ozs7SUFPOUQsdUNBQXlFOzs7Ozs7O0lBT3pFLHFDQUFpRTs7Ozs7OztJQU9qRSxvQ0FBZ0U7Ozs7Ozs7SUF5QmhFLHVDQUVFOzs7OztJQWhCQSx1Q0FBK0I7Ozs7O0lBQy9CLHFDQUE0Qjs7Ozs7SUFDNUIscUNBQW9EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBmb3J3YXJkUmVmLFxuICBEb0NoZWNrLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBPbkluaXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgRWxlbWVudFJlZixcbiAgT3B0aW9uYWwsXG4gIEluamVjdCxcbiAgRGlyZWN0aXZlLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29udGVudENoaWxkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbiAgSG9zdEJpbmRpbmcsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgVVBfQVJST1csXG4gIERPV05fQVJST1csXG4gIEVTQ0FQRSxcbiAgTEVGVF9BUlJPVyxcbiAgUklHSFRfQVJST1csXG4gIERFTEVURSxcbiAgQkFDS1NQQUNFLFxuICBFTlRFUixcbiAgU1BBQ0UsXG4gIFRBQixcbiAgSE9NRSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IE1hdENoaXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgdGltZXIsIG1lcmdlLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJQ2FuRGlzYWJsZSwgbWl4aW5EaXNhYmxlZCwgSUNvbnRyb2xWYWx1ZUFjY2Vzc29yLCBtaXhpbkNvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGNvdmFsZW50L2NvcmUvY29tbW9uJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RkLWNoaXBdbmctdGVtcGxhdGUnLFxufSlcbmV4cG9ydCBjbGFzcyBUZENoaXBEaXJlY3RpdmUgZXh0ZW5kcyBUZW1wbGF0ZVBvcnRhbERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgc3VwZXIodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXJSZWYpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZC1hdXRvY29tcGxldGUtb3B0aW9uXW5nLXRlbXBsYXRlJyxcbn0pXG5leHBvcnQgY2xhc3MgVGRBdXRvY29tcGxldGVPcHRpb25EaXJlY3RpdmUgZXh0ZW5kcyBUZW1wbGF0ZVBvcnRhbERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgc3VwZXIodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXJSZWYpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZENoaXBzQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxufVxuXG4vKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbmV4cG9ydCBjb25zdCBfVGRDaGlwc01peGluQmFzZSA9IG1peGluQ29udHJvbFZhbHVlQWNjZXNzb3IobWl4aW5EaXNhYmxlZChUZENoaXBzQmFzZSksIFtdKTtcblxuQENvbXBvbmVudCh7XG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGRDaGlwc0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBzZWxlY3RvcjogJ3RkLWNoaXBzJyxcbiAgaW5wdXRzOiBbJ2Rpc2FibGVkJywgJ3ZhbHVlJ10sXG4gIHN0eWxlVXJsczogWycuL2NoaXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGlwcy5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZENoaXBzQ29tcG9uZW50XG4gIGV4dGVuZHMgX1RkQ2hpcHNNaXhpbkJhc2VcbiAgaW1wbGVtZW50cyBJQ29udHJvbFZhbHVlQWNjZXNzb3IsIERvQ2hlY2ssIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJQ2FuRGlzYWJsZVxue1xuICBwcml2YXRlIF9vdXRzaWRlQ2xpY2tTdWJzOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2lucHV0VmFsdWVDaGFuZ2VzU3ViczogU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICBwcml2YXRlIF9pc01vdXNlZG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2l0ZW1zOiBhbnlbXTtcbiAgcHJpdmF0ZSBfbGVuZ3RoOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9zdGFja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlcXVpcmVNYXRjaDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9jb2xvcjogJ3ByaW1hcnknIHwgJ2FjY2VudCcgfCAnd2FybicgPSAncHJpbWFyeSc7XG4gIHByaXZhdGUgX2lucHV0UG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJyA9ICdhZnRlcic7XG4gIHByaXZhdGUgX2NoaXBBZGRpdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX2NoaXBSZW1vdmFsOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF90YWJJbmRleDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfdG91Y2hlbmREZWJvdW5jZTogbnVtYmVyID0gMTAwO1xuXG4gIF9pbnRlcm5hbENsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIF9pbnRlcm5hbEFjdGl2YXRlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBfbmF0aXZlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoTWF0SW5wdXQsIHsgc3RhdGljOiB0cnVlIH0pIF9pbnB1dENoaWxkOiBNYXRJbnB1dDtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCB7IHN0YXRpYzogdHJ1ZSB9KSBfYXV0b2NvbXBsZXRlVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcbiAgQFZpZXdDaGlsZHJlbihNYXRDaGlwKSBfY2hpcHNDaGlsZHJlbjogUXVlcnlMaXN0PE1hdENoaXA+O1xuXG4gIEBDb250ZW50Q2hpbGQoVGRDaGlwRGlyZWN0aXZlKSBfY2hpcFRlbXBsYXRlOiBUZENoaXBEaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGQoVGRBdXRvY29tcGxldGVPcHRpb25EaXJlY3RpdmUpXG4gIF9hdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZTogVGRBdXRvY29tcGxldGVPcHRpb25EaXJlY3RpdmU7XG5cbiAgQFZpZXdDaGlsZHJlbihNYXRPcHRpb24pIF9vcHRpb25zOiBRdWVyeUxpc3Q8TWF0T3B0aW9uPjtcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGlzIHRydWUgd2hlbiBhdXRvY29tcGxldGUgaXMgZm9jdXNlZC5cbiAgICovXG4gIGdldCBmb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1Db250cm9sIGZvciB0aGUgbWF0SW5wdXQgZWxlbWVudC5cbiAgICovXG4gIGlucHV0Q29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAvKipcbiAgICogaXRlbXM/OiBhbnlbXVxuICAgKiBSZW5kZXJzIHRoZSBgbWF0LWF1dG9jb21wbGV0ZWAgd2l0aCB0aGUgcHJvdmlkZWQgbGlzdCB0byBkaXNwbGF5IGFzIG9wdGlvbnMuXG4gICAqL1xuICBASW5wdXQoJ2l0ZW1zJylcbiAgc2V0IGl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5fc2V0Rmlyc3RPcHRpb25BY3RpdmUoKTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBnZXQgaXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBzdGFja2VkPzogYm9vbGVhblxuICAgKiBTZXQgc3RhY2tlZCBvciBob3Jpem9udGFsIGNoaXBzIGRlcGVuZGluZyBvbiB2YWx1ZS5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBASW5wdXQoJ3N0YWNrZWQnKVxuICBzZXQgc3RhY2tlZChzdGFja2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc3RhY2tlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShzdGFja2VkKTtcbiAgfVxuICBnZXQgc3RhY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2tlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbnB1dFBvc2l0aW9uPzogJ2JlZm9yZScgfCAnYWZ0ZXInXG4gICAqIFNldCBpbnB1dCBwb3NpdGlvbiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoaXBzLlxuICAgKiBEZWZhdWx0cyB0byAnYWZ0ZXInLlxuICAgKi9cbiAgQElucHV0KCdpbnB1dFBvc2l0aW9uJylcbiAgc2V0IGlucHV0UG9zaXRpb24oaW5wdXRQb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInKSB7XG4gICAgdGhpcy5faW5wdXRQb3NpdGlvbiA9IGlucHV0UG9zaXRpb247XG4gIH1cbiAgZ2V0IGlucHV0UG9zaXRpb24oKTogJ2JlZm9yZScgfCAnYWZ0ZXInIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRQb3NpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1aXJlTWF0Y2g/OiBib29sZWFuXG4gICAqIEJsb2NrcyBjdXN0b20gaW5wdXRzIGFuZCBvbmx5IGFsbG93cyBzZWxlY3Rpb25zIGZyb20gdGhlIGF1dG9jb21wbGV0ZSBsaXN0LlxuICAgKi9cbiAgQElucHV0KCdyZXF1aXJlTWF0Y2gnKVxuICBzZXQgcmVxdWlyZU1hdGNoKHJlcXVpcmVNYXRjaDogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVNYXRjaCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXF1aXJlTWF0Y2gpO1xuICB9XG4gIGdldCByZXF1aXJlTWF0Y2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVNYXRjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1aXJlZD86IGJvb2xlYW5cbiAgICogVmFsdWUgaXMgc2V0IHRvIHRydWUgaWYgYXQgbGVhc3Qgb25lIGNoaXAgaXMgbmVlZGVkXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlXG4gICAqL1xuICBASW5wdXQoJ3JlcXVpcmVkJylcbiAgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxdWlyZWQpO1xuICB9XG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogY2hpcEFkZGl0aW9uPzogYm9vbGVhblxuICAgKiBEaXNhYmxlcyB0aGUgYWJpbGl0eSB0byBhZGQgY2hpcHMuIFdoZW4gc2V0dGluZyBkaXNhYmxlZCBhcyB0cnVlLCB0aGlzIHdpbGwgYmUgb3ZlcnJpZGVuLlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgQElucHV0KCdjaGlwQWRkaXRpb24nKVxuICBzZXQgY2hpcEFkZGl0aW9uKGNoaXBBZGRpdGlvbjogYm9vbGVhbikge1xuICAgIHRoaXMuX2NoaXBBZGRpdGlvbiA9IGNoaXBBZGRpdGlvbjtcbiAgICB0aGlzLl90b2dnbGVJbnB1dCgpO1xuICB9XG4gIGdldCBjaGlwQWRkaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBBZGRpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbm90IGluIGRpc2FibGVkIHN0YXRlIGFuZCBpZiBjaGlwQWRkaXRpb24gaXMgc2V0IHRvICd0cnVlJ1xuICAgKiBTdGF0ZXMgaWYgYSBjaGlwIGNhbiBiZSBhZGRlZCBhbmQgaWYgdGhlIGlucHV0IGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgZ2V0IGNhbkFkZENoaXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpcEFkZGl0aW9uICYmICF0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoaXBSZW1vdmFsPzogYm9vbGVhblxuICAgKiBEaXNhYmxlcyB0aGUgYWJpbGl0eSB0byByZW1vdmUgY2hpcHMuIElmIGl0IGRvZXNuJ3QgZXhpc3QgY2hpcCByZW1tb3ZhbCBkZWZhdWx0cyB0byB0cnVlLlxuICAgKiBXaGVuIHNldHRpbmcgZGlzYWJsZWQgYXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIG92ZXJyaWRlbiB0byBmYWxzZS5cbiAgICovXG4gIEBJbnB1dCgnY2hpcFJlbW92YWwnKVxuICBzZXQgY2hpcFJlbW92YWwoY2hpcFJlbW92YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jaGlwUmVtb3ZhbCA9IGNoaXBSZW1vdmFsO1xuICB9XG4gIGdldCBjaGlwUmVtb3ZhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpcFJlbW92YWw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG5vdCBpbiBkaXNhYmxlZCBzdGF0ZSBhbmQgaWYgY2hpcFJlbW92YWwgaXMgc2V0IHRvICd0cnVlJ1xuICAgKiBTdGF0ZXMgaWYgYSBjaGlwIGNhbiBiZSByZW1vdmVkXG4gICAqL1xuICBnZXQgY2FuUmVtb3ZlQ2hpcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGlwUmVtb3ZhbCAmJiAhdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSBkaXNwbGF5IHBsYWNlaG9sZGVyXG4gICAqL1xuICBnZXQgZGlzcGxheVBsYWNlSG9sZGVyKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNhbkFkZENoaXApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkID8gYCR7dGhpcy5wbGFjZWhvbGRlcn0gKmAgOiB0aGlzLnBsYWNlaG9sZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgYXV0b2NvbXBsZXRlIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogZGVib3VuY2U/OiBudW1iZXJcbiAgICogRGVib3VuY2UgdGltZW91dCBiZXR3ZWVuIGtleXByZXNzZXMuIERlZmF1bHRzIHRvIDIwMC5cbiAgICovXG4gIEBJbnB1dCgpIGRlYm91bmNlOiBudW1iZXIgPSAyMDA7XG5cbiAgLyoqXG4gICAqIGNvbG9yPzogJ3ByaW1hcnknIHwgJ2FjY2VudCcgfCAnd2FybidcbiAgICogU2V0cyB0aGUgY29sb3IgZm9yIHRoZSBpbnB1dCBhbmQgZm9jdXMvc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIGNoaXBzLlxuICAgKiBEZWZhdWx0cyB0byAncHJpbWFyeSdcbiAgICovXG4gIEBJbnB1dCgnY29sb3InKVxuICBzZXQgY29sb3IoY29sb3I6ICdwcmltYXJ5JyB8ICdhY2NlbnQnIHwgJ3dhcm4nKSB7XG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtYXQtJyArIHRoaXMuX2NvbG9yKTtcbiAgICAgIHRoaXMuX2NvbG9yID0gY29sb3I7XG4gICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtYXQtJyArIHRoaXMuX2NvbG9yKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGNvbG9yKCk6ICdwcmltYXJ5JyB8ICdhY2NlbnQnIHwgJ3dhcm4nIHtcbiAgICByZXR1cm4gdGhpcy5fY29sb3I7XG4gIH1cblxuICAvKipcbiAgICogYWRkPzogZnVuY3Rpb25cbiAgICogTWV0aG9kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYSBjaGlwIGlzIGFkZGVkLlxuICAgKiBTZW5kcyBjaGlwIHZhbHVlIGFzIGV2ZW50LlxuICAgKi9cbiAgQE91dHB1dCgpIGFkZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogcmVtb3ZlPzogZnVuY3Rpb25cbiAgICogTWV0aG9kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYSBjaGlwIGlzIHJlbW92ZWQuXG4gICAqIFNlbmRzIGNoaXAgdmFsdWUgYXMgZXZlbnQuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVtb3ZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBpbnB1dENoYW5nZT86IGZ1bmN0aW9uXG4gICAqIE1ldGhvZCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB2YWx1ZSBpbiB0aGUgYXV0b2NvbXBsZXRlIGlucHV0IGNoYW5nZXMuXG4gICAqIFNlbmRzIHN0cmluZyB2YWx1ZSBhcyBldmVudC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogY2hpcEZvY3VzPzogZnVuY3Rpb25cbiAgICogTWV0aG9kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYSBjaGlwIGlzIGZvY3VzZWQuXG4gICAqIFNlbmRzIGNoaXAgdmFsdWUgYXMgZXZlbnQuXG4gICAqL1xuICBAT3V0cHV0KCkgY2hpcEZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBibHVyPzogZnVuY3Rpb25cbiAgICogTWV0aG9kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYSBjaGlwIGlzIGJsdXJyZWQuXG4gICAqIFNlbmRzIGNoaXAgdmFsdWUgYXMgZXZlbnQuXG4gICAqL1xuICBAT3V0cHV0KCkgY2hpcEJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEhvc3RiaW5kaW5nIHRvIHNldCB0aGUgYTExeSBvZiB0aGUgVGRDaGlwc0NvbXBvbmVudCBkZXBlbmRpbmcgb24gaXRzIHN0YXRlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IC0xIDogdGhpcy5fdGFiSW5kZXg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21hdC0nICsgdGhpcy5fY29sb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbXBhcmVXaXRoPyBmdW5jdGlvblxuICAgKiBGdW5jdGlvbiB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYSBjaGlwIHZhbHVlIGFscmVhZHkgZXhpc3RzLlxuICAgKiBEZWZhdWx0cyB0byBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbiA9PT1cbiAgICovXG4gIEBJbnB1dCgpIGNvbXBhcmVXaXRoOiAobzE6IGFueSwgbzI6IGFueSkgPT4gYm9vbGVhbiA9IChvMTogYW55LCBvMjogYW55KSA9PiB7XG4gICAgcmV0dXJuIG8xID09PSBvMjtcbiAgfTtcblxuICAvKipcbiAgICogTGlzdGVucyB0byBob3N0IGZvY3VzIGV2ZW50IHRvIGFjdCBvbiBpdFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxuICBmb2N1c0xpc3RlbmVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgLy8gc2hvdWxkIG9ubHkgZm9jdXMgaWYgaXRzIG5vdCB2aWEgbW91c2Vkb3duIHRvIHByZXZlbnQgY2xhc2hpbmcgd2l0aCBhdXRvY29tcGxldGVcbiAgICBpZiAoIXRoaXMuX2lzTW91c2Vkb3duKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyB0byBob3N0IG1vdXNlZG93biBldmVudCB0byBhY3Qgb24gaXRcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG1vdXNlZG93bkxpc3RlbmVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgLy8gc2V0cyBhIGZsYWcgdG8ga25vdyBpZiB0aGVyZSB3YXMgYSBtb3VzZWRvd24gYW5kIHRoZW4gaXQgcmV0dXJucyBpdCBiYWNrIHRvIGZhbHNlXG4gICAgdGhpcy5faXNNb3VzZWRvd24gPSB0cnVlO1xuICAgIHRpbWVyKClcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9pc01vdXNlZG93biA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgY2xpY2tpbmcgb24gOmhvc3Qgb3IgYHRkLWNoaXBzLXdyYXBwZXJgLCB0aGVuIHdlIHN0b3AgdGhlIGNsaWNrIHByb3BhZ2F0aW9uIHNvIHRoZSBhdXRvY29tcGxldGVcbiAgICogZG9lc250IGNsb3NlIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGNsaWNrTGlzdGVuZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2xpY2tUYXJnZXQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldDtcbiAgICBpZiAoY2xpY2tUYXJnZXQgPT09IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCB8fCBjbGlja1RhcmdldC5jbGFzc05hbWUuaW5kZXhPZigndGQtY2hpcHMtd3JhcHBlcicpID4gLTEpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyB0byBob3N0IGtleWRvd24gZXZlbnQgdG8gYWN0IG9uIGl0IGRlcGVuZGluZyBvbiB0aGUga2V5cHJlc3NcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBrZXlkb3duTGlzdGVuZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgIGNhc2UgVEFCOlxuICAgICAgICAvLyBpZiB0YWJpbmcgb3V0LCB0aGVuIHVuZm9jdXMgdGhlIGNvbXBvbmVudFxuICAgICAgICB0aW1lcigpXG4gICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2N1c2VkU3RhdGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVTQ0FQRTpcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hpbGQuZm9jdXNlZCkge1xuICAgICAgICAgIHRoaXMuX25hdGl2ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgIHRoaXMucmVtb3ZlRm9jdXNlZFN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5fY2xvc2VBdXRvY29tcGxldGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZGVmYXVsdFxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0VmFsdWVDaGFuZ2VzU3VicyA9IHRoaXMuaW5wdXRDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2UpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodmFsdWUgPyB2YWx1ZSA6ICcnKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3dhdGNoT3V0c2lkZUNsaWNrKCk7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgLy8gVGhyb3cgb25DaGFuZ2UgZXZlbnQgb25seSBpZiBhcnJheSBjaGFuZ2VzIHNpemUuXG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggIT09IHRoaXMuX2xlbmd0aCkge1xuICAgICAgdGhpcy5fbGVuZ3RoID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX291dHNpZGVDbGlja1N1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9pbnB1dFZhbHVlQ2hhbmdlc1N1YnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIF9zZXRJbnRlcm5hbENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuX2ludGVybmFsQ2xpY2sgPSB0cnVlO1xuICB9XG5cbiAgLyoqIE1ldGhvZCBleGVjdXRlZCB3aGVuIHRoZSBkaXNhYmxlZCB2YWx1ZSBjaGFuZ2VzICovXG4gIG9uRGlzYWJsZWRDaGFuZ2UodjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3RvZ2dsZUlucHV0KCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXQgaXMgZXhlY3V0ZWQgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgbmV3IGNoaXAgZnJvbSB0aGUgYXV0b2NvbXBsZXRlLlxuICAgKiBJdCBjaGVjayBpZiBbcmVxdWlyZU1hdGNoXSBpcyBlbmFibGVkLCBhbmQgdHJpZXMgdG8gYWRkIHRoZSBmaXJzdCBhY3RpdmUgb3B0aW9uXG4gICAqIGVsc2UgaWYganVzdCBhZGRzIHRoZSB2YWx1ZSB0aGF0cyBvbiB0aGUgaW5wdXRcbiAgICogcmV0dXJucyAndHJ1ZScgaWYgc3VjY2Vzc2Z1bCwgJ2ZhbHNlJyBpZiBpdCBmYWlscy5cbiAgICovXG4gIF9oYW5kbGVBZGRDaGlwKCk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIGlmICh0aGlzLnJlcXVpcmVNYXRjaCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zOiBNYXRPcHRpb25bXSA9IHRoaXMuX29wdGlvbnMudG9BcnJheSgpLmZpbHRlcigob3B0aW9uOiBNYXRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5hY3RpdmU7XG4gICAgICB9KTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9uc1swXS52YWx1ZTtcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zWzBdLnNldEluYWN0aXZlU3R5bGVzKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24sIHRoZW4gdXNlIHRoYXRcbiAgICAgIC8vIGVsc2UgdXNlIHRoZSBpbnB1dCB2YWx1ZSBhcyBjaGlwXG4gICAgICBpZiAodGhpcy5fYXV0b2NvbXBsZXRlVHJpZ2dlci5hY3RpdmVPcHRpb24pIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9hdXRvY29tcGxldGVUcmlnZ2VyLmFjdGl2ZU9wdGlvbi52YWx1ZTtcbiAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlVHJpZ2dlci5hY3RpdmVPcHRpb24uc2V0SW5hY3RpdmVTdHlsZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5faW5wdXRDaGlsZC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ2hpcCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXRzIGV4ZWN0dXRlZCB3aGVuIHRyeWluZyB0byBhZGQgYSB2YWx1ZSBhcyBjaGlwXG4gICAqIHJldHVybnMgJ3RydWUnIGlmIHN1Y2Nlc3NmdWwsICdmYWxzZScgaWYgaXQgZmFpbHMuXG4gICAqL1xuICBhZGRDaGlwKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAvKipcbiAgICAgKiBhZGQgYSBkZWJvdW5jZSBtcyBkZWxheSB3aGVuIHJlb3BlbmluZyB0aGUgYXV0b2NvbXBsZXRlIHRvIGdpdmUgaXQgdGltZVxuICAgICAqIHRvIHJlcmVuZGVyIHRoZSBuZXh0IGxpc3QgYW5kIGF0IHRoZSBjb3JyZWN0IHNwb3RcbiAgICAgKi9cblxuICAgIHRoaXMuX2Nsb3NlQXV0b2NvbXBsZXRlKCk7XG4gICAgdGltZXIodGhpcy5kZWJvdW5jZSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNldEZvY3VzZWRTdGF0ZSgpO1xuICAgICAgICB0aGlzLl9zZXRGaXJzdE9wdGlvbkFjdGl2ZSgpO1xuICAgICAgICB0aGlzLl9vcGVuQXV0b2NvbXBsZXRlKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAvLyBjaGVjayBpZiB2YWx1ZSBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIG1vZGVsXG4gICAgaWYgKHRoaXMudmFsdWUuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IHRoaXMuY29tcGFyZVdpdGgoaXRlbSwgdmFsdWUpKSA+IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZS5wdXNoKHZhbHVlKTtcbiAgICB0aGlzLmFkZC5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0aGF0IGlzIGV4ZWN1dGVkIHdoZW4gdHJ5aW5nIHRvIHJlbW92ZSBhIGNoaXAuXG4gICAqIHJldHVybnMgJ3RydWUnIGlmIHN1Y2Nlc3NmdWwsICdmYWxzZScgaWYgaXQgZmFpbHMuXG4gICAqL1xuICByZW1vdmVDaGlwKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCByZW1vdmVkVmFsdWVzOiBhbnlbXSA9IHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZiAocmVtb3ZlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgZGVsZXRpbmcgbGFzdCBzaW5nbGUgY2hpcCwgdG8gZm9jdXMgaW5wdXQgYWZ0ZXJ3YXJkc1xuICAgICAqIEVsc2UgY2hlY2sgaWYgaXRzIG5vdCB0aGUgbGFzdCBjaGlwIG9mIHRoZSBsaXN0IHRvIGZvY3VzIHRoZSBuZXh0IG9uZS5cbiAgICAgKi9cbiAgICBpZiAoaW5kZXggPT09IHRoaXMuX3RvdGFsQ2hpcHMgLSAxICYmIGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnB1dENoaWxkLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChpbmRleCA8IHRoaXMuX3RvdGFsQ2hpcHMgLSAxKSB7XG4gICAgICB0aGlzLl9mb2N1c0NoaXAoaW5kZXggKyAxKTtcbiAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgICAgdGhpcy5fZm9jdXNDaGlwKGluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmUuZW1pdChyZW1vdmVkVmFsdWVzWzBdKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGJsdXIgb2YgY2hpcCBhbmQgc2VuZHMgb3V0IGV2ZW50XG4gICAqL1xuICBfaGFuZGxlQ2hpcEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBCbHVyLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZm9jdXMgb2YgY2hpcCBhbmQgc2VuZHMgb3V0IGV2ZW50XG4gICAqL1xuICBfaGFuZGxlQ2hpcEZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZXRGb2N1c2VkU3RhdGUoKTtcbiAgICB0aGlzLmNoaXBGb2N1cy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIF9oYW5kbGVGb2N1cygpOiBib29sZWFuIHtcbiAgICB0aGlzLnNldEZvY3VzZWRTdGF0ZSgpO1xuICAgIHRoaXMuX3NldEZpcnN0T3B0aW9uQWN0aXZlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBmb2N1cyBzdGF0ZSBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBzZXRGb2N1c2VkU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3RhYkluZGV4ID0gLTE7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBmb2N1cyBzdGF0ZSBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZW1vdmVGb2N1c2VkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3RhYkluZGV4ID0gMDtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IGZvY3VzIHRoZSBpbnB1dCBvciBmaXJzdCBjaGlwLiBTaW5jZSBpdHMgdGhlIGNvbXBvbmVudCBlbnRyeSBwb2ludFxuICAgKiBkZXBlbmRpbmcgaWYgYSB1c2VyIGNhbiBhZGQgb3IgcmVtb3ZlIGNoaXBzXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYW5BZGRDaGlwKSB7XG4gICAgICB0aGlzLl9pbnB1dENoaWxkLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fZm9jdXNGaXJzdENoaXAoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFzc2VzIHJlbGV2YW50IGlucHV0IGtleSBwcmVzc2VzLlxuICAgKi9cbiAgX2lucHV0S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNpbmNlIHRoZSBmaXJzdCBpdGVtIGlzIGhpZ2hsaWdodGVkIG9uIFtyZXF1aXJlTWF0Y2hdLCB3ZSBuZWVkIHRvIGluYWN0aXZhdGUgaXRcbiAgICAgICAgICogd2hlbiBwcmVzc2luZyB0aGUgdXAga2V5XG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5yZXF1aXJlTWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCBsZW5ndGg6IG51bWJlciA9IHRoaXMuX29wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIGlmIChsZW5ndGggPiAxICYmIHRoaXMuX29wdGlvbnMudG9BcnJheSgpWzBdLmFjdGl2ZSAmJiB0aGlzLl9pbnRlcm5hbEFjdGl2YXRlT3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKVswXS5zZXRJbmFjdGl2ZVN0eWxlcygpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxBY3RpdmF0ZU9wdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWZhdWx0IHdpbmRvdyBzY3JvbGxpbmdcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgY2FzZSBERUxFVEU6XG4gICAgICBjYXNlIEJBQ0tTUEFDRTpcbiAgICAgICAgdGhpcy5fY2xvc2VBdXRvY29tcGxldGUoKTtcbiAgICAgICAgLyoqIENoZWNrIHRvIHNlZSBpZiBpbnB1dCBpcyBlbXB0eSB3aGVuIHByZXNzaW5nIGxlZnQgYXJyb3cgdG8gbW92ZSB0byB0aGUgbGFzdCBjaGlwICovXG4gICAgICAgIGlmICghdGhpcy5faW5wdXRDaGlsZC52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzTGFzdENoaXAoKTtcbiAgICAgICAgICAvLyBwcmV2ZW50IGRlZmF1bHQgd2luZG93IHNjcm9sbGluZ1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICB0aGlzLl9jbG9zZUF1dG9jb21wbGV0ZSgpO1xuICAgICAgICAvKiogQ2hlY2sgdG8gc2VlIGlmIGlucHV0IGlzIGVtcHR5IHdoZW4gcHJlc3NpbmcgcmlnaHQgYXJyb3cgdG8gbW92ZSB0byB0aGUgZmlyc3QgY2hpcCAqL1xuICAgICAgICBpZiAoIXRoaXMuX2lucHV0Q2hpbGQudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9mb2N1c0ZpcnN0Q2hpcCgpO1xuICAgICAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCB3aW5kb3cgc2Nyb2xsaW5nXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkZWZhdWx0XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhc3NlcyByZWxldmFudCBjaGlwIGtleSBwcmVzc2VzLlxuICAgKi9cbiAgX2NoaXBLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIERFTEVURTpcbiAgICAgIGNhc2UgQkFDS1NQQUNFOlxuICAgICAgICAvKiogQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkZWxldGUgYSBjaGlwICovXG4gICAgICAgIGlmICh0aGlzLmNhblJlbW92ZUNoaXApIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUNoaXAoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgIGNhc2UgTEVGVF9BUlJPVzpcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIHRvIHNlZSBpZiBsZWZ0L2Rvd24gYXJyb3cgd2FzIHByZXNzZWQgd2hpbGUgZm9jdXNpbmcgdGhlIGZpcnN0IGNoaXAgdG8gZm9jdXMgaW5wdXQgbmV4dFxuICAgICAgICAgKiBBbHNvIGNoZWNrIGlmIGlucHV0IHNob3VsZCBiZSBmb2N1c2VkXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAvLyBvbmx5IHRyeSB0byB0YXJnZXQgaW5wdXQgaWYgcHJlc3NpbmcgbGVmdFxuICAgICAgICAgIGlmICh0aGlzLmNhbkFkZENoaXAgJiYgZXZlbnQua2V5Q29kZSA9PT0gTEVGVF9BUlJPVykge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRDaGlsZC5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0xhc3RDaGlwKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzQ2hpcChpbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCB3aW5kb3cgc2Nyb2xsaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgY2FzZSBSSUdIVF9BUlJPVzpcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIHRvIHNlZSBpZiByaWdodC91cCBhcnJvdyB3YXMgcHJlc3NlZCB3aGlsZSBmb2N1c2luZyB0aGUgbGFzdCBjaGlwIHRvIGZvY3VzIGlucHV0IG5leHRcbiAgICAgICAgICogQWxzbyBjaGVjayBpZiBpbnB1dCBzaG91bGQgYmUgZm9jdXNlZFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLl90b3RhbENoaXBzIC0gMSkge1xuICAgICAgICAgIC8vIG9ubHkgdHJ5IHRvIHRhcmdldCBpbnB1dCBpZiBwcmVzc2luZyByaWdodFxuICAgICAgICAgIGlmICh0aGlzLmNhbkFkZENoaXAgJiYgZXZlbnQua2V5Q29kZSA9PT0gUklHSFRfQVJST1cpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hpbGQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNGaXJzdENoaXAoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCB0aGlzLl90b3RhbENoaXBzIC0gMSkge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzQ2hpcChpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgZGVmYXVsdCB3aW5kb3cgc2Nyb2xsaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRlZmF1bHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHJlbW92ZSBmcm9tIGRpc3BsYXkgdGhlIHZhbHVlIGFkZGVkIGZyb20gdGhlIGF1dG9jb21wbGV0ZSBzaW5jZSBpdCBnb2VzIGRpcmVjdGx5IGFzIGNoaXAuXG4gICAqL1xuICBfcmVtb3ZlSW5wdXREaXNwbGF5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBvcGVuIHRoZSBhdXRvY29tcGxldGUgbWFudWFsbHkgaWYgaXRzIG5vdCBhbHJlYWR5IG9wZW5lZFxuICAgKi9cbiAgX29wZW5BdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9hdXRvY29tcGxldGVUcmlnZ2VyLnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlVHJpZ2dlci5vcGVuUGFuZWwoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gY2xvc2UgdGhlIGF1dG9jb21wbGV0ZSBtYW51YWxseSBpZiBpdHMgbm90IGFscmVhZHkgY2xvc2VkXG4gICAqL1xuICBfY2xvc2VBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2F1dG9jb21wbGV0ZVRyaWdnZXIucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLl9hdXRvY29tcGxldGVUcmlnZ2VyLmNsb3NlUGFuZWwoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdG90YWwgb2YgY2hpcHNcbiAgICovXG4gIGdldCBfdG90YWxDaGlwcygpOiBudW1iZXIge1xuICAgIGNvbnN0IGNoaXBzOiBNYXRDaGlwW10gPSB0aGlzLl9jaGlwc0NoaWxkcmVuLnRvQXJyYXkoKTtcbiAgICByZXR1cm4gY2hpcHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBmb2N1cyBhIGRlc2lyZWQgY2hpcCBieSBpbmRleFxuICAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNDaGlwKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvKiogY2hlY2sgdG8gc2VlIGlmIGluZGV4IGV4aXN0cyBpbiB0aGUgYXJyYXkgYmVmb3JlIGZvY3VzaW5nICovXG4gICAgaWYgKGluZGV4ID4gLTEgJiYgdGhpcy5fdG90YWxDaGlwcyA+IGluZGV4KSB7XG4gICAgICB0aGlzLl9jaGlwc0NoaWxkcmVuLnRvQXJyYXkoKVtpbmRleF0uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogTWV0aG9kIHRvIGZvY3VzIGZpcnN0IGNoaXAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNGaXJzdENoaXAoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9jdXNDaGlwKDApO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0byBmb2N1cyBsYXN0IGNoaXAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNMYXN0Q2hpcCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb2N1c0NoaXAodGhpcy5fdG90YWxDaGlwcyAtIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byB0b2dnbGUgdGhlIGRpc2FibGUgc3RhdGUgb2YgaW5wdXRcbiAgICogQ2hlY2tzIGlmIG5vdCBpbiBkaXNhYmxlZCBzdGF0ZSBhbmQgaWYgY2hpcEFkZGl0aW9uIGlzIHNldCB0byAndHJ1ZSdcbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZUlucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbkFkZENoaXApIHtcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLmVuYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5kaXNhYmxlKCk7XG4gICAgfVxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZmlyc3Qgb3B0aW9uIGFzIGFjdGl2ZSB0byBsZXQgdGhlIHVzZXIga25vdyB3aGljaCBvbmUgd2lsbCBiZSBhZGRlZCB3aGVuIHByZXNzaW5nIGVudGVyXG4gICAqIE9ubHkgaWYgW3JlcXVpcmVNYXRjaF0gaGFzIGJlZW4gc2V0XG4gICAqL1xuICBwcml2YXRlIF9zZXRGaXJzdE9wdGlvbkFjdGl2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXF1aXJlTWF0Y2gpIHtcbiAgICAgIC8vIG5lZWQgdG8gdXNlIGEgdGltZXIgaGVyZSB0byB3YWl0IHVudGlsIHRoZSBhdXRvY29tcGxldGUgaGFzIGJlZW4gb3BlbmVkIChlbmQgb2YgcXVldWUpXG4gICAgICB0aW1lcigpXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCAmJiB0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY2xlYW4gdXAgb2YgcHJldmlvdXNseSBhY3RpdmUgb3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy50b0FycmF5KCkuZm9yRWFjaCgob3B0aW9uOiBNYXRPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9uLnNldEluYWN0aXZlU3R5bGVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgZmlyc3Qgb25lIGFzIGFjdGl2ZVxuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy50b0FycmF5KClbMF0uc2V0QWN0aXZlU3R5bGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbEFjdGl2YXRlT3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoZXMgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCB0byByZW1vdmUgdGhlIGZvY3VzXG4gICAqIFRoZSBhdXRvY29tcGxldGUgcGFuZWwgaXMgY29uc2lkZXJlZCBpbnNpZGUgdGhlIGNvbXBvbmVudCBzbyB3ZVxuICAgKiBuZWVkIHRvIHVzZSBhIGZsYWcgdG8gZmluZCBvdXQgd2hlbiBpdHMgY2xpY2tlZC5cbiAgICovXG4gIHByaXZhdGUgX3dhdGNoT3V0c2lkZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kb2N1bWVudCkge1xuICAgICAgdGhpcy5fb3V0c2lkZUNsaWNrU3VicyA9IG1lcmdlKGZyb21FdmVudCh0aGlzLl9kb2N1bWVudCwgJ2NsaWNrJyksIGZyb21FdmVudCh0aGlzLl9kb2N1bWVudCwgJ3RvdWNoZW5kJykpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLl90b3VjaGVuZERlYm91bmNlKSxcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbGlja1RhcmdldDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkICYmXG4gICAgICAgICAgICAgIGNsaWNrVGFyZ2V0ICE9PSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgIXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja1RhcmdldCkgJiZcbiAgICAgICAgICAgICAgIXRoaXMuX2ludGVybmFsQ2xpY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZvY3VzZWRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==