@energycap/components 0.31.5 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/energycap-components.min.css +2 -2
  2. package/energycap-email.min.css +1 -1
  3. package/esm2020/energycap-components.mjs +5 -0
  4. package/esm2020/lib/components.module.mjs +386 -0
  5. package/esm2020/lib/controls/banner/banner.component.mjs +106 -0
  6. package/esm2020/lib/controls/button/button.component.mjs +106 -0
  7. package/esm2020/lib/controls/button/copy-button.directive.mjs +65 -0
  8. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +139 -0
  9. package/esm2020/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -0
  10. package/esm2020/lib/controls/combobox/combobox.component.mjs +841 -0
  11. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +237 -0
  12. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +169 -0
  13. package/esm2020/lib/controls/form-control/form-control.component.mjs +86 -0
  14. package/esm2020/lib/controls/form-control-base.mjs +143 -0
  15. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  16. package/esm2020/lib/controls/form-group/form-group.component.mjs +252 -0
  17. package/esm2020/lib/controls/help-popover/help-popover.component.mjs +28 -0
  18. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +233 -0
  19. package/esm2020/lib/controls/link-button/link-button.component.mjs +11 -0
  20. package/esm2020/lib/controls/menu/menu.component.mjs +443 -0
  21. package/{esm2015/lib/controls/navigation/link-item.js → esm2020/lib/controls/navigation/link-item.mjs} +0 -0
  22. package/{esm2015/lib/controls/navigation/nav-group.js → esm2020/lib/controls/navigation/nav-group.mjs} +0 -0
  23. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  24. package/{esm2015/lib/controls/navigation/nav-item.js → esm2020/lib/controls/navigation/nav-item.mjs} +0 -0
  25. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +371 -0
  26. package/esm2020/lib/controls/popover/popover.component.mjs +84 -0
  27. package/{esm2015/lib/controls/radio-button/radio-button-option.js → esm2020/lib/controls/radio-button/radio-button-option.mjs} +0 -0
  28. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +81 -0
  29. package/esm2020/lib/controls/select/select.component.mjs +87 -0
  30. package/esm2020/lib/controls/tabs/tabs.component.mjs +47 -0
  31. package/esm2020/lib/controls/textbox/textbox.component.mjs +154 -0
  32. package/{esm2015/lib/core/cache.service.js → esm2020/lib/core/cache.service.mjs} +9 -8
  33. package/{esm2015/lib/core/custom-validators.js → esm2020/lib/core/custom-validators.mjs} +0 -0
  34. package/{esm2015/lib/core/date-time-helper.js → esm2020/lib/core/date-time-helper.mjs} +0 -0
  35. package/esm2020/lib/core/error.service.mjs +57 -0
  36. package/esm2020/lib/core/scroll.service.mjs +89 -0
  37. package/esm2020/lib/core/telemetry-tracker.service.mjs +16 -0
  38. package/esm2020/lib/core/telemetry.service.mjs +38 -0
  39. package/esm2020/lib/core/validation-message.service.mjs +181 -0
  40. package/{esm2015/lib/core/validation-patterns.js → esm2020/lib/core/validation-patterns.mjs} +0 -0
  41. package/esm2020/lib/core/window.service.mjs +182 -0
  42. package/esm2020/lib/display/app-bar/app-bar.component.mjs +46 -0
  43. package/esm2020/lib/display/avatar/avatar.component.mjs +67 -0
  44. package/{esm2015/lib/display/avatar/avatar.service.js → esm2020/lib/display/avatar/avatar.service.mjs} +9 -7
  45. package/esm2020/lib/display/confirm/confirm.component.mjs +131 -0
  46. package/{esm2015/lib/display/dialog/dialog-content.js → esm2020/lib/display/dialog/dialog-content.mjs} +0 -0
  47. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  48. package/{esm2015/lib/display/dialog/dialog-types.js → esm2020/lib/display/dialog/dialog-types.mjs} +0 -0
  49. package/esm2020/lib/display/dialog/dialog.component.mjs +242 -0
  50. package/esm2020/lib/display/dialog/dialog.service.mjs +71 -0
  51. package/{esm2015/lib/display/help/help-types.js → esm2020/lib/display/help/help-types.mjs} +0 -0
  52. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +106 -0
  53. package/{esm2015/lib/display/hierarchy/hierarchy-mocks.spec.js → esm2020/lib/display/hierarchy/hierarchy-mocks.spec.mjs} +5 -9
  54. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +59 -0
  55. package/esm2020/lib/display/item-display/item-display.component.mjs +67 -0
  56. package/esm2020/lib/display/json-display/json-display.component.mjs +47 -0
  57. package/esm2020/lib/display/resizable/resizable-base.mjs +120 -0
  58. package/esm2020/lib/display/resizable/resizable.component.mjs +57 -0
  59. package/esm2020/lib/display/spinner/spinner.component.mjs +12 -0
  60. package/esm2020/lib/display/splash/splash.component.mjs +42 -0
  61. package/esm2020/lib/display/splash/splash.service.mjs +35 -0
  62. package/esm2020/lib/display/table/resizable-column.component.mjs +20 -0
  63. package/esm2020/lib/display/table/resizable-table.directive.mjs +227 -0
  64. package/esm2020/lib/display/table/searchable-table.component.mjs +338 -0
  65. package/esm2020/lib/display/table/table-detail-row.component.mjs +27 -0
  66. package/esm2020/lib/display/table/table-locked-column.component.mjs +58 -0
  67. package/esm2020/lib/display/table/table-master-header-row.component.mjs +11 -0
  68. package/esm2020/lib/display/table/table-master-row.component.mjs +150 -0
  69. package/esm2020/lib/display/table/table-pagination.component.mjs +150 -0
  70. package/esm2020/lib/display/table/table-selectable-row.component.mjs +235 -0
  71. package/esm2020/lib/display/table/table.component.mjs +244 -0
  72. package/esm2020/lib/display/tags/tag.mjs +15 -0
  73. package/esm2020/lib/display/tags/tags.component.mjs +77 -0
  74. package/esm2020/lib/display/toast/toast/toast.component.mjs +77 -0
  75. package/{esm2015/lib/display/toast/toast-types.js → esm2020/lib/display/toast/toast-types.mjs} +0 -0
  76. package/esm2020/lib/display/toast/toast.service.mjs +35 -0
  77. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +114 -0
  78. package/esm2020/lib/display/tooltip/tooltip.component.mjs +25 -0
  79. package/esm2020/lib/display/tooltip/tooltip.service.mjs +63 -0
  80. package/esm2020/lib/display/tree/tree.component.mjs +125 -0
  81. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  82. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  83. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  84. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +163 -0
  85. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  86. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  87. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +48 -0
  88. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  89. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  90. package/{esm2015/lib/shared/display.js → esm2020/lib/shared/display.mjs} +0 -0
  91. package/esm2020/lib/shared/form-group.helper.mjs +67 -0
  92. package/{esm2015/lib/shared/json-helper.js → esm2020/lib/shared/json-helper.mjs} +0 -0
  93. package/{esm2015/lib/shared/lodash-helper.js → esm2020/lib/shared/lodash-helper.mjs} +0 -0
  94. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +339 -0
  95. package/{esm2015/lib/shared/page/page-statuses.js → esm2020/lib/shared/page/page-statuses.mjs} +0 -0
  96. package/esm2020/lib/shared/page/page-title/page-title.component.mjs +23 -0
  97. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +121 -0
  98. package/{esm2015/lib/shared/testing/hierarchy-base-test-injector-factory.spec.js → esm2020/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs} +0 -0
  99. package/esm2020/lib/shared/testing/page-base-component-test-helper.spec.mjs +30 -0
  100. package/{esm2015/lib/shared/testing/page-base-component-test-injector-factory.spec.js → esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs} +0 -0
  101. package/esm2020/lib/shared/testing/public-mocks.spec.mjs +132 -0
  102. package/{esm2015/lib/shared/testing/spy-factory.spec.js → esm2020/lib/shared/testing/spy-factory.spec.mjs} +0 -0
  103. package/{esm2015/lib/shared/testing/translation-mocks.spec.js → esm2020/lib/shared/testing/translation-mocks.spec.mjs} +0 -0
  104. package/esm2020/lib/shared/user-preference.service.mjs +17 -0
  105. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  106. package/esm2020/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -0
  107. package/esm2020/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -0
  108. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  109. package/fesm2015/energycap-components.mjs +10090 -0
  110. package/fesm2015/energycap-components.mjs.map +1 -0
  111. package/fesm2020/energycap-components.mjs +9999 -0
  112. package/fesm2020/energycap-components.mjs.map +1 -0
  113. package/index.d.ts +5 -0
  114. package/lib/components.module.d.ts +72 -0
  115. package/lib/controls/banner/banner.component.d.ts +3 -0
  116. package/lib/controls/button/button.component.d.ts +3 -0
  117. package/lib/controls/button/copy-button.directive.d.ts +3 -0
  118. package/lib/controls/checkbox/checkbox.component.d.ts +3 -0
  119. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +3 -0
  120. package/lib/controls/combobox/combobox.component.d.ts +5 -2
  121. package/lib/controls/dropdown/dropdown.component.d.ts +3 -0
  122. package/lib/controls/file-upload/file-upload.component.d.ts +5 -2
  123. package/lib/controls/form-control/form-control.component.d.ts +3 -0
  124. package/lib/controls/form-control-base.d.ts +3 -0
  125. package/lib/controls/form-control-label/form-control-label.component.d.ts +3 -0
  126. package/lib/controls/form-group/form-group.component.d.ts +6 -3
  127. package/lib/controls/help-popover/help-popover.component.d.ts +3 -0
  128. package/lib/controls/item-picker/item-picker.component.d.ts +5 -2
  129. package/lib/controls/link-button/link-button.component.d.ts +3 -0
  130. package/lib/controls/menu/menu.component.d.ts +3 -0
  131. package/lib/controls/navigation/nav-item-active.directive.d.ts +3 -0
  132. package/lib/controls/numericbox/numericbox.component.d.ts +5 -2
  133. package/lib/controls/popover/popover.component.d.ts +3 -0
  134. package/lib/controls/radio-button/radio-button.component.d.ts +3 -0
  135. package/lib/controls/select/select.component.d.ts +3 -0
  136. package/lib/controls/tabs/tabs.component.d.ts +3 -0
  137. package/lib/controls/textbox/textbox.component.d.ts +3 -0
  138. package/lib/core/cache.service.d.ts +3 -0
  139. package/lib/core/error.service.d.ts +3 -0
  140. package/lib/core/scroll.service.d.ts +3 -0
  141. package/lib/core/telemetry-tracker.service.d.ts +3 -0
  142. package/lib/core/telemetry.service.d.ts +3 -0
  143. package/lib/core/validation-message.service.d.ts +3 -0
  144. package/lib/core/window.service.d.ts +3 -0
  145. package/lib/display/app-bar/app-bar.component.d.ts +3 -0
  146. package/lib/display/avatar/avatar.component.d.ts +3 -0
  147. package/lib/display/avatar/avatar.service.d.ts +3 -0
  148. package/lib/display/confirm/confirm.component.d.ts +5 -2
  149. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +3 -0
  150. package/lib/display/dialog/dialog.component.d.ts +3 -0
  151. package/lib/display/dialog/dialog.service.d.ts +3 -0
  152. package/lib/display/hierarchy/hierarchy-base.d.ts +3 -0
  153. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +3 -0
  154. package/lib/display/item-display/item-display.component.d.ts +3 -0
  155. package/lib/display/json-display/json-display.component.d.ts +5 -2
  156. package/lib/display/resizable/resizable-base.d.ts +3 -0
  157. package/lib/display/resizable/resizable.component.d.ts +3 -0
  158. package/lib/display/spinner/spinner.component.d.ts +3 -0
  159. package/lib/display/splash/splash.component.d.ts +3 -0
  160. package/lib/display/splash/splash.service.d.ts +3 -0
  161. package/lib/display/table/resizable-column.component.d.ts +3 -0
  162. package/lib/display/table/resizable-table.directive.d.ts +3 -0
  163. package/lib/display/table/searchable-table.component.d.ts +6 -3
  164. package/lib/display/table/table-detail-row.component.d.ts +3 -0
  165. package/lib/display/table/table-locked-column.component.d.ts +3 -0
  166. package/lib/display/table/table-master-header-row.component.d.ts +3 -0
  167. package/lib/display/table/table-master-row.component.d.ts +3 -0
  168. package/lib/display/table/table-pagination.component.d.ts +3 -0
  169. package/lib/display/table/table-selectable-row.component.d.ts +5 -2
  170. package/lib/display/table/table.component.d.ts +3 -0
  171. package/lib/display/tags/tags.component.d.ts +3 -0
  172. package/lib/display/toast/toast/toast.component.d.ts +3 -0
  173. package/lib/display/toast/toast.service.d.ts +3 -0
  174. package/lib/display/toast/toaster/toaster.component.d.ts +3 -0
  175. package/lib/display/tooltip/tooltip.component.d.ts +3 -0
  176. package/lib/display/tooltip/tooltip.service.d.ts +3 -0
  177. package/lib/display/tree/tree.component.d.ts +3 -0
  178. package/lib/display/view-overlay/view-overlay.component.d.ts +3 -0
  179. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +3 -0
  180. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +3 -0
  181. package/lib/shared/directives/popup/popup-container.directive.d.ts +3 -0
  182. package/lib/shared/display/pipes/date-display.pipe.d.ts +3 -0
  183. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +3 -0
  184. package/lib/shared/display/pipes/relative-date.pipe.d.ts +3 -0
  185. package/lib/shared/display/pipes/row-count.pipe.d.ts +3 -0
  186. package/lib/shared/display/pipes/time-display.pipe.d.ts +3 -0
  187. package/lib/shared/form-group.helper.d.ts +5 -2
  188. package/lib/shared/page/page-base/page-base.component.d.ts +5 -2
  189. package/lib/shared/page/page-title/page-title.component.d.ts +3 -0
  190. package/lib/shared/page/page-view/page-view.component.d.ts +3 -0
  191. package/lib/shared/testing/public-mocks.spec.d.ts +7 -0
  192. package/lib/shared/user-preference.service.d.ts +3 -0
  193. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +3 -0
  194. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +3 -0
  195. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +3 -0
  196. package/package.json +27 -15
  197. package/src/styles/_functions.scss +6 -4
  198. package/src/styles/_icons.scss +1 -1
  199. package/src/styles/mixins/_control-base.scss +2 -2
  200. package/src/styles/mixins/_form-control-base.scss +3 -1
  201. package/src/styles/mixins/_spinner-base.scss +3 -1
  202. package/bundles/energycap-components.umd.js +0 -10646
  203. package/bundles/energycap-components.umd.js.map +0 -1
  204. package/bundles/energycap-components.umd.min.js +0 -17
  205. package/bundles/energycap-components.umd.min.js.map +0 -1
  206. package/energycap-components.d.ts +0 -7
  207. package/energycap-components.metadata.json +0 -1
  208. package/esm2015/energycap-components.js +0 -8
  209. package/esm2015/lib/components.module.js +0 -238
  210. package/esm2015/lib/controls/banner/banner.component.js +0 -94
  211. package/esm2015/lib/controls/button/button.component.js +0 -89
  212. package/esm2015/lib/controls/button/copy-button.directive.js +0 -63
  213. package/esm2015/lib/controls/checkbox/checkbox.component.js +0 -137
  214. package/esm2015/lib/controls/collapsible-toggle/collapsible-toggle.component.js +0 -35
  215. package/esm2015/lib/controls/combobox/combobox.component.js +0 -819
  216. package/esm2015/lib/controls/dropdown/dropdown.component.js +0 -207
  217. package/esm2015/lib/controls/file-upload/file-upload.component.js +0 -172
  218. package/esm2015/lib/controls/form-control/form-control.component.js +0 -65
  219. package/esm2015/lib/controls/form-control-base.js +0 -140
  220. package/esm2015/lib/controls/form-control-label/form-control-label.component.js +0 -139
  221. package/esm2015/lib/controls/form-group/form-group.component.js +0 -254
  222. package/esm2015/lib/controls/help-popover/help-popover.component.js +0 -22
  223. package/esm2015/lib/controls/item-picker/item-picker.component.js +0 -216
  224. package/esm2015/lib/controls/link-button/link-button.component.js +0 -12
  225. package/esm2015/lib/controls/menu/menu.component.js +0 -424
  226. package/esm2015/lib/controls/navigation/nav-item-active.directive.js +0 -86
  227. package/esm2015/lib/controls/numericbox/numericbox.component.js +0 -362
  228. package/esm2015/lib/controls/popover/popover.component.js +0 -85
  229. package/esm2015/lib/controls/radio-button/radio-button.component.js +0 -78
  230. package/esm2015/lib/controls/select/select.component.js +0 -89
  231. package/esm2015/lib/controls/tabs/tabs.component.js +0 -42
  232. package/esm2015/lib/controls/textbox/textbox.component.js +0 -149
  233. package/esm2015/lib/core/error.service.js +0 -56
  234. package/esm2015/lib/core/scroll.service.js +0 -88
  235. package/esm2015/lib/core/telemetry-tracker.service.js +0 -14
  236. package/esm2015/lib/core/telemetry.service.js +0 -40
  237. package/esm2015/lib/core/validation-message.service.js +0 -185
  238. package/esm2015/lib/core/window.service.js +0 -191
  239. package/esm2015/lib/display/app-bar/app-bar.component.js +0 -42
  240. package/esm2015/lib/display/avatar/avatar.component.js +0 -73
  241. package/esm2015/lib/display/confirm/confirm.component.js +0 -127
  242. package/esm2015/lib/display/dialog/dialog-group/dialog-group.component.js +0 -65
  243. package/esm2015/lib/display/dialog/dialog.component.js +0 -229
  244. package/esm2015/lib/display/dialog/dialog.service.js +0 -69
  245. package/esm2015/lib/display/hierarchy/hierarchy-base.js +0 -106
  246. package/esm2015/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.js +0 -58
  247. package/esm2015/lib/display/item-display/item-display.component.js +0 -57
  248. package/esm2015/lib/display/json-display/json-display.component.js +0 -44
  249. package/esm2015/lib/display/resizable/resizable-base.js +0 -119
  250. package/esm2015/lib/display/resizable/resizable.component.js +0 -57
  251. package/esm2015/lib/display/spinner/spinner.component.js +0 -12
  252. package/esm2015/lib/display/splash/splash.component.js +0 -45
  253. package/esm2015/lib/display/splash/splash.service.js +0 -34
  254. package/esm2015/lib/display/table/resizable-column.component.js +0 -23
  255. package/esm2015/lib/display/table/resizable-table.directive.js +0 -223
  256. package/esm2015/lib/display/table/searchable-table.component.js +0 -303
  257. package/esm2015/lib/display/table/table-detail-row.component.js +0 -21
  258. package/esm2015/lib/display/table/table-locked-column.component.js +0 -53
  259. package/esm2015/lib/display/table/table-master-header-row.component.js +0 -11
  260. package/esm2015/lib/display/table/table-master-row.component.js +0 -141
  261. package/esm2015/lib/display/table/table-pagination.component.js +0 -146
  262. package/esm2015/lib/display/table/table-selectable-row.component.js +0 -216
  263. package/esm2015/lib/display/table/table.component.js +0 -210
  264. package/esm2015/lib/display/tags/tag.js +0 -15
  265. package/esm2015/lib/display/tags/tags.component.js +0 -73
  266. package/esm2015/lib/display/toast/toast/toast.component.js +0 -70
  267. package/esm2015/lib/display/toast/toast.service.js +0 -34
  268. package/esm2015/lib/display/toast/toaster/toaster.component.js +0 -117
  269. package/esm2015/lib/display/tooltip/tooltip.component.js +0 -24
  270. package/esm2015/lib/display/tooltip/tooltip.service.js +0 -64
  271. package/esm2015/lib/display/tree/tree.component.js +0 -100
  272. package/esm2015/lib/display/view-overlay/view-overlay.component.js +0 -50
  273. package/esm2015/lib/shared/directives/click-area-for/click-area-for.directive.js +0 -25
  274. package/esm2015/lib/shared/directives/if-viewport-width/if-viewport-width.directive.js +0 -112
  275. package/esm2015/lib/shared/directives/popup/popup-container.directive.js +0 -160
  276. package/esm2015/lib/shared/display/pipes/date-display.pipe.js +0 -49
  277. package/esm2015/lib/shared/display/pipes/highlight-text.pipe.js +0 -26
  278. package/esm2015/lib/shared/display/pipes/relative-date.pipe.js +0 -49
  279. package/esm2015/lib/shared/display/pipes/row-count.pipe.js +0 -47
  280. package/esm2015/lib/shared/display/pipes/time-display.pipe.js +0 -40
  281. package/esm2015/lib/shared/form-group.helper.js +0 -65
  282. package/esm2015/lib/shared/page/page-base/page-base.component.js +0 -356
  283. package/esm2015/lib/shared/page/page-title/page-title.component.js +0 -19
  284. package/esm2015/lib/shared/page/page-view/page-view.component.js +0 -94
  285. package/esm2015/lib/shared/testing/page-base-component-test-helper.spec.js +0 -35
  286. package/esm2015/lib/shared/testing/public-mocks.spec.js +0 -126
  287. package/esm2015/lib/shared/user-preference.service.js +0 -15
  288. package/esm2015/lib/shared/wizard/wizard-base/wizard-base.component.js +0 -260
  289. package/esm2015/lib/shared/wizard/wizard-buttons/wizard-buttons.component.js +0 -54
  290. package/esm2015/lib/shared/wizard/wizard-progress/wizard-progress.component.js +0 -18
  291. package/fesm2015/energycap-components.js +0 -9638
  292. package/fesm2015/energycap-components.js.map +0 -1
@@ -0,0 +1,120 @@
1
+ import { Inject, Input, Directive } from '@angular/core';
2
+ import { DOCUMENT } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../core/cache.service";
5
+ /**
6
+ * Base class for handling click and drag resizing of elements with a mouse.
7
+ * Derived classes must provide the element to be resized and implement the setWidth function.
8
+ */
9
+ export class ResizableBase {
10
+ constructor(renderer, cacheService, document) {
11
+ this.renderer = renderer;
12
+ this.cacheService = cacheService;
13
+ this.document = document;
14
+ /**Set to true if the resizable should remember its width. Requires the element to have an ID*/
15
+ this.rememberWidth = false;
16
+ /**The id of the resizable, used for GI and for remembering the width */
17
+ this.id = '';
18
+ /** The element that is current being resized */
19
+ this.currentEl = null;
20
+ /** The x position of the mouse when dragging starts. Relative to the viewport. */
21
+ this.startScreenX = 0;
22
+ /** The width of the current element when dragging starts. */
23
+ this.startElWidth = 0;
24
+ }
25
+ ngAfterViewInit() {
26
+ if (this.rememberWidth && this.id) {
27
+ let cached = this.cacheService.getItem('resizable-' + this.id);
28
+ if (cached && cached.widths && cached.widths.length > 0) {
29
+ this.restoreWidths(cached.widths);
30
+ }
31
+ }
32
+ }
33
+ /**
34
+ * On a mousedown event
35
+ * * store the width of the current element to calculate the new width
36
+ * * store the horizontal position of the pointer to calculate the new width.
37
+ * * add the 'is-active' class to the current element
38
+ * * set up listeners on the document to know when dragging starts and stops.
39
+ * Mouse event listeners are added to the document because the cursor may move
40
+ * off the current element while dragging.
41
+ */
42
+ startDrag(event) {
43
+ if (this.currentEl) {
44
+ this.startElWidth = this.currentEl.offsetWidth;
45
+ this.startScreenX = event.screenX;
46
+ this.renderer.addClass(this.currentEl, 'is-active');
47
+ this.renderer.setStyle(this.document.body, 'cursor', 'col-resize');
48
+ // Remove any listeners that may have not been cleaned up before we register new listeners.
49
+ if (this.mouseupListener) {
50
+ this.mouseupListener();
51
+ this.mouseupListener = undefined;
52
+ }
53
+ if (this.mousemoveListener) {
54
+ this.mousemoveListener();
55
+ this.mousemoveListener = undefined;
56
+ }
57
+ this.mouseupListener = this.renderer.listen(this.document, 'mouseup', this.stopDrag.bind(this));
58
+ this.mousemoveListener = this.renderer.listen(this.document, 'mousemove', this.drag.bind(this));
59
+ }
60
+ else {
61
+ throw new Error(`currentEl is ${this.currentEl}. currentEl must be assigned before startDrag() is called.`);
62
+ }
63
+ }
64
+ /**
65
+ * On a mousemove event, calculate the new width of the current element by
66
+ * adding the difference of the start pageX position and the current pageX
67
+ * position to the width of the element when we started dragging. Pass the
68
+ * calculated with to the setWidth method.
69
+ */
70
+ drag(event) {
71
+ this.setWidth(this.startElWidth + (event.screenX - this.startScreenX));
72
+ }
73
+ /**
74
+ * On a mouseup event
75
+ * * remove the mouse event listeners on the document.
76
+ * * remove the 'is-active' class from the current element
77
+ * * reset the cursor style on the body
78
+ */
79
+ stopDrag(event) {
80
+ if (this.mousemoveListener) {
81
+ this.mousemoveListener();
82
+ this.mousemoveListener = undefined;
83
+ }
84
+ if (this.mouseupListener) {
85
+ this.mouseupListener();
86
+ this.mouseupListener = undefined;
87
+ }
88
+ if (this.currentEl) {
89
+ this.renderer.removeClass(this.currentEl, 'is-active');
90
+ }
91
+ this.renderer.removeStyle(this.document.body, 'cursor');
92
+ }
93
+ /**Called after the view initializes if the component supports restoring widths and there are cached widths to restore.
94
+ * To be overridden in a derived class if it supports restoring widths, defaults to a no-op*/
95
+ restoreWidths(widths) { }
96
+ /** Store the provided widths in cache so they can be retrieved later */
97
+ saveWidths(widths) {
98
+ if (this.rememberWidth && this.id) {
99
+ this.cacheService.setItem('resizable-' + this.id, {
100
+ widths: widths
101
+ });
102
+ }
103
+ else if (this.rememberWidth) {
104
+ console.error('rememberWidth is set but will not take effect unless ID is also set');
105
+ }
106
+ }
107
+ }
108
+ ResizableBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ResizableBase, deps: [{ token: i0.Renderer2 }, { token: i1.CacheService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
109
+ ResizableBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ResizableBase, inputs: { rememberWidth: "rememberWidth", id: "id" }, ngImport: i0 });
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ResizableBase, decorators: [{
111
+ type: Directive
112
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.CacheService }, { type: Document, decorators: [{
113
+ type: Inject,
114
+ args: [DOCUMENT]
115
+ }] }]; }, propDecorators: { rememberWidth: [{
116
+ type: Input
117
+ }], id: [{
118
+ type: Input
119
+ }] } });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9yZXNpemFibGUvcmVzaXphYmxlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLE1BQU0sRUFBRSxLQUFLLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUszQzs7O0dBR0c7QUFFSCxNQUFNLE9BQWdCLGFBQWE7SUFpQ2pDLFlBQ1ksUUFBbUIsRUFDckIsWUFBMEIsRUFDTixRQUFrQjtRQUZwQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ3JCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ04sYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTFCaEQsK0ZBQStGO1FBRXhGLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRXRDLHlFQUF5RTtRQUVsRSxPQUFFLEdBQVcsRUFBRSxDQUFDO1FBRXZCLGdEQUFnRDtRQUN0QyxjQUFTLEdBQXVCLElBQUksQ0FBQztRQUUvQyxrRkFBa0Y7UUFDeEUsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFFbEMsNkRBQTZEO1FBQ3BELGlCQUFZLEdBQVcsQ0FBQyxDQUFDO0lBWWpDLENBQUM7SUFwQ0gsZUFBZTtRQUNiLElBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFDO1lBQy9CLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFtQixZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLElBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO2dCQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFD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QztTQUNKO2FBQU0sSUFBRyxJQUFJLENBQUMsYUFBYSxFQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7OzBHQTVIbUIsYUFBYSx1RUFvQ3ZCLFFBQVE7OEZBcENFLGFBQWE7MkZBQWIsYUFBYTtrQkFEbEMsU0FBUzs2R0FxQ2dDLFFBQVE7MEJBQTdDLE1BQU07MkJBQUMsUUFBUTs0Q0F4QlgsYUFBYTtzQkFEbkIsS0FBSztnQkFLQyxFQUFFO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW5kZXJlcjIsIEluamVjdCwgSW5wdXQsIEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvY2FjaGUuc2VydmljZSc7XHJcblxyXG5leHBvcnQgdHlwZSBSZXNpemVDYWNoZUVudHJ5ID0geyB3aWR0aHM6IG51bWJlcltdIH07XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgaGFuZGxpbmcgY2xpY2sgYW5kIGRyYWcgcmVzaXppbmcgb2YgZWxlbWVudHMgd2l0aCBhIG1vdXNlLiBcclxuICogRGVyaXZlZCBjbGFzc2VzIG11c3QgcHJvdmlkZSB0aGUgZWxlbWVudCB0byBiZSByZXNpemVkIGFuZCBpbXBsZW1lbnQgdGhlIHNldFdpZHRoIGZ1bmN0aW9uLlxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXNpemFibGVCYXNlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5yZW1lbWJlcldpZHRoICYmIHRoaXMuaWQpe1xyXG4gICAgICBsZXQgY2FjaGVkID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0SXRlbTxSZXNpemVDYWNoZUVudHJ5PigncmVzaXphYmxlLScgKyB0aGlzLmlkKTtcclxuICAgICAgaWYoY2FjaGVkICYmIGNhY2hlZC53aWR0aHMgJiYgY2FjaGVkLndpZHRocy5sZW5ndGggPiAwKXtcclxuICAgICAgICB0aGlzLnJlc3RvcmVXaWR0aHMoY2FjaGVkLndpZHRocyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlNldCB0byB0cnVlIGlmIHRoZSByZXNpemFibGUgc2hvdWxkIHJlbWVtYmVyIGl0cyB3aWR0aC4gUmVxdWlyZXMgdGhlIGVsZW1lbnQgdG8gaGF2ZSBhbiBJRCovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVtZW1iZXJXaWR0aDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipUaGUgaWQgb2YgdGhlIHJlc2l6YWJsZSwgdXNlZCBmb3IgR0kgYW5kIGZvciByZW1lbWJlcmluZyB0aGUgd2lkdGggICovXHJcbiAgQElucHV0KCkgXHJcbiAgcHVibGljIGlkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRoZSBlbGVtZW50IHRoYXQgaXMgY3VycmVudCBiZWluZyByZXNpemVkICovXHJcbiAgcHJvdGVjdGVkIGN1cnJlbnRFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBtb3VzZSB3aGVuIGRyYWdnaW5nIHN0YXJ0cy4gUmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0LiAqL1xyXG4gIHByb3RlY3RlZCBzdGFydFNjcmVlblg6IG51bWJlciA9IDA7XHJcblxyXG4gICAvKiogVGhlIHdpZHRoIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgd2hlbiBkcmFnZ2luZyBzdGFydHMuICovXHJcbiAgcHJvdGVjdGVkIHN0YXJ0RWxXaWR0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqIFxyXG4gICAqIFN0b3JlZCAndW5saXN0ZW4nIGZ1bmN0aW9ucyB0aGF0IHJlbW92ZSB0aGVpciByZXNwZWN0aXZlIGxpc3RlbmVycyB3aGVuIGNhbGxlZCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbW91c2V1cExpc3RlbmVyPzogKCkgPT4gdm9pZDtcclxuICBwcm90ZWN0ZWQgbW91c2Vtb3ZlTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLCBcclxuICAgIHByaXZhdGUgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQ6IERvY3VtZW50XHJcbiAgKXt9XHJcblxyXG4gIC8qKiBcclxuICAgKiBPbiBhIG1vdXNlZG93biBldmVudFxyXG4gICAqICogc3RvcmUgdGhlIHdpZHRoIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgdG8gY2FsY3VsYXRlIHRoZSBuZXcgd2lkdGhcclxuICAgKiAqIHN0b3JlIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIHRvIGNhbGN1bGF0ZSB0aGUgbmV3IHdpZHRoLiBcclxuICAgKiAqIGFkZCB0aGUgJ2lzLWFjdGl2ZScgY2xhc3MgdG8gdGhlIGN1cnJlbnQgZWxlbWVudFxyXG4gICAqICogc2V0IHVwIGxpc3RlbmVycyBvbiB0aGUgZG9jdW1lbnQgdG8ga25vdyB3aGVuIGRyYWdnaW5nIHN0YXJ0cyBhbmQgc3RvcHMuIFxyXG4gICAqIE1vdXNlIGV2ZW50IGxpc3RlbmVycyBhcmUgYWRkZWQgdG8gdGhlIGRvY3VtZW50IGJlY2F1c2UgdGhlIGN1cnNvciBtYXkgbW92ZSBcclxuICAgKiBvZmYgdGhlIGN1cnJlbnQgZWxlbWVudCB3aGlsZSBkcmFnZ2luZy5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhcnREcmFnKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RWwpIHtcclxuICAgICAgdGhpcy5zdGFydEVsV2lkdGggPSB0aGlzLmN1cnJlbnRFbC5vZmZzZXRXaWR0aDtcclxuICAgICAgdGhpcy5zdGFydFNjcmVlblggPSBldmVudC5zY3JlZW5YO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuY3VycmVudEVsLCAnaXMtYWN0aXZlJyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCAnY3Vyc29yJywgJ2NvbC1yZXNpemUnKTtcclxuXHJcbiAgICAgIC8vIFJlbW92ZSBhbnkgbGlzdGVuZXJzIHRoYXQgbWF5IGhhdmUgbm90IGJlZW4gY2xlYW5lZCB1cCBiZWZvcmUgd2UgcmVnaXN0ZXIgbmV3IGxpc3RlbmVycy5cclxuICAgICAgaWYgKHRoaXMubW91c2V1cExpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5tb3VzZXVwTGlzdGVuZXIoKTtcclxuICAgICAgICB0aGlzLm1vdXNldXBMaXN0ZW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5tb3VzZW1vdmVMaXN0ZW5lcikge1xyXG4gICAgICAgIHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIoKTtcclxuICAgICAgICB0aGlzLm1vdXNlbW92ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm1vdXNldXBMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5zdG9wRHJhZy5iaW5kKHRoaXMpKTtcclxuICAgICAgdGhpcy5tb3VzZW1vdmVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLmRyYWcuYmluZCh0aGlzKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGN1cnJlbnRFbCBpcyAke3RoaXMuY3VycmVudEVsfS4gY3VycmVudEVsIG11c3QgYmUgYXNzaWduZWQgYmVmb3JlIHN0YXJ0RHJhZygpIGlzIGNhbGxlZC5gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGEgbW91c2Vtb3ZlIGV2ZW50LCBjYWxjdWxhdGUgdGhlIG5ldyB3aWR0aCBvZiB0aGUgY3VycmVudCBlbGVtZW50IGJ5IFxyXG4gICAqIGFkZGluZyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgc3RhcnQgcGFnZVggcG9zaXRpb24gYW5kIHRoZSBjdXJyZW50IHBhZ2VYIFxyXG4gICAqIHBvc2l0aW9uIHRvIHRoZSB3aWR0aCBvZiB0aGUgZWxlbWVudCB3aGVuIHdlIHN0YXJ0ZWQgZHJhZ2dpbmcuIFBhc3MgdGhlIFxyXG4gICAqIGNhbGN1bGF0ZWQgd2l0aCB0byB0aGUgc2V0V2lkdGggbWV0aG9kLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkcmFnKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFdpZHRoKHRoaXMuc3RhcnRFbFdpZHRoICsgKGV2ZW50LnNjcmVlblggLSB0aGlzLnN0YXJ0U2NyZWVuWCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IGVsZW1lbnQncyB3aWR0aC4gQ2FsbGVkIGFmdGVyIGEgbW91c2Vtb3ZlIGV2ZW50LlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRXaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogT24gYSBtb3VzZXVwIGV2ZW50XHJcbiAgICogKiByZW1vdmUgdGhlIG1vdXNlIGV2ZW50IGxpc3RlbmVycyBvbiB0aGUgZG9jdW1lbnQuXHJcbiAgICogKiByZW1vdmUgdGhlICdpcy1hY3RpdmUnIGNsYXNzIGZyb20gdGhlIGN1cnJlbnQgZWxlbWVudFxyXG4gICAqICogcmVzZXQgdGhlIGN1cnNvciBzdHlsZSBvbiB0aGUgYm9keVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzdG9wRHJhZyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW91c2Vtb3ZlTGlzdGVuZXIpIHtcclxuICAgICAgdGhpcy5tb3VzZW1vdmVMaXN0ZW5lcigpO1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5tb3VzZXVwTGlzdGVuZXIpIHtcclxuICAgICAgdGhpcy5tb3VzZXVwTGlzdGVuZXIoKTtcclxuICAgICAgdGhpcy5tb3VzZXVwTGlzdGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmN1cnJlbnRFbCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuY3VycmVudEVsLCAnaXMtYWN0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksICdjdXJzb3InKTtcclxuICB9XHJcblxyXG4gIC8qKkNhbGxlZCBhZnRlciB0aGUgdmlldyBpbml0aWFsaXplcyBpZiB0aGUgY29tcG9uZW50IHN1cHBvcnRzIHJlc3RvcmluZyB3aWR0aHMgYW5kIHRoZXJlIGFyZSBjYWNoZWQgd2lkdGhzIHRvIHJlc3RvcmUuIFxyXG4gICAqIFRvIGJlIG92ZXJyaWRkZW4gaW4gYSBkZXJpdmVkIGNsYXNzIGlmIGl0IHN1cHBvcnRzIHJlc3RvcmluZyB3aWR0aHMsIGRlZmF1bHRzIHRvIGEgbm8tb3AqL1xyXG4gIHByb3RlY3RlZCByZXN0b3JlV2lkdGhzKHdpZHRoczogbnVtYmVyW10pOiB2b2lkIHsgfVxyXG5cclxuICAvKiogU3RvcmUgdGhlIHByb3ZpZGVkIHdpZHRocyBpbiBjYWNoZSBzbyB0aGV5IGNhbiBiZSByZXRyaWV2ZWQgbGF0ZXIgKi9cclxuICBwcm90ZWN0ZWQgc2F2ZVdpZHRocyh3aWR0aHM6IG51bWJlcltdKXtcclxuICAgIGlmKHRoaXMucmVtZW1iZXJXaWR0aCAmJiB0aGlzLmlkKXtcclxuICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0SXRlbSgncmVzaXphYmxlLScgKyB0aGlzLmlkLCA8UmVzaXplQ2FjaGVFbnRyeT4ge1xyXG4gICAgICAgIHdpZHRoczogd2lkdGhzXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmKHRoaXMucmVtZW1iZXJXaWR0aCl7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlbWVtYmVyV2lkdGggaXMgc2V0IGJ1dCB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bmxlc3MgSUQgaXMgYWxzbyBzZXQnKTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
@@ -0,0 +1,57 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Component, Inject } from '@angular/core';
3
+ import { ResizableBase } from './resizable-base';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../core/cache.service";
6
+ /**
7
+ * Make an element resizable horizontally by wrapping it in the ResizableComponent.
8
+ * Default widths / limits are applied but you can optionally override them
9
+ * with min-width and max-width with style attributes
10
+ * @example
11
+ * <ec-resizable [style.width.px]="200"
12
+ * [style.min-width.px]="75"
13
+ * [style.max-width.px]="300">
14
+ * <div> ... </div>
15
+ * </ec-resizable>
16
+ */
17
+ export class ResizableComponent extends ResizableBase {
18
+ constructor(el, renderer, cacheService, document) {
19
+ super(renderer, cacheService, document);
20
+ this.el = el;
21
+ //default rememberWidth to true for standard resizable, resizable tables default to false
22
+ this.rememberWidth = true;
23
+ }
24
+ /** Store the host element to reference later */
25
+ ngOnInit() {
26
+ this.currentEl = this.el.nativeElement;
27
+ }
28
+ /**
29
+ * Set the new width of the element and emit the new width to subscribers
30
+ */
31
+ setWidth(width) {
32
+ this.renderer.setStyle(this.currentEl, 'width', width + 'px');
33
+ this.saveWidths([width]);
34
+ }
35
+ /**Called from the base class when cached widths are available and restoring
36
+ * width is enabled. We only care about the first one because we only have one width
37
+ */
38
+ restoreWidths(widths) {
39
+ this.setWidth(widths[0]);
40
+ }
41
+ }
42
+ ResizableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ResizableComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.CacheService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
43
+ ResizableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: ResizableComponent, selector: "ec-resizable", usesInheritance: true, ngImport: i0, template: `<div class="content">
44
+ <ng-content></ng-content>
45
+ </div>
46
+ <div class="handle" (mousedown)="startDrag($event)"></div>`, isInline: true, styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{width:240px;max-width:480px;min-width:100px;position:relative;border-right:1px solid var(--ec-border-color-legacy);display:flex}:host.is-active{-webkit-user-select:none;user-select:none}:host.is-active .handle:after{background-color:var(--ec-color-interactive)}.handle{position:absolute;right:-7px;width:13px;height:100%;top:0;padding:0 5px;z-index:var(--ec-z-index-splitter)}.handle:after{content:\"\";display:block;transition:background-color .3s ease;height:100%;position:relative}.handle:hover{cursor:col-resize}.handle:hover:after{background-color:var(--ec-color-interactive)}.content{overflow:hidden;display:flex;flex:1 1;min-height:0;min-width:0}.content ::ng-deep>*{flex:1 1;min-height:0;min-width:0}\n"] });
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ResizableComponent, decorators: [{
48
+ type: Component,
49
+ args: [{ selector: 'ec-resizable', template: `<div class="content">
50
+ <ng-content></ng-content>
51
+ </div>
52
+ <div class="handle" (mousedown)="startDrag($event)"></div>`, styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{width:240px;max-width:480px;min-width:100px;position:relative;border-right:1px solid var(--ec-border-color-legacy);display:flex}:host.is-active{-webkit-user-select:none;user-select:none}:host.is-active .handle:after{background-color:var(--ec-color-interactive)}.handle{position:absolute;right:-7px;width:13px;height:100%;top:0;padding:0 5px;z-index:var(--ec-z-index-splitter)}.handle:after{content:\"\";display:block;transition:background-color .3s ease;height:100%;position:relative}.handle:hover{cursor:col-resize}.handle:hover:after{background-color:var(--ec-color-interactive)}.content{overflow:hidden;display:flex;flex:1 1;min-height:0;min-width:0}.content ::ng-deep>*{flex:1 1;min-height:0;min-width:0}\n"] }]
53
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.CacheService }, { type: Document, decorators: [{
54
+ type: Inject,
55
+ args: [DOCUMENT]
56
+ }] }]; } });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3Jlc2l6YWJsZS9yZXNpemFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFHakQ7Ozs7Ozs7Ozs7R0FVRztBQVNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBQ25ELFlBQ1UsRUFBYyxFQUN0QixRQUFtQixFQUNuQixZQUEwQixFQUNSLFFBQWtCO1FBRXBDLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBTGhDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFPdEIseUZBQXlGO1FBQ3pGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxnREFBZ0Q7SUFDekMsUUFBUTtRQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ08sUUFBUSxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNPLGFBQWEsQ0FBQyxNQUFnQjtRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7OytHQS9CVSxrQkFBa0IsaUdBS25CLFFBQVE7bUdBTFAsa0JBQWtCLDJFQU5uQjs7O3VFQUcyRDsyRkFHMUQsa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLGNBQWMsWUFDZDs7O3VFQUcyRDtzSUFRdkMsUUFBUTswQkFBbkMsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc2l6YWJsZUJhc2UgfSBmcm9tICcuL3Jlc2l6YWJsZS1iYXNlJztcclxuXHJcblxyXG4vKipcclxuICogTWFrZSBhbiBlbGVtZW50IHJlc2l6YWJsZSBob3Jpem9udGFsbHkgYnkgd3JhcHBpbmcgaXQgaW4gdGhlIFJlc2l6YWJsZUNvbXBvbmVudC5cclxuICogRGVmYXVsdCB3aWR0aHMgLyBsaW1pdHMgYXJlIGFwcGxpZWQgYnV0IHlvdSBjYW4gb3B0aW9uYWxseSBvdmVycmlkZSB0aGVtXHJcbiAqIHdpdGggbWluLXdpZHRoIGFuZCBtYXgtd2lkdGggd2l0aCBzdHlsZSBhdHRyaWJ1dGVzXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxlYy1yZXNpemFibGUgW3N0eWxlLndpZHRoLnB4XT1cIjIwMFwiXHJcbiAqICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCI3NVwiXHJcbiAqICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCIzMDBcIj5cclxuICogICAgPGRpdj4gLi4uIDwvZGl2PlxyXG4gKiA8L2VjLXJlc2l6YWJsZT5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtcmVzaXphYmxlJyxcclxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhhbmRsZVwiIChtb3VzZWRvd24pPVwic3RhcnREcmFnKCRldmVudClcIj48L2Rpdj5gLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc2l6YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVDb21wb25lbnQgZXh0ZW5kcyBSZXNpemFibGVCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudDogRG9jdW1lbnQpXHJcbiAge1xyXG4gICAgc3VwZXIocmVuZGVyZXIsIGNhY2hlU2VydmljZSwgZG9jdW1lbnQpO1xyXG5cclxuICAgIC8vZGVmYXVsdCByZW1lbWJlcldpZHRoIHRvIHRydWUgZm9yIHN0YW5kYXJkIHJlc2l6YWJsZSwgcmVzaXphYmxlIHRhYmxlcyBkZWZhdWx0IHRvIGZhbHNlXHJcbiAgICB0aGlzLnJlbWVtYmVyV2lkdGggPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN0b3JlIHRoZSBob3N0IGVsZW1lbnQgdG8gcmVmZXJlbmNlIGxhdGVyICovXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50RWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIG5ldyB3aWR0aCBvZiB0aGUgZWxlbWVudCBhbmQgZW1pdCB0aGUgbmV3IHdpZHRoIHRvIHN1YnNjcmliZXJzXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNldFdpZHRoKHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jdXJyZW50RWwsICd3aWR0aCcsIHdpZHRoICsgJ3B4Jyk7XHJcbiAgICB0aGlzLnNhdmVXaWR0aHMoW3dpZHRoXSk7XHJcbiAgfVxyXG5cclxuICAvKipDYWxsZWQgZnJvbSB0aGUgYmFzZSBjbGFzcyB3aGVuIGNhY2hlZCB3aWR0aHMgYXJlIGF2YWlsYWJsZSBhbmQgcmVzdG9yaW5nXHJcbiAgICogd2lkdGggaXMgZW5hYmxlZC4gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBmaXJzdCBvbmUgYmVjYXVzZSB3ZSBvbmx5IGhhdmUgb25lIHdpZHRoXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHJlc3RvcmVXaWR0aHMod2lkdGhzOiBudW1iZXJbXSl7XHJcbiAgICB0aGlzLnNldFdpZHRoKHdpZHRoc1swXSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** Exposes the markup and styles that represent the spinner. No inputs or outputs defined because it is just a visual component*/
4
+ export class SpinnerComponent {
5
+ }
6
+ SpinnerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7
+ SpinnerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: SpinnerComponent, selector: "ec-spinner", ngImport: i0, template: "<div class=\"spinner\">\r\n <span class=\"spinner-dot\"></span>\r\n <span class=\"spinner-dot\"></span>\r\n <span class=\"spinner-dot\"></span>\r\n <span class=\"spinner-dot\"></span>\r\n</div>", styles: ["@keyframes sk-bouncedelay{0%,80%,to{opacity:0}40%{opacity:1}}.spinner{display:flex}.spinner-dot{width:.75rem;height:.75rem;background-color:var(--ec-color-interactive);animation:sk-bouncedelay 1.7s infinite ease-in-out both;margin-right:.25rem}.spinner-dot:nth-child(1){animation-delay:-.6s}.spinner-dot:nth-child(2){animation-delay:-.4s}.spinner-dot:nth-child(3){animation-delay:-.2s}:host(.spinner-small) .spinner-dot{width:.5rem;height:.5rem;background-color:var(--ec-color-interactive);animation:sk-bouncedelay 1.7s infinite ease-in-out both;margin-right:.1666666667rem}:host(.spinner-small) .spinner-dot:nth-child(1){animation-delay:-.6s}:host(.spinner-small) .spinner-dot:nth-child(2){animation-delay:-.4s}:host(.spinner-small) .spinner-dot:nth-child(3){animation-delay:-.2s}\n"] });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SpinnerComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ selector: 'ec-spinner', template: "<div class=\"spinner\">\r\n <span class=\"spinner-dot\"></span>\r\n <span class=\"spinner-dot\"></span>\r\n <span class=\"spinner-dot\"></span>\r\n <span class=\"spinner-dot\"></span>\r\n</div>", styles: ["@keyframes sk-bouncedelay{0%,80%,to{opacity:0}40%{opacity:1}}.spinner{display:flex}.spinner-dot{width:.75rem;height:.75rem;background-color:var(--ec-color-interactive);animation:sk-bouncedelay 1.7s infinite ease-in-out both;margin-right:.25rem}.spinner-dot:nth-child(1){animation-delay:-.6s}.spinner-dot:nth-child(2){animation-delay:-.4s}.spinner-dot:nth-child(3){animation-delay:-.2s}:host(.spinner-small) .spinner-dot{width:.5rem;height:.5rem;background-color:var(--ec-color-interactive);animation:sk-bouncedelay 1.7s infinite ease-in-out both;margin-right:.1666666667rem}:host(.spinner-small) .spinner-dot:nth-child(1){animation-delay:-.6s}:host(.spinner-small) .spinner-dot:nth-child(2){animation-delay:-.4s}:host(.spinner-small) .spinner-dot:nth-child(3){animation-delay:-.2s}\n"] }]
11
+ }] });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9zcGlubmVyL3NwaW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUTFDLGtJQUFrSTtBQUNsSSxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCO2lHQUFoQixnQkFBZ0Isa0RDVDdCLHVNQUtNOzJGRElPLGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXNwaW5uZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGlubmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zcGlubmVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbi8qKiBFeHBvc2VzIHRoZSBtYXJrdXAgYW5kIHN0eWxlcyB0aGF0IHJlcHJlc2VudCB0aGUgc3Bpbm5lci4gTm8gaW5wdXRzIG9yIG91dHB1dHMgZGVmaW5lZCBiZWNhdXNlIGl0IGlzIGp1c3QgYSB2aXN1YWwgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIFNwaW5uZXJDb21wb25lbnQgeyB9XHJcbiIsIjxkaXYgY2xhc3M9XCJzcGlubmVyXCI+XHJcbiAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWRvdFwiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cInNwaW5uZXItZG90XCI+PC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1kb3RcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWRvdFwiPjwvc3Bhbj5cclxuPC9kaXY+Il19
@@ -0,0 +1,42 @@
1
+ import { Component } from '@angular/core';
2
+ import { Subject, timer } from 'rxjs';
3
+ import { takeUntil, tap } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./splash.service";
6
+ export class SplashComponent {
7
+ constructor(splashService) {
8
+ this.splashService = splashService;
9
+ /** Sets the visibility of the splash display */
10
+ this.isVisible = true;
11
+ this.stopAnimation = false;
12
+ /** Emits when the service is destroyed */
13
+ this.destroyed = new Subject();
14
+ }
15
+ ngOnInit() {
16
+ this.splashService.splashVisibility.pipe(takeUntil(this.destroyed), tap(async (value) => {
17
+ if (value) {
18
+ this.stopAnimation = false;
19
+ }
20
+ else {
21
+ // Prevent animation from continuing after splash screen is hidden
22
+ // but if we hide it then show while the timer is running, don't stop the animation after all
23
+ timer(1000).pipe(takeUntil(this.splashService.splashVisibility)).subscribe(() => {
24
+ this.stopAnimation = true;
25
+ });
26
+ }
27
+ })).subscribe(showSplash => {
28
+ this.isVisible = showSplash;
29
+ });
30
+ }
31
+ ngOnDestroy() {
32
+ this.destroyed.next();
33
+ this.destroyed.unsubscribe();
34
+ }
35
+ }
36
+ SplashComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SplashComponent, deps: [{ token: i1.SplashService }], target: i0.ɵɵFactoryTarget.Component });
37
+ SplashComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: SplashComponent, selector: "ec-splash", ngImport: i0, template: "<div class=\"app-splash\"\r\n [class.app-loaded]=\"!isVisible\">\r\n\r\n <!-- This is the raw icon.svg file so we can animate it -->\r\n <svg [class.d-none]=\"stopAnimation\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"50\"\r\n height=\"50\"\r\n viewBox=\"0 0 50 50\">\r\n <g>\r\n <g>\r\n <path fill=\"#A0AD39\"\r\n fill-rule=\"nonzero\"\r\n d=\"M34.93,32.25 L34.93,37.25 L15.21,37.25 L15.21,32.25 L34.93,32.25 Z M28.45,22.48 L28.45,27.48 L15.21,27.48 L15.21,22.48 L28.45,22.48 Z M34.93,12.71 L34.93,17.71 L15.21,17.71 L15.21,12.71 L34.93,12.71 Z\" />\r\n <path fill=\"#A0AD39\"\r\n d=\"M24.99,5 C31.1,5 36.56,7.75 40.23,12.07 L44.33,9.16 C39.75,3.57 32.78,0 24.99,0 C17.2,0 10.23,3.57 5.65,9.16 L9.75,12.07 C13.42,7.75 18.88,5 24.99,5 Z\" />\r\n </g>\r\n <path fill=\"#17303B\"\r\n d=\"M40.24,37.93 C36.57,42.25 31.11,45 25,45 C18.89,45 13.43,42.25 9.76,37.93 L9.78,37.92 C6.82,34.43 5,29.94 5,25 C5,21.86 5.74,18.91 7.03,16.26 L2.89,13.33 C1.05,16.81 0,20.78 0,25 C0,31.01 2.13,36.52 5.66,40.83 L5.66,40.83 C10.24,46.42 17.21,49.99 25,49.99 C32.79,49.99 39.76,46.42 44.34,40.83 L40.24,37.93 Z\" />\r\n </g>\r\n\r\n </svg>\r\n</div>" });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SplashComponent, decorators: [{
39
+ type: Component,
40
+ args: [{ selector: 'ec-splash', template: "<div class=\"app-splash\"\r\n [class.app-loaded]=\"!isVisible\">\r\n\r\n <!-- This is the raw icon.svg file so we can animate it -->\r\n <svg [class.d-none]=\"stopAnimation\" \r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"50\"\r\n height=\"50\"\r\n viewBox=\"0 0 50 50\">\r\n <g>\r\n <g>\r\n <path fill=\"#A0AD39\"\r\n fill-rule=\"nonzero\"\r\n d=\"M34.93,32.25 L34.93,37.25 L15.21,37.25 L15.21,32.25 L34.93,32.25 Z M28.45,22.48 L28.45,27.48 L15.21,27.48 L15.21,22.48 L28.45,22.48 Z M34.93,12.71 L34.93,17.71 L15.21,17.71 L15.21,12.71 L34.93,12.71 Z\" />\r\n <path fill=\"#A0AD39\"\r\n d=\"M24.99,5 C31.1,5 36.56,7.75 40.23,12.07 L44.33,9.16 C39.75,3.57 32.78,0 24.99,0 C17.2,0 10.23,3.57 5.65,9.16 L9.75,12.07 C13.42,7.75 18.88,5 24.99,5 Z\" />\r\n </g>\r\n <path fill=\"#17303B\"\r\n d=\"M40.24,37.93 C36.57,42.25 31.11,45 25,45 C18.89,45 13.43,42.25 9.76,37.93 L9.78,37.92 C6.82,34.43 5,29.94 5,25 C5,21.86 5.74,18.91 7.03,16.26 L2.89,13.33 C1.05,16.81 0,20.78 0,25 C0,31.01 2.13,36.52 5.66,40.83 L5.66,40.83 C10.24,46.42 17.21,49.99 25,49.99 C32.79,49.99 39.76,46.42 44.34,40.83 L40.24,37.93 Z\" />\r\n </g>\r\n\r\n </svg>\r\n</div>" }]
41
+ }], ctorParameters: function () { return [{ type: i1.SplashService }]; } });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsYXNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3NwbGFzaC9zcGxhc2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvc3BsYXNoL3NwbGFzaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFNaEQsTUFBTSxPQUFPLGVBQWU7SUFRMUIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQaEQsZ0RBQWdEO1FBQ3pDLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFdEMsMENBQTBDO1FBQ2xDLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVHLENBQUM7SUFFckQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixHQUFHLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxFQUFFO1lBQ2hCLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkZBQTZGO2dCQUM3RixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRSxFQUFFO29CQUM3RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7NEdBaENVLGVBQWU7Z0dBQWYsZUFBZSxpRENUNUIsaXpDQXNCTTsyRkRiTyxlQUFlO2tCQUozQixTQUFTOytCQUNFLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNwbGFzaFNlcnZpY2UgfSBmcm9tICcuL3NwbGFzaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXNwbGFzaCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NwbGFzaC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwbGFzaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvKiogU2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc3BsYXNoIGRpc3BsYXkgKi9cclxuICBwdWJsaWMgaXNWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc3RvcEFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRW1pdHMgd2hlbiB0aGUgc2VydmljZSBpcyBkZXN0cm95ZWQgKi9cclxuICBwcml2YXRlIGRlc3Ryb3llZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3BsYXNoU2VydmljZTogU3BsYXNoU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zcGxhc2hTZXJ2aWNlLnNwbGFzaFZpc2liaWxpdHkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSxcclxuICAgICAgdGFwKGFzeW5jIHZhbHVlID0+IHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuc3RvcEFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBQcmV2ZW50IGFuaW1hdGlvbiBmcm9tIGNvbnRpbnVpbmcgYWZ0ZXIgc3BsYXNoIHNjcmVlbiBpcyBoaWRkZW5cclxuICAgICAgICAgIC8vIGJ1dCBpZiB3ZSBoaWRlIGl0IHRoZW4gc2hvdyB3aGlsZSB0aGUgdGltZXIgaXMgcnVubmluZywgZG9uJ3Qgc3RvcCB0aGUgYW5pbWF0aW9uIGFmdGVyIGFsbFxyXG4gICAgICAgICAgdGltZXIoMTAwMCkucGlwZSh0YWtlVW50aWwodGhpcy5zcGxhc2hTZXJ2aWNlLnNwbGFzaFZpc2liaWxpdHkpKS5zdWJzY3JpYmUoKCk9PntcclxuICAgICAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKHNob3dTcGxhc2ggPT4ge1xyXG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IHNob3dTcGxhc2g7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImFwcC1zcGxhc2hcIlxyXG4gICAgIFtjbGFzcy5hcHAtbG9hZGVkXT1cIiFpc1Zpc2libGVcIj5cclxuXHJcbiAgICA8IS0tIFRoaXMgaXMgdGhlIHJhdyBpY29uLnN2ZyBmaWxlIHNvIHdlIGNhbiBhbmltYXRlIGl0IC0tPlxyXG4gICAgPHN2ZyBbY2xhc3MuZC1ub25lXT1cInN0b3BBbmltYXRpb25cIiBcclxuICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgIHdpZHRoPVwiNTBcIlxyXG4gICAgICAgICBoZWlnaHQ9XCI1MFwiXHJcbiAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICA8Zz5cclxuICAgICAgICAgICAgPGc+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiI0EwQUQzOVwiXHJcbiAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJub256ZXJvXCJcclxuICAgICAgICAgICAgICAgIGQ9XCJNMzQuOTMsMzIuMjUgTDM0LjkzLDM3LjI1IEwxNS4yMSwzNy4yNSBMMTUuMjEsMzIuMjUgTDM0LjkzLDMyLjI1IFogTTI4LjQ1LDIyLjQ4IEwyOC40NSwyNy40OCBMMTUuMjEsMjcuNDggTDE1LjIxLDIyLjQ4IEwyOC40NSwyMi40OCBaIE0zNC45MywxMi43MSBMMzQuOTMsMTcuNzEgTDE1LjIxLDE3LjcxIEwxNS4yMSwxMi43MSBMMzQuOTMsMTIuNzEgWlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiI0EwQUQzOVwiXHJcbiAgICAgICAgICAgICAgICBkPVwiTTI0Ljk5LDUgQzMxLjEsNSAzNi41Niw3Ljc1IDQwLjIzLDEyLjA3IEw0NC4zMyw5LjE2IEMzOS43NSwzLjU3IDMyLjc4LDAgMjQuOTksMCBDMTcuMiwwIDEwLjIzLDMuNTcgNS42NSw5LjE2IEw5Ljc1LDEyLjA3IEMxMy40Miw3Ljc1IDE4Ljg4LDUgMjQuOTksNSBaXCIgLz5cclxuICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzE3MzAzQlwiXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNNDAuMjQsMzcuOTMgQzM2LjU3LDQyLjI1IDMxLjExLDQ1IDI1LDQ1IEMxOC44OSw0NSAxMy40Myw0Mi4yNSA5Ljc2LDM3LjkzIEw5Ljc4LDM3LjkyIEM2LjgyLDM0LjQzIDUsMjkuOTQgNSwyNSBDNSwyMS44NiA1Ljc0LDE4LjkxIDcuMDMsMTYuMjYgTDIuODksMTMuMzMgQzEuMDUsMTYuODEgMCwyMC43OCAwLDI1IEMwLDMxLjAxIDIuMTMsMzYuNTIgNS42Niw0MC44MyBMNS42Niw0MC44MyBDMTAuMjQsNDYuNDIgMTcuMjEsNDkuOTkgMjUsNDkuOTkgQzMyLjc5LDQ5Ljk5IDM5Ljc2LDQ2LjQyIDQ0LjM0LDQwLjgzIEw0MC4yNCwzNy45MyBaXCIgLz5cclxuICAgICAgICA8L2c+XHJcblxyXG4gICAgPC9zdmc+XHJcbjwvZGl2PiJdfQ==
@@ -0,0 +1,35 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class SplashService {
5
+ constructor() {
6
+ /** Used to interact with the splash component
7
+ * The splash component will subscribe to this and any components
8
+ * that wish to bring the splash visible can use this to communicate
9
+ * with the splash component.
10
+ */
11
+ this._splashVisibility = new Subject();
12
+ this.splashVisibility = this._splashVisibility;
13
+ }
14
+ /**
15
+ * Shows the splash screen
16
+ */
17
+ showSplash() {
18
+ this._splashVisibility.next(true);
19
+ }
20
+ /**
21
+ * Hides the splash screen
22
+ */
23
+ hideSplash() {
24
+ this._splashVisibility.next(false);
25
+ }
26
+ }
27
+ SplashService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SplashService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
28
+ SplashService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SplashService, providedIn: 'root' });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SplashService, decorators: [{
30
+ type: Injectable,
31
+ args: [{
32
+ providedIn: 'root'
33
+ }]
34
+ }], ctorParameters: function () { return []; } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsYXNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9zcGxhc2gvc3BsYXNoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQUszQyxNQUFNLE9BQU8sYUFBYTtJQVN4QjtRQVJBOzs7O1dBSUc7UUFDSyxzQkFBaUIsR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNyRCxxQkFBZ0IsR0FBd0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBRXRELENBQUM7SUFFakI7O09BRUc7SUFDSSxVQUFVO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDOzswR0F2QlUsYUFBYTs4R0FBYixhQUFhLGNBRlosTUFBTTsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BsYXNoU2VydmljZSB7XHJcbiAgLyoqIFVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc3BsYXNoIGNvbXBvbmVudFxyXG4gICAqICBUaGUgc3BsYXNoIGNvbXBvbmVudCB3aWxsIHN1YnNjcmliZSB0byB0aGlzIGFuZCBhbnkgY29tcG9uZW50c1xyXG4gICAqICB0aGF0IHdpc2ggdG8gYnJpbmcgdGhlIHNwbGFzaCB2aXNpYmxlIGNhbiB1c2UgdGhpcyB0byBjb21tdW5pY2F0ZVxyXG4gICAqICB3aXRoIHRoZSBzcGxhc2ggY29tcG9uZW50LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NwbGFzaFZpc2liaWxpdHk6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyBzcGxhc2hWaXNpYmlsaXR5OiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fc3BsYXNoVmlzaWJpbGl0eTtcclxuICBcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93cyB0aGUgc3BsYXNoIHNjcmVlblxyXG4gICAqL1xyXG4gIHB1YmxpYyBzaG93U3BsYXNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3BsYXNoVmlzaWJpbGl0eS5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGlkZXMgdGhlIHNwbGFzaCBzY3JlZW5cclxuICAgKi9cclxuICBwdWJsaWMgaGlkZVNwbGFzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NwbGFzaFZpc2liaWxpdHkubmV4dChmYWxzZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { Component, EventEmitter, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ResizableColumnComponent {
4
+ constructor(el) {
5
+ this.el = el;
6
+ this.onResize = new EventEmitter();
7
+ }
8
+ emitWidth(width) {
9
+ this.onResize.emit(width);
10
+ }
11
+ }
12
+ ResizableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ResizableColumnComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
13
+ ResizableColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: ResizableColumnComponent, selector: "th.is-resizable", outputs: { onResize: "onResize" }, ngImport: i0, template: "<div class=\"content-wrapper\">\r\n <div class=\"content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n<div class=\"handle\"></div>\r\n" });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ResizableColumnComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'th.is-resizable', template: "<div class=\"content-wrapper\">\r\n <div class=\"content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n<div class=\"handle\"></div>\r\n" }]
17
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { onResize: [{
18
+ type: Output
19
+ }] } });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNvbHVtbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9yZXNpemFibGUtY29sdW1uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3Jlc2l6YWJsZS1jb2x1bW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU01RSxNQUFNLE9BQU8sd0JBQXdCO0lBSW5DLFlBQW1CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBRnZCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRVgsQ0FBQztJQUUvQixTQUFTLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDOztxSEFSVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwwRkNOckMseUpBTUE7MkZEQWEsd0JBQXdCO2tCQUpwQyxTQUFTOytCQUNFLGlCQUFpQjtpR0FLakIsUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGguaXMtcmVzaXphYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzaXphYmxlLWNvbHVtbi5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCB7XHJcblxyXG4gIEBPdXRwdXQoKSBvblJlc2l6ZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHsgfVxyXG5cclxuICBwdWJsaWMgZW1pdFdpZHRoKHdpZHRoOiBudW1iZXIpIHtcclxuICAgIHRoaXMub25SZXNpemUuZW1pdCh3aWR0aCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImhhbmRsZVwiPjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,227 @@
1
+ import { Directive, Inject, Input } from '@angular/core';
2
+ import { DOCUMENT } from '@angular/common';
3
+ import { ResizableBase } from '../resizable/resizable-base';
4
+ import { Subject } from 'rxjs';
5
+ import { takeUntil } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../core/cache.service";
8
+ /**
9
+ * Add the ability to resize columns to a standard HTML table.
10
+ * Specify a column as resizable by adding the .is-resizable class to a <th>.
11
+ *
12
+ * Usage:
13
+ ```html
14
+ <table [ecResizableTable]>
15
+ <colgroup><col><col><col></colgroup>
16
+ <thead>
17
+ <tr>
18
+ <th class="is-resizable">Resizable</th>
19
+ <th class="is-resizable">Resizable</th>
20
+ <th>Static</th>
21
+ </tr>
22
+ </thead>
23
+ ...
24
+ </table>
25
+
26
+ ```
27
+ * Note: this directive is meant to be used internally with the TableComponent
28
+ * and is not exposed in the public-api of the library
29
+ */
30
+ export class ResizableTableDirective extends ResizableBase {
31
+ constructor(el, renderer, cacheService, document) {
32
+ super(renderer, cacheService, document);
33
+ this.el = el;
34
+ this.sortableTable = false;
35
+ /**
36
+ * Stored reference to the <col> element children. Will throw if none are found. Will
37
+ * warn if the number of <col> elements do not match the number of <th> elements
38
+ */
39
+ this.cols = [];
40
+ /**
41
+ * The widths of each table column. These are updated as columns are resized and
42
+ * are used to calculate the new table width.
43
+ */
44
+ this.colWidths = [];
45
+ /**
46
+ * The current table width
47
+ */
48
+ this.currentTableWidth = 0;
49
+ /**
50
+ * The width of the table when the component was initialized. The table cannot
51
+ * be shrunk below this width. If a column resize would cause the current table
52
+ * width to be below this value, the last column is widened instead.
53
+ */
54
+ this.minTableWidth = 0;
55
+ /**
56
+ * The width the column can not be resized below.
57
+ */
58
+ this.minColWidth = 32;
59
+ this.destroyed = new Subject();
60
+ }
61
+ ngOnInit() {
62
+ this.initResizableColumns();
63
+ this.resizableColumns.changes.pipe(takeUntil(this.destroyed)).subscribe(() => this.initResizableColumns());
64
+ }
65
+ ngOnDestroy() {
66
+ this.destroyed.next();
67
+ this.destroyed.complete();
68
+ }
69
+ /**
70
+ * Initialize
71
+ * * Check that the host element is a table and that <col> elements are present
72
+ * * Save the initial width of table as the minimum table width
73
+ * * Store a reference to all <col> elements
74
+ * * Add a handle to each resizable column and set up mousedown listeners to start dragging
75
+ */
76
+ initResizableColumns() {
77
+ if (this.isResizable !== false) {
78
+ this.tableEl = this.el.nativeElement;
79
+ if (this.tableEl.tagName !== 'TABLE') {
80
+ throw new Error(`The 'ecResizableTable' directive can only be placed on a <table> element.`);
81
+ }
82
+ if (this.sortableTable) {
83
+ this.minColWidth = 48;
84
+ }
85
+ const headers = this.tableEl.querySelectorAll('th');
86
+ const cols = this.tableEl.querySelectorAll('col');
87
+ this.cols = [];
88
+ this.colWidths = [];
89
+ if (cols.length === 0) {
90
+ const fragment = this.document.createDocumentFragment();
91
+ const colgroup = this.renderer.createElement('colgroup');
92
+ headers.forEach(() => {
93
+ const col = this.renderer.createElement('col');
94
+ this.cols.push(col);
95
+ this.renderer.appendChild(fragment, col);
96
+ });
97
+ this.renderer.appendChild(colgroup, fragment);
98
+ this.renderer.insertBefore(this.tableEl, colgroup, this.tableEl.firstElementChild);
99
+ }
100
+ else {
101
+ cols.forEach(colEl => {
102
+ this.cols.push(colEl);
103
+ });
104
+ if (headers.length !== cols.length) {
105
+ console.warn(`There are ${headers.length} <th> elements and ${this.cols.length} <col> elements in this this table. The number of columns and table headers must match. <th> elements with a 'colspan' attribute are currently not supported.`);
106
+ }
107
+ }
108
+ const lastResizableIndex = Array.from(headers).reverse().findIndex(el => el.classList.contains('is-resizable')) + 1;
109
+ this.lastColIndex = this.cols.length - lastResizableIndex;
110
+ headers.forEach(th => {
111
+ if (th.classList.contains('is-resizable')) {
112
+ const handle = th.querySelector('.handle');
113
+ this.renderer.listen(handle, 'mousedown', (event) => {
114
+ this.currentEl = th;
115
+ this.startDrag(event);
116
+ });
117
+ }
118
+ });
119
+ // We need to wait a tick for a view that was previously loaded to be removed
120
+ // from the DOM and allow this directive's parent view to fully expand in the
121
+ // viewport before getting widths.
122
+ window.setTimeout(() => {
123
+ this.setInitialWidths(headers);
124
+ });
125
+ }
126
+ }
127
+ /**
128
+ * Update the column with the calculated width while resizing.
129
+ * If the column is narrowed so that the table would be narrower than the min-width,
130
+ * expand the last column. If the table is then widened, return the last column
131
+ * to its initial width.
132
+ * @param width
133
+ */
134
+ setWidth(width) {
135
+ if (this.currentEl) {
136
+ const cellIndex = this.currentEl.cellIndex;
137
+ width = Math.max(width, this.minColWidth);
138
+ this.colWidths[cellIndex] = width;
139
+ this.renderer.setStyle(this.cols[cellIndex], 'width', width + 'px');
140
+ let totalColWidths = 0;
141
+ this.colWidths.forEach(w => {
142
+ totalColWidths += w;
143
+ });
144
+ const containerWidth = this.containerEl.nativeElement.clientWidth;
145
+ if (this.minTableWidth !== containerWidth) {
146
+ this.minTableWidth = containerWidth;
147
+ }
148
+ const diff = totalColWidths - this.minTableWidth;
149
+ if (diff < 0) {
150
+ const colIndex = cellIndex === this.lastColIndex ? this.lastColIndex - 1 : this.lastColIndex;
151
+ const colWidth = Math.max(this.colWidths[colIndex] + Math.abs(diff), this.minColWidth);
152
+ this.renderer.setStyle(this.cols[colIndex], 'width', colWidth + 'px');
153
+ this.renderer.setStyle(this.tableEl, 'width', this.minTableWidth + 'px');
154
+ }
155
+ else {
156
+ this.renderer.setStyle(this.tableEl, 'width', totalColWidths + 'px');
157
+ }
158
+ }
159
+ }
160
+ stopDrag(event) {
161
+ super.stopDrag(event);
162
+ if (this.currentEl) {
163
+ const cellIndex = this.currentEl.cellIndex;
164
+ const currentCol = this.resizableColumns.find(col => col.el.nativeElement.cellIndex === cellIndex);
165
+ if (currentCol) {
166
+ currentCol.emitWidth(Math.round(this.colWidths[cellIndex]));
167
+ }
168
+ }
169
+ }
170
+ /**
171
+ * Capture the initial width of the table and the table headers.
172
+ * @param headers
173
+ */
174
+ setInitialWidths(headers) {
175
+ this.currentTableWidth = this.tableEl.offsetWidth;
176
+ this.minTableWidth = this.containerEl.nativeElement.clientWidth;
177
+ headers.forEach(th => {
178
+ this.colWidths[th.cellIndex] = th.offsetWidth;
179
+ const width = th.style.width;
180
+ if (width) {
181
+ this.renderer.setStyle(this.cols[th.cellIndex], 'width', width);
182
+ this.renderer.removeStyle(th, 'width');
183
+ }
184
+ });
185
+ let totalColWidths = 0;
186
+ this.colWidths.forEach(w => {
187
+ totalColWidths += w;
188
+ });
189
+ // Check to see if our total column widths is greater than our table width
190
+ let colWidthDifference = totalColWidths - this.currentTableWidth;
191
+ // If the total column widths is greater than zero then its larger than our table container
192
+ // To prevent a horizontal scroll we will bump a columns width down to match the table size
193
+ if (colWidthDifference > 0) {
194
+ // Ideally we will choose the second to the last column, but if there is only one that'll do
195
+ let columnToReduce = headers.length > 1 ? headers.length - 2 : 0;
196
+ // Shrink the column
197
+ let th = headers[columnToReduce];
198
+ this.colWidths[th.cellIndex] = th.offsetWidth - colWidthDifference;
199
+ this.renderer.setStyle(this.cols[th.cellIndex], 'width', this.colWidths[th.cellIndex] + 'px');
200
+ // Reduce our totalColWidths to reflect
201
+ totalColWidths = totalColWidths - colWidthDifference;
202
+ }
203
+ this.renderer.setStyle(this.tableEl, 'width', Math.max(this.currentTableWidth, totalColWidths) + 'px');
204
+ this.renderer.setStyle(this.tableEl, 'minWidth', '100%');
205
+ }
206
+ }
207
+ ResizableTableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ResizableTableDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.CacheService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
208
+ ResizableTableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ResizableTableDirective, selector: "[ecResizableTable]", inputs: { isResizable: ["ecResizableTable", "isResizable"], containerEl: "containerEl", sortableTable: "sortableTable", resizableColumns: "resizableColumns" }, usesInheritance: true, ngImport: i0 });
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ResizableTableDirective, decorators: [{
210
+ type: Directive,
211
+ args: [{
212
+ selector: '[ecResizableTable]'
213
+ }]
214
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.CacheService }, { type: Document, decorators: [{
215
+ type: Inject,
216
+ args: [DOCUMENT]
217
+ }] }]; }, propDecorators: { isResizable: [{
218
+ type: Input,
219
+ args: ['ecResizableTable']
220
+ }], containerEl: [{
221
+ type: Input
222
+ }], sortableTable: [{
223
+ type: Input
224
+ }], resizableColumns: [{
225
+ type: Input
226
+ }] } });
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLXRhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3Jlc2l6YWJsZS10YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUMsTUFBTSxFQUFFLEtBQUssRUFBd0IsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRzNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFJSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsYUFBYTtJQStDeEQsWUFDVSxFQUFjLEVBQ3RCLFFBQW1CLEVBQ25CLFlBQTBCLEVBQ1IsUUFBa0I7UUFFcEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFMaEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQTdDZixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQVd4Qzs7O1dBR0c7UUFDSyxTQUFJLEdBQTBCLEVBQUUsQ0FBQztRQUV6Qzs7O1dBR0c7UUFDSyxjQUFTLEdBQWEsRUFBRSxDQUFDO1FBRWpDOztXQUVHO1FBQ0ssc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRXRDOzs7O1dBSUc7UUFDSyxrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUVsQzs7V0FFRztRQUNLLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBSXpCLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVNqRCxDQUFDO0lBRU0sUUFBUTtR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LENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxDQUFDOztvSEFoT1UsdUJBQXVCLGlHQW1EeEIsUUFBUTt3R0FuRFAsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtpQkFDL0I7c0lBb0QrQixRQUFROzBCQUFuQyxNQUFNOzJCQUFDLFFBQVE7NENBbERTLFdBQVc7c0JBQXJDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUNoQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBPbkluaXQsIFJlbmRlcmVyMiwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBSZXNpemFibGVCYXNlIH0gZnJvbSAnLi4vcmVzaXphYmxlL3Jlc2l6YWJsZS1iYXNlJztcclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXphYmxlLWNvbHVtbi5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEFkZCB0aGUgYWJpbGl0eSB0byByZXNpemUgY29sdW1ucyB0byBhIHN0YW5kYXJkIEhUTUwgdGFibGUuXHJcbiAqIFNwZWNpZnkgYSBjb2x1bW4gYXMgcmVzaXphYmxlIGJ5IGFkZGluZyB0aGUgLmlzLXJlc2l6YWJsZSBjbGFzcyB0byBhIDx0aD4uXHJcbiAqIFxyXG4gKiBVc2FnZTpcclxuICBgYGBodG1sXHJcbiAgPHRhYmxlIFtlY1Jlc2l6YWJsZVRhYmxlXT5cclxuICAgIDxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPlxyXG4gICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoIGNsYXNzPVwiaXMtcmVzaXphYmxlXCI+UmVzaXphYmxlPC90aD5cclxuICAgICAgICA8dGggY2xhc3M9XCJpcy1yZXNpemFibGVcIj5SZXNpemFibGU8L3RoPlxyXG4gICAgICAgIDx0aD5TdGF0aWM8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIC4uLlxyXG4gIDwvdGFibGU+XHJcblxyXG4gIGBgYFxyXG4gICogTm90ZTogdGhpcyBkaXJlY3RpdmUgaXMgbWVhbnQgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHdpdGggdGhlIFRhYmxlQ29tcG9uZW50XHJcbiAgKiBhbmQgaXMgbm90IGV4cG9zZWQgaW4gdGhlIHB1YmxpYy1hcGkgb2YgdGhlIGxpYnJhcnlcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2VjUmVzaXphYmxlVGFibGVdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzaXphYmxlVGFibGVEaXJlY3RpdmUgZXh0ZW5kcyBSZXNpemFibGVCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgnZWNSZXNpemFibGVUYWJsZScpIGlzUmVzaXphYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGNvbnRhaW5lckVsITogRWxlbWVudFJlZjtcclxuICBASW5wdXQoKSBzb3J0YWJsZVRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBcclxuICAgKiBVc2VkIHRvIG5vdGlmeSB0aGUgcmVzaXphYmxlIGRpcmVjdGl2ZSB0aGF0IHRoZSBjb2x1bW5zIGFyZSByZWFkeSB0byBiZSBjb25maWd1cmVkLlxyXG4gICAqIE11c3QgYmUgdXNlZCBpZiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgY2FuIGNoYW5nZSBvdmVyIHRoZSB0YWJsZSdzIGxpZmVjeWNsZS5cclxuICAgKi9cclxuICBASW5wdXQoKSByZXNpemFibGVDb2x1bW5zITogUXVlcnlMaXN0PFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudD47XHJcblxyXG4gIC8qKiBUaGUgaG9zdCA8dGFibGU+IGVsZW1lbnQuIFdpbGwgdGhyb3cgaWYgaG9zdCBlbGVtZW50IGlzIG5vdCBhIDx0YWJsZT4gKi9cclxuICBwcml2YXRlIHRhYmxlRWwhOiBIVE1MVGFibGVFbGVtZW50O1xyXG5cclxuICAvKiogXHJcbiAgICogU3RvcmVkIHJlZmVyZW5jZSB0byB0aGUgPGNvbD4gZWxlbWVudCBjaGlsZHJlbi4gV2lsbCB0aHJvdyBpZiBub25lIGFyZSBmb3VuZC4gV2lsbFxyXG4gICAqIHdhcm4gaWYgdGhlIG51bWJlciBvZiA8Y29sPiBlbGVtZW50cyBkbyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiA8dGg+IGVsZW1lbnRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb2xzOiBIVE1MVGFibGVDb2xFbGVtZW50W10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHdpZHRocyBvZiBlYWNoIHRhYmxlIGNvbHVtbi4gVGhlc2UgYXJlIHVwZGF0ZWQgYXMgY29sdW1ucyBhcmUgcmVzaXplZCBhbmRcclxuICAgKiBhcmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIG5ldyB0YWJsZSB3aWR0aC5cclxuICAgKi9cclxuICBwcml2YXRlIGNvbFdpZHRoczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGN1cnJlbnQgdGFibGUgd2lkdGhcclxuICAgKi9cclxuICBwcml2YXRlIGN1cnJlbnRUYWJsZVdpZHRoOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgd2lkdGggb2YgdGhlIHRhYmxlIHdoZW4gdGhlIGNvbXBvbmVudCB3YXMgaW5pdGlhbGl6ZWQuIFRoZSB0YWJsZSBjYW5ub3RcclxuICAgKiBiZSBzaHJ1bmsgYmVsb3cgdGhpcyB3aWR0aC4gSWYgYSBjb2x1bW4gcmVzaXplIHdvdWxkIGNhdXNlIHRoZSBjdXJyZW50IHRhYmxlXHJcbiAgICogd2lkdGggdG8gYmUgYmVsb3cgdGhpcyB2YWx1ZSwgdGhlIGxhc3QgY29sdW1uIGlzIHdpZGVuZWQgaW5zdGVhZC5cclxuICAgKi9cclxuICBwcml2YXRlIG1pblRhYmxlV2lkdGg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB3aWR0aCB0aGUgY29sdW1uIGNhbiBub3QgYmUgcmVzaXplZCBiZWxvdy5cclxuICAgKi9cclxuICBwcml2YXRlIG1pbkNvbFdpZHRoOiBudW1iZXIgPSAzMjtcclxuXHJcbiAgcHJpdmF0ZSBsYXN0Q29sSW5kZXghOiBudW1iZXI7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IERvY3VtZW50XHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZW5kZXJlciwgY2FjaGVTZXJ2aWNlLCBkb2N1bWVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRSZXNpemFibGVDb2x1bW5zKCk7XHJcblxyXG4gICAgdGhpcy5yZXNpemFibGVDb2x1bW5zLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5pbml0UmVzaXphYmxlQ29sdW1ucygpKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVcclxuICAgKiAqIENoZWNrIHRoYXQgdGhlIGhvc3QgZWxlbWVudCBpcyBhIHRhYmxlIGFuZCB0aGF0IDxjb2w+IGVsZW1lbnRzIGFyZSBwcmVzZW50XHJcbiAgICogKiBTYXZlIHRoZSBpbml0aWFsIHdpZHRoIG9mIHRhYmxlIGFzIHRoZSBtaW5pbXVtIHRhYmxlIHdpZHRoXHJcbiAgICogKiBTdG9yZSBhIHJlZmVyZW5jZSB0byBhbGwgPGNvbD4gZWxlbWVudHNcclxuICAgKiAqIEFkZCBhIGhhbmRsZSB0byBlYWNoIHJlc2l6YWJsZSBjb2x1bW4gYW5kIHNldCB1cCBtb3VzZWRvd24gbGlzdGVuZXJzIHRvIHN0YXJ0IGRyYWdnaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpbml0UmVzaXphYmxlQ29sdW1ucygpIHtcclxuICAgIGlmICh0aGlzLmlzUmVzaXphYmxlICE9PSBmYWxzZSkge1xyXG5cclxuICAgICAgdGhpcy50YWJsZUVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBpZiAodGhpcy50YWJsZUVsLnRhZ05hbWUgIT09ICdUQUJMRScpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnZWNSZXNpemFibGVUYWJsZScgZGlyZWN0aXZlIGNhbiBvbmx5IGJlIHBsYWNlZCBvbiBhIDx0YWJsZT4gZWxlbWVudC5gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc29ydGFibGVUYWJsZSkge1xyXG4gICAgICAgIHRoaXMubWluQ29sV2lkdGggPSA0ODtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy50YWJsZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJyk7XHJcbiAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLnRhYmxlRWwucXVlcnlTZWxlY3RvckFsbCgnY29sJyk7XHJcbiAgICAgIHRoaXMuY29scyA9IFtdO1xyXG4gICAgICB0aGlzLmNvbFdpZHRocyA9IFtdO1xyXG4gIFxyXG4gICAgICBpZiAoY29scy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG4gICAgICAgIGNvbnN0IGNvbGdyb3VwOiBIVE1MRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnY29sZ3JvdXAnKTtcclxuICAgICAgICBoZWFkZXJzLmZvckVhY2goKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29sID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdjb2wnKTtcclxuICAgICAgICAgIHRoaXMuY29scy5wdXNoKGNvbCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGZyYWdtZW50LCBjb2wpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoY29sZ3JvdXAsIGZyYWdtZW50KTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZSh0aGlzLnRhYmxlRWwsIGNvbGdyb3VwLCB0aGlzLnRhYmxlRWwuZmlyc3RFbGVtZW50Q2hpbGQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbHMuZm9yRWFjaChjb2xFbCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbHMucHVzaChjb2xFbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoICE9PSBjb2xzLmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKGBUaGVyZSBhcmUgJHtoZWFkZXJzLmxlbmd0aH0gPHRoPiBlbGVtZW50cyBhbmQgJHt0aGlzLmNvbHMubGVuZ3RofSA8Y29sPiBlbGVtZW50cyBpbiB0aGlzIHRoaXMgdGFibGUuIFRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgdGFibGUgaGVhZGVycyBtdXN0IG1hdGNoLiA8dGg+IGVsZW1lbnRzIHdpdGggYSAnY29sc3BhbicgYXR0cmlidXRlIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGxhc3RSZXNpemFibGVJbmRleCA9IEFycmF5LmZyb20oaGVhZGVycykucmV2ZXJzZSgpLmZpbmRJbmRleChlbCA9PiBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLXJlc2l6YWJsZScpKSArIDE7XHJcbiAgICAgIHRoaXMubGFzdENvbEluZGV4ID0gdGhpcy5jb2xzLmxlbmd0aCAtIGxhc3RSZXNpemFibGVJbmRleDtcclxuICBcclxuICAgICAgaGVhZGVycy5mb3JFYWNoKHRoID0+IHtcclxuICAgICAgICBpZiAodGguY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1yZXNpemFibGUnKSkge1xyXG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gdGgucXVlcnlTZWxlY3RvcignLmhhbmRsZScpO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGhhbmRsZSwgJ21vdXNlZG93bicsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRFbCA9IHRoO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZyhldmVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAvLyBXZSBuZWVkIHRvIHdhaXQgYSB0aWNrIGZvciBhIHZpZXcgdGhhdCB3YXMgcHJldmlvdXNseSBsb2FkZWQgdG8gYmUgcmVtb3ZlZFxyXG4gICAgICAvLyBmcm9tIHRoZSBET00gYW5kIGFsbG93IHRoaXMgZGlyZWN0aXZlJ3MgcGFyZW50IHZpZXcgdG8gZnVsbHkgZXhwYW5kIGluIHRoZSBcclxuICAgICAgLy8gdmlld3BvcnQgYmVmb3JlIGdldHRpbmcgd2lkdGhzLlxyXG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsV2lkdGhzKGhlYWRlcnMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY29sdW1uIHdpdGggdGhlIGNhbGN1bGF0ZWQgd2lkdGggd2hpbGUgcmVzaXppbmcuXHJcbiAgICogSWYgdGhlIGNvbHVtbiBpcyBuYXJyb3dlZCBzbyB0aGF0IHRoZSB0YWJsZSB3b3VsZCBiZSBuYXJyb3dlciB0aGFuIHRoZSBtaW4td2lkdGgsXHJcbiAgICogZXhwYW5kIHRoZSBsYXN0IGNvbHVtbi4gSWYgdGhlIHRhYmxlIGlzIHRoZW4gd2lkZW5lZCwgcmV0dXJuIHRoZSBsYXN0IGNvbHVtblxyXG4gICAqIHRvIGl0cyBpbml0aWFsIHdpZHRoLlxyXG4gICAqIEBwYXJhbSB3aWR0aCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0V2lkdGgod2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEVsKSB7XHJcbiAgICAgIGNvbnN0IGNlbGxJbmRleDogbnVtYmVyID0gKDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD50aGlzLmN1cnJlbnRFbCkuY2VsbEluZGV4O1xyXG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB0aGlzLm1pbkNvbFdpZHRoKTtcclxuICAgICAgdGhpcy5jb2xXaWR0aHNbY2VsbEluZGV4XSA9IHdpZHRoO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY29sc1tjZWxsSW5kZXhdLCAnd2lkdGgnLCB3aWR0aCArICdweCcpO1xyXG5cclxuICAgICAgbGV0IHRvdGFsQ29sV2lkdGhzID0gMDtcclxuICAgICAgdGhpcy5jb2xXaWR0aHMuZm9yRWFjaCh3ID0+IHtcclxuICAgICAgICB0b3RhbENvbFdpZHRocyArPSB3O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gKDxIVE1MRGl2RWxlbWVudD50aGlzLmNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQpLmNsaWVudFdpZHRoO1xyXG4gICAgICBpZiAodGhpcy5taW5UYWJsZVdpZHRoICE9PSBjb250YWluZXJXaWR0aCkge1xyXG4gICAgICAgIHRoaXMubWluVGFibGVXaWR0aCA9IGNvbnRhaW5lcldpZHRoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkaWZmID0gdG90YWxDb2xXaWR0aHMgLSB0aGlzLm1pblRhYmxlV2lkdGg7ICAgICAgXHJcbiAgICAgIGlmIChkaWZmIDwgMCkge1xyXG4gICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY2VsbEluZGV4ID09PSB0aGlzLmxhc3RDb2xJbmRleCA/IHRoaXMubGFzdENvbEluZGV4IC0gMSA6IHRoaXMubGFzdENvbEluZGV4O1xyXG4gICAgICAgIGNvbnN0IGNvbFdpZHRoID0gTWF0aC5tYXgodGhpcy5jb2xXaWR0aHNbY29sSW5kZXhdICsgTWF0aC5hYnMoZGlmZiksIHRoaXMubWluQ29sV2lkdGgpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2xzW2NvbEluZGV4XSwgJ3dpZHRoJywgY29sV2lkdGggKyAncHgnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGFibGVFbCwgJ3dpZHRoJywgdGhpcy5taW5UYWJsZVdpZHRoICsgJ3B4Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlRWwsICd3aWR0aCcsIHRvdGFsQ29sV2lkdGhzICsgJ3B4Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzdG9wRHJhZyhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgc3VwZXIuc3RvcERyYWcoZXZlbnQpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5jdXJyZW50RWwpIHtcclxuICAgICAgY29uc3QgY2VsbEluZGV4ID0gKDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD50aGlzLmN1cnJlbnRFbCkuY2VsbEluZGV4O1xyXG4gICAgICBjb25zdCBjdXJyZW50Q29sID0gdGhpcy5yZXNpemFibGVDb2x1bW5zLmZpbmQoY29sID0+ICg8SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ+Y29sLmVsLm5hdGl2ZUVsZW1lbnQpLmNlbGxJbmRleCA9PT0gY2VsbEluZGV4KTtcclxuICAgICAgaWYgKGN1cnJlbnRDb2wpIHtcclxuICAgICAgICBjdXJyZW50Q29sLmVtaXRXaWR0aChNYXRoLnJvdW5kKHRoaXMuY29sV2lkdGhzW2NlbGxJbmRleF0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FwdHVyZSB0aGUgaW5pdGlhbCB3aWR0aCBvZiB0aGUgdGFibGUgYW5kIHRoZSB0YWJsZSBoZWFkZXJzLlxyXG4gICAqIEBwYXJhbSBoZWFkZXJzIFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0SW5pdGlhbFdpZHRocyhoZWFkZXJzOiBOb2RlTGlzdE9mPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50Pik6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50VGFibGVXaWR0aCA9IHRoaXMudGFibGVFbC5vZmZzZXRXaWR0aDtcclxuICAgIHRoaXMubWluVGFibGVXaWR0aCA9IHRoaXMuY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuXHJcbiAgICBoZWFkZXJzLmZvckVhY2godGggPT4ge1xyXG4gICAgICB0aGlzLmNvbFdpZHRoc1t0aC5jZWxsSW5kZXhdID0gdGgub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGNvbnN0IHdpZHRoID0gdGguc3R5bGUud2lkdGg7XHJcbiAgICAgIGlmICh3aWR0aCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2xzW3RoLmNlbGxJbmRleF0sICd3aWR0aCcsIHdpZHRoKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoLCAnd2lkdGgnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHRvdGFsQ29sV2lkdGhzID0gMDtcclxuICAgIHRoaXMuY29sV2lkdGhzLmZvckVhY2godyA9PiB7XHJcbiAgICAgIHRvdGFsQ29sV2lkdGhzICs9IHc7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDaGVjayB0byBzZWUgaWYgb3VyIHRvdGFsIGNvbHVtbiB3aWR0aHMgaXMgZ3JlYXRlciB0aGFuIG91ciB0YWJsZSB3aWR0aFxyXG4gICAgbGV0IGNvbFdpZHRoRGlmZmVyZW5jZSA9IHRvdGFsQ29sV2lkdGhzIC0gdGhpcy5jdXJyZW50VGFibGVXaWR0aDtcclxuICAgXHJcbiAgICAvLyBJZiB0aGUgdG90YWwgY29sdW1uIHdpZHRocyBpcyBncmVhdGVyIHRoYW4gemVybyB0aGVuIGl0cyBsYXJnZXIgdGhhbiBvdXIgdGFibGUgY29udGFpbmVyXHJcbiAgICAvLyBUbyBwcmV2ZW50IGEgaG9yaXpvbnRhbCBzY3JvbGwgd2Ugd2lsbCBidW1wIGEgY29sdW1ucyB3aWR0aCBkb3duIHRvIG1hdGNoIHRoZSB0YWJsZSBzaXplXHJcbiAgICBpZiAoY29sV2lkdGhEaWZmZXJlbmNlID4gMCkge1xyXG4gICAgICAvLyBJZGVhbGx5IHdlIHdpbGwgY2hvb3NlIHRoZSBzZWNvbmQgdG8gdGhlIGxhc3QgY29sdW1uLCBidXQgaWYgdGhlcmUgaXMgb25seSBvbmUgdGhhdCdsbCBkb1xyXG4gICAgICBsZXQgY29sdW1uVG9SZWR1Y2UgPSBoZWFkZXJzLmxlbmd0aCA+IDEgPyBoZWFkZXJzLmxlbmd0aCAtIDIgOiAwO1xyXG5cclxuICAgICAgLy8gU2hyaW5rIHRoZSBjb2x1bW5cclxuICAgICAgbGV0IHRoID0gaGVhZGVyc1tjb2x1bW5Ub1JlZHVjZV07XHJcbiAgICAgIHRoaXMuY29sV2lkdGhzW3RoLmNlbGxJbmRleF0gPSB0aC5vZmZzZXRXaWR0aCAtIGNvbFdpZHRoRGlmZmVyZW5jZTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbHNbdGguY2VsbEluZGV4XSwgJ3dpZHRoJywgdGhpcy5jb2xXaWR0aHNbdGguY2VsbEluZGV4XSArICdweCcpO1xyXG4gICAgXHJcbiAgICAgIC8vIFJlZHVjZSBvdXIgdG90YWxDb2xXaWR0aHMgdG8gcmVmbGVjdFxyXG4gICAgICB0b3RhbENvbFdpZHRocyA9IHRvdGFsQ29sV2lkdGhzIC0gY29sV2lkdGhEaWZmZXJlbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsLCAnd2lkdGgnLCBNYXRoLm1heCh0aGlzLmN1cnJlbnRUYWJsZVdpZHRoLCB0b3RhbENvbFdpZHRocykgKyAncHgnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsLCAnbWluV2lkdGgnLCAnMTAwJScpO1xyXG4gIH1cclxufVxyXG4iXX0=